OpenJKDF2 - RetroBIOS¶
Technical 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\<name>.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.
23 files | 17 required, 6 optional | 5 in repo, 18 missing Categories: 23 game data
JK1.gob required missing game_data
- Path:
openjkdf2/episode/JK1.gob - System: dark-forces-ii
- Source:
src/Main/InstallHelper.c:34 - Single-player episode data.
JK1CTF.gob required missing game_data
- Path:
openjkdf2/episode/JK1CTF.gob - System: dark-forces-ii
- Source:
src/Main/InstallHelper.c:35 - Multiplayer CTF episode.
JK1MP.gob required missing game_data
- Path:
openjkdf2/episode/JK1MP.gob - System: dark-forces-ii
- Source:
src/Main/InstallHelper.c:36 - Multiplayer deathmatch episode. Default -episode value in Main.c:120.
Res1hi.gob required missing game_data
- Path:
openjkdf2/resource/Res1hi.gob - System: dark-forces-ii
- Source:
src/Main/InstallHelper.c:37 - High-resolution textures and sprites.
Res2.gob required missing game_data
- Path:
openjkdf2/resource/Res2.gob - System: dark-forces-ii
- Source:
src/Main/InstallHelper.c:38 - Shared engine resources: sounds, 3DOs, materials.
jk_.cd required in repo game_data
- Path:
openjkdf2/resource/jk_.cd - System: dark-forces-ii
- Source:
src/Main/InstallHelper.c:39,src/Main/InstallHelper.c:764-769,src/Main/InstallHelper.c:1334-1336,src/engine_config.h:263 - 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.
jk1demo.gob optional in repo game_data
- Path:
openjkdf2/episode/jk1demo.gob - System: dark-forces-ii
- Source:
src/Main/InstallHelper.c:654,src/Main/InstallHelper.c:841 - Single-player episode of the demo, copied by the install helper when present.
jk1mpdem.gob optional in repo game_data
- Path:
openjkdf2/episode/jk1mpdem.gob - System: dark-forces-ii
- Aliases:
jk1mpdemo.gob - Source:
src/Main/InstallHelper.c:655-656,src/Main/InstallHelper.c:842-843 - Multiplayer episode of the demo. The install helper copies it under either name.
res1demo.gob optional in repo game_data
- Path:
openjkdf2/resource/res1demo.gob - System: dark-forces-ii
- Source:
src/Main/InstallHelper.c:657,src/Main/InstallHelper.c:844 - Resources of the demo, copied by the install helper when present.
Res1low.gob optional missing game_data
- Path:
openjkdf2/resource/Res1low.gob - System: dark-forces-ii
- Source:
src/Main/InstallHelper.c:71 - Low-resolution textures shipped on the CD under MININSTALL/.
JK.EXE optional missing game_data
- System: dark-forces-ii
- Source:
src/main.c:696-718,src/Main/InstallHelper.c:494 - 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.
JKM.goo required missing game_data
- Path:
openjkmots/episode/JKM.goo - System: mysteries-of-the-sith
- Source:
src/Main/InstallHelper.c:48 - Main MoTS single-player episode.
JKM_KFY.goo required missing game_data
- Path:
openjkmots/episode/JKM_KFY.goo - System: mysteries-of-the-sith
- Source:
src/Main/InstallHelper.c:45
JKM_MP.goo required missing game_data
- Path:
openjkmots/episode/JKM_MP.goo - System: mysteries-of-the-sith
- Source:
src/Main/InstallHelper.c:46
JKM_SABER.goo required missing game_data
- Path:
openjkmots/episode/JKM_SABER.goo - System: mysteries-of-the-sith
- Source:
src/Main/InstallHelper.c:47
Jkmres.goo required missing game_data
- Path:
openjkmots/resource/Jkmres.goo - System: mysteries-of-the-sith
- Source:
src/Main/InstallHelper.c:49 - Shared MoTS engine resources.
JKMsndLO.goo required missing game_data
- Path:
openjkmots/resource/JKMsndLO.goo - System: mysteries-of-the-sith
- Source:
src/Main/InstallHelper.c:50 - Low-quality sound bank (MININSTALL/JKMSNDLO.GOO on the CD).
jk_.cd required in repo game_data
- Path:
openjkmots/resource/jk_.cd - System: mysteries-of-the-sith
- Source:
src/Main/InstallHelper.c:51,src/Main/InstallHelper.c:1318-1320,src/Main/jkRes.c:232-235,src/engine_config.h:267-270 - 4-byte marker holding 0x3B426929. InstallHelper_SetCwd reads it at startup and enables Mysteries of the Sith mode when it finds that value.
JKM.EXE optional missing game_data
- System: mysteries-of-the-sith
- Source:
src/main.c:696-718,src/Main/InstallHelper.c:495 - MoTS retail executable, used only by the 32-bit static-recomp build.
dwCD.GOB required missing game_data
- System: droidworks
- Source:
src/Main/InstallHelper.c:58,src/Dw/dwInits.cpp:67-93 - CD-image data archive, mounted by dwGob.
dwHD.GOB required missing game_data
- System: droidworks
- Source:
src/Main/InstallHelper.c:59,src/Dw/dwInits.cpp:67-93 - Hard-drive install archive.
dwMin.GOB required missing game_data
- System: droidworks
- Source:
src/Main/InstallHelper.c:60,src/Dw/dwInits.cpp:67-93 - Minimum-install archive.
dwStream.GOB required missing game_data
- System: droidworks
- Source:
src/Main/InstallHelper.c:61,src/Dw/dwInits.cpp:93 - Streamed WAV audio, listed only in the WAV ext search path.
Generated on 2026-10-10T11:26:01Z