A9VG电玩部落论坛

 找回密码
 注册
搜索
查看: 20880|回复: 16

A9VG汉化组·NDS汉化小白教程(第三话:字库码表篇·初步)

[复制链接]

精华
7
帖子
1481
威望
9 点
积分
2042 点
种子
5 点
注册时间
2004-9-24
最后登录
2015-1-9
 楼主| 发表于 2006-7-16 02:15  ·  广东 | 显示全部楼层 |阅读模式
前两话之后,终于进入了有点技术含量的部分了……
当然,考虑到这是篇入门教程,所以我尽量说得详细一点,希望各位不要嫌过于罗嗦和小白……

PS:这篇教程涉及了一些文本导入导出、改图等本系列教程还没有详细讲解的内容。如果没有接触过汉化的朋友,建议参考其他达人写的汉化相关教程有个大概了解,这样可能会比较方便理解本文内容。
另外这篇我把字库和码表合在一起写,而且逻辑结构不算太清晰= =|||
所以一下子可能不太容易消化,可以分部分慢慢阅读。另外还是那句,实践最实际,拿一个工具一边做一般看比直接看能直观得多。

一 码表知识

GBA/NDS游戏一般是怎么显示文字的呢?(其实第一篇教程里面推荐的几篇教程都有说过了,所以我这里尽量简单地重新介绍一下)

上一篇里面提到了用CT套入正确的码表,在16进制模式,文本区就可以看见文本内容了。



原理就是,ROM的文本区是用16进制代码来写的,例如上图中:
“2年前の检查”对应的16进制就是000706f0行的CD00 CE0B 9B09 4701 3E06 1307这5组16进制编码。而码表就是表示
CD00=2
CE0B=年
9B09=前
4701=の
3E06=检
1307=查

这样的转换关系的列表。
游戏里面也是通过这样的转换关系,从字库挑取字符显示到屏幕上面的。
如果把上面文本区编码改成CD00 CE0B CE0B 4701 3E06 1307
游戏也相应会显示成:2年の检查,这个也是汉化对文本修改的基础原理。(原文的“检”字不是简体的“检”字,为了说明方便我做了简化处理。)


