Locate level_overlay's 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 a header naming two sections and a string table.

Range measured: overlay.bin on levels 0, 1 and 2 -- 2751268, 2763668 and
2928424 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 1735808 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, first at +0x20 and 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.
This commit is contained in:
2026-10-12 03:11:25 +02:00
parent e58ab0e815
commit a5a33b9bc0
+45
View File
@@ -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 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 reason for 17. Neither exists yet, and this is the point at which the
measurement trail goes cold on collision. 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.