[FC][子弹数修改教程]

[FC][子弹数修改教程]

作者FlameCyclone

时间2016.06.11

工具: FCEUX,待实验ROM一个

步骤:

1.打开rom,进入游戏;

 

2.打开十六进制编辑器: 

3.连发子弹,观察十六进制窗口中数据的变化,找到与子弹有关的地址.

 

这里我以040B为例,由于最后一发子弹打出后,最后的相关地址为040B(其实是子弹的横坐标移动速度)

4.游戏无动作时添加040B的写入断点:

 

 

5.打开追踪记录器,单击开始记录:

 

6.按子弹连发,马上调试器窗口暂停:

 

 

7.查看记录追踪器:

由于调试器窗口中:

06:884B:9D 08 04  STA $0408,X @ $040B = #$00

06:884E:9D E8 03  STA $03E8,X @ $03EB = #$00

06:8851:9D F8 03  STA $03F8,X @ $03FB = #$00

06:8854:9D D8 03  STA $03D8,X @ $03DB = #$00

故我们需要找到与X相关的程序.

 

上拉滚动条,不难发现:

 

$819F:A9 03     LDA #$03                                     A:80 X:00 Y:00 S:E6

$81A1:A2 0A     LDX #$0A                                     A:03 X:00 Y:00 S:E6

$81A3:85 00     STA $0000 = #$7A                             A:03 X:0A Y:00 S:E6

$81A5:A4 11     LDY $0011 = #$00                             A:03 X:0A Y:00 S:E6

$81A7:D0 02     BNE $81AB                                    A:03 X:0A Y:00 S:E6

$81A9:A2 00     LDX #$00                                     A:03 X:0A Y:00 S:E6

$81AB:BD 88 03  LDA $0388,X @ $0388 = #$01                   A:03 X:00 Y:00 S:E6

$81AE:F0 06     BEQ $81B6                                    A:01 X:00 Y:00 S:E6

$81B0:E8        INX                                          A:01 X:00 Y:00 S:E6

$81B1:C6 00     DEC $0000 = #$03                             A:01 X:01 Y:00 S:E6

$81B3:10 F6     BPL $81AB                                    A:01 X:01 Y:00 S:E6

$81AB:BD 88 03  LDA $0388,X @ $0389 = #$01                   A:01 X:01 Y:00 S:E6

$81AE:F0 06     BEQ $81B6                                    A:01 X:01 Y:00 S:E6

$81B0:E8        INX                                          A:01 X:01 Y:00 S:E6

$81B1:C6 00     DEC $0000 = #$02                             A:01 X:02 Y:00 S:E6

$81B3:10 F6     BPL $81AB                                    A:01 X:02 Y:00 S:E6

$81AB:BD 88 03  LDA $0388,X @ $038A = #$01                   A:01 X:02 Y:00 S:E6

$81AE:F0 06     BEQ $81B6                                    A:01 X:02 Y:00 S:E6

$81B0:E8        INX                                          A:01 X:02 Y:00 S:E6

$81B1:C6 00     DEC $0000 = #$01                             A:01 X:03 Y:00 S:E6

$81B3:10 F6     BPL $81AB                                    A:01 X:03 Y:00 S:E6

$81AB:BD 88 03  LDA $0388,X @ $038B = #$00                   A:01 X:03 Y:00 S:E6

$81AE:F0 06     BEQ $81B6                                    A:00 X:03 Y:00 S:E6

$81B6:A4 11     LDY $0011 = #$00                             A:00 X:03 Y:00 S:E6

$81B8:A9 0F     LDA #$0F                                     A:00 X:03 Y:00 S:E6

$81BA:99 CE 00  STA $00CE,Y @ $00CE = #$0D                   A:0F X:03 Y:00 S:E6

$81BD:20 22 88  JSR $8822                                    A:0F X:03 Y:00 S:E6

$8822:A9 00     LDA #$00                                     A:0F X:03 Y:00 S:E4

$8824:9D 88 03  STA $0388,X @ $038B = #$00                   A:00 X:03 Y:00 S:E4

$8827:9D 68 03  STA $0368,X @ $036B = #$00                   A:00 X:03 Y:00 S:E4

$882A:9D 78 03  STA $0378,X @ $037B = #$00                   A:00 X:03 Y:00 S:E4

$882D:9D 38 04  STA $0438,X @ $043B = #$00                   A:00 X:03 Y:00 S:E4

 

 

 

接下来分析程序:

 

$819F:A9 03     LDA #$03                                     A:80 X:00 Y:00 S:E6

寄存器A取立即数#03

$81A1:A2 0A     LDX #$0A                                     A:03 X:00 Y:00 S:E6

变址寄存器X取立即数#0A

$81A3:85 00     STA $0000 = #$7A                             A:03 X:0A Y:00 S:E6

寄存器数据送入地址$0000

$81A5:A4 11     LDY $0011 = #$00                             A:03 X:0A Y:00 S:E6

读取地址$11的值送入变址寄存器Y

