rUGP资源提取工作重开

搞thesis搞了快俩月,上周总算交上去了。休整了几天,重开rUGP这边的事情。虽说是重开,后面还能走多远,自个儿也说不清楚。一方面,容易取得的资料基本上都消化了,却发现前人只解决了一小部分问题;另一方面,摸了下Ollydbg却发现用起来并不容易,我想要自己走更远也很困难。总之闲时摸索着做一点吧。目前的状态是:吸收了alterdec的CG/背景/文本解析算法,吸收了WESTSIDE社部分解CG/背景的算法,并统合了CG/背景解码部分。目前想做的课题:1.通用的文本提取算法;2.较新立绘类型的提取算法;3.替换文本/图片的程序钩子。正在做的是第一项。

实际做起来发现,从.rio文件中提取文本,并没有预想的简单。现在找到的资料只有君望英化项目的RIODecode(强烈感谢blovewind提供资源,连代码都有!),和alterdec中的文本提取部分。Amaterasu的英化版也提取了原始文本,但是据Nagato说用的是钩子+ctrl的方式,而不是从.rio文件中静态提取的。

遗憾的是,RIODecode和alterdec的文本提取方式都不够一般化。RIODecode是君望DVD版的专用文本提取工具(其实还能解.rio.ici文件,但是还没搞明白解出来做什么用),似乎是成功解出了全部文本。该工具只找出了较少的数据规律,解文本的算法比较tricky,需要人为设置5个控制参数。而这些控制参数,甚至对君望DVD版这个专门针对的对象都不是统一的。在全部229个脚本中,用默认参数可以提取的只有194个,另外的35个需要分别设置独自的控制参数。

从原理上讲,RIODecode不需要解析脚本数据中种类繁多的对象,除字符串之外,其他部分都被当作“不明的二进制数据”跳过了。这个方式本身是适合于通用化的。然而,5个人为的控制参数是跳过这些“不明数据”的关键,寻找文本的难度转化成了设置参数的难度。这是一个重大的进步,但是仍然很不好用,连解君望DVD版都有15%的脚本需要单独设置参数。我暂时还没有尝试用调整参数的方式去解其他作品的文本。

alterdec的文本提取针对Muv-Luv Alternative 18X版,方法很优美,但是也有局限。alterdec在解析多种对象的基础上,正确维护了对象类型记录的cache,进而能正确识别对象并跳过不需要的部分。hikobae给出了近300种OM对象的读取方法,做到了在MLA的脚本解析中正确界定每一个局部对象的类型和数据长度,进而完整正确地提取文本。这是一个伟大的工作。

然而这个方法的问题也同样显著。当脚本中出现新的对象类型时,就必须去把这些新的对象类型也解析了,才能保证alterdec的方法可以继续使用。否则对象类型记录的cache可能会漏掉一部分内容并导致对象的识别和界定出错。要保证能够用识别对象的方法提取文本,需要解析相应.rio文件中的大部分数据对象类型(事实上hikobae就是解析了MLA中出现的大部分对象类型);而随着时间推移,age社在不断加入新的对象类型,也在舍弃较旧的对象类型。用alterdec的算法去解MLA之前和之后的作品,都只能解出其中一部分脚本,而且解很新的作品时几乎就解不了含有文字的较长脚本。

RIODecode和alterdec提供了两个思路,然而都不容易通用化。我现在试图做的,就是结合两方面的参考材料,争取靠粗线条地界定VM对象,做一个更通用的解决方案。看起来不容易,能不能做出来全无把握,总之试一试吧。

当然,做文本的静态提取可能不是很必要。搞定钩子的话,完全可以像Nagato那样一路ctrl过去取文本。甚至这样还更便于文本替换——只需要挂上同一个钩子即可。即使从.rio文件中解出了文本,也还存在如何把翻译文本静态或动态地替换回去的问题。

2 thoughts on “rUGP资源提取工作重开

  1. 目前有希望提取出音频吗……
    我想提取「終わりなき夏 永遠なる音律」的BGM的说…………

Comments are closed.