• 使用FCEUX调试器寻找并修改游戏初始物品


    前言

    FCEUX是一款非常优秀的FC游戏模拟器,它自带调试器,研究游戏很方便!比起VirtuaNES,我更喜欢FCEUX!更难得的是,它至今仍在更新!

    官网地址:https://fceux.com/

    分享一个本人以前汉化的版本:

    百度网盘:https://pan.baidu.com/s/1vtzltEBufH_a9yN7xfXixg?pwd=1234

    提取码:1234
    压缩包里除了正常的版本,还改了一个支持吞食天地2的版本:

    本文以勇者斗恶龙3为例

    要寻找初始物品,就需要先知道游戏中的物品代码,可以通过内存搜索,或者在EmuCheat的金手指文件中寻找,具体操作此处略过。

    正常进入游戏,可以看到主角初始的道具是:铜剑、旅人服:

    这两个物品的代码分别是02、30(通过内存搜索或者EmuCheat金手指文件找到)。

    而这两个道具默认就是已装备的状态,道具装备以后物品代码会变为:物品代码+80(16进制),那么这两个道具此时的代码应为:82、B0

    知道物品代码之后,找到它们在内存中的地址。

    打开FCEUX的内存搜索,将下方的:数据 类型/显示 选择为16进制,然后在指定值那里填入82,按下搜索,这个时候我们将得到图中的内容:

    此时不要关闭内存搜索窗口,我们在游戏中将铜剑取消装备,再看内存搜索:

    上图中076C这个地址变换了一次,值正是物品原始的代码02,其它地址的值都不符合,证明076C这个地址就是铜剑这个物品在内存中的地址。 

    打开调试器,添加一个写入断点,然后重置游戏。

    在第二次断点的地方,看到了这样的代码:

    1. 01FEF3:B1 3C LDA ($3C),Y @ $621A = #$82
    2. 01FEF5:A4 04 LDY $0004 = #$00
    3. > 01FEF7:91 3E STA ($3E),Y @ $076C = #$00

    如图:

    第一句代码LDA ($3C),Y @ $621A = #$82 表示82这个值是从内存地址$621A读入寄存器。

    将076C这个地址的断点取消,重新添加621A这个地址的写断点,然后重置游戏,并删除、重新制作冒险书。

    在第三次断点的地址,代码如下:

    1. 01F731:A9 82 LDA #$82
    2. > 01F733:8D 1A 62 STA $621A = #$A0

    代码LDA  #$82 表示将82这个值送入寄存器A中,执行位置在ROM文件中的:01F731(16进制) 。

    主角的初始物品代码就这样找到了!

    使用16进制编辑器(如UltraEdit、Winhex)打开ROM文件,定位到地址0x1F731处,将A9后面的82修改为想要的物品代码即可:

    需要注意的是,要使修改生效,必须重新制作冒险书。。

    skyyx2002

    2018.02.28

  • 相关阅读:
    [附源码]JAVA毕业设计敬老院管理系统(系统+LW)
    【Django】Django4.1.2使用xadmin避坑指南
    一文教会你用 IDEA 从 0 到 1 构建 Tomcat , Maven 再到 Servlet(输出hello world)
    关于虚析构函数的问题
    SpringBoot结合Redisson实现分布式锁
    什么是数字孪生?
    通过postgis空间库导入sql格式的矢量数据到arcgis中
    【Linux】Shell脚本(文件操作)
    Smart Tomcat + Servlet API的应用
    基于神经网络多项式插值的图像超分辨重构研究-附Matlab代码
  • 原文地址:https://blog.csdn.net/s806903/article/details/126063489