今のところドキュメントが存在しないようなので、適当にまとめてみるテスト。 FCEU 0.98.28 のソースを参照しています。なお、Lua スクリプト機能は FCEU 0.98.27 以降で利用可能。
FCEU 0.98.27 のバイナリアーカイブにいくつかのサンプルスクリプトが同梱され ています。
追記: FCEUX のヘルプファイルで Lua についても文書化されたので、そちらを参 照した方が正確だと思います。ただしFCEUX 固有の関数もあるようなのでこちらも一 応残しておきます。
追記: qFox氏のEmuLua Referenceは エミュレータごとの対応状況なども載っていて内容が充実しています。
追記: FCEUXなど、最新のTAS用エミュレータは Lua BitOpを内蔵しているようです。
FCEU.speedmode(string mode)
エミュレーション速度を設定する。mode は以下のいずれか:
"normal"
"nothrottle"
"turbo"
"maximum"
Bot として動作させるような場合は "maximum"
にし
てしまっても問題ないだろう。
FCEU.frameadvance()
1 フレーム進める。
FCEU.pause()
※筆者は使ったことがないので詳細は未調査
ポーズする。
(ソースのコメントより)フレーム境界以外から呼び出すこともできるが、現在 のフレームの処理は終了する。その場合、この関数は直ちに復帰する。
FCEU.message(string msg)
画面にメッセージを表示する。
表示領域はステートセーブ/ロード等のメッセージと共用なので、メッセージを
ずっと表示し続けることはできない。そのような用途には
gui.text()
が適していると思われる。
memory.readbyte(U16 addr)
メモリアドレス addr の値を読み取る。
memory.writebyte(U16 addr, U8 value)
メモリアドレス addr に値 value を書き込む。
memory.readbytesigned(U16 addr)
※詳細未調査
(ソースのコメントより)Not for the signed versions though
memory.register(U16 addr, function func)
メモリアドレス addr に書き込みが発生したら関数 func を呼 び出すように登録する。
func には引数は一切渡されない。func が呼び出された時点で は書き込みが終了している。
パッド ID は 1~4 で指定する(それぞれ 1P~4P に対応)。
パッド入力状態は Lua のテーブルで表現される。テーブルのキーは
"A"
, "B"
,
"select"
, "start"
,
"up"
, "down"
,
"left"
, "right"
で、値はボタン
が押されているなら 1
、押されていなければnil
となる。
たとえば、上キーとBボタンを押した状態は
inp = { up = 1, B = 1 }
というように表現する。
joypad.read(U8 which = 1)
パッド ID which のパッド入力状態を読み取る。
※なぜか入力を受け付けなくなることがあるので、これを使って「ボタンが押
されたらループを抜ける」みたいなことはしない方がよさげ
(joypad.set()
を呼んでいるとユーザからの入力は無視されてしま
うのかも??)。
joypad.set(U8 which, table buttons)
パッド ID which のパッド入力状態を設定する。
FCEU.frameadvance()
を行うと入力が反映され、入力状態はクリ
アされる。ボタンを押しっぱなしにするような場合は毎フレームこの関数を呼ぶこ
と。
※ソースのコメントは joypad.write()
と誤表記しているので注
意。
savestate.create(U8 which = nil)
セーブステートオブジェクトを作成する。
which に 1~10 の値を指定すると、ユーザから(キーボードショートカッ ト等で)アクセス可能なセーブステートが使われる。
savestate.save(object state)
ステートセーブする。
savestate.load(object state)
ステートロードする。
movie.mode()
ムービー記録/再生中かどうかを調べる。"record"
,
"playback"
, nil
のいずれかが返る。
movie.framecount()
ムービー中のフレームカウンタの値を読み取る。ムービー中でなければ
nil
が返る。
movie.stop()
ムービーを停止する。
とりあえずよく使いそうなものだけ。他はソースを参照。
gui.text(U8 x, U8 y, string msg)
指定位置にテキストを表示する。
gui.popup(string msg, string type = "ok")
ポップアップメッセージを表示する。type は
"ok"
, "yesno"
,
"yesnocancel"
のいずれか。
type に "ok"
以外を指定した場合は、
"yes"
, "no"
,
"cancel"
のいずれかが返る。
Lua はビット演算をサポートしていないので…。
AND(int one, int two, ..., int n)
AND演算
OR(int one, int two, ..., int n)
OR演算
XOR(int one, int two, ..., int n)
XOR演算
BIT(int one, int two, ..., int n)
指定されたビットセットの数値表現を返す。