国外网站大全·环游世界互联网

当前位置:首页 > 汉化宝典 > >

内容详情

收录时间:2010-06-09

标题

手机游戏汉化之文字汉化

已阅0
投稿须知

网站介绍

随着对汉化理论的逐步理解与掌握以及对经验技巧的掌握,本教程所涉及的内容也会渐渐加深、渐渐拓宽。前面几节相信大家已经懂得了如何修改游戏中的图片内容,这主要是借助现成的工具加上一点点耐心傻瓜化地修改来完成的。

有很多对汉化抱有热情玩家都只能停留在修改图片上,其原因大家也能想得到。仅仅掌握了修改图片的方法也还远远不够,游戏发展到今天基本上没有哪个游戏的文字就纯粹是采用图片来存储的了,了解文字显示的核心至关重要。从现在开始接触的东西对大多数人来说才真正感觉到难度。希望大家既不要骄傲自大,也不用妄自菲薄,万里长城也不是一天建成的,既然大家对汉化有如此的热情就一定要对自己充满信心。

在教程的最开始就谈到了文字在游戏中是如何存储显示出来的:游戏文字信息通过将文字编码、文字点阵信息分离并保存到游戏文件中,显示文字的时候程序先读取表示句子组成文字的一序列编码,然后根据游戏自身独有的字模转换程序通过编码计算出字符点阵的物理地址,然后再通过一系列的显示程序把该字符点阵显示到屏幕上。

\

我们知道了基本过程后就不难猜想到,既然要修改文字我们还是可以通过修改点阵来实现。例如句子“I love China!”,可以把字符点阵“I”改为“我”;点阵“l”改为“爱”;点阵“o”改为“你”……以此类推。句子就被改为了“我 爱你,中 国!”,多余的字符就全部清除。理论上分析了,我们先来找个游戏进行一下实践——《光明之魂II》

\

我们就来修改一下图片上顶部出现的那句话,按照字面意思可以修改为“请选择一名角色”。通过我们前面所掌握的修改图片的方法很快就能找到这些文字的位置,用TLP定位到0x8DC068,这里就是第一 个字符“キ”的位置,我们可以看到该字符由4个TILE构成,排列顺序为[左上][右上][左下][右下]。

\

在前面就已经说过图片之所以会出现错位这并不是由于TLP软件的错误造成的(TLP永远都是顺序显示的),这个和游戏显示程序的设计有密切的联系,但具体为什么需要这样排列的这并不在我们讨论之列,我们需要做的仅仅是按照原先的顺序排列好修改后的字符就可以了(字符的描绘可以使用任何一款图像处理软件中的文字工具来制作)。

\

经过导出导入修改等一系列过程,这个字符被修改为了“请”字。其他的字符按照这样的方法依次修改,修改完后用VBA模拟器预览效果,可以看到这样的画面:

\

看来这样子做是相当成功的!见到了这样的成果你心情将会如何呢?

高兴之余静下心来还是会发现一些问题,如果把“キ”改为“请”的话,游戏中所有出现了“キ”字符的地方都变为了“请”,但“キ”并不是“请”的意思。如果全都都照这样子修改的话,一两句还是可能实现,要是句子多了绝大部分句子就要混乱了。

所以仅靠这样子的修改还不行,我们还得调整每个字符的排列顺序甚至出现的位置。我们再来看看字符显示的全过程,程序是先从文件中读取了句子文字的编码串然后再经过一系列程序才显示出来的,换句话说编码串就决定了字符的排列顺序,要改变文字的顺序就是要改变编码串中各个编码的顺序。

例如:先假设01表示“A”、02表示“B”、03表示“C”,句子“ABC”对应的编码是010203,如果要改为“CBA”的话我们就可以把“010203”改为“030201”。明确了这个道理,我们就必须找到句子对应的编码串在游戏文件中的具体位置,但我们事先并不知道每个字符对应编码,而且每个游戏的编码都不尽相同,所以也不可能根据经验来判断,缺少了这些关键的信息我们就无法搜索出编码串位置。

