diff --git a/docs/port/HANDOFF.md b/docs/port/HANDOFF.md index 4c2ae3aa..4107a998 100644 --- a/docs/port/HANDOFF.md +++ b/docs/port/HANDOFF.md @@ -314,6 +314,20 @@ authored version can be deleted. on your five screens. [`structures/ui-paint-order-derived-check.md`](../re/structures/ui-paint-order-derived-check.md) +* ✅ **How good are the five screens, actually?** One page with the numbers: + [`five-screens-acceptance.md`](../re/five-screens-acceptance.md). Rendered and + correlated against the live captures — title **0.9500**, main menu **0.9460**, + `EXTRAS` **0.9440**, publisher splash **0.9600**, developer splash **0.9643**, + and every one aligns at **exactly dy=0 dx=0** over a ±2 px search, so placement + and scale are right and the residual is tone and detail rather than geometry. + Every undrawn element is accounted for (ghost instances, `.prm` primitives, + `loop*` animations, and the `8AX` name mismatch whose art is on screen anyway) — + the counts add up exactly, with nothing unexplained. The residual, ranked: tone + (γ≈1.4, the game's own ramp), `8AX` resolution, one `EXTRAS` paint-order tie, + and rotation-not-rendered which does not affect these five at rest. + ⚠️ Reach: static composites at rest against single frames — this says nothing + about animation. + * **Menu order is geometric.** Buttons sorted top-to-bottom by resting Y. This is ✅ correct for a vertical menu and is **not** a decoded neighbour graph — the disc's real navigation structure is unknown, and `opt ` is *not* a focus link diff --git a/docs/re/five-screens-acceptance.md b/docs/re/five-screens-acceptance.md new file mode 100644 index 00000000..a5cb1c84 --- /dev/null +++ b/docs/re/five-screens-acceptance.md @@ -0,0 +1,63 @@ +# ✅ The five screens, end to end — what each one is actually worth + +**Status:** ✅ measured, 2026-08-29. One page, because the answers for these five +screens are otherwise spread across a dozen documents and none of them says how +good the result *is*. + +Rendered with `sylpheed-cli screen render` (adding `--all --black` for the two +splash halves) and correlated against the committed live captures. + +| screen | build | elements drawn | corr vs capture | alignment | +|---|---|---|---|---| +| title | 4 | 15 / 24 | **+0.9500** | dy=0 dx=0 | +| main menu | 5 | 11 / 16 | **+0.9460** | dy=0 dx=0 | +| `EXTRAS` | 6 | 13 / 18 | **+0.9440** | dy=0 dx=0 | +| publisher splash | 10 | 2 / 3 | **+0.9600** | dy=0 dx=0 | +| developer splash | 11 | 6 / 7 | **+0.9643** | dy=0 dx=0 | + +Every one aligns at **exactly zero offset** — searched ±2 px in both axes — so +placement and scale are right and the residual is tone and detail, not geometry. + +## Every omission is accounted for + +The counts are not slack; each undrawn element has a reason already documented: + +| screen | not drawn | why | +|---|---|---| +| title | `ptlogo1`×2, `ptlogo2`×2 | `kind & 0x4` **ghost instances** — the draw capture shows one quad per wordmark | +| | `pteff00.prm`, `pteff02.prm` | `.prm` primitives, off without `--primitives` | +| | `ptloop01.rat`, `ptloop02.rat` | `loop*` animations, off without `--animated`; at rest both sit off-screen | +| | `pteff04.t32` | the **`8AX` name mismatch** — the art *is* on screen, drawn via `ptbase2` ([8AX](structures/ui-8ax-fullres-background.md)) | +| main menu, `EXTRAS` | 2 `.prm` + 2 `loop*` + `pteff05.t32` | same three reasons | +| both splashes | `palogo_eff0.prm` | `.prm` primitive | + +4 + 2 + 2 + 1 = 9 on the title; 2 + 2 + 1 = 5 on each menu; 1 on each splash. +**Nothing is unexplained.** + +## What the residual is, per screen + +Ranked by what a port would notice: + +1. **Tone.** The capture is darker than the composite by a gamma of ≈1.34–1.49 + ([tone curve](structures/ui-render-tone-curve.md)) — the game's own display + ramp, not an emulator artefact. This is the largest single contributor to the + 0.94–0.96 rather than higher. +2. **`8AX` resolution.** The background is drawn from the 640×360 `ptbase` + upscaled 2×, where the game uses the native 1280×720 `8AX` + ([measured](structures/ui-8ax-fullres-background.md), two screens at 68 % of + ceiling). +3. **Paint-order ties on `EXTRAS` only.** One drawable overlapping tie + (`ptframe3`×`ptframe4`), and the capture is consistent with our order + ([check](structures/ui-paint-order-derived-check.md)). The other four screens + use orders measured from the game. +4. **Rotation is decoded but not rendered** — and does not affect any of these + five at rest ([rotation](structures/ui-keyframe-rotation.md)). + +## Reach + +* These are **static composites at the resting pose** against **single frames**. + Nothing here says the animation is right; Q1's interpolation law is settled but + a multi-keyframe group's absolute timing is not + ([time unit](ui-keyframe-time-unit.md)). +* Correlation on a whole frame is dominated by large areas. It is a sanity figure, + not a per-element check — the per-element work is in the documents linked above.