Commit Graph

17 Commits

Author SHA1 Message Date
gamer147
cbf98642dc Decode RTINIT routine step banks 2026-07-23 13:41:35 -04:00
gamer147
9948f23a97 Decode SCINIT scene dispatch registry 2026-07-23 13:08:48 -04:00
gamer147
f5b986e9f1 Decode CCINIT class change rules 2026-07-23 12:40:42 -04:00
gamer147
ec349ea461 Fix EBINIT overlapping field ownership 2026-07-23 12:20:35 -04:00
gamer147
1b0c2a6a74 Resolve final STINIT object payloads 2026-07-23 09:56:18 -04:00
gamer147
1a9989b3ce Decode STINIT initial object states 2026-07-23 09:47:22 -04:00
gamer147
9c05451369 Join STINIT object definitions 2026-07-23 09:34:23 -04:00
gamer147
9e5fa94073 Decode STINIT tagged object payloads 2026-07-23 09:07:58 -04:00
gamer147
643a462af4 Decode STINIT enemy spawn semantics 2026-07-23 08:40:22 -04:00
gamer147
3fb3d3cfd8 Decode STINIT map and object placement data 2026-07-23 00:22:03 -04:00
gamer147
86a7cb1750 Extract and profile STINIT stage records 2026-07-22 23:50:43 -04:00
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
b6c3b1660d Implement base SYS4 asset store 2026-07-11 09:14:14 -04:00
gamer147
14ad23b8c7 Resolve call-script dispatch: id = raw SYS4INI file index
Native-RE (Ghidra) cracked call-script <id> (opcode 0x03): its handler
FUN_0041bc90 -> loader FUN_0040e980 -> resolver FUN_0044f390 indexes an
80-byte record table at base + id*0x50 == the SYS4INI record layout. So
`call-script <id>` is a direct RAW index into the SYS4INI global file
table (the asset index we already parse) -- there is no separate on-disk
id->code registry. This resolves name-resolution.md #1, statically, no
Frida.

Confirmed: all 297 distinct corpus call-script ids resolve to a .BIN
script with a semantically-exact name (0x1ab->ADDITEM, 0x2ae7->MES,
0x143->BUNKI, 0x329d->CALCREVISE), 0 out-of-range, 0 alternate-pack.
Companion op 0x8f `call` is an intra-script JSR (FUN_0041fba0), not
cross-script.

- parse_sys4ini.py: preserve `raw_index` per entry (= the engine file id;
  index the RAW records incl. '@' placeholders) + emit
  build/callscript-names.json (id->name).
- sys4load.py: annotate `call-script 0x1ab =ADDITEM.BIN`.
- opcodes.toml 0x03/0x8f refined (source=investigation, confidence high,
  handler VAs) + rebuilt opcode-reference.md.
- docs: engine-re.md (op 0x03 section + backlog re-aimed),
  name-resolution.md #1 (SOLVED), script-inventory.md (call graph +
  living-reference decision), tools-reference.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 12:44:51 -04:00
gamer147
463877773c chore: initialize age-reimpl repo
Reverse-engineering + open reimplementation workspace for Eushully's AGE/SYS4
engine (first target: Himegari). The repo root is age-reimpl/; the original game
install and the extracted ALF data are siblings outside the repo and are never
tracked. build/ (derived corpora) is gitignored and regenerated by the tools.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 12:58:30 -04:00