docs/re: no ordering field in the runtime element record either
The next suspect was a role or depth field in the 48-byte element record, so every undecoded word was dumped for all 24 title elements against its paint slot. Clean negative: +0x08, +0x0C, +0x18, +0x1C and +0x2C are zero on 21 of 24 elements, and the three exceptions hold what looks like live animation state. Nothing there orders anything. One confirmation on the way: +0x04 is the declaration entry's `kind`, verified against the file for all 24 — 0x10 on the two .prm elements, 0x4 on the four repeat instances, 0x3000 on the two ptlogoall_eff, zero elsewhere. The record mirrors the file here as the pivot and keyframe count already did. And `kind` does not explain the order either: the paint order interleaves kinds freely. So the ordering is in none of the decoded data — not the declaration entry, not the placement region, not the runtime record. What is left is the loader that appends to +0x30, which is worth reading precisely because the order is deterministic. Stated without promising a static rule exists merely because one could.
This commit is contained in:
@@ -222,3 +222,31 @@ no decoded field carries it, and the names (`_eff`) are suggestive but a loader
|
|||||||
sorting on a name suffix would be unusual. The next step is the loader — the code
|
sorting on a name suffix would be unusual. The next step is the loader — the code
|
||||||
that appends to `+0x30` — which is now worth reading precisely *because* the
|
that appends to `+0x30` — which is now worth reading precisely *because* the
|
||||||
order is deterministic.
|
order is deterministic.
|
||||||
|
|
||||||
|
|
||||||
|
## The runtime record carries no ordering field (measured)
|
||||||
|
|
||||||
|
The obvious next suspect was a role/depth field in the 48-byte element record, so
|
||||||
|
every undecoded word was dumped for all 24 title elements next to its paint slot.
|
||||||
|
The result is a clean negative and one confirmation:
|
||||||
|
|
||||||
|
* **`+0x04` is the declaration entry's `kind`**, verified against the file for
|
||||||
|
all 24: `0x10` on the two `.prm` elements (8 and 13), `0x4` on the four repeat
|
||||||
|
instances (2,3,4,5), `0x3000` on the two `ptlogoall_eff*` (22,23), zero
|
||||||
|
elsewhere. So the record mirrors the file here, as the pivot and keyframe
|
||||||
|
count already did.
|
||||||
|
* **Every other undecoded word is zero** — `+0x08`, `+0x0C`, `+0x18`, `+0x1C`,
|
||||||
|
`+0x2C` are `00000000` on 21 of the 24 elements. The three exceptions
|
||||||
|
(elements 0, 1, 2) hold values that change nothing about ordering and look
|
||||||
|
like live animation state rather than static fields.
|
||||||
|
|
||||||
|
So **nothing in the element record orders the elements**, and `kind` does not
|
||||||
|
either (the paint order interleaves kinds freely). Combined with the earlier
|
||||||
|
result that no field of the 60-byte declaration entry does, and that the region
|
||||||
|
after the placement groups is the RATC child stream, the ordering does not live
|
||||||
|
in the data this project has decoded.
|
||||||
|
|
||||||
|
**What remains is the loader**: the code that appends to `+0x30`. It is worth
|
||||||
|
reading now — the order is deterministic, so that code is a pure function of the
|
||||||
|
bundle — but it is a code-reading task, and this note is careful not to promise
|
||||||
|
that a static rule exists just because one *could*.
|
||||||
|
|||||||
Reference in New Issue
Block a user