emulator: devilutionx type: standalone core_classification: game_engine source: "https://github.com/diasurgical/DevilutionX" upstream: ~ profiled_date: "2026-10-04" source_commit: "dac104babfb6187415432f428ac2516747ffc154" core_version: "1.6.0-dev" display_name: "Diablo (DevilutionX)" cores: [devilutionx] systems: [diablo] verification: md5 notes: | DevilutionX is a reimplementation of the Diablo 1 engine built from the leaked Diablo source. It plays the original retail Diablo and the Hellfire expansion from their shipped MPQ archives, or the shareware Spawn edition. The code loads MPQs from the game folder (next to the executable) and from a few platform-specific locations (XDG data home, macOS Application Support, etc.) via GetMPQSearchPaths(). Load order is defined in Source/engine/assets.cpp: LoadCoreArchives() (:505) - devilutionx.mpq, fonts.mpq (optional) LoadLanguageArchive() (:521) - .mpq, skipped for "en" LoadGameArchives() (:530) - diabdat.mpq or spawn.mpq (required) hfbard.mpq, hfbarb.mpq (always probed) LoadHellfireArchives() (:570) - hellfire.mpq + hfmonk/hfmusic/hfvoice LoadModArchives() (:703) - mods/.mpq for each active mod diabdat.mpq is matched uppercase first ("DIABDAT.MPQ", GOG/retail CD convention, line 538), then lowercase (line 542); if neither is found the loader falls back to spawn.mpq (line 544). Missing BOTH triggers the "diabdat.mpq or spawn.mpq" InsertCDDlg dialog and the game cannot start. Hellfire is optional: the engine advertises Diablo even when hellfire files are absent. If hellfire.mpq is loaded, hfmonk.mpq + hfmusic.mpq + hfvoice.mpq must also be present (line 588) or the game aborts. devilutionx.mpq is a build artefact packed from the repo's assets/ directory with the smpq tool (CMake option BUILD_ASSETS_MPQ, CMakeLists.txt:192-204). The compiled binary expects it next to the executable on every platform except Android, Apple and 3DS/Switch (:509-516), where its contents are shipped loose. After loading the core archives the engine reads the asset ASSETS_VERSION and aborts with "Failed to load UI resources" unless its content is "1\n" (Source/init.cpp:54, 79-85, Source/diablo.cpp:1225-1239). The same test on fonts\VERSION applies to fonts.mpq when it is loaded (Source/init.cpp:98-114). fonts.mpq is the CJK + language assets add-on from the devilutionx-assets release; English installs do not need it. files: - name: diabdat.mpq path: devilutionx/diabdat.mpq system: diablo category: game_data required: true description: "Diablo retail or GOG MPQ (contains all game data)" aliases: [DIABDAT.MPQ] note: "primary game archive; GOG CD convention uses uppercase" source_ref: "Source/engine/assets.cpp:537-542" - name: spawn.mpq path: devilutionx/spawn.mpq system: diablo category: game_data required: false description: "Diablo shareware archive, used when diabdat.mpq is absent" note: "freely redistributable shareware; triggers gbIsSpawn mode" source_ref: "Source/engine/assets.cpp:544" - name: hellfire.mpq path: devilutionx/hellfire.mpq system: diablo category: game_data required: false description: "Hellfire expansion main archive" source_ref: "Source/engine/assets.cpp:573" - name: hfmonk.mpq path: devilutionx/hfmonk.mpq system: diablo category: game_data required: false description: "Hellfire monk class assets; mandatory when hellfire.mpq is present" source_ref: "Source/engine/assets.cpp:583" - name: hfmusic.mpq path: devilutionx/hfmusic.mpq system: diablo category: game_data required: false description: "Hellfire music; mandatory when hellfire.mpq is present" source_ref: "Source/engine/assets.cpp:584" - name: hfvoice.mpq path: devilutionx/hfvoice.mpq system: diablo category: game_data required: false description: "Hellfire voices; mandatory when hellfire.mpq is present" source_ref: "Source/engine/assets.cpp:585" - name: "hfbard.mpq" path: "devilutionx/hfbard.mpq" system: diablo category: game_data required: false description: "Hellfire bard class assets, loaded when present" source_ref: "Source/engine/assets.cpp:565" - name: "hfbarb.mpq" path: "devilutionx/hfbarb.mpq" system: diablo category: game_data required: false description: "Hellfire barbarian class assets, loaded when present" source_ref: "Source/engine/assets.cpp:566" - name: "devilutionx.mpq" path: "devilutionx/devilutionx.mpq" system: diablo category: game_data required: true description: "Engine assets (UI art, fonts, data tables, Lua scripts) packed from the repository's assets/ directory" note: "Loaded first on every platform except Android, Apple, 3DS and Switch. Its files are also found in an assets/ directory next to the binary when the build installs them loose. The engine aborts when the asset ASSETS_VERSION is absent or is not \"1\\n\"." source_ref: "Source/engine/assets.cpp:509-516, 223-226, Source/init.cpp:79-85, Source/diablo.cpp:1225-1239" - name: "fonts.mpq" path: "devilutionx/fonts.mpq" system: diablo category: game_data required: false description: "CJK and extended-language font pack from devilutionx-assets release" source_ref: "Source/engine/assets.cpp:517" - name: "es.mpq" path: "devilutionx/es.mpq" system: diablo category: game_data required: false description: "Spanish voice pack" note: "The archive named after the selected language code is loaded; English loads none." source_ref: "Source/engine/assets.cpp:521-528" - name: "pl.mpq" path: "devilutionx/pl.mpq" system: diablo category: game_data required: false description: "Polish voice pack" note: "The archive named after the selected language code is loaded; English loads none." source_ref: "Source/engine/assets.cpp:521-528" - name: "ru.mpq" path: "devilutionx/ru.mpq" system: diablo category: game_data required: false description: "Russian voice pack" note: "The archive named after the selected language code is loaded; English loads none." source_ref: "Source/engine/assets.cpp:521-528" - name: "hf.mpq" path: "devilutionx/mods/hf.mpq" system: diablo category: game_data required: false description: "Hellfire mod archive packed from the repository's mods/hf directory" note: "mods/.mpq is opened for each active mod; hf is activated when hellfire.mpq is present. A mod with no archive and no loose directory is served from the core archives." source_ref: "Source/engine/assets.cpp:748-764, Source/options.cpp:77-79, CMakeLists.txt:204"