君望LE的文本替换问题

最近找时间摆弄了一下yusjoel做的MLA翻译程序,试图找到些启发。结果有些失望,因为MLA的工具实际上用的是一种我曾经试图用在君望LE中,却造成了游戏错误的方法。在那之后我不得不改成了一种比较麻烦的方式,以绕过君望LE的检查。

MLA和君望LE的脚本中都生成了一些对象的标记,标记的值都和对象中的文本长度有关。一项基本的检查是标记的值是否和当前对象的文本长度相符。翻译时改动了文本长度,就要相应改动标记。麻烦其实在这之后。MLA似乎不检查别的了(当然跳转的标记之类还是要检查的),而君望LE至少多三项检查。

首先,每个脚本对象的标记,修改后都不能比原始值大,否则游戏载入脚本时告知你说数据是旧格式,程序中止。这意味着什么呢?就是说翻译后的第一句话长度不能超过原来的第一句话,前两句话的长度和不能超过原来的前两句话长度和,等等。这是一个很别扭的限制,不过一般翻译中可以满足,可以忍。

满足了第一条还没完,脚本最后的标记必须和原来的一致,否则程序停止响应。就是说,如果翻译后因为每句长度变化导致算出来的最后标记比原来小(大的话第一项检查就挂了),游戏走到当前脚本最后一句话之后就挂了。

然后还有第三项检查:如果脚本数据长度和原始的不符,载入脚本时就会报错中止!这就是为什么上一条我不说“翻译后每条都比原来短”,而说“翻译后因为每句长度变化导致算出来的最后标记比原来小”。每句都缩短的话一开始就会早早被这项检查拦住了。我尝试过修改加密数据长度记录,也尝试过在脚本尾加入无用数据补长度,可惜都不行。

经由文件差分确认,yusjoel的工具在打包文本时确实只修改了rio文件中的脚本数据内容。这样一来应该可以推论,在MLA 18X到君望LE的几年里,age在rUGP加入了更多的数据验证功能。MLA那种简单的替换方式已经不可行。要打包君望LE,或者找出引擎中数据验证的代码改掉;或者只能按我8月做的方式,弄一个功能可用形式较丑的方案。在短暂的业余时间里,我也再向前者努把力吧。

PS:之前有位朋友留下“先全部都搞清楚”的评论。这件事很困难。到目前为止除了hikobae大体解明了MLA 18X,Westside社在其基础上对MuvLuv正传四个游戏做了扩展之外,还没听说谁去把哪个游戏解析清楚了。我也试过一点,但是很快放弃了。如果对比过age社不同游戏,就会发现引擎在不断更新,修改旧的做法,加入新的特性,而很多更新都会要求新的解析工作。我没有时间去磨每一个游戏,但是我要解决尽可能多的age作品的汉化问题。我无力去“全部搞清楚”,也没有必要。

PS2:之前那位朋友批评指出MLA也检查文本长度。确实我当时搞错了。MLA也检查,只是比君望LE检查的少几项。