|
本文为 其乐用户(UID:131429) 发布的原创文章,转摘前请联系该用户获得许可
本帖最后由 131429 于 2026-7-27 17:35 编辑
> The Operative: No One Lives Forever Simplified Chinese Patch > 基于 NOLF Modernizer v1.006 Patch 4
一、项目背景《无人永生》是 Monolith Productions 在 2000 年推出的第一人称谍战射击潜入游戏,是一款目前买不到的游戏。 游戏的版权在几次公司并购里彻底走散,至今没有任何一方能拿出完整权利来重新发行,所以它没有 Steam 版、没有 GOG 版,只能靠二手光盘和社区补丁活着。 它从来没有过官方简体中文版。 本补丁想解决的就是这件事: 让这款 25 年前的游戏在现代系统上、用中文、以合理的分辨率跑起来。 本补丁建立在 NOLF Modernizer之上,这是社区维护多年的现代化补丁,修了大量引擎年久失修的问题。 (也引入了无数新问题  )
【【【一点私人的话】】】先开门见山地说:我对最终呈现的这个版本非常不满意。 问题出在最初的技术路线上。
当时为了让中文尽快显示出来,我选了 GDI 袋礼这条路: 拦截引擎的文字绘制调用,自己接管中文渲染。 这条路线见效很快,但是把游戏的文字推上了引擎里最慢的那条路径:每段文字、每一帧、用 GDI 画到 DirectDraw 表面上。 等我意识到性能代价的时候,整套东西已经建在这个地基上了,推倒重来等于从零再做一遍。 所以下面「已知问题」的第一条,我写的是"无解",其实更准确的说法是:在目前我选择的这条路线上,无解。 更折磨人的的是排查。 本补丁叠着三样东西:一个 2000 年的引擎、一个社区维护的现代化补丁、一个我做的汉化层。 任何一个毛病冒出来,第一步都不是修,而是先证明它是谁的。 是游戏本身?是 Modernizer?还是汉化? 测试起来非常痛苦,测试比开发累得多,而且是那种看不到尽头的累,修好一个,冒出两个,永远不确定自己是在收敛还是在原地打转。 做到后面,我其实已经不打算发布了。 改变主意是因为,之前随手发的一个测试视频,本想着就是自己个补丁玩玩,结果点赞竟然有几百个…… 那一刻我意识到,原来到今天还有这么多人惦记着这款买都买不到的游戏,还在等一个能读懂的版本,这份意外的期待一下子变成了压力,也变成了我把它做完的理由。 于是我又回去尽力修补了一轮:性能、排版、工具、文档,现在你看到的就是最终呈现的样子。
它不完美。
「已知问题」那一章我写得很长,长到几乎像是在劝退,但我宁可你在下载之前就知道会遇到什么,也不想让你在游戏里撞上问题时,把时间浪费排查问题上。 如果本补丁能让你把这个故事完整地玩一遍,那就值了。 我应该不会再更新这个汉化了,以我的能力已经到了极限了,能修的我全修了,修不了的我也不会修。 所以本补丁不接受任何bug反馈,译文有bug的话请看后文的【六、小工具:改译文与换字体】自行修改…… 另外,如果有人想要使用 GPU绘制 之类的方案来重制汉化,请随意使用我的译文或者工具,不需要署名,我做汉化完全是出于兴趣,什么也不图。
二、技术说明汉化这款游戏不是”把文本换掉“那么简单,原因在于它的引擎: - 文本全部是 ANSI 单字节,没有 Unicode 概念; - 界面字体是 PCX 点阵图集,里面根本没有汉字字形; - 所有界面布局常量都是 640×480 的逻辑单位。
所以本补丁分了三层: 1. 文本层 游戏的界面文字存在 CRES.dll 的 Win32 字符串资源里,需要注意的是 RT_STRING 是 16 条一块存放的,只能整块替换,改其中一条时如果不先把这块原有的 16 条读出来,同块里没动过的字符串会被清空。 实际封包里有 6073 条字符串,而译文表覆盖 5602 条,剩下 471 条必须原样保留。 译文以四列 TSV 维护(id / language / english / chinese),完整开源。
2. 渲染层 一个工具 CSHELL.DLL 拦截引擎的 GDI 文字调用,把 ANSI 文本转成 Unicode,用 NCN01 字体渲染。 NCN01 是思源黑体 SC 2.005 改名而来,改名不是为了藏来源,而是 SIL Open Font License 的强制要求:‘Source’ 是保留字体名称,衍生版本不得沿用。
3. 引擎层 对 Modernizer 客户端 DLL 的修改,共 13 个文件、439 行,届时Github仓库将以 patch 形式提供,解决三类问题: 性能: 引擎在非英文语言下会放弃点阵字体、改用“引擎字体”;也就是每段文字、每一帧、用 GDI 画到 DirectDraw 表面,每次都要锁表面等 GPU 排空。 而游戏中每帧都在画的是 HUD(血量/护甲/弹药/氧气),所以代价是持续的:高分辨率下从 60 帧掉到不足 20 帧。 最终我的解决方法是让 HUD 和氧气条继续用点阵图集,英文分支本来就只给它们数字和符号,不损失任何汉字。
高分屏字体缩放: 这个特性只存在于本补丁的 DLL 里,源码树中从未提交过,照Modernizer上游重编会静默丢失。
排版: 布局常量是 640×480 单位,而文字度量是设备像素。 点阵字体时代两者近似相等,换成按分辨率放大的引擎字体后这个假设全线崩塌,一共找到十二处混用,分了三批修完。
中文以外额外附带的东西:
两个启动器:物理像素检测、DPI 修复、16:9 黑边(而非拉伸变形)、自动识别 X4/X2/无高清包; LAA 4GB:给lithtech.exe打了大地址感知补丁,不容易导致内存不足的问题; 三合一小工具:文本翻译、字体更换、按键设置,单个 exe,无运行时依赖。 小工具里的字体更换支持系统已装字体和自选文件(ttf / otf / ttc),会用译文里实际出现的每一个汉字去检查字体覆盖,缺字会直接列出来。 整理后项目将全部开源,包括译文、补丁、构建脚本和踩坑记录,目标是:只要有开源仓库和一份游戏,就能把整个汉化从零重建出来。
三、已知问题(!!极其重要!!必读!!)
1. 中文界面文字多的地方会掉帧,分辨率越高越明显这是引擎层面的限制,无解。 原因见上文,非英文语言下界面文字走 GDI 表面的路径,文字越多、分辨率越高,代价越大。 HUD 已经修好了,但菜单、任务简报这类文字密集的界面仍然会掉帧。 好在这只影响菜单界面,不影响战斗,打开硬件光标以后鼠标指针也很流畅,只有菜单自己在卡。 非常介意这点的话请使用 1080p 启动器。
2. 1080p 下中文文字边缘锯齿明显,可读性一般分辨率越低,字号的实际像素数越少,而汉字笔画比拉丁字母密得多,加上文字是用 GDI 画到表面上的,抗锯齿能力有限,所以 1080p 下笔画边缘会比较毛糙,长段落读起来累。 分辨率越高这个问题越轻,在 4K 下基本看不出来,但那又会踩上问题 1 和问题 3,所以需要玩家做取舍。
3. 1080p 以上的分辨率,选择装备时可能看不到下方的候选列表原生分辨率启动器在 4K 等高分辨率下会遇到这个问题。 绕过办法:用 1080p 启动器进游戏、选好装备、存档,再换回原生分辨率启动器读这个存档来玩。
4. 进游戏后鼠标无法控制视角需要手动开一个设置: > 控制 → 鼠标 → 旧版鼠标观察:是 这是 Modernizer 的默认值在部分系统上不合适导致的,开了就正常了。
5. 个别场景严重掉帧(与本补丁无关)某些特定地点帧数会掉一半,走开就恢复,原地转身背对也会恢复。 这不是汉化的问题,是 LithTech 引擎在 64 位 Windows 上的老 bug:引擎施加动态光时会重新计算并上传光照贴图,这条路径在现代系统上极慢,同引擎的《异形大战铁血战士2》、《血祭2:天选者》、《虎胆龙威:大厦惊魂》等都有同样的问题,即使用RTX 5090 也一样爆卡,与玩家的配置好坏无任何关系。 应急办法:在「选项 → 显示 → 高级」里关闭“光照贴图”,帧数会立刻恢复,代价是关卡的烘焙光照会变平。
6. 读取存档时可能闪退这是引擎自己的老毛病,和汉化无关,但是足够让人抓狂,尤其是在刚打完一场硬仗的时候。 唯一有效的办法就是勤存档。 养成随手按 F6 快速存档的习惯,过一个路口按一下、清完一个房间按一下。 另外建议别只依赖快速存档,重要工具点手动存到不同的档位,快速存档只有一个槽,万一它正好坏了,你需要一个能退回去的地方。
7. 装了高清纹理包之后游玩久了可能报内存不足闪退lithtech.exe 已经打了 LAA 大地址感知补丁,可用内存从 2 GB 提到了 4 GB,但它终究是个 32 位程序,而 x4 高清包解压后接近 10 GB 贴图,在贴图密集的场景里仍然可能撞上上限。 无解,勤存档。
8. 非 16:9 分辨率下,Alt+Tab 切出去再切回来,黑边覆盖层可能消失如果你的显示器不是 16:9(比如 16:10、21:9、32:9),启动器会在画面两侧或者上下加黑边,让这个 2000 年的 4:3 界面不被拉伸变形。 Alt+Tab 切换出去再切回游戏,这层黑边有可能不见了。 只是难看,不影响游戏。 画面内容、操作、存档都正常,不用管它,介意的话重启游戏就恢复。
四、截图
五、安装和运行
1. 安装游戏
准备一份《无人永生》(GOTY 版最佳)。
2. 覆盖汉化包
把补丁包内的全部内容复制到游戏根目录(与 lithtech.exe 同级),出现同名文件时选择合并并替换。
> 不能只复制中文 REZ。本补丁依赖随包附带的完整 Modernizer。
> 如果启动时报 `Invalid shell DLL version for cshell.dll`,说明覆盖不完整,重做这一步。
3. 用任意汉化启动器进一次游戏,改设置
推荐开启:
显示 - 纹理色深:32位
显示 - 硬件光标:开
显示 - Intel Graphics 修复:开
控制 - 武器快捷键 - 图标大小:大
性能 - 声音滤波效果:开
游戏 - 准星 - 动态缩放:开
进游戏后如果鼠标无法控制视角,则需要打开:
控制 - 鼠标 - 旧版鼠标观察:是
这是 Modernizer 的默认值在部分系统上不合适导致的,开了就正常了。
4. 退出游戏
5. 打开 ‘《无人永生》汉化小工具\NOLF_CN_Toolkit.exe’
6. 在「按键设置」页改键位,保存
Modernizer 在非拉丁语言的 Windows 上有 bug ,无法通过游戏内的设置来修改按键,这个工具可以绕开这个 bug ,直接修改根目录的 autoexec.cfg ,下拉框选键,不受键盘布局影响。
7. 用任意汉化启动器开始游戏
两个启动器的区别只有分辨率策略:
- 原生分辨率:按物理像素开无边框窗口,画面最清晰,中文边缘也最干净
- 1080p:DPI 虚拟化放大
两者都会自动检测游戏目录里的高清纹理包(X4 / X2 / 无),不需要手动配置。
在乎画面清晰就用原生,在乎菜单流畅和装备界面就用 1080p。装备可以按问题 3 里的办法用 1080p 选好存档,再换回原生来玩,两头的好处都能占一点。
可选:高清纹理包
游戏原版贴图是 2000 年的分辨率,在 4K 屏上会比较糊。
社区有一套用 ESRGAN 超分重制的贴图包,观感提升比较明显,汉化启动器会自动识别并加载,不需要任何额外配置。
下载(ModDB):
X4包:https://www.moddb.com/mods/no-on ... -upscale-pack-x4-v3
四倍分辨率,解压后约 10 GB。
X2包:https://www.moddb.com/mods/no-on ... -upscale-pack-x2-v3
两倍分辨率,体积相对小很多。
修复包:https://www.moddb.com/mods/no-on ... 4-fix-for-x2-and-x4
修正前两者的一些贴图问题。
安装:
把解压出来的 .REZ 文件放进游戏根目录的 Custom 文件夹即可。
两条规矩:
- x4 和 x2 只能选一个,不要同时放进去;
- 修复包是必须的,不是可选项。
第二条得强调一下:启动器判断“有没有装高清包”时,修复包也在检测条件里。
少放了它的话,启动器会认为高清包不完整,就不会加载任何高清纹理。
把高清包放进 Custom 之后应该是这样:
x4:
HD-COMMON1-X4.REZ
HD-COMMON2-X4.REZ
HD-TEX1-X4.REZ
HD-TEX2-X4.REZ
HD-TEX3-X4.REZ
HD-TEX4-X4.REZ
HD-TEX-FIX-V4.REZ ← 修复包
NOLF_CN_GDI.REZ ← 汉化
x2:
HD-COMMON-X2.REZ
HD-TEX1-X2.REZ
HD-TEX2-X2.REZ
HD-TEX-FIX-V4.REZ ← 修复包
NOLF_CN_GDI.REZ ← 汉化
六、小工具:改译文与换字体
为了应对一些情况,我写了一个小工具:NOLF_CN_Toolkit.exe ,单文件,不需要装 .NET、不需要 Python、不依赖任何其它 exe。
启动时会自动寻找 C:\Games\NOLF,找不到会弹窗让你选游戏目录,之后程序记住目录。
总体有三个功能,「按键设置」上面讲过了,这里说另外两个。
文本翻译:改译文并导入游戏
觉得哪句翻译别扭,或者我没测试到的换行错误之类的,可以自己修改。
1. 工具会自动读取游戏目录下的 NOLF_en_zh.tsv;
2. 搜索框支持按 ID、英文原文、中文译文三者任意匹配;
3. 在表格里直接改中文列,或者选中一行,用下方的大编辑框改,那里显示的是真正的换行,比在表格里对着 \n 改舒服得多;
4. 改过的行会高亮,勾选「只看改过的」可以复查文本;
5. 点击“保存译文”,将翻译写回 TSV;
6. 点击“导入游戏”,将译文写入游戏。
几条要注意的:
- 不要动 ‘%1!s!’、‘%2!d!’ 这类占位符,这些是游戏运行时要往里填数值的通配符,删除或修改都会出问题;
- 表格里显示的 ‘\n’、‘\t’、‘\\’ 分别代表换行、制表符、反斜杠,在下方编辑框里按回车就行,保存时会自动写成 ‘\n’;
- 导入前会先备份当前的 Custom\NOLF_CN_GDI.REZ 到同目录的 backup 文件夹内;
- 导入每次都从原始副本 .base 重新生成,所以反复导入不会累积翻错误,上一次的错误译文也不会残留;
- 写完之后会重新打开产物,把每一条字符串读回来逐字比对,校验不通过就不碰游戏目录里的封包;
想彻底恢复到我的译文:删掉 Custom\NOLF_CN_GDI.REZ,把同目录的 NOLF_CN_GDI.REZ.base 改名为 NOLF_CN_GDI.REZ 即可。
游戏字体:换成你喜欢的字体
如果你不喜欢思源黑体,可以换掉。
1. 左边列出系统里已装的全部字体,上面的框可以搜索,也可以点「从文件选择」,使用没安装的字体文件;
2. 支持 ttf / otf / ttc,如果使用微软雅黑那种一个文件里装了好几个字体的大字体,会让你选择用哪一个;
3. 选中后立刻做覆盖检查,拿当前译文里真正出现过的每一个汉字(2400 多个)去查这个字体有没有这些字,如果缺哪些字,会直接列出来;
4. 预览框里画的是改名后的实际产物,不是原始字体文件,也就是说,如果处理过程弄坏了字体,预览当场就不对,不用等进游戏才发现;
5. 想让粗体也换掉,勾「单独指定粗体」再选择一个粗体,不勾的话就由系统自动合成粗体;
6. 点生成并应用到游戏。
其它:
- 换完字体要重启游戏才生效;
- 原字体会先备份到 NOLF_CN\backup\,随时可以点「还原为原版字体」退回去;
- 用系统自带字体(微软雅黑等)生成的文件,请只给自己用,不要乱发给别人,字体是有版权的。
工具做的事是把你选的字体的内部家族名改写成 NCN01,再存成 NOLF_CN\NOLFCN-Regular.otf 和 NOLFCN-Bold.otf。
因为工具 DLL 里这两个文件名和 NCN01 这个名字都是写死的,这是这套加载方式唯一的接口。
七、作弊码
按 `T` 打开聊天界面,输入代码后回车。
- 必须全小写,而且都以 mp 开头;
- 用过作弊码的存档会被标记。
八、下载地址
Google Drive
百度网盘 提取码: cnnh
九、致谢
- Monolith Productions:做出了这款杰出游戏,25年过去了,凯特·阿彻依然没有过时。
- haekb / HeyThereCoffeee [NOLF Modernizer]:没有Ta,这款游戏在现代系统上根本跑不起来,更谈不上汉化,本补丁的引擎层改动全部建立在它的开源代码之上。
- Adobe 与 Google:思源黑体,以 SIL Open Font License 1.1 发布,一套能覆盖游戏全部译文用字的开源中文字体,是这个项目能做成的前提之一。
- 高清纹理包的制作者:ESRGAN 超分材质包,让 2000 年的贴图在 4K 下还看得过去;
- NOLF 社区:在这款游戏无法合法购买的二十多年里,是社区把它保存了下来。
|