`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.
53 lines
2.5 KiB
Plaintext
53 lines
2.5 KiB
Plaintext
# RATC child names: the printable-run scan vs the `opt ` block, all 33 dat/*.pak
|
|
# 2026-08-29, crates/sylpheed-formats/examples/ratc_child_names.rs
|
|
#
|
|
# RUN 1 was taken BEFORE the fix, when ratc::parse still named children by
|
|
# scanning for the last printable run. It is the evidence for the defect.
|
|
|
|
RATC children scanned : 18002
|
|
with an `opt ` block: 17942
|
|
scanned name AGREES : 17918
|
|
scanned name DIFFERS : 24
|
|
|
|
distinct disagreements (scanned -> opt), with counts:
|
|
'OX -> po_keys_win1.t32 x2
|
|
8AX -> pbbg.t32 x12
|
|
8AX -> pmbase.t32 x4
|
|
8AX -> pteff04.t32 x2
|
|
8AX -> pteff05.t32 x4
|
|
|
|
first 20 occurrences:
|
|
GP_OPTIONS.pak entry 20 'OX -> po_keys_win1.t32
|
|
GP_OPTIONS.pak entry 22 'OX -> po_keys_win1.t32
|
|
GP_READY_ROOM.pak entry 132 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 141 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 211 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 219 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 233 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 234 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 264 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 265 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 967 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 999 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 1097 8AX -> pbbg.t32
|
|
GP_READY_ROOM.pak entry 1099 8AX -> pbbg.t32
|
|
GP_STAGE_CLEAR.pak entry 2 8AX -> pmbase.t32
|
|
GP_STAGE_CLEAR.pak entry 4 8AX -> pmbase.t32
|
|
GP_STAGE_CLEAR.pak entry 7 8AX -> pmbase.t32
|
|
GP_STAGE_CLEAR.pak entry 8 8AX -> pmbase.t32
|
|
GP_TITLE.pak entry 4 8AX -> pteff04.t32
|
|
GP_TITLE.pak entry 5 8AX -> pteff05.t32
|
|
|
|
# RUN 2, same command AFTER the fix. ratc::parse now prefers the `opt ` name, so
|
|
# the two readings must agree everywhere -- which is the check that the fix is
|
|
# complete rather than partial.
|
|
|
|
RATC children scanned : 18002
|
|
with an `opt ` block: 17942
|
|
scanned name AGREES : 17942
|
|
scanned name DIFFERS : 0
|
|
|
|
distinct disagreements (scanned -> opt), with counts:
|
|
|
|
first 20 occurrences:
|