Commit Graph

60 Commits

Author SHA1 Message Date
gamer147
d4510242d6 Land SYSTEM4-rooted Godot boot 2026-07-20 18:13:32 -04:00
gamer147
b7e92bdb2f Document opcode 0x1fe current rotation 2026-07-20 16:51:30 -04:00
gamer147
bc5763e65e Implement ADV skip lifecycle 2026-07-20 16:41:44 -04:00
gamer147
d1af8e3b07 Implement detached object animation control 2026-07-20 14:53:34 -04:00
gamer147
ae157da04c Implement retained graphics lifecycle ops 2026-07-20 14:29:41 -04:00
gamer147
f5663ec595 Reverse shared SAVE.DAT integer opcodes 2026-07-20 13:33:27 -04:00
gamer147
188315e66b Document opcode 0x1a2 compatibility debt 2026-07-20 13:13:38 -04:00
gamer147
c8303babf5 Reverse opcode 0x1ad save resume boundary 2026-07-20 12:06:02 -04:00
gamer147
4179d90b8f Implement deferred SFX and voice duck control 2026-07-20 11:29:12 -04:00
gamer147
3fa07c0ae5 Implement ADV text publication service 2026-07-20 10:18:10 -04:00
gamer147
96e4448796 Implement AGE text line spacing 2026-07-19 23:32:38 -04:00
gamer147
7c110d762b Implement History mouse wheel navigation 2026-07-19 21:38:34 -04:00
gamer147
81155c5e1c Implement History timed callback scrolling 2026-07-19 21:15:15 -04:00
gamer147
f928572152 Correct ADV History metadata ordering 2026-07-19 20:55:16 -04:00
gamer147
d3698a0612 Implement ADV History voice replay 2026-07-19 14:11:49 -04:00
gamer147
2c6bf9a4cd Correct ADV History layout addressing 2026-07-19 10:43:52 -04:00
gamer147
e80a120217 Implement ADV History interaction 2026-07-19 00:13:47 -04:00
gamer147
fef61323b1 Implement visible ADV History presentation 2026-07-18 23:59:26 -04:00
gamer147
7dec791876 Implement ADV History data navigation 2026-07-18 23:41:23 -04:00
gamer147
bd6c92519c Document ADV History retained-record model 2026-07-18 23:16:50 -04:00
gamer147
66b13315f2 Correct ADV Hide Window restore behavior 2026-07-18 22:23:06 -04:00
gamer147
ad022ace51 Implement native ADV Hide Window path 2026-07-18 21:14:06 -04:00
gamer147
b76f175333 Document ADV history and remaining button paths 2026-07-18 20:28:36 -04:00
gamer147
dc50acaa9b Implement native ADV message skip 2026-07-18 17:32:12 -04:00
gamer147
4bf98cc7af Implement ADV controls and native Auto timing 2026-07-18 17:16:06 -04:00
gamer147
8c7c7158a7 Fix retained background lifecycle 2026-07-12 00:00:45 -04:00
gamer147
b6cd571165 Fix AE001H cyclic color blending 2026-07-11 22:21:10 -04:00
gamer147
aa14ad6b3d Fix AE001H translation target query 2026-07-11 21:40:16 -04:00
gamer147
5614fc7631 Restore ADV wait indicator 2026-07-11 21:12:24 -04:00
gamer147
ca562da209 Fix AE001H spritesheet animation 2026-07-11 20:37:26 -04:00
gamer147
2a49a0697c fix(gfx): restore third CG glow 2026-07-11 20:05:51 -04:00
gamer147
36960d4118 Implement SC0000 movie playback lifecycle 2026-07-11 12:27:51 -04:00
gamer147
2232216832 Implement native-backed SC0000 SFX lifecycle 2026-07-11 02:15:17 -04:00
gamer147
921c91474f Implement native ADV retained text 2026-07-10 22:46:27 -04:00
gamer147
f94bca4ba5 Refresh retained presentation references 2026-07-10 21:56:57 -04:00
gamer147
85a66afe20 Fix native retained presentation batching 2026-07-10 21:37:42 -04:00
gamer147
8731d6389c Implement native 0x202 color interpolation 2026-07-10 20:49:28 -04:00
gamer147
d6d1be984e Implement ADV foreground transition lifecycle 2026-07-10 18:49:53 -04:00
gamer147
768863b48e feat: add affine rotation rendering and timeline diagnostics 2026-07-10 17:54:33 -04:00
gamer147
4d225618f9 fix: align animation pacing and transforms with native 2026-07-10 15:41:17 -04:00
gamer147
5427e9d776 feat: split native scale and translation channels 2026-07-10 10:28:11 -04:00
gamer147
f2797d5ab7 feat: model ADV coroutines and retained effect teardown 2026-07-10 09:45:43 -04:00
gamer147
d8bdcfed2d docs: record SC0000 anim cluster coverage (opcodes + slice plan)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 22:13:56 -04:00
gamer147
21788a6264 docs: record blend/transparency slice A (colorkey + alpha/tint + fade fill)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 19:10:31 -04:00
gamer147
b2291fbb3f docs: correct the overstated 'opening animates' claim across all docs
The frame-paced-sleep slice did NOT make the opening burst animate (only the
one-shot dramatic pauses). Correct the canonical result (phase-a-slice-plan),
the RE doc (engine-re), the opcode source+generated ref (opcodes.toml 0xc8),
and add correction banners to the point-in-time spec/plan. Also folds in the
diagnostics + headless halt-at-wait results into phase-a-slice-plan.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 10:53:08 -04:00
gamer147
6ce4da05a1 re(gfx): decode sleep 0xc8 timing (non-blocking ms timer) + 0x20c present
- sleep_op_0xc8 @0x420ec0: arms a non-blocking main-loop-polled timer
  (sleep_timer_arm @0x44cff0); operand = milliseconds. Also carries
  anti-tamper + gfx cmd-type 3 (not needed host-side).
