Sunflat のブログ

ソフトウェア開発についての話題が多いかも

たこ焼きを転がしてソースを塗るゲーム

を作ったので、遊んでみてね!

http://www3.sunflat.net/app/takoyaki/

ソースを塗るために接地面のテクスチャ上でのUV座標を計算して、毎フレームテクスチャを更新するあたりが難しかった。

このゲームの開発には、以下のアセットを利用しました。

そういえば、だいぶ前にそら豆でゴルフをするゲームも作ったので、そちらもどうぞ

http://www3.sunflat.net/app/beansgolf/

VirtualBox(Mac)のWindowsで、かなキーと英数キーを区別する

もう一つ、Karabinerの設定。

Mac OSXで、かなキーで日本語入力ON、英数キーで日本語入力OFFにしているのだが、同じ設定をVirtualBox上のWindowsで実現できなくて困った。 VirtualBox上のWindowsでは、かなキー、英数キーともに、全角・半角キーとして扱われてしまうっぽい。

Karabiner の private.xml に以下のような項目を追加して、有効にする。

<?xml version="1.0"?>
<root>
  <appdef>
    <appname>VirtualBox</appname>
    <equal>org.virtualbox.app.VirtualBoxVM</equal>
  </appdef>
  <item>
    <name>Use EISUU as CTRL + YEN in VirtualBox</name>
    <identifier>private.virtualbox_eisuu</identifier>
    <only>VirtualBox</only>
    <autogen>__KeyToKey__ KeyCode::JIS_EISUU, KeyCode::JIS_YEN, ModifierFlag::CONTROL_L</autogen>
  </item>
</root>

これで、VirtualBox上で英数キーをCtrl+¥キーとして認識できるので、あとはWindowsIME内でいい感じに設定すればOK。

