Implement retained ADV History writers
This commit is contained in:
@@ -1316,10 +1316,17 @@ rectangle fill (`0x20b`), message-window alpha (`0x131`), and retained-object pr
|
||||
`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.
|
||||
|
||||
The port currently retains only the current `_advText` plus a diagnostic `(offset,text)` capture list.
|
||||
History should therefore begin with an engine/session-owned `AdvTextHistory` service—records, logical index,
|
||||
suppression, and clear lifetime—fed by the native write opcodes. The host should render a requested group;
|
||||
it should not own the canonical backlog. No persistence format is required for that first slice.
|
||||
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
|
||||
script lifetime. The model retains the logical index, typed text/metadata/voice records, group-start flags,
|
||||
layout/cursor snapshots, and font/color/effect state. Ops `0x70`, `0x71`, `0x6e`, `0xc4`, `0x1d2`, `0x1bb`,
|
||||
and `0x85` feed it directly; Godot remains only a presentation host and does not own the canonical backlog.
|
||||
|
||||
The model intentionally has no JSON or disk serialization. `GameSession.ToJson()` continues to snapshot
|
||||
only the pre-existing global banks, so landing the live backlog does not silently choose a save/profile
|
||||
backend. Native numbered-save restoration remains the explicit future integration seam described above.
|
||||
The next History slice can now implement generic inline arrays/value dispatch and ops `0x1d0..0x1d4` over
|
||||
real retained data before adding host rendering.
|
||||
|
||||
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
|
||||
|
||||
@@ -1680,3 +1680,27 @@ backend decision in this slice. Full layout, lifecycle, and opcode evidence live
|
||||
path first, with focused synthetic tests for grouping, metadata, voice pairs, suppression, and clear. Then
|
||||
add generic literal-array/switch support and the HISTORY read/render path. This orders the work around the
|
||||
data that must exist before clicking History can display anything.
|
||||
|
||||
### ADV History retained writer model implemented (2026-07-18)
|
||||
|
||||
The recommended first slice is complete. `AdvTextHistory` is an engine model rather than a Godot widget:
|
||||
standalone VMs own it for their complete nested-script lifetime, and `GameSession` supplies one shared
|
||||
instance to successive scene VMs. It stores logical `{layout_slot,first_record_index}` entries and semantic
|
||||
text, typed-metadata, and voice-pair records with native flags, layout/cursor snapshots, and the active
|
||||
font/color/effect style.
|
||||
|
||||
The ordinary native write path is live. Ops `0x70/0x71` configure/reset layouts and establish group
|
||||
boundaries; `0x6e`, `0xc4`, and `0x1d2` append text, voice, and metadata records; `0x1bb` suppresses all of
|
||||
those writers while HISTORY renders itself; and `0x85` clears the retained vectors at ordinary ADV block
|
||||
boundaries. The already-reversed font, color, mode, effect, bold, and cursor setters update the snapshots
|
||||
future history rendering will consume.
|
||||
|
||||
Five focused regressions cover grouping and first-record flags, metadata and voice fields, style/layout
|
||||
snapshots, suppression/re-enable, clear lifetime, session sharing, and the real SC0000 first page reaching
|
||||
its wait with string `0x14963` retained. Validation: engine 182/182, zero-warning Godot build, threaded
|
||||
`SELFTEST OK`. Static HISTORY coverage is now 56/78 distinct opcodes and 798/854 instructions handled or
|
||||
safe-noop.
|
||||
|
||||
**Next:** implement generic inline integer arrays (`0x64`) and value-switch dispatch (`0xa1/0xa2/0xa3`),
|
||||
then wire History navigation/query ops `0x1d0`, `0x1d3`, and `0x1d4` against this model. Rendering op `0x1d1`
|
||||
and its presentation operations can follow once those data-side script paths execute correctly.
|
||||
|
||||
Reference in New Issue
Block a user