2.0 KiB
Boot to level (boot-to-level, GAMEPLAY)
mods/boottolevel/BootToLevelMod – starts the game directly in one level: no logos, no menus,
no world map. Used by the level editor's Play button (details, offsets and tests:
editor-playtest.md).
| Option | Default | |
|---|---|---|
world / chapter |
1 / 1 | level to load (world 9 = TestLevel, chapters 1–49) |
slot |
3 | save slot the game plays with (new game if empty) |
logos |
on | skip logo movies and title screen (skipped if intro-skip already patched them) |
quitOnEscape |
off | Escape (pause) ends the game at once through the normal exit path |
start |
empty | "x, y, z[, yaw][ @ world/chapter]" in cells: moves the level's player start (WAD rebuild) |
Start bound to a level (2026-11-07): a start with "@ world/chapter"
(BootToLevelMod.formatStart(world, chapter, …)) is used only while world/chapter name that
level; for any other level it is ignored with a progress note ("Player start ignored: it was set
for world W chapter C") instead of failing with "no collision floor" (a play-test whose restore
never ran left its start in config.json, and every later apply for another level failed). A start
without "@" applies to whatever level is chosen (old configs, hand-typed values) and is still
checked strictly. Tests: BootToLevelModTest.startOfAnotherLevelIsIgnored, parsesStartLevel.
The editor's play-test (PlaytestRunner.install) should write the bound form – see the report.
Patches: jmp at 0x549C50 (main-menu frame handler) → once: read slots (FUN_0041c0e0), load
slot (FUN_0041cc70), set tribe/world/chapter/map 0x584EB4…, music shutdown, state 0x5846E4 = 3,
return 1. quitOnEscape: jmp at 0x549F40 (in-game frame handler): pause bit 0x8 of 0x5FCF08 →
state 0x11 (the main menu's "Beenden"), return 1. Data: one 4-byte allocateData flag.
Registered via ServiceLoader (META-INF/services/com.eliasmueller.llamamod.mods.Mod).
Verified on display :9: Village 2 and TestLevel 2 load within seconds of the window; Escape ends groove.exe in ~1.3 s without errors.