Implement visible ADV History presentation
This commit is contained in:
@@ -1310,11 +1310,11 @@ future numbered-save integration seam, not a reason to choose a shared-profile b
|
||||
History button can be complete first, while save/load restoration stays deferred with the wider storage
|
||||
architecture decision.
|
||||
|
||||
The remaining supporting gaps are ordinary presentation operations: primary/ruby font sizes (`0x75/0x197`),
|
||||
font weight (`0x2bd`), colors/effect mode/offset (`0x76/0x77/0x78/0x1a4`), layout origin (`0x198`), surface
|
||||
rectangle fill (`0x20b`), message-window alpha (`0x131`), and retained-object presentation (`0x222`). The
|
||||
`0xd3/0xd4/0xd5` callback-sequence family drives the smooth scrollbar interpolation and is the main
|
||||
remaining scheduler detail; omitting it would affect motion fidelity, not the backlog data model.
|
||||
History's display support consists of the ordinary presentation operations: primary/ruby font sizes
|
||||
(`0x75/0x197`), font weight (`0x2bd`), colors/effect mode/offset (`0x76/0x77/0x78/0x1a4`), layout origin
|
||||
(`0x198`), surface rectangle fill (`0x20b`), message-window alpha (`0x131`), and retained-object presentation
|
||||
(`0x222`). The `0xd3/0xd4/0xd5` callback-sequence family drives the smooth scrollbar interpolation; omitting
|
||||
it affects motion fidelity, not the backlog data model.
|
||||
|
||||
The first port slice now implements an engine/session-owned `AdvTextHistory` service. `GameSession` carries
|
||||
one instance across VM scene runs, while a standalone VM owns its instance for the full top-level and nested
|
||||
@@ -1334,6 +1334,26 @@ and does not mutate it. Query scans stop at the next group-start record; their t
|
||||
the native helpers. History's remaining work is therefore presentation and interaction rather than backlog
|
||||
data access.
|
||||
|
||||
The third port slice implements visible History presentation without moving canonical records into Godot.
|
||||
Op `0x1d1` asks `AdvTextHistory` to select one retained group, skip metadata/voice records, and build a
|
||||
host-facing render batch using the target layout configured by `0x70/0x71`, positioned by `0x198`, and
|
||||
seeded by `0x7a`. `HISTORY.BIN` passes zero for flags and both color overrides, so this is its exact ordinary
|
||||
binding path; the native flag-4 raster-without-binding and flag-8 side-effect modes remain outside the live
|
||||
game call site. Godot owns only replaceable labels keyed by target layout, applies the retained font/color/
|
||||
effect snapshot, and clears stale labels whenever `0x71` resets that layout.
|
||||
|
||||
The same slice implements the support calls at their natural seams. Op `0x131` reads a host configuration
|
||||
property (currently defaulting to zero; choosing a profile/config persistence backend remains deferred),
|
||||
`0x20b` clears the addressed region of the mutable name-strip text surface, and `0x222` requests one retained
|
||||
recomposition boundary. Surface text is now a list rather than one draw per slot: HISTORY's five 600x30
|
||||
source rows therefore retain five independent speaker names, and compositor source-rectangle clipping maps
|
||||
each one into its bound object. A real-script regression retains SC0000 page one, runs unmodified
|
||||
`HISTORY.BIN`, observes a non-empty rendered row, and reaches its `(0,60000)` presentation call.
|
||||
|
||||
History's remaining work is interaction fidelity: `0x12e` rectangle hover/hit selection, stored voice replay
|
||||
through `0x1bd`, and the `0xd3/0xd4/0xd5` smooth-scroll callback scheduler. None changes backlog ownership or
|
||||
requires choosing a save/profile backend.
|
||||
|
||||
The original dependency order was **Hide Window first** to establish reusable callback/coroutine input, then
|
||||
Read-message Skip, then History after both the input layer and message-completion seam exist. Hide Window is
|
||||
now complete. Read-message Skip's semantics remain understood, but its implementation is deferred until the
|
||||
|
||||
@@ -321,7 +321,7 @@ SC0000 label_1235a reaches this when 0x1c7/0x1cc are zero. Native run-state bit
|
||||
### 0x20b `fill-surface-rect` (fill-surface-rect, argc 7)
|
||||
- **summary:** (surface_slot)(x)(y)(width)(height)(alpha)(rgb) - fill a clipped rectangle on a graphics surface with the supplied color and alpha.
|
||||
- **grounding:** source=investigation, confidence=high
|
||||
- **evidence:** Ghidra /v2: op_0x20b_handler@0x422d50 converts x/y/width/height to an exclusive rectangle, clamps alpha to 255, repacks RGB to native ARGB, and calls the surface manager's rectangle-fill path at 0x4790e0. HISTORY.BIN clears each 400x30 name strip on temporary surface 0xc1 before draw-string.
|
||||
- **evidence:** Ghidra /v2: op_0x20b_handler@0x422d50 converts x/y/width/height to an exclusive rectangle, clamps alpha to 255, repacks RGB to native ARGB, and calls the surface manager's rectangle-fill path at 0x4790e0. HISTORY.BIN clears each 600x30 name strip on temporary surface 0xc1 before draw-string.
|
||||
|
||||
### 0x20c `present-frame` (present-frame, argc 0)
|
||||
- **summary:** Present the composited frame; label_1235a uses this on the read/message-skip branch to expose the completed foreground endpoint immediately.
|
||||
|
||||
@@ -1728,3 +1728,27 @@ remaining effectful gaps total 21 instructions.
|
||||
**Next:** implement History's display slice around `0x1d1`, layout origin `0x198`, message-window alpha
|
||||
`0x131`, surface fill `0x20b`, and retained-object presentation `0x222`. After visible backlog rows render,
|
||||
finish rectangle hover/interaction, voice replay, and the `0xd3/0xd4/0xd5` smooth-scroll scheduler details.
|
||||
|
||||
### ADV History visible display implemented (2026-07-18)
|
||||
|
||||
The third bounded slice is complete. Op `0x1d1` now selects one retained group and produces an engine-owned
|
||||
render batch for the requested target text layout. `0x198` updates that layout's origin, `0x71` clears stale
|
||||
host presentation, and the existing cursor/style setters provide the target baseline and retained font,
|
||||
color, outline, and effect state. The live `HISTORY.BIN` call passes flags/colors as zero, so the port renders
|
||||
its ordinary bound-text path without inventing behavior for unused native special modes.
|
||||
|
||||
Godot maintains per-layout History labels while the engine remains the canonical backlog owner. The surface-
|
||||
text path was generalized from one string per surface to clipped lists, allowing all five speaker-name rows
|
||||
drawn into surface `0xc1` to coexist. Op `0x20b` clears each reused 600x30 name region, op `0x131` reads a
|
||||
host configuration seam with a backend-neutral default, and op `0x222` explicitly publishes the retained
|
||||
rebuild. No persistence, RT.DAT, or port-owned profile format was introduced.
|
||||
|
||||
Four focused regressions cover target origin/cursor/style, alpha/fill/present operand shaping, layout reset,
|
||||
and an end-to-end real-script path: real SC0000 page-one records are shared into unmodified `HISTORY.BIN`,
|
||||
which produces a non-empty visible row and reaches `(0,60000)` presentation without a step-cap halt.
|
||||
Validation: engine 194/194, zero-warning Godot build, threaded `SELFTEST OK`. HISTORY is now 68/78 distinct
|
||||
opcodes and 840/854 instructions handled or safe-noop; its ten remaining effectful gaps total 14 instructions.
|
||||
|
||||
**Next:** implement the basic History interaction slice around rectangle hit/hover (`0x12e`) and clean exit
|
||||
using the existing callback layer. Then add stored voice replay (`0x1bd`); leave `0xd3/0xd4/0xd5` smooth
|
||||
scroll interpolation as a separate fidelity slice.
|
||||
|
||||
Reference in New Issue
Block a user