diff --git a/docs/port/splash-animation-fixed.md b/docs/port/splash-animation-fixed.md new file mode 100644 index 00000000..e5110c97 --- /dev/null +++ b/docs/port/splash-animation-fixed.md @@ -0,0 +1,74 @@ +# The splash: frozen, then fixed, and now checked for SHAPE as well as motion + +**Status:** ✅ **animates, and the ramp matches the declared curve.** Written +2026-09-02 by the Port; HANDOFF on this branch answers `9ca1eb5`. + +The 2026-09-02 play-test found the splash frozen. The cause and the fix are in +the commit history; this page is the part that comes after — **is the animation +now the right animation?** `motion-census` says explicitly that it cannot answer +that: *"a wrong ramp that moves every frame passes here."* + +## Pre-registered (R2) + +`palogo_sqex_eff` declares `0:a=0 → 15:a=255 → 30:a=212 → 45:a=0` — three +segments, three gradients: + +| segment | declared | +|---|---| +| 0 → 15 | **+17.0** per unit | +| 15 → 30 | **−2.87** per unit | +| 30 → 45 | **−14.13** per unit | + +> So a film should show three straight runs with breakpoints at **15** and +> **30**, the middle slope about **1/5** the magnitude of the last, and the rise +> about **1.2×** the last. + +## Measured, from a film of a real boot + +Region: `686x11+299+319` — the companion's top strip, which **no other element +overlaps**, so the number is that element's own alpha and not a composite. + +| view units | strip mean | slope/unit | +|---|---|---| +| 5.58 | 0.02809 | | +| 10.00 | 0.05086 | **+0.00515** | +| 13.04 | 0.06611 | **+0.00503** | +| 16.12 | 0.07530 | +0.00298 ← crossing the breakpoint | +| 19.21 | 0.07260 | **−0.00087** | +| 25.38 | 0.06695 | **−0.00092** | +| 28.39 | 0.06482 | −0.00071 | +| 31.39 | 0.05719 | −0.00254 ← crossing the breakpoint | +| 34.39 | 0.04471 | **−0.00416** | +| 40.39 | 0.01910 | **−0.00428** | +| 43.39 | 0.00655 | −0.00418 | +| 46.39 | 0.00000 | gone | + +**Breakpoints land where declared**: the rise stops between 13.0 and 16.1, the +gentle fall steepens between 28.4 and 31.4. + +| ratio | declared | measured | +|---|---|---| +| middle : last | 0.203 | **0.213** | +| rise : last | 1.20 | **1.20** | + +Within 5 % and exact respectively. **The port interpolates piecewise-linearly +across the declared segments** — which is what the Decoder independently measured +the game doing (28 distinct alphas over 28 consecutive presents, modal steps −3 +and −14 against predicted −2.87 and −14.13). + +⚠️ **Ratios, not absolutes, and deliberately.** The strip mean is an alpha +scaled by whatever the sprite's own pixels are; its absolute value carries the +texture. A ratio between segments divides that out, which is why the shape is +checkable from a composite at all. Anyone quoting 0.00515 as an alpha is +misreading it. + +## What this still does not establish + +* That it **looks** right. Three instruments have now agreed with a picture a + human called wrong, and the fourth agreeing does not change the standing of + the fifth. A play-test is the check. +* Anything about the **developer** splash's three logo/companion pairs. One + element, one screen. +* The **absolute** alpha. The shape matches; whether the port's alpha equals the + game's at a given unit is `verify-capture`'s question, and it answers 0.01 % + at the settled pose only.