» 您尚未 登录   注册 | 社区银行 | 社区婚姻 | 社区成就 | 帮助 | 社区 | 无图版


火花天龙剑 -> 火炎之纹章 -> 火花学园 -> 【FC火纹外传】debug入门教程
 XML   RSS 2.0   WAP 

本页主题: 【FC火纹外传】debug入门教程 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
tata2007

头衔:孤独之狼孤独之狼
该用户目前不在线
级别: 火花会员
编号: 88604
精华: 6
发帖: 420
威望: 30 点
配偶: 单身
火 花 币: 20592 HHB
注册时间:2008-05-13
最后登陆:2024-09-26
艾雷布的骑士(I)
查看作者资料 发送短消息 引用回复这个帖子
【FC火纹外传】debug入门教程

本文以FC火纹外传的某个修改为例来演示debugger的使用方法,只要你懂得一点最基本的6502汇编指令就可以看懂,把它当一个简单的入门教程吧。

火纹外传有一个比较奇怪的设定:使用魔法会扣自己的血,哪怕是最基本的回复魔法。个人觉得这个设计有点不大合情理,这次我们的修改目的就是去掉它。下面就是以修女的回复魔法为例的修改过程。

------------------------------
【一】找出修女mm的当前HP的内存地址

这个没什么好说的,使用任何一种模拟器的cheat功能搜索几次都可以轻松找到,过程从略。我这里修女的当前HP地址在$67d1(不同的角色其地址也不同,你找到的很可能是另外一个地址)。

----------------------------
【二】使用debugger找出减血指令

1、载入游戏
我用的debugger是FCEUXD SP 1.07版。首先载入rom,进入战场后马上save一个即时存档(按F5键),以方便后面的反复load。

2、设置断点
接下来干啥呢?既然是要找出减血指令,所以嘛我们需要设一个断点,地址就是修女的当前HP$67d1,只要HP改变就会中断,这样就可以顺藤摸瓜找到相应的指令了。

点击Tools下面的Debug,弹出一个大的对话窗口“6502 debugger”,不用看别的,直接找到右上角的那个“BreakPoints”,点击它下面的Add按钮,又弹出来一个小窗口“Add Breakpoint”。前面已经说了修女HP地址是$67d1,所以什么也别想,直接把Adress后面的两个输入框都填上67d1,然后勾选下面的类型Write,其它的都不动。最后点最下面的OK,断点就设好了。

3、调试
回到游戏画面,下一步该做什么呢?很简单,用修女随便给某个我方角色来一次回复。然后你就会看到模拟器自动中断,debug窗口弹出来啦!左边是一大堆的汇编指令,其中最上面的一条指令就是中断发生也就是HP发生变化的地方,把它抄下来:
$C213:91 02   STA ($02),Y @ $67D1 = #$16

什么意思呢?就是把A寄存器的数值写入到内存地址$67D1。为了方便分析,我们把它上下的一些程序全部复制下来:
$C209:A0 00   LDY #$00
$C20B:A6 04   LDX $0004 = #$07
$C20D:F0 02   BEQ $C211
$C20F:E6 05   INC $0005 = #$01
$C211:B1 00   LDA ($00),Y @ $7492 = #$15      ***
$C213:91 02   STA ($02),Y @ $67D1 = #$16      ***
$C215:C8     INY
$C216:D0 04   BNE $C21C
$C218:E6 01   INC $0001 = #$74
$C21A:E6 03   INC $0003 = #$67
$C21C:C6 04   DEC $0004 = #$07
$C21E:D0 F1   BNE $C211
$C220:C6 05   DEC $0005 = #$01
$C222:D0 ED   BNE $C211
$C224:60     RTS

注意后面带有***的两条指令,***是我自己加上去的,目的是为了醒目。这两句的意思就是:把内存单元$7492的数值复制到另外一个单元$67D1,也就是我们熟悉的修女的当前HP地址。这就是说,使用一次回复魔法之后修女mm的当前HP会被重写,而新HP数值来自于另外一个地址$7492。

很遗憾,我们在这附近没有找到减血指令,只知道修女mm的当前HP来自于另外一个地址$7492,那么这个$7492的数值又是从哪里来的呢?看来还得debug一下这个$7492。

4、继续调试
按F7读档(前面不是F5存了一个档么?),删除以前的老断点,再设定一个新断点,地址为7492。然后在游戏中重新来一次回复。这次弹出的debugger窗口第一条指令是:
$AB04:91 00   STA ($00),Y @ $7492 = #$16

