首先找到了人物名字的规律
假设A就是0x01
RONALDO就是
12 0F 0E 01 0C 04 0F
(无空格)
推测就是
A B C D E F G H I
1 2 3 4 5 6 7 8 9
J K L M N O P Q R
A B C D E F 10 11 12
S T U V W X Y Z (空)
13 14 15 16 17 18 19 1A 1B
罗纳尔多的前面是拜仁大将埃尔伯ELBER(05 0C 02 05 12)
后面是迪达DIDA(04 09 04 01)
这些内容在rom里是连续存储的,如下:
05 0C 02 05 12 00 00 00 00 00
12 0F 0E 01 0C 04 0F 00 00 00
04 09 04 01 00 00 00 00 00 00
这意味着一件事,也就是说球员名字是这么存到一块儿的。
而且还意味着每个球员的名字是10个字节组成。
这些字节都不是真正的字节,而是索引,也就是说0x01为A(而不是ASCII)
这个索引很可能与PS版胜利十一人当中的球员名修改时的字符表相对应(未证实)
第一个球员名是法国的巴特兹BARTHEZ(02 01 12 14 08 05 1A)
在中文汉化版rom里,出现位置是0x001D201C,经过验证发现日文ROM里也是这个位置,而且还说明英文字母和平假片假名(甚至是个别的汉字)都是同一套索引。我可以大胆假设这个索引应该就是PS版字符表的那个索引。
接着向下找能力值,还是找罗纳尔多
罗纳尔多能力值为:
攻击 18 0x12
防御 12 0x0C
平衡 17 0x11
体能 17 0x11
速度 18 0x12
加速 18 0x12
反应 16 0x10
跳跃 17 0x11
头球 15 0x0F
技术 19 0x13
传球 17 0x11
射力 17 0x11
射准 18 0x12
盘带 18 0x12
弧线 13 0x0D
我尝试搜索前5个能力值(12 0C 11 11 12)的序列,但是未果。
那么我尝试另一种思路:我从法国队巴特兹名字的首地址,10字节10字节地向后dump,我想,球员名字区dump完了很有可能就是数据区了吧(x
观察了一下,从巴特兹的名字经过 25,982 条球员名数据后,似乎不再有像是球员名的条目了
这个地址是0x001D4E84
从这个地方向后有一大堆0值,直到0x001D503C才出现了一个数据0x60,那么我就看一下……
然后也毫无头绪,事实上我还尝试了去按照字节间的数值差异关系去套某个球员的能力值,还是未果
那么……我就要想另一个思路,是不是为了节省空间,KONAMI它把不同的能力值存到同一个字节去了呢?!毕竟本作能力值沿用PS版的满分19分体系,仔细想想,一个字节存0~19的状态确实很浪费了,所以——一个字节可以存几个这样的状态呢?
19这个数值,刚过16(2^4)而不过32(2^5),占用的二进制位也就是5位,这个5位未免有点诡异了……毕竟都很难凑齐一个字节(你要是4位的话还好,刚好半个字节),那我又有一个想法了,我见到的本作最低的能力值应该也就是12,也就是说我们见到的实际能力值范围是12~19,不妨大胆假设,会不会数据库里只存了12,13,14,15,16,17,18,19,这8种状态呢?!8这个值,可是刚好占用半个字节!
马上来试试,我们先看罗纳尔多……罗纳尔多的能力值
攻击 18 0x12
防御 12 0x0C
平衡 17 0x11
体能 17 0x11
速度 18 0x12
加速 18 0x12
反应 16 0x10
跳跃 17 0x11
头球 15 0x0F
技术 19 0x13
传球 17 0x11
射力 17 0x11
射准 18 0x12
盘带 18 0x12
弧线 13 0x0D
我们给它统统减掉12!结果就是:
攻击 6
防御 0
平衡 5
体能 5
速度 6
加速 6
反应 4
跳跃 5
头球 3
技术 7
传球 5
射力 5
射准 6
盘带 6
弧线 1
605566453755661
……
我们两个一组地分一下吧
好,每组合并,得出的是……
60 55 66 45 37 55 66 (最后那个就忽略掉吧)
然后还是没搜出来~~~
没关系,可以再变化下——下次换另一个思路(或者把这些个思路的数值变一下再试试)
不得不说,第一次搞这种事情,毕竟对手是GBA游戏rom……等于要自己去设想一套规律然后去套一堆很是plain的数据来尝试得到想要的结果诶~
最后嘛,改名留念吧!
以后如果把能力值的规律研究出来了,我就写一个编辑器,因为这个版本的《胜利十一人》比较少有人玩,也没热度去让人研究,所以我就去当扫地伯伯咯~~
暂无关于此日志的评论。