{
  "commit": "d38cd580364b2c788e633b9e51c15e1668f726c0",
  "count": 1,
  "generated_at": "2026-11-03T13:36:34Z",
  "items": [
    {
      "id": "boom3",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "1.5.5",
        "cores": [
          "boom3",
          "boom3_xp"
        ],
        "display_name": "Doom 3 (boom3)",
        "emulator": "boom3",
        "files": [
          {
            "category": "game_data",
            "description": "VR hand and weapon models (Doom3Quest), mounted over base/",
            "load_from": "content_dir",
            "name": "pak399.pk4",
            "note": "Read in VR builds with boom3_vr_enable on. base_vr/ sits beside base/, one level above the loaded .pk4. When the file is absent the core shows a notification and the game still starts.",
            "path": "base_vr/pak399.pk4",
            "required": false,
            "source_ref": "neo/sys/libretro/libretro.cpp:4313-4335, neo/framework/FileSystem.cpp:2440-2450",
            "system": "doom3"
          },
          {
            "category": "game_data",
            "description": "VR replacement pack for Resurrection of Evil, mounted over d3xp/",
            "load_from": "content_dir",
            "name": "pak399roe.pk4",
            "note": "Mounted in VR builds when fs_game is d3xp. The code reads every .pk4 in d3xp_vr/ and names none, this is the pack the core's repository ships for it.",
            "path": "d3xp_vr/pak399roe.pk4",
            "required": false,
            "source_ref": "neo/framework/FileSystem.cpp:2465-2472",
            "system": "doom3"
          }
        ],
        "notes": "Doom 3 source port based on dhewm3 (GPL Doom 3 engine). The core accepts .pk4 extensions (retro_get_system_info sets valid_extensions = \"pk4\"). Content is loaded directly from the .pk4 file path - the engine extracts the grandparent directory as fs_basepath (neo/sys/libretro/libretro.cpp:4242,4310-4311 via extract_directory called twice on info->path) and expects the standard Doom 3 directory layout with base/ containing pak000.pk4 through pak008.pk4. BASE_GAMEDIR is \"base\" (neo/framework/Licensee.h:58), and content in a directory under another name is mounted in its place through fs_gamedirname (neo/sys/libretro/libretro.cpp:3248-3262). One binary serves both games: content in a directory named d3xp, or the doom_game core option, passes \"+set fs_game d3xp\" (neo/sys/libretro/libretro.cpp:3238-3246,4245-4271) to load the Resurrection of Evil expansion from a d3xp/ subdirectory alongside base/. The filesystem code (neo/framework/FileSystem.cpp:2318) scans for .pk4 files in the game directory and loads them in order, with higher-numbered paks overriding lower ones. The core requires OpenGL (RETRO_ENVIRONMENT_SET_HW_RENDER) and XRGB8888 pixel format. The game data is the commercial Doom 3 release, not engine firmware. No BIOS or system files are needed in the RetroArch system directory.\nBuilds made with HAVE_VR=1 (the Windows x64, Linux x64 and Linux arm64 jobs, .gitlab-ci.yml:87, 101, 109) offer the boom3_vr_enable option. With it on, the core passes \"+set fs_vr 1\" and the filesystem mounts base_vr/ over base/ and d3xp_vr/ over d3xp/ (neo/sys/libretro/libretro.cpp:3264-3272, neo/framework/FileSystem.cpp:2440-2472). These replacement packs carry the hand and weapon models of Doom3Quest and ship in the core's repository under tools/vr_paks/compiled.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/boom3",
        "source_commit": "efe140ce8fdf8793f5a6fbba062fb34df7f55a81",
        "systems": [
          "doom3"
        ],
        "type": "libretro",
        "upstream": "https://github.com/dhewm/dhewm3",
        "upstream_commit": "455b88e8dff2be822f08eb498f51b383e851fa38",
        "verification": "existence",
        "version_basis": {
          "kind": "file",
          "path": "neo/framework/Licensee.h",
          "pattern": "#define\\s+ENGINE_VERSION\\s+\"dhewm3 ([^\"]+)\""
        }
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
