Babel Recomp

A native PC and console port of Illusion of Gaia built on a static-recompilation framework, with languages, an MSU-1 soundtrack, HD scaling, New Game+, RetroAchievements and more.

README

Babel Recomp — Illusion of Gaia

A native PC and console port of Illusion of Gaia (SNES, USA) built on a static-recompilation framework, with languages, an MSU-1 soundtrack, HD scaling, New Game+, RetroAchievements and more.

Leer en castellano

Support me on Ko-fi

No game data is included. This repository and its releases contain no ROM, no graphics, no music and no code generated from the game. You need your own legally obtained copy of the game; everything is read from it when you play.

PlatformPackageStatus
Linux x86-64.zipDeveloped and tested here
Windows x86-64.zipBuilds; not yet tested on Windows
Nintendo Switch.nroTested on hardware, start to finish
Android arm64.apkBuilds; not yet tested on a device
macOS (Apple Silicon).zipBuilt by CI; untested
Nintendo 3DS / 2DS.cia, .3dsxRuns in Azahar; not yet tested on hardware; New 3DS recommended
PlayStation Vita.vpkRuns in Vita3K; not yet tested on hardware

Thanks

This port stands on the work of many people. Thank you all.

  • snesrecomp — the SNES static-recompilation framework this port is built on, by Matthew Stanley and the R.A.I.D. community; and its launcher, recomp-ui.
  • GaiaLabs by Azarem — the Illusion of Gaia ROM-hacking toolkit, disassembly and database: symbols, text format, and the reference patches behind the run button, New Game+, music transitions and more. This port would not exist without these tools.
  • Aleks (ALEKS Ultimate NX) — for the dual-screen companion (the Dual and Flip Grip layouts) and for their help throughout. Its safe boot, crash reporter and RetroAchievements storage were adapted here with permission.
  • EstebanPdN (zelda-alttp-3ds) — the port ALEKS Ultimate NX is built on.
  • Illusion of Gaia Randomizer — DontBaguMe and contributors (IoGR, iogr.app); the Apocalypse Gaia patch by a member of that community, and its playtesters.
  • MSU-1 pack authors, in particular Conn (Zeldix forum), whose track layout this port follows.
  • Emulation research and code in snesrecomp: snesrev zelda3 and smw (the SNES hardware core), LakeSnes, snes9x, bsnes, ares (Cx4), SMWDisX (IsoFrieze), recompiler-rs (perplexes), ar-recomp (DerrickGold) — see THIRD_PARTY_ATTRIBUTION.md.
  • RetroAchievements and rcheevos.
  • SDL, Dear ImGui (Omar Cornut), stb (Sean Barrett), the Lato, Noto Sans Symbols 2 and OpenMoji fonts.
  • Consoles: devkitPro (devkitA64, libnx, devkitARM, libctru), Mesa for Switch (danfromtico, NaGaa95), VitaSDK, Project_CTR (makerom) and bannertool.
  • RetroArch / libretro — the GLSL shader format and libretro.h.
  • The zelda3 ports for 3DS (ProbablyRohan) and Vita (Rinnegatamante), whose build choices informed the handheld versions.
  • Quintet / Enix, for the original Illusion of Gaia (1993). All game content belongs to its rights holders.
  • Everyone who tested builds and sent logs, screenshots and videos.

What you need

  • Illusion of Gaia (USA) ROM, unmodified, 2 MB (a 512-byte copier header is fine and ignored). The game checks it before booting:

    SHA-25632adc048fd89228a4310c03df243e83de7d436cdb2460b4cc83ade20d359b2bd
    SHA-138de0c84dd2bc3bdfc0a3d7ab0220c79b70887c3
    CRC321c3848c0
  • Optional: your own European ROMs (Illusion of Time: Spain, France, Germany) to play in Spanish, French or German.

  • Optional: an Illusion of Gaia MSU-1 pack (.pcm files) for the CD-quality soundtrack.

  • Optional: the Apocalypse Gaia .ips patch (see MODS.md).

Features

