zeldaret/tww

开发工具

把《塞尔达传说:风之杖》的 GameCube 机器码逆向还原成可编译的 C++ 源码,供研究与修改。

1,129
174
C++
CC0-1.0
创建于 3 年前

如果你手上有一份受支持版本的《风之杖》光盘镜像,并且想从可读的 C++ 源码重新构建游戏,这个项目瞄准的正是这件事。但它是进行中的反编译工程,不是拿来就能用的成品源码或非官方移植,更适合当作参与贡献的项目看待。

解决什么问题

你想在源码层面研究或修改《风之杖》,可游戏只以 PowerPC 机器码的形式封装在 GameCube 镜像里。传统改 ROM 的做法只能在十六进制编辑器里按地址打补丁,得不到函数名、结构清晰的源码工程,也没法把修改编译回原始二进制。反编译改变的是这一步:你先写 C++ 匹配某个函数,再用工具确认编译器产出的机器码与原始版本一致。

仓库本身不包含任何游戏资源或汇编代码,因此现有的游戏副本是搭建流程的一部分。构建会用到这张镜像;按 README 说明,首次构建成功后可以删掉镜像以节省空间,见项目说明。

有什么不同

核心机制是“逐函数匹配”的工作流。首次构建成功后会生成 objdiff.json,用 objdiff 打开即可把 C++ 编译出的汇编与原始目标文件对照对照说明。这让贡献者有一个明确的目标:函数要么匹配、要么不匹配,源文件改动还会触发自动重建。进度按主程序和可重定位模块分开统计,因此能分别看出各部分的完成情况进度页面。

共享的 Ghidra 环境是另一块实用设施。贡献者可以申请远程访问,在已准备好的工程里浏览,再复制一份到本地修改;项目还建议参考《黄昏公主》的反编译工程,因为两者共享大量引擎代码,而且其调试版本的函数更容易读Ghidra 环境。代价是它并非一条命令就能完成转换:README 明确说 Ghidra 的输出不够准确,不能直接粘贴进项目,真正的工作量在于理解并重写函数。项目也明确表示不接受主要由 AI 生成或直接从反编译器复制粘贴的提交,想靠自动化推进的人需要调整预期。

谁值得试

适合对逆向工程有耐心、愿意反复对照编译器输出的人,尤其是持有受支持 GameCube 版本、想参与长期保存工作的开发者。项目支持美版、欧版、日版、韩版以及日版 kiosk 演示镜像,持有不同区域版本的玩家可以选择自己的构建目标版本说明。

不适合只想找可玩 PC 移植的玩家、需要稳定资源管线的 Mod 作者,以及期待拿到源码就能直接编译、不愿比对汇编的初学者。主要想提交生成代码的人同样不合适,因为贡献规则明确拒绝这类改动。

使用条件与边界

环境配置按平台区分,但不算轻松。Windows 上 README 推荐用原生工具链而非 WSL 或 msys2,原因是 WSL 下 objdiff 收不到文件系统通知,无法自动重建;还需要把 Python 和 ninja 加入 %PATH%。macOS 和 Linux 上主要安装 ninja,wibo 会自动下载,用来运行面向 Windows 的工具链平台配置。此外你需要一份受支持版本的光盘镜像,并留出把它复制到 orig/ 的磁盘空间用于首次构建。

真正的门槛在日常维护。匹配上的代码只有保持可读、能稳定构建才有价值,因此编码规范与匹配结果同样重要贡献指南。现有材料没有说明反编译的整体完成度,所以在假定某部分已完成之前,应先查看进度徽章。

HotRepo 点评

HotRepo 在 2026-10-25 的 C++ 月榜上记录到该项目排第 16,当月新增 155 星月榜记录。这只是单日的一次观察,没有可比的日榜历史,无法据此判断热度能否持续。投入时间之前,先看当前按主程序和模块拆分的进度:真正该问的不是项目是否存在,而是你关心的部分是否已经有匹配且可读的源码。

本文由 AI 根据项目 README 生成,更新于 2026年10月25日,以项目官方文档为准。