复制附近的程序如下:
$AAF4:A2 00   LDX #$00
$AAF6:BC 11 AB LDY $AB11,X @ $AB1C = #$0E
$AAF9:C0 EF   CPY #$EF
$AAFB:F0 0C   BEQ $AB09
$AAFD:C0 FF   CPY #$FF
$AAFF:F0 05   BEQ $AB06
$AB01:BD 31 03 LDA $0331,X @ $033C = #$15      ***
$AB04:91 00   STA ($00),Y @ $7492 = #$16      ***
$AB06:E8     INX
$AB07:10 ED   BPL $AAF6
$AB09:AD 2A 03 LDA $032A = #$05
$AB0C:A0 0A   LDY #$0A
$AB0E:91 00   STA ($00),Y @ $7492 = #$16
$AB10:60     RTS

嗯...$7492的数值来自于$033C,至于减血指令还是没找到。

5、还是调试
好吧,再设断点为$033C,读档,再来一次:
$8978:AC 82 03 LDY $0382 = #$00
$897B:BE 20 03 LDX $0320,Y @ $0320 = #$28
$897E:B9 0A 03 LDA $030A,Y @ $030A = #$16      ***
$8981:38     SEC                        ***
$8982:FD F4 D9 SBC $D9F4,X @ $DA1C = #$01      ***
$8985:8D 3C 03 STA $033C = #$16            ***
$8988:8D B1 04 STA $04B1 = #$00
$898B:B9 12 03 LDA $0312,Y @ $0312 = #$0A
$898E:20 AF C9 JSR $C9AF
$8991:18     CLC
$8992:79 0A 03 ADC $030A,Y @ $030A = #$16
$8995:D9 0C 03 CMP $030C,Y @ $030C = #$16
$8998:90 03   BCC $899D
$899A:B9 0C 03 LDA $030C,Y @ $030C = #$16
$899D:99 3C 03 STA $033C,Y @ $033C = #$16
$89A0:8D BB 04 STA $04BB = #$00

终于找到了!仔细看那几条带***的指令,大意就是——把$030A的数值(16h)减去$DA1C的数值(01h),然后写入到$033C。没错这就是我们要找的减血指令!$DA1C中的数据就是每次回复减少的HP数值。

-----------------------
【三】修改方法

要想不减血,可以有两种思路:
一种是把上面的那条减法指令nop掉,没有减法指令自然就不会减血了;
另外一种就是想办法找出$DA1C的数值来自于rom何处,把rom中的相应数值改成00也行。

一般来讲,如果能通过只修改data就达到目的那是最好的,这也是笔者的经验之谈。因为改程序总存在一定的风险,你不好确定这条指令是否只有这么一个用途,也不好确定是否只有这么一条相关指令(实际上本游戏的魔法减血指令就不止这一处),冒冒然地乱改程序往往容易导致bug,所以能不改程序就不改。

下面就根据第二种思路来修改:

点击Tools菜单下的Hex Editor,打开内存查看器,可以看到地址da1c中的数值确实等于01,再看看它附近的数据:
01 03 00 08 0c 0c 0e ...
打开rom搜索一下,还真的找到了地址3da2c,附近的数据和内存da1c附近的数据一模一样,呵呵。

这个是否就是魔法消耗HP表呢?不妨试一试,首先还是提醒一下先把原版rom备份好,然后把3da2c改为00,用模拟器载入rom测试,果然这次回复不再减血了!

同样很容易验证,3da2d是远程回复的,3da1b是火魔法的......大家可以自己一个个试,我就不罗嗦了。


*****************
后记
*****************
以前从未玩过FE外传,今天不知道怎么地突然想起来尝试一下,然后就发现:用修女给同伴回个血居然还会掉自己的血!!!这个...这个不能忍啊...老狼很生气,后果很严重...然后果断下手。办完之后突然觉得把过程写出来也许还能当个debug入门教程,于是就整理了一下发到论坛上来了。


[ 此贴被tata2007在2011-10-02 01:50重新编辑 ]


圣战系谱TS改造版

[楼 主] | Posted:2011-10-01 16:11| 顶端
lewisgt



该用户目前不在线
级别: 火花会员
编号: 29691
精华: 0
发帖: 43
威望: 0 点
配偶: 单身
火 花 币: 27716 HHB
注册时间:2004-12-08
最后登陆:2020-05-15
查看作者资料 发送短消息 引用回复这个帖子


魔法HP消耗很多年前就已经发现了,不需要这么辛苦调试吧,不如调试一下宝箱得到物品吧。
[1 楼] | Posted:2011-10-01 18:53| 顶端
guile

