Fix EBINIT overlapping field ownership

This commit is contained in:
gamer147
2026-07-23 12:20:35 -04:00
parent 6b808c33e3
commit ec349ea461
6 changed files with 80 additions and 11 deletions

View File

@@ -172,7 +172,7 @@ writes) unambiguously to six row-major tables and 44 populated columns:
| `0xa5301` | 3 | 17 | HP/SP/FS recovery amounts |
`extract_init.py` now records these as `record_fields["base/stride/column"]` rather than inventing a
one-off `fields` base for every row. Applying the same rule exposes 18 linked SKINIT columns and 84 linked
one-off `fields` base for every row. Applying the same rule exposes 18 linked SKINIT columns and 82 linked
EBINIT columns. This correction reduces the auto map's false INIT-field labels from 12,311 to 1,353; the raw
write addresses were valid, but their former ownership model and omission of negative writes were not.
@@ -243,9 +243,9 @@ records use the shared accuracy-through-max-FS vocabulary; starting skills, drop
brainwashed roster forms, battle portraits/cut-ins, and health-selected status art all expose named fields.
Consumer control flow further divides the five CP sprite assets into normal/alternate compact and directional
sheets plus the special compact sheet, and SHOWGROW proves voice column 24 is the level-up reaction. Of
EBINIT's 110 populated profile fields, 107 now have specific semantic names. SALLY's SO012 button atlas and
action dispatch resolve all four unlock columns as contract, brainwash, a reserved/unreachable slot, and
sex magic. The paired eight event columns are contract, brainwash, the same reserved slot, three
EBINIT's 108 genuine populated profile fields, 107 now have specific semantic names. SALLY's SO012 button
atlas and action dispatch resolve all four unlock columns as contract, brainwash, a reserved/unreachable
slot, and sex magic. The paired eight event columns are contract, brainwash, the same reserved slot, three
form-dependent Lily sex-magic events, sacrifice, and release. The reserved slot has a switch arm but is
deliberately skipped by both drawing and input; its event ids also lack SCJUMP mappings, so it is recorded
as unreachable rather than assigned a speculative action.
@@ -263,8 +263,15 @@ essence yield, level cap, and base statistics. Lily's three forms are exactly ti
heroine boss definitions generally rise with their later, stronger appearances. The static corpus contains
no read of this array, and the `/v2` native image contains neither its global index as an instruction operand
nor as a little-endian constant. `unit_power_tier` is therefore curated at medium confidence as descriptive
authoring metadata, not a runtime behavior claim. EBINIT now has specific names for 108 of 110 populated
profile fields; only two suspicious one-record writes into runtime table `0x4e693/300` remain anonymous.
authoring metadata, not a runtime behavior claim.
The apparent final two anonymous EBINIT writes were address-ownership collisions, not new fields. The flat
global range occupied by stride-300 runtime table `0x4e693` overlaps established EBINIT parallel arrays.
Address `0x6fd4e` can be expressed as row 456, column 91 of that table, but it is also exactly
`unit_battle_sprite_asset_id[456]`; its value 12585 resolves to `CB456A.AGF`. Likewise `0x7a5d6` can be
expressed as row 600, column 35, but is exactly `unit_starting_level[600] = 80`. The extractor now gives an
already-established parallel base precedence over a coincidental row-table range match. EBINIT therefore
has 82 genuine linked columns and specific semantic names for all 108 populated profile fields.
### STINIT mixed stage records (2026-07-23)