案例

pokeruby:一致构建的《精灵宝可梦 红宝石/蓝宝石》反编译

以 C 源码重建 Game Boy Advance 游戏《精灵宝可梦 红宝石/蓝宝石》,使用 pret 的 agbcc 编译器构建,并附有汇编数据脚本和可编辑图像。一致构建涵盖英文版 1.0、1.1、1.2 修订版、调试构建以及德文初版,并逐一与保存的 SHA-1 比对。另有使用现代 GCC 的构建目标,不以一致为目标。

使用条件与局限

  • README 仍称该项目为反汇编,并列出英文版 pokeruby.gba 和 pokesapphire.gba 的哈希;INSTALL.md 另列 1.1/1.2 修订版目标、仅支持 1.0 的调试目标及德文初版构建,仓库中共有 14 个 SHA-1 文件。所审版本已没有 asm/ 目录:游戏代码均为 src/ 下的 C 源码,仅手写的启动与库汇编以及标为 NONMATCHING 的函数除外,后者在一致构建中仍使用内联汇编。贡献指南仍描述早期从汇编逐步转为 C 的流程。
  • 构建不读取任何原版 ROM:代码、脚本、文本、图像和音频源文件都在仓库中,因此仓库本身以源文件形式包含游戏内容。德文构建需先运行设置脚本再编译,并在构建任何英文版之前运行还原脚本。
  • INSTALL.md 列出 Linux、需 Xcode Command Line Tools 的 macOS,以及通过 WSL 或 devkitPro MSYS2 环境的 Windows,并要求 build-essential、git、libpng 和 devkitARM。需克隆、构建 pret 的 agbcc 并安装到仓库中;make modern 则改用 devkitARM 的 arm-none-eabi-gcc,也可通过 TOOLCHAIN 指定其他工具链。
  • 设置 COMPARE=1 时,Makefile 会用对应的 SHA-1 文件检查所选构建。GitHub Actions 工作流比对英文版 1.0/1.1/1.2 的红宝石和蓝宝石构建及德文初版各变体,随后编译 NONMATCHING 源码和 modern 目标但不作比对;README 的构建徽章仍指向 Travis CI。哈希一致说明 ROM 字节相同,并不说明 NONMATCHING C 代码或 modern 构建的行为相同。本合集未构建这些 ROM。
  • 仓库没有许可证文件,复用条款未作说明;原游戏内容仍归其权利人所有,agbcc 和 devkitPro 组件各自适用其条款。所审来源未确立 AI 或 REA 使用归因。

关于此条目

类型
案例
类别
独立重建案例
关联
独立重建项目
目标
游戏

来源复核于

说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。

一手来源

  1. README.md GitHub · pret/pokeruby · 修订 5784633
  2. INSTALL.md GitHub · pret/pokeruby · 修订 5784633
  3. CONTRIBUTING.md GitHub · pret/pokeruby · 修订 5784633
  4. Makefile GitHub · pret/pokeruby · 修订 5784633
  5. config.mk GitHub · pret/pokeruby · 修订 5784633
  6. ruby.sha1 GitHub · pret/pokeruby · 修订 5784633
  7. sapphire.sha1 GitHub · pret/pokeruby · 修订 5784633
  8. .github/workflows/build.yml GitHub · pret/pokeruby · 修订 5784633
  9. src/money.c GitHub · pret/pokeruby · 修订 5784633