emulator: OpenJKDF2 type: standalone core_classification: game_engine source: "https://github.com/shinyquagsire23/OpenJKDF2" upstream: "https://github.com/shinyquagsire23/OpenJKDF2" profiled_date: "2026-10-04" source_commit: "02297602cb289b113df27be33b5a7dddbe3d91c1" core_version: "0.9.9.0" display_name: "OpenJKDF2" cores: [] systems: - dark-forces-ii - mysteries-of-the-sith - droidworks notes: | Reimplementation of LucasArts' Sith engine. Runs Star Wars Jedi Knight: Dark Forces II (1997), its Mysteries of the Sith expansion (1998) with the `-motsCompat` switch, and Star Wars DroidWorks (1998) via the DroidWorks branch of the build. Resource mounting (src/Main/jkRes.c): aGobDirectories[3] "resource" root, auto-mounted at startup (src/Main/jkRes.c:37 jkRes_LoadNew) aGobDirectories[1] "episode\.gob" / ".goo" for the active episode, mounted by jkRes_LoadGob (src/Main/jkRes.c:103-106) aGobDirectories[4] gamedata\resource (CD overlay), mounted by jkRes_LoadCd (src/Main/jkRes.c:130-131) The asset root is the working directory when it holds resource/jk_.cd, else the per-user data directory, whose last component is openjkdf2, openjkmots or opendroidworks (src/Main/InstallHelper.c:97, src/Main/InstallHelper.c:239-270). Paths below are written under that component. jkRes_LoadNew mounts every .gob (.goo in Mysteries of the Sith mode) of resource/ (src/Main/jkRes.c:287-300) and jkEpisode lists every one of episode/ (src/Main/jkEpisode.c:106). Required-asset lists are declared in src/Main/InstallHelper.c and checked by InstallHelper_CheckInstalled / AttemptInstallFromExisting; a missing entry aborts installation (src/Main/InstallHelper.c:748-756, 1091-1097, 1229-1256). JK.EXE / JKM.EXE are only consumed by the 32-bit static-recomp build (src/main.c:696-718, gated by `!ARCH_64BIT && !ARCH_WASM && !TARGET_ANDROID`), which mmaps the retail binary at 0x400000 and patches it via do_hooks(). The 64-bit, WASM and Android builds skip that path and do not read JK.EXE at all. files: # ================================================================ # Jedi Knight: Dark Forces II (base game) # ================================================================ - name: "JK1.gob" path: "openjkdf2/episode/JK1.gob" system: dark-forces-ii category: game_data required: true source_ref: "src/Main/InstallHelper.c:34 (aRequiredAssets)" note: "Single-player episode data." - name: "JK1CTF.gob" path: "openjkdf2/episode/JK1CTF.gob" system: dark-forces-ii category: game_data required: true source_ref: "src/Main/InstallHelper.c:35 (aRequiredAssets)" note: "Multiplayer CTF episode." - name: "JK1MP.gob" path: "openjkdf2/episode/JK1MP.gob" system: dark-forces-ii category: game_data required: true source_ref: "src/Main/InstallHelper.c:36 (aRequiredAssets)" note: "Multiplayer deathmatch episode. Default -episode value in Main.c:120." - name: "Res1hi.gob" path: "openjkdf2/resource/Res1hi.gob" system: dark-forces-ii category: game_data required: true source_ref: "src/Main/InstallHelper.c:37 (aRequiredAssets)" note: "High-resolution textures and sprites." - name: "Res2.gob" path: "openjkdf2/resource/Res2.gob" system: dark-forces-ii category: game_data required: true source_ref: "src/Main/InstallHelper.c:38 (aRequiredAssets)" note: "Shared engine resources: sounds, 3DOs, materials." - name: "jk_.cd" path: "openjkdf2/resource/jk_.cd" system: dark-forces-ii category: game_data required: true source_ref: "src/Main/InstallHelper.c:39 (aRequiredAssets), src/Main/InstallHelper.c:764-769, src/Main/InstallHelper.c:1334-1336, src/engine_config.h:263" note: | 4-byte marker. The install helper writes JKRES_MAGIC_1 into it once the assets are copied, 0x699232C4 for this game. At startup a missing marker sends the engine to the required-asset check. - name: "jk1demo.gob" path: "openjkdf2/episode/jk1demo.gob" system: dark-forces-ii category: game_data required: false source_ref: "src/Main/InstallHelper.c:654, src/Main/InstallHelper.c:841" note: "Single-player episode of the demo, copied by the install helper when present." - name: "jk1mpdem.gob" path: "openjkdf2/episode/jk1mpdem.gob" aliases: ["jk1mpdemo.gob"] system: dark-forces-ii category: game_data required: false source_ref: "src/Main/InstallHelper.c:655-656, src/Main/InstallHelper.c:842-843" note: "Multiplayer episode of the demo. The install helper copies it under either name." - name: "res1demo.gob" path: "openjkdf2/resource/res1demo.gob" system: dark-forces-ii category: game_data required: false source_ref: "src/Main/InstallHelper.c:657, src/Main/InstallHelper.c:844" note: "Resources of the demo, copied by the install helper when present." - name: "Res1low.gob" path: "openjkdf2/resource/Res1low.gob" system: dark-forces-ii category: game_data required: false source_ref: "src/Main/InstallHelper.c:71 (aDiskAssetMap)" note: "Low-resolution textures shipped on the CD under MININSTALL/." - name: "JK.EXE" system: dark-forces-ii category: game_data required: false source_ref: "src/main.c:696-718, src/Main/InstallHelper.c:494 (aInstallOptionalAssets)" note: | Retail executable mmap'd at 0x400000 and patched by do_hooks() in the 32-bit static-recomp build. Not read by the 64-bit, WASM or Android builds. # ================================================================ # Mysteries of the Sith (expansion, -motsCompat) # ================================================================ - name: "JKM.goo" path: "openjkmots/episode/JKM.goo" system: mysteries-of-the-sith category: game_data required: true source_ref: "src/Main/InstallHelper.c:48 (aRequiredAssetsMots)" note: "Main MoTS single-player episode." - name: "JKM_KFY.goo" path: "openjkmots/episode/JKM_KFY.goo" system: mysteries-of-the-sith category: game_data required: true source_ref: "src/Main/InstallHelper.c:45 (aRequiredAssetsMots)" - name: "JKM_MP.goo" path: "openjkmots/episode/JKM_MP.goo" system: mysteries-of-the-sith category: game_data required: true source_ref: "src/Main/InstallHelper.c:46 (aRequiredAssetsMots)" - name: "JKM_SABER.goo" path: "openjkmots/episode/JKM_SABER.goo" system: mysteries-of-the-sith category: game_data required: true source_ref: "src/Main/InstallHelper.c:47 (aRequiredAssetsMots)" - name: "Jkmres.goo" path: "openjkmots/resource/Jkmres.goo" system: mysteries-of-the-sith category: game_data required: true source_ref: "src/Main/InstallHelper.c:49 (aRequiredAssetsMots)" note: "Shared MoTS engine resources." - name: "JKMsndLO.goo" path: "openjkmots/resource/JKMsndLO.goo" system: mysteries-of-the-sith category: game_data required: true source_ref: "src/Main/InstallHelper.c:50 (aRequiredAssetsMots)" note: "Low-quality sound bank (MININSTALL/JKMSNDLO.GOO on the CD)." - name: "jk_.cd" path: "openjkmots/resource/jk_.cd" system: mysteries-of-the-sith category: game_data required: true source_ref: "src/Main/InstallHelper.c:51 (aRequiredAssetsMots), src/Main/InstallHelper.c:1318-1320, src/Main/jkRes.c:232-235, src/engine_config.h:267-270" note: | 4-byte marker holding 0x3B426929. InstallHelper_SetCwd reads it at startup and enables Mysteries of the Sith mode when it finds that value. - name: "JKM.EXE" system: mysteries-of-the-sith category: game_data required: false source_ref: "src/main.c:696-718, src/Main/InstallHelper.c:495 (aInstallOptionalAssets)" note: "MoTS retail executable, used only by the 32-bit static-recomp build." # ================================================================ # Star Wars DroidWorks (Main_bDroidWorks branch) # ================================================================ - name: "dwCD.GOB" system: droidworks category: game_data required: true source_ref: "src/Main/InstallHelper.c:58 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:67-93" note: "CD-image data archive, mounted by dwGob." - name: "dwHD.GOB" system: droidworks category: game_data required: true source_ref: "src/Main/InstallHelper.c:59 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:67-93" note: "Hard-drive install archive." - name: "dwMin.GOB" system: droidworks category: game_data required: true source_ref: "src/Main/InstallHelper.c:60 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:67-93" note: "Minimum-install archive." - name: "dwStream.GOB" system: droidworks category: game_data required: true source_ref: "src/Main/InstallHelper.c:61 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:93" note: "Streamed WAV audio, listed only in the WAV ext search path."