最近我迷上了折腾一些老游戏的新平台适配,特别是那些只有PC版汉化的。这回的目标是《Heiress》,这游戏剧本够长,但官方压根儿没管中文玩家。虽然网上能找到一些残缺不全的安卓汉化包,但我这个人手痒,看着那些错位的字体和时不时的闪退,心里就膈应。干脆自己动手,把这个安卓版的汉化彻底搞定。我把整个流程记录了下来,这玩意儿真折腾人。
第一步:锁定目标,把资源文件扒干净
我从一个比较可靠的渠道下载了原版《Heiress》的英文安卓APK包。这游戏是用Ren'Py引擎做的,这对我来说是个好消息,因为Ren'Py的解包工具和流程相对成熟。我先用一个常规的安卓解包工具,把这个APK拆开了。核心目标很明确,就是找到所有游戏资源打包存放的地方。
在解开的文件夹里,我直奔assets目录,找到那个文件名通常带着archive字样的RPA文件。这家伙就是游戏的“心脏”,所有的脚本、图片、音乐全在里面锁着。虽然Ren'Py的RPA文件通常是带混淆的,但市面上有很多针对不同版本引擎的RPA解包脚本。我找了个跟这个游戏版本匹配的脚本,直接扔进去跑。很快,RPA文件就被砸开了,几百兆的资源文件像倒豆子一样全散了出来。
最关键的是脚本文件。它们是以.rpyc(编译脚本)的形式存在的。要汉化,就必须改动原始文本。我得把这些编译后的文件反编译回原始的可编辑的.rpy格式。这个过程我反复确认了好几次,确保反编译出来的脚本完整无误,没有漏掉任何一行对话,毕竟如果脚本少了,后面游戏运行起来就得报错。
第二步:文本注入与中文字体大作战
文本有了,接下来就是注入中文。我之前已经准备好了PC版相对完整的中文文本。但不能直接粗暴替换,因为PC版和安卓版的脚本文件在路径定义和变量命名上可能有细微的不同。我用了专业工具,一行一行地对比安卓反编译出来的脚本和PC版的脚本,确认了需要注入的文本段落。
然后我写了个简单的小脚本,把中文文本精准地定位并覆盖到安卓版对应的英文位置。这个步骤非常考验耐心,因为要确保中文的断句、引号和特殊字符(比如{p}这样的控制符)完全对得上,一旦错位,轻则乱码,重则游戏直接启动失败。
文本搞定了,但很快我遇到了更大的麻烦:字体。原版游戏压根儿就没考虑过中文显示,就算我把中文文本塞进去了,它要么是显示成一堆方块,要么就是系统默认字体丑得让人没胃口。我赶紧找来一套压缩过的思源黑体,把它塞进游戏资源包里,并且修改了Ren'Py的文件,强制指定游戏运行时必须加载并使用我提供的中文字体。这个字体文件体积要控制不然整个APK会超大。
第三步:回炉重造与反复修BUG
文本替换完毕,字体也安排好了,下一步就是重新打包。我把所有修改过的.rpy文件重新编译回.rpyc格式,再利用工具链把所有资源文件(包括新的中文字体和修改后的脚本)重新封装成一个新的RPA文件。
然后,把这个新RPA文件替换掉原始APK里的旧文件。必须用签名工具给这个修改过的APK重新签名,否则安卓系统会把它当成损坏的文件,压根儿不让安装。我当时用的一个常见的签名工具,花了点时间才把签名这事儿捋顺。
第一次安装成功,我兴冲冲地点开游戏。结果,虽然中文出来了,但是对话框里的文字直接溢出,跑到了框外面。我当时就骂了一句。原来中文的字符宽度比拉丁字母宽多了,原版设计的对话框根本不够用。我只好再次拆包,找到定义UI布局和对话框尺寸的样式脚本,手动把对话框的宽度数值往大了改,又把字体大小调小了一号,这才勉强把文本塞进去。
- 最大的坑就是UI适配,Ren'Py的UI样式文件必须得摸清楚才能修改。
- 是兼容性,我发现不同安卓版本对Ren'Py编译的目标SDK要求不一样,导致我在某些老手机上运行会直接闪退,只能重新设定编译目标版本来解决。
- 还有一些特殊角色的名称,在中文翻译后,脚本里用来判断名字的变量名没跟着改,导致剧情分支跑偏,必须手动追踪并修正脚本里的变量引用。
经过三天的不断循环:修改、打包、签名、安装、测试、报错、再修改,终于,一个字体美观、文本完整、运行流畅的《Heiress》安卓汉化版问世了。虽然费劲,但自己动手解决了这个痛点,那种成就感,比直接下载一个成品包强太多了。这回的实践经验告诉我,只要有耐心,这些所谓的“高难度”汉化,也就是体力活加细心活。