The game

  • The whole game, playable from start to finish, running natively.
  • Save files compatible with the original (.srm), plus 10 save-state slots with thumbnails, rewind and fast-forward.
  • Languages: Spanish, French and German text and font taken from your own European ROM, switchable in game. Lines that only exist in the US release are translated by hand.
  • MSU-1 soundtrack: CD-quality music from any MSU-1 pack. No ROM patch is needed; sound effects stay the game's own.
  • New Game+: at the END screen the game offers to save the file as finished. Continuing it starts again keeping Will's stats and abilities, with tougher enemies (×2 damage, ×3 from the second round).
  • Completion percentage: rooms cleared, Red Jewels collected, story end.
  • Quality of life: run button, item hotswapping (X + L/R), stacking of Red Jewels/Herbs/Crystals, equipped-item marker, hold to advance dialogue.
  • Cheats: infinite HP, DP, stats, all 50 Red Jewels (achievements off).
  • Apocalypse Gaia: the restored, cut final boss (bring your own patch).
  • Randomizer: play Illusion of Gaia Randomizer (IoGR) seeds.

Graphics

  • HD scaling: sharp pixels at any resolution, or smooth redrawn edges (xBR), up to 4K.
  • HD Mode 7: the world map and Mode 7 scenes rendered at high resolution.
  • HD packs: replacement art for tiles and sprites (1×/2×/4×).
  • RetroArch GLSL shaders: multi-pass presets, LUTs, parameters.
  • Fullscreen, FPS counter, aspect-ratio options.

Convenience

  • Launcher: ROM picker with verification, display / audio / input settings, controller remapping, and a Mods page.
  • In-game settings menu over the paused game (Esc, or ZL + R3 on a pad).
  • Companion screen (I, or ZL + L3): inventory, status, save states and settings in the game's own art, usable by touch. Dual and Flip Grip layouts show it beside the running game.
  • RetroAchievements (softcore), with offline unlocks sent later.
  • Logs and crash reports in logs/ on every platform, to attach to a bug report.
  • Touch controls on Android: an on-screen pad beside the picture, hidden while a controller is connected.
Display modes
  • Widescreen 16:9. The picture is extended to the sides with the real map (what the SNES never showed), not stretched; past the edge of a map the extra columns stay black. In the launcher's display settings choose 16:9 (Widescreen), or set Widescreen = 1 under [Graphics] in config.ini (on the 3DS and the Vita, which have no launcher). Off, the 4:3 picture is identical to the original.
  • Companion screen. I on the keyboard, ZL + L3 on a pad: the game pauses on a second screen drawn in the game's own art — your inventory on the stone pedestal (tap or press A to equip), the status page, the save states with thumbnails, and the settings. Works by touch.
  • Dual screen. Dual puts the game and the companion side by side, both live; Flip Grip and Flip Grip R stack them and turn the picture a quarter turn for a console held upright (Switch with a Flip Grip, phones, tablets). Settings menu → Companion screen.

Every mod and option is described in MODS.md.

Install and play

Download the package for your platform from the Releases page, or build it yourself (below). In every case the files you add go beside the executable:

babel-recomp(.exe / .nro)
assets/  i18n/  mods/       (come with the package)
rom.sfc                     your USA ROM (any name works if you pick it)
languages/                  your European ROMs (optional)
msu1/                       your MSU-1 pack's .pcm files (optional)
shaders/                    RetroArch GLSL shaders (optional)
Where everything goes
PlatformGame folder (ROM, languages/, msu1/, mods/, shaders/, saves/, logs/, config.ini)
Windowsthe folder you unzipped, beside babel-recomp.exe
Linuxthe folder you unzipped, beside babel-recomp
macOSthe folder you unzipped, beside babel-recomp
Switchsdmc:/switch/babel-recomp/ (shaders also from sdmc:/retroarch/shaders/shaders_glsl/)
AndroidAndroid/data/com.mr0ta.babelrecomp/files/ on the internal storage
3DSsdmc:/3ds/babel-recomp/ (DSP firmware: sdmc:/3ds/dspfirm.cdc)
Vitaux0:data/babel-recomp/ (the app itself installs as ux0:app/BABL00001)

Inside it:

PathContents
rom.sfcyour USA ROM
languages/your European ROMs, any file name
msu1/an MSU-1 pack's .pcm files
mods/unpacked mods (a folder with manifest.toml), plus the built-in catalog
shaders/RetroArch GLSL shaders (desktop, Switch, Android)
saves/save.srmthe game's battery save (compatible with the original)
saves/save0.sav …save states, with .thumb previews
logs/the debug log and crash reports
config.ini, keybinds.inisettings and controls
env.txtconsoles only, optional: diagnostic switches, one KEY=VALUE per line

