Star on GitHubStar1.1k stars

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.

Targets
Game
Category
Independent reconstruction cases
Relationship
Independent reconstruction project
Sources reviewed

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.
  • 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.

About this entry

The description was reviewed against primary sources.

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 318 entries in GamesGames case studies (239)

↑↓ move↵ open⌘↵ new tab