Files

249 lines
8.3 KiB
YAML

emulator: OpenJazz
type: standalone
core_classification: game_engine
source: "https://github.com/AlisterT/openjazz"
upstream: "https://github.com/AlisterT/openjazz"
profiled_date: "2026-10-04"
source_commit: "a1626f4edd4a7af72c54103021790c56d8ecfced"
core_version: "20260301"
display_name: "Jazz Jackrabbit (OpenJazz)"
cores: []
systems: [jazz-jackrabbit]
notes: |
Open-source reimplementation of Jazz Jackrabbit 1 (Epic MegaGames,
1994). Reads the original DOS game data; no asset bundling in the
engine binary.
File lookup walks a path list (platform paths, command-line paths,
binary directory, working directory, compiled-in DATAPATH) and opens
the first match.
ref: src/io/file.cpp:51-77 (File::File), src/main.cpp:186-220
PANEL.000 is the first file opened at startup; the engine aborts with
"Unable to find game data files" if that probe fails. The five .0FN
fonts follow and abort startup the same way.
ref: src/main.cpp:279-295, src/main.cpp:308-333
Level, tileset, sprite and planet names are built by createFileName():
LEVEL<n>.<world>, BLOCKS.<world>, SPRITES.<world>, PLANET.<world>,
with a three-digit world extension. The episode menu enables an
episode when LEVEL0.<world> exists for its first world (0, 3, 6, 9,
12, 15, then 30, 33, 36 and 50).
ref: src/util.cpp:123-193, src/jj1/jj1episodeutils.cpp:19-36,
src/menu/gamemenu.cpp:557-566
JJ2 engine support is experimental and gated by `ENABLE_JJ2` at build
time (off by default); it reads JJ2's .j2l/.j2t files directly (no
conversion step).
ref: CMakeLists.txt:241-255, src/jj2/level/jj2level.cpp:54-67
files:
# ================================================================
# Required files (startup aborts without them)
# ================================================================
- name: "PANEL.000"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/main.cpp:281 (fatal: \"Unable to find game data files\")"
note: "Status bar sprites plus two embedded fonts. Fatal if absent."
- name: "FONT2.0FN"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/main.cpp:312, 318-333, src/io/gfx/font.cpp:60-64"
note: "Startup font. File::File throws when absent and startup aborts."
- name: "FONTBIG.0FN"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/main.cpp:313, 318-333"
- name: "FONTINY.0FN"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/main.cpp:314, 318-333"
- name: "FONTMN1.0FN"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/main.cpp:315, 318-333"
- name: "FONTMN2.0FN"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/main.cpp:316, 318-333"
- name: "STARTUP.0SC"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/main.cpp:435-443"
note: "Opening cutscene. play() returns the error before the menu when it is absent."
- name: "MENU.000"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/menu/mainmenu.cpp:72-82, src/main.cpp:458-466"
note: "Main menu graphics. The MainMenu constructor throws when it is absent."
- name: "SOUNDS.000"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/io/sound.cpp:278, 478-485"
note: "Digital sound effects. loadSounds returns false when absent and the engine runs without sfx."
- name: "MENUSNG.PSM"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/main.cpp:408, src/io/sound.cpp:337-344"
note: "Menu music. playMusic returns silently when the file is absent."
# ================================================================
# Menu extras (each reports its absence and returns to the menu)
# ================================================================
- name: "INSTRUCT.0SC"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/menu/mainmenu.cpp:177-187"
note: "Instructions screen."
- name: "ORDER.0SC"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/menu/mainmenu.cpp:209-217"
note: "Order information screen."
- name: "MACRO.1"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/menu/mainmenu.cpp:277-289"
note: "Demo recording played when the menu idles. MACRO.1 to MACRO.4 are probed."
- name: "END.0SC"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/main.cpp:479-489"
note: "Cutscene played when the main menu is left."
# ================================================================
# Required when entering gameplay (level load fails without them)
# ================================================================
- name: "FONTS.000"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/io/gfx/font.cpp:288-292, src/jj1/level/jj1levelload.cpp:412-421"
note: "Level font. JJ1Level::load returns the error when it is absent."
- name: "MAINCHAR.000"
category: game_data
system: jazz-jackrabbit
required: true
source_ref: "src/jj1/level/jj1levelload.cpp:223 (JJ1Level::load player sprites)"
note: "Jazz sprite sheet. Required to start any level."
- name: "BONUS.000"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/bonuslevel/jj1bonuslevel.cpp:53-61, 204-206, src/io/gfx/font.cpp:292"
note: "Bonus level sprites and the bonus-screen font."
- name: "BONUS.0SC"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/bonuslevel/jj1bonuslevel.cpp:764-766"
note: "Cutscene played when a bonus level is won."
# ================================================================
# Level data. Not every episode is required to run; a user may own
# only one. The episode menu probes LEVEL0.<world> for the first
# world of each episode; the levels that follow are named by the
# level data itself (next level and next world numbers).
# ================================================================
- name: "LEVEL0.000"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/menu/gamemenu.cpp:324-325, 557-561"
note: "First level of world 0, the opener of episode 1."
- name: "PLANET.000"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/level/jj1levelload.cpp:437-473"
note: "World intro planet screen (name + preview). The level loads under the name CUSTOM when it is absent."
- name: "BLOCKS.000"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/level/jj1levelload.cpp:577-599"
note: "World 0 tileset. The extension is the world number unless the level names another one."
- name: "SPRITES.000"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/level/jj1levelload.cpp:602-609"
note: "World 0 enemy/object sprites. One file per world."
- name: "BONUSMAP.000"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/level/jj1level.cpp:690, src/menu/gamemenu.cpp:324,570"
note: "Bonus level map for episode 1."
- name: "LEVEL0.001"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/level/jj1level.cpp:794-801"
note: "First level of world 1, reached from the level data of world 0."
- name: "LEVEL0.002"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/level/jj1level.cpp:794-801"
- name: "LEVEL0.003"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/menu/gamemenu.cpp:557-561, src/jj1/jj1episodeutils.cpp:26-28"
note: "First level of world 3, the opener of episode 2."
- name: "LEVEL0.004"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/level/jj1level.cpp:794-801"
- name: "LEVEL0.005"
category: game_data
system: jazz-jackrabbit
required: false
source_ref: "src/jj1/level/jj1level.cpp:794-801"