于是我们的首要任务就是先找到一些字符的编码,然后就可以顺藤摸瓜测试出其他字符的编码。但问题是如何知道字符编码?这是一个巨大的难题。在开始找到“キ”字符后,留意一下就可以发现一些线索:基本上所有的文字点阵都保存在“キ”字符点阵附近的一大块区域内,而且字符和字符之间并没有其他杂乱信息,看来设计人员是把整个游戏出现的字符都放在了一起。

那么这些点阵字符的首地址就很有规律了——公差为128Byte,因为1个4bpp的Tile占用的是32Byte的空间,一个字符需要4个Tile。前面也说过,编码是用来计算字符点阵的物理地址的。至于使用的什么具体公式我们并不用去在意他,我们可以导出一个抽象公式来理解:

点阵地址 = 字库首地址 + 偏移地址;
偏移地址 = 比例常数 * 字符编码 + 偏移量;
比例常数 = 点阵大小 * K;

所以: 点阵地址 = 字库首地址 + 点阵大小 * K * 字符编码 + 偏移量;

对于同一游戏来说公式中的字库首地址和偏移量都是一个常量,唯一的变量就是中间的一段,由此看来点阵地址和字符编码是成线性对应关系。而我们恰好可以查看得到等号左边的点阵地址。把上面的公式通过一些数学上的变形可以得到:

\ 

△点阵地址 可以写成△字符编号 * 点阵大小,所以又可以得到:(△字符编号就是两个字符点阵的序号位置差,单位为“1”)

\

△字符编号 可以轻易知道,而系数K在同一个游戏中是一定的,并且公式里的其他参数全都为整数。△字符编码 一定大于或等于 △字符编号,因而K小于等于1。点阵大小就是每个字符点阵所占用的空间,这个例子就是128。(还不至于哪个游戏设计者喜欢自我拔高到利用二次函数来计算吧-_-b)。只要能知道K的具体数值我们就能知道 △字符编码了,再接下来就可以通过相对搜索来得到句子的物理地址咯。

准备好一个相对搜索工具,比较好用的是汉化高人“阿一”制作的《增强差值搜索器》和一个《字模精灵组合器》,最后再理解一下上面的推导过程。这一节先到此为止。

小结:本节开始正式涉及到文本文字的修改,内容逐步变得难以理解,光看不实践是绝对不行的。文本文字的修改要比图片修改更加的困难,很多时候都得靠灵活的方法才能对付。大家有了一定实践基础以后很容易犯迷糊,误以为每个游戏的文字都能按照这样的方法修改,我一直都在强调,游戏不可能一层不变。

这一节中虽然提到了几个数学公式,如果你对数学不太了解,也不用去在意几个公式怎么得到的,只要你能知道地址和编码成线性比例,有这个意识就可以了。我在这儿之所以要这样提也是为了告诉大家要调动自己所掌握的其他相关知识来思考问题,一个人的知识结构应该是网状的。

这不仅包括电脑相关知识,凡是能用上得都可以用上来,万一此路不通还可以通过其他知识换个角度来思考。细心的人也许会注意到“キ”字符修改为“请”字符后颜色数变少了,没有了蓝色。我来解释一下:对于大字符(一般来讲8*8的字符叫小字符,除此之外就算大字符)外观看上去比较粗大,如果只用一种主色再加上一种阴影色的话会使字符看起来有明显的锯齿,特别是对于笔划比较简单的字符(GBA可没有全屏抗锯齿功能哟)。

所以游戏设计者会采用一些辅助色来对字符的拐角进行前景和背景的过渡。不过这对于笔划相对比较多的中文汉字来说用不用过渡效果并不是十分明显,如果再增加字符光滑的处理的话汉化的成本(主要是时间,时间就是金钱嘛)就太高了吧。除非你有特殊要求,否则就没有必要这么做了,一般都是采用一种主体色加阴影色在加背景透明色来做汉字字模了。

