Files
OpenMaidEngine/docs/script-inventory.md
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

5.4 KiB
Raw Blame History

DATA1 Script Inventory — 481 .BIN files

All scripts share the magic header SYS4422 (8 bytes), confirming a uniform SYS4 bytecode format (engine version 4.4.2.2) across the entire set. Header is followed by what appear to be little-endian u32 fields (version/section table — to be mapped during disassembler work).

Source: extracted\DATA1\ (extracted from DATA1.ALF).

Patch overrides: 52 loose .BIN files sit in the game root directory and shadow their DATA1 counterparts at runtime (sizes differ slightly — e.g. FIELD.BIN root 200,536 vs archive 200,224). These are the v1.03 / append-patch versions and should be treated as authoritative over the archive copies. Two engine files exist only in the root: SYS4INI.BIN (272 KB) and SYS4AB.BIN (1.08 MB).


Breakdown by series

Series Count Total size Role (inferred)
SC#### 136 15.6 MB Scenario/event scripts (numbered 00001690, step 10)
SP#### 163 10.6 MB Secondary scene series (00101369; incl. SP0051A/B split) — likely character/H-events
Named scripts 175 ~7.5 MB Engine subsystems, data tables, UI, battle logic
DEBUG* 5 1.4 MB Debug tools (DEBUGADV.BIN alone is 1.4 MB — a scene viewer/jump menu)
RTN_M### / RTN_B### 26 ~70 KB Small routine scripts (map routines M001M061, battle routines B001B004)

SC series notes

  • Numbered SC0000SC0880 (main chapters, largest files — up to 700 KB) and SC1000SC1690 (smaller; likely sub-events, endings, appendix content).
  • SCJUMP.BIN (778 KB) is almost certainly the master scene-dispatch/jump table.
  • SCINIT.BIN (88 KB) initializes scenario state.

Named scripts by subsystem (inferred from names)

Engine core / boot flow

SYSTEM4.BIN (config root), INIT.BIN (64 bytes — smallest script, ideal first disassembly target), INITCONFIG, LOADCONFIG, CONFIG, TUNE, LOGO, OP, ED, TITLE, GAMESTART, GAMECLEAR, STAGECLEAR

Data-table INIT scripts (likely static game data, not logic)

Large, table-like scripts — prime candidates for data extraction:

  • STINIT (579 KB) — stages/scenario tables
  • EBINIT (338 KB) — enemy battle data
  • MPINIT (330 KB) — maps
  • SCINIT (88 KB), CGINIT (79 KB — CG gallery), ITINIT (70 KB — items), RTINIT (67 KB), CCINIT (41 KB), SKINIT (37 KB — skills), CDINIT (31 KB), BTANINIT (105 KB — battle animations)
  • Smaller: AFINIT, ALINIT, CIINIT, CNINIT, CTINIT, CVINIT, ILINIT, LAINIT, MAINIT, OBINIT, SPINIT, TRINIT, VIINIT

Message/string tables (*MES)

ITMES (64 KB — item text), VIMES (43 KB), EIMES (37 KB), SKMES (31 KB — skill text), CIMES (15 KB), MAMES, INFOMES, MES — where most translatable text outside scenes lives.

Battle system

BTL (61 KB — main battle loop), BTRTN, ROUND, AIM, ATSEEK, MVSEEK, MVRTN, MAGIC, USEMAGIC, SUMMON, EXILE, DISARM, RECOVER, COUNTUNIT, SETOCC, and the CALC* family: CALCBTPARAM, CALCDMG (16 KB — damage formula!), CALCSCOPE, CALCOCC, CALCREVISE, CALCCC, CALCILL, CALCARR

Dungeon/map engine

FIELD (200 KB — the core dungeon-crawl loop), DRAWMAP, RENDERMAP, DRAWMINIMAP, DRAWCH/DRAWCHP/DRAWENP/DRAWOBJ/DRAWTIP/DRAWVOL, SETCH/SETEN/SETLAND/SETOBJ/SETROUTE/SETMVWORK, DELCH/DELEN/DELENMASS/DELLAND, RESETLAND, WARPU/WARPD, LOOK, READICON

Unit/party management

ADDEXP, ADDSKILL, ADDEN, ADDITEM, ADDRANDOMITEM, LOSTRANDOMITEM, ADDILL/ADDILLSUB, EVOLVE, IMPROVE (37 KB), TRAIN, STUDY, UNITECH, REMOVECH, SHOWGROW, STATUS, USEITEM, SETCH

Base/facility gameplay

CAMP, ROOM, FORT, ALCHEMY (40 KB), SALLY (40 KB — sortie/deployment), READY (39 KB — pre-battle prep), SELSTAGE (34 KB), SELACT (30 KB)

Menus / UI / meta

MENU, CHMENU (69 KB — character menu), INFO/INFOAF/INFOCH/INFOEN/ INFOIT/INFOVO (info panels: characters, enemies, items, voices), SAVE (40 KB), HISTORY, HIDEWIN, CLOSE, INPUTNAME (28 KB), CGMODE (24 KB — gallery), MMODE (music mode), HMODE (22 KB — scene replay)

Flow control / branching

BUNKI (分岐 = branch, 15 KB), SBUNKI, BUNKIMOVE, SBUNKIMOVE, SCJUMP

Callbacks (engine → script hooks)

CALLBACK_LOAD, CALLBACK_LOST, CALLBACK_SETTING, CALLBACK_WINDOW

Debug

DEBUG, DEBUGADV (1.4 MB), DEBUGANIME, DEBUGBTL, DEBUGMAP (+2 numbered)


Implications for the port

  1. Much more game logic lives in bytecode than expected. Damage formulas (CALCDMG), the dungeon loop (FIELD), battle flow (BTL, ROUND), and unit progression (ADDEXP, EVOLVE) are all scripts — AGE.EXE is closer to a pure VM/renderer. This strengthens the case for re-implementing the AGE VM in Godot rather than transpiling every script by hand (the doc's open question #12).
  2. Disassembler bootstrapping order (small → large, system → scene): INIT.BIN (64 B) → ED.BIN/OP.BIN/LOGO.BIN (~230 B) → CALLBACK_LOST (176 B) → MENU.BIN (3 KB) → CALCDMG → a mid-size SC####.
  3. The *INIT giants are likely data tables, decodable early even with a partial opcode map — instant win for extracting item/skill/enemy/stage databases.
  4. Use root-directory overrides, not archive copies, for the 52 patched scripts.