Case study

Sonic Advance 1 & 2: a matching GBA decompilation with widescreen ports

Reconstructs Sonic Advance and Sonic Advance 2 for the Game Boy Advance as C that rebuilds six hash-listed ROMs with SAT-R’s agbcc fork, and compiles the same code into widescreen SDL ports for Linux, macOS and Windows plus PSP and PS2 builds. README reports Sonic Advance 2 built entirely from C with about 60 functions still non-matching. Extracted graphics, music and data are committed, so the builds read no original ROM.

Requirements & limits

  • README marks the project unfinished and under active development. It lists six ROM targets with SHA-1 values: Sonic Advance (Europe) and Sonic Advance 2 (USA, Europe, Japan, Japanese Virtual Console and a 2002-10-25 USA beta). README reports that SA2 builds 100% from C with about 60 non-matching functions pulled in from asm/non_matching, which at the reviewed commit holds 64 SA2, 99 SA1, 17 shared and 8 engine files, and that over 600 SA2 functions are unnamed. The Tiny Chao Garden and Collect Rings multiboot sub-games are built for matching and only partly decompiled.
  • The documented builds read no original ROM. The tree commits over 12,000 PNG sprite frames and tiles, 474 MIDI songs, tilemaps and other raw data, including a 191 KB data file included piecewise into the Tiny Chao Garden multiboot ROM. Port CI jobs still download a base ROM from private storage, which the Makefile does not reference.
  • INSTALL.md targets Linux (with WSL for Windows users) and macOS: ARM GCC and binutils, libpng, SDL2 and MinGW-w64, plus mkisofs or cdrtools for PS2. Matching GBA builds need SAT-R’s agbcc fork built and installed into the tree. Ports build with make sdl (Linux/macOS), sdl_win32 (Windows), sdl_psp (PSPDEV) and ps2 (PS2DEV) at a 426×240 widescreen resolution; README marks the Win32 OpenGL target not functional, and no GitHub release is published.
  • On the GBA platform, make runs a SHA-1 check of the built ROM against its listed hash. CI checks formatting, then builds and hash-checks SA2 USA, SA1 Europe and the four other SA2 variants; it also builds SDL, Win32, PSP and PS2 port targets for both games on Ubuntu and macOS, and replays a committed any% speedrun input recording through a headless SDL build. Matching applies to the GBA ROMs, not to the widescreen ports, and this collection built nothing.
  • The repository has no license file and GitHub detects none. The extracted graphics, music and data, and the Nintendo SDK libraries rebuilt in libagbsyscall, m4a and agb_flash, keep their rights holders’ terms. README sets a strict no-LLM/no-AI policy for issues and pull requests; the reviewed sources establish no AI or REA use, and no runtime reproduction is claimed.

About this entry

Type
Case study
Category
Independent reconstruction cases
Relationship
Independent reconstruction project
Targets
Game

Sources reviewed

The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.

Report an outdated entry Suggest a translation fix

Primary sources

  1. README.md GitHub · SAT-R/sa2 · Revision 393357f
  2. INSTALL.md GitHub · SAT-R/sa2 · Revision 393357f
  3. Makefile GitHub · SAT-R/sa2 · Revision 393357f
  4. config.mk GitHub · SAT-R/sa2 · Revision 393357f
  5. sa2.sha1 GitHub · SAT-R/sa2 · Revision 393357f
  6. sa1.sha1 GitHub · SAT-R/sa2 · Revision 393357f
  7. .github/workflows/build.yml GitHub · SAT-R/sa2 · Revision 393357f
  8. asm/non_matching GitHub · SAT-R/sa2 · Revision 393357f
  9. graphics GitHub · SAT-R/sa2 · Revision 393357f
  10. sound GitHub · SAT-R/sa2 · Revision 393357f
  11. chao_garden/data/data.s GitHub · SAT-R/sa2 · Revision 393357f
  12. src/data/sa2/recordings.c GitHub · SAT-R/sa2 · Revision 393357f
  13. libagbsyscall GitHub · SAT-R/sa2 · Revision 393357f

More in Games

All 231 entries in GamesGames case studies (189)