字符的点阵地址和编码的关系你都理解了吗?如果已经比较透彻了就可以继续研究了。 上次我们提到了这个公式:

\
 

从实际出发,我们可以从TLP中观察字库来计算出编号的差值,而K从表面上来看我们只能确定的是一定小于等于1,所以就需要对K进行一些猜测。接下来介绍一下什么叫相对搜索:相对搜索就是指不知道具体的搜索值,而只知道几个值之间的差(例如:a b c 三个数,我们事先并不知道这三个数的具体数值,只知道a-b=5 b-c=6),因此我们就利用这其中的差值作为条件来进行搜索,这样的搜索方式就叫“相对搜索”(或“差值搜索”)。

比如搜索条件是“0,5,6”,可能搜索出来的结果有很多个,像“0,5,6”、“2,7,8”“10,15,16”等等。这种相对搜索方式正好适合我们所知道的条件。先来看看搜索工具《增强差值搜索器》:

\
 

全都是中文化的,傻瓜式的操作没啥需要特别说明的地方。

下面我们来找找上一节中《光明之魂2》里的那句话“キャラクター……”的位置。

\

首先我们打开TLP定位到字库的范围内,使窗口左上角第一个Tile位于字库的最开头,经过观察得知那个圆圈A就是字库的开头。将这个字符的第一个Tile出现在左上角位置(记得微调的时候使用[Ctrl]+左右),并记下这个位置的地址0x8D94E8。

\
 

接下来打开《字模精灵组合器》工具,并打开GBA文件和一个调色板文件(用VBA随便导出一个吧,只要能看清楚就行)。然后再在起始地址框中输入开始记录的地址,不过需要注意的是这里需要输入的是10进制地址,把开始记下的地址先转换一下(使用科学计算器吧)得到9278696。因为字符是16*16的结构,所以在窗口右边选择“16*16 1”模式,点击“显示”后出现这样的画面:

\
 

我们需要利用这个工具来计算字符序号的差值,虽然我们不知道每个字符的准确序号,但公式中只需要差值就可以了。窗口左边的位置可以帮我们计算出差值,只要把鼠标指针悬停在字符上就可以出现这个字符的相对值(相对于左上角第一个字符的值)。

首先把鼠标放到字符“キ”的位置上得到“位置 57”记下来,接着是第二个“ャ”得到“位置 98”,依次类推。

最后得到的记录是“57 98 77 58 60”。接下来切换到《增强差值搜索器》的窗口。其中“搜索模式”我们先来试试“双字节”,我们记录下的是16进制值,所以“值类型”选择16进制,其他地方先暂时不用去改变它。最后剩下“值”这一栏就是填写差值的。

在上面的公式中我们缺少的K值只能靠猜测得到,最简单的猜法就是设想“字符编码”的改变量恰好为“字符序号”改变量的整数倍(再怎么说程序员也不会清高到使用浮点吧),最简单的整数倍就是1。既然如此我们就先假设“△字符编号”等于“△字符编码”,于是在“值”这一栏中依次输入“57 98 77 58 60”,输入一个数按一次添加,最后点击最下面的“开始搜索”。稍微等一会儿,“搜索结果”里面就会出现

\

一些搜索出来的结果。最左边的表示结果的地址,箭头右边的表示从该地址开始的文件的真实内容值(16进制),我们可以清楚地看到搜索出来的结果每两个数之间的差值刚好和“57 98 77 58 60”一致,现在你应该更深刻地体会到什么叫相对搜索了吧。

不过还是不要欢喜,因为我们一开始就是假设的K=1的,倘若K不是1,那么我们找到的并不是正确的地址,况且现在一共出现了4个符合我们条件的地址。所以,再接下来就应该验证一下这些地址到底是不是我们想要的。至于怎么检验我就不多提的,基本方法就是利用UE编辑器对这4个地址的内容逐一修改看效果(注意备份)。

