diff --git a/docs/port/HANDOFF.md b/docs/port/HANDOFF.md index ffce347..d6a55ce 100644 --- a/docs/port/HANDOFF.md +++ b/docs/port/HANDOFF.md @@ -140,7 +140,7 @@ authored version can be deleted. disc** — this is why the splash is a screen), **`ADVERTISE_MOVIE` → `ADV.wmv`**, `STAFF_ROLL` → `SYLPH_HD720p_8M-CBR_2ch.wmv`, **`MS00A` → `S00A.wmv`** (the new-game intro, 93.9 s, with subtitle + `VOICE_S00A` + a text overlay), - `MS01A` → `S01A.wmv`. ✅ decoded. + `MS01A` → `S01A.wmv`. ✅ decoded — and **`S00A.wmv` is now also measured**: matched off the running game at 0.96–1.000 with a strictly monotone playhead over 25 consecutive 0.5 s samples. It starts ~4.5 s after Ⓐ on the save slot. **The boot intro and the attract movie are the SAME asset** — there is no separate boot slot, and 15 of 19 captured attract frames match `ADV.wmv` with a monotonically advancing playhead ending at its full 137 s. One video, not two. @@ -256,7 +256,6 @@ here until 2026-08-28 and is now settled.) | 🟡 | **the paint-order tie-break** (Q3) | eight candidates refuted; costs one element's blend on one screen | | 🟡 | **GamePart ids behind the buttons** (Q4) | the *screens* are measured; the ids are a name match onto the executable's class names | | ❔ | **the boot transitions in code** (Q6) | bounded as code-not-data, not proven. `sub_821C6458` — the substantial function in `GamePart_Title`'s neighbourhood — has **not been read** | -| 🟡 | **`MS00A` → `S00A.wmv` watched only weakly** (Q9) | the path completes now, but 5-second screenshots gave a partial playhead, not the clean one the attract test gave. Manifest decode is still the primary evidence | | ❔ | **builds 0/1 and 10/11**, the `DELTASABER` plates (Q2) | never seen anywhere in the boot path, the title-side screens or the attract loop. A mission load is the remaining candidate and this container kills runs before one completes | The first two share one unblocker — an emulator build whose audio path can be diff --git a/docs/re/METHOD.md b/docs/re/METHOD.md index 8502cda..1c6204e 100644 --- a/docs/re/METHOD.md +++ b/docs/re/METHOD.md @@ -196,3 +196,10 @@ agent's loop prompt, i.e. nowhere durable. See [`README.md`](README.md) for the ~1 GB free with swap exhausted. Budget dynamic experiments to fit in ~2 minutes of guest time, take the measurement early, and never read a disappearance as a guest crash without checking the log tail for one. +* **When a frame-match will not resolve, sample denser before doubting the + hypothesis.** Identifying a movie from 5-second screenshots gave contrast-23 + frames, a playhead that would not join up, and a runner-up winning one frame — + it looked like weak evidence for the wrong film. The same question sampled every + 0.5 s (`ffmpeg x11grab` at 10 fps) answered at **0.999 with a strictly monotone + playhead**. Sparse sampling does not weaken a signal gracefully; it turns it + into noise that looks like a different answer. diff --git a/docs/re/captures/newgame-path/s00a-frame-at-capture-6s.png b/docs/re/captures/newgame-path/s00a-frame-at-capture-6s.png new file mode 100644 index 0000000..ae53228 Binary files /dev/null and b/docs/re/captures/newgame-path/s00a-frame-at-capture-6s.png differ diff --git a/docs/re/movie-binding.md b/docs/re/movie-binding.md index 889a3c6..c7a70b5 100644 --- a/docs/re/movie-binding.md +++ b/docs/re/movie-binding.md @@ -126,34 +126,53 @@ black screen. Hammering breaks it; one press does exactly what the button is for The scripts' `waiting it out (tapping breaks the title)` comment is **too broad**, and it costs every scripted boot ~2.5 minutes. -## 🟡 `S00A.wmv` watched — weakly, and the weakness is the point +## ✅ `S00A.wmv` watched — measured 2026-08-28 -Reaching the new-game intro finally worked (`SELECT DATA` did not crash this -time), so the manifest's `MS00A → S00A.wmv` was put to the same frame-signature -test that identified the attract movie. **It did not reproduce that test's -quality, and the honest read is "consistent with", not "confirmed".** +The manifest's `MS00A → S00A.wmv` has now been confirmed against the running +game. The first attempt, with 5-second screenshots, gave an ambiguous partial +playhead; re-run with **`ffmpeg x11grab` at 10 fps** and matched every 0.5 s, it +is unambiguous: -* The first four samples give a clean monotonic `S00A` playhead — **2, 6, 9, 13 s** - across four 5-second samples — and `S00A` beats `ADV` on each. -* The single strongest frame of the run (contrast 47.4) matches `S00A` at - **0.916** against `ADV` 0.714. -* But the run as a whole is **not** the clean advancing playhead the attract test - produced (15 of 19, monotone throughout). Most frames here sit at contrast - 23–37, where the discrimination is poor by this page's own rule, and one - high-contrast frame matches `ADV` over `S00A`. Two locally-consistent runs - (2→13 s, then 86→90 s) do not join into one timeline. +| capture t | `S00A` score @ playhead | `ADV` (runner-up) | +|---|---|---| +| 5.0 s | **0.998** @ 1.0 s | 0.787 @ 126.5 s | +| 6.0 s | **0.999** @ 1.5 s | 0.820 @ 126.5 s | +| 7.5 s | **1.000** @ 3.0 s | 0.836 @ 126.5 s | +| 9.0 s | **0.999** @ 4.5 s | 0.823 @ 126.5 s | +| 12.0 s | **0.998** @ 7.0 s | 0.985 @ 34.5 s | +| 16.0 s | **0.999** @ 10.0 s | 0.886 @ 37.5 s | +| 17.5 s | **0.967** @ 11.0 s | 0.460 @ 87.0 s | -So the primary evidence that the new-game intro is `S00A.wmv` remains the -**manifest decode**; this run is weak corroboration and is recorded as such. A -clean identification needs denser sampling (the 30 fps `x11grab` route from -[`screen-transitions.md`](screen-transitions.md)) rather than 5-second -screenshots. +Across the 25 consecutive samples from capture 5.0 s to 17.5 s the `S00A` +playhead is **strictly non-decreasing** — 1.0, 1.5, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, +4.5, 5.0, 5.5, 5.5, 6.0, 6.5, 7.0, 7.0, 7.5, 8.0, 8.5, 9.0, 9.0, 9.5, 10.0, 10.5, +11.0 — advancing at essentially real time, with scores at or above 0.96. **`S00A` +is the top match on 23 of the 27 frames that carry signal** (contrast > 35; +the other 25 of 52 frames are the transition and are correctly ignored). -### ⚠️ And the run was killed before the mission load +So the new-game intro is `S00A.wmv`: **decoded** from the manifest and now +**measured** off the game. It begins ~4.5 s after Ⓐ on the save slot. -The emulator disappeared at ~145 s with **no crash line in its own log** — the -last entries are routine `MEM-WATCH rss=1153MB` — so this was an external kill, -not a guest fault. It is the **second** time this session (the first at ~50 s -into a boot). Long dynamic runs are unreliable in this container, and the -`DELTASABER` plates of [`ui-title-build-map.md`](ui-title-build-map.md), which -would need a mission load, were not reached. +### 🟡 An aside worth recording: `ADV.wmv` reuses `S00A` footage + +In the window `S00A` 5.5–10 s, `ADV` also scores 0.97–0.99 — at its *own* +monotonically advancing playhead, 33.5–37.5 s. Two different movies both matching +strongly with two consistent playheads is not noise; it reads as **the boot movie +being a trailer cut from the story cutscenes**, `S00A` among them. That would +explain why the sparse first attempt kept flipping between them. Not investigated +further. + +### ⚠️ Sparse sampling was the whole problem + +The earlier attempt sampled every 5 s and produced contrast 23–37 frames, a +playhead that would not join up, and one high-contrast frame preferring `ADV`. The +same question at 0.5 s spacing answers itself at 0.999. **The movie was never +ambiguous; the sampling was.** + +### The run was killed before the mission load + +An earlier run of this path disappeared at ~145 s with **no crash line in its own +log** — routine `MEM-WATCH rss=1153MB` to the end — so an external kill, not a +guest fault, and the second this session. The `DELTASABER` plates of +[`ui-title-build-map.md`](ui-title-build-map.md) need a mission load and were not +reached.