(PS)かまいたちの夜•特別篇 汉化笔记 三

3.           字库分析

字库首先要知道是自带字库还是bios字库,这个一看就知道不是bios字库了。

 

Agemodebugger载入游戏,以前一载入就死掉,最后发现是一定要载入bios。吓死,还以为要改代码了。

载入后进入说明页面,随便找个人的说明,pause后,dump,打开ram找文本,这些文本是在程序中的,圈一块文本,下内存访问断点。

然后离开这个页面,此时断下,在ram中看看断在登场人物绍介字上,点中asm log,打开ida参照。一直点resume,直到访问下一个字为止。

再次dump,看看vram,如下:

 

 

其实vram我也看不出多大的门道,这里也就参考参考,登这个字已经写入vram了,只是还没有写入显示区域。

这个字的位置看上面标题栏,(375,11),这是大概的位置,可供参考。

 

接下来就是看代码了。代码这边基本上没有碰到什么问题,算是幸运。

 

大概情况是首先读取一个SJIS code,比如936F,先看是不是8140,是8140的话单独处理,估计也就是跳过这块空间。

然后要处理一下,代码如下:

        v1 = code + 0x7ec0; // 7ec0 + 8140 = 10000

        a0 = v1 - ((v1 & 0xff00) >> 2); // 相当于减掉40个低位编码空间,SJIS编码从40开始

        v0 = (a0 & 0xffff) * 5;

        v0 = 0x8006b754 + ((v0 & 0x0fff) << 2);

 

可见0x8006b754是一张表的起点,每个表项4byte

从最后一步处理可以看到,总共只有0 – fff共计1000个编码,那么表的大小应该是0x1000 * 4 = 0x4000

 

内存中的8006b754,对应程序Slps_017.94中的0005BF54

 

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

 

0005BF50   CC 92 07 80 40 81 4E 00  FF FF 00 00 FF FF 00 00   Ì’.€@N.ÿÿ..ÿÿ..

0005BF60   FF FF 00 00 FF FF 00 00  41 81 04 00 4E 92 2E 01   ÿÿ..ÿÿ..A..N’..

0005BF70   DB 8D FB 02 81 96 55 06  FF FF 00 00 42 81 01 00   ۍû.–U.ÿÿ..B..

0005BF80   82 96 AD 02 DC 8D 9B 05  A9 89 00 07 FF FF 00 00   ‚–­.܍›.©‰..ÿÿ..

0005BF90   83 96 6C 05 50 92 28 02  DD 8D 04 03 FF FF 00 00   ƒ–l.P’(.ݍ..ÿÿ..

0005BFA0   FF FF 00 00 84 96 0A 03  FF FF 00 00 DE 8D 05 06   ÿÿ..„–..ÿÿ..ލ..

 

前两个bytes就是编码,后两个bytes是字模的入口,FFFF0000,表示没有被占用。

顺序的编码应该隔5组数据排列,81 4081 41,81 42都是如此,但是81 43之后就没有了,可见没有这个编码。

81438144是“,”和“.”。看来是没有用到。

 

程序中如果计算code后发现并不相等(显然会出现一对多的情况),就一直向后寻找0x1000个(- -b),直到相等为止。

如果最终都没有相等,那么就设成8140

 

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

 

0005FF10   A3 89 45 02 FF FF 00 00  FF FF 00 00 4A 92 64 04   £‰E.ÿÿ..ÿÿ..J’d.

0005FF20   D7 8D 82 03 FF FF 00 00  FF FF 00 00 7E 96 1B 05   ׍‚.ÿÿ..ÿÿ..~–..

0005FF30   FF FF 00 00 D8 8D 41 05  FF FF 00 00 FF FF 00 00   ÿÿ..؍A.ÿÿ..ÿÿ..

0005FF40   FF FF 00 00 FF FF 00 00  D9 8D 01 04 FF FF 00 00   ÿÿ..ÿÿ..ٍ..ÿÿ..

0005FF50   FF FF 00 00 02 00 FF FF  02 00 00 00 03 00 01 00   ÿÿ....ÿÿ........

 

数据看起来是到5FF54结束的。正好4000个。

 

下面将SJIS code之后的2bytes左移1位,也就是乘2,到[80079490] + 这个偏移处读取2byte

再将这2bytes左移2位,也就是乘4,还是到[80079490] + 这个偏移处,这就是字模的入口。

[80079490] = 800d39bc

 

这个地址装载了bin.pac的第一段数据,我称之为bin_0000.bin

该数据的结构也很简单,头部是入口,2byte一项,入口乘4就到字模。入口和字模是紧挨的。

第一个入口是03 F5(注意这个数据是大尾的),所以总共3F5 * 4 / 2 = 7EA(约2000项)

字模格式如下:

第一个字节是宽度,第二个字节是高度。宽度不定,高度总为0x1319),宽度最大到(0x39

之后的数据是4bits一组,字节内是小尾,字节间是大尾的。也就是 AB CD EF GH,就按照这个顺序读取。

如果不是F,直接输出,如果是F,那么后面读2个,分别是输出O,和长度LL要加4。显然够4个才能赚半个字节。

 

显示的时候会从gp[1A0]读取一个4bits值,放到高位和输出组合成一个byte,为啥还不清楚。

gp[1A0]和控制符cx有关,应该是控制颜色。

 

导出全部字模的程序是FuckFont,可以看到有部分特殊符号,编码和图像如下:

 

要看具体的代码可以打开idb文件,到functions中搜索display_char

一般来说,参数总是放在a0a1…之中,返回值放在v0之中。我习惯把参数当成注释写在函数那里。

 

关于IDA的操作我这里不会多说什么了,以后可能会在其他地方提一些相关要点。这里默认本文读者熟悉IDA

CSDN(中国软件开发者网络)是中国最大的IT技术社区,提供了丰富的技术资源和交流平台。在这个社区中,有许多软件爱好者和开发者,为了方便大家更好地交流和学习,他们积极参与到各种软件的汉化工作中。 其中,PS(Photoshop)软件是一款非常知名和常用的图片处理和设计软件。然而,PS软件的原版是英文界面,对于一些不熟悉英文的用户来说,使用起来可能会有一定的困难。为了解决这个问题,有很多CSDN用户利用自己的技术知识和热情,积极参与到PS软件的汉化工作中。 通过CSDN社区的讨论和合作,这些用户汇集了各自的翻译和技术能力,对PS软件进行界面汉化,将其翻译成中文版。他们对软件中各个功能和选项进行翻译,并确保翻译的准确性和通顺性。 PS软件汉化的过程中,这些用户互相交流和分享经验,使得汉化的质量和效率得到提高。他们通过反复测试和优化,确保汉化后的软件在使用上没有问题,可以方便用户的操作和理解。 汉化工作的成果通过CSDN平台进行分享和发布,供其他用户下载和使用。通过这种方式,他们为广大的软件爱好者和开发者提供了一个更便利的工具,促进了技术的传播和交流。 总之,CSDN是一个汇聚了许多软件爱好者和开发者的IT技术社区,在这个社区中,用户们通过合作和共享,积极参与到PS软件的汉化工作中,为用户提供了一个更方便和易用的软件版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值