关于rUGP的一点总结

age社扬名立万已经十几年,其引擎的破解却进展有限,以至于还没有过汉化。据我所知,已有的技术工作主要包括以下这些:1)Susie上有一个插件可以提取MuvLuv(2003)之前的age作品的部分图片;2)Kgne论坛的RIODecode解决了君望DVD版(2004)的文本提取;3)hikobae的rio2png可以在若干游戏中提取主要的CG/背景图片;4)hikobae的alterdec较完整地解析了MLA 18X版的资源文件,可以提取MLA的CG/背景/文本资源;5)WESTSIDE社(在alterdec基础上)的几个专用工具,可以很全面地提取ML正传及其fandisk等的CG/背景/立绘资源;6)Amaterasu Translations的Nagato,用插件以内存注入的方式实现了ML以及MLA的英化;7)yusjoel(在alterdec基础上)制作了MLA的汉化工具,初步解决了MLA的汉化技术问题。8)最近听说,有人运用钩子工具AralTrans,已经开始Altered Fable的英化。

此外还有一些有关联的工作,比如AGTH/ITH等文本钩子对rUGP的支持。它们提供文本的运行时抓取,也为已知的几个英化项目提供了技术基础。还需要提一下的是,著名的破解者痴汉公贼提取了使用rUGP的Summer Days的文本资源。但是,Summer Days并没有采用age社的数据打包方式(所以才搞得那么大吧…),其资源提取实质上与age社作品没多少关系。

成果少,功能少,不通用。这就是age社引擎破解的状况。我所做的,是整合功能,实现通用性,并在此基础上挑战未解决的问题。

我做的第一件事,是实现比较通用和全面的资源提取。在RioX最近的版本中,实现了已知age作品CG/背景/立绘提取,以及君望(2001)以来的文本提取(更早的文本其实是明文)。与过去工具的比较如下:

tools

第二件事,就是制作翻译工具用于MLA以外作品的汉化。在新设计的Rsa脚本解析算法支持下,一般性的脚本解析取得了进展,一般性的文本替换也得以实现。君望LE就是这样开了工,伟大的布道距离实现又近了一步。不过,围绕字体、编码、引擎的检查,还有很多细节有待解决,需要更多的努力。

在这将近一年里,总算是对rUGP的破解,进而对age作品的布道做出了贡献。得到过几位日本网友的感谢,也得到过几位中国网友的批评。希望今后还能有新的进展;不过更希望有谁替我搞定程序,我就可以去搞翻译校对了。MLA这多年的坑不必说,君望LE现在第一章也在缓慢前进。技术没解决时卡技术,技术解决了就卡翻译。把自己的主张喊得响亮的人什么时候都不缺,真到干活的时候人手永远不够。否则君望的汉化也不会一晾十年了……

2012:转型

2012年,我从学生变成码农,从东京回到北京。2012年,我爬出英杰传的坑,跳进age作品汉化的坑。2012年,个人感情方面也有发展。这一年的生活,繁忙而崭新。

从年初的预备审查开始,我就一直被笼罩在“是否能毕业”的疑云下。一路忐忑到九月初,毕业这个事才得到了明确的肯定,总算有惊无险升级到Ph.D.。毕业的事拖到这么晚,就职和回国的事就变得非常仓促了。找工作时其实就投了三家,G社、M社和S社。G社电面我一次后两周把我拒了;S社收到我邮件后一个月把我拒了。M社开始没反应,后来到八月份了忽然联系我,了解情况后就让我直接飞北京面试。面了整一天跟我说准备要我,然后九月份签了offer,十月中就开始上班了。回到国内,各种不适应,从自然环境到社会环境以及工作环境。虽然总体上还过得去,遇到各种不爽的事情也很多次抓狂地后悔选择回国。无论如何,先在M社、在北京蹲着好了……

娱乐方面,下半年因为各种忙,几乎没顾上打galgame。上半年还能维持每月一部,八月份到现在却只打了某盾的一条线。看起来今后也不乐观。另外就是彻底离开了英杰传,跳进了汉化的坑。先是加入MLA那个多年死坑,挣扎了几下后转为独立做rUGP程序方面的工作,夏天战了几集Total Eclipse的新番,秋天则和KFC开了君望LE的坑。这一年的成果是重大的。面对多年来让程序们望而却步的rUGP,我取得了一个比较通用的基本解决方案。仍需改进的地方有很多,但是我至少可以说,age社的各部作品都可以着手准备汉化了。

享受了几年的单身时光,在这一年里也开始摇摇欲坠。三月份开始和某同学交往,到七月份分开。虽然短暂,虽然彼此都忙相处的少,虽然我自身很多地方做得不到位,对我来说,总归是有益的经历。人只有站在那个位置上,才能取得相应的视野。这次我感受最深的,就是在我的过去中,我大约不只做过受害者,也曾经做过很多次加害者而不自知。这是遗憾,也是成长的必然。我能做的,只有更认真地面对现在和将来。我希望能在新的一年里,能走出坚实的一步。

既然已经被绑在命运的轮子上跳舞,就只能舞得更快,舞得更好。纷至沓来的新的生活,我必须去适应;尚未实现的心中愿望,我也要去实现。在2012年,我抓紧生活;在新的一年,我希望能继续如此。

君望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检查的少几项。