RioX 1.1完工,及各种杂谈

一周前写文说重开rUGP方面的事情,当时也没想到进展如此之快。到昨晚为止,解决了立绘的提取,实现了粗略提取文本的通用方法,RioX 1.1版的界面也写好了。虽然提取的内容在CG/背景的基础上增加了立绘和文本,毕竟仍是在复现和通用化有人实现过的东西,所以只增加了副版本号。如果有一天搞出了前人没搞出来的东西——说句放卫星的话,搞出视频/音频的话——再叫2.0吧。

首先是文本。前面也说过RIODecode和alterdec的局限性,遗憾的是,我也没能改进太多。我的提取算法类似于RIODecode,在二进制数据中识别字符串然后提取出来。经测试,我的算法可以对应君望DVD版以来的各游戏(君いたFV等早期游戏中脚本未加密,需要跳过一个步骤),但是不保证不错不漏。感觉上每解出一千个字符串,就要有一到两个有问题:或者是二进制数据被误认为字符串,解出没法读的东西;或者是有字符串没解出来。读这些文本了解剧情足够了,要进行翻译等精密工作的话还应该进行进一步的人工校对。

我在文本提取中用的思路是识别shift-JIS编码和利用Vm对象的结构信息,后者基于hikobae的解析结果。shift-JIS编码的识别是个很强的约束,而且age社的文本也有规律,在字符串比较长时(比如多于12字节),识别几乎万无一失。对于长度较短的字符串,就很困难了,需要结合一些结构信息,也没能完全避免错误。不过相比RIODecode,我输出成了一种容易人工校对的形式,这也是个有意义的进步吧。RIODecode的输出文本中结构控制信息太多,不学习下程序的话看不懂,也难以人工修改,甚至程序本身也是靠修改不知所云的输入参数来适应不同的脚本对象。我的输出至少可以让外行也能立即上手吧:输出文本仅包含字符串内容和字符串起始位置tag。误识别的字符串直接删除即可;前后文之间缺东西的话,可以用二进制编辑器去解开的脚本文件里找相应的位置,手工添加一条记录即可。同样地,把这些误判漏判的位置记录到文件里,由程序读取处理也是很容易的。相比RIODecode,这应该是一个对翻译人员来说更方便的解决方案。当然,学习Nagato用钩子+Ctrl可能更好。

文本部分花了三天搞定,没想到接下来的立绘只花了两天。原因很简单:我3月的时候已经走到距离真理很近的地方了。那时我通过对比实例,发现立绘对象开头的位流相当于一个剪影,而现在我发现,边界信息之后的部分和CG/背景图片的提取是相通的,最大的不同无非是立绘中只处理剪影内部的部分。然后就是找立绘对象数据特征即可。能做到这些多亏有WESTSIDE的工具:它让我能确认到一些立绘在rio文件中的位置,从而可以通过比对/猜想找出提取算法。

其实,前面一直拿“CG/背景”和“立绘”描述我解出的图片对象,是很不准确的。只能说相应类型的对象“主要用作CG/背景”和“主要用作立绘”。比如君望DVD版,绝大多数立绘用的就是“CG/背景”用的存储类型;而在较近的游戏中,“立绘”对象用来存储各种差分图像,不仅包括近似CG的差分,还包括一些把立绘分解为身体、头发、眼、嘴等元素再合成的实例。总之,“CG/背景”和“立绘”只是一个简化的描述方式,不过为了方便,今后我还会继续这样描述……

到此为止,RioX已经可以从rio文件中提取绝大多数图片和绝大多数文本。不过两部分都不完美:对比WESTSIDE的工具,还有一小部分图片没有提取;文本也还存在错漏。不过进一步的解析边际效益就太低了,暂时没有投身其中的打算。

作为一个到现在还不具备破解必要技术的新手来说,我觉得做出RioX来还不错了。在整件事中,我所做的整理远多于发现,更多地是在已有信息的基础上合理猜想并加以验证。之所以能把rio2png/alterdec代码中没有的图片解出来,除了WESTSIDE社工具提供的各种线索,更重要的是我有这样一个假设:“从开发者的角度讲,底层的数据流编码应该会保持一致”。而事实证明确实如此:虽然hikobae和WESTSIDE都对不同对象类型区别对待,并写出了很多底层的解码函数,我却成功地把这些函数统一了起来。立绘的成功提取也要归功于此。hikobae和WESTSIDE所做的是正常的破解:跟踪,辨别,然后记录。而我所做的,则是揣测开发的方式,并基于前人已有的结果,提出假设并验证,让有限的信息发挥出更大的作用。当然,我这个方式局限性很大,现在也基本走到头了。

最后,虽然RioX 1.1写出来了,关键的conan同学却不在,暂时没法放到riox.thisillusion.org上面去。不过相关工具已经空白了几年了,也不差这几天吧……

4 thoughts on “RioX 1.1完工,及各种杂谈

  1. 很好奇你RioX的新版1.1 ,其实传网盘不就可以了吗……
    其实westside那个工具也不是完美的,他那个转换功能读取不了bmp的alpha通道。
    png解出来3G,bmp解出来80G…………

    我现在把我的一切希望都寄托在你的2.0版本了……Σ( ̄。 ̄ノ)ノ
    加油啊~!

    • 别等2.0,那就是个传说……
      我很快就要成为苦逼的社会人或家里蹲了,现在搞一点不过是最后的疯狂而已……

      • 就让我做个梦吧,我相信你变成社会人之后会越来越厉害的……
        有一天我相信你会出2.0的 “きっと”
        末永くお幸せに~!
        ご活躍とご健康をお祈りします

Comments are closed.