On a PC, if the folder is read-only the logs go to the per-user data folder instead (%APPDATA%\babel-recomp, ~/.local/share/babel-recomp, ~/Library/Application Support/babel-recomp); the log's second line gives the path.

Windows
  1. Unzip babel-recomp-<version>-windows-x86_64.zip anywhere you can write.
  2. Run babel-recomp.exe. The launcher opens: choose your ROM, then Play. (Or put it beside the executable as rom.sfc.)

The executable is self-contained (no DLLs). SmartScreen may warn about an unsigned program: More info → Run anyway.

Linux
  1. Unzip babel-recomp-<version>-linux-x86_64.zip.
  2. ./babel-recomp and choose your ROM in the launcher, or ./babel-recomp /path/to/rom.sfc to go straight in.
macOS
  1. Unzip babel-recomp-<version>-macos-arm64.zip.
  2. The build is not signed: xattr -dr com.apple.quarantine babel-recomp-* once, then ./babel-recomp.
Nintendo Switch

Requires a Switch running custom firmware with the Homebrew Menu.

  1. Copy the switch/babel-recomp/ folder of the package to the root of the SD card, so you have sdmc:/switch/babel-recomp/babel-recomp.nro.
  2. Put your ROM there as rom.sfc (sdmc:/switch/babel-recomp/rom.sfc). Optional: languages/, msu1/.
  3. Open Babel Recomp from the Homebrew Menu. Starting the Homebrew Menu through a game (hold R while launching any title) rather than the Album gives it the full memory and is recommended.

Controls are the SNES layout on the Joy-Con / Pro Controller. ZL + R3 opens the settings, ZL + L3 the companion screen. Hold ZL + R3 while it starts for a safe boot (default video, no shader).

Android
  1. Install babel-recomp-<version>-android-arm64.apk (allow installing from unknown sources). Android 7.0 or newer, 64-bit ARM.
  2. Open it once and close it: it creates its folder.
  3. Copy your ROM as rom.sfc to Android/data/com.mr0ta.babelrecomp/files/ (with a USB cable, or with adb push rom.sfc /sdcard/Android/data/com.mr0ta.babelrecomp/files/). languages/ and msu1/ go in the same folder.
  4. Open it again. Touch controls appear beside the picture; connecting a controller (Bluetooth or USB) hides them.
Nintendo 3DS / 2DS

Requires custom firmware (Luma3DS). Every model runs it; a New 3DS / New 2DS XL is recommended, since the original models have far less CPU (and do without the MSU-1 soundtrack).

  1. Copy the 3ds/babel-recomp/ folder of the package to the root of the SD card, and put your ROM there as rom.sfc (sdmc:/3ds/babel-recomp/rom.sfc). Optional: languages/, msu1/.
  2. Install babel-recomp.cia with FBI (it appears on the HOME Menu), or run babel-recomp.3dsx from the Homebrew Launcher.
  3. Sound needs the console's DSP firmware, as for all 3DS homebrew: run DSP1 once (it writes sdmc:/3ds/dspfirm.cdc).

The game is shown on the top screen, unscaled. Frames are skipped when the console cannot draw them all, so the game keeps its speed.

PlayStation Vita

Requires HENkaku/Ensō with VitaShell.

  1. Install babel-recomp-<version>-vita.vpk with VitaShell.
  2. Put your ROM as ux0:data/babel-recomp/rom.sfc (the folder is created on the first launch; languages/ and msu1/ go there too).
Performance on handhelds

Every version emulates the SNES hardware exactly (the same frames and the same sound as on a PC, verified frame by frame). The 3DS and the Vita have far less CPU than a phone or a Switch: they skip drawing frames when needed so the game keeps its speed, and use the fastest settings automatically. Measured in an emulator, a New 3DS should run the game at about three quarters of full speed; reports from real hardware are welcome (enable the FPS counter in the settings menu).

Controls

The SNES layout, by position on every pad: on Nintendo consoles the labels match (A right, B bottom, X top, Y left); on other pads the button in that position plays that role. Everything can be remapped in the launcher.

