Commit Graph

103 Commits

Author SHA1 Message Date
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
eee9022cfb Clear ADV History presentation on exit 2026-07-19 11:32:36 -04:00
gamer147
792d37ccfe Restore multi-row ADV History display 2026-07-19 10:57:58 -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
dae651e0dd Implement retained ADV History writers 2026-07-18 23:28:26 -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
7f5b88117b Pace ADV message skip by engine ticks 2026-07-18 19:04:15 -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
7c0495c88d Optimize identity raster paths 2026-07-11 15:31:56 -04:00
gamer147
9f1fcb5602 Optimize static wait presentation 2026-07-11 13:56:30 -04:00
gamer147
0c55d5e8a4 Fix ADV chrome one-shot blending 2026-07-11 13:28:31 -04:00
gamer147
36960d4118 Implement SC0000 movie playback lifecycle 2026-07-11 12:27:51 -04:00
gamer147
0d3078de03 Migrate audio payloads onto asset VFS 2026-07-11 11:01:11 -04:00
gamer147
d6da43c818 Mount SYS4 append asset catalogs 2026-07-11 10:42:33 -04:00
gamer147
ec07c76721 Decode AGF textures through the asset store 2026-07-11 09:55:58 -04:00
gamer147
8e0f769a6e Implement base SYS4 asset store 2026-07-11 09:14:14 -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
f3fc25debf feat: scene-entry state capture -> auto-seed for single-scene runs
capture_global_writes.py hooks vm_operand_write@0x425fb0 (plaintext values,
before the obfuscated store — sidesteps the shelved flat-scan problem) and folds
the engine's global-int writes into a GameSession snapshot. --spawn captures from
boot (packer-aware: polls until the code unpacks, then attaches — AGE.EXE unpacks
in-place so a spawn-time hook hits packed bytes; also kills the spawned pid if
setup fails so no suspended orphan). Age.Cli 'trace ... --state <snap>' runs a
scene from the captured state.

Validated: a real boot->new-game->SC0000 capture (34008 globals incl. G[0x6c1]=1)
seeds the VM to match the engine's ENTIRE opening (542 ops, no non-realignable
fork) with zero manual seeding. Residual: a 2-op color detour (0x202/0x203)
unfixed by state = a real branch diff to chase. Engine 81/81, diff 5/5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 13:30:14 -04:00
gamer147
662109af67 feat(engine): 0xADDR=VAL seeds for trace --trace-json
Lets the differential oracle inject pre-scene state the cold --boot misses
(e.g. 0x6c1=1, the ADV-chrome enable). Seed test: seeding G[0x6c1]=1 pushes
SC0000 VM-vs-engine agreement 27 -> 65 ops; residual mismatches are operand-hook
blind spots (comment/set-string read inline args, not via vm_operand_fetch),
provably not control-flow forks. Observe-only; parity unaffected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 12:45:08 -04:00
gamer147
f2936cbf36 feat(engine): --trace-json emitter for the differential oracle
JsonOffsetTraceSink records every executed instruction offset (bytecode word
index) of one target script, in order, filtered to the scene's own frame
(call-script subroutines excluded) to match the Frida engine tracer's
per-codebase filter. Wired as 'trace <SCENE.BIN> [--boot] --trace-json <out>'.
Observe-only; sweep path and trace parity untouched. +2 xUnit tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 11:20:23 -04:00
gamer147
68d52f218a diag+docs: confirm grey-BG root cause = unfilled slot-table (label_125bd via stubbed coroutine op 0x140)
Traced end-to-end (AGE_DIAG_SETTEX): set-texture slot=G[0x62452] <- query-gfx-object?
(-1 for unregistered CG handles) -> fallback lookup-array-2d(rec[s3]=G[0x3239])=0
because the slot table is never filled: label_125bd (SC0000 0x50f, slots 4..13) is
gated behind the scene-coroutine framework (0x140 coroutine-yield, stubbed). Adds
env-gated VM set-texture/query slot diagnostics + GfxState.IsRegistered.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 23:55:50 -04:00
gamer147
1a502d5adc fix: color-op alpha (0x202/0x203/0x232) is TINT STRENGTH, not object opacity
Root cause (evidence: gfx-log) of the opening-CG grey background: a CG drawn with
(alpha=0, color=white) means 'no tint' = fully opaque, but slice-A conflated the
color alpha with object opacity -> the CG rendered transparent. RenderObject now
carries TintStrength separately from Alpha (opacity); resolution keeps textured
objects opaque. Tests updated to the evidence-based semantics.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 23:41:03 -04:00
gamer147
20fd0c634c feat: wire SC0000 anim cluster ops (0x22f/0x229 pos, 0x239/0x231 sheet, 0x232 glow, 0x228/0x23f query)
Coverage 67->74/129; parity held (79/79, sweep 284/13).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 22:07:51 -04:00
gamer147
81a878cd0b feat: port anim interpolator (ping-pong spritesheet cell + color glow) on nowMs
BlendMath.PingPong + SnapshotVisibleObjects(nowMs); no-arg overload keeps
headless callers deterministic (parity held, 76/76 + sweep 284/13).

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