re(ui): a RATC child's name is stated, not inferred -- and it was hiding every menu background
`ratc::parse` named each child by scanning backwards for the last printable run of bytes before its magic. The format states the name explicitly instead, in an `opt ` block: `"opt " | BE32 len | name | NUL | 3 bytes | magic` -- the same block `ui_layout::opt_link` already read for a button's focus link. The scan agrees with it 17 918 times out of 17 942 and is wrong 24 times, every one the same failure: the 3 trailing payload bytes are themselves printable and beat the real name. For `pteff05.t32` those bytes are `38 41 58` = `8AX`, so the full-resolution background of all five menu screens registered under a name no element declares, resolved to no sprite, and `compose` dropped it through an early `continue` that -- unlike the two arms above it -- records nothing. The screen lost its background and `screen render` still reported "all resolved". `8AX` was never a name. Docs that treated it as one are corrected here. Disc-wide, and the control is the 17 918 the scan already got right: the `opt ` reading reproduces every one of them. Effect on the five screens is the signature of the same art at twice the resolution -- mean brightness unmoved, high-frequency detail x1.15..x1.30 -- which is what the separately-measured `ui-8ax-fullres-background` result said the game draws. Also closes a long-standing dangling reference: `pmbase.t32`, recorded as "on the disc nowhere", is the `GP_STAGE_CLEAR` child the scan called `8AX`. RATC sibling references now resolve 10 148 of 10 148. Verified: 114/114 sylpheed-formats unit tests (including two new ones pinning the `8AX` case byte for byte and the no-block fallback), and every disc-gated integration suite in sylpheed-formats/sylpheed-cli.
This commit is contained in:
@@ -330,8 +330,14 @@ parser limitation. It is not — **there is nothing deeper on the disc**:
|
||||
- The children that are themselves RATC (the `.rat` layout records) are **leaf
|
||||
records**: they carry no child list and instead **reference their siblings by
|
||||
name** — the sprite they place and, via `opt `, their focused variant.
|
||||
**3 311** such leaves, every one embedding sibling names, and **10 144 of
|
||||
**3 311** such leaves, every one embedding sibling names, and **10 148 of
|
||||
10 148** references resolve to a sibling of the same bundle.
|
||||
⚠️ It read **10 144 of 10 148** until 2026-08-29. The 4 misses were
|
||||
`pmbase.rat` → `pmbase.t32` in `GP_STAGE_CLEAR.pak`, written up as an asset
|
||||
that is "on the disc nowhere". It was on the disc: it is the child our name
|
||||
scan called `8AX`. See [ratc-child-names](ratc-child-names.md) — the same
|
||||
defect that hid the menu backgrounds. Nothing about the reference was wrong;
|
||||
the thing it pointed at had the wrong name in our index.
|
||||
|
||||
That is the same by-name convention used one level up, where a screen's config
|
||||
names `.prt` components, and one level up again, where the movie table names
|
||||
|
||||
Reference in New Issue
Block a user