一般日文版游戏用的是Shift-JIS码表,一个完整的Shift-JIS码表从空格开始,标点,特殊符号,英文字母,平假名,片假名,日语汉字……
例如
8140= 
8141=、
8142=。
8143=,
8144=.
8145=·
8146=:
8147=;
8148=?
8149=!
814a=゛
814b=゜
814c=′
814d=`
814e=¨
……


像上面这样的一个对应关系存放的TBL文件(可以用WINDOWS的记事本打开和编辑)


而之前也说过,一般完整的Shift-JIS有2种主要的表示方式,如下图,分别是从8140=空格和0000=空格开始的两种(0000=空格严格来说不是Shift-JIS,而是在Shift-JIS的基础上重新进行自定义的编码)。一般完整的Shift-JIS码表汉字部分是以“亜”开头,以“熙”字作为结束(最完整的是以“黑”字结束,也就是“熙”后面还有一段,但一般情况下因为不是常用字,不少游戏就去掉“熙”字后面的部分了)。下面是这两种码表的分析:



下图码表无进行16进制的高低位互换,是高位在后的,注意一下


这样对比不难发现一个问题,8140=空格开始的那种码表,并不是连续的,而是跳过了XX00-XX3F、XX7F、XXFD、XXFE、XXFF(观察第一个码表中间框住有空行的部分)。而第二个码表是完全连续的。为什么呢?相信只要多观察几个文本区编码就会发现问题了。对于第一个码表的文本,跳过这些区域可以有效防止错位搞混的现象,另外也可以留出编码供半角字符,控制符等使用。而第二种码表的控制符则多数以FF00之后的编码作为控制符。

上面说的是导出文本用的码表。只要能套上一个正确的码表就能把文本部分导出来了。

但因为翻译后,不一定会(应该是“一定不会”)用上或只用上原来的字,因为汉化翻译后会用上很多原来字库没有的汉字(例如很多拟声词的字日语是没有的,例如吗,啦,嗯……),而且日语汉字多数是繁体字,要做简体版基本要把字库里面的字改成简体。
那么翻译后要用新的字怎么办呢?
最简单就是在原字库里面添加新字,但是如果只是添加就太浪费空间了,因为翻译后很多原来的字根本用不上,例如完整的Shift-JIS字库里面有6000多个汉字字模,而一般正常翻译之后,实际使用的汉字字模约2000-3000而已,汉化后因为内容跟原来不同,可以在原字库的基础上全部替换成需要用上的字模就行了。

但是问题又来了,这些新的字模写进去后,怎么把它跟文本区的编码挂钩呢?这就需要用新的码表方式,把字库字模和文本区的编码重新对用上,这就需要重新编辑一个新码表。

简单举个例子。例如上面的“2年前の检查”,汉化后变成“2年前的检查”,“的”字的字模我必须找一个位置放它,例如原来码表是4E03=亜,翻译后用不上这个繁体的“亜”字了,我就在字库原来“亜”的位置把它改成“的”字,然后把码表的对应关系改成4E03=的,跟着导入文本的时候,把原来的编码行“2年前の检查”的CD00 CE0B 9B09 4701 3E06 1307
改成“2年前的检查”:CD00 CE0B 9B09 4E03 3E06 1307。那么游戏就会从原来4E03=“亜”的地方提取出现在修改后的“的”字。

而这个新的码表和字库对应关系就是导入文本用的码表,也就是修改后的码表。这就需要重新编辑一个码表了。

以上就是对码表的简单介绍,有个大概概念后下面转入字库部分,先简单了解一下字库和码表的关系。

二 CT的字库HACK

上一话讲了最基础的ROM解读,那么字库一般在ROM里面是什么样子的呢?
下面就是一个例子:


这个是超执刀的小字模字库库,看右边信息就可以看到字模是8X8以下的,用的是1bpp(2色),在游戏中的作用主要是用以标注某些专用名词的上标。而正文的字库是16X16的1bpp(2色)。
【小技巧】:一般判断字库字模用的模式1bpp(2色),2bpp(4色),4bpp(16色),8bpp(256色),可以在游戏里面观察字体,如果是带阴影或边缘模糊(抗锯齿)的,一般就是4色以上的了。另外,如果字库附近有色版信息,从色版的结构(例如是2色,4色还是16色的色版)也能大概判断出字模的显示模式。

在超执刀的这个小字库下面就是16X16的字库了,初看的话,会变成这个样子:


这样有两种调节方法,一个就是强制把窗口宽度调整为16宽度:


另一种就是比较根本的方法:
上面的错位原因是方格的大小不对(实际是TILE的组合问题,需要进行“水平重组”),在CT的导航栏里面进行相应的调整就行了:

在上图橙色框的部分调整后,然后CTRL+方向键左右,调整正确位移。后就能这样一字一格显示了。

但有的时候字模会比这种混乱,例如出现这样的情况:


这是因为这个ROM的字模之前用了两位16进制来标注这个字模的对应编码,例如在“0”这个字模对应的是D0B800-D0B807这8位的数据,而之前两位是824f,一查码表,刚好824f=0。对付这种字库我们可以用CT的跳过功能,跳过这两位对显示字模无关的字符。


设置跳过数据为两位后,就能完好地显示字模了:


再来,又是一种特别的字库方式,但发现现在也很常见了,就是图片字模:
这种字库是以整张完整的图片而存在,不是一字一格的,所以在普通情况下TILE模式很难观察。这就需要用特殊的方法。
一般这种字库的开头有个别数据表示字库图片的宽度信息,这时观察的时候需要特别注意0010,0020这样的数据(分别表示宽度为256象素,512象素),然后在CT导航栏输入相应的宽度,调整显示模式,就能显示出该字库了。例如某DS游戏的字库:需要用256宽和8bpp(套一个黑白色版)才能正常显示。


这种字库比较有特色,详细的我留在字库另类扩容的部分来讲解。

总之字库显示好了就能进行具体的字库手术了。

三 编码表

能显示字库后,首先是对照字库确认码表类型。
首先看看字库的汉字部分,如果是像上面超执刀的这样:“亜唖娃阿哀愛挨姶逢葵茜穐悪……(一直到)龠堯槇遙瑤凜熙”(最完整的熙后面还有一段直到“黑”字),而且字数明显比较多,那么高兴吧,少年,你面前的是一个标准的Shift-JIS完整字库的ROM,简单来说就是厚道的ROM,有充分空间给你进行字库修正。

你要做的是找一份Shift-JIS码表,看看是那种类型(8140还是0000的),进行确认。然后对应文本区看看是否合用。(8140的标准Shift-JIS码表可以在狼组的网站找到,0000的可以另外找或者自己用8140的改造,因为里面的文字是一样的,只是编码顺序不同,具体改造方法下面会讲。)

如果是如上面的那个图片式字库那样缺了不少汉字,那么先看看它的顺序。
如果虽然缺字,但还是按照Shift-JIS码表的顺序出现汉字,那么是一个精简过的Shift-JIS码表,需要做的是对照字库,研究一下踢除了的字,以及之间的情况。一般来说,这种字库虽然经过精简,但并没有打乱顺序,用标准的完整Shift-JIS码表并不影响文本的导出。但考虑到汉化后需要把用到的汉字重新按新编码装回去,所以最好还是有针对性地做一个精简后的码表进行对照。(另外针对精简字库,如果不考虑扩容的话还得在翻译之后进行减少用字的处理,这个操作和相关原理会在后面的教程讲解。)

如果不但缺字,而且顺序也是乱来的(例如逆转DS……),那么……你就得一个一个地按文字在码表上面的顺序,针对文本区的汉字对照公式,写一个码表,这样才能正常导出文本,以及有针对性地对字库改造。因为这个游戏的字库用的是独立的非Shift-JIS码表排序……这个工程越需要1-2天。

除了上面所说的这种情况,汉化完后,如果如上面提到过的要大规模替换字库,也可能需要新建立一个新的码表关系来导入文本。

针对码表的编辑,下面介绍一些编码表的方法。

最粗糙的方法是用crystalscript(后面简称CS),可以把文字写好在一个UNICODE格式的TXT文件里面,在CS设置为脚本,然后用CS的这个功能就能生产一个码表了。


而且如果上面在导入码表里面可以先写好一个第一个字的编码,例如4E03=亜
那么它就会自动把码表里面没有的文字按顺序从上面的序号开始一直排下去。例如4F03=X,5003=Y,5103=Z……

这个方法比较适合的是新建立一个新的导入码表,例如汉化后针对完成的文本大规模替换字库。
而且因为可以直接用翻译好的文本制造码表,非常方便。
当然,产生的码表因为是完全连续的,如果要做出8140那种非完全连续的形式,需要进一步修正(用下面的UE相关方法)。

另一个是比较有效率的方法是用UltraEdit(简称UE),但注意的是,UE的对文本功能必须对应ANSI格式才会发挥正常,如果是UNICODE格式,并不能正常

但偏偏CT和CS却爱用UNICODE,这就需要对码表文件转一下格式,记事本打开,然后另存为的时候选一下ANSI格式就行了。



用UE打开码表文件,然后转换成纵行编辑模式,就能方便地对码表进行编辑了。


这个功能的主要好处是可以类似OFIICE里面的EXCEL一样对内容进行纵横向的选择和编辑,以及按顺序插入数字或修改。例如用选择范围工具可以选择数行的内容,然后一次进行数字的按顺序插入和修改。具体操作一下就能掌握了,我大概截图说明一下如下,文字就不罗嗦了:






注意一下的就是上面这个序号,上方输入的是10进制数字,不要直接写入16进制的数字。
10进制转16进制可以直接用WINDOWS的计算器的科学型模式来做……如果连这个也不懂用,貌似做ROM HACK的工作就很…orz了。
不过无论何时,对数字的观察多用计算器是必须的,这个要多注意啊。特别是对某些数值的分析方面,尤其重要,多用计算器换算一下,可能会有突破性的发现哦~

(贴这个计算器的贴图我也觉得很orz……,但我的目的是强烈建议各位多利用好计算器这个工具!)

另外这里介绍一个很有用的技巧,是汉化乐园QQ群里面的朋友教的,可以在UE的纵行模式把文字选择好,然后左边编好了序号之后,一次贴上去,这样的操作对码表大改造实在非常好用。


最后的方法就是各位编程达人自己写程序来写码表关系。这个就交给各位编程达人自由发挥了。反正方法是多样地,有效达到目的就行。

码表做好了。可以进行文本的导出和导入了。如前面提到了汉化后有些字原来字库是没有的,那么就需要对字库进行修改。下面正式进入修改字库的部分。

四 改字库

本部分的内容本来应该在上面的部分穿插说明,可能方便理解一点,但考虑到CT强大的理由码表来大规模修改字库的功能,我在说明清楚码表关系后才放在这里说改字库。

CT的TILE工具窗口特别为修改字库进行了强大的优化。首先必须注意的是要在CT里面正确修改字库,必须先把它设置成1格里面放一个字的模式(参照前面的字库正确显示方法)。
然后就可以使用TILE工具修改了。
直接用TILE工具可以像画笔一样一笔一划地写入,当然,更方便的是设置好字体后直接导入。方法如图:

在文字窗口输入要改的汉字,然后设置好字体后就会在左下角预览窗口显示修改后的效果。然后按修改TILE按钮就能改好了。
另外下面的复选框是给文字加上阴影,描边等效果的,这里就不多说,大家在实践中摸索就性。(阴影、描边等需要是4色(2bpp)以上的字模才能有效)
PS:本教程做的有的粗糙……其实正确的文字位置应该还要水平位移向右1象素(在下方复选框设置)才跟原来的相吻合= =|||



但CT的强大不是这么一个一个字地改,而是可以直接按码表的顺序,一次过把文字全部写入到字库里面。

首先准备好编辑好的码表(例如导入文本用的新码表),然后像上面一样设置好字体字型。预览一下。
然后按下TBL,选用需要的码表,然后一瞬间,文字就会按码表的顺序一个一个全部写入到字库里面了。快捷,方便,强大!(如下图)


当然,修改字库还有另外的方法。就是美工法。
这个方法虽然比较麻烦,但是却适用性比较强。例如对一些字体字型,文字显示效果(阴影描边)进行灵活处理,对应图形字库的修改(例如那些不能一个字放一格的字库)。而且对于小规模修改字库也很方便。

当然这个部分最好结合后面的美工教程参考,这里只是简单说一下。如果有美工基础的朋友应该就不难理解了。

首先把需要修改的码表部分用CT导出BMP文件。


导入到PS(PHOTOSHOP,作为美工不会不知道PS吧……)
导入的图片是索引色,为方便转换成RGB色。
为了修改方便,在PS里面设置跟CT一样的参考线网格,方法如下:
编辑,首选项,网线和网格



设置成根CT一样的象素,16X16象素(px)(注意单位)



视图,显示,网格



这样就能显示跟CT一样的参考线网格了。




然后建立背景层覆盖原层,在上面建立文字层,通过文本段落工具配合参考网格调整好文字大小,行距和字间距。


修改好后转回索引色,用WINDOWS画笔校正一下,重新导入到ROM里面相应字库位置就行了(这个流程的具体操作参考后面的美工教程,或者网上的一些汉化相关美工教程。)


以上就是字库和码表的一些基础。至于关于图片字库的特殊性和修改方法,以及特殊字库扩容技巧,我将结合JSS的字库另外写一个教程。但之前提到过不会在8月8日前透露JSS的相关技术细节,所以那个教程需要等一下。字库部分就暂时到此为止。

后面就会有文本导出导入的教程,敬请期待。


感谢汉化乐园的各位提供的本文DEBUG意见。.

终结者

多琢磨事,少琢磨人。

精华
17
帖子
8080
威望
13 点
积分
8900 点
种子
15 点
注册时间
2005-5-16
最后登录
2024-11-4
发表于 2006-7-16 02:27  ·  上海 | 显示全部楼层
看这一篇彻底晕了.......ORZ

审判者

究竟怎样的人生才能让人喜欢上命运这个词

精华
5
帖子
11208
威望
10 点
积分
12714 点
种子
8 点
注册时间
2005-2-14
最后登录
2024-11-22
发表于 2006-7-16 06:09  ·  湖北 | 显示全部楼层
用了UE这么久……这才知道~原来UE不能完美支持UNICODE……寒……
不过本人用UE一般还是作为16进制编辑和集成开发平台用……


随便问一句~
这些对字库的修改都是直接在原ROM上做么?……
那样的话……那些最后的补丁文件的生成不是还蛮麻烦……

精华
7
帖子
1481
威望
9 点
积分
2042 点
种子
5 点
注册时间
2004-9-24
最后登录
2015-1-9
 楼主| 发表于 2006-7-16 13:28  ·  广东 | 显示全部楼层
下面是引用tring于2006-07-16 06:09发表的:
用了UE这么久……这才知道~原来UE不能完美支持UNICODE……寒……
不过本人用UE一般还是作为16进制编辑和集成开发平台用……


随便问一句~
.......

补丁是留在最后做的。因为得在原ROM上实际修改才能测试运行效果啊。

审判者

究竟怎样的人生才能让人喜欢上命运这个词

精华
5
帖子
11208
威望
10 点
积分
12714 点
种子
8 点
注册时间
2005-2-14
最后登录
2024-11-22
发表于 2006-7-16 13:51  ·  湖北 | 显示全部楼层
下面是引用fengarea于2006-07-16 13:28发表的:


补丁是留在最后做的。因为得在原ROM上实际修改才能测试运行效果啊。
直接在ROM上改……感觉~这样的话~分工完成后的~整合工作也会比较麻烦吧……

精华
7
帖子
1481
威望
9 点
积分
2042 点
种子
5 点
注册时间
2004-9-24
最后登录
2015-1-9
 楼主| 发表于 2006-7-16 19:29  ·  广东 | 显示全部楼层
下面是引用tring于2006-07-16 13:51发表的:

直接在ROM上改……感觉~这样的话~分工完成后的~整合工作也会比较麻烦吧……

一般对ROM进行的操作由ROM HACKER负责就行了。

需要分工的工作(文本类,图片类)一般不需要直接对ROM进行的。所以也没有另外制作补丁的需要吧。
我不清楚其他小组的工作模式。一般来说补丁都是最后由破解员生成的。

精华
7
帖子
1481
威望
9 点
积分
2042 点
种子
5 点
注册时间
2004-9-24
最后登录
2015-1-9
 楼主| 发表于 2006-7-16 19:38  ·  广东 | 显示全部楼层
下面是引用tring于2006-07-16 13:51发表的:

直接在ROM上改……感觉~这样的话~分工完成后的~整合工作也会比较麻烦吧……

一般对ROM进行的操作由ROM HACKER负责就行了。

需要分工的工作(文本类,图片类)一般不需要直接对ROM进行的。所以也没有另外制作补丁的需要吧。
我不清楚其他小组的工作模式。一般来说补丁都是最后由破解员生成的。

精华
0
帖子
31
威望
0 点
积分
31 点
种子
0 点
注册时间
2006-2-10
最后登录
2016-6-25
发表于 2006-7-17 20:48  ·  北京 | 显示全部楼层
感谢楼主,学习中。本人初学,不懂的还要请楼主指点了。
另外,给想学的人提供一个链接 http://www.oz01.com/index.htm
就是oz大神的主页,
文中提到的工具本人找了大半天都没找够一半,oz的工具包居然全都包括了,
orz.
该用户已被禁言

精华
0
帖子
458
威望
0 点
积分
474 点
种子
0 点
注册时间
2006-7-3
最后登录
2017-11-20
发表于 2007-2-16 10:57  ·  北京 | 显示全部楼层
大哥。。。你是我的神

请问如何作
0000=空格
的码表。。。我刚开始研究超刀的汉化。。。求求你帮我一下。。。。

精华
0
帖子
206
威望
0 点
积分
223 点
种子
0 点
注册时间
2005-2-13
最后登录
2012-8-18
发表于 2007-2-19 12:49  ·  上海 | 显示全部楼层
现在有ds用的调试器了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2024-11-23 12:18 , Processed in 0.192558 second(s), 15 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部