Files
llamamod/docs/reference/README.md
T

57 lines
4.7 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.
# Reference: game files and engine
Everything we know about the data of *The Emperor's New Groove* (PC, 2000; German: *Ein Königreich
für ein Lama*), found by reverse engineering `groove.exe` and checking every claim against the
level files on the CD and in the running game. The game runs on Argonaut's **Croc 2 engine** (a PC
port of a PlayStation design), which explains most of its quirks.
Confidence is marked where it matters: **certain** = verified in code and data (byte-exact round
trip or seen in game), **likely** = consistent with the data, **unknown** = open question.
| Page | What it covers |
|---|---|
| [Game files](game-files.md) | CD and HD folders, level naming scheme, worlds and chapters, loading pictures (COR), movies, demos, save games (KSV) |
| [WAD container](wad.md) | the chunk list of a level file and which chunk does what |
| [Geometry and collision](geometry.md) | TRAK tile models, the MAP tile grid, coordinate spaces, collision polygons and materials, vertex colours, visibility regions |
| [Objects, waypoints, zones](objects.md) | MAP strat records, parameters, waypoints, environment zones (fog, music, teleports), lights, the player start, checkpoints and the exit |
| [Textures](textures.md) | TEXT chunk: pages, pixel format, texture rectangles, texture animations |
| [Music and sound](audio.md) | ASF music, the level sound bank, speech, what is still unknown |
| [TestLevel (world 9)](testlevel.md) | the hidden world all custom levels live in, and which chapters are safe |
| [Engine facts and limits](engine-limits.md) | scale, jump distances, draw distance, memory budget, things that crash the game |
How objects *behave* (the strat bytecode) has its own section: [Strats](../strats/README.md).
## Where the details live
These pages are the readable summary. The full lab notes – with every address in `groove.exe`,
open questions and the history of each finding – are in [`notes/`](../../notes/README.md):
| Topic | Lab notes |
|---|---|
| geometry, collision, coordinate spaces | [notes/geometry.md](../../notes/geometry.md) |
| MAP layout, strat records, other chunks | [notes/objects.md](../../notes/objects.md) |
| textures | [notes/textures.md](../../notes/textures.md) |
| every object type in every level | [notes/strat_types_table.md](../../notes/strat_types_table.md) |
| object parameters | [notes/editor-object-schemas.md](../../notes/editor-object-schemas.md) |
| world 9 chapters | [notes/testlevel-chapters.md](../../notes/testlevel-chapters.md) |
| level building, physics measurements, the exit | [notes/levelbau.md](../../notes/levelbau.md) |
| fog, lights, regions | [notes/editor-tools-environment.md](../../notes/editor-tools-environment.md), [notes/mod-fog.md](../../notes/mod-fog.md) |
| importing objects across levels | [notes/editor-cross-import.md](../../notes/editor-cross-import.md) |
## Code that reads and writes these formats
Every parser rebuilds all original files byte for byte, so the code is a reliable executable
specification.
| Format | Java (LlamaMod) | Python (kit) |
|---|---|---|
| WAD container | [`format/Wad.java`](../../src/main/java/com/eliasmueller/llamamod/format/Wad.java) | [`tools/wadtool.py`](../../tools/wadtool.py) |
| TRAK / STPC models, collision | [`format/Trak.java`](../../src/main/java/com/eliasmueller/llamamod/format/Trak.java), [`Model.java`](../../src/main/java/com/eliasmueller/llamamod/format/Model.java), [`Collision.java`](../../src/main/java/com/eliasmueller/llamamod/format/Collision.java), [`Stpc.java`](../../src/main/java/com/eliasmueller/llamamod/format/Stpc.java) | [`tools/geomlib.py`](../../tools/geomlib.py) |
| MAP | [`format/MapChunk.java`](../../src/main/java/com/eliasmueller/llamamod/format/MapChunk.java) | [`tools/mapchunk.py`](../../tools/mapchunk.py) |
| TEXT | [`format/TextChunk.java`](../../src/main/java/com/eliasmueller/llamamod/format/TextChunk.java) | [`tools/textchunk.py`](../../tools/textchunk.py) |
| whole level | [`format/Level.java`](../../src/main/java/com/eliasmueller/llamamod/format/Level.java) | – |
| strat code | [`format/strat/`](../../src/main/java/com/eliasmueller/llamamod/format/strat/), [`format/stpcmerge/`](../../src/main/java/com/eliasmueller/llamamod/format/stpcmerge/) | [`tools/strats.py`](../../tools/strats.py), [`tools/stpcwalk.py`](../../tools/stpcwalk.py) |
| COR pictures | [`format/CorImage.java`](../../src/main/java/com/eliasmueller/llamamod/format/CorImage.java), [`CorEncoder.java`](../../src/main/java/com/eliasmueller/llamamod/format/CorEncoder.java) | [`tools/cor2png.py`](../../tools/cor2png.py), [`tools/png2cor.py`](../../tools/png2cor.py) |
| KSV saves | [`save/Ksv.java`](../../src/main/java/com/eliasmueller/llamamod/save/Ksv.java) | – |
| ASF music | – | [`tools/asf2wav.py`](../../tools/asf2wav.py) (decode only) |