VisualBoyAdvance でキー入力をAVIに出力するには?
Web拍手経由でご質問いただきました。
VisualboyAdvanceでLuaでの入力表示に関して色々とぐぐってたら、vba-rerecording rr22?とかいうのでjoypad.getdown(int port)という文章を見つけたので、RamWriter.lua(空白区切り版)という奴に file:write(string.format("%d ", joypad.get())) というのを書いて見たんですが、普通にエラーで出てしまいました。これってどういう風に Joypad.get を書けば入力キーを出力できるようになるんでしょうか?
AVIファイルにキー入力を表示させたいという観点でいくつかお答えします。
Lua を使わずにキー入力を AVI に書き出すアプローチ
ただ AVI に Input Display の表示を書き出すだけなら、Lua を使わなくてもできます。
- 「,」キーを押して Input Display を表示する。
- AVI にも表示されるように、HUD の表示を In Game に変更する(下記画像参照)。
- AVI の録画を行う。
利点は実現が楽なことです。欠点は表示形式をカスタマイズできないことです。
Lua を使ってキー入力を得るには?
まず最初に、以下の記事からスクリプトを再度ダウンロードしてください。数あるエミュレータの中でもVBAはAVI書き出し時にフレームが複製されて記録される問題があり、本日それに対する対応コードを加筆しました。
file:write(string.format("%d ", joypad.get())) というのを書いて見たんですが普通にエラーで出てしまいました。
joypad.get() の戻り値は table 型です*1が、%d で number 型の出力を行おうとしているからエラーが出ます。
賢い方法はともかく、メモリの値を出力する場面で以下のようなコードを書けば、Aボタンが押されているかいないかを記録できます。
-- RamWriter.lua: local pad = joypad.get(1) framedata = framedata .. string.format("%d ", (pad.A and 1 or 0))
対応する読み込み側の一例は次のような感じです。
-- RamReader.lua: i = file:read("*n"); frame[f].A = ((i ~= 0) and true or false)
*1:print( joypad.get() ) を行ってみるとより詳しく中身がわかります。