This repository has been archived on 2026-09-16. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Syplheed-Reborn/docs/re/ui-splash-addressing.md
Sylpheed RE agent 9ca1eb50fd re(ui): answer four of the port's five asks -- splash, fade-out, focus, gamma
1 SPLASH ADDRESSING (was blocking P3). No content predicate exists: design size
fails (every extra composable bundle sampled is 1280x720, like every screen) and
element count fails (fragments run 2..15, the splash halves are 3 and 7). But
GP_TITLE needs none -- `--all` adds exactly four bundles there and all four are
real screens, with the --all index equal to the pak entry index 1:1. And there
are TWO splash screens: 11/14 are the developer logos, 10/13 are the SQUARE ENIX
publisher wordmark, which the port did not have and which the boot shows first.

2 FADE-OUT (was blocking P3). It is (a), and it is bigger than the fade quad.
Every element ends on exactly ONE untimed keyframe, which rules out (b); that
block is where the screen plays out -- quad to a=255, buttons/labels/glows to
a=0, frames hold. (c) is refuted by a null test that discriminates: a black quad
alone holds the button/background brightness ratio constant, and through the
fade it falls 6.50 -> 1.94, 3.4x monotonic.

3 FOCUS (saves P5 rework). Over-vs-instead is unobservable -- the focused sprite
covers the base at 100.0% of base-visible pixels on three pairs once aligned
(true offset (7,7); the centre alignment reads a misleading 78-84%), and
compositing both ways differs by RMSE 1.1 inside the button rect. The real defect
is the focus record's SECOND element: ptbtn0Nf.rat declares ptbtneff01.t32 (a
42x46 glowing ring, focus only) plus the bright label, where the base declares
one sprite. That ring is the marker the port draws nowhere.

5 GAMMA. The capture is not neutral: capture ~ 255*(render/255)^g, g ~ 1.34-1.49,
and the chain says it is a ramp the GAME installed, not a capture artefact. So
RMSE against captures has a floor. Reach stated: the flat patches are all dark
(render ~0-60), so midtones and highlights are unconstrained.

4 ROTATION is a human's call and is recorded in MISSION, not acted on -- the port
rotating while the reference renderer does not would make verify-screen report a
large diff meaning "the port is right". The RE half is answered: rotation is
about the declared pivot, measured against a GPU capture.

The focus record's +20 element-count word is marked 🟡 not  -- read on GP_TITLE's
ten button records only; the disc-wide check is written and still running.
2026-08-29 08:19:23 +00:00

3.1 KiB
Raw Blame History

How to address the developer-logo splash — no content rule, but GP_TITLE needs none

Status: undecodable as a general predicate, with reach — and exact for GP_TITLE, which is the only archive in scope. Answers the port's "I need a predicate, not an index."

The ask

The splash has no .rat layout child, so is_build rejects it and it is reachable only through --all / is_composable, which disc-wide also admits ~1 786 non-screen bundles. The port wanted a rule that admits the splash and not those.

In GP_TITLE the problem does not arise

$ sylpheed-cli screen list       GP_TITLE.pak    12 builds — entries 0-9, 12, 15
$ sylpheed-cli screen list --all GP_TITLE.pak    16 bundles — entries 0-15

--all adds exactly four bundles: entries 10, 11, 13, 14. All four are real screens, and not one fragment appears. So within this archive is_composable is the predicate — it is exact, with no filtering needed.

⚠️ And the renumbering worry is moot here: in GP_TITLE the --all index equals the pak entry index 1:1 across all 16. That is an accident of this archive having 16 composable bundles at entries 0…15, not a general property — but it means the port can address these by entry index without the index meaning something different from elsewhere.

And there are TWO splash screens, not one

Rendered with screen render --all --build <n> --primitives (grid):

entry elements what it draws
10 3 SQUARE ENIX publisher wordmark,
11 7 GAME ARTS / SETA / studio anima developer logos
13 3 SQUARE ENIX, ® — the twin of 10
14 7 the twin of 11

⚠️ The port has 11/14 and is missing 10/13 — the publisher half, which is the first thing the boot sequence shows. The two halves differ only by the trademark glyph ( on 10, ® on 13), which is the region/language split this archive uses everywhere else.

All four draw every element they declare (3/3 and 7/7), so nothing is silently dropped.

The general rule: looked for, not found

Two candidate predicates, both dead:

  • Design size. Every extra composable bundle sampled is 1280×720 — the same as every screen. It does not separate anything.
  • Element count. The "two-element fragment" story holds in GP_MISSION_SELECT (10 extras, all 2 elements) and fails elsewhere: GP_OPTIONS's extras have 5 and 15 elements, GP_SAVE_LOAD's have 4, 5, 6, 9 and 13. The splash's own halves have 3 and 7. The ranges overlap, so no threshold separates them.

Reach: three archives sampled beyond GP_TITLE, chosen because they have non-build composables. Not a disc-wide sweep. A rule may exist in a field not looked at — the .prm fade quad is one candidate (transitions shows overlays lack it), untested here.

So: the port is authoring this. Locating the splash by entry index is the honest description, and name_source should say it was located by index and not by a rule.