Commit Graph

86 Commits

Author SHA1 Message Date
gamer147
7f2a81885a Recover signed INIT data semantics 2026-07-22 21:05:48 -04:00
gamer147
5f743275bf Model linked INIT record tables 2026-07-22 16:57:59 -04:00
gamer147
d6a69ba9b4 Correct INIT extraction and profile item fields 2026-07-22 16:44:53 -04:00
gamer147
4c9719c5dc Document performance baselines and native animation cadence 2026-07-22 12:06:54 -04:00
gamer147
4f5137a98f Harden movie playback lifecycle and diagnostics 2026-07-22 09:44:57 -04:00
gamer147
f53056818d Prevent failed combat movies from blocking 2026-07-21 20:46:10 -04:00
gamer147
cca7d3d82e Correct native packed resource addressing docs 2026-07-21 20:14:07 -04:00
gamer147
cc6db721db Implement deployment card numeric rendering 2026-07-21 17:31:57 -04:00
gamer147
3785706426 Document BUNKI menu opcode contracts 2026-07-21 16:26:39 -04:00
gamer147
e2973f66b1 Document numeric HUD opcode contracts 2026-07-21 15:40:46 -04:00
gamer147
fdcfbd9fa6 Implement movie surface stop-time queries 2026-07-21 14:43:24 -04:00
gamer147
1f8b36937b Document ADV system menu input path 2026-07-21 11:01:50 -04:00
gamer147
f840e356cf Implement script-configured input bindings 2026-07-21 10:32:37 -04:00
gamer147
313d57f01f Document SYS4 logical input bindings 2026-07-21 10:07:21 -04:00
gamer147
f6479209ea Implement ROOM fades and character voices 2026-07-21 00:47:29 -04:00
gamer147
9582731f6f Document packed raw SFX addressing 2026-07-20 18:32:56 -04:00
gamer147
7250de7fea Document B0 natural boot control spine 2026-07-20 17:29:38 -04:00
gamer147
745e6e18b5 Document opcode 0x1fe current rotation 2026-07-20 16:51:30 -04:00
gamer147
7d438a7574 Implement ADV skip lifecycle 2026-07-20 16:41:44 -04:00
gamer147
458b65aee6 Reverse shared SAVE.DAT integer opcodes 2026-07-20 13:33:27 -04:00
gamer147
26b6c2137c Reverse opcode 0x1ad save resume boundary 2026-07-20 12:06:02 -04:00
gamer147
0fb608c35e Implement ADV text publication service 2026-07-20 10:18:10 -04:00
gamer147
e0aae05f32 Implement AGE text line spacing 2026-07-19 23:32:38 -04:00
gamer147
b8928ec7b8 Implement History mouse wheel navigation 2026-07-19 21:38:34 -04:00
gamer147
5ba16505d6 Implement History timed callback scrolling 2026-07-19 21:15:15 -04:00
gamer147
8f94ef86ac Implement ADV History voice replay 2026-07-19 14:11:49 -04:00
gamer147
280705d69c Correct ADV History layout addressing 2026-07-19 10:43:52 -04:00
gamer147
ac5437c5cf Implement ADV History data navigation 2026-07-18 23:41:23 -04:00
gamer147
9a6bc38f40 Document ADV History retained-record model 2026-07-18 23:16:50 -04:00
gamer147
56f8adfa2d Correct ADV Hide Window restore behavior 2026-07-18 22:23:06 -04:00
gamer147
d8ead3da6e Implement native ADV Hide Window path 2026-07-18 21:14:06 -04:00
gamer147
6255f42794 Document ADV history and remaining button paths 2026-07-18 20:28:36 -04:00
gamer147
d52e5b4725 Implement native ADV message skip 2026-07-18 17:32:12 -04:00
gamer147
05518a200f Implement ADV controls and native Auto timing 2026-07-18 17:16:06 -04:00
gamer147
96e5306148 Fix retained background lifecycle 2026-07-12 00:00:45 -04:00
gamer147
fb3a7206ce feat: add runtime ADV page locator 2026-07-11 22:52:26 -04:00
gamer147
593a24b510 fix(gfx): restore third CG glow 2026-07-11 20:05:51 -04:00
gamer147
99ce351041 Implement native-backed SC0000 SFX lifecycle 2026-07-11 02:15:17 -04:00
gamer147
34db35903b Implement native ADV retained text 2026-07-10 22:46:27 -04:00
gamer147
8bee45f483 Refresh retained presentation references 2026-07-10 21:56:57 -04:00
gamer147
82afcf5506 Fix native retained presentation batching 2026-07-10 21:37:42 -04:00
gamer147
bb16a5496a feat: add affine rotation rendering and timeline diagnostics 2026-07-10 17:54:33 -04:00
gamer147
014d128ccd fix: align animation pacing and transforms with native 2026-07-10 15:41:17 -04:00
gamer147
d9611a03b1 feat: model ADV coroutines and retained effect teardown 2026-07-10 09:45:43 -04:00
gamer147
5eff724b17 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
453f9b1861 re: diff_optrace resync-tolerant alignment (blind spots vs real forks)
Strict lockstep over-reported: the operand hook misses any op whose operands
aren't fetched via vm_operand_fetch (comment 0x1a7, set-string 0x192, the
0x1c7/0x1cc/0x131/... string-op cluster) — the engine executes them (they sit
after non-branching ops) but they're absent from its trace. New align() resyncs
over such one-sided insertions and reports only NON-realignable forks; it
separates VM-only blind spots (artifacts) from engine-only detours (real,
reconverging branch/state gaps, surfaced honestly). +2 tests (7/7).

