Files
llamamod/notes/mod-boottolevel.md
T

32 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.