IdeaVimで、Control+[ を Escape として使う。(Macの場合)

JISキーボードを使っていると、IdeaVim (IntelliJ IDEA, RubyMine, Android Studio などの、Vimプラグイン)で、Control + [ を押したときに、Escapeとして扱ってくれなくて困る。

検索してみると、~/.ideavimrcinoremap <C-]> <Esc> などと書く方法が見つかったけど、これだとコード補完のポップアップが出ている時に Control + [ が効かないっぽい。

そこで、Karabinerを使ってキーを入れ替えたらうまくいった。 private.xml に、以下のような設定を書いて、有効にすればOK。

<?xml version="1.0"?>
<root>
  <appdef>
    <appname>JetbrainsApps</appname>
    <prefix>com.jetbrains.</prefix>
  </appdef>
  <item>
    <name>Use CONTROL + JIS_BRACKET_LEFT as ESCAPE in JetbrainsApps</name>
    <identifier>private.jetbrains_control_jis_bracket_left</identifier>
    <only>JetbrainsApps</only>
    <autogen>
      __KeyToKey__ KeyCode::JIS_BRACKET_LEFT, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL,
      KeyCode::ESCAPE
    </autogen>
  </item>
</root>

ちなみに、¥ と \ を入れ替えるのは、普通に ~/.ideavimrc に書けば良さそう。

inoremap ¥ \
inoremap \ ¥

USキーボードを使ったほうが良いのかなぁ

MSX-BASICのVPOKE命令で遊ぼう

※この記事はMSX Advent Calendar 2015の9日目の記事です。

www.adventar.org

こんにちは、sunflatです。 好きなMSX-BASICの命令はVPOKE命令です。

というわけで、今日はVPOKE命令で遊んでみましょう。

VPOKE命令とは

VPOKE命令は、VRAMにデータを直接書き込むための命令です。

MSXは画面表示のためにVDP(ビデオ・ディスプレイ・プロセッサ)というグラフィックチップを搭載しており、このVDPで使われるメモリがVRAMです。例えばMSX1規格の場合、16KBのVRAMが搭載されています。

VRAMにデータを書き込むことにより、フォント(文字の形状)のデータ、画面の表示内容、スプライト(画面上に表示されるキャラクター)の画像などを変更できます。

フォントのデータを変更してみる

今回は、フォントのデータを変更して遊んでみることにします。

早速プログラムを入力していきましょう。AUTO命令を使うと、行番号を10刻みで自動で振ってくれるので便利ですね。

f:id:sunflat:20151209081854p:plain

このプログラムは、フォントの画像データを、右に1ピクセルずらしたものと重ね合わせることにより、文字を太くします。(ついでに結果表示のため、全ての文字を画面に表示)

MSXのSCREEN 1(画面モード)では、文字の画像は8x8ピクセルです。横8ピクセルを1バイトで表現し、それが縦8ピクセル分続くため、フォントのデータは1文字あたり8バイトで表現できます。

VRAMの先頭(0番地)から、各文字8バイトづつ、256文字分のフォントのデータが格納されています。これを書き換えています。

プログラムの簡単な解説

20行では文字コード(変数I)に対するFORループ、30行では文字の画像の縦座標(変数J)に対するFORループを開始しています。

40行ではVRAMのアドレスを計算し、50行ではVPEEK関数を使って現在のフォントデータを1バイト読み込み、60行では現在のフォントデータ(横8ピクセル分)を右に1ビットシフト(2で整数除算)してORを取った結果を、VPOKE命令を使って再び元の場所に書き込んでいます。

90行では、結果を表示するために、画面に全ての文字を表示しています。VRAMの&H1800番地以降には、画面に表示する文字の文字コードが格納されています(&Hは16進数を表す。&H1880番地は画面5行目に相当)。

実行

早速、RUN命令で実行してみましょう。 f:id:sunflat:20151208201305p:plain

…。

…あれ、MSXってこんなに遅かったかな?

そういえば、MSX-BASICの変数は、デフォルトでは浮動小数点型なのでした。変数の型を整数型にして、少し高速化してみましょう。

行番号を15にすれば、10行と20行の間に挿入されます。

f:id:sunflat:20151208204003p:plain

再び実行!

f:id:sunflat:20151208211955p:plain

おおー、文字が太くなりました。成功です。

今度は、少しアレンジしてみて、文字の上側4ピクセルはそのままで、下側4ピクセルだけを太くしてみましょう。30行の J=0J=4に修正するだけです。

f:id:sunflat:20151208212542p:plain

再び実行!

f:id:sunflat:20151208212947p:plain

レトロな感じのフォントになりましたね。

次は、フォントの画像データを右にずらす量を、1ピクセルではなく2ピクセルにしてみます。

30行を元に戻し、60行のB ¥ 2B ¥ 4にするだけです。

f:id:sunflat:20151208213558p:plain

再び実行!

f:id:sunflat:20151208213805p:plain

飾り文字っぽい、おしゃれなフォントになりましたね。

最後に、縦1ピクセルごとに、太くする行と太くしない行を繰り返す感じでアレンジしてみます。

60行を元に戻し、30行の末尾にSTEP 2をつけるだけです。

f:id:sunflat:20151208213946p:plain

再び実行!

f:id:sunflat:20151208214031p:plain

文字がいい感じにかすれて、歴史を感じさせるフォントになりましたね。

まとめと発展

というわけで、VPOKE命令を使ってVRAMを書き換えることにより、フォントのデータを変更するテクニックを紹介しました。

もう少し高度なテクニックを使うと、フォント1文字の縦1ピクセル分(横8ピクセル)ごとに、描画色と背景色を変えたりすることもできます(通称、多色刷りモード)。

これを使うと、VRAMに文字コードを書き込むだけで、一見カラフルな画像を(1ピクセルづつ描画する場合と比較して)高速に表示することができ、MSX向けのゲームの背景描画などでよく使います(参考)。

というわけで、MSX-BASICでゲーム等を作る時には、VPOKE命令を活用して表現の幅を広げていきましょう!

はてなブックマークの「おすすめユーザー」と「iOS / Androidアプリ のバナー」を消す方法

自分自身のブックマークのサイドバーに表示されるやつ。

ブックマークの「設定」画面の「デザイン」タブの「スタイルシート」の箇所に以下を記入して、「スタイルシートを変更する」ボタンを押せばOK

iOS / Androidアプリ のやつは、タイトル部分は残ってしまう

#user-sidebar-recommend { display:none; }
.appstore-link { display:none; }