emulator: boom3 type: libretro core_classification: game_engine source: "https://github.com/libretro/boom3" upstream: "https://github.com/dhewm/dhewm3" profiled_date: "2026-03-23" source_commit: "efe140ce8fdf8793f5a6fbba062fb34df7f55a81" upstream_commit: "455b88e8dff2be822f08eb498f51b383e851fa38" core_version: "git" display_name: "Doom 3 (boom3)" cores: [boom3, boom3_xp] systems: [doom3] verification: existence 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. Builds 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. files: - name: "pak399.pk4" path: "base_vr/pak399.pk4" system: doom3 category: game_data load_from: content_dir required: false description: "VR hand and weapon models (Doom3Quest), mounted over base/" source_ref: "neo/sys/libretro/libretro.cpp:4313-4335, neo/framework/FileSystem.cpp:2440-2450" 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." - name: "pak399roe.pk4" path: "d3xp_vr/pak399roe.pk4" system: doom3 category: game_data load_from: content_dir required: false description: "VR replacement pack for Resurrection of Evil, mounted over d3xp/" source_ref: "neo/framework/FileSystem.cpp:2465-2472" 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."