From 0f0d46848a999a45d6540afa9a2b666c99ebb9cd Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Sun, 4 Oct 2026 15:06:03 +0200 Subject: [PATCH] feat: alias xenianative and profile remaining sonic ports --- emulators/sonic3-air.yml | 81 ++++++++++++++++++++++++++++++++++++++++ emulators/soniccd.yml | 43 +++++++++++++++++++++ emulators/xenia.yml | 1 + 3 files changed, 125 insertions(+) create mode 100644 emulators/sonic3-air.yml create mode 100644 emulators/soniccd.yml diff --git a/emulators/sonic3-air.yml b/emulators/sonic3-air.yml new file mode 100644 index 00000000..55f46a15 --- /dev/null +++ b/emulators/sonic3-air.yml @@ -0,0 +1,81 @@ +emulator: Sonic 3 A.I.R. +type: standalone +core_classification: game_engine +source: "https://github.com/Eukaryot/sonic3air" +upstream: "https://github.com/Eukaryot/sonic3air" +source_commit: "de0fd6a7c07b399c9a612cb7cb8d61b54cb339d1" +profiled_date: "2026-10-04" +display_name: "Sonic 3 - Angel Island Revisited" +cores: [] +systems: [sonic3-air] + +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/ + 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/ + 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 built from Oxygen/sonic3air/data/ + (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 + (126 MB) 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 + + 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). + +files: + - name: "Sonic_Knuckles_wSonic3.bin" + category: game_data + system: sonic3-air + required: true + size: 4194304 + validation: [size] + source_ref: "Oxygen/sonic3air/source/sonic3air/ConfigurationImpl.cpp:39-46 (fillDefaultGameProfile), Oxygen/oxygenengine/source/oxygen/resources/ResourcesCache.cpp:262-277 (checkRomContent)" + note: | + 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. + + - name: "audioremaster.bin" + category: game_data + system: sonic3-air + required: false + source_ref: "Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:118 (mDataPackages, Required=false), Oxygen/sonic3air/source/sonic3air/audio/RemasteredMusicDownload.cpp:48-62" + note: | + Remastered soundtrack package (approx 126 MB). Downloaded on demand + from https://sonic3air.org/download/audioremaster.bin and reloaded + via EngineMain::reloadFilePackage. Absent at first launch; the + engine falls back to the emulated FM soundtrack. diff --git a/emulators/soniccd.yml b/emulators/soniccd.yml new file mode 100644 index 00000000..0fee1209 --- /dev/null +++ b/emulators/soniccd.yml @@ -0,0 +1,43 @@ +emulator: Sonic CD Decompilation +type: standalone +core_classification: game_engine +source: "https://github.com/Rubberduckycooly/Sonic-CD-11-Decompilation" +upstream: "https://github.com/Rubberduckycooly/Sonic-CD-11-Decompilation" +source_commit: "a99e16ad15f4f824c1b9f96a61b3f8576ab648e2" +profiled_date: "2026-10-04" +display_name: "Sonic CD (RSDKv3 Decomp)" +cores: [] +systems: [soniccd] + +notes: | + Retro Engine v3 decompilation of Sonic CD (2011 Christian Whitehead + mobile/Steam port). Single binary; one data pack per install. + + CheckRSDKFile only fopen()s the pack; there is no signature test. If + the file is absent the engine falls back to a loose Data/ + Bytecode/ + tree and, on first run, writes usage.txt describing the layout it + wants. + ref: RSDKv3/Reader.cpp:26-87 (CheckRSDKFile), RSDKv3/RetroEngine.cpp:280-321, + RSDKv3/RetroEngine.cpp:328-363 + + settings.ini key Dev:DataFile overrides the default "Data.rsdk". + ref: RSDKv3/Userdata.cpp:352-353,467-468, RSDKv3/RetroEngine.hpp:437 + + Bytecode detection probes two layouts in order after the pack opens: + Data/Scripts/ByteCode/GlobalCode.bin (BYTECODE_MOBILE) or GS000.bin + (BYTECODE_PC). Either lives inside Data.rsdk when the official pack + is present. + ref: RSDKv3/Reader.cpp:54-82 + +files: + - name: "Data.rsdk" + category: game_data + system: soniccd + required: true + source_ref: "RSDKv3/RetroEngine.cpp:305 (CheckRSDKFile(dest)), RSDKv3/Userdata.cpp:352" + note: | + Sonic CD assets (RSDK v3 container). Shipped with the official + Sonic CD release (Steam, iOS, Android, Sonic Origins). The engine + opens the file with fopen(); content is validated by trying to + load Data/Scripts/ByteCode/GlobalCode.bin or GS000.bin from + inside, not by hashing the pack. diff --git a/emulators/xenia.yml b/emulators/xenia.yml index c5782e6b..6c2ffdef 100644 --- a/emulators/xenia.yml +++ b/emulators/xenia.yml @@ -10,6 +10,7 @@ display_name: "Xenia Canary (Xbox 360)" cores: - xenia - xenia-canary + - xenianative systems: - microsoft-xbox-360 analysis_date: "2026-03-26"