diff --git a/docs/port/splash-animation-fixed.md b/docs/port/splash-animation-fixed.md index e5110c97..7614f934 100644 --- a/docs/port/splash-animation-fixed.md +++ b/docs/port/splash-animation-fixed.md @@ -67,8 +67,94 @@ misreading it. * 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. +* ~~Anything about the **developer** splash's three logo/companion pairs. One + element, one screen.~~ ✅ **Closed below, and the developer splash turned out to + be the far better test.** * 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. + + +--- + +# ✅ The developer splash: three elements, TWO declared shapes, on one screen + +The publisher check above had a structural weakness I named at the time: one +element, one screen, one shape. If the port applied *some* single ramp to +everything, that check would pass. + +**The developer splash cannot be fooled that way, because it declares two +different shapes at once:** + +| element | declared alpha | middle segment | +|---|---|---| +| `palogo_gamearts_eff` | `0:0 15:255 30:255 45:0` | **flat** | +| `palogo_seta_eff` | `0:0 15:255 30:255 45:0` | **flat** | +| `palogo_anima_eff` | `0:0 15:255 30:212 45:0` | **decays 17 %** | + +Same screen, same frames, same clock, same code path. The two flat elements are +the control for the one that is not — no second run, no second renderer, and +nothing for a phase or rate error to hide behind, because any such error hits all +three identically. + +## Pre-registered, before the film was read + +> In units 15→30, `gamearts` and `seta` hold flat while `anima` falls gently. +> All three fall steeply 30→45. + +## Measured, off a real filmed boot + +Companion-only strips (each companion's rectangle minus the logo sitting inside +it), mean luma, `--film-interval=0.03`: + +``` +segment units 16-29 units 31-44 +gamearts +0.00000 -0.00101 +seta +0.00000 -0.00151 +anima -0.00001 -0.00003 +``` + +**The two flat ones are flat to five decimals. The decaying one decays.** And all +three fall over 31–44, so the flatness is not a dead element. + +## The quantitative version, and the falsification arm + +Each trace normalised by a **single solved gain** — one scalar per element, not a +per-point fit — against the declared curve, over the whole `t=0..45` ramp: + +| element | fitted against | max err | rms err | +|---|---|---|---| +| `gamearts` | **its own (flat)** | **0.49 %** | 0.23 % | +| `seta` | **its own (flat)** | **0.50 %** | 0.27 % | +| `anima` | **its own (decay)** | **2.18 %** | 1.19 % | +| `gamearts` | anima's decay | 8.32 % | 4.80 % | +| `seta` | anima's decay | 8.08 % | 4.86 % | +| `anima` | flat | 8.82 % | 4.94 % | + +**Both directions.** Every element fits its own declared shape 4–17× better than +it fits the other one available on the same screen. A port that drew one ramp for +all three would sit at ~8 % on at least one row; none does. + +`anima`'s 2.18 % is the loosest row and the reason is its signal: its +companion-only strip means ~0.0005 against gamearts's ~0.015, thirty times +dimmer, so its noise floor is thirty times higher in these units. It still +separates from the wrong curve by 4×. + +## What this adds over the publisher check + +The publisher check established that the ramp has the declared *breakpoints and +slope ratios*. This establishes that the ramp is **per-element** — that the port +reads each element's own keyframes rather than applying a screen-wide curve. That +is a different failure mode, and it is the one that would have survived the +publisher check unnoticed. + +## What it still does not establish + +* That it **looks** right. This is instrument five. The standing of a human's + eyes is unchanged by it. +* The **absolute** alpha, for the same reason as above — a solved gain is + deliberately scale-free, so this is a shape result and says nothing about + whether the port's alpha equals the game's at a given unit. +* Anything about the **logo** elements. Both checks measure the pre-blurred + *companions*, because those are the strips that can be isolated from the sharp + logo underneath them.