re: the TITLE's blend states, the menu replicated twice, and the sweeps are on screen

Two more emulator runs close two of the three reach limits on the blend page.

THE TITLE (entries 4 + 2 composited). Everything alpha-over except the two
rotated sweep strips and -- the finding -- ptbtn00f, the PRESS (A) plate's
focused variant, which is ADDITIVE while its own base ptbtn00 is not. That is
what the documented plate pulse is made of, and a port drawing both alpha-over
cannot reach the pulse's peak by any pacing.

And ptlogo_back2 / ptlogo_back2eff are ALPHA-OVER. They are frame-shaped, large,
dark and 94 %/87 % transparent -- every surface property the menu's ptframe* have
-- so 'frame-shaped and mostly transparent implies additive' is refuted on the
one screen that could test it.

THE MENU replicates draw for draw in two further sessions; the one-session
caveat is retired.

THE VERTEX CAP was 8 = two quads, so a batched draw reported its first two
elements and dropped the rest. Raised to 64. This is why ptframe4, pteff21,
pteff22 and pteff23 looked like elements the game never draws: EXTRAS' 24-index
additive draw holds six quads and the log printed two.

THE SWEEPS are on screen on the main menu in every captured frame, stepping
~0.03 NDC per frame in opposite directions with their vertex alpha ramping, at
different phases in two sessions. The leaf group runs on the menu. What that
does not say is how much they contribute.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
This commit is contained in:
sylph-decoder
2026-08-31 06:42:05 +00:00
parent 97b0362bbd
commit d4bef47e38
6 changed files with 472 additions and 0 deletions

View File

@@ -111,3 +111,90 @@ neither is guessed at here.
screens the port ships is in the table except the two above and `pteff10`, which
did not appear as an identifiable quad. The title screen (build 4) was **not**
captured.
---
## 2026-08-31 (later) — the TITLE, and the reach closed on two of its three limits
The section above ended: *"two screens, one session ... The title screen (build 4)
was **not** captured."* Two more emulator runs close both.
[`data/ui-blend-title-and-replication.txt`](../data/ui-blend-title-and-replication.txt) ·
[`captures/ui-draws/blend-title-2026-08-31.log`](../captures/ui-draws/blend-title-2026-08-31.log) ·
[run 2](../captures/ui-draws/blend-main-menu-run2-2026-08-31.log) ·
[run 3](../captures/ui-draws/blend-main-menu-run3-2026-08-31.log)
### The title — 33 draws, 4 frames. The live title is entries **4 + 2** composited.
| element | quad px | disc | blend |
|---|---|---|---|
| `ptbase2` | 1280 × 720 @2× | 640×360 | alpha-over |
| the two rotated sweep strips | 883×1134, 1299×1303 | rotated AABBs | **ADDITIVE** |
| `ptlogo_back2eff` | 1132.8 × 280.8 | 1133×280 | **alpha-over** |
| `ptlogo_back2` | 1120.0 × 262.8 | 1118×262 | **alpha-over** |
| `ptlogo1` | 915.2 × 115.2 | 919×113 | alpha-over |
| `ptlogo2` | 992.0 × 104.4 | 992×104 | alpha-over |
| `ptlogo_tm` | 38.4 × 18.0 | 37×17 | alpha-over |
| `ptcopyright` | 691.2 × 18.0 | 694×20 | alpha-over |
| `ptbtn00` — the `PRESS Ⓐ` plate | 512.0 × 50.4 | 513×50 | alpha-over |
| **`ptbtn00f`** — its focused variant | 537.6 × 75.6 | 537×76 | **ADDITIVE** |
📌 **Two things here matter more than the rest.**
**`ptbtn00f` is additive and `ptbtn00` is not.** The plate's highlight variant is
composited additively over its own base — which is what the documented **pulse**
is made of, and it means a port that draws both alpha-over cannot reproduce the
pulse's peak no matter how it paces the ramp.
🔴 **`ptlogo_back2` and `ptlogo_back2eff` are ALPHA-OVER.** They are the title's
frame-shaped elements, they are large, dark and 94 %/87 % transparent — every
surface property the menu's `ptframe*` have — and the game does **not** draw them
additive. So *"frame-shaped and mostly transparent ⇒ additive"* is refuted on the
one screen where it could be tested, and the per-element table remains the only
safe reading.
### The main menu, replicated in **two more sessions**
Runs 2 and 3, separate boots hours apart, reproduce the menu's blend assignment
**draw for draw**: same states, same quad sizes, same identifications. The
"one session" caveat is retired.
Run 3 also carries a Canary fix worth its own line: the vertex dump was capped at
**8 vertices = two quads**, so a batched draw reported its first two elements and
silently dropped the rest. Raised to 64. The menu's 24-index button draw now
resolves as **six** quads — the focus ring plus all five buttons, all alpha-over —
where before it showed two.
⚠️ **The cap was not a display bug.** It is why `ptframe4`, `pteff21`, `pteff22`
and `pteff23` were reported as appearing in **no** captured draw on `EXTRAS`: that
screen's 24-index additive draw holds six quads and the log printed two.
## ✅ The sweep strips are ON SCREEN on the main menu, and they move
`sylpheed-port` flagged a real conflation in the section above: a quad's size
identifies an element and says nothing about whether it is visible, and the blend
and the visibility arrived in the same artefact. Their `authored/rendering.json`
scopes the leaf loop to the **title** only.
The draw log does retain NDC positions, so this is answerable from the artefact
already committed ([`tools/re-capture/sweep_positions.py`](../../../tools/re-capture/sweep_positions.py),
[`data/sweep-strips-on-the-menu.txt`](../data/sweep-strips-on-the-menu.txt)):
| session | frame | strip A x-range | strip B x-range | vertex alpha |
|---|---|---|---|---|
| 1 | 0 | `0.69 … 2.08` | `0.61 … 1.42` | `EF` / `9A` |
| 1 | 4 | `0.72 … 2.11` | `0.64 … 1.39` | `F0` / `9C` |
| 1 | 5 | `0.76 … 2.15` | `0.68 … 1.35` | `F2` / `9D` |
| 2 | — | `0.24 … 1.62` | `1.67 … 0.36` | `D7` / `C7` |
NDC spans `[1, +1]`, so **both strips overlap the screen in every captured
frame**, they **step ~0.03 NDC (~19 px) per frame in opposite directions**, and
their per-vertex alpha ramps with them. Two sessions catch them at different
phases, so they free-run. **The leaf group runs on the main menu.**
⚠️ **What this does not say.** That they *contribute* much. They are additive with
vertex alpha 0.600.95 over a texture that is overwhelmingly low-alpha, and this
measures submission and geometry, not the light they add. A port whose render
looks worse with them visible has either a placement, a phase or a magnitude
problem — but "the game does not draw them here" is not available as an
explanation any more.