52 lines
2.9 KiB
Markdown
52 lines
2.9 KiB
Markdown
# TestLevel (world 9)
|
||
|
||
The game has a hidden ninth world, **TestLevel**, with 49 chapter slots – but the retail CD ships
|
||
no data for it. It is the natural home for custom levels: originals stay untouched, and the world
|
||
map can reach it once a save game unlocks it. Every LlamaMod level mod, the Test World and the
|
||
Alligator Arena are installed as `wads/T1L9M0nn.wad` with a loading picture `T19n.COR`.
|
||
|
||
Code: [`save/TestLevelChapters.java`](../../src/main/java/com/eliasmueller/llamamod/save/TestLevelChapters.java),
|
||
lab notes: [notes/testlevel-chapters.md](../../notes/testlevel-chapters.md).
|
||
|
||
## Use chapters 1 and 32–49
|
||
|
||
The game keeps per-chapter coin counters and flag bytes in arrays that only have rows for worlds
|
||
0–8 (index `world · 6 + chapter`). For world 9, chapters 2–31 land on **other game variables**:
|
||
|
||
| Chapter | What its coin counter / flag byte overwrites |
|
||
|---|---|
|
||
| 1 | nothing (free) |
|
||
| 5–8 | the last played tribe/world/chapter/map |
|
||
| 6–9 (flags) | the **language index** |
|
||
| 9 | the **furthest progress** – the world map breaks |
|
||
| 10–31 | options, HUD state and tables used by the original levels |
|
||
| **32–49** | tables of tribes 2 and 3, which the game never uses – free |
|
||
|
||
So custom levels use **chapter 1 or 32–49**. The editor only offers these, new projects take the
|
||
first free chapter from 32, and old projects on other chapters are moved automatically.
|
||
|
||
LlamaMod additionally relocates both arrays to a 128-entry buffer in unused space of `groove.exe`
|
||
(base exe patch, revision 2), so even picking an empty chapter on the world map is harmless with
|
||
LlamaMod's executable. Mods still keep to 1 and 32–49 so they also work with an unpatched exe.
|
||
|
||
## Making world 9 reachable
|
||
|
||
* **Empty chapters must exist.** Finishing chapter *n* unlocks chapter *n* + 1, and the world map
|
||
crashes ("Couldnt load wad") when a selectable chapter has no file. LlamaMod links every missing
|
||
`T1L9M002…049.wad` to an installed world-9 WAD and `T192…T1949.COR` to `T191.COR`.
|
||
* **Never exit to (7, 7, 7).** "World finished" in world 9 unlocks a world 10 that has no name;
|
||
the game crashes after saving. Exits in TestLevel point to (1, 9, chapter).
|
||
* **Get there:** set a save game's map cursor to world 9 (`llamamod --unlock <slot> 9 <chapter>
|
||
--cursor`, the launcher's *Save games* tab), or use the *Boot to level* mod / the editor's
|
||
play-test, which start the game directly in the level.
|
||
|
||
## Tally totals
|
||
|
||
The tally screen after the exit shows "coins collected *x* / *total*". *Total* is not counted by
|
||
the game – it is the **LNFO** chunk (`u32 coins, u32 secrets`). A new level built on the village
|
||
would show the village's 55. LlamaMod recounts it for new levels (Coin = 1, Coin5 = 5, Secret
|
||
objects; the arena adds its dynamic coins).
|
||
|
||
Cosmetic leftovers: the world map shows no background for world 9 and a garbage coin target, and
|
||
the loading screen says "TestLevel Kapitel *n*".
|