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

UID: 12451
精华: 6
发帖: 19097
威望: 173 星
金钱: 2014 浮游币
贡献值: 10169 点
好评度: 54867 点
人气: 4322 点
在线时间: 19722(时)
注册时间: 2004-10-02
最后登录: 2024-11-28
楼主  发表于: 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: 141306
精华: 0
发帖: 147
威望: 0 星
金钱: 1241 浮游币
贡献值: 25 点
好评度: 447 点
人气: 0 点
在线时间: 269(时)
注册时间: 2006-09-11
最后登录: 2024-11-17
沙发  发表于: 2022-02-08 21:42

感谢Y大的教程,附上修改好的版本下载,如果违规请Y大删除链接。
链接:百毒网盘/s/1VowTmx3oQnsTNpWRWfMOzQ?pwd=nal9
解压密码:bbs.chinaemu.org
级别: 模拟专家
UID: 141306
精华: 0
发帖: 147
威望: 0 星
金钱: 1241 浮游币
贡献值: 25 点
好评度: 447 点
人气: 0 点
在线时间: 269(时)
注册时间: 2006-09-11
最后登录: 2024-11-17
板凳  发表于: 2022-02-08 23:27

回 3楼(YZB) 的帖子

我做了两个镜像,一个是有平局的,一个是没平局的。
级别: 模拟专家
UID: 141306
精华: 0
发帖: 147
威望: 0 星
金钱: 1241 浮游币
贡献值: 25 点
好评度: 447 点
人气: 0 点
在线时间: 269(时)
注册时间: 2006-09-11
最后登录: 2024-11-17
地板  发表于: 2022-02-10 10:59

回 7楼(czg945) 的帖子

最新版的SSF和RETROARCH都可以支持

或者用最新版mame里的chdman.exe转换回cue+bin

chdman extractcd -i "文件名.chd" -o "文件名.cue"
[ 此帖被aliang在2022-02-10 11:10重新编辑 ]