起因

看到有人吹捧 The Gap,但是这游戏目前(2024年)还没有官方中文,而且因为太冷门所以目前还没有民间汉化,故想试一下,也简单体会下当年汉化组的艰辛。

目前游戏还是原价,我等打折了再买完整版,现在就拿 demo 练手。

准备工具

本文参考了 UE4 解压和打包教程和B站逗逗米玩啊的视频来练手的。

UE4-Locres-Unpacker

UnrealPakSwitchv10

UE4引擎(epic 客户端下载,The Gap 使用 UE 4.27.2 版本)

Python3

解包

报错

一开始把下载的 UE4 引擎里面的Engine\Binaries\Win64放到UnrealPakSwitchv10\v11.27\2\3下面,把 TheGap 游戏目录下的TheGap\Content\Paks\TheGap-WindowsNoEditor.pak放到UnrealPakSwitchv10文件夹后,把他拖到unpack-v11-27.cmd解包,报一个 Warning 和打包报一个 Warning 和一个 Error。

1
2
3
4
5
6
# 解包
LogModuleManager: Warning: ModuleManager: Unable to load module 'OodleDataCompressionFormat' - 0 instances of that module name found.

# 打包
LogModuleManager: Warning: ModuleManager: Unable to load module 'OodleDataCompressionFormat' - 0 instances of that module name found.
LogWindows: Error: Unable to create backend graph using the default graph settings (DerivedDataBackendGraph) ini=../../../Engine/Programs/UnrealPak/Saved/Config/Windows/Engine.ini.

Warning 参考作者的回复,得知暂时不用管(因为暂时用不着Ooodle,而且麻烦)

https://gbatemp.net/threads/how-to-unpack-and-repack-unreal-engine-4-files.531784/post-9568808

Error 参考 GitHub 上的 issue,加个配置就行了。

https://github.com/allcoolthingsatoneplace/UnrealPakTool/issues/18#issuecomment-1529130668

汉化相关的文件

解包后主要关注2个地方,记得备份原来的这些文件

1
2
TheGap\Content\UI\Fonts\Files
TheGap\Content\Localization\Game\en\Game.locres

一个是字体文件路径,主要换掉原版游戏英文对应的字体,这些原版字体一般不带简体中文的字库。

一个是游戏英文文本,因为 TheGap 没有日语韩语这些语言,所以就拿英文来替换了。

翻译文本

Game.locres 拖到 UE4-Locres-Unpacker.exe 给转成Game.txt,使用显示行数的编辑器或者粘贴到表格啥的或者使用B站逗逗米玩啊在视频用到的bat文件转成 csv 来对照翻译。

我个人认为应该以白名单形式翻译文本,只翻译目前在正常流程玩到的文本。因为这样才好对接上下文,从而使翻译的质量更高。当然如果是先全部机翻看看效果也没问题,不过最好记住原来的游戏里面在哪里出现过英文,否则字库缺字还不知道就会不显示出来。

翻译后,再把Game.txt拖到 UE4-Locres-Unpacker.exe 给转成Game-new.locres后,替换掉原来位置的Game.locres就行了。

修改字体

和翻译文本一样,我认为应该遵循白名单机制,只改翻译了的字的字体,这主要是为了少存一些字体从而让打包后的补丁小一些。

至于如何找字体,应该先知道原来的文本是什么字体。即先通过游戏内截图翻译前的英文字母,然后搜索TheGap\Content\UI\Fonts\Files里面取字体名后找到对应字母比对,对比找最像的。我用的是Google fonts找字体

找找看看这个字体有没有包含简中(一般都没有),没有的话就找个最像的而且包含游戏内该英文字体所有大小的有简中的字体来替代。不过这里有几个要注意的

  1. 游戏是 regular 字体大小的,使用不带后缀的就行。
  2. 有些游戏字体包括 Italic(斜体)的,简中字体一般是没有的,直接拿对应的字体大小替代。
  3. 使用.otf.ttf的格式都可以。

找到后,使用 python 的 fonttools 库来把不需要的字符给去掉来减少字体大小。

1
2
pip install fonttools
pyftsubset.exe .\origin-fonts.otf --output-file=target-fonts.ufont --text-file=Game.txt

origin-fonts.otf是需要使用的字体,target-fonts.ufont是需要被替换的字体(ufont后缀)。

去掉不用的字符后,直接将新的同名字体覆盖到原来的字体就行了。

打包

使用 VSCode 或者其他能够正则替换的编辑器打开拆包时在UnrealPakSwitchv10根目录下生成的lista.txt

  1. LogPakFile: Display: "全部替换为"../../../
  2. 正则匹配,将" offset: (.*)$全部替换为"
  3. 找出替换过的文本文件路径和替换过的字体文件路径所在的行,把这些行都复制到一个新的txt文件中(暂时命名为tmp.txt

tmp.txt给拖到pack-v11-27.cmd,生成newpak.pak就是补丁了。

使用补丁

把补丁重命名为原来的 pak 包加上 -p,即TheGap-WindowsNoEditor_p.pak

将补丁放到原来游戏的TheGap-WindowsNoEditor.pak同级目录下。

运行游戏,应该就有效果了。

心得

我简单体验下汉化拆包解包的过程,通过实践我发现,在2024年的今天,在借助各种大佬们开发的工具后汉化ue4引擎的游戏,还是很简单的。以前的民间汉化组应该没有那么多工具,得自己反汇编啥的,是真的厉害啊。

在这里,我再次向每一个汉化组说声谢谢!没有你们的用爱发电,我就玩不到 PC 汉化版的 GTA 系列,潜龙谍影系列等优秀游戏了。