nikolaybutnik/FFVII-Rebirth-Mesh-Patcher

GitHub: nikolaybutnik/FFVII-Rebirth-Mesh-Patcher

一款通过逆向工程解析文件格式、将FFVII Rebirth服装mod的角色模型数据重写为V1.005新版游戏兼容格式的Python修复工具。

Stars: 0 | Forks: 0

# FFVII Rebirth Mesh Patcher 在《最终幻想7:重生》更新后修复 **Dresscode** 及其服装 mod,适用于 **V1.005** 版本,无需降级游戏。 V1.005 改变了角色模型的存储方式,这导致 Dresscode 及所有基于它制作的服装 mod 失效。如果安装了 Dresscode,游戏会在启动时发生致命崩溃——你永远无法进入菜单。如果 Dresscode 正常工作,但某件服装无法使用,将鼠标悬停在该服装上时也会导致崩溃。 本工具会将受影响的模型重写为当前游戏所期望的格式。 适用于 **Dresscode 本身** 以及 **服装 mod** —— 两者使用相同的命令。 它不是通用的 mod 修复工具。 ## 请先阅读此部分 **本工具不包含任何 mod。** 它只为你已有的文件打补丁。你需要自行寻找并安装 Dresscode 及任何服装 mod,可以从其作者发布它们的任何地方获取。 **它与 Dresscode 或其作者无关。** 这是一个独立的修复程序,是通过逆向工程解析游戏本身的文件格式编写的。请勿在其自身的 issue 跟踪器以外的地方反馈有关此工具的问题——mod 作者并未编写此工具,也无法提供帮助。 **当 mod 更新后,它可能会失效。** 本补丁工具会重写 mod 文件,以匹配当前游戏的预期。如果 Dresscode 作者(或任何 mod 作者)发布了已针对 V1.005 或更高版本构建的版本,则该版本将不需要打补丁——如果文件布局发生变化,本工具可能需要更新才能再次正常工作。遇到无法识别的内容时,它会直接拒绝处理而不是盲目猜测,因此不匹配的情况会显示为“无法读取”,而不是导致安装损坏。 **如果存在官方修复程序,请改用官方修复。** 本工具的存在是因为当时尚未出现官方修复。如果情况有变,作者自己发布的版本永远是更好的选择。 ## 环境要求 - **Python 3.9 或更高版本** — (在安装过程中勾选 *“Add Python to PATH”*) - **NumPy** — 安装 Python 后,运行:`pip install numpy` 就这些。通常不需要进行任何配置。 ## 安装说明 将其解压到任意位置并运行: ``` python patch.py --list ``` 它会自动找到游戏和其他所有必需项: ``` Game (detected): C:\Program Files (x86)\Steam\steamapps\common\FINAL FANTASY VII REBIRTH Oodle (detected): C:\Program Files (x86)\Steam\steamapps\common\SomeGame\oo2core_9_win64.dll ``` **游戏** 既可以通过 Steam 的库列表找到,也可以通过检测本工具是否位于游戏文件夹中找到——因此将其放入 `End\Mods\` 文件夹中也可以。 **Oodle 库** 用于解压缩 mod 压缩包。FF7 Rebirth 将 Oodle 内置到了其可执行文件中,因此游戏文件夹中没有可供借用的副本。它是专有软件,无法在此处捆绑——但它会作为独立的 `oo2core_*_win64.dll` 随许多游戏附带,并且**任何版本都可以使用**。本工具首先会在其所在目录下查找,然后遍历你已安装的 Steam、Epic 和 GOG 游戏,以及任何已安装的 Unreal Engine。 只有少数游戏包含它——大约二十分之一——但它们往往是些大型游戏,因此你很有可能已经拥有了一个。已知包含该库的游戏: - **ELDEN RING** — `Game\oo2core_6_win64.dll` - **Grand Theft Auto V Enhanced** - **DEATH STRANDING DIRECTOR'S CUT** - **Indiana Jones and the Great Circle** 如果你没有这些游戏,**Unreal Engine 附带了一个**,并且可以从 Epic Games Launcher 免费获取(`Engine\Binaries\ThirdParty\Oodle\...`)。为了一个文件进行大型下载,但它始终有效。 如果本工具找不到该库,它会询问你: ``` Drag the file onto this window and press Enter, or paste its path. > ``` 将 DLL 文件拖到控制台窗口即可粘贴其路径。本工具会将其复制到 `patch.py` 旁边,因此只会询问你一次。你也可以自己提前将该文件放在那里。 ## 使用方法 首先像往常一样安装你的 mod,然后运行: ``` python patch.py --list show every mod and whether it needs fixing python patch.py --all patch everything that needs it python patch.py ModName patch one mod, by its folder name ``` 示例: ``` Game (detected): C:\...\steamapps\common\FINAL FANTASY VII REBIRTH Oodle (detected): C:\...\steamapps\common\SomeGame\oo2core_9_win64.dll Mods : C:\...\FINAL FANTASY VII REBIRTH\End\Mods Dresscode (the outfit menu itself) [ok] patched 2 meshes Mods with character meshes [ok] ExampleOutfit patched 1 mesh [!!] AnotherOutfit needs patching 1 mesh No character meshes -- unaffected by V1.005 SomeOtherMod 1 mod needs patching: AnotherOutfit Run: python patch.py --all ``` | 标记 | 含义 | |---|---| | `[ok]` | 已是新格式——无需处理 | | `[!!]` | 仍是旧格式——这是需要修复的内容 | | `[--]` | 没有角色 mesh——不受 V1.005 影响 | | `[??]` | 无法读取——请使用 `--debug` 运行 | ### 撤销操作 在进行任何写入操作之前,每个 mod 都会被备份到 `backups//` 中。 ``` python patch.py --restore --all put everything back python patch.py --restore ModName put one mod back ``` 你的游戏文件永远不会被修改——仅修改 `End\Mods\` 中的文件。 ### 其他选项 ``` --debug add per-mesh detail to --list --pause wait for a keypress before closing --no-pause never wait ``` ## 故障排除 **`Could not find an Oodle library`** 在你的游戏文件夹中搜索 `oo2core_*_win64.dll`,并将其复制到 `patch.py` 旁边。请参阅“安装说明”部分,了解已知包含该库的游戏。 **`no skeletal meshes -- unaffected`** 该 mod 没有角色模型,因此 V1.005 并未破坏它。无需任何操作。 **某个 mod 报告有多个 LOD 并拒绝处理** 本工具用于处理单一细节级别的模型,这涵盖了目前测试过的所有服装 mod。它会拒绝处理而不是盲目猜测。请反馈该 mod 的名称。 **已打补丁,但模型看起来仍然不对** 很可能不是 mesh 的问题。检查 mod 页面是否列出了必需的 mod——缺少材质会渲染为纯灰色或拼凑状,任何 mesh 修复都无法纠正此问题。请先安装这些前置要求。 **游戏仍然崩溃** 运行 `python patch.py --restore --all`,然后提交问题,并附上 `python patch.py --list --debug` 的输出结果。 ## 实际修改了什么 三件事,全部都在 mod 自身的文件内部进行: 1. 从每个渲染部分移除 `FDuplicatedVerticesBuffer` —— V1.005 移除了它,而仍然写入它的 mod 会导致加载器不同步并崩溃。 2. 将逐顶点的 tangent frame 转换为新的 4 字节编码(从 8 字节的标准格式或 16 字节的高精度格式转换)。 3. 当 mod 使用全精度纹理坐标时,将其转换为半精度浮点数,因为当前的 shader 会以半精度读取它们。 转换后的模型与艺术家的原始数据匹配精度在 **0.1 度** 以内。 ## 许可证 MIT —— 详见 [LICENSE](LICENSE)。你可以使用它、修改它、发布它,或者将其整合到你自己的工具中。希望能注明来源,但非强制要求。 本许可证仅涵盖此工具。它不涵盖你使用此工具处理的任何 mod,并且此处不包含或分发任何 mod 内容。
标签:FFVII, Python, 文件修复, 无后门, 游戏, 游戏模组, 逆向工具