序章:又被老项目拖下水
兄弟们,今天分享的这个东西,我本来真不想碰了。标题是《堕落的圣痕:夜行传令汉化版最新更新内容》,这游戏我第一次搞汉化那会儿,已经是三年前的事情了。
那时候我刚辞职,天天在家无所事事,纯粹就是为了找点事情干。这游戏文本量大,设定又很阴暗,社区里好多人抱怨原版那英文机翻得简直是活见鬼,看着头疼。我就心血来潮,想着自己动手,丰衣足食。结果?第一次做的那个汉化补丁,现在回想起来,那叫一个乱七八糟,结构松散,全靠一股蛮劲堆起来的。好多地方的排版直接就崩了,但好歹能玩,社区也捧场。
我本来以为这事儿翻篇了,结果前两周,官方突然扔出来一个巨大的DLC和v3.5版本更新,把原有的文本结构大改了一遍,还加了海量的剧情文本。群里直接就炸锅了,各种求更新补丁的声音。我一看,得,这老牛破车又得拉出来跑一圈了。我硬着头皮,又把这堆尘封的源文件找了出来。
拆包与逆向:先找到它藏在哪
搞这种民间汉化,第一步永远是跟官方玩捉迷藏。他们升级了,肯定把新的文本藏得更深了。我启动工具,先扫了一遍新的游戏文件夹。
我记得旧版本,所有文本都散落在几个简单的`.txt`文件里,随便改。这回他们学乖了,所有的剧情和UI字符串,都被塞进了一个巨大的加密包——一个叫`assets_*`的文件里。这玩意儿就像一个巨大的压缩饼干,你看得见它在那,但你不知道怎么掰开。
我立马翻箱倒柜,找以前社区里大神们留下的各种解包工具。试了三个,都报错。没办法,只能自己来。我花了整整一个下午,对着文件头那堆乱码推测它的打包逻辑。这真是个体力活,我一边骂骂咧咧,一边用一个老旧的十六进制编辑器定位关键的偏移量。
我确认了,新的文本块是使用了LZO算法压缩,并且在文件头加了一层简单的异或加密。我赶紧写了一个简易的Python脚本,这脚本的作用很简单:就是把那个大饼干文件打开,把里面像中文的字串都给我抠出来,变成我能编辑的Excel表格格式。
文本比对:修补旧坑,填上新土
解包工具跑了一晚上,终于把几万行文本都吐了出来。新的难点来了:比对。
-
第一轮痛苦:我必须把旧版汉化成功的文本和新版未翻译的文本逐行比对。新版本往往在旧文本中间偷偷塞了一句话,或者把旧文本的序号打乱了。我用了Beyond Compare这种文本比对软件,但它只能指出行数差异,至于语义上的对应,还得我亲自盯着。
-
第二轮头疼:新的DLC剧情,文本量大得惊人,而且很多是关于世界观深层设定的,用词非常晦涩。我必须一边翻译一边查阅原版设定集,确保名词统一,不能把“虚空行者”翻译成“路边散步的家伙”。我这回找了几个以前群里帮过忙的兄弟,让他们分头认领了一些不那么核心的支线翻译,才勉强推进了进度。
最让人崩溃的是长度限制。这个游戏UI很死板,一个对话框最多显示30个字符。中文的字要比英文宽,所以很多翻译好的句子,一放进游戏里就溢出了,直接把字幕给截断了。我不得不反复斟酌,把一些啰嗦的翻译精简到极致,甚至有时候为了长度,不得不牺牲一点点文采。这种妥协感,真是让人挠头。
字体与编码:的临门一脚
文本都搞定了,以为大功告成了?错!这种日式背景的游戏,自带的字体对中文支持那叫一个惨不忍睹,要么是宋体锯齿感爆炸,要么是很多生僻字直接显示成方框。
我得重新打包字体。我找了一个开源的思源宋体,但是它文件太大,游戏引擎加载会卡顿。我用字体工具精简了字库,只保留了常用汉字和英文数字,把字体文件大小压到了最小。然后,我必须找到游戏加载字体的配置文件,一般藏在某个不起眼的`.cfg`或者资源描述文件里。
这回我摸索了半天,发现字体路径被写死在了一个编译好的DLL文件里。我没能力直接改DLL,只能采取迂回战术:我把我的新字体文件名伪装成原版字体的名字,直接扔进了资源目录,骗过了游戏的加载机制。虽然有点粗暴,但管用。
就是编码测试。确保所有的汉字都是UTF-8或者GBK编码,不然老版本系统跑起来,可能会乱码。我启动了虚拟机,在XP系统下跑了一遍,看到字幕正常显示,我才敢说这事儿算基本定了。
交付与展望
花了差不多快两周,每天晚上都得折腾到凌晨两三点,终于把这个v3.5的汉化补丁给整合出来了。我把所有修改过的文件重新打包压缩,写了一个傻瓜式的安装说明,扔到了社区论坛上。
看到大家反馈说新文本对轴准确,界面也没崩溃,心里那块石头才算落地。虽然干这活儿费时费力,也没一分钱收入,但看着自己亲手把一个复杂的游戏梳理清楚,让更多国内玩家能顺畅体验到完整剧情,这种成就感,比什么都值钱。
下次更新?别问我,我先去补觉了。下次再遇到这种加密包,我得提前准备好更趁手的工具,不能老是用蛮力干活。