Parse the per-level overlay: header, constant block, level data

level_overlay was the least-characterised file in the level set -- no parser, no
located structure. It now has gc_formats::overlay and a real-disc test over all 27
levels:

  overlay: 27 levels; field_00 1735808, field_08 1;
  field_04 37540..=45308, field_0c 2763912..=3027336
  (17 below the file length, 10 above);
  +0x10..0x1220 identical on all

The header is four words. +0x0c is not the file length: it was recorded as one on
the strength of the first levels measured, where it sat near the file end, but
across all 27 it falls on both sides -- below on 17, above on 10 -- so it is an
ordinary level-specific word. The test asserts this, being the claim most worth
pinning.

The common prefix is 4 bytes, not the whole header: +0x00 is constant at 1735808
while +0x04 and +0x0c vary. Everything from +0x10 to +0x1220 -- 4624 bytes -- is
byte-identical on all 27 levels.

Still not named: what any of the four header words means, and how the
level-specific tail is structured. The module reports them as fields.

Also records in docs/plan/pcsx2-verification.md that the 64-byte RAM stride from
the previous commit is disproved. A 415 KB dump of level 1 finds the longest such
run at 27 records, not 384, and those are identity matrices -- 27 of them, one per
level. It is a per-level transform table, not the collision grid, and the 20.0
reported there was a coincidence.
This commit is contained in:
2026-10-12 03:32:02 +02:00
parent bd012efe71
commit 02ced5ee83
5 changed files with 295 additions and 0 deletions
+17
View File
@@ -709,3 +709,20 @@ has been shown to count to 384.
finds nothing. All RAM search must go through `gc-trace find --state`, which
decompresses first -- scanning the file directly reports zero hits for a
sequence that demonstrably exists in memory.
### The 64-byte stride was not the collision grid
A 415 KB RAM dump of level 1 around the tag above, scanned locally for 64-byte
strides sharing a header, finds the longest run at **27 records, not 384** --
and those records are:
u32 [1065353216, 0, 0, 0, 0, 1065353216, 0, 0]
f32 [1.0, 0, 0, 0, 0, 1.0, 0, 0]
Identity matrices, **exactly 27 of them** -- one per level. So it is a per-level
transform table, not the collision grid, and the `20.0` reported above was a
coincidence inside a short run.
**The collision lead in this file is disproved, not merely unproven.** Recorded
here so it is not picked up again. Level 1's grid is 384 cells and nothing found
so far counts to it.