tp · zeldaret/tp
zeldaret/tp 是《塞尔达传说:黄昏公主》的 C++ 反编译项目,目标是把原游戏还原为源代码形式。README 展示了 GitHub Actions 构建状态,以及 GZ2E01、GZ2P01、GZ2J01 等版本的进度徽章;当前各版本完成度与可运行性待核验。
zeldaret/tp 是《塞尔达传说:黄昏公主》(The Legend of Zelda: Twilight Princess)的进行中反编译工程(work-in-progress decompilation)。项目的目标不是重制或移植,而是把原作的可执行代码还原为可读、可编译的源代码形式;按照 README 的说法,这些源码可以重新编译出与原始二进制一致的产物。
README 中对项目边界给了两条非常重要的说明:
所有目标版本共用同一套代码库,通过条件编译(conditional compilation)区分。README 特别提到:GameCube 各发行版的代码已经达到完全匹配(completely matching),但并非每个翻译单元(Translation Unit, TU)都已完成链接;后续工作包括对齐 Debug 版本,以及让 Wii 版本也达到匹配。
关于项目进展,README 顶部通过徽章展示了构建状态(GitHub Actions)与各版本进度(decomp.dev),并链接到项目主页 https://zsrtp.link 获取更多信息。徽章背后的具体完成度请以 decomp.dev 实时数据为准,本页不做数值承诺。
构建步骤在 README 中写得相当直接:
克隆仓库:
git clone https://github.com/zeldaret/tp.git
把你的游戏光盘镜像放到 orig/GZ2E01。支持的镜像格式包括 ISO(GCM)、RVZ、WIA、WBFS、CISO、NFS、GCZ、TGC。首次构建完成后,镜像可以删除以节省空间。
生成配置:
python configure.py
如果不想用 GZ2E01(GCN 美版),用 --version 指定其他版本。
执行构建:
ninja
需要注意,由于仓库不含游戏资源,缺少镜像时无法完成完整构建;这一点是项目设计上的硬性前提,而非环境配置问题。
项目可以针对以下版本构建,构建时通过 --version 参数指定:
RZDE01_00:Wii,北美(Rev 0)RZDE01_02:Wii,北美(Rev 2)RZDP01:Wii,欧洲/澳洲RZDJ01:Wii,日本DZDE01:Wii,北美(Kiosk 演示版)Shield:Nvidia Shield,中国区ShieldD:Nvidia Shield,中国区(Debug 版本)默认配置版本为 GZ2E01(GameCube 北美版)。README 徽章区目前展示 GZ2E01、GZ2P01、GZ2J01 与 ShieldD 的进度,其余版本的徽章在源码中处于注释状态。
基础依赖包括:
各平台的具体做法:
%PATH%,下载 ninja 并加入 %PATH%(也可用 pip install ninja 快速安装)。README 提示:在 WSL 下运行时,objdiff 无法获取文件系统通知,因而无法自动重建。brew install ninja)。构建过程会自动下载并使用 wibo——一个极简的 32 位 Windows 二进制包装器。首次构建成功后,项目根目录会出现 objdiff.json。此时可以从 [encounter/objdiff] 下载最新发行版,在项目设置中指定 Project directory,配置会被自动加载。
在左侧边栏选择一个目标文件即可开始比对。此后对源码、头文件、configure.py、splits.txt、symbols.txt 的修改都会触发自动重建,方便持续观察匹配情况。README 中附带了一张 objdiff 窗口截图作为界面示例。
这是一个偏研究性质的工程,适合已经具备 C++ 基础、并希望对二进制匹配(matching decompilation)、构建系统(configure + ninja)、以及跨版本条件编译有所了解的读者。上手前请先确认两件事:一是自己合法持有对应版本的游戏镜像;二是理解项目的产出是「可编译回原版二进制的源码」,而不是可直接游玩的移植版本。
NBlood 是用 EDuke32 引擎技术与开发思路对 Build 引擎游戏所做的逆向工程移...
Frogatto & Friends 是一款 2D 横版动作冒险游戏,主角是一只青蛙;开发团队...
jfduke3d 是 JonoF 对 3D Realms《Duke Nukem 3D》的源码移植,基于其 Build...