diff --git a/docs/game/navigation.md b/docs/game/navigation.md index 3ed36d29..579426b7 100644 --- a/docs/game/navigation.md +++ b/docs/game/navigation.md @@ -35,6 +35,15 @@ Confidence: โœ… seen in a capture ยท ๐ŸŸก inferred ยท โ” unknown. | 4 | **Title screen** โ€” the wordmark appears **first, with no prompt**; `PRESS โ’ถ BUTTON` fades in **2.13 s** later, above the 2006/2007 Square Enix copyright line, and then pulses about every 2.2 s โœ… | press **โ’ถ** | goes to the main menu โœ… | | 5 | **Main menu** | โ€” | see ยง2 | +โœ… **The order is publisher then developer, confirmed in three cold boots +(2026-08-29)** โ€” `SQUARE ENIX` for ~4.3 s, a ~0.25 s black hold, then +`GAME ARTS` / `SETA` / `studio anima` for ~3.5 s, and both dwells are declared on +the disc (240 and 195 keyframe units). โš ๏ธ There is a **third** SQUARE ENIX +wordmark about ten seconds in โ€” bloomed, below centre โ€” and it is the opening +card of the intro movie, not a splash. +[the three frames side by side](../re/captures/boot-order/splash-order-two-runs.png) ยท +[`boot-order-and-splash-dwell.md`](../re/boot-order-and-splash-dwell.md) + Both logo screens are **still pictures the game draws**, not video โ€” neither is a `.wmv` on the disc. Captures: [publisher](../re/captures/title-builds/live-splash-publisher.png) ยท diff --git a/docs/re/METHOD.md b/docs/re/METHOD.md index 8faa1d64..d37e2767 100644 --- a/docs/re/METHOD.md +++ b/docs/re/METHOD.md @@ -114,6 +114,25 @@ agent's loop prompt, i.e. nowhere durable. See [`README.md`](README.md) for the about how a screen is built or animated has to be armed *before* it exists. Re-arming every few seconds and keeping every log tiles the approach: each F10 opens a new numbered file and closes the previous one complete. +* **A capture stream that opens N seconds after launch will report the boot in + the wrong order, and nothing errors.** `data/boot-timeline-2026-08-29.tsv` + opens on the *developer* splash and labels the publisher one 6 s later, which + reads as `dev โ†’ pub` and is the opposite of the boot. The stream had attached + ~7.7 s in and missed the publisher entirely. **The tell was in the file**: + its first twelve rows are byte-identical to four decimals โ€” one held frame + sampled twelve times, i.e. the probe joined a screen already in progress rather + than watching it arrive. If `t = 0` is not the launch, say so in the file; if + the first rows do not *change*, you did not see the beginning. + ([`boot-order-and-splash-dwell.md`](boot-order-and-splash-dwell.md)) +* **`ADV.wmv` opens with its own SQUARE ENIX card, and it scores 0.75 against the + publisher splash.** A correlation classifier keyed on + `live-splash-publisher.png` therefore fires **twice** per boot, ~10 s apart, + and the second one is a movie frame. Discriminators that work: the real splash + is *perfectly still* (identical frame statistics for seconds) and scores + 0.93โ€“0.94; the movie card drifts continuously and never passes 0.76 โ€” and its + wordmark is bloomed and below centre where the splash's is sharp and centred. + **A threshold that both a screen and a movie frame clear is not a classifier**; + look at the frame. * **Measure animation in submitted frames, not in seconds.** `VdSwap` counts are the guest's own frames, so an emulator at 80 % of real time does not move them; a stopwatch reading does, silently and by an unknown factor. diff --git a/docs/re/boot-order-and-splash-dwell.md b/docs/re/boot-order-and-splash-dwell.md new file mode 100644 index 00000000..be157301 --- /dev/null +++ b/docs/re/boot-order-and-splash-dwell.md @@ -0,0 +1,125 @@ +# The boot's first ten seconds: publisher, then developer โ€” and the movie has a logo card too + +**Status:** โœ… `CONFIRMED`. The **order** is measured in three independent cold +boots and confirmed **by eye**, not only by a correlation. The **dwells** are +**decoded** โ€” they are on the disc, and the running game reproduces them to +within the emulator's own frame pacing. + +Raised by the port agent against `data/boot-timeline-2026-08-29.tsv`, whose +`label` column runs `splash_dev` *before* `splash_pub` โ€” the opposite of what +`authored/flow.json` carries. If that ordering were real it would be a boot-order +bug in the port. **It is not real, and this page says why.** + +## The order: publisher first + +![the two splashes and the movie's logo card](captures/boot-order/splash-order-two-runs.png) + +*Brightened ร—6 โ€” these frames have a surface mean of โ‰ˆ5/255. Top-left and +top-right are the two splashes; the bottom row is what comes next and is NOT a +splash.* + +| run | `SQUARE ENIX` (publisher) | `GAME ARTS`/`SETA`/`studio anima` (developer) | +|---|---|---| +| 1 | 3.046 โ†’ 7.343 s | 7.683 โ†’ 11.191 s | +| 2 | 1.180 โ†’ 5.784 s | 6.051 โ†’ 9.554 s | +| 3 | 1.192 โ†’ 5.562 s | 5.929 โ†’ 9.295 s | + +Three cold boots, `t = 0` at process launch, a ~0.2โ€“0.3 s black hold between +them. **Publisher first, every time**, and the top row of the contact sheet is +what the two segments actually show. `docs/game/navigation.md` ยง1 and +[`ui-title-build-map.md`](ui-title-build-map.md) stand. + +## Why the committed TSV says otherwise โ€” the probe attached late + +`data/boot-timeline-2026-08-29.tsv` opens at `t = 0.692` with twelve +**byte-identical** rows: mean `5.642`, `splash_dev` `+0.8707`, `splash_pub` +`+0.0294`, to four decimals. Twelve identical samples over 1.27 s are one +observation of a held screen, not twelve. + +Those exact numbers appear in my run 1 at **8.42 โ€“ 10.94 s** โ€” same mean, same +two correlations, same four decimals. So that capture's `t = 0` is roughly +**7.7 s into the guest's boot**: the publisher splash had already been and gone +before the stream opened, and the developer splash was simply the first thing the +probe ever saw. + +**The label column is right about what each frame is. It is wrong about what came +before the file starts.** Nothing in the TSV is retracted; its *reach* is. + +## The trap that makes this worse: `ADV.wmv` opens with a SQUARE ENIX card + +After the developer splash there is a black hold and then a screen that scores +**0.59 โ€“ 0.75** against `live-splash-publisher.png` โ€” above the classifier's +threshold, so it is labelled `splash_pub` a second time. In all three runs: + +| run | second "splash_pub" | +|---|---| +| 1 | 17.793 โ†’ 20.301 s | +| 2 | 16.930 โ†’ 20.664 s | +| 3 | 14.669 โ†’ 17.308 s | + +The bottom row of the contact sheet is that screen. It is a **blurred, bloomed +SQUARE ENIX wordmark, lower in the frame** โ€” the intro movie's own opening title +card, i.e. `ADV.wmv` ([`movie-binding.md`](movie-binding.md)) already playing. +The real splash's wordmark is sharp and centred; the movie's is soft and sits +below centre. + +โš ๏ธ **So `splash_pub` is not a safe label once the movie has started.** A boot +classifier keyed on `live-splash-publisher.png` will fire twice per boot. The +discriminators that do work: the real splash holds *perfectly still* (identical +frame statistics to four decimals for seconds at a time) and scores **0.93โ€“0.94**; +the movie card drifts continuously and never exceeds **0.76**. + +## The dwells are on the disc โ€” do not author them + +Both splash bundles declare their whole life. Read with the corrected keyframe +record layout ([`ui-keyframe-record-layout.md`](ui-keyframe-record-layout.md)) +and Q1's `1 unit = 1/60 s`: + +| | declared | visible span | measured (run 1 / 2 / 3) | +|---|---|---|---| +| publisher, `palogo_sqex.t32` | ฮฑ `0@15 โ†’ 255@30 โ†’ 255@235 โ†’ 232@239 โ†’ 32@251 โ†’ 0@255` | `15 โ†’ 255` = 240 u = **4.000 s** | 4.297 / 4.604 / 4.370 s | +| developer, `palogo_gamearts.t32` (`seta`, `anima` identical) | ฮฑ `0@15 โ†’ 255@30 โ†’ 255@190 โ†’ 232@194 โ†’ 32@206 โ†’ 0@210` | `15 โ†’ 210` = 195 u = **3.250 s** | 3.508 / 3.503 / 3.366 s | + +Measured รท declared, over all six spans: **1.074, 1.151, 1.093, 1.079, 1.078, +1.036** โ€” mean **1.085**. A 30 Hz timeline stretched by 8.5 % is the game +presenting at **27.6 fps**, which is the rate this corpus has measured +independently three times (27.6 on the boot splash, 28.3 and 28.8 on the idle +title โ€” [`ui-keyframe-time-unit.md`](ui-keyframe-time-unit.md)). + +โœ… **Classified decoded.** The port reads **240 units** for the publisher and +**195 units** for the developer and authors nothing. + +โš ๏ธ **Reach of the ยฑ:** a correlation crossing a threshold during a fade is not a +sharp edge, so an individual span is good to roughly ยฑ0.2 s. The developer's +first two runs agree to **5 ms**, which is the instrument at its best; run 2's +publisher span (4.604 s) is the outlier and its onset at 1.180 s is early enough +to be a stream still filling. The *order* does not depend on any of this. + +## Method + +`tools/re-capture/boot_timeline_probe.py`, whose `--control` was run first and +passed **11/11** on the content classifier and **4/4** on the plate detector, +including `live-splash-publisher.png โ†’ splash_pub` and +`live-splash-developer.png โ†’ splash_dev` with each rejecting the other at +**0.035**. So a 0.87 reading against the developer reference is a real match and +not an artefact of two dark images: the two references are both dark and they do +not correlate with each other. + +Both splash references are themselves committed captures whose identity is +independent of any correlation โ€” `live-splash-publisher.png` was matched to +`GP_TITLE` entry 10, whose elements are literally named `palogo_sqex`, and +`live-splash-developer.png` to entry 11, `palogo_gamearts` / `palogo_seta` / +`palogo_anima`. + +Boots were cold: `/dev/shm/xenia_*` cleared, no pad input at any point. + +## What this does not say + +* Nothing here is about the **movie's** length or the attract loop; the runs were + cut at 26โ€“45 s. That half is in `data/boot-timeline-2026-08-29.tsv`, whose + *intervals* are unaffected by the attach offset even though its absolute `t` is. +* The 0.2โ€“0.3 s black hold between the two splashes was not separately timed + against the declared `palogo_eff0.prm` backdrop; it is consistent with the + 0.14โ€“0.30 s black hold already measured between screens + ([`title-plate-delay-measured.md`](title-plate-delay-measured.md)) but that is + a consistency note, not a measurement of this particular gap. diff --git a/docs/re/captures/boot-order/splash-order-two-runs.png b/docs/re/captures/boot-order/splash-order-two-runs.png new file mode 100644 index 00000000..e65ff92d Binary files /dev/null and b/docs/re/captures/boot-order/splash-order-two-runs.png differ