re: ui layout generalizes — the title main menu rebuilds too
Second screen, independent of the pause work: GP_TITLE.pak's ptbtn01..05.rat give X=542 for all five items and Y=162/242/322/402/482, an 80px pitch where the pause menu used 70. Measured against the main-menu screenshot the sprite tops sit at a constant +46px for all five, which is exactly the 45px of Xenia window chrome plus one — so the record's Y is the sprite's top edge in the guest framebuffer, to the pixel, on a screen the format was not derived from. GP_TITLE also splits by sub-screen the way the pause pak splits by context: ptbtn00 (PRESS A BUTTON), ptbtn01..05 (main menu), ptbtn11..13 (EXTRAS submenu), pgloading_* (loading screen). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -22,7 +22,7 @@ Promote to a prose `structures/…md` file when a format needs behavioural notes
|
||||
| XBG7 mesh | 🟡/❔ | `sylpheed-formats/src/mesh.rs` + `tests/mesh_disc.rs` ([xbg7](structures/xbg7-mesh.md)) | weapons/props: declaration-driven variable stride (36 models), GPU-confirmed. **Stage containers: 5662 sub-models across 22 stages** via content-anchored grouped pools (`stage_models`). Quantized hero bodies (DeltaSaber `f004`) still declined |
|
||||
| Capital-ship part placement | 🟡 | `sylpheed-formats/src/ship.rs` (static) + [runtime capture](ship-placement-runtime-capture.md) | hull placement static-exact; external parts approximate statically. **Runtime capture** (Canary F10 → VS-constant WorldView) gives ground truth — validated on `e106` destroyer; not yet baked into the viewer |
|
||||
| Weapon fields defaulted on disc | ✅/🟡 | [runtime DATA SHEET](weapon-datasheet-runtime.md) | The Arsenal Gallery-Mode panel reads the live record: `Ammo Capacity` = `LoadingCount` ✅, `Max. Lock Ons` = `TriggerShotCount` ✅. Recovers `TriggerShotCount` for `wep_05`/`wep_60` (both **4**); brackets defaulted `Power`/`MaximumRange` via the letter classes. 9 of ~61 weapons reachable at 5 % save progress |
|
||||
| UI screen layout (`.rat`) | ✅/🟡 | [ui-rat-layout](structures/ui-rat-layout.md) | One pak per UI screen; each RATC = one (context × language) build; every `<name>.t32` sprite has a `<name>.rat` **layout record** (BE u32; 1280×720 design space; scale/tint/X/Y, keyframes for animated elements, `opt ` link to the focused state). **The tutorial PAUSE menu rebuilds pixel-accurately from the disc.** `loop1.rat` (screen-level draw order) not yet decoded |
|
||||
| UI screen layout (`.rat`) | ✅/🟡 | [ui-rat-layout](structures/ui-rat-layout.md) | One pak per UI screen; each RATC = one (context × language) build; every `<name>.t32` sprite has a `<name>.rat` **layout record** (BE u32; 1280×720 design space; scale/tint/X/Y, keyframes for animated elements, `opt ` link to the focused state). **The tutorial PAUSE menu and the title main menu both rebuild pixel-accurately from the disc.** `loop1.rat` (screen-level draw order) not yet decoded |
|
||||
|
||||
## Functions / code paths
|
||||
|
||||
|
||||
BIN
docs/re/captures/ui-layout/title-mainmenu-real-vs-rebuilt.png
Normal file
BIN
docs/re/captures/ui-layout/title-mainmenu-real-vs-rebuilt.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 220 KiB |
@@ -136,6 +136,23 @@ game, twice, in that order — the records were never fitted to the picture.
|
||||
> proves nothing. The in-mission coordinates remain **unverified**: confirming them needs a
|
||||
> screenshot of a pause during an actual mission.
|
||||
|
||||
## It generalizes — the title screen
|
||||
|
||||
The same method run against `GP_TITLE.pak` reproduces the **main menu**, which is a
|
||||
different screen with a different item count and a different pitch:
|
||||
|
||||

|
||||
|
||||
`ptbtn01..05.rat` give X = 542 for all five and Y = 162 / 242 / 322 / 402 / 482 — an
|
||||
**80 px** pitch, where the pause menu used 70. Measured against the screenshot, the sprite
|
||||
tops land at a constant **+46 px** for all five (one reads 45, a 1-px edge-detection
|
||||
wobble), and 46 is exactly the 45 px of Xenia window chrome plus one. So the record's Y is
|
||||
the sprite's top edge in the guest framebuffer, to the pixel, on a second screen.
|
||||
|
||||
`GP_TITLE.pak` also splits by sub-screen the way the pause pak splits by context:
|
||||
`ptbtn00` alone (the `PRESS Ⓐ BUTTON` prompt), `ptbtn01..05` (main menu), `ptbtn11..13`
|
||||
(the EXTRAS submenu), plus `pgloading_*` for the loading screen.
|
||||
|
||||
## Two traps this caught
|
||||
|
||||
Both were mistakes made during this analysis, caught by comparing against the real game —
|
||||
|
||||
Reference in New Issue
Block a user