feat: profile build and quake family engines

This commit is contained in:
Abdessamad Derraz committed 2026-10-04 14:54:30 +02:00
1 parent 6821e00354
commit 1050fc3cbb
7 files changed
+843

No files matched your search

+155
View File
@@ -0,0 +1,155 @@
emulator: EDuke32
type: standalone
core_classification: game_engine
source: "https://voidpoint.io/terminx/eduke32"
upstream: "https://voidpoint.io/terminx/eduke32"
profiled_date: "2026-10-04"
source_commit: "ec5824db81817866f70da326d3811bb0f52b3517"
core_version: "r11007"
display_name: "EDuke32"
cores: [eduke32]
systems: [duke3d, nam, napalm, ww2gi]
notes: |
Build-engine port by TerminX, Hendricks266, Plagman and others. Covers
Duke Nukem 3D (and its official addons), NAM, NAPALM, WWII GI and
Platoon Leader. Startup scans the search path for registered GRPs by
CRC32 (source/duke3d/src/grpscan.cpp:39-76 internalgrpfiles[]). Each GRP
carries a game flag (DUKE / NAM / NAPALM / WW2GI) and optional addon
dependency; EDuke32 picks the user selection, mounts it with
initgroupfile and loads the DEF / CON / RTS the GRP points to.
G_DefaultGrpFile (source/duke3d/src/common.cpp:60-73) returns the base
GRP for the active game flag: DUKE3D.GRP, NAM.GRP, NAPALM.GRP, WW2GI.GRP.
G_DefaultConFile and G_DefaultRtsFile pick EDUKE.CON / NAM.CON /
NAPALM.CON / WW2GI.CON and DUKE.RTS / NAM.RTS / NAPALM.RTS / WW2GI.RTS.
CRCs listed in source/duke3d/src/grpscan.h match the retail GRP byte
for byte; the loader only checks CRC32 (not MD5) and only to pick the
entry, never to refuse an unknown GRP. CON / RTS / addon files are
referenced from the chosen entry but their contents are not validated.
files:
# ================================================================
# Duke Nukem 3D (base game, GAMEFLAG_DUKE)
# ================================================================
- name: "DUKE3D.GRP"
category: game_data
system: duke3d
required: false
source_ref: "source/duke3d/src/common.cpp:36 (defaultgamegrp GAME_DUKE), source/duke3d/src/grpscan.cpp:41-50 (CRC-indexed variants)"
note: >
Any retail variant plays: Atomic Edition / Plus / World Tour
(DUKE15_CRC 0xFD3DCFF1, 44356548 bytes, grpscan.h:35), v1.3D
registered (DUKE13_CRC 0xBBC9CE44, 26524524 bytes, grpscan.h:33),
Shareware v1.3D (DUKESW_CRC 0x983AD923, 11035779 bytes,
grpscan.h:41), World Tour (DUKEWT_CRC 0x982AFE4A, grpscan.h:37),
Plutonium Pak (DUKEPP_CRC 0xF514A6AC, grpscan.h:36), South Korean
censored (DUKEKR_CRC 0xAA4F6A40, grpscan.h:34). CRC32 identifies
the variant and selects the matching entry in internalgrpfiles[];
no MD5 or SHA1 is read.
- name: "EDUKE.CON"
category: game_data
system: duke3d
required: false
source_ref: "source/duke3d/src/common.cpp:38 (defaultgameconfilename GAME_DUKE)"
note: "EDuke32 CON script. Shipped inside the GRP by default; external copy only when the user overrides it."
- name: "DUKE.RTS"
category: game_data
system: duke3d
required: false
source_ref: "source/duke3d/src/grpscan.cpp:39-76 (rtsname field)"
note: "Remote Ridicule speech. Not loaded if absent."
# ---- Duke 3D addons ----
- name: "DUKEDC.GRP"
category: game_data
system: duke3d
required: false
source_ref: "source/duke3d/src/grpscan.cpp:56-59 (Duke it out in D.C., GAMEFLAG_ADDON)"
- name: "VACATION.GRP"
category: game_data
system: duke3d
required: false
source_ref: "source/duke3d/src/grpscan.cpp:60-64 (Duke Caribbean: Life's a Beach, GAMEFLAG_ADDON)"
- name: "NWINTER.GRP"
category: game_data
system: duke3d
required: false
source_ref: "source/duke3d/src/grpscan.cpp:65-66 (Duke: Nuclear Winter, GAMEFLAG_ADDON)"
- name: "DZ2.GRP"
category: game_data
system: duke3d
required: false
source_ref: "source/duke3d/src/grpscan.cpp:67-69 (Duke!ZONE II, GAMEFLAG_ADDON)"
- name: "PENTP.GRP"
category: game_data
system: duke3d
required: false
source_ref: "source/duke3d/src/grpscan.cpp:70-71 (Penthouse Paradise, GAMEFLAG_ADDON)"
# ================================================================
# NAM (GAMEFLAG_NAM)
# ================================================================
- name: "NAM.GRP"
category: game_data
system: nam
size: 43448927
required: false
source_ref: "source/duke3d/src/grpscan.h:54 (NAM_CRC 0x75C1F07B), source/duke3d/src/grpscan.cpp:72"
- name: "NAM.CON"
category: game_data
system: nam
required: false
source_ref: "source/duke3d/src/common.cpp:38 (defaultgameconfilename GAME_NAM)"
# ================================================================
# NAPALM (GAMEFLAG_NAM | GAMEFLAG_NAPALM)
# ================================================================
- name: "NAPALM.GRP"
category: game_data
system: napalm
size: 44365728
required: false
source_ref: "source/duke3d/src/grpscan.h:55 (NAPALM_CRC 0x3DE1589A), source/duke3d/src/grpscan.cpp:73"
- name: "NAPALM.CON"
category: game_data
system: napalm
required: false
source_ref: "source/duke3d/src/common.cpp:38 (defaultgameconfilename GAME_NAPALM)"
# ================================================================
# WWII GI (GAMEFLAG_WW2GI)
# ================================================================
- name: "WW2GI.GRP"
category: game_data
system: ww2gi
size: 77939508
required: false
source_ref: "source/duke3d/src/grpscan.h:56 (WW2GI_CRC 0x907B82BF), source/duke3d/src/grpscan.cpp:74"
- name: "WW2GI.CON"
category: game_data
system: ww2gi
required: false
source_ref: "source/duke3d/src/common.cpp:38 (defaultgameconfilename GAME_WW2GI)"
- name: "PLATOONL.GRP"
category: game_data
system: ww2gi
size: 37852572
required: false
source_ref: "source/duke3d/src/grpscan.h:57 (PLATOONL_CRC 0xD1ED8C0C), source/duke3d/src/grpscan.cpp:75 (Platoon Leader, GAMEFLAG_ADDON)"
+71
View File
@@ -0,0 +1,71 @@
emulator: ET Legacy
type: standalone
core_classification: game_engine
source: "https://github.com/etlegacy/etlegacy"
upstream: "https://github.com/etlegacy/etlegacy"
profiled_date: "2026-10-04"
source_commit: "f8974d1861e3e95c236d3a7c05362d05f408275f"
core_version: "2.83.0+git"
display_name: "ET: Legacy"
cores: [etlegacy]
systems: [enemyterritory]
notes: |
Wolfenstein: Enemy Territory source port. BASEGAME = "etmain"
(src/qcommon/qcommon.h:787). FS_InitFilesystem (src/qcommon/files.c:
5066-5094) refuses to start if pak0.pk3 is not reachable under etmain
and prints "Please copy pak0.pk3 from the 'etmain' path of your
Wolfenstein: Enemy Territory installation to <path>". pak1.pk3 and
pak2.pk3 are checked against the server's requested pak list in
FS_ComparePaks (src/qcommon/files.c:4011-4018) but neither is a
startup gate; third-party mods pull them in as needed (see README.md
"In addition, third party mods might also require pak1.pk3 and
pak2.pk3"). mp_bin.pk3 ships in the retail release and holds the
stock multiplayer binaries.
NUM_ID_PAKS = 9 (src/qcommon/qcommon.h:815) counts the names recognised
by FS_idPak; retail Enemy Territory 2.60b publishes only pak0, pak1,
pak2 and mp_bin, so the extra slots are reserved for forward compatible
server lists, never filled by id.
The ET Legacy project ships its own replacement etmain/ assets (configs,
presets, locale files) directly in the source tree, plus a Legacy mod
pk3 downloaded on first run. The user still has to supply the retail
pak0.pk3 from the free Enemy Territory 2.60b download; pak0.pk3 holds
every id map, model, texture and sound.
files:
- name: "pak0.pk3"
category: game_data
system: enemyterritory
path: "etmain/pak0.pk3"
required: true
md5: "c8ce5e3eafb9faa74b9af03a9d6f3f5e"
source_ref: "src/qcommon/files.c:5066-5094 (fatal if absent), 5076 (FS_FOpenFileRead \"pak0.pk3\"), src/qcommon/qcommon.h:787 (BASEGAME \"etmain\")"
note: "Retail Wolfenstein: Enemy Territory 2.60b data pak. Startup gate. MD5 informational, not validated by the engine."
- name: "pak1.pk3"
category: game_data
system: enemyterritory
path: "etmain/pak1.pk3"
required: false
md5: "0d1cb16a147b0f12d79fd3b045e07706"
source_ref: "src/qcommon/files.c:4011-4018 (FS_idPak, NUM_ID_PAKS=9), README.md"
note: "Retail content update pak. Required by servers running 2.60b, pulled in by FS_ComparePaks."
- name: "pak2.pk3"
category: game_data
system: enemyterritory
path: "etmain/pak2.pk3"
required: false
md5: "61e3bbae9c1cd522cf7fcc27e3a4bbab"
source_ref: "src/qcommon/files.c:4011-4018 (FS_idPak), README.md"
note: "Retail content update pak."
- name: "mp_bin.pk3"
category: game_data
system: enemyterritory
path: "etmain/mp_bin.pk3"
required: false
source_ref: "src/qcommon/files.c:4011-4018 (FS_idPak)"
note: "Retail multiplayer QVM binaries. ET Legacy ships its own cgame/ui binaries; retail pack is for pure clients joining stock servers."
+42
View File
@@ -0,0 +1,42 @@
emulator: Ion Fury
type: standalone
core_classification: game_engine
source: "https://voidpoint.io/terminx/eduke32"
upstream: "https://voidpoint.io/terminx/eduke32"
profiled_date: "2026-10-04"
source_commit: "ec5824db81817866f70da326d3811bb0f52b3517"
core_version: "r11007"
display_name: "Ion Fury"
cores: [fury]
systems: [fury]
notes: |
Ion Fury runs on EDuke32 built with FURY=1 (GNUmakefile:6-15), which
defines EDUKE32_STANDALONE and sets APPBASENAME=fury, APPNAME="Ion Fury".
In standalone mode the GRP-detection table of EDuke32
(source/duke3d/src/grpscan.cpp:38-77) is compiled out by #ifndef
EDUKE32_STANDALONE, G_DefaultGrpFile returns "(none)"
(source/duke3d/src/common.cpp:60-77), and the loader autoscans the search
paths for *.grp / *.zip / *.ssi / *.pk3 / *.pk4
(source/duke3d/src/common.cpp:913).
Search paths added for the Fury binary include the Steam install (Ion
Fury) and the GOG install (ION Fury), marked with SEARCHPATH_FURY
(source/duke3d/src/common.cpp:585-587, 622-625, 822-833). After scanning,
G_CleanupSearchPaths removes all non-FURY entries when the FURY game
flag is active (source/duke3d/src/common.cpp:850-851), so Fury only
reads from its own install directory.
No hash or filename is validated by the engine: Ion Fury ships one GRP
(fury.grp) that holds every map, art bank, sound and DEF the game needs,
plus a small number of top-level files the retail installers lay down
alongside it. Only the GRP is listed below; the other files
(fury.cfg, settings.cfg, saves, screenshots) are user state.
files:
- name: "fury.grp"
category: game_data
system: fury
required: true
source_ref: "source/duke3d/src/common.cpp:913 (autoscan extensions), 585-587 (Steam path), 822-833 (GOG path)"
note: "Main data archive bundled with the retail Ion Fury release. Autoscan picks it up as the only GRP under the Fury search paths."
+138
View File
@@ -0,0 +1,138 @@
emulator: ioquake3
type: standalone
core_classification: game_engine
source: "https://github.com/ioquake/ioq3"
upstream: "https://github.com/ioquake/ioq3"
profiled_date: "2026-10-04"
source_commit: "83a776283bdb958f82db25554b5ed0966aaf6e49"
core_version: "1.36+git"
display_name: "ioquake3"
cores: [ioquake3]
systems: [quake3, teamarena]
notes: |
Quake III Arena / Team Arena source port maintained by the ioquake
team. BASEGAME = "baseq3", BASETA = "missionpack" (code/qcommon/q_shared.h
:44,65). FS_Startup (code/qcommon/files.c:3360) scans each search path
for pak0.pk3 through pak(NUM_ID_PAKS-1).pk3 under baseq3, and up to
NUM_TA_PAKS paks under missionpack (code/qcommon/qcommon.h:591-593,
NUM_ID_PAKS=9, NUM_TA_PAKS=4).
Loaded paks are matched against hardcoded unsigned 32-bit checksums
(code/qcommon/files.c:178-198: pak_checksums[], missionpak_checksums[]).
These are NOT MD5 / SHA1 / CRC32 of the file; they are id's own custom
pak checksum (sum of each lump CRC, see FS_LoadZipFile). A mismatch
prints "WARNING: baseq3/pak0.pk3 is present but its checksum (%u) is
not correct" (code/qcommon/files.c:3574) and keeps running: the loader
does not refuse the file, so no md5/sha1 is written below.
Missing paks are only fatal when neither com_standalone nor fs_basegame
override the base game (code/qcommon/files.c:3697, 3738).
files:
# ================================================================
# Quake III Arena (baseq3/, 9 numbered paks)
# Retail v1.32 ships pak0.pk3 through pak8.pk3 under baseq3.
# pak_checksums[0..8] = { 1566731103, 298122907, 412165236,
# 2991495316, 1197932710, 4087071573,
# 3709064859, 908855077, 977125798 }
# ================================================================
- name: "pak0.pk3"
category: game_data
system: quake3
path: "baseq3/pak0.pk3"
required: true
source_ref: "code/qcommon/files.c:179 (pak_checksums[0]=1566731103u), 3568 (per-index checksum compare)"
note: "Retail Quake III Arena base pak. Engine prints a warning on checksum mismatch, does not refuse the file."
- name: "pak1.pk3"
category: game_data
system: quake3
path: "baseq3/pak1.pk3"
required: false
source_ref: "code/qcommon/files.c:180 (pak_checksums[1]=298122907u)"
- name: "pak2.pk3"
category: game_data
system: quake3
path: "baseq3/pak2.pk3"
required: false
source_ref: "code/qcommon/files.c:181 (pak_checksums[2]=412165236u)"
- name: "pak3.pk3"
category: game_data
system: quake3
path: "baseq3/pak3.pk3"
required: false
source_ref: "code/qcommon/files.c:182 (pak_checksums[3]=2991495316u)"
- name: "pak4.pk3"
category: game_data
system: quake3
path: "baseq3/pak4.pk3"
required: false
source_ref: "code/qcommon/files.c:183 (pak_checksums[4]=1197932710u)"
- name: "pak5.pk3"
category: game_data
system: quake3
path: "baseq3/pak5.pk3"
required: false
source_ref: "code/qcommon/files.c:184 (pak_checksums[5]=4087071573u)"
- name: "pak6.pk3"
category: game_data
system: quake3
path: "baseq3/pak6.pk3"
required: false
source_ref: "code/qcommon/files.c:185 (pak_checksums[6]=3709064859u)"
- name: "pak7.pk3"
category: game_data
system: quake3
path: "baseq3/pak7.pk3"
required: false
source_ref: "code/qcommon/files.c:186 (pak_checksums[7]=908855077u)"
- name: "pak8.pk3"
category: game_data
system: quake3
path: "baseq3/pak8.pk3"
required: false
source_ref: "code/qcommon/files.c:187 (pak_checksums[8]=977125798u)"
# ================================================================
# Team Arena (missionpack/, 4 numbered paks)
# missionpak_checksums[0..3] = { 2430342401, 511014160,
# 2662638993, 1438664554 }
# ================================================================
- name: "pak0.pk3"
category: game_data
system: teamarena
path: "missionpack/pak0.pk3"
required: false
source_ref: "code/qcommon/files.c:192 (missionpak_checksums[0]=2430342401u)"
note: "Team Arena base pak. Required only when launching +set fs_game missionpack."
- name: "pak1.pk3"
category: game_data
system: teamarena
path: "missionpack/pak1.pk3"
required: false
source_ref: "code/qcommon/files.c:193 (missionpak_checksums[1]=511014160u)"
- name: "pak2.pk3"
category: game_data
system: teamarena
path: "missionpack/pak2.pk3"
required: false
source_ref: "code/qcommon/files.c:194 (missionpak_checksums[2]=2662638993u)"
- name: "pak3.pk3"
category: game_data
system: teamarena
path: "missionpack/pak3.pk3"
required: false
source_ref: "code/qcommon/files.c:195 (missionpak_checksums[3]=1438664554u)"
+116
View File
@@ -0,0 +1,116 @@
emulator: Taradino
type: standalone
core_classification: game_engine
source: "https://github.com/fabiangreffrath/taradino"
upstream: "https://github.com/fabiangreffrath/taradino"
profiled_date: "2026-10-04"
source_commit: "2b4ea3c6c18caf60959efee1f2534c2122607716"
core_version: "0.1"
display_name: "Taradino"
cores: [taradino]
systems: [rott]
notes: |
SDL2 port of Rise of the Triad by Fabian Greffrath, forked from the
original 1995 Apogee/3D Realms source release.
Build-time switch: SHAREWARE=0 (default, "registered") expects
DARKWAR.WAD / DARKWAR.RTL / DARKWAR.RTC; SHAREWARE=1 (dropped by the
CMakeLists SHAREWARE option) expects HUNTBGIN.WAD / HUNTBGIN.RTL /
HUNTBGIN.RTC (rott/rt_main.h:33-45). The repo distributes the
non-shareware binary; shareware builds are compiled by users from the
same tree.
Startup assembles argv in SetupWadFile (rott/rt_main.c:808-842), joining
`datadir` and STANDARDGAMEWAD, then feeds it to W_InitMultipleFiles
(rott/rt_main.c:842, rott/w_wad.c). The WAD search tries each path
registered through add_datadir() (rott/rt_datadir.c:198-209); a missing
main WAD aborts with FileNotFoundError(STANDARDGAMEWAD)
(rott/rt_main.c:812).
Game-product detection runs after the main WAD opens: FindFileByName
(rott/rt_main.c:165-177) looks for ROTTSITE.RTC (site license),
ROTTCD.RTC (SuperROTT, i.e. ROTT CD extra battle levels), and
DARKWAR.RTC (registered battle levels), setting gamestate.Product to
ROTT_SITELICENSE, ROTT_SUPERCD or ROTT_REGISTERED. Shareware builds
stay on ROTT_SHAREWARE.
REMOTE1.RTS carries the "Remote Ridicule" speech bank; its absence is
silently tolerated (rott/rt_main.c:830-834).
No hash is validated — the loader relies on WAD lump names and the
SHAREWARE_TAG magic number inside the RTL (rott/rt_ted.c:1432).
files:
# ================================================================
# Rise of the Triad: Dark War (registered release, Apogee 1995)
# Default build (SHAREWARE=0, rott/rt_main.h:33-39)
# ================================================================
- name: "DARKWAR.WAD"
category: game_data
system: rott
required: true
source_ref: "rott/rt_main.h:34 (STANDARDGAMEWAD), rott/rt_main.c:808-812 (FileNotFoundError on miss)"
note: "Main data WAD. Fatal if absent in non-shareware build."
- name: "DARKWAR.RTL"
category: game_data
system: rott
required: true
source_ref: "rott/rt_main.h:35 (STANDARDGAMELEVELS), rott/rt_main.c:192"
note: "Single-player level data. Opened alongside the main WAD."
- name: "DARKWAR.RTC"
category: game_data
system: rott
required: false
source_ref: "rott/rt_main.h:36 (STANDARDBATTLELEVELS), rott/rt_main.c:174-177 (ROTT_REGISTERED when present)"
note: "Comm-bat (deathmatch) level data. Marks gamestate as ROTT_REGISTERED."
- name: "ROTTCD.RTC"
category: game_data
system: rott
required: false
source_ref: "rott/rt_main.h:38 (SUPERROTTBATTLELEVELS), rott/rt_main.c:170-172"
note: "SuperROTT (ROTT CD) extra battle levels. Promotes product to ROTT_SUPERCD."
- name: "ROTTSITE.RTC"
category: game_data
system: rott
required: false
source_ref: "rott/rt_main.h:39 (SITELICENSEBATTLELEVELS), rott/rt_main.c:164-166"
note: "Site License battle levels. Promotes product to ROTT_SITELICENSE."
- name: "REMOTE1.RTS"
category: game_data
system: rott
required: false
source_ref: "rott/rt_main.c:832 (datadir/REMOTE1.RTS fallback)"
note: "Remote Ridicule speech bank. Loaded if present, silently skipped otherwise."
# ================================================================
# Shareware build (SHAREWARE=1, rott/rt_main.h:41-43)
# Produced only when users set -DSHAREWARE=1; file names differ.
# ================================================================
- name: "HUNTBGIN.WAD"
category: game_data
system: rott
required: false
source_ref: "rott/rt_main.h:41 (STANDARDGAMEWAD under SHAREWARE)"
note: "Shareware main WAD (Hunt Begins). Required only in shareware builds."
- name: "HUNTBGIN.RTL"
category: game_data
system: rott
required: false
source_ref: "rott/rt_main.h:42 (STANDARDGAMELEVELS under SHAREWARE)"
note: "Shareware level data."
- name: "HUNTBGIN.RTC"
category: game_data
system: rott
required: false
source_ref: "rott/rt_main.h:43 (STANDARDBATTLELEVELS under SHAREWARE)"
note: "Shareware comm-bat level data."
+217
View File
@@ -0,0 +1,217 @@
emulator: Xash3D FWGS
type: standalone
core_classification: game_engine
source: "https://github.com/FWGS/xash3d-fwgs"
upstream: "https://github.com/FWGS/xash3d-fwgs"
profiled_date: "2026-10-04"
source_commit: "1414fc281b6dc986378ea7ae35086c62d782a865"
core_version: "0.21+git"
display_name: "Xash3D FWGS"
cores: [xash3d_fwgs]
systems: [halflife, cstrike, czero, czeror, dmc, gearbox, bshift, ricochet, tfc]
notes: |
GoldSrc / Half-Life 1 engine reimplementation by Flying With Gauss.
Game directories are discovered at startup: FS_CheckForXashGameDir
(filesystem/gameinfo.c:611-634) walks each sub-folder of the base path
and keeps the ones that contain gameinfo.txt or liblist.gam.
FS_ParseGenericGameInfo (filesystem/gameinfo.c:231-430) reads the mod
descriptor out of either file: `basedir` names the fallback game
(chained one level, e.g. czeror -> czero -> cstrike -> valve, see
filesystem/searchpath.c:327), `fallback_dir` names a second fallback,
and `game` / `gamename` carry the human-readable title.
Each supported mod's data is a Valve-style game folder with its own
pak0.pak / pak1.pak, maps/, models/, sound/, overviews/ and a game
descriptor. The engine does not hash any file; the pak header is the
only sanity check (filesystem/pak.c). liblist.gam ships inside each
retail mod and is also written out by the engine as gameinfo.txt the
first time it imports a Valve folder (filesystem/gameinfo.c:538-544).
A Quake-engine game dir is recognised separately by
FS_CheckForQuakeGameDir (filesystem/gameinfo.c:578-603), which looks
for pak0.pak + progs.dat / quake.rc; Xash3D FWGS can run Quake 1 total
conversions this way.
Below are the folders Half-Life retail / official addon releases
install under the Steam install root. Each entry marks the per-mod
descriptor and base pak so the engine can detect the game; map / model
/ sound trees that live beside them are too open-ended to enumerate
and are counted as part of the same game data.
files:
# ================================================================
# Half-Life (valve/) — base game, chained parent of every HL1 mod
# ================================================================
- name: "liblist.gam"
category: game_data
system: halflife
path: "valve/liblist.gam"
required: true
source_ref: "filesystem/gameinfo.c:617 (gamedir probe), 538-544 (liblist.gam -> gameinfo.txt conversion), 695 (parser)"
note: "Game descriptor shipped with retail Half-Life. Engine converts it to gameinfo.txt on first run."
- name: "pak0.pak"
category: game_data
system: halflife
path: "valve/pak0.pak"
required: true
source_ref: "filesystem/pak.c (PAK loader), filesystem/searchpath.c:912 (valve fallback)"
note: "Retail Half-Life base pak."
- name: "pak1.pak"
category: game_data
system: halflife
path: "valve/pak1.pak"
required: false
source_ref: "filesystem/pak.c"
note: "Patch pak, present on Steam Half-Life installs."
# ================================================================
# Counter-Strike 1.6 (cstrike/)
# ================================================================
- name: "liblist.gam"
category: game_data
system: cstrike
path: "cstrike/liblist.gam"
required: true
source_ref: "filesystem/gameinfo.c:617, filesystem/searchpath.c:327 (cstrike -> valve chain)"
note: "Declares fallback_dir \"valve\". Counter-Strike 1.6 retail descriptor."
- name: "pak0.pak"
category: game_data
system: cstrike
path: "cstrike/pak0.pak"
required: false
source_ref: "filesystem/pak.c"
note: "Loose files (maps/, sprites/, sound/, models/) are the usual retail layout; a bundled pak0.pak is optional."
# ================================================================
# Condition Zero (czero/)
# ================================================================
- name: "liblist.gam"
category: game_data
system: czero
path: "czero/liblist.gam"
required: true
source_ref: "filesystem/searchpath.c:327 (czero -> cstrike -> valve chain)"
- name: "pak0.pak"
category: game_data
system: czero
path: "czero/pak0.pak"
required: false
source_ref: "filesystem/pak.c"
# ================================================================
# Condition Zero: Deleted Scenes (czeror/)
# ================================================================
- name: "liblist.gam"
category: game_data
system: czeror
path: "czeror/liblist.gam"
required: true
source_ref: "filesystem/searchpath.c:327 (czeror -> czero -> cstrike -> valve chain)"
- name: "pak0.pak"
category: game_data
system: czeror
path: "czeror/pak0.pak"
required: false
source_ref: "filesystem/pak.c"
# ================================================================
# Deathmatch Classic (dmc/)
# ================================================================
- name: "liblist.gam"
category: game_data
system: dmc
path: "dmc/liblist.gam"
required: true
source_ref: "filesystem/gameinfo.c:617"
- name: "pak0.pak"
category: game_data
system: dmc
path: "dmc/pak0.pak"
required: false
source_ref: "filesystem/pak.c"
# ================================================================
# Opposing Force (gearbox/)
# ================================================================
- name: "liblist.gam"
category: game_data
system: gearbox
path: "gearbox/liblist.gam"
required: true
source_ref: "filesystem/gameinfo.c:617"
note: "Gearbox folder is the retail Opposing Force game dir."
- name: "pak0.pak"
category: game_data
system: gearbox
path: "gearbox/pak0.pak"
required: false
source_ref: "filesystem/pak.c"
# ================================================================
# Blue Shift (bshift/)
# Half-Life source dir still called "bshift" in Steam depot.
# ================================================================
- name: "liblist.gam"
category: game_data
system: bshift
path: "bshift/liblist.gam"
required: true
source_ref: "filesystem/gameinfo.c:617"
- name: "pak0.pak"
category: game_data
system: bshift
path: "bshift/pak0.pak"
required: false
source_ref: "filesystem/pak.c"
# ================================================================
# Ricochet (ricochet/)
# ================================================================
- name: "liblist.gam"
category: game_data
system: ricochet
path: "ricochet/liblist.gam"
required: true
source_ref: "filesystem/gameinfo.c:617"
- name: "pak0.pak"
category: game_data
system: ricochet
path: "ricochet/pak0.pak"
required: false
source_ref: "filesystem/pak.c"
# ================================================================
# Team Fortress Classic (tfc/)
# ================================================================
- name: "liblist.gam"
category: game_data
system: tfc
path: "tfc/liblist.gam"
required: true
source_ref: "filesystem/gameinfo.c:617"
- name: "pak0.pak"
category: game_data
system: tfc
path: "tfc/pak0.pak"
required: false
source_ref: "filesystem/pak.c"
+104
View File
@@ -0,0 +1,104 @@
emulator: Yamagi Quake II
type: standalone
core_classification: game_engine
source: "https://github.com/yquake2/yquake2"
upstream: "https://github.com/yquake2/yquake2"
profiled_date: "2026-10-04"
source_commit: "f190ac496d00ef9238a5f16dd012c6dc81a997c9"
core_version: "8.51+git"
display_name: "Yamagi Quake II"
cores: [yquake2]
systems: [quake2, xatrix, rogue, ctf]
notes: |
Quake II source port. BASEDIRNAME = "baseq2" (src/common/header/common.h
:36). FS_AddDirToSearchPath (src/common/filesystem.c:1646) loops
pak%d.<ext> from 0 to MAX_PAKS-1 (=99) across fs_packtypes = { pak, pk3 }
for the active game directory, loading each one as a protected pak.
retail Quake II ships only pak0.pak and pak1.pak; later paks are
consumed by community mods and the Nightdive remaster.
Supported official mods are listed in first_mods[]
(src/common/filesystem.c:1331) = { "baseq2", "xatrix", "rogue", "ctf" }.
Mod game dirs are selected via the `game` cvar (FS_InitFilesystem +
FS_BuildGameSpecificSearchPath, src/common/filesystem.c:2075-2097).
Each mod ships its own pak0.pak / pak1.pak (The Reckoning, Ground Zero,
Three Wave CTF). Zaero support uses the same path layout (`game zaero`)
but no official repository under the yquake2 org.
The engine never hashes a pak. Validation is "does the pack read as a
valid PAK header" (FS_LoadPAK, src/common/filesystem.c:873). Missing
files produce "Couldn't load %s" at Com_Error level only for the
baseq2 lookup when the game cannot find any game assets at all.
Background music is streamed from <game>/music/track02.ogg ... track22.ogg
by OGG_InitTrackList (src/client/sound/ogg.c), not required for gameplay.
files:
# ================================================================
# Quake II (baseq2/)
# Retail v3.20 ships pak0.pak (max 2 GiB PAK, holds everything) and
# pak1.pak (demo-related). Patched installations may add pak2.pak+.
# ================================================================
- name: "pak0.pak"
category: game_data
system: quake2
path: "baseq2/pak0.pak"
required: true
source_ref: "src/common/filesystem.c:1688 (pak%d.%s scan), 36 (BASEDIRNAME), 1331 (first_mods[0]=baseq2)"
note: "Retail Quake II data pak. Not hash-validated."
- name: "pak1.pak"
category: game_data
system: quake2
path: "baseq2/pak1.pak"
required: false
source_ref: "src/common/filesystem.c:1688"
- name: "pak2.pak"
category: game_data
system: quake2
path: "baseq2/pak2.pak"
required: false
source_ref: "src/common/filesystem.c:1688"
note: "Added by community re-releases and the KMQuake2 content pack."
# ================================================================
# The Reckoning (xatrix/) — official Mission Pack 1
# Separate yquake2 game library repo: yquake2/xatrix.
# ================================================================
- name: "pak0.pak"
category: game_data
system: xatrix
path: "xatrix/pak0.pak"
required: false
source_ref: "src/common/filesystem.c:1331 (first_mods[1]=xatrix), 1688"
note: "The Reckoning data. Loaded when `+set game xatrix` is passed."
# ================================================================
# Ground Zero (rogue/) — official Mission Pack 2
# Separate yquake2 game library repo: yquake2/rogue.
# ================================================================
- name: "pak0.pak"
category: game_data
system: rogue
path: "rogue/pak0.pak"
required: false
source_ref: "src/common/filesystem.c:1331 (first_mods[2]=rogue), 1688"
note: "Ground Zero data. Loaded when `+set game rogue` is passed."
# ================================================================
# Three Wave Capture The Flag (ctf/) — official free addon
# Separate yquake2 game library repo: yquake2/ctf.
# ================================================================
- name: "pak0.pak"
category: game_data
system: ctf
path: "ctf/pak0.pak"
required: false
source_ref: "src/common/filesystem.c:1331 (first_mods[3]=ctf), 1688"
note: "Three Wave CTF data. Loaded when `+set game ctf` is passed."