# 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) |