re(ui): a group's duration is in the data, its start time is not

Tested whether the splash timeline, played, reproduces the capture --
the last gap in the animation model. Half of it does.

Durations match. At 2 units/frame under the shifted reading, from the
235-frame draw capture of the developer splash:

  glows  drawn f94-115  (22 frames = 44 units)  declared ~0..45  = 45   97.8%
  logos  drawn f116-211 (96 frames = 192 units) declared 15..210 = 195  98.5%

Each element is on screen for its declared span to within 2%.

Starts do not. Every glow declares the same times 15,30,45 and every
logo the same 15,30,190,194,206,210, so on one clock they would overlap
almost entirely -- and they do not overlap at all. The glows run 94-115
and the logos 116-211, strictly sequential, the logos starting the frame
after the glows end. Fitting one origin needs f0 ~ 93.5 for gamearts_eff
and ~103 for gamearts, about 19 units apart, and aligning one throws the
other off by ~9 frames at both ends.

The obvious candidate is refuted. parse_placements reads each group
header as (element index, keyframe count) plus one undecoded LEAD-IN
WORD -- exactly where a per-group start offset would live. It is
0x00000000 for all seven elements, glows and logos alike.

Reach: not the keyframe times (identical within each family), not that
word (zero), not declaration order (which interleaves logos and glows
where the observed sequencing groups them), not the RATC child order.
What remains is that the sequencing is code-driven, which agrees with
what the boot-order work concluded independently.

For the port: a group says how long an element animates and what it does,
not when it starts relative to its neighbours. The observed order on the
developer splash -- both glows, then both logos -- is measured for one
screen, not a decoded rule, so the sequencing has to be authored.

METHOD: when a model reproduces durations but not positions, the missing
piece is an origin, not a rate.
This commit is contained in:
Sylpheed RE agent
2026-08-29 04:42:55 +00:00
parent 1f2b469f7e
commit 7fb6bdfad8
4 changed files with 93 additions and 0 deletions

View File

@@ -563,3 +563,12 @@ neighbourhood, not just the line.
element is held at that point in the timeline, not that it is on screen once the
screen has settled — and where a screen does settle, the rule is right.
[`ui-resting-pose.md`](structures/ui-resting-pose.md)
* "the group header's undecoded lead-in word carries a per-element start offset"
**refuted immediately.** It is `0x00000000` for all seven elements of the
developer splash — glows and logos alike — while those two families are
observed to run sequentially (frames 94115 and 116211) despite declaring
overlapping times. [`ui-group-start-time.md`](structures/ui-group-start-time.md)
* "the splash elements share one clock origin" → **refuted.** Fitting a single
origin needs f₀ ≈ 93.5 for `palogo_gamearts_eff` and f₀ ≈ 103 for
`palogo_gamearts`, ~19 units apart, and aligning one throws the other off by
~9 frames at both ends. Durations match (97.8 %, 98.5 %); starts do not.