高楼爆破2无敌选关版:汉化基础教程——文字篇(二)

来源:百度文库 编辑:九乡新闻网 时间:2024/05/02 22:48:06

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


从实际出发,我们可以从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高达》),所以搜索的时候也要注意搜索的字符最好属于同一类型的。搜索方法是多种多样的,大家灵活一点还能想出更多更多。