re: the capture is settled after all, and the swoosh is undecodable from

the disc

Testing my own caveat instead of leaving it hanging. I had worried the
plate-free title capture at t=4.0s was too early, since elements carry
keyframes out to t=600 and I had judged "settled" from mean luminance,
which cannot see a thin sprite still moving.

The plate sits at y 550-600 and the swoosh band at y 112-225, disjoint,
so a LATE capture works even with the plate present. The band correlates
0.7342 at t=4.0s and 0.7353 at t=21.5s -- identical to a thousandth over
17.5 seconds, with the band mean flat at 127. So the band is settled by
4 seconds, the capture I handed the port agent is sound, and my caveat is
withdrawn. It also corroborates the earlier finding that groups hold:
nothing crosses that band in 22 seconds.

That was the seventh candidate for the swoosh and the last one that was
not a format field. Pivot is inert at scale 100 and there is no
displacement anyway; fade is white-with-alpha; tint is white; the texture
is blue-leaning; additive via +0x04 bit 0x02 makes everything worse; the
capture is settled. The residual is stable and modest -- band mean +1.83,
edge-correlation 0.70 against 0.92 frame-wide.

So I have classified it rather than generating an eighth candidate:
undecodable from the disc, with the reach written out. And I have named
where a next attempt should start, which is not another field -- a
per-draw GPU capture of the running guest reads the actual blend state,
vertex colours and draw order for that band instead of inferring them
from the file. That is where static RE stops here.
This commit is contained in:
Sylpheed RE agent
2026-08-28 22:02:32 +00:00
parent 5d02d5cd60
commit e10a6d6f2c
3 changed files with 59 additions and 8 deletions

View File

@@ -109,6 +109,14 @@ authored version can be deleted.
test is to blend bit-`0x02` sprites additively and re-correlate the title
against the capture. Note `ptlogo_back2eff` is `0x8830` despite its name, so
this is a field and not a naming pattern. ❔ Not diagnosed.
**Classified: undecodable from the disc, with reach.** Seven candidates
eliminated — pivot (inert at scale 100 *and* no measured displacement), `fade`,
`tint`, texture colour, additive blend via `+0x04` bit `0x02`, and
capture-not-settled (the band is identical from t = 4.0 s to t = 21.5 s). The
residual is stable and modest: band mean **+1.83**, edge-corr **0.70** vs ≈ 0.92
frame-wide. A next attempt should use a **per-draw GPU capture** of the running
guest, which reads the actual blend state instead of inferring it — not another
field. ✅ And the plate-free capture is sound; use it.
🔴 **Refuted:** it is *not* that our dim covers the whole frame instead of
sitting beneath the UI — the logo reads +2.36 against a background of 0.74, so
the paint order is being honoured.

View File

@@ -35,6 +35,12 @@ neighbourhood, not just the line.
## Screens, classes and RTTI
* "the plate-free title capture (t ≈ 4.0 s) may be too early to be settled" →
**mine, and refuted.** The swoosh band correlates 0.7342 at t = 4.0 s and
0.7353 at t = 21.5 s — identical to 0.001 over 17.5 s.
* "`T8aD +0x04` bit `0x02` selects an additive blend" → **mine, and refuted.**
Blending those sprites additively worsens every measure against the capture.
[`ui-title-build-map.md`](ui-title-build-map.md)
* "the title logo elements' wrong pivots (off by up to 59 px, authored against the
other language's sprite) explain the swoosh rendering too thick" → **mine, and
refuted.** `blit` sizes from the texture and applies the pivot only as

View File

@@ -532,12 +532,49 @@ additive blending: it is a shape difference in one band, and it is **not
diagnosed**. Six candidates eliminated: pivot (twice — inert at scale 100, and no
measured displacement), `fade`, `tint`, texture colour, additive blend.
### ⚠️ A caveat on the plate-free capture
### 🔴 The capture IS settled — my own caveat, tested and withdrawn
It was taken at **t ≈ 4.0 s**, about **2.9 s** (≈ 174 keyframe units) after the
screen begins. Several title elements have keyframes running to **t = 600**
(10 s) — the `ptloop` sweeps among them. "Settled" was judged from mean
luminance, which cannot see a thin sprite still in motion. The capture is settled
for the bulk of the screen; it is **not proven settled for every element**, and
that is a live alternative explanation for a structural difference in exactly the
band those sweeps cross.
The previous version of this section worried that the plate-free capture, at
t ≈ 4.0 s, might be too early: elements have keyframes to t = 600 (10 s), and
"settled" had been judged from mean luminance, which cannot see a thin sprite
still moving.
The plate sits at y ≈ 550600, **disjoint** from the swoosh band at y 112225, so
a *late* capture works even with the plate present. Correlating the render's band
against the same band at several ages of the screen:
| capture | band edge-corr | band mean |
|---|---|---|
| t = 4.0 s (plate-free) | **0.7342** | 126.63 |
| t = 6.0 s | 0.7351 | 126.97 |
| t = 12.0 s | 0.7352 | 126.98 |
| t = 18.0 s | 0.7353 | 126.98 |
| t = 21.5 s | 0.7353 | 126.98 |
Identical to within 0.001 over 17.5 s. **The band is settled by t = 4.0 s**, the
capture handed to the port agent is sound, and the caveat is withdrawn. It also
corroborates that the groups **hold**: nothing crosses that band in 22 s.
## ❔ The swoosh: undecodable from the disc, with reach
Seven candidates eliminated, none confirmed:
| candidate | verdict |
|---|---|
| element **pivot** (off by 59 px, authored for the other language) | inert — `blit` sizes from the texture and applies the pivot only when scale ≠ 100; all seven elements are scale `(100,100)` |
| **displacement** | none — shifting ±80 × ±8 px peaks sharply at (0,0), 0.734 → 0.22 at ±24 px |
| **`fade`** | `0x??ffffff` on every keyframe: white RGB, alpha only |
| **`tint`** | `0xffffffff` throughout |
| **texture colour** | blue-leaning (175,174,198); the glow warm — neither pink |
| **additive blend** via `T8aD +0x04` bit `0x02` | refuted: every measure worsens |
| **capture not settled** | refuted above |
The residual is stable and modest: band mean **+1.83**, band edge-correlation
**0.69710.735** against ≈ 0.92 frame-wide. Real, persistent, and **not located in
any field this project can read from the disc**.
**Where a next attempt should start, and it is not another field.** A per-draw GPU
capture of the running guest (`--log_ui_draws`, the route that produced
[`ui-title-paint-order-capture.md`](ui-title-paint-order-capture.md)) reads the
*actual* blend state, vertex colours and draw order the game submits for that
band, instead of inferring them from the file. That is where static RE stops here.