Sonic 3 A.I.R. - RetroBIOS¶
Technical notes
Sonic 3 - Angel Island Revisited by Eukaryot. The Oxygen Engine runs the decompiled game logic (lemon scripts) against the original Genesis ROM loaded at runtime; the ROM is not shipped with the engine.
ROM search order (ResourcesCache::loadRom): 1. GameAppData/<SteamRomName> 2. Last known ROM path (settings.json RomPath) 3. Configured RomPath (config.json) 4. SteamRomName in the install directory 5. Steam library .../Sega Classics/uncompressed ROMs/<SteamRomName> 6. User-picked file via native file dialog (filter *.bin) ref: Oxygen/oxygenengine/source/oxygen/resources/ResourcesCache.cpp:19-115, Oxygen/oxygenengine/source/oxygen/application/GameLoader.cpp:60-94, Oxygen/oxygenengine/source/oxygen/platform/PlatformFunctions.cpp:379-408
ROM validation (ResourcesCache::loadRomFile + checkRomContent): 1. Read file into memory. 2. applyRomModifications: XOR optional diff file, blank regions, then byte overwrites from the active RomInfo. The default S3K_Steam entry sets offset 0x2001f0 = 0x4a (patches the ROM header checksum field so the Steam dump matches the authoritative hash). 3. Size check: must equal 0x400000 (4 MiB). 4. Content check: Murmur2_64 of the full post-modification ROM must equal 0x344983ffcfeff8cb. ref: Oxygen/oxygenengine/source/oxygen/resources/ResourcesCache.cpp:152-282, Oxygen/sonic3air/source/sonic3air/ConfigurationImpl.cpp:33-47, Oxygen/sonic3air/oxygenproject.json:9-20
The engine ships four data packages (enginedata.bin, gamedata.bin, audiodata.bin, audioremaster.bin). Three are required and part of the release; audioremaster.bin is optional and downloaded on demand from https://sonic3air.org/download/audioremaster.bin when the user enables the remastered soundtrack. ref: Oxygen/sonic3air/oxygenproject.json:32-38, Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:115-118, Oxygen/sonic3air/source/sonic3air/audio/RemasteredMusicDownload.cpp:48-62
The packages are written by the game binary itself when run with -pack from Oxygen/sonic3air/ (PackageBuilder::performPacking), which the mastering scripts call before copying the results to the release image. gamedata.bin data/ without data/audio/ and data/metadata.json audiodata.bin data/audio/original/ audioremaster.bin data/audio/remastered/ enginedata.bin ../oxygenengine/data/ Each package is a flat container: "OPCK", format version 3, content version BUILD_NUMBER, then one entry per file keyed by its path relative to the base directory, in std::map order. Packing reads the data directories only; the ROM is not involved. ref: Oxygen/sonic3air/source/sonic3air/main.cpp:92-97, Oxygen/sonic3air/source/sonic3air/helper/PackageBuilder.cpp:16-63, Oxygen/oxygenengine/source/oxygen/file/FilePackage.cpp:44-151, Oxygen/oxygenengine/source/oxygen/file/FilePackage.h:28-30, Oxygen/sonic3air/source/sonic3air/version.inc:1, Oxygen/sonic3air/___internal/mastering/mastering_linux.sh:48-52
Each package is opened from the game data directory, data/ under the install directory, then from data/ under the app-data directory, where the downloader saves audioremaster.bin. Package paths below are written under sonic3-air/, which stands for either root. ref: Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651, Oxygen/oxygenengine/source/oxygen/application/Configuration.cpp:288-289
Only one RomInfo is declared (S3K_Steam). The engine does not support on-the-fly Sonic 3 + Sonic & Knuckles lock-on concatenation at run time; the user must supply the 4 MiB combined ROM (as distributed with Sega Mega Drive & Genesis Classics / Sonic Origins).
5 files | 4 required, 1 optional | 4 in repo, 1 missing Categories: 5 game data
Sonic_Knuckles_wSonic3.bin required missing game_data
- System: sonic3-air
- Size: 4.0 MB
- Validation: size
- Source:
Oxygen/sonic3air/source/sonic3air/ConfigurationImpl.cpp:39-46,Oxygen/oxygenengine/source/oxygen/resources/ResourcesCache.cpp:262-277 - Sonic 3 & Knuckles combined ROM as shipped on Steam (Sega Mega Drive and Genesis Classics / Sonic Origins). Expected size 0x400000 bytes. After the engine overwrites offset 0x2001f0 with 0x4a, Murmur2_64 of the whole buffer must equal 0x344983ffcfeff8cb (not CRC32; the hash is computed with rmx::getMurmur2_64 over mRom). The engine also accepts a user-picked .bin via the native file-selection dialog that satisfies the same post-modification check.
enginedata.bin required in repo game_data
- Path:
sonic3-air/data/enginedata.bin - System: sonic3-air
- Source:
Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:115,Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:603-617,Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651,Oxygen/sonic3air/source/sonic3air/helper/PackageBuilder.cpp:57-62 - Oxygen Engine data package, packed from Oxygen/oxygenengine/data/ (fonts, images, shaders, sprites, oxygen_icon.png). A required package that cannot be opened closes the application, unless the data is present unpacked (data/images/icon.png exists). The engine then checks for oxygen_icon.png in the engine data and stops when it is absent (EngineMain.cpp:584-593).
gamedata.bin required in repo game_data
- Path:
sonic3-air/data/gamedata.bin - System: sonic3-air
- Source:
Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:116,Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:603-617,Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651,Oxygen/sonic3air/source/sonic3air/helper/PackageBuilder.cpp:36-41 - Game data package, packed from Oxygen/sonic3air/data/ without the audio directory and metadata.json (binary tables, fonts, images, rawdata, sprites). A required package that cannot be opened closes the application, unless the data is present unpacked (data/images/icon.png exists).
audiodata.bin required in repo game_data
- Path:
sonic3-air/data/audiodata.bin - System: sonic3-air
- Source:
Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:117,Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:603-617,Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651,Oxygen/sonic3air/source/sonic3air/helper/PackageBuilder.cpp:43-48 - Audio data package, packed from Oxygen/sonic3air/data/audio/original/ (emulated soundtrack definitions and prototype SMPS tracks). A required package that cannot be opened closes the application, unless the data is present unpacked (data/images/icon.png exists).
audioremaster.bin optional in repo game_data
- Path:
sonic3-air/data/audioremaster.bin - System: sonic3-air
- Source:
Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:118,Oxygen/sonic3air/source/sonic3air/audio/RemasteredMusicDownload.cpp:45-62 - Remastered soundtrack package (131677405 bytes). Downloaded on demand from https://sonic3air.org/download/audioremaster.bin, saved as data/audioremaster.bin under the app-data directory and reloaded via EngineMain::reloadFilePackage. Absent at first launch; the engine falls back to the emulated FM soundtrack.
Generated on 2026-10-10T11:26:02Z