2015-03-16 | 来源:互联网 | 小编:admin | 人看过
修改工具:Geiger’s Snes9x Debugger Mark 9
战后升级
$83/EFDC 90 05 BCC $05->EA NOP
EA NOP
战后能力+1
$83/DFFF 20 B0 E2 JSR $E2B0 [$83:E2B0]->A9 01 00 LDA #$0001
有BUG,敌人杂兵能力好像也用这段程序算,最后LV20的敌人杂兵能力基本全20-__-b
武器熟练直接到A
$83/E4E9 90 03 BCC $03 ->EA NOP
EA NOP
存放所全物品锁定
存放所里的物品地址在$7E:4FD0,在整理道具菜单里选存放所时,这些数据会被传到
$7E:6FCB,根据整理物品操作,在退出存放所时,把做的改动存回$7E:4FD0,所以只
要把读取和写入$7E:4FD0的操作用自己的程序代替,就虚拟出一个全物品的存放所,
而且由于$7E:6FCB数组的空间大小不像$7E:4FD0只能存128件物品,足以存放超过128
件物品,故可以突破存放所128件物品的限制,改出全物品。
$85/C785 A2 FE 00 LDX #$00FE ;X=(128-1)*2
$85/C788 BD D0 4F LDA $4FD0,x[$7E:4FD0]
$85/C78B 9D CB 6F STA $6FCB,x[$7E:6FCB] ;从$4FD0存到$6FCB
$85/C78E CA DEX
$85/C78F CA DEX
$85/C790 10 F6 BPL $F6 [$C788] ;循环128次
$85/C792 6B RTL ;返回时X=$FFFE
$85/C793 A2 FE 00 LDX #$00FE
$85/C796 BD CB 6F LDA $6FCB,x[$7E:6FCB]
$85/C799 9D D0 4F STA $4FD0,x[$7E:4FD0] ;从$6FCB存到$4FD0
$85/C79C CA DEX
$85/C79D CA DEX
$85/C79E 10 F6 BPL $F6 [$C796]
$85/C7A0 6B RTL
实现全物品的代码如下:
Start@ $85/C785
LDX #$014C A2 4C 01;X=($A7-1)*2
LDA #$3CA7 A9 A7 3C;从物品$A7开始,数量为$3C个,如果用$FF则是默认数量
@2 STA $6FCB,x 9D CB 6F
DEC A 3A
DEX CA
DEX CA
BRA @1 80 04;空间不够,利用从$6FCB存到$4FD0那段程序的空间
LDX #$FFFE A2 FE FF;-|
RTL 6B;-------|这两句补偿$6FCB存到$4FD0那段程序
@1 BPL @2 10 F2;循环$A7次
RTL 6B
最后改完后反汇编出来的结果:
$85/C785 A2 4C 01 LDX #$014C
$85/C788 A9 A7 3C LDA #$3CA7
$85/C78B 9D CB 6F STA $6FCB,x[$7E:6FC9]
$85/C78E 3A DEC A
$85/C78F CA DEX
$85/C790 CA DEX
$85/C791 80 04 BRA $04 [$C797] ;利用后面的空间
$85/C793 A2 FE FF LDX #$FFFE ;
$85/C796 6B RTL ;注意一下,看看原来这里是什么
$85/C797 10 F2 BPL $F2 [$C78B]
$85/C799 6B RTL
$85/C79A EA NOP ;避免出错,把多余的都NOP了
$85/C79B EA NOP ;
$85/C79C EA NOP ;
$85/C79D EA NOP ;
$85/C79E EA NOP ;
$85/C79F EA NOP ;
$85/C7A0 6B RTL ;
下一篇:堆栈及其使用(概念篇)