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.
3.1 KiB
❔ 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.