FCEU Lua API 簡易リファレンス

今のところドキュメントが存在しないようなので、適当にまとめてみるテスト。 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関連

とりあえずよく使いそうなものだけ。他はソースを参照。

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)

指定されたビットセットの数値表現を返す。


Back