- 0x20c = gfx_op_0x20c_present_frame (host presents continuously -> noop_headless).
- Ghidra annotated + saved; opcodes.toml rebuilt (lint clean); engine-re.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 08:57:22 -04:00
gamer147
69c741facc feat(gfx): label + dispatch set-anim-transform 0x21e/0x220 into GfxState
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 23:37:28 -04:00
gamer147
b94a20b9ec feat(tools): per-scene opcode completeness tracker + 0x259 marker fix
Add tools/scene_opcode_coverage.py: histograms a scene's static opcodes and
classifies each vs the C# VM as impl / safe-noop / GAP (effectful op the VM
silently stubs). Implemented set is parsed live from VirtualMachine.cs case arms
(no drift); metadata from build/opcodes.json. Makes a half-rendered scene legible
("N ops still stubbed") instead of implying everything runs.

SC0000 baseline: 129 distinct ops, ~94.8% instruction-weighted handled, 68 GAP.
The tracker cross-checks opcodes.toml vs VM behavior and surfaced 0x259
(script-entry marker) missing its noop_headless flag -> reconciled in opcodes.toml
and rebuilt (regen: age_opcodes_himegari.py, opcode-reference.md).

Docs: tools-reference.md (tool row), phase-a-slice-plan.md (completeness gauge).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:57:25 -04:00
gamer147
1b8c8c6ac7 fix(gfx): op 0x215 query registry is separate from the geometry store
The retained-mode "2nd CG renders off-screen" bug: GfxState conflated two
distinct native structures. It assigned a fabricated AcquireSlot() slot on
every GetOrCreate (called by all geometry/draw ops) and returned it from
QuerySlot (op 0x215). But Ghidra (gfx_op_0x215_register_query @0x42a0b0 /
gfx_op_0x1a2_registry_insert @0x42d360) shows 0x215 does map.find(handle) over
a registry populated ONLY by op 0x1a2 -- it never allocates a slot.

So a CG handle (never 0x1a2-registered) read back as "existing", took the
existing branch of label_12649, ran get-texture-size on the wrong slot (0),
got size 0, and computed dst = pos(0,0) - (w/2,h) = (-400,-600) -> off-screen.
The real engine returns -1 -> the fresh branch -> anchor from the INIT2 arrays
-> dst=(0,0).

Fix: GfxState keeps a separate _registry (HashSet) populated only by
Register() (op 0x1a2); QuerySlot returns the handle if registered else -1, and
no longer consults the geometry store or invents slots. Drop AcquireSlot /
GfxObject.Slot / the free-list.

Verified: Age.Cli gfx --boot SC0000.BIN -> all event CGs dst=(0,0), zero
(-400,-600) draws; Godot --boot pages 1/2/4 render opening CGs full-screen;
engine 44/44; sweep parity 284 exit / 13 STEP-LIMIT unchanged.

Docs: engine-re.md (query-registry-vs-geometry-store section), opcodes.toml
0x1a2/0x215 rebuilt; Ghidra helpers gfx_registry_map_find/hash_insert
annotated + saved. Tests rewritten to the native contract.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:09:11 -04:00
gamer147
fa23b78f26 fix(gfx): 0x1f7 is a registry ERASE, not a create
RE correction: op 0x1f7's worker gfx_registry_erase_range (@0x47d8b0) loops
gfx_registry_erase over [handle, handle+count) — a teardown, not a create.
Objects are created lazily by the geometry SET ops (gfx_object_get_or_create).
GfxState.EraseRange + VM case + tests; opcodes.toml renamed gfx-elem-create ->
gfx-elem-erase; Ghidra handler + workers annotated. Booted SC0000 CG geometry
unchanged for the working CGs (no regression). Engine 40 green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 19:05:31 -04:00