Luaのメモ、Snes9x rerecording 1.51 v7のLuaでRewind再現
2015年5月1日追記
frameadvanceが動かなくてもregisterbeforeでよかった ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
↑の記事でここの記事は殆ど無意味になりました
追記ここまで
久しぶりにLuaを使おうと思ったらほとんど忘れていたのでメモ
スーパーファミコンのエミュレータのSnes9x rerecording 1.51 v7で動作確認
書いたのはRewind(巻き戻し、早戻し)の再現
新しい方の1.53なら最初からRewindがあるからこっちを使いたいんだけど
1.53のLuaだとframeadvanceが動いてくれないので
Rewindの機能がないけどframeadvanceが動く1.51のLuaを使って再現してみた(力技)
動作はステートセーブを一定間隔で通し番号を付けてどんどん溜めていくので
キーボードのRで前のロード、Tキーで次のロード
できは良くなくてセーブするたびに一瞬止まるからアクションゲームには向かない
1.53でframeadvanceが動けばこんなことしなくてもいいのに!
使う時は
実行中の画面
1行目の
148_saveNumber 1 AddSaveは148フレームの時に1番にセーブしましたって意味
一定時間ごとにセーブしていく、この一定時間の変更は12行目の数字
local EVERY_COUNT = 600
600だと約10秒毎にセーブになる
2547_saveNumber 5 AddSave
3147_saveNumber 5 AddSave
3747_saveNumber 5 AddSave
5番目にどんどんセーブしているのはセーブの個数を5個に制限しているからで
上限を超えたら1番を消している、この時セーブの2番だったものが1番に入って
同じように5番だったものが4番に入って、結果的に5番が空くので新しいセーブは
5番にどんどん入っている
セーブの個数の上限は
local MAX_STATE_COUNT = 5
これの5を変えればいい
4_Loaded
3_Loaded
2_Loaded
3_Loaded
4_Loaded
5_Loaded
4_Loaded
3_Loaded
このへんは何番をロードしましたよって意味
巻き戻しならキーボードのR、先送りならTにしている
4番まで記録して3番に巻き戻して次にセーブされる場所は5番ではなくて
4番に上書きされる
3_Loaded
3148_saveNumber 4 AddSave
3748_saveNumber 5 AddSave
Luaテーブルの要素を消去した時の動作で
table.remove(saveTable,1)
saveTableの1番を消去すると自動で2番だったものが1番に入って3番だったものが2番に入るっていうのは面白い
最初は1番を消去したら1番は空白になるだけなのかと思っていた
table.maxn(saveTable)
table.maxnを使うとテーブルの要素数を取得できる
Luaは大文字と小文字を区別している
Ctrl+Spaceで入力候補が出てくる!
文字の色分けしてくれるから見やすい
素晴らしいアプリ
MeryWiki
参照したところ
ここでテーブルの要素を削除するとずれるのを知った
Rewinder.lua in digs/Zelda/fceux/luaScripts – Computer Archeology
ダウンロード
ファイル名:snes9x1.51_rr_v7用、巻き戻しテスト1.lua