Result: with G[0x6c1] seeded the SC0000 opening has NO non-realignable fork
across all 539 VM ops (was: false 'diverge at 0x8d'); residual = a 2-op
engine-only color detour (0x202/0x203 @ 0x122d0). Cold's first real fork is a
later G[0x6c1] gate. Validates the pre-scene-state theory end-to-end.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 12:55:21 -04:00
gamer147
10a5f24c31 re: diff_optrace operand-mode VM filtering (argc>=1 subsequence)
Operand-hook captures skip zero-operand ops (stmt markers, script-entry 0x259),
so the VM offset trace is filtered to argc>=1 instructions before diffing — same
subsequence both sides. +1 unit test. Default on; --full for a tick-mode capture.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 11:57:55 -04:00
gamer147
d032431c73 re(frida): engine op-path tracer (tick/operand hook, per-script offsets)
Reads cur_ctx_index/frame_pc/frame_codebase from the engine ctx per executed op
and emits (codebase, offset=(pc-codebase)/4) to build/engine-optrace.jsonl.
Recon result: the tick hook (0x410fb0) does NOT expose ctx via ecx (0 entries);
the operand hook (0x41b940) is the working capture (100% of offsets land on valid
SC0000 instruction starts). Writes a tracer-live.flag so the capture can be gated
on hooks-installed before the scene loads (else the entry burst is missed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 11:57:55 -04:00
gamer147
0ba965d7e6 re: diff_optrace.py — engine-vs-VM offset-path divergence oracle
Pure first_divergence + pick_scene_codebase (longest-common-prefix codebase
identification), unit-tested (test_diff_optrace.py, 4/4). CLI loads the engine
jsonl + VM json, isolates the scene's codebase, and reports the first divergence
with the mis-modeled instruction and +/-3 ops of context on each side (opcode
+ rendered line via sys4load).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 11:25:20 -04:00
gamer147
4a5d64a679 re: EngineCtx field registry (engine-ctx.toml) + builder
Canonical source vm-map/engine-ctx.toml (35 documented ctx fields) +
engine_ctx_build.py (--build/--lint, unit-tested) -> build/engine-ctx.json
+ docs/engine-ctx-reference.md. Applied to Ghidra in the next task.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 10:01:54 -04:00