PS1 字模分析法
原文档为 txt 格式,以下内容原样显示仅做必要调整
字模分析法——魔法皇子
字库是汉化一个游戏的关键,通常汉化游戏都是从找字库开始的。早期的ROM大都可以使用TLP直接修改字库,这种字模大都是16*16、8*8、8*16大小的。随着游戏技术的发展,越来越多的游戏使用了11*11、9*9、12*12这样美观的字模。如果这种字模是标准的,就可以自己写个程序来显示它。但是很多程序员并不是想象的那么友善,他们会作出千奇百怪的储存形式。这时,我们只有两条路可走:ASMHACK和字模分析。前者适合会ASM的高手来做。而我们这些不懂ASM的菜鸟来说,只有一条路可走,那就是字模分析。
什么叫字模分析?就是确定一个字模的地址后,只使用一个16进制编辑器,对字模进行修改,一点一点的试出字模的显示方式。这种方法是及其自疟的,(其实汉化本身就是一种自疟的工作)但是不要害怕,字模分析并不是很难。只要你有顽强的毅力,是完全可以搞定的。
进入正题。首先准备分析字模所需要的东西,一个需要分析的ROM、(这里使用PS的永恒传说,因为它包含了很多的储存形式,而且还不只一次的误导笔者。)一个模拟器、(这里使用EPSXE和AdriPSX010615)一个十六进制编辑器、(这里使用 HEXWORKSHOP)TLP。此外,如果是PS,还需要SHIKEYU前辈编写的镜像文件更新程序。
开始吧。首先我们用AdriPSX010615这个模拟器载入游戏,进入LOAD菜单。这时就可以看见一段日文。【01】那么游戏中的字库便被保存在内存或显存中了。OK,在这里保存一个进度,退出。使用TLP打开那个进度。转换为GB2BPP模式,然后一直向下翻……终于在227300左右发现了一处很象字库的东东,(通过观察游戏可以发现,这个游戏的字模大概是11*11,1BPP的,所以前面松后面密的就是字库。)随便在这里粘贴点什么,比如粘贴一张BMP格式的美女照片。然后保存,用AdriPSX010615载入进度。好了,那里的字已经变得面目全非了。不过还不要高兴的太早,这只是内存或显存中的字库,也许它在ISO中是被压缩的。那么下一步就是要找出字库是否被压缩存放在ISO中。
怎么找呢?这个最简单了,用HEXWORKSHOP就可以搞定。在即时存档中找到字库的位置,抄下几个16进制数,(这个存档必须是没有修改过的)再查找ISO中是否含有这段数据。很幸运,在ISO的末尾处找到了这段数据。这就证明《永恒传说》的字库没有被压缩。下一步我们就可以分析字库的储存方式了。
在分析字库之前,我们要找到字库所在的文件,因为现在还不知道某个字模的确切地址,而TLP不支持像ISO那么大的文件,所以只能修改ISO中字库所在的文件,再将字库写入到ISO中。由于笔者不知道有没有其他程序可以查找一段数据在某个文件中。所以只能使用HEXWORKSHOP来逐个文件来查找。还是使用那段字库的数据。最后在SLPS_030.50这个PSEXE文件中找到了。然后用HEXWORKSHOP打开它,找到这段数据在这个文件中的位置:8ac38。然后再使用TLP打开SLPS_030.50,跳到8ac38处,由于现在还不知道某字模的确切地址,我们只有一点一点的试出来。
先选定一个假名あ,然后进入游戏,找到一处显示あ的语句【03】。然后用TLP打开SLPS_030.50,随便插入一张图片覆盖这里的数据,保存【04】。然后用镜像文件更新程序将修改后的文件写回到ISO中【05】。用EPSXE载入。现在那里的字已经变了【06】。然后在用TLP打开一个没有修改的SLPS_030.50,找一张小点的图片覆盖刚才修改的区域,保存,写入,载入。如果覆盖之后仍然没有看见字的变化,则重新插入覆盖其他地方,直到插入图片后,游戏中字体发生变化。如果你此时已经感觉范围已经够小了,就用HEXWORKSHOP载入,如果认为还不够,就重复以上几步,直到你满意为止。通过上面的分析,已经发现あ字就在8aa00附近。现在用HEXWORKSHOP打开一个没有修改的SLPS_030.50,跳到8aa00处,修改一段后,保存,【07】回到游戏。如果发现字体没有变化,就再向下替换,直到看见字体发生变化,然后再修改这个字体变化前所修改的数据,一点一点的缩小范围。最后就会找到あ的首地址:8abb8。
好了,现在已经知道首地址了,下面就是分析字模了。首先要确定字模的大小和格式,这个就需要观察游戏的截图了,【08】通过观察可以发现,字库应该是12*12 2BPP模式(少一种颜色)。但是否是这样,我们还需要进一步的分析才能知道。用HEXWORKSHOP打开文件,跳到8abb8处,先将第一字节替换为00,保存,回到游戏发现了【09】这样的情况,惊讶吧,字已经变得就剩下最右面得一点点了。先不管这些,再将这两个字节替换成别的,就替换FF吧,回到游戏后,又变成【10】那样的情况。好,这就证明这个字节为字模大小控制,但是现在还不知道是否只有一个字节为大小控制。我们再修改第二个字节将它修改为00。回到游戏看见字模已经变了【11】。那么就证明第一个字节为字模大小控制符。如何知道它代表什么呢?我们可以直接在这里一点一点的试出来,也可以使用下一个字的控制符与这个字的比较。由于我们还不知道多少个字节表示一个字,所以不知道下一个字的起始地址,那么就直接试出来。这个字节原来为0A,现在将它+1,改成0B,进入游戏后发现字模已经宽了一些了【12】数一下大小是12*12。然后再将它-1,改成09,字模就变成了10*12。然后按照此方法可以将字模控制符试出来。【表1为全部字模控制符】
0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00
16*12 15*12 14*12 13*12 12*12 11*12 10*12 9*12 8*12 7*12 6*12 5*12 4*12 3*12 2*12 1*12
找出了控制符之后,就可以一点一点试字模了。在试字模之前,先来了解一下字模在游戏怎么储存的。以1BPP为例,将16进制转换为2进制并按照一定的顺序排列,便显示成了字模。不懂没关系,继续往下看,相信你会理解的。
用HEXWORKSHOP打开文件,跳到8abb9处。(因为第1个字节为字模控制)然后一直按FF,这一步是将这个字模全部涂满,【13】然后在将8abb9处改成a5(转换为2进制便是10100101)回到游戏中看见字体已经变了。【14】抓图之后放大观察,发现没有?那些变化了的地方,如果按照1为白色,0为空白(阴影)排列起来便是这些改变的部分了。然后数一下改变了那些象素后再将A5改为FF,并把下一个字节改为A5。然后再观察抓图,这次并不是那么明了【15】,如果辨认不清楚,再将所有FF改为00,【16】现在看图是不是就能看出来了。然后便用以上方法,将哪个字节表示哪些象素试出来。至于那些字体上有阴影,但并不一定是2BPP,通过观察前一些截图,就会发现字模的阴影是自动加上去的,这种游戏在PS中还不是小数目,比如《SD高达F世纪》、《兰古瑞萨4》。
好,看到这里,你应该已经学会了字模分析法,也许很多新手不知道该如何找到字库,在TLP中看不见,便认为字库被压缩了。其实并不是那样,TLP只能正常显示8*8、16*16、8*16、16*8(^^b好像没有什么游戏用这种字模)的字模。其他字模并不能正常显示。但是仍然可以在TLP中确定字模在什么位置,文章的最后便是在TLP中看见一些字库的截图。
【lan3】兰古瑞萨3(SS,15*16、1BPP)
【SSBIOS】SSBIOS字库(未知格式)
【PSBIOS】PSBIOS字库(15*16、1BPP)
【SAGA2】浪漫沙迦2(BMP,同类游戏有放浪冒险谭)
【SDF】SD高达F世纪(12*12、1BPP,同类游戏有武臧传)
【lan4】兰古瑞萨4(PS,11*11、1BPP,同类游戏有兰古瑞萨1+2(PS),兰古瑞萨5、西游记)
【KOFEX2】KOFEX2(GBA,12*12、2BPP)

