re: S00A.wmv confirmed off the running game -- the movie was never

ambiguous, the sampling was

Continuing last iteration's amber rather than starting something new. The
fix was already named there: stop using 5-second screenshots and record
the display.

Recorded with ffmpeg x11grab at 10 fps and matched every 0.5 s. Across
the 25 consecutive samples from capture 5.0 s to 17.5 s the S00A playhead
is strictly non-decreasing -- 1.0 through 11.0 s, advancing at
essentially real time -- with scores at or above 0.96 and four of them at
0.999 or 1.000 against a runner-up in the 0.78-0.83 range. S00A is the
top match on 23 of the 27 frames carrying signal. So MS00A -> S00A.wmv is
decoded from the manifest AND measured off the game, and the intro begins
about 4.5 s after A on the save slot.

The previous attempt's failure is worth its own METHOD line, because it
did not look like a sampling problem: it looked like weak evidence for
the wrong film. Sparse sampling produced contrast-23 frames, a playhead
that would not join up, and one frame preferring ADV. Sampling does not
weaken a signal gracefully; it turns it into noise shaped like a
different answer.

One aside recorded and not chased: in the S00A 5.5-10 s window, ADV also
scores 0.97-0.99 at its OWN monotone playhead of 33.5-37.5 s. Two films
matching strongly with two consistent playheads is not noise -- it reads
as the boot movie being a trailer cut from the story cutscenes, which
also explains why the sparse run kept flipping between them.
This commit is contained in:
Sylpheed RE agent
2026-08-28 19:23:57 +00:00
parent 66643bae55
commit f1e78c425c
3 changed files with 53 additions and 28 deletions

View File

@@ -140,7 +140,7 @@ authored version can be deleted.
disc** — this is why the splash is a screen), **`ADVERTISE_MOVIE``ADV.wmv`**, 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 `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), 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.961.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 **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 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. 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 | | 🟡 | **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 | | 🟡 | **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** | | ❔ | **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 | | ❔ | **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 The first two share one unblocker — an emulator build whose audio path can be

View File

@@ -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 ~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 of guest time, take the measurement early, and never read a disappearance as a
guest crash without checking the log tail for one. 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.

View File

@@ -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**, The scripts' `waiting it out (tapping breaks the title)` comment is **too broad**,
and it costs every scripted boot ~2.5 minutes. 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 The manifest's `MS00A → S00A.wmv` has now been confirmed against the running
time), so the manifest's `MS00A → S00A.wmv` was put to the same frame-signature game. The first attempt, with 5-second screenshots, gave an ambiguous partial
test that identified the attract movie. **It did not reproduce that test's playhead; re-run with **`ffmpeg x11grab` at 10 fps** and matched every 0.5 s, it
quality, and the honest read is "consistent with", not "confirmed".** is unambiguous:
* The first four samples give a clean monotonic `S00A` playhead **2, 6, 9, 13 s** | capture t | `S00A` score @ playhead | `ADV` (runner-up) |
across four 5-second samples — and `S00A` beats `ADV` on each. |---|---|---|
* The single strongest frame of the run (contrast 47.4) matches `S00A` at | 5.0 s | **0.998** @ 1.0 s | 0.787 @ 126.5 s |
**0.916** against `ADV` 0.714. | 6.0 s | **0.999** @ 1.5 s | 0.820 @ 126.5 s |
* But the run as a whole is **not** the clean advancing playhead the attract test | 7.5 s | **1.000** @ 3.0 s | 0.836 @ 126.5 s |
produced (15 of 19, monotone throughout). Most frames here sit at contrast | 9.0 s | **0.999** @ 4.5 s | 0.823 @ 126.5 s |
2337, where the discrimination is poor by this page's own rule, and one | 12.0 s | **0.998** @ 7.0 s | 0.985 @ 34.5 s |
high-contrast frame matches `ADV` over `S00A`. Two locally-consistent runs | 16.0 s | **0.999** @ 10.0 s | 0.886 @ 37.5 s |
(2→13 s, then 86→90 s) do not join into one timeline. | 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 Across the 25 consecutive samples from capture 5.0 s to 17.5 s the `S00A`
**manifest decode**; this run is weak corroboration and is recorded as such. A playhead is **strictly non-decreasing** — 1.0, 1.5, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0,
clean identification needs denser sampling (the 30 fps `x11grab` route from 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,
[`screen-transitions.md`](screen-transitions.md)) rather than 5-second 11.0 — advancing at essentially real time, with scores at or above 0.96. **`S00A`
screenshots. 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 ### 🟡 An aside worth recording: `ADV.wmv` reuses `S00A` footage
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 In the window `S00A` 5.510 s, `ADV` also scores 0.970.99 — at its *own*
into a boot). Long dynamic runs are unreliable in this container, and the monotonically advancing playhead, 33.537.5 s. Two different movies both matching
`DELTASABER` plates of [`ui-title-build-map.md`](ui-title-build-map.md), which strongly with two consistent playheads is not noise; it reads as **the boot movie
would need a mission load, were not reached. 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 2337 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.