たこ焼きを転がしてソースを塗るゲーム
を作ったので、遊んでみてね!
http://www3.sunflat.net/app/takoyaki/
ソースを塗るために接地面のテクスチャ上でのUV座標を計算して、毎フレームテクスチャを更新するあたりが難しかった。
このゲームの開発には、以下のアセットを利用しました。
- ゲーム中のBGM: BGM Collection Volume 1 "Colorful"
- アニメーション実行: iTween
- Singletonオブジェクト&オーディオ管理: Corgi Engine
そういえば、だいぶ前にそら豆でゴルフをするゲームも作ったので、そちらもどうぞ
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+¥キーとして認識できるので、あとはWindowsのIME内でいい感じに設定すればOK。
IdeaVimで、Control+[ を Escape として使う。(Macの場合)
JISキーボードを使っていると、IdeaVim (IntelliJ IDEA, RubyMine, Android Studio などの、Vimプラグイン)で、Control + [ を押したときに、Escapeとして扱ってくれなくて困る。
検索してみると、~/.ideavimrc
に inoremap <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日目の記事です。
こんにちは、sunflatです。 好きなMSX-BASICの命令はVPOKE命令です。
というわけで、今日はVPOKE命令で遊んでみましょう。
VPOKE命令とは
VPOKE命令は、VRAMにデータを直接書き込むための命令です。
MSXは画面表示のためにVDP(ビデオ・ディスプレイ・プロセッサ)というグラフィックチップを搭載しており、このVDPで使われるメモリがVRAMです。例えばMSX1規格の場合、16KBのVRAMが搭載されています。
VRAMにデータを書き込むことにより、フォント(文字の形状)のデータ、画面の表示内容、スプライト(画面上に表示されるキャラクター)の画像などを変更できます。
フォントのデータを変更してみる
今回は、フォントのデータを変更して遊んでみることにします。
早速プログラムを入力していきましょう。AUTO命令を使うと、行番号を10刻みで自動で振ってくれるので便利ですね。
このプログラムは、フォントの画像データを、右に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命令で実行してみましょう。
…。
…あれ、MSXってこんなに遅かったかな?
そういえば、MSX-BASICの変数は、デフォルトでは浮動小数点型なのでした。変数の型を整数型にして、少し高速化してみましょう。
行番号を15にすれば、10行と20行の間に挿入されます。
再び実行!
おおー、文字が太くなりました。成功です。
今度は、少しアレンジしてみて、文字の上側4ピクセルはそのままで、下側4ピクセルだけを太くしてみましょう。30行の J=0
をJ=4
に修正するだけです。
再び実行!
レトロな感じのフォントになりましたね。
次は、フォントの画像データを右にずらす量を、1ピクセルではなく2ピクセルにしてみます。
30行を元に戻し、60行のB ¥ 2
をB ¥ 4
にするだけです。
再び実行!
飾り文字っぽい、おしゃれなフォントになりましたね。
最後に、縦1ピクセルごとに、太くする行と太くしない行を繰り返す感じでアレンジしてみます。
60行を元に戻し、30行の末尾にSTEP 2
をつけるだけです。
再び実行!
文字がいい感じにかすれて、歴史を感じさせるフォントになりましたね。
まとめと発展
というわけで、VPOKE命令を使ってVRAMを書き換えることにより、フォントのデータを変更するテクニックを紹介しました。
もう少し高度なテクニックを使うと、フォント1文字の縦1ピクセル分(横8ピクセル)ごとに、描画色と背景色を変えたりすることもできます(通称、多色刷りモード)。
これを使うと、VRAMに文字コードを書き込むだけで、一見カラフルな画像を(1ピクセルづつ描画する場合と比較して)高速に表示することができ、MSX向けのゲームの背景描画などでよく使います(参考)。