✅ 操作成功!

[游戏汉化系列讲座] 第一讲:什么是码表和控制符脚本? by 蓝山老妖

发布时间:2023-06-08 作者:admin 来源:讲座
引用
[汉化入门之一] 什么是码表和控制符脚本?
游戏破解中很重要的一部分工作是文本破解。
包括文本的导出、导入、码表的整理制作、字库的制作。
今天我们先来讲讲码表和控制符脚本,这是文本导出的前提
首先介绍一下码表。
码表:
由于计算机使用二进制存储和处理信息,任何信息都是以编码形式存在于计算机内,比如有一句话:我是蓝山老妖。
计算机不能直接把这些字存储起来,我必须先给每个字指定二进制编码,
比如,我指定:
01=我
02=是
03=蓝
04=山
05=老
06=妖
07=。
(等号左面的数字是编码,用16进制表示)
那么,“我是蓝山老妖。”这句话在计算机中就存放为:
01 02 03 04 05 06 07
反过来,如果给出一段16进制编码:
03 04 05 06 02 01 07
那么,我们根据上面约定的字符和编码的对应关系,可以翻译出:
蓝山老妖是我。
讲到这里,我就可以给出码表的定义了:
像上面那样,表示字符和编码之间一一对应关系的表格叫作码表。
上面的这些编码是我为了举例子,自己指定的。
实际上,国际组织对于常用的编码有了官方定义,形成了一些国际标准,
如常见的中文编码GB2312, GBK 等,日语的shift-JIS等。
此外,还有为了兼容各种语言体系和字符集,规范计算机字符使用的Unicode编码。
常用的标准码表可以使用“常用码表产生器”来制作,附件里提供下载地址。
(注意:使用这个码表产生器产生的是符合ISO标准的全码表,而网上流传的Shift_JIS_ A.TBL 码表是删减后的码表,所以使用码表产生器产生的码表的编码数目多于Shift_JIS_ A.TBL ,差别仅此而已)
游戏机作为一种嵌入式系统,也不例外。
游戏中为了指示每个字符,给每个字符进行了编码。
文本在rom中是以编码的方式存放。
日语游戏中常用的编码是Shift-JIS编码标准,下面列出的是Shift-JIS码表的一部分:889F=亜
88A0=唖
88A1=娃
88A2=阿
88A3=哀
在rom中,我们看不到文字,只能看到一段段的编码:
如:93 FA 96 7B 代表了:“日本”二字
所谓的导出文本,就是把rom里的这样的编码,根据码表中的对应关系,
翻译成字符,并存储为单独文本文件的过程。
而导入文本,是导出的逆过程,是指把文本中的字符,根据码表中的对应关系,
翻译成相应的编码,并写入到rom中正确位置的过程。
注意,常用码表文件后缀为TXT或者TBL,本质上一样,可以在二者之间选择后缀手动修改,也可以不要后缀(本质上,文件后缀是系统用来关联文件和打开程序的,如果自己知道
该用什么打开,后缀有没有都一样)。用记事本或者UE等工具都能打开。
控制符脚本:
定义:我们知道,游戏中需要对文本格式进行一些控制,或者标示某些特别的信息。
这些控制是通过一些特殊的编码实现,我们称之为控制符。
常见的控制符有:换行,换页,人物名称,道具名称等等。
下面以换行符为例予以说明:
我们在游戏中看到的文本,通常并不是一行到底。而是分为多行显示,诸如:
No.111
004C86ED,87
------------
とびまわる火の玉を、
ひたすらよけつづけて、
ゴールするのだ。
------------
这是游戏《西游记金角·银角的阴谋》中的一段文本。
可以看到,文本分为多行显示。而实际上在进行游戏时,
可以看到NDS的屏幕上也是按照这样的方式显示文本的。
那么NDS怎么知道什么时候该换行呢?
我们使用CT(CystalTile)观察rom的16进制文件可以看到,每行结尾换行的地方,
都有一个编码“0A”,它既不属于前面的编码,也不属于后面的编码,这个0A就是所谓的换行符,
如下图所示:
如果我们在导出文本时,不对其进行定义,那么导出的文本中就不是上面看到的样子,而是每行单独为一段文本,看到的文本可能是下面的样子:
No.1
------------
とびまわる火の玉を、
------------
No.2
------------
ひたすらよけつづけて、
------------
No.3
------------
ゴールするのだ。
------------
可以看出,文本是断开的,每个文本都不是完整的句子。
导出文本不使用换行符,会有以下坏处:
1、翻译看到的句子是支离破碎的,不好进行翻译。
2、有些游戏,导入时可能会出错。
为了能够导出正确文本,我们需要在导出文本时设置正确的控制符,下面使用导入导出工具蓝山魔导为例。
我们首先新建一个文本文件,作为控制符脚本,
然后在里面敲入编码和控制符定义:
0A=↙
然后保存。控制符脚本就制作好了。
下面我们开始导出文本,首先,我们选择使用的码表,如下图所示:
选择使用的控制符脚本,如下图所示:
然后点击预览键,我们就可以查看在当前设置下导出的文本的样子,如下图所示:
👁️ 阅读量:0