Correct the overlay strings from a table to a pool

The previous commit described a "debug string table on 16-byte alignment". It is
not a table. Dumping the 32 bytes before each run shows most are the tail of the
previous string:

  +3104  "host0:r:/rc2/shock/wavetable.bin"   32 chars
  +3120  "ck/wavetable.bin"                   its own tail
  +3152  "/i5/shock/wavetable1.bin"
  +3168  "ble1.bin"                           its own tail

and the 32-byte prefixes are 327 distinct out of 332 -- essentially all different,
because they are just the preceding string's bytes. There is no per-record header
here. It is one contiguous pool of debug text, and the 16-byte alignment is a
property of how the pool was laid out, which makes continuations land on
boundaries and read as separate entries.

The count of 332 "strings" was therefore inflated by the same effect: it counts
continuations as entries.

The substance is unchanged and still useful -- the pool carries the game's own
debug text, including "Camera_CollPrimTest WARNING! - grid out of bounds! (RAR)",
which is direct evidence for reading the collision payload's two leading u16 as
grid dimensions, and the wavetable.bin paths, which bear on the sound bank
framing. Only the framing was wrong.

The pool is located and counted but not parsed, and there is no gc_formats module
for it. The +0x18/+0x20 names are section names but their structure is not
established, and it is not shown that they index anything.
This commit is contained in:
2026-10-12 03:17:50 +02:00
parent a5a33b9bc0
commit 575d1a5bdd
+18 -4
View File
@@ -1595,7 +1595,7 @@ now has one: a header naming two sections, and a string table.
`u32@+0x00` is **1,735,808 on all three levels**, `+0x08` is `1`, and the bytes `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"**. at `+0x18` and `+0x20` spell **"crap"** and **"system misc"**.
**Result 2 -- a debug string table on 16-byte alignment.** 332 such strings on **Result 2 -- a debug string pool, 16-byte aligned.** 332 printable runs on
level 0, 362 on level 1, 351 on level 2, the first at `+0x20` and the last 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: between 1.3 MB and 2.5 MB. They are the game's own debug text:
@@ -1616,8 +1616,22 @@ 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 The `wavetable.bin` paths also confirm the sound bank is loaded from named
files, which bears on the `SBlk`/`DAW` framing. files, which bears on the `SBlk`/`DAW` framing.
**Not done.** The string table is located and counted but not parsed -- the **Correction to the framing above.** This was first written up as a *string
records preceding each string have not been identified, so there is no table* of records. It is not. Dumping the 32 bytes before each run shows most of
`gc_formats` module for it yet. The `+0x18`/`+0x20` names are section names but them are the tail of the previous string:
+3104 "host0:r:/rc2/shock/wavetable.bin" (32 chars)
+3120 "ck/wavetable.bin" -- its own tail
+3152 "/i5/shock/wavetable1.bin"
+3168 "ble1.bin" -- its own tail
and the 32-byte prefixes are **327 distinct out of 332**, i.e. essentially all
different, because they are just the preceding string's bytes. There is no
per-record header here. It is one contiguous pool of debug text, and the
16-byte alignment is a property of how the pool was laid out, which makes
continuations land on boundaries and read as separate entries.
**Not done.** The pool is located and counted but not parsed, and there is no
`gc_formats` module for it. The `+0x18`/`+0x20` names are section names but
their structure is not established, and it is not yet shown that they index their structure is not established, and it is not yet shown that they index
anything. anything.