ここから本文です
ベランダ菜園とWindows用アプリ作成とExcel用アプリ(アドイン)作成

書庫EmuLua

テキストエディタMeryのEmuLua用設定と構文ファイル
記事検索
検索

全1ページ

[1]

MeryのLua用構文ファイルをいじって
ゲームのエミュレータ用の文字を加えた
相変わらずこれであっているのかわからないけど目的のことはできたのでメモ

適用すると
イメージ 1
↑これが↓こうなる

イメージ 2
エミュレータ用の文字列に色がつくので文字の打ち間違いに気づきやすくなるはず
registerbeforeとか長すぎ


MeryのLua用の構文ファイルはここで公開されているのでコピーして
Meryで新規作成したところにペースト


イメージ 3
メニューのツール→オプション→表示タブの強調文字列のところ
強調文字列(4)が81行目のWord Color=3と対応しているみたい
順番に強調文字列(3)なら69行目のWord Color=2

イメージ 4
一番下を見るとWord Color=4が最後みたいでなんだか特殊な感じ
新しく強調文字列に加えるのはこの後なら良さそう
ってことはWord color = 5かなってことで
81行目の
#Word Color=3, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False
これをコピペしてColor =3をColor = 5に変更して
書き加えていった

イメージ 5
ずらーっと

書き加える文字列はここを参照した
FCEUX Help
ここのLua Functions Listのページ


書き加えた文字列

#Word Color=5, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False
emu
memory
rom
debugger
#joypad
zapper
gui

#Word Color=6, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False
softreset
speedmode
frameadvance
pause
unpause
exec_count
exec_time
setrenderplanes
message
framecount
lagcount
lagged
setlagflag
emulating
paused
readonly
setreadonly
registerbefore
registerafter
registerexit
addgamegenie
delgamegenie
print
getscreenpixel
readbyte
readbyteunsigned
readbytesigned
readbyterange
readword
readwordunsigned
readwordsigned
writebyte
getregister
setregister
register
registerwrite
registerexec
registerrun
registerexecute
hitbreakpoint
getcyclescount
getinstructionscount
resetcyclescount
resetinstructionscount
joypad.read
joypad.get
joypad.getimmediate
joypad.readimmediate
joypad.getdown
joypad.readdown
joypad.getup
joypad.readup
input.popup
input.get
input.read
savestate.create
savestate.save
savestate.load
savestate.persist
savestate.registersave
savestate.registerload
savestate.loadscriptdata
movie.active
movie.framecount
movie.mode
movie.rerecordcounting
movie.stop
movie.close
movie.length
movie.name
movie.getname
movie.getfilename
movie.rerecordcount
movie.replay
movie.playbeginning
movie.readonly
movie.getreadonly
movie.setreadonly
movie.recording
movie.playing
movie.ispoweron
movie.isfromsavestate
movie.name
movie.readonly
pixel
drawpixel
setpixel
writepixel
getpixel
line
drawline
box
drawbox
rect
drawrect
text
drawtext
parsecolor
savescreenshot
savescreenshotas
gdscreenshot
gdoverlay
image
drawimage
opacity
transparency
sound.get



書き終わったら保存して閉じてから拡張子をtxtからmsyに変更
これが構文ファイルになる


構文ファイルを適用する
イメージ 6
メニューの表示→編集モード→編集モードの設定

イメージ 7
新規作成で適当な名前を付けてから
プロパティで

イメージ 8
インポートを選んで

イメージ 9
さっき作った構文ファイルを選択

イメージ 10
これでOKで

イメージ 12
選択で完了


強調文字列の色変更
イメージ 11
色を変更するときはオプションでできる




emu.frameadvanceが動かなくても問題なかった

やってみたかったのはゲーム中に文字を表示することで
これはframeadvanceを使わなくても
emu.registerbeforeを使えばいいだけだった

イメージ 1
よくわかっていなけど目的は達成されて
前回の記事がほとんど無意味になったw

参照したところ
EmuLua - mupen64-rr - Mupen64-rr EmuLua Reference - Mupen64 0.5 rerecording v8 - Google Project Hosting
ここみたらframeadvanceを使わなくても似たようなことができるコードがあったので
コピペして使ってみたけど種類が違うせいか動かない
眺めたり見慣れないものをググったりしているうちになんとなく試したらなんとなく動いた時には、えっこれでいいの?だった
2015年5月1日追記
frameadvanceが動かなくてもregisterbeforeでよかった ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
↑の記事でここの記事は殆ど無意味になりました
追記ここまで


久しぶりにLuaを使おうと思ったらほとんど忘れていたのでメモ
Luaといってもゲームのエミュレータ用の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年前だった



