You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:20:28