运气十分的不错,我把0x38B010这个地方向后延续的几个值都改为了58H(用双字节表示)

\
 

保存后,接着在模拟器中打开,出现了如下结果:

\


屏幕上相应地也出现了4个“キ”,这总可以庆幸一下了,呵呵。

庆幸完了再来看看刚刚修改的内容,你应该能明白0058H是什么意思了吧?不错,那就是“キ”字符所对应的编码。千万不要放弃这个关键位置,很多信息就得靠他来提炼出来呢。把 00 58 改为 00 59 ,在屏幕上又出现了“ク”字符,对照《字模精灵组合器》所显示出来的字库,由此看来“△字符编号”和“△字符编号”的确相等,我们猜测的K=1是完全正确的。

既然我们得到了“キ”字符的编号又知道K=1,想要知道其他的字符的编号就迎刃而解了。看到这里你已近会改字库也会改文字编排了,理论上你已经具备了汉化游戏的基本能力了。了解了这么多信息后,你还需要整理一下整个游戏的文字情况。就是查清游戏哪些地方使用的是图片文字,哪些地方使用了文本文字等等信息。这些信息也是至关重要的,千万不能省略这些细节方面。

小结:这一节内容主要讲解了如何利用相对搜索来获取字符编码的过程,其分析过程比操作过程更为重要,因为这一部分内容很多时候都带有一定的猜测,一旦猜测不好的话结果是不会出来的。而且这里的猜可不是脑筋急转弯那样胡乱猜,必须经过事先的一系列分析才可以,反正尽一切可能从文件中多提取信息。

甚至有时候还需要通过模拟器搜索内存的值,如果你对游戏动态修改比较在行的话,在搜索文字编码的时候还可以想到另外一种方法,就是利用《金山游侠》《EmuCheat》这些工具来查找内存值的变化,从内存中或者游戏的存档.sav中有时候也能有所收获的。

在这里就不提供具体操作方法了,提示一点:很多游戏在开始的时候都需要输入玩家姓名的。虽然这种方法只能搜索出文字的编码,但只要把每个字符编码都确认后再把句子字符串转换成编码串来查找(这里当然是UE的普通搜索了,头脑一定要清晰)。

在实际操作过程中大家一定不可能像这一节介绍的那么顺利,因为这是教程,所有的材料都是事先设计好了的,就连猜的K=1也是如此,所以大家遇到困难是很正常的,要平常心对待。另外还需要补充说明一下关于那个K的问题——K其实可以理解为字符编号和字符编码的关系,多想想就不难知道“△字符编码”一定是“△字符编号”的2n倍。说得具体点,仍然以“キャラクター……”这句话,开始我们假设为K=1,所以得到“57 98 77 58 60”,如果这样子搜索不到结果就设K=1/2,得到“AE 130 EE B0 C0”,还搜索不到就设K=1/4、1/8等等依次类推。

搜索的时候还得注意尽量多添加几个字符来作为搜索条件(一般5-7个字符),并让几个字符距离不要太远(太远了不便于计算)。有些时候编码并不一定只采用单字节或者双字节的单一编码,单双混合编码也很常见,程序员喜欢把英文字符和日本假名设计成单字节再把日文汉字设计成双字节(例如《SD高达》),所以搜索的时候也要注意搜索的字符最好属于同一类型的。搜索方法是多种多样的,大家灵活一点还能想出更多更多。

分享给小伙伴们:
站长头像赫赫无敌:探索互联网世界,收集和分享实用互联网资源,推荐国内和国外知名、实用、创新、科技、优质的站点资源!互联无极限,探索无止境;分享求真知,网络无国界!
更多>>

同类站点推荐

评论

关于我们|联系方式|版权声明|关于图片|友情链接|

分享互联网优秀资源-国外网站推荐

Copyright ◎ 2014 egouz.com, All Rights Reserved.| 目前收录国外网站 个!

国外网站大全 版权所有 冀ICP备11014106号-