
巫师2引擎修复 - 错误修复与体验优化
修复《巫师2:增强版》中缺失的存档截图和载入菜单的内存泄漏问题,修复室内地图显示为黑色的问题,新增绘制距离热键和可选跳过开场动画,并加入需手动启用的脚本补丁:书籍已读标记、继续游戏以及暂停菜单中的退出选项。一个小型 DLL;witcher2.exe 和存档均保持不变。
查看大图[size=5][b]Witcher 2 Engine Fix[/b][/size]
在为初代游戏制作了 [url=https://www.nexusmods.com/witcher/mods/1232]Witcher Engine Fix[/url] 之后,我转向了《巫师2》,并遇到了一些新的粗糙之处:我的存档在读取菜单里都没有图片,只有一片紫色渐变;即使把所有画质选项都拉到最高,物体、阴影和植被仍会在杰洛特附近突然弹出;读取菜单每处理一个存档就会泄漏内存。于是我又一次深入引擎,修复了我能修复的部分,并添加了一些我在游玩时觉得缺少的东西:一种在书商处查看哪些书我已经读过的方法、一个“继续”按钮,以及一个更快捷的退出方式。我希望这也能让别人的游玩过程稍微舒服一些。
针对《巫师2:国王刺客 加强版》3.5.0.26 的存档预览、地图、绘制距离和生活质量修复。一个由游戏自行加载的小型 DLL,在游戏运行时调整特定的引擎数值和内存中的 bug;为游戏原本没有地图的室内区域提供地图文件;以及可单独安装的可选脚本补丁。witcher2.exe 和你的存档永远不会被修改,每个部分都可以单独关闭。
[size=4][b]修复内容[/b][/size]
[list]
[][b]存档截图缺失[/b]:新存档在读取菜单中显示紫色/蓝色渐变而不是截图。游戏在同一帧内请求截图并保存,但完成的图像大约晚一帧才到达,此时游戏已经判定没有截图,于是将其丢弃。本模组会将那张图像以游戏期望的名称写到存档旁边。手动存档和快速存档(QuickSave)均已覆盖;安装前制作的存档会保留其渐变,因为它们的图片从未被创建过。[/]
[][b]存档数量多时的内存泄漏[/b]:每次读取或保存菜单构建其列表时,游戏都会重新读取每个存档的预览图片(约 0.9 MB),当菜单已经显示该图片时,会丢弃新副本而不释放它。有 60 个存档时,每次打开菜单会在本次会话剩余时间内消耗约 50 MB;有几百个存档时,在一个 32 位游戏中每次打开会消耗数百 MB。这与人们报告的存档堆积后崩溃的情况相符。本模组会释放该副本。不会删除任何内容,你可以保留任意数量的存档。[/]
[][b]快速存档图片陈旧[/b]:读取菜单会为每个文件名保留一张图片,直到游戏重启,而每次快速存档都会重用同一个文件名,因此新的快速存档会显示上一个存档的图片。现在它会立即显示新的图片。[/]
[][b]室内地图全黑[/b]:在神庙、旅店、罗列多(Loredo)的房子、塔楼和其他房屋(25 个地图条目)中,地图界面(M)全黑,角落有一个巨大的图钉,且无法拖动。游戏没有这些区域的大地图,只有小地图,因此地图界面加载了一张没有名称的图片。下载内容为每个区域提供了其小地图的 2048x2048 放大版本;地图能够显示,图钉位于正确位置,缩放滑块正常工作(在较小的图片上它原本是反向的)。[/]
[][b]距离被选项菜单重置[/b]:网格和植被绘制距离保持在所选值,即使在选项菜单重写它们之后也是如此,并且两个“游戏性 LOD 降级”标志保持关闭。[/]
[/list]
[size=4][b]更长的绘制距离[/b][/size]
在游戏中按 [b]Ctrl+F10[/b] 循环四个级别;级别会在屏幕上短暂显示,并持续到你退出。游戏启动时处于 extreme(可通过 bin\witcher2_enginefix.ini 中 [presets] 段的 default= 更改)。每个级别同时设置四项:网格细节层次、植被距离、物体消失的硬截断距离,以及物体投射阴影的距离。
[list]
[]baseline:游戏自身的数值(1x)[/]
[]high:网格细节 2x,植被 2x,可见距离和阴影 1.5x[/]
[]ultra:网格细节 4x,植被 3x,可见距离和阴影 2x[/]
[]extreme:网格细节 8x,植被 5x,可见距离和阴影 3x[/]
[/list]更高的级别会消耗 GPU 时间;请在你自己的电脑上用 Ctrl+F10 进行比较。它们不会改变游戏生成人物的距离(那是单独的流式加载系统),太阳的阴影贴图保持其自身范围。F9(快速读取)和 F10 在此游戏中无法重新绑定,因此模组在按住 Ctrl 或 Alt 时对游戏隐藏它们:Ctrl+F10 永远不会读取你的快速存档。单独按 F9 仍然会快速读取。
[size=4][b]跳过开场(可选)[/b][/size]
在 bin\witcher2_enginefix.ini 的 [startup] 段中设置 [b]skip_intro=1[/b],游戏会直接启动到主菜单,没有标志视频和开场电影。默认关闭。模组会在每次启动视频时替游戏按下“跳过”,效果与按 Esc 相同,因此菜单前会短暂黑屏。它与移除开场的模组兼容,也可单独使用。(一个将视频列表完全清空的模组会使游戏停留在黑屏,直到你按键;这就是此类模组保留一个标志的原因。)
[size=4][b]可选脚本补丁[/b][/size]
这些补丁会更改游戏自身的脚本,因此不属于 DLL 的一部分,在你安装之前不会发生任何事。关闭游戏并运行 [b]Witcher2EngineFix_Optional\ScriptPatches\Install.bat[/b];它会询问每个补丁(按 Enter 表示是,按 n 表示否)。你可以随时再次运行以更改选择,同一文件夹中的 [b]Uninstall.bat[/b] 会还原原始文件。
[list]
[][b]书籍已读标记[/b]:书籍在杰洛特的物品栏、交易和存储列表中显示 READ(已读)、NOTHING NEW(无新内容)或 UNREAD(未读)。勾号标记你已读过的书;在商人和存储箱处,它同时保留游戏的原始含义,即“你携带了一份副本”。NOTHING NEW 表示图鉴知识和日志条目已知,但书籍文本本身尚未阅读,因此它保持普通图标。工具提示会列出阅读仍能教给你的内容。阅读一本书会立即刷新物品栏。在战利品窗口和容器旁的小预览中,已读的书会获得一个带有勾号的专属图标;战利品窗口没有工具提示,因此适用时会在名称后添加 (Nothing new)。文本跟随游戏语言,支持英语、波兰语、德语、法语、西班牙语、意大利语、俄语、捷克语、匈牙利语、土耳其语、日语和中文。[/]
[][b]继续[/b]:主菜单顶部的“继续”按钮会加载你最新的存档。标签是游戏自带的,使用你的语言。[/]
[][b]暂停菜单中的退出[/b]:游戏自带的“退出”按钮,带有游戏自带的“退出游戏?”确认,位于“退出到主菜单”旁边,因此你不再需要经过加载界面才能退出。[/]
[/list]补丁程序会处理你的游戏实际使用的文件:base_scripts.dzip,即使像 Project Mersey 这样的模组替换了它;对于书籍标记,还会处理交易和存储界面,即使 HD UI 模组替换了它们。它会在写入任何内容之前检查每个更改是否适用,将原始文件保存在其备份文件夹中,如果脚本不匹配则会显示消息并拒绝。不熟悉的交易/存储 UI 影片会被保留不动,只跳过其依赖的勾号更改。如果之后另一个模组替换了这些文件之一,请再次运行 Install.bat。
[size=4][b]下载内容[/b][/size]
[list]
[][b]bin\dinput8.dll[/b]:引擎修复。游戏会自动加载它。[/]
[][b]bin\witcher2_enginefix.ini[/b]:设置[/]
[][b]CookedPC\globals\map_scales.csv[/b]:游戏的地图表,已填入缺失的室内地图[/]
[][b]CookedPC\globals\gui\maps\_2048x2048.dds[/b]:25 张室内地图,从游戏自身的小地图放大而来(新名称;未替换任何游戏文件)[/]
[][b]Witcher2EngineFix_Optional\ScriptPatches[/b]:Install.bat、Uninstall.bat 及其运行的 PowerShell 脚本(可读文本)[/]
[][b]README_Witcher2EngineFix.txt[/b][/]
[/list]
[size=4][b]需求[/b][/size]
[list]
[]《巫师2:国王刺客 加强版》3.5.0.26(已在 Steam、Windows 11 上测试,含 DXVK 和不含 DXVK)。GOG 未测试。引擎更改会在修补任何内容之前检查确切的游戏代码;在其他版本上它们会跳过自身并在日志中说明。[/]
[]存档截图修复通过游戏的 Steam 存档存储写入,Steam 版本默认使用该存储。[/]
[]脚本补丁需要 Windows PowerShell,每个 Windows 10 和 11 都有。[/]
[/list]
[size=4][b]安装[/b][/size]
[list=1]
[]将 zip 解压到你的游戏文件夹(例如 ...\steamapps\common\the witcher 2,即包含 bin 和 CookedPC 的文件夹),使 dinput8.dll 最终位于 bin 文件夹中 witcher2.exe 旁边。[/]
[]可选:在 bin\witcher2_enginefix.ini 中设置 skip_intro=1。[/]
[]可选:在游戏关闭的情况下,运行 Witcher2EngineFix_Optional\ScriptPatches\Install.bat 并选择你想要的补丁。[/]
[]照常启动游戏。[/]
[/list]要检查是否正常工作,请在启动游戏后打开 bin\witcher2_enginefix.log。它以“witcher2_enginefix 0.5.1 loaded”开头,在新建存档后它会显示“thumbnail: wrote ..._640x360.bmp”。
[size=4][b]设置[/b][/size]
bin\witcher2_enginefix.ini 在启动时读取,模组从不写入它。最有用的几行:
[code]
[general]
enabled=1 ; 0 turns off DLL patches only
[presets]
default=extreme ; baseline, high, ultra or extreme at startup
cycle=Ctrl+F10 ; F9 or F10 with Ctrl and/or Alt
[saves]
fix_thumbnails=1 ; 0 turns the save-screenshot fix off
fix_list_leak=1 ; 0 turns the save-list memory fix off
[startup]
skip_intro=0 ; 1 starts at the main menu without logos and intro
[osd]
size=34 ; on-screen text size, 22 suits 1080p[/code]地图文件和已安装的脚本补丁会单独移除;[general] enabled=0 只会禁用 DLL 补丁。
每个级别的四个数值可以在 [preset.high]、[preset.ultra] 等段落中更改。ini 文件解释了每一行。
[size=4][b]杀毒软件警告[/b][/size]
一些病毒扫描程序,包括此页面上的扫描,可能会标记本模组。这是误报,对此类模组很常见。dinput8.dll 是一个代理 DLL,由游戏自行加载;它读取热键状态并更改游戏内存中的数值,这正是扫描程序启发式检测所寻找的。Install.bat 以 -ExecutionPolicy Bypass 启动 PowerShell,以便 ScriptPatches.ps1(纯文本,如果你愿意可以先阅读)可以运行。不会下载或发送任何内容到任何地方。完整源代码在 [url=https://github.com/MariusTBjercke/witcher2-enginefix]GitHub[/url] 上,如果你愿意可以自己构建 DLL。
[size=4][b]已知问题[/b][/size]
可选的暂停菜单退出确认目前需要先点击一次才能响应悬停。退出按钮仍然有效。
[size=4][b]兼容性[/b][/size]
[list]
[][b]另一个 dinput8.dll[/b]:如果你的 bin 文件夹中已有来自其他模组的 dinput8.dll,请不要覆盖它。两者使用相同的文件名,因此只能加载一个。[/]
[][b]脚本模组[/b](Project Mersey 及其他替换 base_scripts.dzip 的模组):脚本补丁会基于你现有的 base_scripts.dzip 构建。请先安装那些模组,然后运行 Install.bat。如果你之后安装或更新了脚本模组,请在其之前运行 Uninstall.bat,在其之后再次运行 Install.bat。[/]
[][b]UI 模组[/b]:书籍标记可与 A Better UI(加强版的一部分)以及替换 ui_trade.swf 和 ui_storage.swf 的 HD UI 放大版一起使用。[/]
[][b]DXVK[/b]:无论是否使用它都能工作。屏幕上的级别文本是游戏上方的一个小窗口,因此它会在无边框和 DXVK 全屏中显示,但在没有 DXVK 的真正独占全屏中不显示;热键在那里仍然有效。[/]
[][b]Steam 云存档[/b]:开启或关闭没有区别。[/]
[][b]其他地图模组[/b]:自带 CookedPC\globals\map_scales.csv 的模组会与室内地图冲突;最后复制的那个生效。替换地图界面 ui_nav.swf 的 UI 模组(A Better UI、HD UI 放大版)工作正常。[/]
[]以后升级:zip 中的 ini 会覆盖你的,所以请记下你做的任何更改。[/*]
[/list]
[size=4][b]卸载[/b][/size]
如果你安装了脚本补丁,请先运行 Witcher2EngineFix_Optional\ScriptPatches\Uninstall.bat。然后删除 bin\dinput8.dll、bin\witcher2_enginefix.ini 和 bin\witcher2_enginefix.log、CookedPC\globals\map_scales.csv 以及 CookedPC\globals\gui\maps 中的 *_2048x2048.dds 文件(游戏自己的地图位于 pack0.dzip 内,不在该文件夹中),以及 Witcher2EngineFix_Optional 文件夹。它为你的存档写入的截图会保留,并且在没有模组的情况下继续工作。
[size=4][b]工作原理[/b][/size]
游戏为其输入导入 dinput8.dll,因此 bin 文件夹中具有该名称的 DLL 会随游戏加载。它将输入转发给真正的 Windows dinput8.dll,并更改内存中的特定引擎数值和函数,每次都会在检查原始代码完全符合预期之后进行。室内地图是普通的游戏文件:地图界面在 globals\map_scales.csv 中查找每个区域,而 CookedPC 中的松散文件会覆盖游戏档案。脚本补丁向 base_scripts.dzip 内游戏自身的脚本添加几行,游戏在每次启动时编译它们,修补受支持的交易/存储界面以保留书籍标记,并从你自己的游戏文件生成已读书籍图标。这些 bug 是通过记录游戏自身的调用并阅读其代码发现的;原因、涉及的地址和测试都记录在 [url=https://github.com/MariusTBjercke/witcher2-enginefix]GitHub[/url] 上。欢迎在那里或 Posts 标签中附上 bin\witcher2_enginefix.log 提交报告。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。