决定动手:为什么非得我来搞?
大家都知道,这SiNiSistar2这游戏出来好久了,热度一直下不去。但是官方的汉化?影儿都没有,等得我头发都快白了。我这人脾气比较急,等官方那是等不来饭吃的。我看论坛里那帮老哥,要么就是只抱怨,要么就是说这游戏结构太复杂搞不定。我寻思着,光说不练假把式,越是难啃的骨头,我越想啃下来试试。反正我最近也没啥大项目,不如就折腾一下,给自己找点事情做。这不光是为了玩游戏,也算是给自己一个技术挑战,看看这文件加密到底有多变态。
第一次尝试:找不到北
得拿到手的是日文原版文件。我下载下来,打开文件夹一看,好家伙,几百个文件,看得我眼花缭乱。我翻来覆去地找,发现那些对话文本和系统UI的资源全TM被打包成了一个巨大的数据包。文件名特别长,一看就是用了某种专有格式。
我不是没做过汉化,以前那些老游戏,随便找个解包工具捅一下,基本就都能把文本资源给拽出来。但这回完全不行。我试了市面上常用的好几套工具,一拖进去,立马就报错,说文件格式不支持。我当时就有点上火了,这游戏厂商把防御做得这么死,摆明了不想让人动他们的东西。
摸索与突破:找到大佬的工具链
硬干肯定不行,那就得找外援。我赶紧跑到几个以前常去的“学习”交流区,去潜水、去蹲点。功夫不负有心人,真让我摸到了一点门路。有个老哥在分享一套针对他们家老游戏的解包脚本,虽然版本隔了代,但思路是通的。我赶紧拿过来,对着那堆代码研究了一个通宵。
我发现它的加密思路是基于一个老算法做的变体,只是参数做了调整。我拿着这个旧脚本,开始对照着新文件结构,一点点修改里面的密钥和偏移量。那两天,我电脑就没关过机,反复跑测试,文件一直解密失败。后来我发现是数据头被藏起来了,我定位到正确的数据头之后,终于成功了!那个巨大的数据包“咔嚓”一下,吐出来几千个文本文件,虽然后缀还是看不懂,但起码内容是可读的日文了。
翻译与注入:体力活和技术活混一起
文本是出来了,但量实在是太大了。我一个人肯定是翻不完的,而且我日文水平也就半吊子。我赶紧在群里吼了一声,拉了十几个热心肠的哥们一起搞。我开了个云文档,把所有文本按章节分好,大家白天该上班上班,晚上就聚在电脑前,一句一句抠。
最头疼的是注入环节。
- 中文比日文占的字符位置多,直接替换进去,文件大小会撑爆,游戏肯定会闪退。
- 游戏的字体文件只支持那几百个基础日文片假名,中文的几千个字根本显示不出来,一进游戏就是一堆“口口”。
我赶紧研究了游戏自带的字体库,发现它用的是专有格式。我找了个常用的黑体字库,用工具魔改成了它能识别的格式,替换了进去。然后针对字符溢出的问题,我写了个后处理脚本,专门负责压缩文本和调整指针。这个脚本我调了足足三天,终于让所有汉化后的文本能平稳地塞回原文件里,并且大小和结构保持一致。
最终发布:成了,但坑还在
新的汉化包生成了,我赶紧丢进游戏里,从头到尾跑了一遍。这回系统UI和对话全显示中文了,那成就感简直没法说。赶紧整理了一下所有修改过的文件和脚本,打包成一个傻瓜式的安装包。
我把东西扔到交流群里,让大家试用。反馈很快就来了,大部分人都说没问题,玩得特爽。但是有几个老哥说,玩到特定的分支剧情或者在设置菜单里,文字会突然跳飞,跑到屏幕外面去了。
我回去检查,发现是那套字体文件虽然字符支持够了,但是行高和间距跟原版不匹配,导致显示错位。我又重新调整了字体的参数,修补了几个代码逻辑上的小漏洞。这回总算是彻底搞定了。我把最新的包放出来,这就是你们现在能下载到的那个版本。虽然折腾得够呛,但是看到大家能玩上中文版,我心里踏实了。下一步,我就得开始盯着他们官方的下个更新了,估计又得是一场硬仗。