四、制作码表
字库我们可以通过软件直观的看到,但码表是要我们自己去整理的。每个游戏用到的字符都有不同,游戏制作者制作的字库也是各种各样,对应的编码根据各个游戏的程序的需求也会千差万别。所以每个GB&GBC游戏的码表都要我们自己去制作。
简单的流程是,我们先把字库中的字符肉眼或是软件识别出来,按顺序排好,再想办法找出每个字在游戏中对应的编码,最后整理成下面这种格式的文档(分别对应单字节和双字节的码表)。


之前我们通过观察,已经发现《超时空要塞7》这个游戏大概有3块字库,我们先把这三块字库(起始地址分别是A819A,AC1F0,F01DA)中的文字整理出来。这个没什么技术含量,都是15x15的大字,很好辨认的。
整理完看到第一块有204个字符,第二块有248个字符,第三块有237个字符。因为我们这里的字符数量超过了256,所以应该是用双字节编码。下面我们来想办法找出每个字对应的编码。
进入游戏出现的第一个对话框如下,我们在CrystalTile2中并没有观察到这段文字以图片形式出现,所以应该是用编码来实现的。

我们看到的是下面的文字,
銀河を調査中の
マクロス7艦は
通过和刚才整理的字库比较,我们发现“マクロス7”都在第一块字库中出现,并且挨得很近。我们就先试着找出这几个字的编码。我们从出现的第一个字符“7”开始按顺序给刚才整理出来的字符编号,注意编号要按照16进制的来,如下面这样。

对应到“マクロス7”这五个字符的编码分别是“1F 08 28 0D 00”。
现在我们在CrystalTile2中切换到“十六进制编辑器”模式。

选择上方“工具”菜单的“相对搜索”。

在弹出的搜索框中如下操作,右面选择“双字节”,值这里输入第一个字符的编码“1F”。点击增加。

继续把5个字符的编码都添加进去。

点击搜索。显示找到0个符合条件的结果。

那就删除最后一个数据再试一下,这次提示找到了4个符合的结果,并显示出了对应的搜索结果。前面是编号,中间是地址,后面是编码。

但这里给出的编码似乎和我们搜索的不太一样,这是因为我们使用相对搜索,是按照这几个字符之间的相对位置来搜索的,只要字符之间间隔和我们输入的一样都会被搜索出来。
现在我们搜索到的四组编码都是一样的,所以大概率是对的。我们先记下这些地址和编码。观察这四个字符的编码

后一个字节都是01,前一个字节和我们之前按照顺序编码的间隔一致。所以我们可以大胆的猜测“マ”后面的“ミ”的编码是1F01。那就来验证一下。
我们跳转到第一个地址F448C这里,找到刚才的编码1E 01 07 01 27 01 0C 01。

把这里的1E01改为1F01。

保存后打开游戏,运气不错,这里的本来应该是“マ”的地方变成了“ミ”。(如果不成功,可以继续把其他3个也分别改一下试试。)

按照这个规律,我们可以把第一块字库中“ア”开始的字符的编码都给找到,从0001到7101。
那么刚才的那句话中,后面三个字符“7艦は”的编码就应该是5900 2B02 1900。

如果从第一块字库的第一个字符“あ”开始编号(00),は和7分别对应19和59。因此这个码表的格式很可能是前一个字节表示顺序,后一个字节表示分组。因为我们已经知道了现在F448C这一处文本在游戏中出现的位置,就可以大胆的在这里测试我们的想法,最终可以把三块字库中每个字符的编码整理出来。
实际应该是有六块字库,之前看到的每一大块还细分为两小块,对应的起始位置和编码范围如下

我们把每个字符及编码按照如下的格式保存到txt文档中。等号前面是编码,等号后面是字符。

注意保存txt文档时,编码选择“UTF-16 LE”。
