diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 0406baa3..496c6deb 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -184 sections. Search this before re-deriving anything. +185 sections. Search this before re-deriving anything. * [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28) * [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28) @@ -195,6 +195,7 @@ dies, which is what this file is for. * [Localising the 1.92 splash floor: it is glyph edges, and off them the port is ~1 RMSE from the game](#localising-the-192-splash-floor-it-is-glyph-edges-and-off-them-the-port-is-1-rmse-from-the-game) * [Their draw-stream result checked against my export — three confirmations and one correction](#their-draw-stream-result-checked-against-my-export--three-confirmations-and-one-correction) * [Nested leaves may advance at half rate — a quantified defect in shipped output](#nested-leaves-may-advance-at-half-rate--a-quantified-defect-in-shipped-output) +* [Their Route 1 is closed for the whole archive, not just the title](#their-route-1-is-closed-for-the-whole-archive-not-just-the-title) ## P0 — the exporter, 2026-08-28 @@ -10452,8 +10453,14 @@ path reads that same `time_units`. So: | `pteff03` | 10.0 s | **18.7 s** | port **1.87×** too fast | | `pteff03a` | 12.0 s | **22.4 s** | port **1.87×** too fast | -That is a visible defect in what the boot sequence ships — the title's sweeps -cross in half the time the game takes. +⚠️ **CONDITIONAL, and the condition is not met.** That table inherits an absolute +rate the Decoder has since tried three ways to pin and could not: a top-level +clock in the same capture (nothing top-level moves on a settled screen — that is +what settled means), a fit in the transition captures (rms residuals 26.70/16.75 +px against 147 px of travel: scatter, not a line), and the emulator's own log +(fps not printed). So **1.87× is what follows IF 1.07 is the true rate**, and +1.07 is exactly the quantity that is not established. It is recorded as an +exposure to check, not as a defect to fix. ⚠️ **Not changed, and not only out of caution.** `keyframe_units_per_second: 60` is authored from a measurement off the running game and governs *everything* — @@ -10480,3 +10487,36 @@ other — real and useful, since it rules out a per-record quirk — but the abs 28.5 fps gives **1.053**, and the gap between that and 1.070 is about the size of the frame-rate uncertainty. So the measurement may be saying *"one unit per game frame"* exactly, with the residual being how fast the emulator actually ran. + +## Their Route 1 is closed for the whole archive, not just the title + +They tried three ways to pin the absolute rate and closed all three. Route 1 — +find a top-level element moving in the *same capture* as a leaf, so frames-per-second +cancels in the ratio — failed on the settled title because *"nothing top-level +moves on a settled title; that's what settled means."* + +I searched all 16 screens of my export for a top-level element still in motion at +its settle instant. **Two hits, `pttitle` on `extras` and `extras_jp` — and both +are false positives.** Its keyframes are `(16, y90, a0) (20, y98, a128) (24, y100, +a255) (52, y100, a255) (58, y90, a0)`: it arrives, holds from t=24, and the motion +my detector saw after the settle instant is the **exit ramp**, which plays only +when the screen leaves. + +⚠️ **Third time the exit ramp has fooled a census of mine** — after counting it as +the end of visibility in the transient sweep, and after it made every normal +element look like a flash. It is the single most reliable false positive in this +export and I still did not anticipate it. + +✅ **But the negative result generalises their finding.** Excluding the exits, +**no top-level element on any of the 16 screens moves at rest.** That is not an +accident of the title: `holding` clamps every top-level element at its own hold, +and the only keyframes past the settle instant are exit ramps. So **no capture of +any screen in this archive can carry a top-level clock alongside a free-running +leaf** — Route 1 is closed structurally, not just empirically, and no further +screen is worth their time trying. + +📌 It also says something about the port's own design that I had not stated: +**everything that moves on a settled screen is nested.** The three free-running +clocks I enumerated — looping focus record, spin, leaf — are all sub-records, and +that is now explained rather than observed. Their plate finding is the same shape: +`ptbtn00` is a one-shot fade and the repeating pulse comes from its nested `.rat`.