最近对ss版野球拳的胜率有点兴趣,所以花了一点时间追看了一下游戏的源程序,初步总结如下,如果有说错的请告知
1 游戏中有2个计数器,我们姑且称为 A计数器 和B计数器,然后在游戏中,A计数器和B计数器会一直分别累加递增,注意,这2个计时器递增的值是不一样的,A和B也是分别各自累加,A的值不会加到B上,B的值也不会加到A上面
2 游戏会读取A计数器的低4bit位 乘以16 ,在加上 B计数器的低4bit位 来 组合成一个新的 单字节数值,我们姑且称为C
3 游戏根据玩家的当前生命数和当前局数做一个运算 用这个运算好的值来定位在内存中的某个数值,这个数值我们姑且称为D
4 最后做比较,当C大于等于D,那么,这局你就输了,反之则你会赢
5 还有最后一步,游戏根据玩家的当前生命数和当前局数做另外一个运算 用这个运算好的值来定位在内存中的某个值(和第3部的内存地址不一样),我们姑且称为E
6 当C小于E,那么,这局就是平局
所以,判断你是否会赢的关键是看那A和B的计时器的值,另外虽然判断赢或者输以后,还会在判断一次是否要平局
破解方法很简单,就是在第一次判断赢或者输的时候,我们改成都是赢,后面的平局出现的概率很小,不改也可以,改也行
1 winhex打开镜像文件,搜索16进制数值
2232D01B6002C90F400840086303D0176002C90F330C1F39D216D01762226002420172FF61234208321C320CD11472FF42
前面几个数值
2232
改成0009保存即可,这样猜拳结果不是你赢就是平局
2 如果你不想要平局出现
1 winhex打开镜像文件,搜索16进制数值
2232D010600220088921D30F432B0009FFFF060166D8060142A4060DDF3E0601076A060C8524060C8528060C8538060C84FC060C84F8060C84E0060C8500060171
前面几个数值
2232改成0009保存即可,这样就不会出现平局了
最后的最后请注意,修改后的镜像请用附件的exe扫描一次,修正ecc和edc数据才可以,不然模拟器会死机
[ 此帖被YZB在2022-03-09 11:47重新编辑 ]