57 lines
4.7 KiB
Markdown
57 lines
4.7 KiB
Markdown
# 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) |
|