From ae0909d2f15b4353ae02ed9834d1486cc4f6a75e Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Sun, 4 Oct 2026 15:07:54 +0200 Subject: [PATCH] feat: profile crpg and adventure game engines --- emulators/corsixth.yml | 86 ++++++++++++++ emulators/devilutionx.yml | 123 ++++++++++++++++++++ emulators/dxx-rebirth.yml | 239 ++++++++++++++++++++++++++++++++++++++ emulators/fallout1-ce.yml | 53 +++++++++ emulators/fallout2-ce.yml | 63 ++++++++++ emulators/sdlpop.yml | 49 ++++++++ emulators/uqm.yml | 117 +++++++++++++++++++ 7 files changed, 730 insertions(+) create mode 100644 emulators/corsixth.yml create mode 100644 emulators/devilutionx.yml create mode 100644 emulators/dxx-rebirth.yml create mode 100644 emulators/fallout1-ce.yml create mode 100644 emulators/fallout2-ce.yml create mode 100644 emulators/sdlpop.yml create mode 100644 emulators/uqm.yml diff --git a/emulators/corsixth.yml b/emulators/corsixth.yml new file mode 100644 index 00000000..c5bedacd --- /dev/null +++ b/emulators/corsixth.yml @@ -0,0 +1,86 @@ +emulator: corsixth +type: standalone +core_classification: game_engine +source: "https://github.com/CorsixTH/CorsixTH" +upstream: ~ +profiled_date: "2026-10-04" +source_commit: "2d4671e267cae25847432a2e7d4f814b44f91e35" +core_version: "0.70.1" +display_name: "Theme Hospital (CorsixTH)" +cores: [corsixth] +systems: [theme-hospital] +verification: existence + +notes: | + CorsixTH is a Lua + C++ reimplementation of Bullfrog's Theme Hospital + engine. It reads graphics, sprites, levels and sounds from an + untouched Theme Hospital install (full retail/GOG or the shareware + demo). + + App:checkInstallFolder() in CorsixTH/Lua/app.lua:1450 drives the + install discovery: + 1. config.theme_hospital_install (user override) is tried first + (:1453). If unset or wrong, the loader scans a list of common + paths (:1471-1489) looking for a folder that passes + App:isThemeHospitalPath, which demands three subdirectories + named data, levels and qdata (:1435-1447). + 2. Once a candidate is accepted, three sentinel files MUST exist + (:1521-1523): + DATA/VBlk-0.tab + LEVELS/Level.L1 + QDATA/SPointer.dat + Any missing file aborts init with "Invalid Theme Hospital + folder specified in config file..." (:1526). + 3. DataM/Demo.dat (:1535) marks the shareware demo install; its + presence switches a different corruption-size check on + ANIMS/WINLEVEL.SMK (243188), LEVELS/LEVEL.L1 (163948) and + DATA/BUTTON01.DAT (252811) at :1559-1561. Full installs instead + get soft size checks on ANIMS/AREA01V.SMK, WINGAME.SMK, + WINLEVEL.SMK, LOSE1.SMK and INTRO/INTRO.SM4 (:1563-1567). + 4. QData/Font00V.dat is read unconditionally (:1576) and its CRC32 + picks the charset (mik vs cp437). + + Only the four files the loader *reads unconditionally* are tracked + below. The sound/music path uses the game's XMI tracks when a + SoundFont is available (App:findSoundFont at :1589 probes + GeneralUser-GS.sf2, FluidR3_GM.sf2, FluidR3.sf3 and three Linux + system paths); the SoundFont is a user preference, not game data. + + Everything else (hundreds of SPR/TAB/DAT files, SMK movies, ADL / + XMI music) is loaded on demand from the install directory and is + not individually verified by the engine; a user who sets up the + Theme Hospital folder once has them all. + +exclusion_note: "Theme Hospital install is scanned folder-wide; the engine only hard-checks a handful of sentinel files" +files: + - name: VBlk-0.tab + path: corsixth/Data/VBlk-0.tab + system: theme-hospital + category: game_data + required: true + description: "Theme Hospital core sprite index; sentinel checked at startup" + source_ref: "CorsixTH/Lua/app.lua:1521" + + - name: Level.L1 + path: corsixth/Levels/Level.L1 + system: theme-hospital + category: game_data + required: true + description: "First Theme Hospital level file; sentinel checked at startup" + source_ref: "CorsixTH/Lua/app.lua:1522" + + - name: SPointer.dat + path: corsixth/QData/SPointer.dat + system: theme-hospital + category: game_data + required: true + description: "Sprite pointer table; sentinel checked at startup" + source_ref: "CorsixTH/Lua/app.lua:1523" + + - name: Font00V.dat + path: corsixth/QData/Font00V.dat + system: theme-hospital + category: game_data + required: true + description: "Theme Hospital font; CRC32 selects charset (mik vs cp437)" + source_ref: "CorsixTH/Lua/app.lua:1576-1584" diff --git a/emulators/devilutionx.yml b/emulators/devilutionx.yml new file mode 100644 index 00000000..6389e5d9 --- /dev/null +++ b/emulators/devilutionx.yml @@ -0,0 +1,123 @@ +emulator: devilutionx +type: standalone +core_classification: game_engine +source: "https://github.com/diasurgical/DevilutionX" +upstream: ~ +profiled_date: "2026-10-04" +source_commit: "dac104babfb6187415432f428ac2516747ffc154" +core_version: "1.6.0-dev" +display_name: "Diablo (DevilutionX)" +cores: [devilutionx] +systems: [diablo] +verification: md5 + +notes: | + DevilutionX is a reimplementation of the Diablo 1 engine built from + the leaked Diablo source. It plays the original retail Diablo and the + Hellfire expansion from their shipped MPQ archives, or the shareware + Spawn edition. The code loads MPQs from the game folder (next to the + executable) and from a few platform-specific locations (XDG data home, + macOS Application Support, etc.) via GetMPQSearchPaths(). + + Load order is defined in Source/engine/assets.cpp: + LoadCoreArchives() (:505) - devilutionx.mpq, fonts.mpq (optional) + LoadGameArchives() (:530) - diabdat.mpq or spawn.mpq (required) + hfbard.mpq, hfbarb.mpq (always probed) + LoadHellfireArchives() (:570) - hellfire.mpq + hfmonk/hfmusic/hfvoice + + diabdat.mpq is matched uppercase first ("DIABDAT.MPQ", GOG/retail CD + convention, line 538), then lowercase (line 542); if neither is found + the loader falls back to spawn.mpq (line 544). Missing BOTH triggers + the "diabdat.mpq or spawn.mpq" InsertCDDlg dialog and the game cannot + start. + + Hellfire is optional: the engine advertises Diablo even when hellfire + files are absent. If hellfire.mpq is loaded, hfmonk.mpq + hfmusic.mpq + + hfvoice.mpq must also be present (line 588) or the game aborts. + + devilutionx.mpq is a build artefact packed from the repo's assets/ + directory with the smpq tool (CMake option BUILD_ASSETS_MPQ, + CMakeLists.txt:192-204). The compiled binary expects it next to the + executable on every platform except Android, Apple and 3DS/Switch + (:509-516), where its contents are shipped loose. retrobios ships + the game engine's own MPQ as a release asset so a vanilla install + does not need the devilutionx-assets release. + + fonts.mpq is the CJK + language assets add-on from the + devilutionx-assets release; English installs do not need it. + +files: + - name: diabdat.mpq + path: devilutionx/diabdat.mpq + system: diablo + category: game_data + required: true + description: "Diablo retail or GOG MPQ (contains all game data)" + aliases: [DIABDAT.MPQ] + note: "primary game archive; GOG CD convention uses uppercase" + source_ref: "Source/engine/assets.cpp:537-542" + + - name: spawn.mpq + path: devilutionx/spawn.mpq + system: diablo + category: game_data + required: false + description: "Diablo shareware archive, used when diabdat.mpq is absent" + note: "freely redistributable shareware; triggers gbIsSpawn mode" + source_ref: "Source/engine/assets.cpp:544" + + - name: hellfire.mpq + path: devilutionx/hellfire.mpq + system: diablo + category: game_data + required: false + description: "Hellfire expansion main archive" + source_ref: "Source/engine/assets.cpp:573" + + - name: hfmonk.mpq + path: devilutionx/hfmonk.mpq + system: diablo + category: game_data + required: false + description: "Hellfire monk class assets; mandatory when hellfire.mpq is present" + source_ref: "Source/engine/assets.cpp:583" + + - name: hfmusic.mpq + path: devilutionx/hfmusic.mpq + system: diablo + category: game_data + required: false + description: "Hellfire music; mandatory when hellfire.mpq is present" + source_ref: "Source/engine/assets.cpp:584" + + - name: hfvoice.mpq + path: devilutionx/hfvoice.mpq + system: diablo + category: game_data + required: false + description: "Hellfire voices; mandatory when hellfire.mpq is present" + source_ref: "Source/engine/assets.cpp:585" + + - name: hfbard.mpq + path: devilutionx/hfbard.mpq + system: diablo + category: game_data + required: false + description: "Hellfire bard class assets (community add-on)" + source_ref: "Source/engine/assets.cpp:565" + + - name: hfbarb.mpq + path: devilutionx/hfbarb.mpq + system: diablo + category: game_data + required: false + description: "Hellfire barbarian class assets (community add-on)" + source_ref: "Source/engine/assets.cpp:566" + + - name: fonts.mpq + path: devilutionx/fonts.mpq + system: diablo + category: game_data + required: false + description: "CJK and extended-language font pack from devilutionx-assets release" + source_ref: "Source/engine/assets.cpp:517" diff --git a/emulators/dxx-rebirth.yml b/emulators/dxx-rebirth.yml new file mode 100644 index 00000000..7e825a5d --- /dev/null +++ b/emulators/dxx-rebirth.yml @@ -0,0 +1,239 @@ +emulator: dxx-rebirth +type: standalone +core_classification: game_engine +source: "https://github.com/dxx-rebirth/dxx-rebirth" +upstream: ~ +profiled_date: "2026-10-04" +source_commit: "db1996a7fd18c7bf11c9b18b881aa4f11a84f017" +core_version: "git" +display_name: "Descent 1 & 2 (DXX-Rebirth)" +cores: [dxx-rebirth, d1x-rebirth, d2x-rebirth] +systems: [descent, descent2] +verification: existence + +notes: | + DXX-Rebirth is a dual-engine source port of Descent 1 and Descent 2 + built from the Parallax-released sources. The repository builds two + executables, d1x-rebirth and d2x-rebirth, sharing the similar/ tree + guarded by DXX_BUILD_DESCENT = 1 or 2. + + Each build mounts its data via PhysFS. The game folder (defaulted to + the executable directory on Windows/macOS, DXX_SHAREPATH or + ~/.d1x-rebirth / ~/.d2x-rebirth on Unix) is searched for the HOG and + PIG files; -hogdir on the command line adds another search path. On + startup similar/main/inferno.cpp mounts descent.hog (D1) or + descent2.hog / d2demo.hog (D2) via make_PHYSFSX_ComputedPathMount at + lines 472-479. If neither hog is found the engine aborts with + UserError "Could not find a valid hog file". + + The size of the HOG picks the data edition (common/main/mission.h:58): + 6856701 / 6856183 / 7261423 bytes = PC Descent 1 retail v1.4-v1.5 / v1.0 + 4492107 / 4494862 bytes = PC Descent 1 OEM v1.4a / v1.0 + 2339773 / 2365676 bytes = PC Descent 1 shareware v1.4 / v1.0 + 7456179 / 3370339 bytes = Mac Descent 1 retail / shareware + 2292566 bytes = d2demo.hog v1.0 (D2 PC shareware) + 4292746 bytes = D2 Mac shareware + 6132957 bytes = D2 PC OEM v1.1 + 7595079 / 7107354 bytes = D2 PC full v1.1-1.2 / v1.0 + 7110007 bytes = D2 Mac full v1.1-1.2 + + For Descent 2 the engine also expects descent2.ham (binary tables) and + one of the PIG graphics families (groupa.pig / alien1.pig / alien2.pig + / fire.pig / ice.pig / water.pig for retail, d2demo.pig for shareware) + plus the sampled sound bank (descent2.s11 for 11 kHz or descent2.s22 + for 22 kHz; piggy.cpp:79). Mac shareware additionally bundles exit.ham. + d2x.hog is the Descent 2: Vertigo expansion mission, probed in the + MISSION_DIR by inferno.cpp:542 to toggle the "Vertigo Enhanced" title. + Movies (intro-h.mvl, robots-h.mvl, other-h.mvl or their -l low-res + counterparts) are optional; the game plays without them. + + Only the free PC shareware pair (desc14sw.tar.gz = descent.hog + + descent.pig; d2shar10.tar.gz = d2demo.hog/pig/ham) is redistributable; + the retail archives listed below are commercial GOG files. + +files: + # ------ Descent 1 shareware (free) ------ + - name: descent.hog + path: dxx-rebirth/d1/shareware/descent.hog + system: descent + category: game_data + required: false + size: 2339773 + validation: [size] + description: "Descent 1 PC shareware v1.4 HOG" + variant_group: d1-hog + note: "freely redistributable (icculus.org/d2x/data/desc14sw.tar.gz)" + source_ref: "similar/main/mission.cpp:80; common/main/mission.h:67" + + - name: descent.pig + path: dxx-rebirth/d1/shareware/descent.pig + system: descent + category: game_data + required: false + description: "Descent 1 PC shareware PIG (ships with desc14sw.tar.gz)" + source_ref: "common/main/fwd-piggy.h:55" + + # ------ Descent 1 retail ------ + - name: descent.hog + path: dxx-rebirth/d1/retail/descent.hog + system: descent + category: game_data + required: false + size: 6856701 + validation: [size] + description: "Descent 1 PC retail v1.5 HOG (GOG)" + variant_group: d1-hog + note: "commercial; alternative sizes 6856183 (v1.5 alt), 7261423 (v1.0), 7456179 (Mac retail)" + source_ref: "common/main/mission.h:61-64" + + - name: descent.pig + path: dxx-rebirth/d1/retail/descent.pig + system: descent + category: game_data + required: false + description: "Descent 1 PC retail PIG" + source_ref: "similar/main/piggy.cpp:69" + + # ------ Descent 2 shareware (free) ------ + - name: d2demo.hog + path: dxx-rebirth/d2/shareware/d2demo.hog + system: descent2 + category: game_data + required: false + size: 2292566 + validation: [size] + description: "Descent 2 PC shareware HOG" + variant_group: d2-hog + note: "freely redistributable (icculus.org/d2x/data/d2shar10.tar.gz)" + source_ref: "similar/main/mission.cpp:107-108; common/main/mission.h:71" + + - name: d2demo.pig + path: dxx-rebirth/d2/shareware/d2demo.pig + system: descent2 + category: game_data + required: false + description: "Descent 2 shareware PIG" + source_ref: "similar/main/piggy.cpp:73" + + - name: d2demo.ham + path: dxx-rebirth/d2/shareware/d2demo.ham + system: descent2 + category: game_data + required: false + description: "Descent 2 shareware HAM" + source_ref: "similar/main/piggy.cpp:75" + + # ------ Descent 2 retail ------ + - name: descent2.hog + path: dxx-rebirth/d2/retail/descent2.hog + system: descent2 + category: game_data + required: false + size: 7595079 + validation: [size] + description: "Descent 2 PC full v1.1-1.2 HOG (GOG)" + variant_group: d2-hog + note: "commercial; alternative sizes 7107354 (v1.0), 7110007 (Mac full), 6132957 (OEM v1.1), 4292746 (Mac shareware)" + source_ref: "common/main/mission.h:73-76" + + - name: descent2.ham + path: dxx-rebirth/d2/retail/descent2.ham + system: descent2 + category: game_data + required: false + description: "Descent 2 retail HAM (tables)" + source_ref: "similar/main/piggy.cpp:74" + + - name: groupa.pig + path: dxx-rebirth/d2/retail/groupa.pig + system: descent2 + category: game_data + required: false + description: "Descent 2 retail default PIG (loaded by piggy_init_pigfile)" + source_ref: "similar/main/piggy.cpp:72; similar/main/inferno.cpp:689" + + - name: alien1.pig + path: dxx-rebirth/d2/retail/alien1.pig + system: descent2 + category: game_data + required: false + description: "Descent 2 Alien-1 textures PIG" + source_ref: "similar/main/piggy.cpp:87" + + - name: alien2.pig + path: dxx-rebirth/d2/retail/alien2.pig + system: descent2 + category: game_data + required: false + description: "Descent 2 Alien-2 textures PIG" + source_ref: "similar/main/piggy.cpp:88" + + - name: fire.pig + path: dxx-rebirth/d2/retail/fire.pig + system: descent2 + category: game_data + required: false + description: "Descent 2 Fire textures PIG" + source_ref: "similar/main/piggy.cpp:89" + + - name: ice.pig + path: dxx-rebirth/d2/retail/ice.pig + system: descent2 + category: game_data + required: false + description: "Descent 2 Ice textures PIG" + source_ref: "similar/main/piggy.cpp:91" + + - name: water.pig + path: dxx-rebirth/d2/retail/water.pig + system: descent2 + category: game_data + required: false + description: "Descent 2 Water textures PIG" + source_ref: "similar/main/piggy.cpp:92" + + - name: descent2.s22 + path: dxx-rebirth/d2/retail/descent2.s22 + system: descent2 + category: game_data + required: false + description: "Descent 2 22 kHz digital sound bank (default for retail)" + source_ref: "similar/main/piggy.cpp:79" + + - name: descent2.s11 + path: dxx-rebirth/d2/retail/descent2.s11 + system: descent2 + category: game_data + required: false + description: "Descent 2 11 kHz digital sound bank (shareware/Mac default)" + source_ref: "similar/main/piggy.cpp:79" + + - name: d2x.hog + path: dxx-rebirth/d2/retail/missions/d2x.hog + system: descent2 + category: game_data + required: false + description: "Descent 2: Vertigo expansion mission HOG" + source_ref: "similar/main/inferno.cpp:542" + + - name: intro-h.mvl + path: dxx-rebirth/d2/retail/intro-h.mvl + system: descent2 + category: game_data + required: false + description: "Descent 2 intro cinematic (high-res)" + source_ref: "similar/main/titles.cpp:292" + + - name: robots-h.mvl + path: dxx-rebirth/d2/retail/robots-h.mvl + system: descent2 + category: game_data + required: false + description: "Descent 2 robot briefings (high-res); recommended for single-player" + + - name: other-h.mvl + path: dxx-rebirth/d2/retail/other-h.mvl + system: descent2 + category: game_data + required: false + description: "Descent 2 misc cinematics (high-res)" diff --git a/emulators/fallout1-ce.yml b/emulators/fallout1-ce.yml new file mode 100644 index 00000000..8199f920 --- /dev/null +++ b/emulators/fallout1-ce.yml @@ -0,0 +1,53 @@ +emulator: fallout1-ce +type: standalone +core_classification: game_engine +source: "https://github.com/alexbatalov/fallout1-ce" +upstream: ~ +profiled_date: "2026-10-04" +source_commit: "0609bcfd0ec40ff0571d0f57fab2821eb461dc8b" +core_version: "1.1" +display_name: "Fallout (Community Edition)" +cores: [fallout1-ce] +systems: [fallout] +verification: existence + +notes: | + Fallout 1 Community Edition is Alex Batalov's cross-platform rebuild of + the original Fallout engine. It reads the same data files the retail + installer dropped: master.dat holds the game resources, critter.dat the + animation frames, and the data/ directory holds loose patch overrides. + + The main executable loads config fallout.cfg from its own directory + (src/game/gconfig.cc:122-137). Keys master_dat / critter_dat / + master_patches / critter_patches default to "master.dat", "critter.dat", + "data" and "data" when the file is missing (gconfig.cc:58-61). On + startup, game_init_databases() in src/game/game.cc:1223 opens both + DAT files with db_init(); either missing raises GNWSystemError + "Could not find the master/critter datafile" (lines 1249, 1266) and the + game exits. + + The data/ directory is a user-writable patch overlay; it is empty on a + clean retail install, so retrobios does not ship an empty tree. Music + (ACM files under data/sound/music/) and movies (sound/MOVIES/) are + loaded on demand and the engine runs without them, so they are marked + optional. Font and resolution tweaks live in f1_res.ini and are a user + preference, not game data. + +exclusion_note: "data/, sound/ and movies/ load from the retail install folder, not from a shared BIOS tree" +files: + - name: master.dat + path: fallout1-ce/master.dat + system: fallout + category: game_data + required: true + description: "Fallout 1 master game resource archive (retail/GOG)" + note: "db_init call fails with GNWSystemError if missing" + source_ref: "src/game/game.cc:1237-1251" + + - name: critter.dat + path: fallout1-ce/critter.dat + system: fallout + category: game_data + required: true + description: "Fallout 1 critter animations archive (retail/GOG)" + source_ref: "src/game/game.cc:1253-1267" diff --git a/emulators/fallout2-ce.yml b/emulators/fallout2-ce.yml new file mode 100644 index 00000000..96189b29 --- /dev/null +++ b/emulators/fallout2-ce.yml @@ -0,0 +1,63 @@ +emulator: fallout2-ce +type: standalone +core_classification: game_engine +source: "https://github.com/alexbatalov/fallout2-ce" +upstream: ~ +profiled_date: "2026-10-04" +source_commit: "e97087b9582f37075db347a89898887320753f8b" +core_version: "1.2" +display_name: "Fallout 2 (Community Edition)" +cores: [fallout2-ce] +systems: [fallout2] +verification: existence + +notes: | + Fallout 2 Community Edition is Alex Batalov's cross-platform rebuild of + the Fallout 2 engine. Like Fallout 1 CE it reads master.dat (resources) + and critter.dat (animations), plus optional patch000.dat..patch999.dat + overlays and the high-resolution patch's f2_res.dat. + + The engine resolves master_dat / critter_dat paths from fallout2.cfg + via Settings (src/settings.h:12-14, src/game_config.cc:61-63). On + startup, gameDbInit() in src/game.cc:1322 opens the master database + (dbOpen call line 1343) and the critter database (line 1359). Either + missing raises the "Could not find the master/critter datafile" + message box (lines 1345, 1361) and the game exits. + + patch%03d.dat (patch000.dat..patch999.dat) are opportunistic: the loop + at src/game.cc:1372-1378 opens them with dbOpen if compat_access + succeeds and silently continues otherwise. Sfall's patch_file setting + can override the "patch%03d.dat" template (line 1367). + + f2_res.dat is the High Resolution Patch data file. Loaded only if + present (src/game.cc:1380-1382). Not required for the base game. + + Music (ACM), movies (MVE) and sound effects live in sound/, movies/, + and data/ overlays; the engine runs without them, so they are not + tracked here. + +exclusion_note: "data/, sound/ and movies/ load from the retail install folder, not from a shared BIOS tree" +files: + - name: master.dat + path: fallout2-ce/master.dat + system: fallout2 + category: game_data + required: true + description: "Fallout 2 master game resource archive (retail/GOG)" + source_ref: "src/game.cc:1333-1347" + + - name: critter.dat + path: fallout2-ce/critter.dat + system: fallout2 + category: game_data + required: true + description: "Fallout 2 critter animations archive (retail/GOG)" + source_ref: "src/game.cc:1349-1363" + + - name: f2_res.dat + path: fallout2-ce/f2_res.dat + system: fallout2 + category: game_data + required: false + description: "High Resolution Patch resource archive, loaded when present" + source_ref: "src/game.cc:1380-1382" diff --git a/emulators/sdlpop.yml b/emulators/sdlpop.yml new file mode 100644 index 00000000..f03383fb --- /dev/null +++ b/emulators/sdlpop.yml @@ -0,0 +1,49 @@ +emulator: sdlpop +type: standalone +core_classification: game_engine +source: "https://github.com/NagyD/SDLPoP" +upstream: ~ +profiled_date: "2026-10-04" +source_commit: "3c5add5fb7f83d4ceb542823ab66d00146c4271b" +core_version: "1.24 RC" +display_name: "Prince of Persia (SDLPoP)" +cores: [sdlpop] +systems: [prince-of-persia] +verification: existence + +notes: | + SDLPoP is NagyD's open-source port of the DOS Prince of Persia (1989), + rebuilt from the leaked Jordan Mechner source and refined through + years of community reverse engineering. Unlike the other engines in + this directory, SDLPoP ships with ALL game data in-tree; no retail + data file is required or useful. + + open_dat() (src/seg009.c:438) reads an archive named FOO.DAT if + present, otherwise falls back to a loose folder data/FOO/ containing + the extracted resources (lines 440-456 and 488-500). The repository + ships both forms: + + data/*.DAT files committed: + DIGISND1.DAT, DIGISND2.DAT, DIGISND3.DAT (digitized SFX) + MIDISND1.DAT, MIDISND2.DAT (MIDI SFX) + GUARD.DAT, GUARD1.DAT, GUARD2.DAT (guard graphics variants) + + data// folders committed (extracted resources): + PRINCE, KID, SHADOW, SKEL, GUARD, GUARD1, GUARD2, + VIZIER, VPALACE, VDUNGEON, PV, FAT, TITLE, + IBM_SND1, IBM_SND2, LEVELS, font, music + + The named folders are the fall-back for the DAT files the loader + actually requests: PRINCE.DAT (seg000.c:123, 1030-1037, 1067-1072), + LEVELS.DAT (seg000.c:1153), TITLE.DAT (seg000.c:2298), KID / GUARD / + SHADOW / SKEL / FAT / VPALACE / VDUNGEON / VIZIER / PV at level + switch (seg000.c:1656, 1690). The data/music folder holds the + OGG/MP3 soundtrack files added by the port. + + Consequence: retrobios does not supply any file to run the base game. + Users can drop MOD folders under mods// to layer custom + level packs on top (open_dat lines 448-452); those are user content, + not shared BIOS data, and are not tracked here. + +exclusion_note: "all required game data ships inside the source repository (data/ and data// trees)" +files: [] diff --git a/emulators/uqm.yml b/emulators/uqm.yml new file mode 100644 index 00000000..4abaa3ff --- /dev/null +++ b/emulators/uqm.yml @@ -0,0 +1,117 @@ +emulator: uqm +type: standalone +core_classification: game_engine +source: "https://github.com/juj/sc2-uqm" +upstream: "https://sourceforge.net/projects/sc2/" +profiled_date: "2026-10-04" +source_commit: "ff2444088d42e80612fd28f79d368783e244a606" +core_version: "0.8.0" +display_name: "The Ur-Quan Masters" +cores: [uqm] +systems: [ur-quan-masters, star-control-2] +verification: md5 + +notes: | + The Ur-Quan Masters (UQM) is the open-source port of Toys for Bob's + Star Control II, built from the sources Toys for Bob released in 2002. + The engine runs on top of its own virtual filesystem (uio) and expects + a content/ tree with a packages/ subdirectory holding zip archives + renamed with the .uqm suffix. + + prepareContentDir() in src/options.c:136 searches for content/ + relative to the executable (default locations are CONTENTDIR, "", + "content", "../../content"; macOS also probes the app bundle). A + sentinel file content/version must exist (lines 138-150) or the game + logs "Could not find content" and exits. + + mountContentDir() (src/options.c:329) mounts content/ at the uio root + and then auto-mounts every .uqm file found under content/packages/ as + an overlay archive (lines 354-359). The engine itself does not treat + individual .uqm packages as mandatory; the fatal check is the + content/ tree. In practice content/packages/uqm-0.8.0-content.uqm is + "Core Data" in the Windows installer (uqm-installer.nsi:289-306, + SectionIn 1 2 3 4 6) and the game is unplayable without it. + + 3DO music (uqm-0.8.0-3domusic.uqm) and voice overs + (uqm-0.8.0-voice.uqm) are optional sections (installer lines 315, + 329 - SectionIn 1 4 6). The four remix packs (uqm-remix-disc1.uqm + through uqm-remix-disc4-1.uqm) are only in SectionIn 6 ("Full"). + + content/base, content/addons and the two .key sentinel files + (uqm.key, menu.key) are shipped verbatim in the source repository + and are not external data; they are not listed here. + + MD5 and size values come from build/win32_install/packages.nsh, + autogenerated by procpkgs.sh at release time; sizes are the KiB + values the NSIS installer uses with AddSize. + +files: + - name: uqm-0.8.0-content.uqm + path: uqm/content/packages/uqm-0.8.0-content.uqm + system: ur-quan-masters + category: game_data + required: true + md5: "6cbc9d51fa63e07c0f4d1d061136d816" + validation: [md5] + description: "UQM core game data archive" + source_ref: "build/win32_install/packages.nsh:3-5; sc2/build/win32_install/uqm-installer.nsi:289-306" + + - name: uqm-0.8.0-3domusic.uqm + path: uqm/content/packages/uqm-0.8.0-3domusic.uqm + system: ur-quan-masters + category: game_data + required: false + md5: "9e5801d45ca12028b486cdeb83568c02" + validation: [md5] + description: "UQM 3DO music track pack" + source_ref: "build/win32_install/packages.nsh:6-8; sc2/build/win32_install/uqm-installer.nsi:315-327" + + - name: uqm-0.8.0-voice.uqm + path: uqm/content/packages/uqm-0.8.0-voice.uqm + system: ur-quan-masters + category: game_data + required: false + md5: "fc89f77d7b66c2669abca6c157f5259a" + validation: [md5] + description: "UQM alien-race voice-over pack" + source_ref: "build/win32_install/packages.nsh:9-11; sc2/build/win32_install/uqm-installer.nsi:329-341" + + - name: uqm-remix-disc1.uqm + path: uqm/content/packages/uqm-remix-disc1.uqm + system: ur-quan-masters + category: game_data + required: false + md5: "09f242d8d72166d1d5ccbd3d99c93e7d" + validation: [md5] + description: "Precursor Remix disc 1 (modern remixes)" + source_ref: "build/win32_install/packages.nsh:12-14; sc2/build/win32_install/uqm-installer.nsi:345-358" + + - name: uqm-remix-disc2.uqm + path: uqm/content/packages/uqm-remix-disc2.uqm + system: ur-quan-masters + category: game_data + required: false + md5: "fbc8bdcb709939d559d8c7216ad15cc2" + validation: [md5] + description: "Precursor Remix disc 2" + source_ref: "build/win32_install/packages.nsh:15-17" + + - name: uqm-remix-disc3.uqm + path: uqm/content/packages/uqm-remix-disc3.uqm + system: ur-quan-masters + category: game_data + required: false + md5: "5ccc6d4ac301ae98e172ac6835dcdead" + validation: [md5] + description: "Precursor Remix disc 3" + source_ref: "build/win32_install/packages.nsh:18-20" + + - name: uqm-remix-disc4-1.uqm + path: uqm/content/packages/uqm-remix-disc4-1.uqm + system: ur-quan-masters + category: game_data + required: false + md5: "3fb63f4ac514343ed4b4b5b194c413fb" + validation: [md5] + description: "Precursor Remix disc 4-1" + source_ref: "build/win32_install/packages.nsh:21-23"