主题 : 【分享】ss版野球拳的胜率算法解析
YZB
级别: 超级版主

UID: 12451
精华: 6
发帖: 19104
威望: 173 星
金钱: 2052 浮游币
贡献值: 10261 点
好评度: 54888 点
人气: 4322 点
在线时间: 19798(时)
注册时间: 2004-10-02
最后登录: 2024-12-23
楼主  发表于: 2022-02-07 22:13

【分享】ss版野球拳的胜率算法解析

最近对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重新编辑 ]
附件: ECCRegen.rar (32 K) 下载次数:16
级别: 模拟小生
UID: 191946
精华: 0
发帖: 103
威望: 0 星
金钱: 1005 浮游币
贡献值: 0 点
好评度: 298 点
人气: 0 点
在线时间: 161(时)
注册时间: 2007-04-02
最后登录: 2024-11-01
沙发  发表于: 2022-02-12 14:24

Re:回 7楼(czg945) 的帖子

实机+虚拟光驱能用吗
级别: 模拟小生
UID: 191946
精华: 0
发帖: 103
威望: 0 星
金钱: 1005 浮游币
贡献值: 0 点
好评度: 298 点
人气: 0 点
在线时间: 161(时)
注册时间: 2007-04-02
最后登录: 2024-11-01
板凳  发表于: 2022-03-09 23:58

回 10楼(YZB) 的帖子

试了下,转换回来可以用。