FC封神榜连击研究

来源:哔哩哔哩时间:2023-08-03 15:31:21


(资料图)

游戏:FC封神榜原版ROM

模拟器:FCEUX

经过测试,连击和等级相关,$0504地址是哪吒等级,1级的值是00,使用FCEUX的调试器给$0504地址添加读取断点,然后哪吒进入战斗,进行攻击时进入断点。

从$8539地址开始,等级的值存入累加器,然后累加器的值存入$14地址。判断是否小于4F,其实就是最大等级80级,小于就跳到8546地址,然后经过跳转$AF9E地址的一堆移位运算后,我也不怎么懂,$14地址值会变成等级地址的值/5取整,如11级是0A/5=2,16级是0F/5=3。

在8553地址代码将这个值存入累加器。然后值会与0C比较大小,比0C小跳到855B地址,不比0C小就继续走,将0B存入累加器,其实就是对应后面的12个概率。下一步把累加器的值存入Y寄存器。然后是X寄存器存入01。下一步是$43地址的值存入累加器,这个$43的值其实就是个随机数,从00-FF。下一步比较关键,将$12地址的值+Y寄存器的值,新的值作为一个地址,获取这个地址的值与累加器的值进行比较,$12地址一开始的值是857F,这个从852C-8534地址的代码看应该是战斗时代码设置的固定值,Y寄存器的值是刚才的等级地址值/5,比如游戏等级5级,那么04/5=0,857F+0=857F,然后获取$857F地址的值与$43的值进行比较,$857F地址的值是F2,也就是说随机数的值小于F2的话就跳到856E地址,856E开始就是把X寄存器的值存入累加器,如果等级是5级X寄存器的值是1,然后把累加器的值存入694D地址,其实这个694D的地址就是连击的伤害倍数,所以前期等级低就很难出现连击。从857F地址开始的值是F2、E6、B3、80、4C、33、19、0C、0C、09、07、02,也就是$43的随机数要在不同等级要不小于对应的值才会连击,所以等级越高越容易连击。而从8564地址开始则是X寄存器自增1,将Y寄存器的值存入累加器,清空Carry标志(位),之后是利用Carry位将0C与累加器值相加,比如等级5级,Y寄存器的值是0,累加器的值就是0,0+0C=0C,累加器的值变成0C,下一步是把累加器的值存入Y寄存器。下一步是将X寄存器的值与04比较,小于04就跳到855E地址。其实就是限制最大连击数4次。然后从855E开始新一轮判断,8560地址这里,因为Y寄存器的值已经变了,那么这里就应该是先857F+0C=858B,然后再获取$858B地址的值,是FF,也就是不小于FF才能继续往下,不然就跳到856E,所以就是结束了判断,X寄存器的值还是1,除非$43的值是FF。从$858B开始的值是FF、FF、FF、F3、E5、D9、99、58、25、18、0C、00,分别对应1-5级、6-10级、11-15级、16-20级、21-25级、26-30级、31-35级、36-40级、41-45级、46-50级、51-55级、56级以后。所以实际上从56级开始就是最大概率的连击了。

对于汇编也不太了解,也只是参照网上的修改魂斗罗的调试器教程研究的,使用FCEUX的调试器的ROM补丁方式改了几处代码,是否连击没有修改,将继续连击判断改成了完全随机,最大连击数改成10次。$41地址也是个随机数,把随机数的值加到累加器,再存入Y寄存器,这样上面判断连击获取的地址也会随机改变,地址的值也是完全不确定。这样就变成了等级会影响是否连击的概率,但连击几次就是完全随机了。

有兴趣的可以自己研究研究,有大神能指导下怎么简单研究封神榜的ROM文件就更好了,现在也就只会利用调试器来看看。

改的nes文件放这了,其实也就改了这两处

/fantasy/egl9wf/oxa4dm?singleDoc# 《fc封神榜》

标签:

图文推荐

热门文字

标签

精彩赏析