diff --git a/bios/Id Software/Quake/id1/pak0.pak b/bios/Id Software/Quake/id1/pak0.pak new file mode 100644 index 00000000..88c2532d Binary files /dev/null and b/bios/Id Software/Quake/id1/pak0.pak differ diff --git a/bios/Sega/Model 3/Config/.variants/Games.xml.84b66c6c b/bios/Sega/Model 3/Config/.variants/Games.xml.84b66c6c new file mode 100644 index 00000000..bfeab722 --- /dev/null +++ b/bios/Sega/Model 3/Config/.variants/Games.xml.84b66c6c @@ -0,0 +1,3250 @@ + + + + + Sega Bass Fishing + USA, Deluxe + Sega + 1997 + + + Sega Model 3 + 1.0 + MPC106 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Get Bass: Sega Bass Fishing + Japan, Deluxe + Sega + 1997 + + + Sega Model 3 + 1.0 + MPC106 + + + + + + + + + + + + + + + + + + Get Bass: Sega Bass Fishing + Japan, Upright + Sega + 1997 + + + Sega Model 3 + 1.0 + MPC106 + + + + + + + + + + + + + + + + + + Get Bass: Sega Bass Fishing + Japan, Standard + Sega + 1997 + + + Sega Model 3 + 1.0 + MPC106 + + + + + + + + + + + + + + + + + + + Daytona USA 2 - Battle on the Edge + Japan, Revision A + Sega + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Wheel + 24 + true + + + + + + + + 0x29250e16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Daytona USA 2 - Power Edition + Japan + Sega + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Wheel + true + + + + + + + + 0x29222CC4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dirt Devils + Export, Revision A + Sega + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Wheel + 0x16C311DB + true + + + + + + + + 0x29290f17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dirt Devils + USA, Revision A + Sega + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Wheel + 0x16C311DB + true + + + + + + + + 0x29290f17 + + + + + + + + + + + + + + Dirt Devils + Australia, Revision A + Sega + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Wheel + 0x16C311DB + true + + + + + + + + 0x29290f17 + + + + + + + + + + + + + + Dirt Devils + Japan, Revision A + Sega + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Wheel + 0x16C311DB + true + + + + + + + + 0x29290f17 + + + + + + + + + + + + + + Dirt Devils + Export, Ver. G? + Sega + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Wheel + 0x16C311DB + true + + + + + + + + 0x29290f17 + + + + + + + + + + + + + + Emergency Call Ambulance + Export + Sega + 1999 + + + Sega Model 3 + 2.1 + Wheel + + + + + + + + 0x2923aa91 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Emergency Call Ambulance + US location test? + Sega + 1999 + + + Sega Model 3 + 2.1 + Wheel + + + + + + + + 0x2923aa91 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Emergency Call Ambulance + USA + Sega + 1999 + + + Sega Model 3 + 2.1 + Wheel + + + + + + + + 0x2923aa91 + + + + + + + + + + + + + + + + + + Emergency Call Ambulance + Japan + Sega + 1999 + + + Sega Model 3 + 2.1 + Wheel + + + + + + + + 0x2923aa91 + + + + + + + + + + + + + + + + + + Fighting Vipers 2 + Japan, Revision A + Sega + 1998 + + + Sega Model 3 + 2.0 + Billboard + 24 + + + + + + + 0x29260e96 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fighting Vipers 2 + ? + Sega + 1998 + + + Sega Model 3 + 2.0 + 24 + + + + + + + 0x29260e96 + + + + + + + + + + + + + + Harley-Davidson and L.A. Riders + Revision B + Sega + 1997 + + + Sega Model 3 + 2.0 + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Harley-Davidson and L.A. Riders + Revision A + Sega + 1997 + + + Sega Model 3 + 2.0 + true + + + + + + + + + + + + + + + + + + + + + L.A. Machineguns: Rage of the Machines + Japan + Sega + 1998 + + + Sega Model 3 + 2.1 + 0x16C311DB + + + + + + 0x292A2BC5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Le Mans 24 + Japan, Revision B + Sega + 1997 + + + Sega Model 3 + 1.5 + Wheel + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Lost World + Japan, Revision A + Sega + 1997 + + + Sega Model 3 + 1.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Lost World + + Location Test + Sega + 1997 + + + Sega Model 3 + 1.5 + + + + + + + + + + + + + + + + + + + + + + + Magical Truck Adventure + Japan + Sega + 1998 + + + Sega Model 3 + 2.1 + 0x16C311DB + + + + + 0x29266e45 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Ocean Hunter + Japan + Sega + 1998 + + + Sega Model 3 + 2.1 + + + + + + 0x292B6A01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Scud Race + Export, Twin/DX + Sega + 1996 + + + Sega Model 3 + 1.5 + DSB1 + Wheel + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Scud Race + Australia, Twin/DX + Sega + 1996 + + + Sega Model 3 + 1.5 + DSB1 + Wheel + true + + + + + + + + + + + + + + + + + + + + + + + + + Scud Race + Export, Deluxe + Sega + 1996 + + + Sega Model 3 + 1.5 + DSB1 + Wheel + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Scud Race Plus + Export, Twin/DX, Revision A + Sega + 1997 + + + Sega Model 3 + 1.5 + DSB1 + Wheel + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Scud Race Plus + Export, Twin/DX + Sega + 1997 + + + Sega Model 3 + 1.5 + DSB1 + Wheel + MPC106 + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ski Champ + Japan + Sega + 1998 + + + Sega Model 3 + 2.0 + Ski + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Spikeout Final Edition + Export + Sega + 1999 + + + Sega Model 3 + 2.1 + DSB2 + true + + + + + + 0x29236fc8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Spikeout + Export, Revision C + Sega + 1998 + + + Sega Model 3 + 2.1 + DSB2 + true + + + + + + 0x292f2b04 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sega Rally 2 + Export + Sega + 1998 + + + Sega Model 3 + 2.0 + DSB2 + Wheel + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sega Rally 2 + Prototype + Sega + 1998 + + + Sega Model 3 + 2.0 + DSB2 + Wheel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sega Rally 2 + Prototype Version A + Sega + 1998 + + + Sega Model 3 + 2.0 + DSB2 + Wheel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sega Rally 2 + Export, Deluxe + Sega + 1998 + + + + Sega Model 3 + 2.0 + DSB2 + Wheel + 48 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Star Wars Trilogy Arcade + Export, Revision A + Sega, LucasArts + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Joystick + + + + + 0x31272A01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Star Wars Trilogy Arcade + Export + Sega, LucasArts + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Joystick + + + + + 0x31272A01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + Star Wars Trilogy Arcade + Location Test, 16.09.98 + Sega, LucasArts + 1998 + + + Sega Model 3 + 2.1 + DSB2 + Joystick + + + + + 0x31272A01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Virtua Fighter 3 + Revision D + Sega + 1996 + + + Sega Model 3 + 1.0 + Billboard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Virtua Fighter 3 + Revision A + Sega + 1996 + + + Sega Model 3 + 1.0 + Billboard + + + + + + + + + + + + + + + + + + + + Virtua Fighter 3 + Revision C + Sega + 1996 + + + Sega Model 3 + 1.0 + Billboard + + + + + + + + + + + + + + + + + + + + Virtua Fighter 3 Team Battle + ? + Sega + 1996 + + + Sega Model 3 + 1.0 + Billboard + + + + + + + + + + + + + + + + + + + + + + + + + + + Virtual On 2: Oratorio Tangram + Revision B + Sega + 1998 + + + Sega Model 3 + 2.0 + Billboard + 0x16C311DB + true + + + + + 0x292a0e97 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Virtual On 2: Oratorio Tangram + Ver 5.4g + Sega + 1998 + + + Sega Model 3 + 2.0 + Billboard + 0x16C311DB + true + + + + + 0x292a0e97 + + + + + + + + + + + + + + Virtual On 2: Oratorio Tangram + Revision A + Sega + 1998 + + + Sega Model 3 + 2.0 + Billboard + 0x16C311DB + true + + + + + 0x292a0e97 + + + + + + + + + + + + + + Virtual On 2: Oratorio Tangram + ? + Sega + 1998 + + + Sega Model 3 + 2.0 + Billboard + 0x16C311DB + true + + + + + 0x292a0e97 + + + + + + + + + + + + + + Virtua Striker 2 + Step 2.0 + Sega + 1997 + + + Sega Model 3 + 2.0 + Billboard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Virtua Striker 2 + Step 1.5 + Sega + 1997 + + + Sega Model 3 + 1.5 + Billboard + MPC106 + + + + + + + + + + + + + + + + + + + + Virtua Striker 2 + Step 1.5, older + Sega + 1997 + + + Sega Model 3 + 1.5 + Billboard + MPC106 + + + + + + + + + + + + + + + + + + + + Virtua Striker 2 '98 + Step 2.0 + Sega + 1998 + + + Sega Model 3 + 2.0 + Billboard + + + + + + + 0x29234e96 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Virtua Striker 2 '98 + Step 1.5 + Sega + 1998 + + + Sega Model 3 + 1.5 + Billboard + MPC106 + + + + + + + + + + + + + + + + + + + + Virtua Striker 2 '99.1 + Export, USA, Revision B + Sega + 1999 + + + Sega Model 3 + 2.1 + Billboard + + + + + + + 0x29222ac8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Virtua Striker 2 '99 + Export, USA, Revision A + Sega + 1999 + + + Sega Model 3 + 2.1 + Billboard + + + + + + + 0x29222ac8 + + + + + + + + + + + + + + Virtua Striker 2 '99 + Export, USA + Sega + 1999 + + + Sega Model 3 + 2.1 + Billboard + + + + + + + 0x29222ac8 + + + + + + + + + + + + + + Virtua Striker 2 '99.1 + Japan, Revision B + Sega + 1999 + + + Sega Model 3 + 2.1 + Billboard + + + + + + + 0x29222ac8 + + + + + + + + + + + + + + Virtua Striker 2 '99.1 + Step 1.5 Export, USA, Revision B + Sega + 1999 + + + Sega Model 3 + 1.5 + Billboard + MPC106 + + + + + + + + + + + + + + + + + + + + Virtua Striker 2 '99 + Step 1.5 Export, USA + Sega + 1999 + + + Sega Model 3 + 1.5 + MPC106 + Billboard + + + + + + + + + + + + + + + + + + + + Virtua Striker 2 '99.1 + Step 1.5 Japan, Revision B + Sega + 1999 + + + Sega Model 3 + 1.5 + MPC106 + Billboard + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/emulators/supermodel-legacy.yml b/emulators/supermodel-legacy.yml new file mode 100644 index 00000000..47c85215 --- /dev/null +++ b/emulators/supermodel-legacy.yml @@ -0,0 +1,73 @@ +emulator: Supermodel Legacy +type: standalone +core_classification: frozen_snapshot +source: "https://github.com/trzy/Supermodel" +upstream: "https://github.com/trzy/Supermodel" +profiled_date: "2026-10-17" +source_commit: "0eef09ba2b74e48fd5cfd388ee69a3743fd5f618" +pin_frozen: "Batocera's supermodel-legacy package builds this revision, held before the renderer moved to OpenGL 4.1. Recaling would repoint these refs at code this build never had." +core_version: "0.3a-WIP" +display_name: "Sega - Model 3 (Supermodel Legacy)" +cores: + - "supermodel-legacy" +systems: + - "sega-model3" + +notes: | + Supermodel at trzy/Supermodel 0eef09b of 2022-08-19, the revision Batocera + builds as supermodel-legacy for boards without OpenGL 4.1, the version the + renderer moved to after it. Batocera applies five patches; 001 rewrites the + fixed paths below, the others touch the INI template, the build rules, audio + volume and an evdev light gun input system. + ref: Src/Version.h:32 + + All paths are compiled in and relative to the working directory: Config/Games.xml, + Config/Supermodel.ini, NVRAM/.nv and Saves/.st. There is no + per-OS path resolution at this revision. Batocera's patch replaces them with + /usr/share/supermodel/Games.xml, /userdata/system/configs/supermodel/Supermodel.ini, + /userdata/saves/supermodel/NVRAM/.nv and /userdata/saves/supermodel/.st. + ref: Src/OSD/SDL/Main.cpp:1320-1321, Src/OSD/SDL/Main.cpp:579, Src/OSD/SDL/Main.cpp:638, + Src/OSD/SDL/Main.cpp:661 + + ROM sets are MAME format per game archives identified by the CRC32 values in + Games.xml, 60 sets at this revision. A child set missing files makes the loader + open .zip from the same directory; parents are regional or revision + variants of one game, not a shared BIOS. Each Model 3 board carries its own + program, video, sound and drive board ROMs, so no system ROM is read outside + those archives. + ref: Src/GameLoader.cpp:858-893 + + Supermodel.ini is optional: when it cannot be opened the compiled-in defaults + apply. The emulator writes it only after interactive input configuration. + Batocera generates it from its own template before each launch. + ref: Src/Util/ConfigBuilders.cpp:134-142, Src/OSD/SDL/Main.cpp:1356-1358, + Src/OSD/SDL/Main.cpp:1861 + + NVRAM/.nv is loaded after the ROMs when present, silently skipped when + absent, and written on exit. Batocera ships 43 .nv files, copied into + the save directory by its launcher, preset so the games start without a + pass through the service menu. + ref: Src/OSD/SDL/Main.cpp:656-688, Src/OSD/SDL/Main.cpp:900, Src/OSD/SDL/Main.cpp:1297 + + Crosshairs are drawn as GL primitives; no Assets/ bitmap and no Music.xml are + read at this revision. External GLSL shaders are read only when a VertexShader + or FragmentShader key names a file, and all six keys default to empty. + ref: Src/OSD/SDL/Main.cpp:703-712, Src/OSD/SDL/Main.cpp:1420-1425, + Src/Graphics/Shader.cpp:93-100 + +files: + - name: "Games.xml" + path: "Config/Games.xml" + required: true + bundled: true + size: 152488 + sha1: "599a74894c61c1849e2aeff17507c233e2f459d6" + md5: "84b66c6c9eb9370e983d88c4d187ea05" + description: "ROM set definitions" + note: "Parsed by the GameLoader constructor before the ROM archive is opened. A file that fails to parse leaves no game defined, no set in the archive is recognised, and main returns 1. The path is the GameXMLFile key, so -game-xml-file moves it; Batocera's patch sets the default to /usr/share/supermodel/Games.xml. The hash is that of Config/Games.xml at the pinned revision, which Batocera installs." + source_ref: "Src/OSD/SDL/Main.cpp:1321, Src/OSD/SDL/Main.cpp:1412, Src/OSD/SDL/Main.cpp:1866-1874, Src/GameLoader.cpp:492-502, Src/GameLoader.cpp:689-693, Src/GameLoader.cpp:895-898" + +exclusion_note: > + The Sega Model 3 has no shared system BIOS. Program, video, sound and drive + board ROMs are all inside per-game MAME-format archives identified by the + CRC32 values in Games.xml. diff --git a/emulators/vkquake.yml b/emulators/vkquake.yml new file mode 100644 index 00000000..23737143 --- /dev/null +++ b/emulators/vkquake.yml @@ -0,0 +1,80 @@ +emulator: vkQuake +type: standalone +core_classification: game_engine +source: "https://github.com/Novum/vkQuake" +upstream: "https://sourceforge.net/projects/quakespasm/" +profiled_date: "2026-10-17" +source_commit: "6f9c012a9176ee36663fd7a6d30b6291a0dbbcc1" +core_version: "1.33.0" +display_name: "Quake (vkQuake)" +cores: ["vkquake"] +systems: [quake] + +notes: | + Vulkan Quake engine derived from QuakeSpasm. VKQUAKE_VERSION 1.33, + VKQUAKE_VER_PATCH 0 (Quake/quakever.h:37-41). GAMENAME = "id1" + (Quake/quakedef.h:37). + + COM_InitFilesystem takes the base directory from -basedir, otherwise + host_parms->basedir (Quake/common.c:2463-2467). COM_AddGameDirectory + opens //pak0.pak, pak1.pak, ... and stops at the first + index that does not open (Quake/common.c:2241-2245). Right after + id1/pak0.pak it mounts vkquake.pak, built from Misc/vq_pak and embedded + in the binary (Quake/common.c:2257-2282); it carries default.cfg, three + menu pictures and entity fixes, no gfx.wad and no palette. + + gfx.wad and gfx/colormap.lmp come from id1/pak0.pak; without either the + engine stops with Sys_Error (Quake/wad.c:80-87, Quake/host.c:1093-1095). + gfx/pop.lmp, present only in the registered id1/pak1.pak, sets the + registered cvar (Quake/common.c:1458-1484). + + COM_LoadPackFile compares the file count (339) and the CRC of the pak + directory against id1/pak0.pak v1.00, v1.01 and v1.06 + (Quake/common.c:56-59, 2105-2118). A mismatch only sets com_modified; + the file is still mounted. With com_modified set and no gfx/pop.lmp the + engine stops (Quake/common.c:1464-1470), so -game, -hipnotic and -rogue, + whose paks differ from id1/pak0.pak, need the registered id1/pak1.pak. + + -rogue and -hipnotic add rogue/ and hipnotic/ after id1/ + (Quake/common.c:2507-2510). Batocera 43.1 runs + `vkquake -basedir /userdata/roms/quake` and adds -hipnotic or -rogue + from the ROM name (configgen generators/vkquake/vkquakeGenerator.py). + + Background music is streamed from /music/trackNN., ogg, opus, + flac, mp3 and wav, when present (Quake/bgmusic.c:29, 321). + +files: + - name: "pak0.pak" + category: game_data + system: quake + path: "id1/pak0.pak" + required: true + source_ref: "Quake/common.c:2241-2245 (pak%i.pak loop), 2496 (id1 by default); Quake/wad.c:80-87 (gfx.wad fatal)" + note: "Shareware and registered Quake data, one file in both releases. Directory CRC compared to v1.00, v1.01, v1.06; a mismatch does not refuse the file." + + - name: "pak1.pak" + category: game_data + system: quake + path: "id1/pak1.pak" + required: false + source_ref: "Quake/common.c:2241-2245 (pak%i.pak loop), 1458-1470 (gfx/pop.lmp, registered check)" + note: "Registered episodes 2 to 4. Read only after pak0.pak opens. Needed by -hipnotic, -rogue and -game." + unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" + + - name: "pak0.pak" + category: game_data + system: quake + path: "hipnotic/pak0.pak" + required: false + source_ref: "Quake/common.c:2509-2510 (-hipnotic), 2241-2245 (pak%i.pak loop)" + note: "Scourge of Armagon data. Loaded with -hipnotic." + unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" + + - name: "pak0.pak" + category: game_data + system: quake + path: "rogue/pak0.pak" + required: false + source_ref: "Quake/common.c:2507-2508 (-rogue), 2241-2245 (pak%i.pak loop)" + note: "Dissolution of Eternity data. Loaded with -rogue." + unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" diff --git a/emulators/vkquake2.yml b/emulators/vkquake2.yml new file mode 100644 index 00000000..6669fb50 --- /dev/null +++ b/emulators/vkquake2.yml @@ -0,0 +1,107 @@ +emulator: vkQuake2 +type: standalone +core_classification: game_engine +source: "https://github.com/kondrak/vkQuake2" +upstream: "https://github.com/id-Software/Quake-2" +profiled_date: "2026-10-17" +source_commit: "5bf9c012024884234df0f63c615daec0c740def7" +core_version: "1.5.10" +display_name: "Quake II (vkQuake2)" +cores: ["vkquake2"] +systems: [quake2, xatrix, rogue, ctf] + +notes: | + Quake II 3.21 with a Vulkan renderer. VERSION 3.21, VKQUAKE2_VERSION + "1.5.10", BASEDIRNAME = "baseq2" (qcommon/qcommon.h:26-30). + + FS_InitFilesystem reads the basedir cvar, default ".", and mounts + /baseq2 (qcommon/files.c:858, 872). A non-empty game cvar adds + / on top (qcommon/files.c:878-880, 640). + FS_AddGameDirectory tries pak0.pak through pak9.pak in each directory and + skips an index that does not open (qcommon/files.c:537-542). + + FS_LoadPackFile computes a checksum of the pak directory, but the + comparison against PAK0_CHECKSUM only runs with NO_ADDONS, which is + commented out (qcommon/files.c:24, 28, 484-489). No pak is rejected for + its contents. The Vulkan renderer, vid_ref default "vk" + (linux/vid_so.c:448), stops with ERR_FATAL when pics/colormap.pcx is + missing (ref_vk/vk_image.c:1640-1642); that file is in baseq2/pak0.pak. + + Batocera 43.1 copies /usr/bin/vkquake2 (binary, ref_*.so and the game + libraries of baseq2, ctf, rogue, smd, xatrix, zaero) into + /userdata/roms/quake2, changes to that directory and runs ./quake2, with + `+set game rogue|xatrix|zaero|smd` chosen from the ROM name (configgen + generators/vkquake2/vkquake2Generator.py). The basedir is therefore + /userdata/roms/quake2. + + Music is read from /music/trackNN.ogg, .flac, .mp3 or .wav, + then from baseq2/music/ (client/snd_miniaudio.c:215-220, 241-246). + +files: + - name: "pak0.pak" + category: game_data + system: quake2 + path: "baseq2/pak0.pak" + required: true + source_ref: "qcommon/files.c:872 (baseq2 mounted), 537-542 (pak%i.pak loop); ref_vk/vk_image.c:1640-1642 (pics/colormap.pcx fatal)" + note: "Retail Quake II data. Not hash-checked." + + - name: "pak1.pak" + category: game_data + system: quake2 + path: "baseq2/pak1.pak" + required: false + source_ref: "qcommon/files.c:537-542" + note: "Shipped by the 3.20 point release." + + - name: "pak2.pak" + category: game_data + system: quake2 + path: "baseq2/pak2.pak" + required: false + source_ref: "qcommon/files.c:537-542" + note: "Shipped by the 3.20 point release." + + - name: "pak0.pak" + category: game_data + system: xatrix + path: "xatrix/pak0.pak" + required: false + source_ref: "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542" + note: "The Reckoning data. Loaded with `+set game xatrix`." + unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" + + - name: "pak0.pak" + category: game_data + system: rogue + path: "rogue/pak0.pak" + required: false + source_ref: "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542" + note: "Ground Zero data. Loaded with `+set game rogue`." + unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" + + - name: "pak0.pak" + category: game_data + system: ctf + path: "ctf/pak0.pak" + required: false + source_ref: "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542" + note: "Three Wave CTF data from the 3.20 point release. Loaded with `+set game ctf`." + + - name: "pak0.pak" + category: game_data + system: quake2 + path: "zaero/pak0.pak" + required: false + source_ref: "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542" + note: "Zaero data. Loaded with `+set game zaero`." + unsourceable: "data the collection does not hold; a same-named file of another game must not stand in" + + - name: "pak0.pak" + category: game_data + system: quake2 + path: "smd/pak0.pak" + required: false + source_ref: "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542" + note: "Slight Mechanical Destruction data. Loaded with `+set game smd`." + unsourceable: "data the collection does not hold; a same-named file of another game must not stand in" diff --git a/emulators/vkquake3.yml b/emulators/vkquake3.yml new file mode 100644 index 00000000..c3c716df --- /dev/null +++ b/emulators/vkquake3.yml @@ -0,0 +1,147 @@ +emulator: vkQuake3 +type: standalone +core_classification: game_engine +source: "https://github.com/suijingfeng/vkQuake3" +upstream: "https://github.com/ioquake/ioq3" +profiled_date: "2026-10-17" +source_commit: "5300b32803c1c61bc3b6bdf86a084c1db1a217ad" +core_version: "1.36" +display_name: "Quake III Arena (vkQuake3)" +cores: ["vkquake3"] +systems: [quake3, teamarena] + +notes: | + ioquake3 fork with a Vulkan renderer. PRODUCT_VERSION "1.36", + BASEGAME = "baseq3", BASETA = "missionpack" (code/qcommon/q_shared.h:45, + 68, 71). NUM_ID_PAKS 9, NUM_TA_PAKS 4 (code/qcommon/qcommon.h:597-598). + + fs_basepath defaults to Sys_DefaultInstallPath, the directory of the + binary (code/qcommon/files.c:3323, code/sys/sys_main.c:88-94, 738). + FS_Startup mounts baseq3 under fs_basepath and fs_homepath, then fs_game + when set (code/qcommon/files.c:3362-3377, 3396-3409). FS_AddGameDirectory + mounts every .pk3 of each directory (code/qcommon/files.c:2933). + + FS_CheckPak0 compares the pak checksum of baseq3/pak0.pk3 through + pak8.pk3 and missionpack/pak0.pk3 through pak3.pk3 to pak_checksums[] and + missionpak_checksums[] (code/qcommon/files.c:179-197, 3486, 3516). The + value is a block checksum over the CRC32 of every member + (code/qcommon/files.c:2111), not a file hash. A mismatch prints a warning and the pak stays + mounted. A missing baseq3 pak is fatal unless the engine runs standalone, + which needs com_basegame other than baseq3 (code/qcommon/files.c:3570-3572, + 3596-3619). Once any Team Arena pak is found the four are required + (code/qcommon/files.c:3622-3640). demoq3/pak0.pk3 with + DEMO_PAK0_CHECKSUM counts as baseq3/pak0.pk3 (code/qcommon/files.c:178, + 3475-3479, 3580-3590). + + Batocera 43.1 installs the binary as /usr/bin/ioquake3/ioquake3 and runs + it through the ioquake3 generator, which copies /usr/bin/ioquake3 into + /userdata/roms/quake3 and starts /userdata/roms/quake3/ioquake3 with the + arguments written in the ROM file (configgen + generators/ioquake3/ioquake3Generator.py). fs_basepath is therefore + /userdata/roms/quake3. Patch 001-config-dir.patch sets + HOMEPATH_NAME_UNIX to "/configs/ioquake3", appended to $HOME + (code/sys/sys_unix.c:65, 79). + +files: + - name: "pak0.pk3" + category: game_data + system: quake3 + path: "baseq3/pak0.pk3" + required: true + source_ref: "code/qcommon/files.c:180 (pak_checksums[0]=1566731103u), 3486 (checksum compare), 3596-3619 (fatal when a baseq3 pak is absent)" + note: "Retail Quake III Arena pak. A checksum mismatch prints a warning, the file is not refused." + unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" + + - name: "pak1.pk3" + category: game_data + system: quake3 + path: "baseq3/pak1.pk3" + required: true + source_ref: "code/qcommon/files.c:181 (pak_checksums[1]=298122907u), 3596-3619 (fatal when a baseq3 pak is absent)" + + - name: "pak2.pk3" + category: game_data + system: quake3 + path: "baseq3/pak2.pk3" + required: true + source_ref: "code/qcommon/files.c:182 (pak_checksums[2]=412165236u), 3596-3619 (fatal when a baseq3 pak is absent)" + + - name: "pak3.pk3" + category: game_data + system: quake3 + path: "baseq3/pak3.pk3" + required: true + source_ref: "code/qcommon/files.c:183 (pak_checksums[3]=2991495316u), 3596-3619 (fatal when a baseq3 pak is absent)" + + - name: "pak4.pk3" + category: game_data + system: quake3 + path: "baseq3/pak4.pk3" + required: true + source_ref: "code/qcommon/files.c:184 (pak_checksums[4]=1197932710u), 3596-3619 (fatal when a baseq3 pak is absent)" + + - name: "pak5.pk3" + category: game_data + system: quake3 + path: "baseq3/pak5.pk3" + required: true + source_ref: "code/qcommon/files.c:185 (pak_checksums[5]=4087071573u), 3596-3619 (fatal when a baseq3 pak is absent)" + + - name: "pak6.pk3" + category: game_data + system: quake3 + path: "baseq3/pak6.pk3" + required: true + source_ref: "code/qcommon/files.c:186 (pak_checksums[6]=3709064859u), 3596-3619 (fatal when a baseq3 pak is absent)" + + - name: "pak7.pk3" + category: game_data + system: quake3 + path: "baseq3/pak7.pk3" + required: true + source_ref: "code/qcommon/files.c:187 (pak_checksums[7]=908855077u), 3596-3619 (fatal when a baseq3 pak is absent)" + + - name: "pak8.pk3" + category: game_data + system: quake3 + path: "baseq3/pak8.pk3" + required: true + source_ref: "code/qcommon/files.c:188 (pak_checksums[8]=977125798u), 3596-3619 (fatal when a baseq3 pak is absent)" + + - name: "pak0.pk3" + category: game_data + system: quake3 + path: "demoq3/pak0.pk3" + required: false + source_ref: "code/qcommon/files.c:178 (DEMO_PAK0_CHECKSUM=2985612116u), 3475-3479 (demoq3 pak0 checksum compare), 3580-3590 (counted as baseq3/pak0.pk3)" + note: "Demo pak. Recognised only under demoq3/ with this checksum; the engine then prints a warning and counts baseq3/pak0.pk3 as found." + + - name: "pak0.pk3" + category: game_data + system: teamarena + path: "missionpack/pak0.pk3" + required: false + source_ref: "code/qcommon/files.c:193 (missionpak_checksums[0]=2430342401u), 3622-3640 (fatal when a Team Arena pak is absent)" + note: "Team Arena pak. Read with `+set fs_game missionpack`." + unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" + + - name: "pak1.pk3" + category: game_data + system: teamarena + path: "missionpack/pak1.pk3" + required: false + source_ref: "code/qcommon/files.c:194 (missionpak_checksums[1]=511014160u), 3622-3640 (fatal when a Team Arena pak is absent)" + + - name: "pak2.pk3" + category: game_data + system: teamarena + path: "missionpack/pak2.pk3" + required: false + source_ref: "code/qcommon/files.c:195 (missionpak_checksums[2]=2662638993u), 3622-3640 (fatal when a Team Arena pak is absent)" + + - name: "pak3.pk3" + category: game_data + system: teamarena + path: "missionpack/pak3.pk3" + required: false + source_ref: "code/qcommon/files.c:196 (missionpak_checksums[3]=1438664554u), 3622-3640 (fatal when a Team Arena pak is absent)"