--[[フレームカウント一定間隔ごとにステートセーブ
Rキーで前のロード、Tキーで次のロード
EVERY_COUNT = このフレームごとにステートセーブを記録する、60で約1秒
COUNT_DOWN = 待ち時間、60で約1秒、ステートロードを連続でする間隔、
短いとキーをちょっと押しただけで2,3個戻ってしまうのを防ぐため
MAX_STATE_COUNT = ステートセーブの最大個数、これを超えると古いものから消えていく]]

local saveTable = {} --luaには配列はない替わりにテーブルを使う、添字は1から始まる
local saveObj-- = savestate.create()--セーブオブジェクト
local savecount = 0 --セーブオブジェクトの通し番号
local myCount = 0 --フレームのカウント用
local EVERY_COUNT = 600 --このフレームごとにステートセーブを記録する、60で約1秒
local mykey --入力されたーキーボードのキー
local COUNT_DOWN = 20 --[[待ち時間、60で約1秒、ステートロードを連続でする間隔
、短いとキーをちょっと押しただけで2,3個戻ってしまうのを防ぐため]]
local mycountdown = 0 --待ち時間カウントダウン用
local MAX_STATE_COUNT = 5--ステートセーブの最大個数、これを超えると古いものから消えていく
myCount = EVERY_COUNT

function myframecount()
if myCount == EVERY_COUNT then
saveObj = savestate.create()--ここで毎回クリエイトしないと同じセーブファイルになる
savestate.save(saveObj) --オブジェクトにセーブ
if savecount == MAX_STATE_COUNT then--セーブ個数が最大値を超えていたら
table.remove(saveTable,1) --一番目(古いもの)をテーブルから削除
else --セーブ個数が最大値を超えていなければ通し番号を+1
savecount = savecount +1
end
saveTable[savecount] = saveObj--ステートセーブをテーブルに追加
print(emu.framecount().."_saveNumber "..savecount.." AddSave")
myCount = 0--カウントを元に戻す
-- table.sort(saveTable)--エラーになる、ステートセーブには使えない?
end
myCount = myCount +1--カウントアップ
end

function myload()--現在より古いステートセーブをロード
if savecount > 1 then
savestate.load(saveTable[savecount-1])
savecount = savecount -1
print(savecount.."_Loaded")
myCount = 0
end
end
function mynextload()--次のステートロード
if savecount < table.maxn(saveTable) then
savestate.load(saveTable[savecount +1])
savecount = savecount + 1
print(savecount.."_Loaded")
myCount = 0
end
end

while true do
myframecount()
if mycountdown > 0 then
mycountdown = mycountdown -1--カウントダウン
else
mykey = input.get()
if mykey.R then --Rキーを押したら
myload() --古い方のステートをロード
mycountdown = COUNT_DOWN
elseif mykey.T then --Tキーを押したら
mynextload() --現在より新しいステートをロード
mycountdown = COUNT_DOWN
end
end
emu.frameadvance()
end

イメージ 1



使う時は
イメージ 2
ゲームを起動してからLuaのウィンドウを出して

イメージ 3
Luaのウィンドウを出して、ファイルをBrowseで選んでRunで実行

イメージ 4
実行中の画面

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は大文字と小文字を区別している

Luaのコードを書くときに使っているテキストエディタは
Mery
イメージ 5
Ctrl+Spaceで入力候補が出てくる!
文字の色分けしてくれるから見やすい
素晴らしいアプリ
MeryWiki


参照したところ
八角研究所 : 高速スクリプト言語「Lua」を始めよう!(2) - 高速スクリプト言語「Lua」を始めよう!(2)

ここでテーブルの要素を削除するとずれるのを知った

Rewinder.lua in digs/Zelda/fceux/luaScripts – Computer Archeology


ダウンロード
ファイル名:snes9x1.51_rr_v7用、巻き戻しテスト1.lua

開くトラックバック(1)

全1ページ

[1]

わてん@午後
わてん@午後
男性 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について

スマートフォンで見る

モバイル版Yahoo!ブログにアクセス!

スマートフォン版Yahoo!ブログにアクセス!

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

最新のコメント最新のコメント

すべて表示

Yahoo!からのお知らせ

検索 検索

よしもとブログランキング

もっと見る
本文はここまでですこのページの先頭へ

[PR]お得情報

ふるさと納税サイト『さとふる』
お米、お肉などの好きなお礼品を選べる
毎日人気ランキング更新中!
ふるさと納税サイト『さとふる』
11/30まで5周年記念キャンペーン中!
Amazonギフト券1000円分当たる!
数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!

その他のキャンペーン

みんなの更新記事