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 a game descriptor, maps/, models/, sound/, overviews/ and any number of .pak archives. FS_AddGameDirectory mounts every .pak of the folder, then every .pk3, .pk3dir and .wad, each kind in sorted name order and each above the previous one, then the folder itself on top, so loose files win over packed ones (filesystem/searchpath.c:188-224). No archive name is required. The engine does not hash any file; the pak header is the only sanity check (filesystem/pak.c:98-157). 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. The descriptor is what makes the engine detect a folder (filesystem/gameinfo.c:614-630); the pak entries name the archives the retail releases ship. 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: false source_ref: "filesystem/searchpath.c:188-224, filesystem/pak.c:98-157" note: "Half-Life game data packed in one archive, as the CD and WON releases install it. The engine mounts whatever .pak the folder holds and requires none: the Steam depot ships valve/ as loose files with no .pak, and the game runs from those." unsourceable: "The WON Linux dedicated servers 1.0.0.9 to 3.1.1.1 carry a server-only valve/pak0.pak (65022757, 47500556 or 33772308 bytes, at most 1035 entries: multiplayer maps, models, sounds, sprites and skies, with no single-player map, gfx/shell or sound/vox), not the client archive of the CD and WON releases." - name: "pak1.pak" category: game_data system: halflife path: "valve/pak1.pak" required: false source_ref: "filesystem/searchpath.c:188-224, filesystem/pak.c:98-157" note: "Mounted above pak0.pak when present, as any second .pak of the folder would be. The only valve/pak1.pak released is the one the Blue Shift High Definition Pack installer writes (7839196 bytes, 99 entries: HD models, sounds and sprites for Half-Life); Steam ships no .pak in valve/." unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" # ================================================================ # 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." 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: 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." unsourceable: "The Linux dedicated servers hlds_l 1.1.2.0 and hlds_l_11262003 ship cstrike/ as loose files with no .pak." # ================================================================ # 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)" 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: czero path: "czero/pak0.pak" required: false source_ref: "filesystem/pak.c" unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" # ================================================================ # 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)" 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: czeror path: "czeror/pak0.pak" required: false source_ref: "filesystem/pak.c" unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" # ================================================================ # 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" unsourceable: "The Linux dedicated servers that carry dmc/ (hlds_l 3.1.1.1 and 1.1.2.0) ship it as loose files with no .pak, and none of the WON patches checked carries a dmc/pak0.pak." # ================================================================ # 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" unsourceable: "The free 1.1.0.8 WON patch ofo1108.exe installs a gearbox/pak0.pak of 83750141 bytes (sha1 aefbe228c010ade60e73d1ddf1f9b2878090b596) holding 514 entries with the 25 multiplayer maps and none of the of0a0 to of7a single-player maps, and the free Linux server opfor_linux.tar.gz carries a 529-entry multiplayer-only pak of 74390909 bytes, so neither is the client archive of the retail release." # ================================================================ # 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" 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: bshift path: "bshift/pak0.pak" required: false source_ref: "filesystem/pak.c" unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in" # ================================================================ # 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" unsourceable: "The Linux dedicated servers that carry ricochet/ (hlds_l 3.1.1.1 and 1.1.2.0) ship it as loose files with no .pak, and none of the WON patches checked carries a ricochet/pak0.pak." # ================================================================ # 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"