[FC][全屏击杀修改教程]

来源:互联网 发布:快压软件官方下载 编辑:程序博客网 时间:2024/06/05 23:48

[FC][全屏击杀修改教程]

时间:2016.11.2  22:22

作者:FlameCyclone

工具:FCEUX_2.2.3,ROM一枚.

 

原理:攻击时系统计算敌人坐标与子弹坐标之差,横坐标满足击中条件时再判断纵坐标是否满足,均满足则击杀.

 

步骤:

打开魂斗罗日版:

先弄个金身无敌:

 

 

找到这个敌人的横坐标,这里是034D,把它锁定起来,嗯,好,这个小兵在原地只能任人宰割了.

跑到这小兵前面,面向他,跳起来先开一枪,找到第一发子弹横坐标,这里是03C8.

打开调试器,加入2个03C8的读断点:

 

 

注意,一个有条件,一个没有条件.

 

把有条件的断点开启,跑到小兵面前:

 

 

开一枪打他,此时调试器弹出:

 

然后关闭带条件的断点,开启无条件的断点:

 

运行几次后得到如下数据:

 

 07:E29B:BD 88 03  LDA $0388,X @ $0388 = #$01

 07:E29E:30 09     BMI $E2A9

 07:E2A0:10 19     BPL $E2BB

 07:E2A2:BD 18 04  LDA $0418,X @ $0418 = #$00

 07:E2A5:C9 02     CMP #$02

 07:E2A7:B0 12     BCS $E2BB

 07:E2A9:BD B8 03  LDA $03B8,X @ $03B8 = #$5F子弹纵坐标

 07:E2AC:E5 08     SBC $0008 = #$52 与$08(此时$08位敌人纵坐标)相减

 07:E2AE:C5 0A     CMP $000A = #$24 结果与$0A比较

 07:E2B0:B0 09     BCS $E2BB 大于就跳过#09字节

>07:E2B2:BD C8 03  LDA $03C8,X @ $03C8 = #$4E子弹横坐标

 07:E2B5:E5 09     SBC $0009 = #$4A与$09(此时$09位敌人横坐标)相减

 07:E2B7:C5 0B     CMP $000B = #$16 结果与$0B比较

 07:E2B9:90 06     BCC $E2C1 小于就跳过#06字节

 07:E2BB:CA        DEX  寄存器X减1

 07:E2BC:10 C8     BPL $E286  为正数就跳过#C8字节

 07:E2BE:A6 83     LDX $0083 = #$0F  读取$83的数据到寄存器X

 07:E2C0:60        RTS -----------------------程序返回

 

然后一步一步运行:

 

结果程序跳到了$E2C1,说明子弹坐标与敌人坐标满足击中条件就跳转到$E2C1,否则就跳转到$E2C0程序返回.

接下来修改:

打开十六进制编辑器:

 

跳转到E2A9:

 

 

 

转到ROM地址:

 

修改为4C C1 E2:

 

回到游戏,背向这个可伶的小兵,开一枪:

 

 

果然不出所料,这个小兵最终还是被干掉了...悲剧啊...

经过测试,这样修改后全屏幕的敌人都会被攻击,不过有优先级的区分,一发子弹同时只能打一个敌人,面对多个敌人时打死第一个才会轮到第二个...

如果要同时攻击同屏幕全部敌人,把$E28B改为4C C1 E2:

 

 

 

 

运行效果如下:

全部敌人被干掉了....悲剧啊...

 

另外保存即可:

 

 

修改到此结束,准备睡觉了,好冷的天气啊......

 

:如果子弹坐标读断点找不到全屏击杀跳转的话找就以敌人坐标作为读断点来找即可.

 

转载请注明出处:FlameCyclone.ys168.com

原创粉丝点击