十二、《圣剑传说》的汉化思路
接下来我们以《圣剑传说》(日文版)为例子看一下稍微复杂一点的游戏的汉化方法。
其实大部分的GB/GBC游戏都是采用单字节编码,输出的文字都是单个Tile的,像上面《超时空要塞7》那样简单替换字库,文本编码是不现实的。必须的要对游戏原来输出文本的程序进行修改。因为这GB/GBC游戏容量都非常小,所以游戏中的程序往往都身兼数职,除了输出文本之外,可能还要负责绘制游戏场景、对话框、判断控制符等等操作。所以不要轻易尝试把整个文本输出的程序替换掉或修改掉,我们要力争对原程序的修改越小越无关痛痒越好。
我们先看一下这个游戏文本输出的特点,再讲一下大体的思路。
用BGB模拟器打开游戏,同时打开调试模式中的VRAM viewer。来到游戏中出现第一句对白的画面。(这里不建议用开场或者命名界面来分析文本输出方式,很多时候这些地方的文本输出方式会和游戏内的不一样。)


我们可以看到,游戏中会先把所有字库相关的Tile写到VRAM中,然后从这里面挑选需要用的字符组成对应的文本显示在屏幕上。(VRAM中高亮的那些Tile就是文本显示时用到的Tile)
还有一个很关键的点是游戏中对于浊音字符的输出,是采用了两个Tile。上方的Tile用来显示浊音符号,下方的Tile用来显示清音的字符。而其他的清音只有下方一个字符,上方是空白。
首先,一行文本有上下两行可以用,意味着我们可以做较小的改动就实现大字的输出,原来的换行逻辑,上下两部分的输出程序应该都可以利用得上。
其次,游戏中对于这两种符号的输出方式是不同的,至少会有一步程序来判断是否要在上方输出浊音符号。因为我们在输出中文时是不会有浊音的问题的,把这里修改掉大概率不会有影响。这就是我们的切入点,我们可以把这里修改为跳转到输出汉字的程序。
大概的示意图如下,左面是原来游戏的文本输出方式,我们要在中间做一些修改,使游戏在读取到某些特定字符时(原来会被识别为浊音的),跳转到我们新增加的汉字输出程序,完成汉字的输出。

因为原来的游戏把字库写入VRAM之后,这一部分空间就不会再写入其他内容,除了上下用于显示HP/MP数字,以及末尾显示对话框的这些Tile之外,其余显示字符的空间我们都可用来放我们的汉字(下图中红框部分)。这样一共有109个Tile可以使用,如果用4个Tile来显示1个汉字的话,可以放下27个字。如果字体小一点,用11x11的汉字来拼字,6个tie显示2个字,可以放36个字。

再看游戏中的对话框,共有6行,每行去掉两边的框体,还有18个Tile。换算下来,用4个Tile来显示1个汉字的话,可以显示3行,每行9个字,共27个字。用11x11的汉字来拼字,可以显示3行,每行可以显示12个字,共36个字。

如果换成更小的字体,那可以显示的文字就更多了。因此对于对话部分的显示应该不是问题,可以选择的方式有很多。
对于其它的文本界面,还需要具体情况具体分析,这个后面遇到时我们再说。至少现在最关键的对话部分汉化的思路已经有了。
上一篇:
GB/GBC汉化经验分享之十一--Rom中的地址下一篇:
[ChisFlash] GBA游戏内置睡眠修复方法——修复缩小帽/妈3等游戏睡眠功能