Lintech-1/dark-render-re

GitHub: Lintech-1/dark-render-re

一个通过 FFmpeg 纹理渲染代理修复 DARK(2013)游戏在 Proton/Linux 上 WMV 过场动画冻结问题的逆向工程项目。

Stars: 1 | Forks: 0

# dark-render-re **DARK (2013)** 的逆向工程视频渲染代理。 该项目修复了 Proton/Linux 上的 WMV 过场动画播放问题。原版游戏的视频层可能会在几秒钟后冻结,而音频、字幕、取消按钮和加载流程仍然正常工作。该代理尽可能保留了原版游戏的 UI 和时间轴,使用由 32 位 Windows FFmpeg 解码的帧替换了视频纹理上传,并通过 FFplay 播放提取出的过场动画音频。 游戏链接: - Steam: - SteamDB: ## 它的功能 - 使用代理 DLL 替换 `VideoEnginePlugin.vPlugin`。 - 将原版插件作为 `VideoEnginePlugin.orig.vPlugin` 加载。 - 让原版插件保留字幕、时间轴、跳过/取消按钮以及关卡过渡功能。 - 启动 `ffmpeg\bin\ffmpeg.exe` 将当前的 `.wmv` 解码为 BGRA rawvideo。 - 启动 `ffmpeg\bin\ffplay.exe`,播放放置在每个过场动画 `.wmv` 旁边的已提取 `.wav` 音频。 - 通过 `VTextureObject::UpdateRect` 将解码后的帧上传到游戏纹理中。 - 使用导出的 `vBase100.dll` 重置标志来处理 Alt+Enter/设备重置。 - 以低优先级/单线程模式运行 FFmpeg,以避免音频卡顿。 ## 构建工具 该项目使用 [FFmpeg](https://ffmpeg.org/) 进行 WMV 解码,测试版本为来自 [FFmpeg-Builds-Win32](https://github.com/defisym/FFmpeg-Builds-Win32) 的 32 位 Windows 构建。运行时测试在 [Proton-GE](https://github.com/GloriousEggroll/proton-ge-custom) 上进行,使用了 [Wine](https://www.winehq.org/) 生态系统中的 Wine/Proton 兼容层。 该代理使用 [LLVM/Clang](https://clang.llvm.org/) 和 Wine i386 导入库构建。渲染集成的目标是 DARK 原始的 `VideoEnginePlugin.vPlugin`、`VisionEnginePlugin.vPlugin` 和 `vBase100.dll` 接口。 此代码库包含代理源代码和一个可选的预构建代理二进制文件。它不包含原版 DARK 游戏文件。 ## 当前状态 推荐的运行环境:**Proton-GE**。 此修复程序是在 Proton-GE 上开发和测试的。其他 Proton 版本可能也可以运行,但并未经过测试目标验证。 已在运行 Proton-GE 且安装了俄语本地化 DARK 的环境中正常工作。 已知设计: - 过场动画音频会被提取到原版 `.wmv` 文件旁边的 `.wav` 文件中,并通过 FFplay 播放,以避免 Proton/Wine DirectShow 音频卡顿。 - 视频来自 FFmpeg 纹理钩子。 - FFmpeg 必须是 32 位 Windows 构建版本,因为游戏/插件进程是 32 位的。 ## 一行命令安装 发布此代码库后,Steam Deck/Linux 用户可以运行以下命令: ``` git clone https://github.com/Lintech-1/dark-render-re.git && sh dark-render-re/install.sh ``` 安装程序会自动执行以下操作: - 通过检查 `DarkApp.exe`、`Localization_Common/` 和 `VisionEnginePlugin.vPlugin` 来查找 DARK 的 Steam 安装路径; - 如果找到多个副本,会询问使用哪一个安装路径; - 下载经过测试的 32 位 Windows FFmpeg 构建; - 将 FFmpeg/FFplay 放置在 `Dark/ffmpeg/bin/`; - 将 `.wav` 音频提取到每个过场动画 `.wmv` 旁边,但静音的 `intro.wmv` 除外; - 将每个处理过的 `.wmv` 替换为静音副本,并在其旁边保留原版备份; - 将原版插件重命名为 `VideoEnginePlugin.orig.vPlugin`; - 将代理安装为 `VideoEnginePlugin.vPlugin`。 如果游戏位于自定义路径: ``` DARK_GAME_DIR="/path/to/SteamLibrary/steamapps/common/Dark" sh dark-render-re/install.sh ``` ## 手动安装 1. 打开游戏文件夹: cd "/path/to/SteamLibrary/steamapps/common/Dark" 2. 将 32 位 Windows FFmpeg/FFplay 放置在此处: Dark/ffmpeg/bin/ffmpeg.exe Dark/ffmpeg/bin/ffplay.exe 测试过的目录布局: Dark/ ffmpeg/ bin/ ffmpeg.exe ffplay.exe Localization_Common/ Video/ ru/ comic_even_intro.wmv comic_even_intro.wav 3. 备份一次原版插件: mv VideoEnginePlugin.vPlugin VideoEnginePlugin.orig.vPlugin 4. 复制代理插件: cp dark-render-re/dist/VideoEnginePlugin.vPlugin VideoEnginePlugin.vPlugin 5. 运行游戏。 ## 安装程序说明 可以从任意位置运行安装程序: ``` sh dark-render-re/install.sh ``` 脚本预期: - 存在 `dark-render-re/dist/VideoEnginePlugin.vPlugin`; - 原版插件名称为 `VideoEnginePlugin.vPlugin` 或已重命名为 `VideoEnginePlugin.orig.vPlugin`。 - 存在原生的 Linux `ffmpeg`,用于准备 `.wav` 音频和静音的 `.wmv` 文件。 游戏根目录检测需要以下文件: - `DarkApp.exe` - `Localization_Common/` - `VisionEnginePlugin.vPlugin` 覆盖 FFmpeg 下载 URL: ``` FFMPEG_URL="https://example.com/ffmpeg-win32.zip" sh dark-render-re/install.sh ``` ## 构建 Linux 构建依赖项: - `clang` - `lld` - Wine i386 导入库: - `/usr/lib/wine/i386-windows/libkernel32.a` - `/usr/lib/wine/i386-windows/libuser32.a` Linux 安装依赖项: - `find` - `ffmpeg` - `awk` - `curl` 或 `wget` - `unzip`、`bsdtar` 或 `7z` 构建: ``` cd dark-render-re sh build_proxy.sh ``` 输出: ``` dist/VideoEnginePlugin.vPlugin ``` 调试日志构建: ``` LOGS=1 sh build_proxy.sh ``` ## 文件 - `src/VideoEnginePlugin_proxy.c` - 代理实现。 - `src/VideoEnginePlugin_proxy.def` - 导出的原版插件符号。 - `dist/VideoEnginePlugin.vPlugin` - 由该项目构建的即用型 32 位代理 DLL,不是原版游戏插件。 - `install.sh` - 游戏根目录的安装/更新助手。 - `build_proxy.sh` - 本地构建脚本。 ## 运行时日志 默认的发布版本不会写入运行时日志。 如果使用 `LOGS=1` 构建,游戏根目录可能包含: - `dark_video_proxy.log` - `dark_video_ffmpeg.log` 这些是调试日志。可以安全删除。 ## 致谢 DARK 归其所有者所有。FFmpeg 归 FFmpeg 项目/构建维护者所有。不会重新分发原版 DARK 游戏文件。 预构建的 `dist/VideoEnginePlugin.vPlugin` 是该项目的代理二进制文件,而不是原版 DARK 的 `VideoEnginePlugin.vPlugin`。 ## 许可证 MIT。详见 `LICENSE`。
标签:Cutter, DLL代理, FFmpeg, Proton/Wine, 云资产清单, 客户端加密, 游戏 Mod, 视频解码, 逆向工程