{
  "count": 1,
  "generated_at": "2026-10-20T02:57:31Z",
  "items": [
    {
      "id": "vkquake2",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "1.5.10",
        "cores": [
          "vkquake2"
        ],
        "display_name": "Quake II (vkQuake2)",
        "emulator": "vkQuake2",
        "files": [
          {
            "category": "game_data",
            "name": "pak0.pak",
            "note": "Retail Quake II data. Not hash-checked.",
            "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)",
            "system": "quake2"
          },
          {
            "category": "game_data",
            "name": "pak1.pak",
            "note": "Shipped by the 3.20 point release.",
            "path": "baseq2/pak1.pak",
            "required": false,
            "source_ref": "qcommon/files.c:537-542",
            "system": "quake2"
          },
          {
            "category": "game_data",
            "name": "pak2.pak",
            "note": "Shipped by the 3.20 point release.",
            "path": "baseq2/pak2.pak",
            "required": false,
            "source_ref": "qcommon/files.c:537-542",
            "system": "quake2"
          },
          {
            "category": "game_data",
            "name": "pak0.pak",
            "note": "The Reckoning data. Loaded with `+set game xatrix`.",
            "path": "xatrix/pak0.pak",
            "required": false,
            "source_ref": "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542",
            "system": "xatrix",
            "unsourceable": "retail data the collection does not hold, and a same-named file of another game must not stand in"
          },
          {
            "category": "game_data",
            "name": "pak0.pak",
            "note": "Ground Zero data. Loaded with `+set game rogue`.",
            "path": "rogue/pak0.pak",
            "required": false,
            "source_ref": "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542",
            "system": "rogue",
            "unsourceable": "retail data the collection does not hold, and a same-named file of another game must not stand in"
          },
          {
            "category": "game_data",
            "name": "pak0.pak",
            "note": "Three Wave CTF data from the 3.20 point release. Loaded with `+set game ctf`.",
            "path": "ctf/pak0.pak",
            "required": false,
            "source_ref": "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542",
            "system": "ctf"
          },
          {
            "category": "game_data",
            "name": "pak0.pak",
            "note": "Zaero data. Loaded with `+set game zaero`.",
            "path": "zaero/pak0.pak",
            "required": false,
            "source_ref": "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542",
            "system": "quake2",
            "unsourceable": "data the collection does not hold, and a same-named file of another game must not stand in"
          },
          {
            "category": "game_data",
            "name": "pak0.pak",
            "note": "Slight Mechanical Destruction data. Loaded with `+set game smd`.",
            "path": "smd/pak0.pak",
            "required": false,
            "source_ref": "qcommon/files.c:878-880 (game cvar), 640 (game dir mounted), 537-542",
            "system": "quake2",
            "unsourceable": "data the collection does not hold, and a same-named file of another game must not stand in"
          }
        ],
        "notes": "Quake II 3.21 with a Vulkan renderer. VERSION 3.21, VKQUAKE2_VERSION\n\"1.5.10\", BASEDIRNAME = \"baseq2\" (qcommon/qcommon.h:26-30).\n\nFS_InitFilesystem reads the basedir cvar, default \".\", and mounts\n<basedir>/baseq2 (qcommon/files.c:858, 872). A non-empty game cvar adds\n<basedir>/<game> on top (qcommon/files.c:878-880, 640).\nFS_AddGameDirectory tries pak0.pak through pak9.pak in each directory and\nskips an index that does not open (qcommon/files.c:537-542).\n\nFS_LoadPackFile computes a checksum of the pak directory, but the\ncomparison against PAK0_CHECKSUM only runs with NO_ADDONS, which is\ncommented out (qcommon/files.c:24, 28, 484-489). No pak is rejected for\nits contents. The Vulkan renderer, vid_ref default \"vk\"\n(linux/vid_so.c:448), stops with ERR_FATAL when pics/colormap.pcx is\nmissing (ref_vk/vk_image.c:1640-1642). That file is in baseq2/pak0.pak.\n\nBatocera 43.1 copies /usr/bin/vkquake2 (binary, ref_*.so and the game\nlibraries of baseq2, ctf, rogue, smd, xatrix, zaero) into\n/userdata/roms/quake2, changes to that directory and runs ./quake2, with\n`+set game rogue|xatrix|zaero|smd` chosen from the ROM name (configgen\ngenerators/vkquake2/vkquake2Generator.py). The basedir is therefore\n/userdata/roms/quake2.\n\nMusic is read from <gamedir>/music/trackNN.ogg, .flac, .mp3 or .wav,\nthen from baseq2/music/ (client/snd_miniaudio.c:215-220, 241-246).\n",
        "profiled_date": "2026-10-17",
        "source": "https://github.com/kondrak/vkQuake2",
        "source_commit": "5bf9c012024884234df0f63c615daec0c740def7",
        "systems": [
          "quake2",
          "xatrix",
          "rogue",
          "ctf"
        ],
        "type": "standalone",
        "upstream": "https://github.com/id-Software/Quake-2"
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
