feat: profile batocera vulkan quakes, supermodel

Batocera 43.1 ships vkQuake, vkQuake2, vkQuake3 and a Supermodel held
at 0eef09ba for the Raspberry Pi 4; none had a profile, so a targeted
pack dropped them. Each profile is read from the commit Batocera
builds. Collected with them: the Quake 1.06 id1/pak0.pak, the same file
in the shareware and registered releases, and the Games.xml that
Supermodel revision installs.
This commit is contained in:
Abdessamad Derraz committed 2026-10-17 12:33:33 +02:00
1 parent 9980a694e4
commit 856383136e
6 files changed
+3657

No files matched your search

Binary file not shown.
File diff suppressed because it is too large. Load diff
+73
View File
@@ -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/<game>.nv and Saves/<game>.st<slot>. 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/<game>.nv and /userdata/saves/supermodel/<game>.st<slot>.
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 <parent>.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/<game>.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.
+80
View File
@@ -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 <basedir>/<dir>/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 <game>/music/trackNN.<ext>, 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"
+107
View File
@@ -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
<basedir>/baseq2 (qcommon/files.c:858, 872). A non-empty game cvar adds
<basedir>/<game> 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 <gamedir>/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"
+147
View File
@@ -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)"