Fix ADV and BUNKI animation polish
This commit is contained in:
@@ -2330,9 +2330,11 @@ non-overlapping name/dialogue bands at y=447–468, 478–500, and 507–530. A
|
||||
#### ADV wait indicator -- ops `0x73` / `0x72` (2026-07-11)
|
||||
|
||||
The small bat marker is a configured ADV-layout sprite, not a glyph or part of SO001. `SYSTEM4.BIN`
|
||||
loads universal raw asset `0x337c` (`SO000.AGF`) into surface slot 12. SO000 is a 390x27 strip of thirteen
|
||||
30x27 bat frames. It then executes op `0x73` with
|
||||
loads universal raw asset `0x337c` (`SO000.AGF`) into surface slot 12. SO000 decodes to a 360x27 strip of
|
||||
twelve 30x27 bat frames. It then executes op `0x73` with
|
||||
`(layout=1, x=385, y=140, surface=12, src=0,0, cell=30x27, terminalFrame=12, period=48ms)`.
|
||||
The terminal value is exclusive/a frame count: native publishes frames `0..11` and wraps before frame
|
||||
`12`.
|
||||
Layout 1 begins at screen y=430, so the marker lands at `(385,570)`, matching the original screenshot.
|
||||
|
||||
Native `op_0x73_configure_wait_indicator@0x41e900` writes this descriptor through
|
||||
@@ -2345,10 +2347,12 @@ the following click releases the wait.
|
||||
**Port implementation:** the single-scene harness now injects SYSTEM4's exact SO000 surface-12 and op-`0x73`
|
||||
configuration alongside its existing SO001 shortcut. The VM forwards all ten operands through the host ABI;
|
||||
`GodotAdvHost` retains configurations by layout and resolves slot 0 to the active Phase-A layout. A separate
|
||||
Godot atlas overlay advances the inclusive frames `0..12` on the 48 ms host clock only while `IsWaiting`,
|
||||
then hides immediately when input releases the wait. Keeping this 30x27 overlay outside the software
|
||||
backbuffer preserves the static-wait compositor optimization. Full SYSTEM4 replay remains Phase-B work;
|
||||
the shortcut carries the same state in the meantime.
|
||||
Godot atlas overlay advances on the 48 ms host clock only while `IsWaiting`, then hides immediately when
|
||||
input releases the wait. A 2026-07-27 polish fix removed the port's erroneous `TerminalFrame + 1`
|
||||
interpretation, which had selected nonexistent frame `12` once per cycle and made Godot render one empty
|
||||
atlas cell. Frame selection now treats the terminal value as the exclusive frame count and loops `0..11`.
|
||||
Keeping this 30x27 overlay outside the software backbuffer preserves the static-wait compositor optimization.
|
||||
Full SYSTEM4 replay remains Phase-B work; the shortcut carries the same state in the meantime.
|
||||
|
||||
### SC0000 native SFX / BGM-fade family — `0xb4`/`0xb5`/`0xb6`/`0xc2`/`0xd9` (2026-07-11)
|
||||
|
||||
@@ -2997,6 +3001,28 @@ embedded-NUL termination, all observed comparison operand classes, and the exact
|
||||
case. The full 281-test engine suite, zero-warning Godot build, and threaded frontend selftest pass; manual
|
||||
DEBUGMAP and developer-menu visual rechecks remain.
|
||||
|
||||
#### BUNKI popup publication and BUNKIMOVE lifecycle (2026-07-27)
|
||||
|
||||
BUNKI's opening/closing effect is an offscreen capture, not an independent decoration behind a stable
|
||||
popup. BUNKI builds the complete panel under handles `60000..60099`, including surface-200 text, and calls
|
||||
`BUNKIMOVE.BIN`. BUNKIMOVE selects 800x600 surface 2, publishes that retained range into it, restores the
|
||||
backbuffer, binds the capture at handle `59999`, and scales it horizontally and then vertically through
|
||||
timed callbacks. Each transition frame publishes `[0,60000)`, deliberately including the animated capture
|
||||
while excluding BUNKI's stable objects. On open, BUNKI publishes the stable menu only after BUNKIMOVE
|
||||
returns; on close, it removes the stable range after the reverse animation.
|
||||
|
||||
The port previously treated a backbuffer `0x222` as a generic repaint request and reconstructed every
|
||||
visible retained object. It therefore drew handles `60000+` at full size above handle `59999`, making the
|
||||
real popup appear immediately while its opening animation ran behind it; closing had the symmetric error.
|
||||
Godot now retains zero-based backbuffer publication ranges and filters reconstruction to the active range.
|
||||
Nonzero ranges remain incremental overlays over a full reconstruction because the port does not preserve
|
||||
native D3D backbuffer pixels between publications.
|
||||
|
||||
Surface text also remains modeled metadata rather than pixels. Selected-target publication now projects
|
||||
that metadata into the destination surface, and the final Godot labels inherit the retained object's
|
||||
projected scale and rotation. Consequently BUNKIMOVE's captured labels follow the same transform as its
|
||||
panel instead of escaping as full-size Control overlays.
|
||||
|
||||
### Formatted integers on text surfaces — opcode `0x205` (2026-07-21)
|
||||
|
||||
The deployment picker opened from an empty DEBUGMAP deployment slot uses a third numeric path. Its red
|
||||
|
||||
@@ -29,7 +29,7 @@ Port status (2026-07-24): after the blocking host releases this wait, the VM que
|
||||
### 0x73 `configure-adv-wait-indicator` (configure-adv-wait-indicator, argc 10)
|
||||
- **summary:** (layout_slot)(dst_x)(dst_y)(surface_slot)(src_x)(src_y)(cell_w)(cell_h)(terminal_frame)(frame_period_ms) - configure the animated marker shown while the selected ADV layout waits for input.
|
||||
- **grounding:** source=investigation, confidence=high
|
||||
- **evidence:** Ghidra /v2: op_0x73_configure_wait_indicator@0x41e900 passes operands 1..9 to adv_text_configure_wait_indicator@0x44ff60 and operand 10 to adv_indicator_set_frame_period@0x44d060. The worker writes surface/source rect, layout-relative destination, enabled=1, and terminal/column values to the selected layout at +0x3c..+0x60. SYSTEM4 executes `set-texture 0x337c 0xc 0xff00` (raw id 0x337c = SO000.AGF, a 390x27 strip of thirteen 30x27 bat frames), then `0x73 1 385 140 12 0 0 30 27 12 48`; layout 1 begins at y=430, placing the 30x27 marker at screen (385,570), matching the original. Op 0x72 activates this descriptor only after reveal completion.
|
||||
- **evidence:** Ghidra /v2: op_0x73_configure_wait_indicator@0x41e900 passes operands 1..9 to adv_text_configure_wait_indicator@0x44ff60 and operand 10 to adv_indicator_set_frame_period@0x44d060. The worker writes surface/source rect, layout-relative destination, enabled=1, and terminal/column values to the selected layout at +0x3c..+0x60. SYSTEM4 executes `set-texture 0x337c 0xc 0xff00` (raw id 0x337c = SO000.AGF, a decoded 360x27 strip of twelve 30x27 bat frames), then `0x73 1 385 140 12 0 0 30 27 12 48`; the value 12 is the exclusive terminal/frame count, so animation publishes frames 0..11 and wraps before 12. Layout 1 begins at y=430, placing the 30x27 marker at screen (385,570), matching the original. Op 0x72 activates this descriptor only after reveal completion.
|
||||
|
||||
### 0x75 `set-font-size` (set-font-size, argc 1)
|
||||
- **summary:** (pixels) - set the primary text font height and rebuild its native rasterization state.
|
||||
|
||||
Reference in New Issue
Block a user