在掌握字库修改和编码查找文本修改后基本上就掌握了游戏机游戏汉化的原理了,但仅仅懂得原理也还不够。虽然我们会使用《TLP》《UE》等这些工具来修改游戏,但这些工具的初衷并不是针对汉化设计的,面对如此多的文字内容要一点一点地人工修改,即便是神仙也会感觉到累,因此我们就有必要命令电脑来帮我们做一些规律性的操作(我很嫉妒电脑有光速一般的计算能力)。例如文本脚本的导入导出、中文字库的生成等等。
下个定义:文本脚本——文本内容依照指定的编码所对应的十六进制数字串。例如上一节找到“キャラクター……”的脚本“ 58 00 99 00 78 00 59 00……”。从这一段的特征上我们可以判断出“0058”对应“キ”、“0099”对应“ャ”等等,依此类推就可以得到该游戏的全部文字编码。得到了所有文字的编码后就可以编写程序,让电脑帮我们把这些数字化的文字给转换出来(导出)便于日后翻译,在翻译完后还要利用程序把翻译好的内容导入游戏程序中。文本脚本的导入导出实现的手段相对比较多,如多你稍微有一点编程能力的话还是最好自己编程,毕竟每个游戏都有每个游戏的特殊性(见得多了自然就会感觉到的)。如果实在没有这个能力只有借助现成的工具了,比较常用的就是《Script Extractor》和《Script Insertor》,两者是双胞胎前者导出后者导入,无论你采用自编软件还是使用《SEX/SIN》都需要编写一个码表文件。前面说过编码的集合就是码表,导入导出工具程序根据码表说明的对应关系来转换数字和字符的,码表就如同一本数/符字典。
码表编写很简单,Windows的记事本程序就可以编写了,格式上不同的工具会有不同的要求,如果是自己编写的处理程序格式可以自己定编写格式,不过最好还是采用目前通用的书写格式比较好。通用格式为:
(字符编码1)=(字符1)
(字符编码2)=(字符2)
(字符编码3)=(字符3)
……
编写的时候一般是按照编码从小到大的顺序编写的。以下是我书写的《光明之魂2》码表的部分内容:
《光明之魂2》的原始字库有七八百个字,一行一行地写也确实费事,书写的时候注意积累经验。小技巧:先用EXCEL(不会没用过吧?)创建形如这样的表格:
然后往下使用粘贴复制大法,一分钟就能搞定所有的编码了。接下来再对照《字模精灵组合器》里显示的字模一个字一个字地输入C列(老实点吧,这里就别想着用程序帮你写了。电脑把字库当图片了不会认识的。OCR可是世界难题哟,如果你真的写出这段程序的话就平步青云了,呵呵!!)。《字模精灵组合器》是设计成16*16字的显示模式并伴有显示字符位置的功能,每写一大段就对照一下位置,刚好可以避免遗漏掉字符(错位了可不得了呀,导出的文本会大变样)。等所有的字符都写完后就把全部内容粘贴到记事本中,最后替换掉制表位空白(TAB)就可以了。写完后一定要检查最后一个编码,代入游戏中看是否正确。检查完毕后就可以保存下来了,tbl是码表的公认扩展名,其实个人认为txt也未尝不可,两者的实际内容是一样的,而且这样更便于查看编辑。
在《光明之魂2》的文本脚本之中你还会发现一些形如“FFF?”这样的编码,而这些编码在游戏中并没有具体字符与之对应,而是出现的主角名字、字符显示速度减慢、换行、分段等等的控制功能,这样的编码称作控制符。写码表前不仅要摸清楚每个字符的编码而且还要弄清楚游戏中有多少控制符,每个控制符的具体功能是什么。我所研究出来的是:F5FF=主角名、F6FF=主角名、F7FF=数值、F8FF=恢复速度、FAFF=慢速、FCFF=主角名3、FFFF=换行、FEFF=块结束、FDFF=段结束等等。至于这些控制符该不该往码表文件里面写就要看程序是怎么设计的了,绝大多数程序都是要求从外部键入换行分段这些关键控制符的,其他只影响文本显示的控制符一般就写入码表,同文本一并导出。对于像减慢速度、变换字体颜色这样的控制符无法在导出的纯文本文件中体现,就可以将它们用特定的符号表示,自己记清楚哪种符号表示什么。还有一些不知道功能的控制符也可以用某个特别符号来表示,如果这样的控制符很多的话道出文本钟就会相应地出现过多的符号不便于浏览翻译,这时可以让程序把这些未知的控制符的值输出到导出文本中就可以的。不过要注意,因为这些文本在翻译后还要再次导入游戏中,同样需要靠工具程序完成,因此在设计导出程序的时候尽量考虑一下导出时候的处理,例如对未知控制符的值在导出的时候就可以加上“[ ]”符号括起来等等,导入时候程序判断到有这个符号便照中间的内容直接写入游戏中,而不用转换。办法都是自己想、自己定,初次接触难免有考虑不周的地方。
码表做好后接下来就该搞清楚游戏ROM中哪些才是脚本内容?我们该导出哪些?一般地说在游戏文件中文本脚本都是一句接一句地放在一起的,构成脚本区。可能所有的文本脚本都放在一起也可能脚本会分割成几个大的段分别来放置,前者为数更多。只要我们找到了一段脚本区的最开始就可以顺次导出了,所以找出脚本头是最关键的。至于查找实际上是不用什么特殊工具来完成的,在这里靠工具不如靠自己肉眼观察。这次我们从《光明之魂2》第一关的第一句开始找起。
到了这里大家已经整理好了码表,所以就可以把这句话直接翻译成编码后用《UE》查找就可以了,完全不用上一节介绍的方法,那样操作太复杂了。大家头脑一定要清晰,我们所做的每一步都是由针对性的。两分钟搞定,查找到0x368578,这就是句子的开始。根据一系列的试验我们发现一句话的构成:开头4位“00 00 01 00”为脚本句子的开头(在与NPC对话的时候这里标示说话人头像的代码),然后紧接着就是句子主体,其中还包含一个换行符“FFFF”(因为游戏文本区显示14*2个字符。由于该游戏并没有自动处理换行的程序,换行是靠控制符实现的),“FDFF”是一段的结尾符。等我们总结出脚本的特征后就在附近浏览看看哪些地方还有这些特征,有这个特征的多半就是文本。经过一阵的观察发现从0x368574以后的很大一块区域具有该特征并具有连续性,而这之前的区域没有这个特征。
基本上就可以认为0x368574就是脚本的开头了,起码应该是这一块脚本的开头。至于还有没有其他的先可以不考虑,等到文本导出后再说。至于脚本的结尾到不用太在意去找了,导出的时候多导出点超出也没什么关系,大不了把后边的多余部分删除掉就完事了。
文本脚本导入导出工具强烈建议有能力者自行编写!这可以让你更加深入地理解脚本的原理。本人汉化《光明之魂2》采用了PGCG汉化小组自行设计的一套导入导出工具,经过以上分析并编程得到导出文本(片断演示):
<368578> •••ヒソヒソ
<36858E> •••え?そうなんですか?
<3685B0> シッ! 今•••物音がしたぞ
<3685D2> あ•••今の••• 私のおなかの音です ……
大体上介绍一下《Script Extractor》。《Script Extractor》是使用得比较多的导出工具,该工具是以字节为单位导出数据并转化为文本的,所有控制符要求写入码表中。“line: xx”表示行结束;“msg: xx”表示块结束;“sect: xx”表示段结束;“prog cont char: xx=...”表示控制符,其他功能可以查看软件的README,有详细说明。
从上到下依次输入的是码表文件名、ROM文件名、导出文本文件名、导出开始地址、导出文本量(字节)。该工具有个最大的弊端就是导出的文本段没有注明脚本的地址,这会给导入制造很大的麻烦,好在程序包里面附带了C++源程序可以修改,不过不懂C++还是慎用该工具。《Script Insertor》主要功能是导入,操作方法和《SEX》差不太多,具体运用还是查看说明文档。除此之外还有一款国产的文本工具《菜鸟》,是由汉化者“菜鸟小生”编写的,功能设计上比较全也比较杂,初学者不太容易掌握。这个工具可以在《游戏汉化联盟》网站上下载。
在这节的最后我再谈谈计算机编码的问题。虽然之前我说过计算机编码和游戏编码一点联系也没有,但GBA游戏最初也是在电脑上编写的,某些程序员为了编写效率降低成本也可以说是懒惰、偷工减料,部分甚至全部采用了计算机编码,如果是这样的话倒是给我们汉化时编写码表带来了不少方便。字库编码是字库组织的依据,不同国家和地区有不同的编码标准,和中文字库有关的常见编码有:单字节编码、GB2312-80、GB12345-90、GBK、Unicode编码、ISO10646 / Unicode字符集、GB18030-2000、BIG5编码、方正748编码,下面简要介绍几个比较常用的:
“MS Windows:Windows Latin 1(ANSI)”这是Windows操作系统最基本的默认编码,在记事本的另存为对话框里可以清楚地看到这个编码。
“GB2312-80” 全称是GB2312-80《信息交换用汉字编码字符集 基本集》,1980年由中国颁布,是中文信息处理的国家标准,在中国大陆地区及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码(时不时感到自豪呢?)。在中文Windows3.2和苹果OS中就是以GB2312为基本汉字编码,Windows 95/98则以GBK为基本汉字编码、但兼容支持GB2312。该编码共收录6763个简体汉字、682个符号,其中一级汉字3755个,以拼音排序,二级汉字3008个,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用。互联网上的大多数简体中文网站都是采用这个编码的,在网页内查看一下编码就知道了。在1990年国家还颁布了“GB12345-90”字符集,主要添加了非常用字和繁体字部分,以适用于古籍等的编定。此外中文字库还有“GBK”、“BIG5”等等,后者在中国香港澳门以及中国台湾得到广泛使用(知道为什么以前玩台湾游戏会出现乱码了吧?需要切换一下编码的)。还有一种特殊的编码“Universal Multiple Octet Coded Character Set(Unicode)”,这是一种包含有中日韩等多国文字的编码集,是由美国人颁布的(吃饱了就该看好世贸)。
“Shift-JIS”、“EUC-JIS”等等这些都是鬼子们国内使用编码,在游戏机游戏中前者更为常见,虽然游戏本身用不到这么多字符但不用自己去整理文字了,省事啊。
以上这些编码的详细标准以及码表很为庞大,这里考虑篇幅不详细介绍,有兴趣可以查看文字处理方面的网站,比如“方正字处理”等等,这是一门学问别小看了。
小结:这一节介绍了文本脚本的导出,理论并不深入但过程比较繁琐,大家要理清头绪。在编写字库的时候又有几点:日文汉字输入可以安装一个日文输入法,以前95下玩港台游戏所使用的《南极星》就不错,Windows自带的字符映射表也可以,里面有所有日文字符的(还有尼加拉瓜文字?厉害)。书写编码的时候也要注意到导出工具的特征,是不是需要高低反等等,就拿上面我编写的那个《光2》码表来说,由于导出工具是以字节为单位读取数据的(编写程序上要相对简单些吧),所以就需要高低反;你自己编写工具是双字节的就不需要反了。书写字符的时候尽量采用ANSI或者GBK,对于游戏中的特殊符号找不到的可以使用近似符号代替,反正我们又不去翻译符号,不过还得记清楚符号之间的对应关系。如果汉化的游戏文本很大,那千万不要使用《SEX》,因为没有标出文段地址,而大多数情况下翻译后的中文句子字符数量远远小于日文句子,如果没有地址标示在写入的时候只能顺序写入,于是就会发生脚本前移的问题。上面的《光2》文本导出演示可以清楚地看到每句前都有地址标示。自己在编写工具的时候也一定要记得让程序标出地址,切记!!。还有就是本节之所以不以上一节的那句“请选择……”开始查找是因为对话文本的情况最为复杂,控制符也最多,我们在导出文本之前一定要整理出所有的控制符一个都不能漏掉的。还有一个原因就是游戏的文本脚本一般都是按照出场的先后顺序写进游戏内容中的,从最开头的内容找起这样更容易发现脚本头部。不知道大家玩了PGCG汉化的《光明之魂2》中文版没有?游戏中的文字显示的时候偶尔花屏甚至造成死机,这全都是因为我当初在书写码表的时候没有分析完整,把其中一个为“FFFE”的控制符给漏掉了,到后来导入的时候恍然大悟,灰心丧气差点没气死,最后还是手工一句一句导入的,不得已采用了一些非常手段,最后还是造成了游戏运行的不稳定,而VBA模拟器对这个游戏本身兼容性也有一点问题(绝非推卸,那个飞天的恶魔天使赖着不下来和中文版没有关系)才使游戏出现这个BUG。以身说法是为了让大家知道不在意细节会酿成怎样的后果?大家一定要细心!
联系客服