$81A7:D0 02     BNE $81AB                                    A:03 X:0A Y:00 S:E6

不为0就跳过2字节,否则继续

$81A9:A2 00     LDX #$00                                     A:03 X:0A Y:00 S:E6

变址寄存器X取立即数#00

$81AB:BD 88 03  LDA $0388,X @ $0388 = #$01                   A:03 X:00 Y:00 S:E6

读取地址0388+X的数据

$81AE:F0 06     BEQ $81B6                                    A:01 X:00 Y:00 S:E6

0就跳过6字节,否则继续

$81B0:E8        INX    

变址寄存器X加1

$81B1:C6 00     DEC $0000 = #$03                             A:01 X:01 Y:00 S:E6

地址$001

$81B3:10 F6     BPL $81AB                                    A:01 X:01 Y:00 S:E6

为正数跳回$100-$F6=10字节

$81AB:BD 88 03  LDA $0388,X @ $0389 = #$01                   A:01 X:01 Y:00 S:E6

读取地址0388+X的数据

$81AE:F0 06     BEQ $81B6                                    A:01 X:01 Y:00 S:E6

0就跳过6字节,否则继续

$81B0:E8        INX                                          A:01 X:01 Y:00 S:E6

变址寄存器X加1

$81B1:C6 00     DEC $0000 = #$02                             A:01 X:02 Y:00 S:E6

地址$001

$81B3:10 F6     BPL $81AB                                    A:01 X:02 Y:00 S:E6

为正数跳回$100-$F6=10字节

$81AB:BD 88 03  LDA $0388,X @ $038A = #$01                   A:01 X:02 Y:00 S:E66

读取地址0388+X的数据

$81AE:F0 06     BEQ $81B6                                    A:01 X:02 Y:00 S:E6

0就跳过6字节,否则继续

$81B0:E8        INX                                          A:01 X:02 Y:00 S:E6

变址寄存器X加1

$81B1:C6 00     DEC $0000 = #$01                             A:01 X:03 Y:00 S:E6

地址$001

$81B3:10 F6     BPL $81AB                                    A:01 X:03 Y:00 S:E6

为正数跳回$100-$F6=10字节

$81AB:BD 88 03  LDA $0388,X @ $038B = #$00                   A:01 X:03 Y:00 S:E66

读取地址0388+X的数据

$81AE:F0 06     BEQ $81B6                                    A:00 X:03 Y:00 S:E6

0就跳过6字节,否则继续

$81B6:A4 11     LDY $0011 = #$00                             A:00 X:03 Y:00 S:E6

$81B8:A9 0F     LDA #$0F                                     A:00 X:03 Y:00 S:E6

$81BA:99 CE 00  STA $00CE,Y @ $00CE = #$0D                   A:0F X:03 Y:00 S:E6

$81BD:20 22 88  JSR $8822                                    A:0F X:03 Y:00 S:E6

$8822:A9 00     LDA #$00                                     A:0F X:03 Y:00 S:E4

$8824:9D 88 03  STA $0388,X @ $038B = #$00                   A:00 X:03 Y:00 S:E4

$8827:9D 68 03  STA $0368,X @ $036B = #$00                   A:00 X:03 Y:00 S:E4

$882A:9D 78 03  STA $0378,X @ $037B = #$00                   A:00 X:03 Y:00 S:E4

$882D:9D 38 04  STA $0438,X @ $043B = #$00                   A:00 X:03 Y:00 S:E4

$8830:9D 48 04  STA $0448,X @ $044B = #$00                   A:00 X:03 Y:00 S:E4

$8833:9D 18 04  STA $0418,X @ $041B = #$00                   A:00 X:03 Y:00 S:E4

$8836:9D 78 04  STA $0478,X @ $047B = #$00                   A:00 X:03 Y:00 S:E4

$8839:9D 98 04  STA $0498,X @ $049B = #$00                   A:00 X:03 Y:00 S:E4

$883C:9D 88 04  STA $0488,X @ $048B = #$00                   A:00 X:03 Y:00 S:E4

$883F:9D A8 04  STA $04A8,X @ $04AB = #$00                   A:00 X:03 Y:00 S:E4

$8842:9D 58 04  STA $0458,X @ $045B = #$00                   A:00 X:03 Y:00 S:E4

$8845:9D 68 04  STA $0468,X @ $046B = #$00                   A:00 X:03 Y:00 S:E4

$8848:9D 28 04  STA $0428,X @ $042B = #$00                   A:00 X:03 Y:00 S:E4

 

该程序的大意就是读取地址0388+X的数据,比较不为0后,X加1,$00减1,$00不为#00是就循环,所以修改对$00的赋值程序就可以了.这里我们修改前面的819F:A9 03为A9 09,

 

 

 

 

然后停止追踪记录:

 

双击停止断点:

 

 

回到游戏试玩:

 

连发的子弹达到了10发(子弹闪烁,这里截图只能看到5发......)

大功告成,另存为即可.

 

注意:子弹数不是想改成多少就改成多少,因为内存的分配是一定的,一般改成10发左右即可.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值