diff --git a/docs/plan/level-assets.md b/docs/plan/level-assets.md index d46774a..da9e79b 100644 --- a/docs/plan/level-assets.md +++ b/docs/plan/level-assets.md @@ -1576,3 +1576,48 @@ cover something else, or cover a subset of cells. Resolving it needs either the same offset found in other levels at a position the leading counts predict, or a reason for 17. Neither exists yet, and this is the point at which the measurement trail goes cold on collision. + +## overlay.bin: named sections and a 16-aligned debug string table + +`level_overlay` was on the open list with no parser and no located structure. It +now has one: a header naming two sections, and a string table. + +**Range measured:** `overlay.bin` on levels 0, 1 and 2 -- 2,751,268, +2,763,668 and 2,928,424 bytes. + +**Result 1 -- the file opens with section names.** + + +000: 80 7c 1a 00 | dc 99 00 00 | 01 00 00 00 | 88 3b 2a 00 + +010: 00 00 00 00 | 00 00 00 00 | "crap\n" | 00 00 00 00 00 + +020: "system misc" 00 00 00 00 00 00 00 00 00 + +030: 20 80 ff 40 | 00 60 cf 00 | 64 00 | 46 00 | 19 00 00 00 + +`u32@+0x00` is **1,735,808 on all three levels**, `+0x08` is `1`, and the bytes +at `+0x18` and `+0x20` spell **"crap"** and **"system misc"**. + +**Result 2 -- a debug string table on 16-byte alignment.** 332 such strings on +level 0, 362 on level 1, 351 on level 2, the first at `+0x20` and the last +between 1.3 MB and 2.5 MB. They are the game's own debug text: + + host0:r:/rc2/shock/wavetable.bin + host0:z:/i5/shock/wavetable1.bin + unloaded sound bank %#010x + Camera_CollPrimTest WARNING! - grid out of bounds! (RAR) + render setup + sky draw + pre effects + pre 2 effects + +**`Camera_CollPrimTest WARNING! - grid out of bounds! (RAR)` is direct evidence +for the collision reading.** It is the game's own string, naming a grid and a +collision test, and it is why the two leading counts in the collision payload +are worth continuing to treat as grid dimensions despite not sizing the payload. + +The `wavetable.bin` paths also confirm the sound bank is loaded from named +files, which bears on the `SBlk`/`DAW` framing. + +**Not done.** The string table is located and counted but not parsed -- the +records preceding each string have not been identified, so there is no +`gc_formats` module for it yet. The `+0x18`/`+0x20` names are section names but +their structure is not established, and it is not yet shown that they index +anything.