# 《索尼克 Advance》1 与 2：一致性 GBA 反编译及宽屏移植

> 将 Game Boy Advance 版《索尼克 Advance》和《索尼克 Advance 2》重建为 C 源码，借助 SAT-R 的 agbcc 分支重新构建六个列有哈希值的 ROM，同一套代码还可编译为面向 Linux、macOS 和 Windows 的宽屏 SDL 移植版，以及 PSP 和 PS2 版本。README 报告《索尼克 Advance 2》已全部由 C 构建，仍有约 60 个函数不一致。提取出的图像、音乐和数据都提交在仓库中，因此构建时不读取原 ROM。

- 类型：案例
- 目标：游戏
- 类别：独立重建案例
- 关联：独立重建项目
- 来源复核于：2026-10-19
- 收录于：2026-10-28
- 原始资源：<https://github.com/SAT-R/sa2>
- 一手来源：<https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/README.md>
- 目录页面：<https://awesomerea.org/zh/resources/sonic-advance-1-2-decomp-port-case/>
- 记录 JSON：<https://awesomerea.org/resources/sonic-advance-1-2-decomp-port-case/record.json>
- 英文版：[English](https://awesomerea.org/resources/sonic-advance-1-2-decomp-port-case/index.md)

## 使用条件与局限

- README 标明项目尚未完成、仍在积极开发。它列出六个附 SHA-1 的 ROM 目标：《索尼克 Advance》（欧版），以及《索尼克 Advance 2》的美版、欧版、日版、日本 Virtual Console 版和 2002-10-25 的美版测试版。README 报告 SA2 已 100% 由 C 构建，约 60 个不一致函数从 asm/non_matching 引入汇编；在所审提交中，该目录有 SA2 文件 64 个、SA1 文件 99 个、共享文件 17 个、引擎文件 8 个，另有 600 多个 SA2 函数尚未命名。Tiny Chao Garden 和 Collect Rings 这两个多重启动子游戏为构建一致 ROM 而一并编译，只完成了部分反编译。
- 文档所述的构建不读取原 ROM。仓库提交了 12,000 多个 PNG 精灵帧和图块、474 首 MIDI 乐曲、瓦片地图及其他原始数据，其中包括一个 191 KB、分段并入 Tiny Chao Garden 多重启动 ROM 的数据文件。移植版的 CI 任务仍从私有存储下载一个基础 ROM，但 Makefile 并不引用它。
- INSTALL.md 面向 Linux（Windows 用户使用 WSL）和 macOS：需 ARM GCC 与 binutils、libpng、SDL2 和 MinGW-w64，构建 PS2 版另需 mkisofs 或 cdrtools。一致的 GBA 构建需将 SAT-R 的 agbcc 分支编译并安装到仓库中。移植版分别用 make sdl（Linux／macOS）、sdl_win32（Windows）、sdl_psp（PSPDEV）和 ps2（PS2DEV）构建，分辨率为 426×240 宽屏；README 标注 Win32 OpenGL 目标不可用，GitHub 上也没有发布版。
- 在 GBA 平台上，make 会按所列哈希值对构建出的 ROM 做 SHA-1 校验。CI 检查代码格式，构建并校验 SA2 美版、SA1 欧版及另外四个 SA2 版本；还在 Ubuntu 和 macOS 上为两款游戏构建 SDL、Win32、PSP 和 PS2 移植目标，并用无界面的 SDL 构建回放仓库中的一段 any% 速通输入录制。一致性只针对 GBA ROM，不适用于宽屏移植版。
- 仓库没有许可证文件，GitHub 也未识别出许可证。提取出的图像、音乐和数据，以及在 libagbsyscall、m4a 和 agb_flash 中重建的 Nintendo SDK 库，仍受其权利人条款约束。README 规定对议题和拉取请求严格禁止使用 LLM／AI。

## 一手来源

1. <https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/README.md>
2. <https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/INSTALL.md>
3. <https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/Makefile>
4. <https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/config.mk>
5. <https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/sa2.sha1>
6. <https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/sa1.sha1>
7. <https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/.github/workflows/build.yml>
8. <https://github.com/SAT-R/sa2/tree/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/asm/non_matching>
9. <https://github.com/SAT-R/sa2/tree/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/graphics>
10. <https://github.com/SAT-R/sa2/tree/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/sound>
11. <https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/chao_garden/data/data.s>
12. <https://github.com/SAT-R/sa2/blob/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/src/data/sa2/recordings.c>
13. <https://github.com/SAT-R/sa2/tree/393357f7c9d46b5c10b6c41a57b80fe3b58f3c8d/libagbsyscall>

## 同分区更多条目：游戏

- [Sonic Advance 3：AI 辅助匹配单个敌人模块](https://awesomerea.org/zh/resources/sa3-marun-ai-decomp-case/index.md) · 案例
- [《星际火狐 64》：完整的 Nintendo 64 版一致性反编译](https://awesomerea.org/zh/resources/sf64-matching-decomp-case/index.md) · 案例
- [Super Mario 64 DS：带重定位核对的匹配反编译](https://awesomerea.org/zh/resources/sm64ds-decomp-case/index.md) · 案例
- [Super Mario 64：带明确比较开关的 ROM 重建](https://awesomerea.org/zh/resources/sm64-decomp-case/index.md) · 案例
- [《超级马力欧 奥德赛》：Switch 主程序的逐函数一致性反编译](https://awesomerea.org/zh/resources/odyssey-decomp-case/index.md) · 案例
- [Super Mario Sunshine（美版）：AI 辅助的一致性反编译分支](https://awesomerea.org/zh/resources/sms-english-gmse01-decomp-case/index.md) · 案例

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