该用户目前不在线
级别: 火花会员
编号: 35491
精华: 0
发帖: 1387
威望: 0 点
配偶: 单身
火 花 币: 25469 HHB
注册时间:2005-04-13
最后登陆:2024-11-23
查看作者资料 发送短消息 引用回复这个帖子


hack 教程好。
[2 楼] | Posted:2011-10-01 20:45| 顶端
lewisgt



该用户目前不在线
级别: 火花会员
编号: 29691
精华: 0
发帖: 43
威望: 0 点
配偶: 单身
火 花 币: 27716 HHB
注册时间:2004-12-08
最后登陆:2020-05-15
查看作者资料 发送短消息 引用回复这个帖子


调试过程真是好教程,参考之后终于找到了宝箱的修改位置了。
[3 楼] | Posted:2011-10-01 22:54| 顶端
guile

该用户目前不在线
级别: 火花会员
编号: 35491
精华: 0
发帖: 1387
威望: 0 点
配偶: 单身
火 花 币: 25469 HHB
注册时间:2005-04-13
最后登陆:2024-11-23
查看作者资料 发送短消息 引用回复这个帖子


哈哈
[4 楼] | Posted:2011-10-02 07:07| 顶端
guile

该用户目前不在线
级别: 火花会员
编号: 35491
精华: 0
发帖: 1387
威望: 0 点
配偶: 单身
火 花 币: 25469 HHB
注册时间:2005-04-13
最后登陆:2024-11-23
查看作者资料 发送短消息 引用回复这个帖子


回血会掉1格血,可是还能吸血呢呀;  
两位挑战一下 沙尼亚和迪恩双收的hack吧
http://bbs.fireemblem.net/read.php?tid=210181

[5 楼] | Posted:2011-10-02 07:21| 顶端
knight1990



该用户目前不在线
级别: 禁止发言
编号: 114161
精华: 0
发帖: 46
威望: 0 点
配偶: 单身
火 花 币: 79 HHB
注册时间:2011-07-10
最后登陆:2018-11-05
查看作者资料 发送短消息 引用回复这个帖子


很好的教程,学习了
[6 楼] | Posted:2011-10-02 10:49| 顶端
lewisgt



该用户目前不在线
级别: 火花会员
编号: 29691
精华: 0
发帖: 43
威望: 0 点
配偶: 单身
火 花 币: 27716 HHB
注册时间:2004-12-08
最后登陆:2020-05-15
查看作者资料 发送短消息 引用回复这个帖子


下面是引用guile于2011-10-02 07:21发表的:
回血会掉1格血,可是还能吸血呢呀;  
两位挑战一下 沙尼亚和迪恩双收的hack吧
http://bbs.fireemblem.net/read.php?tid=210181

始终能力有限,人物加入调试不了,要看楼主狼兄能不能调试出来。

[7 楼] | Posted:2011-10-02 11:31| 顶端
tata2007

头衔:孤独之狼孤独之狼
该用户目前不在线
级别: 火花会员
编号: 88604
精华: 6
发帖: 420
威望: 30 点
配偶: 单身
火 花 币: 20592 HHB
注册时间:2008-05-13
最后登陆:2024-09-26
艾雷布的骑士(I)
查看作者资料 发送短消息 引用回复这个帖子


这游戏我才刚刚开了个头,很多东西都不了解。
人物二选一,不知道是否通过事件脚本来控制,如果是的话,那么就需要对此脚本指令有较深的了解,否则很难修改。


圣战系谱TS改造版

[8 楼] | Posted:2011-10-02 14:46| 顶端
guile

该用户目前不在线
级别: 火花会员
编号: 35491
精华: 0
发帖: 1387
威望: 0 点
配偶: 单身
火 花 币: 25469 HHB
注册时间:2005-04-13
最后登陆:2024-11-23
查看作者资料 发送短消息 引用回复这个帖子


重装操作系统 主页的外传修改器启动时就会报错:"运行时错误“339” 部件"Tabctl32.ocx"或其附件之一不能正确注册:一个文件丢失或无效。"

搜到的解决方法 电脑缺少Richtx.ocx这个控件,
去网上找richtext或Richtx.ocx下载到c:\windows\system32
然后开始-> 运行->regsrv32 richtx.ocx


[ 此贴被guile在2014-07-08 09:25 AM重新编辑 ]

[9 楼] | Posted:2011-10-02 15:33| 顶端

火花天龙剑 -> 火花学园




Powered by PHPWind v3.0.1 Code © 2003-05 PHPWind
辽ICP备05016763号
Gzip enabled

You can contact us