From a394e93dc5daba41f5fc6c0dcd3ea5f5f5c3229c Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Sun, 4 Oct 2026 15:39:55 +0200 Subject: [PATCH] feat: profile arcade and indie game engines --- emulators/abuse.yml | 62 ++++++++ emulators/bstone.yml | 217 ++++++++++++++++++++++++++ emulators/catacombgl.yml | 285 +++++++++++++++++++++++++++++++++++ emulators/cdogs.yml | 135 +++++++++++++++++ emulators/cgenius.yml | 198 ++++++++++++++++++++++++ emulators/fba2x.yml | 137 +++++++++++++++++ emulators/hcl.yml | 88 +++++++++++ emulators/hurrican.yml | 86 +++++++++++ emulators/ikemen.yml | 191 +++++++++++++++++++++++ emulators/pygame.yml | 24 +++ emulators/pyxel.yml | 36 +++++ emulators/theforceengine.yml | 99 ++++++++++++ 12 files changed, 1558 insertions(+) create mode 100644 emulators/abuse.yml create mode 100644 emulators/bstone.yml create mode 100644 emulators/catacombgl.yml create mode 100644 emulators/cdogs.yml create mode 100644 emulators/cgenius.yml create mode 100644 emulators/fba2x.yml create mode 100644 emulators/hcl.yml create mode 100644 emulators/hurrican.yml create mode 100644 emulators/ikemen.yml create mode 100644 emulators/pygame.yml create mode 100644 emulators/pyxel.yml create mode 100644 emulators/theforceengine.yml diff --git a/emulators/abuse.yml b/emulators/abuse.yml new file mode 100644 index 00000000..94f03787 --- /dev/null +++ b/emulators/abuse.yml @@ -0,0 +1,62 @@ +emulator: Abuse +type: standalone +core_classification: game_engine +source: "https://github.com/Xenoveritas/abuse" +upstream: "https://github.com/Xenoveritas/abuse" +profiled_date: "2026-10-04" +source_commit: "c855a923cd7fb27b629b4e1af78b1fcc5f263d01" +core_version: "v0.9.1" +display_name: "Abuse" +cores: [abuse] +systems: [] +verification: existence + +notes: | + Side-scrolling 1995 action game by Crack dot Com, SDL2 fork from the Xenoveritas + branch. The port ships its own game data in-tree under data/ (14 MB), including + the Lisp scripts, levels, art and freedesktop metadata; the fRaBs expansion was + removed from this fork over licensing uncertainty. + + Entry point abuse.lsp is loaded relative to the data directory. The data root + is set in src/sdlport/setup.cpp: + 1. -datadir CLI argument (setup.cpp:327-332) + 2. datadir= in abuse.cfg (setup.cpp:182) + 3. ASSETDIR compile-time constant, filled by CMakeLists.txt:45-54 — "." on + Windows, abuse.app/Contents/Resources/data on macOS, share/games/abuse on + Linux (setup.cpp:441-474) + Loader1 reads abuse.lsp via lisp (loader2.cpp:284), which chain-loads + lisp/english.lsp -> lisp/common.lsp -> lisp/startup.lsp -> ... + + Batocera's packaging (package/batocera/ports/abuse/abuse.mk) pins DASSETDIR to + /userdata/roms/abuse and splits the data into the Pacman package abuse-data + which pulls abuse.zoy.org's abuse-data-2.00.tar.gz, a 16 MB public-domain pack + that includes music/ and sfx/ (which the Xenoveritas tree omits). + + No separate BIOS or firmware. The whole game is open content. + +files: + - name: "abuse.lsp" + category: game_data + description: "Lisp entry point loaded first after setting the data directory" + required: true + bundled: true + source_ref: "src/loader2.cpp:284 (lsf default), src/netcfg.cpp:204 (lsf override)" + note: > + Shipped in the source tree under data/. Loader2 reads it via load(); the + file in turn chain-loads the rest of the Lisp data (english.lsp, + common.lsp, startup.lsp, options.lsp, input.lsp, startup). + + - name: "defaults.prp" + category: game_data + description: "Default properties for level objects" + required: true + bundled: true + source_ref: "data/abuse.lsp" + + - name: "english.lsp" + path: "lisp/english.lsp" + category: game_data + description: "Localized strings loaded first by abuse.lsp" + required: true + bundled: true + source_ref: "data/abuse.lsp:9" diff --git a/emulators/bstone.yml b/emulators/bstone.yml new file mode 100644 index 00000000..a123fa07 --- /dev/null +++ b/emulators/bstone.yml @@ -0,0 +1,217 @@ +emulator: BStone +type: standalone +core_classification: game_engine +source: "https://github.com/bibendovsky/bstone" +upstream: "https://github.com/bibendovsky/bstone" +profiled_date: "2026-10-04" +source_commit: "e65a6b40b960a409d7ea840580c2431f56fb6fd4" +core_version: "v1.3.4" +display_name: "Blake Stone (BStone)" +cores: [bstone] +systems: [blake-stone] +verification: md5 + +notes: | + Blake Stone source port by bibendovsky, covering Aliens of Gold (shareware + v1.0/v2.0/v2.1/v3.0 and registered v1.0/v2.0/v2.1/v3.0) plus Planet Strike. + + The engine identifies the installed game by SHA1-hashing every file in the + content directory against a hardcoded resource table in id_ca.cpp. + Assets::get_aog_sw_v1_0_resources, get_aog_sw_v2_0_resources, + get_aog_sw_v2_1_resources, get_aog_sw_v3_0_resources, + get_aog_full_v1_0_resources through get_aog_full_v3_0_resources, and + get_ps_resources (id_ca.cpp:1493-1687) each list one shipping variant. + has_content() in jm_free.cpp:195-220 opens every file in the chosen set and + fails the match on the first SHA1 mismatch. + + Search paths come from the command line (-aog_dir, -ps_dir), the Steam install + (bstone_steam_content_path.cpp) and the GOG install (bstone_gog_content_path.cpp) + before the current working directory. File names carry the game suffix: + .BS1 Aliens of Gold shareware + .BS6 Aliens of Gold registered + .VSI Planet Strike + + Every file in a set is required; the game refuses to start otherwise. Levels + are checked separately: a modded-levels hash saves to the player data instead + of being refused (jm_free.cpp:934-946). + + No separate BIOS. BStone requires one of the three retail/shareware data sets. + +files: + # ─── Aliens of Gold registered v3.0 (the common retail dump) ─── + - name: "AUDIOHED.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 audio header" + required: true + sha1: "e2c101f9fd4bc7e22ddbfa3f019c9303877de4e2" + source_ref: "src/bstone/src/id_ca.cpp:1657 (get_aog_full_v3_0_resources)" + + - name: "AUDIOT.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 audio data" + required: true + sha1: "b79e7afcb4e4b29e59660ec261f72ff1ab4d3a25" + source_ref: "src/bstone/src/id_ca.cpp:1658" + + - name: "EANIM.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 ending animation" + required: true + sha1: "af5af59ad7ed17517d87b3ece3c0cac23ade535b" + source_ref: "src/bstone/src/id_ca.cpp:1659" + + - name: "GANIM.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 gameplay animation" + required: true + sha1: "9b2418a1a1f34abdcf6fcd9ed3344a49912c9b5e" + source_ref: "src/bstone/src/id_ca.cpp:1660" + + - name: "IANIM.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 intro animation" + required: true + sha1: "ba1fa5b0bc34f148deffb4977a3cd1e718e91bbd" + source_ref: "src/bstone/src/id_ca.cpp:1661" + + - name: "MAPHEAD.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 map header" + required: true + sha1: "028f624e150f84ffc8336336cb0ecea0932cc22d" + source_ref: "src/bstone/src/id_ca.cpp:1662" + + - name: "MAPTEMP.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 level data" + required: true + sha1: "8b48e7eb859382a4c84948c5a62899194288e853" + source_ref: "src/bstone/src/id_ca.cpp:1663" + + - name: "SANIM.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 story animation" + required: true + sha1: "22bf818465da0f32eef9611de936cba9966b14aa" + source_ref: "src/bstone/src/id_ca.cpp:1664" + + - name: "VGADICT.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 huffman dictionary" + required: true + sha1: "60da35e506d57753f83cca5f232a76dd1cf074ba" + source_ref: "src/bstone/src/id_ca.cpp:1665" + + - name: "VGAGRAPH.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 compressed graphics" + required: true + sha1: "001037fafdff124befb5437c563d0b9c613b3c00" + source_ref: "src/bstone/src/id_ca.cpp:1666" + + - name: "VGAHEAD.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 graphics offsets" + required: true + sha1: "ff165ca5924d738853587a7e4ab1cd239e10e359" + source_ref: "src/bstone/src/id_ca.cpp:1667" + + - name: "VSWAP.BS6" + category: game_data + system: blake-stone + description: "Aliens of Gold v3.0 wall and sprite data" + required: true + sha1: "6fcc6e007b02b2e55892cfa7acfd42966ef9c9fb" + source_ref: "src/bstone/src/id_ca.cpp:1668" + + # ─── Planet Strike (only one shipping version) ─── + - name: "AUDIOHED.VSI" + category: game_data + system: blake-stone + description: "Planet Strike audio header" + required: false + sha1: "2ed9a587926b2b455f8176788f595d03f6359171" + source_ref: "src/bstone/src/id_ca.cpp:1696 (get_ps_resources)" + + - name: "AUDIOT.VSI" + category: game_data + system: blake-stone + description: "Planet Strike audio data" + required: false + sha1: "ecac8a800c5d021c8b68d170066c8859df9bd79a" + source_ref: "src/bstone/src/id_ca.cpp:1697" + + - name: "EANIM.VSI" + category: game_data + system: blake-stone + description: "Planet Strike ending animation" + required: false + sha1: "b668330e56ceb069c1b972cefddd8a3d618a14af" + source_ref: "src/bstone/src/id_ca.cpp:1698" + + - name: "IANIM.VSI" + category: game_data + system: blake-stone + description: "Planet Strike intro animation" + required: false + sha1: "ba1fa5b0bc34f148deffb4977a3cd1e718e91bbd" + source_ref: "src/bstone/src/id_ca.cpp:1699" + + - name: "MAPHEAD.VSI" + category: game_data + system: blake-stone + description: "Planet Strike map header" + required: false + sha1: "c3fb0a9b81e0240d12c952fe5b57b78c1108aa48" + source_ref: "src/bstone/src/id_ca.cpp:1700" + + - name: "MAPTEMP.VSI" + category: game_data + system: blake-stone + description: "Planet Strike level data" + required: false + sha1: "acd03031d526eeaee64072518adf6814f96e2a37" + source_ref: "src/bstone/src/id_ca.cpp:1701" + + - name: "VGADICT.VSI" + category: game_data + system: blake-stone + description: "Planet Strike huffman dictionary" + required: false + sha1: "061692d166f68d7e0b81568725439078cc728f33" + source_ref: "src/bstone/src/id_ca.cpp:1702" + + - name: "VGAGRAPH.VSI" + category: game_data + system: blake-stone + description: "Planet Strike compressed graphics" + required: false + sha1: "e619a3e6245f79888da5436df138d63204d2caba" + source_ref: "src/bstone/src/id_ca.cpp:1703" + + - name: "VGAHEAD.VSI" + category: game_data + system: blake-stone + description: "Planet Strike graphics offsets" + required: false + sha1: "ad5fed9de5d1d82145df3ff2286e4bc62cb80e2a" + source_ref: "src/bstone/src/id_ca.cpp:1704" + + - name: "VSWAP.VSI" + category: game_data + system: blake-stone + description: "Planet Strike wall and sprite data" + required: false + sha1: "4113ce83c42e69dc5cb20de79f41971a100f876e" + source_ref: "src/bstone/src/id_ca.cpp:1705" diff --git a/emulators/catacombgl.yml b/emulators/catacombgl.yml new file mode 100644 index 00000000..88794695 --- /dev/null +++ b/emulators/catacombgl.yml @@ -0,0 +1,285 @@ +emulator: CatacombGL +type: standalone +core_classification: game_engine +source: "https://github.com/ArnoAnsems/CatacombGL" +upstream: "https://github.com/ArnoAnsems/CatacombGL" +profiled_date: "2026-10-04" +source_commit: "fc0e70bf69276939d8f2b02a9dd89817263095e5" +core_version: "0.5.5" +display_name: "Catacomb 3-D (CatacombGL)" +cores: [catacombgl] +systems: [catacomb-3d, catacomb-adventure] +verification: existence + +notes: | + OpenGL source port by Arno Ansems of id Software's Catacomb Adventure series: + - Catacomb 3-D: The Descent (.C3D) + - Catacomb Abyss (.ABS) — three releases v1.12 / v1.13 / v1.24 + - Catacomb Armageddon (.ARM) + - Catacomb Apocalypse (.APC) + + The engine detects which game a search path points at by matching every + filename and byte-size against a hardcoded map in src//GameDetection + .h. GameDetectionAbyss.h, GameDetectionArmageddon.h, + GameDetectionApocalypse.h and GameDetectionCatacomb3D.h declare the + Files* std::map tables used by + src/Engine/GameDetection.cpp. + + Files are matched by exact byte size at this layer; the loaders downstream + then open each by name through src/Engine/EngineCore.cpp. Catacomb Abyss has + three distinct file sets (v1.12, v1.13, v1.24), and Catacomb 3-D has v1.00 + and v1.22. + + Each supported game sits in its own directory, picked by the user through + the game selection menu (src/Engine/GameSelection.cpp). No separate BIOS is + needed — the retail / shareware DOS data files are the only requirement. + + The Catacomb Adventure Series releases (Abyss shareware, Armageddon, + Apocalypse) were made freeware by Flat Rock Software and are distributed by + 3D Realms. Catacomb 3-D was released as shareware; the registered v1.22 data + is commercial. + +files: + # ─── Catacomb 3-D v1.22 (registered) ─── + - name: "AUDIO.C3D" + category: game_data + system: catacomb-3d + description: "Catacomb 3-D audio chunks" + required: false + size: 5062 + source_ref: "src/Catacomb3D/GameDetectionCatacomb3D.h:36 (catacomb3Dv122Files)" + + - name: "EGAGRAPH.C3D" + category: game_data + system: catacomb-3d + description: "Catacomb 3-D v1.22 EGA graphics" + required: false + size: 256899 + source_ref: "src/Catacomb3D/GameDetectionCatacomb3D.h:37" + + - name: "GAMEMAPS.C3D" + category: game_data + system: catacomb-3d + description: "Catacomb 3-D v1.22 level data" + required: false + size: 14288 + source_ref: "src/Catacomb3D/GameDetectionCatacomb3D.h:38" + + # ─── Catacomb Abyss v1.24 (final shareware) ─── + - name: "AUDIO.ABS" + category: game_data + system: catacomb-adventure + description: "Catacomb Abyss v1.24 audio" + required: false + size: 6904 + source_ref: "src/Abyss/GameDetectionAbyss.h (abyssFilesv124)" + + - name: "EGAGRAPH.ABS" + category: game_data + system: catacomb-adventure + description: "Catacomb Abyss v1.24 EGA graphics" + required: false + size: 335994 + source_ref: "src/Abyss/GameDetectionAbyss.h (abyssFilesv124)" + + - name: "GAMEMAPS.ABS" + category: game_data + system: catacomb-adventure + description: "Catacomb Abyss v1.24 level data" + required: false + size: 20433 + source_ref: "src/Abyss/GameDetectionAbyss.h (abyssFilesv124)" + + - name: "SHP01.ABS" + category: game_data + system: catacomb-adventure + description: "Catacomb Abyss shapes bank 1" + required: false + size: 1376 + source_ref: "src/Abyss/GameDetectionAbyss.h (abyssFilesv124)" + + - name: "SHP02.ABS" + category: game_data + system: catacomb-adventure + description: "Catacomb Abyss shapes bank 2" + required: false + size: 14912 + source_ref: "src/Abyss/GameDetectionAbyss.h (abyssFilesv124)" + + - name: "SHP03.ABS" + category: game_data + system: catacomb-adventure + description: "Catacomb Abyss shapes bank 3" + required: false + size: 13186 + source_ref: "src/Abyss/GameDetectionAbyss.h (abyssFilesv124)" + + - name: "SHP04.ABS" + category: game_data + system: catacomb-adventure + description: "Catacomb Abyss shapes bank 4" + required: false + size: 12648 + source_ref: "src/Abyss/GameDetectionAbyss.h (abyssFilesv124)" + + - name: "SHP05.ABS" + category: game_data + system: catacomb-adventure + description: "Catacomb Abyss shapes bank 5" + required: false + size: 724 + source_ref: "src/Abyss/GameDetectionAbyss.h (abyssFilesv124)" + + - name: "SHP06.ABS" + category: game_data + system: catacomb-adventure + description: "Catacomb Abyss shapes bank 6" + required: false + size: 9182 + source_ref: "src/Abyss/GameDetectionAbyss.h (abyssFilesv124)" + + # ─── Catacomb Armageddon ─── + - name: "AUDIO.ARM" + category: game_data + system: catacomb-adventure + description: "Catacomb Armageddon audio" + required: false + size: 7104 + source_ref: "src/Armageddon/GameDetectionArmageddon.h (armageddonFiles)" + + - name: "EGAGRAPH.ARM" + category: game_data + system: catacomb-adventure + description: "Catacomb Armageddon EGA graphics" + required: false + size: 355832 + source_ref: "src/Armageddon/GameDetectionArmageddon.h (armageddonFiles)" + + - name: "GAMEMAPS.ARM" + category: game_data + system: catacomb-adventure + description: "Catacomb Armageddon level data" + required: false + size: 17653 + source_ref: "src/Armageddon/GameDetectionArmageddon.h (armageddonFiles)" + + - name: "SHP1.ARM" + category: game_data + system: catacomb-adventure + description: "Catacomb Armageddon shapes bank 1" + required: false + size: 1376 + source_ref: "src/Armageddon/GameDetectionArmageddon.h (armageddonFiles)" + + - name: "SHP2.ARM" + category: game_data + system: catacomb-adventure + description: "Catacomb Armageddon shapes bank 2" + required: false + size: 3991 + source_ref: "src/Armageddon/GameDetectionArmageddon.h (armageddonFiles)" + + - name: "SHP3.ARM" + category: game_data + system: catacomb-adventure + description: "Catacomb Armageddon shapes bank 3" + required: false + size: 15036 + source_ref: "src/Armageddon/GameDetectionArmageddon.h (armageddonFiles)" + + - name: "SHP4.ARM" + category: game_data + system: catacomb-adventure + description: "Catacomb Armageddon shapes bank 4" + required: false + size: 15568 + source_ref: "src/Armageddon/GameDetectionArmageddon.h (armageddonFiles)" + + - name: "SHP5.ARM" + category: game_data + system: catacomb-adventure + description: "Catacomb Armageddon shapes bank 5" + required: false + size: 13234 + source_ref: "src/Armageddon/GameDetectionArmageddon.h (armageddonFiles)" + + - name: "SHP6.ARM" + category: game_data + system: catacomb-adventure + description: "Catacomb Armageddon shapes bank 6" + required: false + size: 10861 + source_ref: "src/Armageddon/GameDetectionArmageddon.h (armageddonFiles)" + + # ─── Catacomb Apocalypse ─── + - name: "AUDIO.APC" + category: game_data + system: catacomb-adventure + description: "Catacomb Apocalypse audio" + required: false + size: 7366 + source_ref: "src/Apocalypse/GameDetectionApocalypse.h (apocalypseFiles)" + + - name: "EGAGRAPH.APC" + category: game_data + system: catacomb-adventure + description: "Catacomb Apocalypse EGA graphics" + required: false + size: 382078 + source_ref: "src/Apocalypse/GameDetectionApocalypse.h (apocalypseFiles)" + + - name: "GAMEMAPS.APC" + category: game_data + system: catacomb-adventure + description: "Catacomb Apocalypse level data" + required: false + size: 18855 + source_ref: "src/Apocalypse/GameDetectionApocalypse.h (apocalypseFiles)" + + - name: "SHP1.APC" + category: game_data + system: catacomb-adventure + description: "Catacomb Apocalypse shapes bank 1" + required: false + size: 1376 + source_ref: "src/Apocalypse/GameDetectionApocalypse.h (apocalypseFiles)" + + - name: "SHP2.APC" + category: game_data + system: catacomb-adventure + description: "Catacomb Apocalypse shapes bank 2" + required: false + size: 6329 + source_ref: "src/Apocalypse/GameDetectionApocalypse.h (apocalypseFiles)" + + - name: "SHP3.APC" + category: game_data + system: catacomb-adventure + description: "Catacomb Apocalypse shapes bank 3" + required: false + size: 13187 + source_ref: "src/Apocalypse/GameDetectionApocalypse.h (apocalypseFiles)" + + - name: "SHP4.APC" + category: game_data + system: catacomb-adventure + description: "Catacomb Apocalypse shapes bank 4" + required: false + size: 13592 + source_ref: "src/Apocalypse/GameDetectionApocalypse.h (apocalypseFiles)" + + - name: "SHP5.APC" + category: game_data + system: catacomb-adventure + description: "Catacomb Apocalypse shapes bank 5" + required: false + size: 12698 + source_ref: "src/Apocalypse/GameDetectionApocalypse.h (apocalypseFiles)" + + - name: "SHP6.APC" + category: game_data + system: catacomb-adventure + description: "Catacomb Apocalypse shapes bank 6" + required: false + size: 11131 + source_ref: "src/Apocalypse/GameDetectionApocalypse.h (apocalypseFiles)" diff --git a/emulators/cdogs.yml b/emulators/cdogs.yml new file mode 100644 index 00000000..783278fb --- /dev/null +++ b/emulators/cdogs.yml @@ -0,0 +1,135 @@ +emulator: C-Dogs SDL +type: standalone +core_classification: game_engine +source: "https://github.com/cxong/cdogs-sdl" +upstream: "https://github.com/cxong/cdogs-sdl" +profiled_date: "2026-10-04" +source_commit: "57782a74ae245d868487094d201d0e56e94a9390" +core_version: "2.4.0" +display_name: "C-Dogs" +cores: [cdogs, cdogs-sdl] +systems: [] +verification: existence + +notes: | + Top-down shooter engine, open-source remake of the DOS C-Dogs by Ronny Wester. + Ships every asset it needs in-tree: data/, graphics/, missions/, music/, + sounds/, dogfights/, doc/, wiki/ (about 100 MB). + + The data root is baked into the binary via -DCDOGS_DATA_DIR (CMakeLists.txt + option). Batocera sets it to /userdata/roms/cdogs/; the Linux source default + is cdogs-data. GetDataFilePath() in src/cdogs/utils.c:392 either returns an + absolute override as-is, or joins the current working directory with + CDOGS_DATA_DIR plus the requested relative path. + + Top-level sub-trees the game pulls files from (every path is relative to + CDOGS_DATA_DIR, resolved through GetDataFilePath): + data/ — ammo.json, bullets.json, guns.json, pickups.json, + map_objects.json, character_classes.json, particles.json, + gamecontrollerdb.txt, prefixes.txt (configuration data) + graphics/ — sprites, font, icons; grafx.c:92 (cdogs_icon.bmp), + grafx.c:156 (font.png + font.json) + missions/ — single-player campaigns, mission packs (JSON) + music/ — menu, briefing, game, end, lose, victory tracks + (music.c:45-50 LoadMusic calls) + sounds/ — sfx wavs + dogfights/ — deathmatch arenas + + All open-source content (GPL-2.0). No separate BIOS or retail data required. + +files: + - name: "ammo.json" + path: "data/ammo.json" + category: game_data + description: "Ammo type definitions" + required: true + bundled: true + source_ref: "src/cdogs/ammo.c (AmmoLoadJSON reads data/ammo.json)" + + - name: "bullets.json" + path: "data/bullets.json" + category: game_data + description: "Bullet behaviour definitions" + required: true + bundled: true + source_ref: "src/cdogs/weapon_class.c (BulletsLoadJSON)" + + - name: "guns.json" + path: "data/guns.json" + category: game_data + description: "Weapon definitions" + required: true + bundled: true + source_ref: "src/cdogs/weapon_class.c" + + - name: "character_classes.json" + path: "data/character_classes.json" + category: game_data + description: "Character class definitions" + required: true + bundled: true + source_ref: "src/cdogs/character_class.c" + + - name: "map_objects.json" + path: "data/map_objects.json" + category: game_data + description: "Interactive map object definitions" + required: true + bundled: true + source_ref: "src/cdogs/map_object.c" + + - name: "particles.json" + path: "data/particles.json" + category: game_data + description: "Particle effect definitions" + required: true + bundled: true + source_ref: "src/cdogs/particle.c" + + - name: "pickups.json" + path: "data/pickups.json" + category: game_data + description: "Pickup item definitions" + required: true + bundled: true + source_ref: "src/cdogs/pickup_class.c" + + - name: "prefixes.txt" + path: "data/prefixes.txt" + category: game_data + description: "Random name generation prefixes" + required: true + bundled: true + source_ref: "src/cdogs/character.c" + + - name: "gamecontrollerdb.txt" + path: "data/gamecontrollerdb.txt" + category: game_data + description: "SDL gamecontroller mapping database" + required: false + bundled: true + source_ref: "src/cdogs/joystick.c:43" + + - name: "font.png" + path: "graphics/font.png" + category: game_data + description: "Main bitmap font" + required: true + bundled: true + source_ref: "src/cdogs/grafx.c:156 (FontLoadFromJSON)" + + - name: "font.json" + path: "graphics/font.json" + category: game_data + description: "Main bitmap font layout" + required: true + bundled: true + source_ref: "src/cdogs/grafx.c:156" + + - name: "cdogs_icon.bmp" + path: "graphics/cdogs_icon.bmp" + category: game_data + description: "Window icon" + required: false + bundled: true + source_ref: "src/cdogs/grafx.c:92" diff --git a/emulators/cgenius.yml b/emulators/cgenius.yml new file mode 100644 index 00000000..381913cb --- /dev/null +++ b/emulators/cgenius.yml @@ -0,0 +1,198 @@ +emulator: Commander Genius +type: standalone +core_classification: game_engine +source: "https://gitlab.com/Dringgstein/Commander-Genius" +upstream: "https://gitlab.com/Dringgstein/Commander-Genius" +profiled_date: "2026-10-04" +source_commit: "bee4fcbd235b9d3d804a50cc6ecaccbbe89490f7" +core_version: "v3.6.3" +display_name: "Commander Genius" +cores: [cgenius] +systems: [commander-keen] +verification: existence + +notes: | + Open-source reimplementation of the Commander Keen engines (Vorticon, Galaxy, + Dreams) and the Cosmo engine, by Gerstrong. Needs the original Commander Keen + data files from the user; the engine itself ships with a 876 KB vfsroot (UI + art, fonts, sounds) that is not a BIOS and is bundled with the binary. + + For each supported game, Commander Genius expects a flat directory under its + "games/" tree containing the original DOS data files. KeenFiles::setupFilenames + (src/fileio/KeenFiles.h:36-57) names them by episode number: + + Vorticon trilogy (episodes 1-3, Keen 1/2/3) + egagraph.ck{N}, egahead.ck{N}, egadict.ck{N}, + audio.ck{N}, audiohed.ck{N}, audiodct.ck{N}, + gamemaps.ck{N}, maphead.ck{N} + Galaxy trilogy (episodes 4-6, Keen 4/5/6) + same naming, {N} = 4..6 + Keen Dreams (episode 7, "KDREAMS") + KDREAMSDICT.EGA, KDREAMS.AUD, AUDIODCT.KDR, AUDIOHHD.KDR, plus KDREAMS.EXE + (CExeFile.cpp:190-195 reads kdreams.exe to extract the Dreams tiles) + + Episode 1-6 shareware and demo files are freely redistributable under the + Apogee/3D Realms terms; the registered Keen 4-6 and Keen Dreams data remain + commercial. CPatcher.cpp:129-140 lets a patch file override the default names + so GOG/Steam variants work in-place. + + cosmos engine (added as a git submodule by the build) looks for Cosmo's + Cosmic Adventures data (COSMOx.STN, VOLUMES.STN, etc.) using the same + directory-per-game layout; those files are not profiled here because the + cosmos sub-engine is a separate upstream (Dringgstein/cosmos, pinned to + 8497b5696c92b13ede4f5ad01dfb577b208404cb by cgenius.mk). + + Game directories are searched under the user's roms root. The engine then + loads from vfsroot/global/ at startup — fonts, trophy UI, generic sounds — + which is bundled with the install, not with the Keen data. + +files: + # ─── Keen 1: Marooned on Mars (shareware, freely distributable) ─── + - name: "egahead.ck1" + category: game_data + system: commander-keen + description: "Keen 1 EGA graphics header" + required: false + source_ref: "src/fileio/KeenFiles.h:42 (egaheadFilename = egahead.ckN)" + + - name: "egagraph.ck1" + category: game_data + system: commander-keen + description: "Keen 1 EGA graphics data" + required: false + source_ref: "src/fileio/KeenFiles.h:41" + + - name: "egadict.ck1" + category: game_data + system: commander-keen + description: "Keen 1 EGA huffman dictionary" + required: false + source_ref: "src/fileio/KeenFiles.h:43" + + - name: "audio.ck1" + category: game_data + system: commander-keen + description: "Keen 1 audio data" + required: false + source_ref: "src/fileio/KeenFiles.h:44" + + - name: "audiohed.ck1" + category: game_data + system: commander-keen + description: "Keen 1 audio header" + required: false + source_ref: "src/fileio/KeenFiles.h:45" + + - name: "audiodct.ck1" + category: game_data + system: commander-keen + description: "Keen 1 audio dictionary" + required: false + source_ref: "src/fileio/KeenFiles.h:46" + + - name: "gamemaps.ck1" + category: game_data + system: commander-keen + description: "Keen 1 level data" + required: false + source_ref: "src/fileio/KeenFiles.h:47" + + - name: "maphead.ck1" + category: game_data + system: commander-keen + description: "Keen 1 level header" + required: false + source_ref: "src/fileio/KeenFiles.h:48" + + # ─── Keen 4: Secret of the Oracle (full version, Galaxy episode 1) ─── + - name: "egahead.ck4" + category: game_data + system: commander-keen + description: "Keen 4 EGA graphics header" + required: false + source_ref: "src/fileio/KeenFiles.h:42" + + - name: "egagraph.ck4" + category: game_data + system: commander-keen + description: "Keen 4 EGA graphics data" + required: false + source_ref: "src/fileio/KeenFiles.h:41" + + - name: "egadict.ck4" + category: game_data + system: commander-keen + description: "Keen 4 EGA huffman dictionary" + required: false + source_ref: "src/fileio/KeenFiles.h:43" + + - name: "audio.ck4" + category: game_data + system: commander-keen + description: "Keen 4 audio data" + required: false + source_ref: "src/fileio/KeenFiles.h:44" + + - name: "audiohed.ck4" + category: game_data + system: commander-keen + description: "Keen 4 audio header" + required: false + source_ref: "src/fileio/KeenFiles.h:45" + + - name: "audiodct.ck4" + category: game_data + system: commander-keen + description: "Keen 4 audio dictionary" + required: false + source_ref: "src/fileio/KeenFiles.h:46" + + - name: "gamemaps.ck4" + category: game_data + system: commander-keen + description: "Keen 4 level data" + required: false + source_ref: "src/fileio/KeenFiles.h:47" + + - name: "maphead.ck4" + category: game_data + system: commander-keen + description: "Keen 4 level header" + required: false + source_ref: "src/fileio/KeenFiles.h:48" + + # ─── Keen Dreams (episode 7) ─── + - name: "KDREAMS.EXE" + category: game_data + system: commander-keen + description: "Keen Dreams executable (CExeFile reads embedded tiles)" + required: false + source_ref: "src/fileio/CExeFile.cpp:190-195" + + - name: "KDREAMSDICT.EGA" + category: game_data + system: commander-keen + description: "Keen Dreams EGA huffman dictionary" + required: false + source_ref: "src/fileio/KeenFiles.h:52" + + - name: "KDREAMS.AUD" + category: game_data + system: commander-keen + description: "Keen Dreams audio data" + required: false + source_ref: "src/fileio/KeenFiles.h:53" + + - name: "AUDIODCT.KDR" + category: game_data + system: commander-keen + description: "Keen Dreams audio dictionary" + required: false + source_ref: "src/fileio/KeenFiles.h:54" + + - name: "AUDIOHHD.KDR" + category: game_data + system: commander-keen + description: "Keen Dreams audio header" + required: false + source_ref: "src/fileio/KeenFiles.h:55" diff --git a/emulators/fba2x.yml b/emulators/fba2x.yml new file mode 100644 index 00000000..7fda8878 --- /dev/null +++ b/emulators/fba2x.yml @@ -0,0 +1,137 @@ +emulator: piFBA (fba2x) +type: standalone +core_classification: frozen_snapshot +source: "https://github.com/recalbox/pifba" +upstream: "https://github.com/finalburn/fbalpha-fork" +profiled_date: "2026-10-04" +source_commit: "419faa7c3967560f6fa149f2f78b5aedca5b123a" +core_version: "0.2.97.x" +display_name: "Arcade (piFBA / fba2x)" +cores: [fba2x, pifba] +systems: + - arcade + - snk-neogeo-mvs + - snk-neogeo-aes + - capcom-cps1 + - capcom-cps2 + - capcom-cps3 + - igs-pgm +verification: md5 + +archive_prefix: fbneo + +notes: | + Recalbox's standalone ARM port of Final Burn Alpha, lineage pifba (originally + by Franxis / Oopsware for the GP2X, modernised to SDL2 by Recalbox). The + binary is installed as fba2x and runs with a ZIP path on the command line + (rpi/main.cpp:187 — "Usage: fba2x .zip"). + + BIOS and ROM archives are resolved relative to szAppRomPath, hardcoded to + "roms/" in rpi/bzip.cpp:4 and overridden only through the rom path argument. + BzipOpen (rpi/bzip.cpp:355-394) iterates BurnDrvGetZipName(z) for every + BIOS/parent slot and opens "" directly — no fallback + directory walking. + + Shared BIOS ROM sets flagged BDF_BOARDROM in the driver source: + - neogeo (burn/neogeo/d_neogeo.cpp) — SNK Neo Geo system BIOS + - pgm (burn/pgm/d_pgm.cpp) — IGS PGM board BIOS + + CPS1 and CPS2 titles embed their program/encryption ROMs directly in each + game archive — no CPS board BIOS zip. CPS3 (burn/cps3/d_cps3.cpp) carries + the SH-2 BIOS as a BRF_BIOS member of each game's archive (red-earth, + jojo, sfiii, etc.), so there is no shared cps3.zip here either. + + pifba is a FROZEN snapshot of Final Burn Alpha 0.2.97.x with ARM-specific + speedhacks (NEOGEO_HACKS, OOPSWARE_FIX, USE_SPEEDHACKS) and a reduced driver + set compared with upstream FBA / FBNeo: 32 BIOS entries in d_neogeo.cpp vs + ~45 in modern FBNeo, no newer Neo Geo UniBios revisions (uni-bios.10 through + uni-bios.13 are commented out), no Hyper Street Fighter 2 refresh, and no + SNK Hyper NeoGeo 64. Keep this separate from fbalpha2012 (libretro port of + the same base) because it does not share binaries or load behaviour. + +files: + # ─── Neo Geo system BIOS (archive: neogeo.zip) ─── + - name: "neogeo.zip" + category: bios_zip + system: snk-neogeo-mvs + description: "SNK Neo Geo system BIOS ROM set" + required: true + archive: neogeo + source_ref: "burn/neogeo/d_neogeo.cpp:923 (BurnDrvneogeo, BDF_BOARDROM)" + contents: + - name: "vs-bios.rom" + size: 131072 + crc32: "f0e8f27d" + - name: "usa_2slt.bin" + size: 131072 + crc32: "e72943de" + - name: "asia-s3.rom" + size: 131072 + crc32: "91b64be3" + - name: "sp1.jipan.1024" + size: 131072 + crc32: "9fb0abe4" + - name: "neo-po.bin" + size: 131072 + crc32: "16d0c132" + - name: "neo-epo.bin" + size: 131072 + crc32: "d27a71f1" + - name: "neodebug.bin" + size: 131072 + crc32: "698ebb7d" + - name: "sp-s2.sp1" + size: 131072 + crc32: "9036d879" + - name: "uni-bios.rom" + size: 131072 + crc32: "2d50996a" + - name: "sp-e.sp1" + size: 131072 + crc32: "2723a5b5" + - name: "sp-j2.rom" + size: 131072 + crc32: "acede59c" + - name: "sp-s.sp1" + size: 131072 + crc32: "c7f2fa45" + - name: "sm1.sm1" + size: 131072 + crc32: "97cf998b" + - name: "sfix.sfx" + size: 131072 + crc32: "354029fc" + - name: "000-lo.lo" + size: 65536 + crc32: "e09e253c" + - name: "236-bios.bin" + size: 131072 + crc32: "853e6b96" + - name: "268-bios.bin" + size: 524288 + crc32: "b4590283" + - name: "sp-4x.sp1" + size: 524288 + crc32: "b4590283" + - name: "271-bios.bin" + size: 524288 + crc32: "148dd727" + + # ─── PGM board BIOS (archive: pgm.zip) ─── + - name: "pgm.zip" + category: bios_zip + system: igs-pgm + description: "IGS PGM (Polygame Master) System BIOS ROM set" + required: true + archive: pgm + source_ref: "burn/pgm/d_pgm.cpp:255 (BurnDrvpgm, BDF_BOARDROM)" + contents: + - name: "pgm_p01s.rom" + size: 131072 + crc32: "e42b166e" + - name: "pgm_t01s.rom" + size: 2097152 + crc32: "1a7123a0" + - name: "pgm_m01s.rom" + size: 2097152 + crc32: "45ae7159" diff --git a/emulators/hcl.yml b/emulators/hcl.yml new file mode 100644 index 00000000..b0f63cb0 --- /dev/null +++ b/emulators/hcl.yml @@ -0,0 +1,88 @@ +emulator: Hydra Castle Labyrinth +type: standalone +core_classification: game_engine +source: "https://github.com/ptitSeb/hydracastlelabyrinth" +upstream: "https://github.com/ptitSeb/hydracastlelabyrinth" +profiled_date: "2026-10-04" +source_commit: "e31648688434a789e3056e52cdf1b9a842eeed48" +core_version: ~ +display_name: "Hydra Castle Labyrinth (hcl)" +cores: [hcl] +systems: [] +verification: existence + +notes: | + Open-source port of E. Hashimoto's 2008 Japanese freeware Metroidvania Hydra + Castle Labyrinth. ptitSeb's SDL/SDL2/SDL3 fork is used by batocera (the + package batocera/ports/hcl pins HCL_VERSION to this commit). + + The engine opens every data file from a relative "data/" prefix hard-coded + in the sources: + - qda.c:19 — strcpy(fullPath, "data/") before appending qda chunk names + - hero.c:202 — fopen("data/save.tmp", "rb") + - sdl2/audio.c:30 — strcpy(buff, "data/") before midi/wav loads + - sdl2/graphics.c, sdl3/graphics.c — fopen("data/bmp.qda", "rb") + - game.h:184 — savename macro = "data/save.tmp" + Save files are rewritten in that same relative data/ tree, so the game must + be launched from a working directory that contains data/ (batocera copies + the shipped data/ beside the binary). + + The 31 MB data/ tree is shipped in the source repository and is open content. + Nothing else is required. + +files: + - name: "bmp.qda" + path: "data/bmp.qda" + category: game_data + description: "Packed graphics (QDA archive of all bitmaps)" + required: true + bundled: true + source_ref: "src/sdl2/graphics.c:229 (fopen \"data/bmp.qda\" rb)" + + - name: "en.dat" + path: "data/en.dat" + category: game_data + description: "English localization" + required: true + bundled: true + source_ref: "src/text.c (loaded via data/ prefix)" + + - name: "jp.dat" + path: "data/jp.dat" + category: game_data + description: "Japanese localization" + required: true + bundled: true + source_ref: "src/text.c" + + - name: "map" + path: "data/map" + category: game_data + description: "Level maps directory (060 .map files)" + required: true + bundled: true + source_ref: "src/stagedata.c (loads data/map/.map)" + + - name: "obj" + path: "data/obj" + category: game_data + description: "Per-stage object definitions directory" + required: true + bundled: true + source_ref: "src/stagedata.c (loads data/obj/.dat)" + + - name: "midi" + path: "data/midi" + category: game_data + description: "Music files (.mid + .ogg companions)" + required: false + bundled: true + source_ref: "src/sdl2/audio.c:30 (data/ prefix for midi loads)" + + - name: "wav" + path: "data/wav" + category: game_data + description: "Sound effect samples" + required: false + bundled: true + source_ref: "src/sdl2/audio.c (data/wav/.wav)" diff --git a/emulators/hurrican.yml b/emulators/hurrican.yml new file mode 100644 index 00000000..b8025478 --- /dev/null +++ b/emulators/hurrican.yml @@ -0,0 +1,86 @@ +emulator: Hurrican +type: standalone +core_classification: game_engine +source: "https://github.com/HurricanGame/Hurrican" +upstream: "https://github.com/HurricanGame/Hurrican" +profiled_date: "2026-10-04" +source_commit: "0d91d1f2d40f38d21e7f41afc01369ee55649fb6" +core_version: ~ +display_name: "Hurrican" +cores: [hurrican] +systems: [] +verification: existence + +notes: | + Open-source Turrican-inspired platformer by Poke53280 / HurricanGame. The + tree ships all shipping assets under Hurrican/data/ (93 MB): textures, + levels, music, sfx, shaders, plus a bundled gamecontrollerdb.txt. + + The engine resolves two paths at startup, both set in Hurrican/src/Main.cpp + (main() at line 342): + * g_storage_ext — the data root used for every asset load. Taken from the + -data= CLI flag first (Main.cpp:349-353), then from the compile-time + USE_STORAGE_PATH macro (355-363), falling back to "." (365). + * g_save_ext / g_config_ext — the user-writable save and config directory, + from -save= CLI flag then XDG_DATA_HOME/XDG_CONFIG_HOME under UNIX + (369-389). + + Everything the game loads is under /data/: + data/textures/* — DX8Font.cpp:160, DX8Graphics.cpp:393-407 (shaders), + TextureAtlas class and loadImageSDL calls + data/shaders// — DX8Graphics.cpp:393-407 (vert/frag per renderer) + data/levels/.lev — Tileengine.cpp:324-330 + data/music/ — SoundManager Mp3/OGG loads + data/sfx/ — SoundManager LoadSound + data/gamecontrollerdb.txt (joystick remapping) + + All data is open content; no retail or BIOS files needed. + +files: + - name: "textures" + path: "data/textures" + category: game_data + description: "Game textures (sprites, backgrounds, fonts)" + required: true + bundled: true + source_ref: "src/DX8Font.cpp:160 (data/textures/ prefix on every font load)" + + - name: "levels" + path: "data/levels" + category: game_data + description: "Level files (.lev)" + required: true + bundled: true + source_ref: "src/Tileengine.cpp:324-330 (data/levels/.lev + custom lists)" + + - name: "shaders" + path: "data/shaders" + category: game_data + description: "GLSL shader sources per version subdirectory" + required: true + bundled: true + source_ref: "src/DX8Graphics.cpp:393-407 (data/shaders//*)" + + - name: "music" + path: "data/music" + category: game_data + description: "Music tracks" + required: false + bundled: true + source_ref: "src/SoundManager.cpp (data/music/ prefix for LoadMp3/LoadOgg)" + + - name: "sfx" + path: "data/sfx" + category: game_data + description: "Sound effect samples" + required: false + bundled: true + source_ref: "src/SoundManager.cpp (data/sfx/ prefix for LoadSound)" + + - name: "gamecontrollerdb.txt" + path: "data/gamecontrollerdb.txt" + category: game_data + description: "SDL gamecontroller mapping database" + required: false + bundled: true + source_ref: "src/DirectInput.cpp (data/gamecontrollerdb.txt)" diff --git a/emulators/ikemen.yml b/emulators/ikemen.yml new file mode 100644 index 00000000..d124c5ce --- /dev/null +++ b/emulators/ikemen.yml @@ -0,0 +1,191 @@ +emulator: Ikemen GO +type: standalone +core_classification: game_engine +source: "https://github.com/ikemen-engine/Ikemen-GO" +upstream: "https://github.com/ikemen-engine/Ikemen-GO" +profiled_date: "2026-10-04" +source_commit: "02a078d6bf189ff56bbcbbbc8dbfd81753692c56" +core_version: ~ +display_name: "Ikemen GO" +cores: [ikemen] +systems: [] +verification: existence + +notes: | + Open-source M.U.G.E.N.-compatible 2D fighting game engine, written in Go. + Reads the Elecbyte .def / .air / .cmd / .cns / .sff / .snd files that + commercial and community M.U.G.E.N. content ships with. + + The binary comes with the engine's own motif-neutral core data (bundled with + the install, not retail BIOS): + data/ — common definitions, stage shell, screenpack parameters + (action.zss, common.air, common.cmd, common.const, + common1.cns.zss, dizzy.zss, functions.zss, guardbreak.zss, + score.zss, system.base.def, tag.zss, training.zss) + external/ — icons, mods template, lua scripts, GLSL shaders + font/ — fallback TTF fonts (Open Sans) and 3x5 bitmap fonts + (default-3x5-bold.def/sff, default-3x5.def/sff, debug.def) + + Characters, stages, and motifs are user-supplied. system.go:2630 and + script.go:1174 enforce the convention that any character path lacking the + "chars/" prefix is rewritten to "chars/", so content drops into + chars/, stages/, data// under the install root. + + Nothing in Ikemen itself is a BIOS. The engine refuses to run with no motif, + but ships a stub select screen and the common.* lifebar config, so a user + character and stage are enough to boot. + +files: + - name: "system.base.def" + path: "data/system.base.def" + category: game_data + description: "Screenpack / motif parameter reference" + required: true + bundled: true + source_ref: "src/system.go (default screenpack parsing)" + + - name: "common.cmd" + path: "data/common.cmd" + category: game_data + description: "Common character command set (fallback for chars missing CMD)" + required: true + bundled: true + source_ref: "src/char.go (common.cmd lookup for every loaded character)" + + - name: "common.air" + path: "data/common.air" + category: game_data + description: "Common animations (fallback for chars missing AIR)" + required: true + bundled: true + source_ref: "src/char.go" + + - name: "common.const" + path: "data/common.const" + category: game_data + description: "Common constants (gravity, speeds)" + required: true + bundled: true + source_ref: "src/char.go" + + - name: "common1.cns.zss" + path: "data/common1.cns.zss" + category: game_data + description: "Common state controllers (ZSS)" + required: true + bundled: true + source_ref: "src/char.go (ZSS state handler)" + + - name: "action.zss" + path: "data/action.zss" + category: game_data + description: "Default engine action script" + required: true + bundled: true + source_ref: "src/system.go" + + - name: "functions.zss" + path: "data/functions.zss" + category: game_data + description: "Shared ZSS helper functions" + required: true + bundled: true + source_ref: "src/system.go" + + - name: "score.zss" + path: "data/score.zss" + category: game_data + description: "Score system script" + required: true + bundled: true + source_ref: "src/system.go" + + - name: "tag.zss" + path: "data/tag.zss" + category: game_data + description: "Tag-team mode script" + required: true + bundled: true + source_ref: "src/system.go" + + - name: "dizzy.zss" + path: "data/dizzy.zss" + category: game_data + description: "Dizzy/stun state script" + required: true + bundled: true + source_ref: "src/system.go" + + - name: "guardbreak.zss" + path: "data/guardbreak.zss" + category: game_data + description: "Guard-break state script" + required: true + bundled: true + source_ref: "src/system.go" + + - name: "training.zss" + path: "data/training.zss" + category: game_data + description: "Training mode script" + required: true + bundled: true + source_ref: "src/system.go" + + - name: "default-3x5.sff" + path: "font/default-3x5.sff" + category: game_data + description: "Default 3x5 bitmap font sprites" + required: true + bundled: true + source_ref: "src/font.go, data/system.base.def [Files]" + + - name: "default-3x5.def" + path: "font/default-3x5.def" + category: game_data + description: "Default 3x5 bitmap font definition" + required: true + bundled: true + source_ref: "src/font.go" + + - name: "default-3x5-bold.sff" + path: "font/default-3x5-bold.sff" + category: game_data + description: "Default 3x5 bold bitmap font sprites" + required: true + bundled: true + source_ref: "src/font.go" + + - name: "default-3x5-bold.def" + path: "font/default-3x5-bold.def" + category: game_data + description: "Default 3x5 bold bitmap font definition" + required: true + bundled: true + source_ref: "src/font.go" + + - name: "debug.def" + path: "font/debug.def" + category: game_data + description: "Debug overlay font" + required: false + bundled: true + source_ref: "src/font.go" + + - name: "chars" + category: game_data + description: "User-supplied character directory (name resolved via chars/)" + required: false + source_ref: "src/system.go:2630, src/script.go:1174 (prefix enforcement)" + note: > + Not shipped: user drops MUGEN-compatible characters under chars/. Each + character directory contains its own .def, .cmd, .cns, .air, .sff, .snd. + + - name: "stages" + category: game_data + description: "User-supplied stage directory" + required: false + source_ref: "src/resources/defaultConfig.json:112 (StartStage default)" + note: > + Not shipped: user drops MUGEN-compatible stages under stages/. Default + configuration asks for stages/stage1.def. diff --git a/emulators/pygame.yml b/emulators/pygame.yml new file mode 100644 index 00000000..b3755ec4 --- /dev/null +++ b/emulators/pygame.yml @@ -0,0 +1,24 @@ +emulator: Pygame +type: launcher +core_classification: launcher +source: "https://github.com/pygame/pygame" +upstream: "https://github.com/pygame/pygame" +profiled_date: "2026-10-04" +source_commit: "b92c0da9d1b5eba6c813138790fc1ab6cea0252c" +core_version: "2.6.1" +display_name: "Pygame" +cores: [pygame, python-pygame2] +systems: [] +verification: existence + +notes: | + Pygame is not an emulator or game engine with its own BIOS. It is the SDL2 + bindings for Python, used by batocera as a launcher that runs user-supplied + Python scripts (file.py) as the "ROM". Batocera's package + batocera/emulators/python-pygame2 pins the standard pygame/pygame 2.6.1 + wheel; nothing about pygame itself ships game data. + + The content executed by this launcher is the user's own Python file, + which plays the role of the cartridge. No file in the pack belongs here. + +files: [] diff --git a/emulators/pyxel.yml b/emulators/pyxel.yml new file mode 100644 index 00000000..4fbe1394 --- /dev/null +++ b/emulators/pyxel.yml @@ -0,0 +1,36 @@ +emulator: Pyxel +type: standalone +core_classification: game_engine +source: "https://github.com/kitao/pyxel" +upstream: "https://github.com/kitao/pyxel" +profiled_date: "2026-10-04" +source_commit: "50f9bd77780c993aca62b5b221766bde5791081d" +core_version: "v2.9.9" +display_name: "Pyxel" +cores: [pyxel] +systems: [] +verification: existence + +notes: | + Retro game engine for Python by Takashi Kitao. The engine is a Python + package with a Rust-based extension (crates/pyxel-core, built via maturin). + Pyxel programs are either .py scripts that import pyxel or self-contained + .pyxapp bundles (zip archives containing a startup script plus assets). + + There is no external BIOS, firmware, or retail data to collect. Everything + the engine needs ships inside the Python wheel: + python/pyxel/ — Python API, fonts, shader, examples + crates/pyxel-core/ — Rust engine (compiled as pyxel_extension) + crates/pyxel-platform/ — SDL2 wrapper + crates/pyxel-wrapper/ — Python ↔ Rust glue (PyO3) + + Batocera's packaging (package/batocera/emulators/python-pyxel/python-pyxel.mk) + installs the wheel into site-packages, drops the examples, and provides a + pyxel.keys evmapy layout. The content run by Pyxel is the user's .pyxapp or + .py file, which plays the role of a cartridge; those are user content, not + pack contents. + + The engine refuses nothing on startup; a bare `pyxel init` plus a user + script is enough to run. + +files: [] diff --git a/emulators/theforceengine.yml b/emulators/theforceengine.yml new file mode 100644 index 00000000..5b1211ae --- /dev/null +++ b/emulators/theforceengine.yml @@ -0,0 +1,99 @@ +emulator: The Force Engine +type: standalone +core_classification: game_engine +source: "https://github.com/luciusDXL/TheForceEngine" +upstream: "https://github.com/luciusDXL/TheForceEngine" +profiled_date: "2026-10-04" +source_commit: "cc25205cc94c36a396f6f50295772f6ec83069a2" +core_version: "v1.22.420" +display_name: "The Force Engine" +cores: [theforceengine, tfe] +systems: [dark-forces, outlaws] +verification: existence + +notes: | + Modern Jedi engine reimplementation by Lucius Dark, supporting LucasArts + Dark Forces (shipping) and Outlaws (in-progress). + + TFE itself bundles the engine data under TheForceEngine/ in the source tree, + which batocera.ports/theforceengine.mk rsyncs to + /usr/share/batocera/datainit/system/configs/theforceengine/ on install: + Captions/ Documentation/ ExternalData/ Fonts/ + Mods/ Shaders/ SoundFonts/ UI_Text/ UI_Images/ + + The user is expected to supply the retail game data. Dark Forces is probed + by checking for DARK.GOB in the configured source-data path + (TheForceEngine/main.cpp:484-485, with PATH_SOURCE_DATA from TFE_Paths). + + Dark Forces loader list (TFE_DarkForces/darkForcesMain.cpp:70-83): + c_gobFileNames[] = DARK.GOB, SOUNDS.GOB, TEXTURES.GOB, SPRITES.GOB + c_optionalGobFileNames[] = enhanced.gob + The DOS retail Dark Forces floppy and CD both ship DARK.GOB, SOUNDS.GOB, + TEXTURES.GOB, SPRITES.GOB; enhanced.gob is the TFE-only HD asset pack. + + Dark Forces official patch v1.22 (df_patch4) is pulled by the build script as + df_patch4.zip from df-21.net and dropped under Mods/, so the engine applies + the retail v1.22 patches on top of any user retail install (THEFORCEENGINE_ + PATCH_SOURCE in the batocera mk). The patch itself is bundled with the + emulator, not with the retail data. + + Outlaws loader (TFE_Outlaws/outlawsMain.cpp) looks for the Outlaws retail + data in a separate configured directory. The level/sound/texture GOBs it + needs are OL.GOB (Outlaws main .gob) and the game's .LAB packages. + +files: + - name: "DARK.GOB" + category: game_data + system: dark-forces + description: "Dark Forces main data archive (levels, briefings, scripts)" + required: true + source_ref: "TheForceEngine/TFE_DarkForces/darkForcesMain.cpp:74 (c_gobFileNames[0]), main.cpp:484-485 (install detection)" + + - name: "SOUNDS.GOB" + category: game_data + system: dark-forces + description: "Dark Forces audio archive" + required: true + source_ref: "TheForceEngine/TFE_DarkForces/darkForcesMain.cpp:75 (c_gobFileNames[1])" + + - name: "TEXTURES.GOB" + category: game_data + system: dark-forces + description: "Dark Forces texture archive" + required: true + source_ref: "TheForceEngine/TFE_DarkForces/darkForcesMain.cpp:76 (c_gobFileNames[2])" + + - name: "SPRITES.GOB" + category: game_data + system: dark-forces + description: "Dark Forces sprite archive" + required: true + source_ref: "TheForceEngine/TFE_DarkForces/darkForcesMain.cpp:77 (c_gobFileNames[3])" + + - name: "enhanced.gob" + category: game_data + system: dark-forces + description: "Optional enhanced HD asset pack" + required: false + source_ref: "TheForceEngine/TFE_DarkForces/darkForcesMain.cpp (c_optionalGobFileNames)" + + - name: "OL.GOB" + category: game_data + system: outlaws + description: "Outlaws main data archive" + required: false + source_ref: "TheForceEngine/TFE_Outlaws/outlawsMain.cpp" + + - name: "OLSFX.GOB" + category: game_data + system: outlaws + description: "Outlaws sound effects archive" + required: false + source_ref: "TheForceEngine/TFE_Outlaws/outlawsMain.cpp" + + - name: "OLMUSIC.GOB" + category: game_data + system: outlaws + description: "Outlaws music archive" + required: false + source_ref: "TheForceEngine/TFE_Outlaws/outlawsMain.cpp"