SNESKeyboardNintendo (Switch, 3DS)XboxPlayStation / Vita
D-padArrowsD-pad / left stickD-pad / left stickD-pad / left stick
AXABCircle
BZBACross
XSXYTriangle
YAYXSquare
L / RC / VL / RLB / RBL1 / R1 (Vita: L / R)
Start / SelectEnter / Right Shift+ / − (3DS: Start / Select)Menu / ViewOptions / Share (Vita: Start / Select)

Shortcuts. On a pad, hold ZL (LT, L2) as a function button — the game never uses it:

ActionKeyboardPad
Settings menuEscZL + R3
Companion screenIZL + L3
Save-state menuF11ZL + Start
Quick save / load (slot 1)Shift+F1 / F1 (slots 1-10: F1-F10)ZL + R / ZL + L
RewindF12ZL + Select
Fast forward (hold)TabZL + ZR
Performance overlay—ZL + X
Volume—ZL + Up / Down
FullscreenAlt+Enter—
Next languageCtrl+L—

Per platform.

  • Switch: Joy-Con (attached or in pairs) or a Pro Controller. The touch screen works on the companion screen and in Dual / Flip Grip.
  • Android: the on-screen pad (d-pad, A/B/X/Y, L/R, Select/Start and a ☰ button for the settings) while no controller is connected; a Bluetooth or USB controller hides it and uses the table above.
  • 3DS: the console's buttons (Circle Pad = d-pad). Tap the touch screen to open the settings menu; save states are inside it.
  • Vita: the console's buttons as in the PlayStation column. Tap the screen to open the settings menu; save states are inside it.

Build from source

You need CMake ≥ 3.20, a C11/C++17 compiler, Python 3 and Ninja (or Make). SDL3 is downloaded and built automatically when the system has none.

git clone https://github.com/mrOt4/babel-recomp.git
cd babel-recomp
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
./build/babel-recomp

The default build is interpreter-only: the game's code is read from your ROM at run time, so nothing derived from the ROM is ever compiled in, and no ROM is needed to build. (For this game it plays identically and just as fast; we compared every frame.) Developers who want the statically recompiled code can configure with -DSNESRECOMP_INTERPRETER_ONLY=OFF and generate it from their own ROM with bash tools/regen.sh --rom /path/to/rom.sfc; that output (src/gen/) must never be committed or shared.

TargetHow
Windows (cross from Linux)scripts/toolchains/setup_windows.sh, then configure with -DCMAKE_TOOLCHAIN_FILE=scripts/toolchains/windows-llvm-mingw.cmake
Androidscripts/toolchains/setup_android.sh, source ~/toolchains/android-env.sh, then cd android && ./gradlew assembleRelease
SwitchdevkitPro (switch-dev) and Mesa: scripts/toolchains/setup_switch.sh, then scripts/toolchains/stage_switch.sh for the SD-card folder
3DSscripts/toolchains/setup_3ds.sh, then configure with -DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/3DS.cmake (builds the .3dsx and the .cia)
Vitascripts/toolchains/setup_vita.sh, then configure with -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake (builds the .vpk)
Packagescripts/package_release.sh <build-dir> <platform-tag>

scripts/toolchains/README.md has the details. The GitHub Actions workflow builds Linux, Windows, macOS and Android, and publishes them when a v* tag is pushed.

Reporting a problem

Open an issue and attach the logs/ folder from beside the game (sdmc:/switch/babel-recomp/logs/ on Switch, babel-recomp.log too). Say what you were doing and which mods were on.

AI-assisted project

This project was developed with the assistance of AI (Anthropic's Claude, through Claude Code), directed, tested and reviewed by mr0ta. Bugs are ours; please report them.

License

The source code is under the PolyForm Noncommercial License 1.0.0: free to use, study, modify and share for any non-commercial purpose. The frameworks keep their own licenses (snesrecomp/LICENSE, recomp-ui/LICENSE, and the third-party notices above). None of them covers the game, which is not distributed here.

Donations through Ko-fi are voluntary and are not a sale of the game or of this software: everything here is free.

Illusion of Gaia is a trademark of its respective owners. This project is not affiliated with or endorsed by Nintendo, Square Enix or Quintet.