snes9x-1.52-rr-r185运行火焰纹章RNG Lua脚本报错:gui.text为nil值
问题解决:snes9x-rr Lua脚本
gui.text调用报错 错误原因
你遇到的"rng.lua:26: attempt to call field 'text' (a nil value)"错误,核心原因是snes9x-1.52-rr-r185版本的Lua API中不存在gui.text函数,该版本对应的文本绘制函数是gui.drawText。
修正后的代码
将原代码中所有gui.text替换为gui.drawText,同时优化了重复绘制同一step值的冗余逻辑:
emu = snes9x function get_rng() return { step = memory.readbyte(0x7e04a2), table = memory.readbyterange(0x7e046b, 0x37) } end function rand(rng) rng.step = rng.step + 1 if rng.step >= 0x37 then for i = 0, 0x36 do local j = (i < 0x18) and (i + 0x1f) or (i - 0x18) rng.table[i+1] = rng.table[i+1] - rng.table[j+1] if rng.table[i+1] < 0 then rng.table[i+1] = rng.table[i+1] + 100 end end rng.step = 0 end local res = rng.table[rng.step+1] - 1 if res < 0 then res = 99 end return res end while true do local rng = get_rng() -- 仅绘制一次当前step值 gui.drawText(12, 0, string.format("%02x", rng.step)) -- 绘制16个未来RNG输出值 for i = 1, 0x10 do gui.drawText(i*12, 10, string.format("%2u", rand(rng))) end emu.frameadvance() end
额外注意事项
- 若
gui.drawText仍无法工作,可尝试emu.drawText,不同版本的snes9x-rr Lua函数命名可能存在差异,建议查看模拟器内置帮助文档确认API细节。 - 确保
0x7e04a2(RNG步进值地址)和0x7e046b(RNG表起始地址)与你使用的《火焰纹章-圣战之系谱》ROM版本匹配,不同ROM的静态内存地址可能有变动。
内容的提问来源于stack exchange,提问作者Manolo
相关产品推荐
相关产品推荐

