Combat roster and identity evidence
October 8, 2026 · Identity audit #683 · Fidelity grades
This crosswalk records current assignments, not certified original-game identities. Runtime IDs MUST remain stable until a migration accounts for saved data, quests, drops, spawners, attack tables and boss encounters. Display names and filenames alone MUST NOT establish behavior.
Coverage contract
- Every EnemyData resource MUST have one crosswalk entry and a family validation issue. Its ID, display name, model, effective animation rig and boss flag MUST match the recorded assignment.
- Every resource MUST have attack data. Attack-only entries MUST be reported with a specific reason and follow-up issue; new or stale exceptions MUST fail the check.
- Every source ID MUST resolve to a resource model or an explicit exclusion/alias. Imported or unidentified rigs MUST be marked separately from source-ID matches.
- Boss definitions MUST have encounter coverage, including encounters without a standalone EnemyData resource. Differences between encounter and resource rigs MUST be explicit.
- Identity evidence MUST distinguish local assignments, source-table matches, bestiary claims, hypotheses and unknowns. A source-table match proves the internal model name, not a display name, attack kit or visual fidelity.
- Run
python3 scripts/tools/check_combat_roster.py. Passing means known coverage is accounted for; it MUST NOT close a family issue or raise its playtest grade.
Evidence and unresolved identities
Tank and swordman assignments conflict
data/re_reference/enemy_ids.json bestiary explicitly identifies tank as Arkzein (source slot 40). Current phobos/phobos_dyna use tank/tank_rare (40/41); arkzein/arkzein_r use swordman/swordman_rare (48/50); zaphobos/zaphobos_dyna use swordman_b/swordman_rare_b (49/51). The saved reference proves the base tank naming conflict but does not establish every swordman or rare display name. User direction on 2026-10-10 remaps Zaphobos/Dyna to tank/tank_rare; this is an explicit game mapping, not a new bestiary identification. Follow-up correction: Phobos/Dyna now use swordman_b/swordman_rare_b as the melee pair.
Next: Recover variant bestiary labels before proposing a complete display-name/ID migration. Use rigs, not current names, for #688/#689 comparisons. #683
Mother family and shrine boss are distinct
ROM overlay 31 and live body-transition capture identify Mother Trinity as boss_mother (66); the resource now uses that rig. Source mother (57) is the separate tower Heaven Mother. Humilias now uses source65 with its own robot controller.
Next: Port tower Mother (57) independently; verify authored arenas in #718. The new Trinity test encounter retains the tower arena selection but does not identify Trinity as a tower Mother. #683
Robot encounter and orphan attack data
Paru source63/64 and Arca source65 now have distinct dedicated controllers and arena routing. Existing pack combined mesh stored as boss_robot.
Next: Complete target/motion/status fidelity, full original split geometry and campaign playtests. #716
Shinowa and Sinow encounter collision
shinowa resource displays Sinow Beat, but sinow_beat has its own resource and rig. The boss encounter keyed sinow_beat loads shinowa. Neither rig occurs in the vendored retail source-ID table; the October 7 viewer inventory also lacks these models. A missing model-table entry does not establish which game supplied shinowa.
Next: Trace imported asset provenance and intended arena identity across #713/#720 before sharing or swapping their behavior. #713
Source coverage and additions
The source crosswalk explicitly excludes sample, the empty slot, boss_robot_cmb (alias), boss_mother_piece (procedural runtime component without a standalone resource), and tower mother (57), whose previous resource was misidentified as Mother Trinity. Four PSO additions and unresolved shinowa remain outside this source table. Paru source63/64 and Arca source65 now have distinct dedicated controllers and arena routing; the combined mesh is stored as boss_robot. Coverage does not establish original behavior or encounter identity.
Next: Keep source exclusions visible. #718 must verify whether Mother parts are actually implemented; a FieldPopulation comment saying they are boss-owned is not runtime proof. #683
Local PSZ Mini checkout inspected at a3836afc1780ee8a41078d4f1299141252a8f91b. No function-to-retail-family identity proof was established in this audit. Retained Mini behavior remains valid evidence when traced to matching code; this audit does not infer missing gameplay from the demo label.
Resource crosswalk
Source numbers come from the vendored psz-re table at 0x020F9E6C. Blank source IDs mean no match in that table, not proof of a missing enemy. Animation shows the effective rig after the resource's fallback.
| Runtime ID / display | Model / animation | Source ID | Evidence | Ticket |
|---|---|---|---|---|
akorseAkorse | shooter_leadershooter_leader | 36 | source-table model match; display unverified | #704 |
ar_rappyAr Rappy | rappy_bluerappy | 53 | source-table model match; display unverified | #691 |
arkzeinArkzein | swordmanswordman | 48 | identity conflict / variant unresolved | #689 |
arkzein_rArkzein R | swordman_rareswordman_rare | 50 | identity conflict / variant unresolved | #689 |
azherowa_b2Azherowa-B2 | quad_rarequad | 32 | source-table model match; display unverified | #705 |
battBatt | batbat | 23 | source-table model match; display unverified | #686 |
blade_motherBlade Mother | mother_swordmother_sword | 58 | source-table model match; display unverified | #690 |
blaze_helionBlaze Helion | lion_rarelion | 6 | source-table model match; display unverified | #685 |
bolixBolix | shrimpshrimp | 28 | source-table model match; display unverified | #702 |
booma_originBooma Origin | boomabooma | 55 | source-table model match; display unverified | #684 |
bullbattBullbatt | bat_bluebat | 24 | source-table model match; display unverified | #686 |
chaos_mobiusD Chaos & D Mobius (boss) | boss_robotboss_robot | 63 | ROM species 63/64 split Paru encounter; partial behavior port | #716 |
chaos_sorcererChaos Sorcerer (boss) | chaos_sorcererchaos_sorcerer | — | PSO addition; source-game validation pending | #721 |
dark_falzDark Falz (boss) | boss_darkfalzboss_darkfalz | 68 | source-table model match; display unverified | #717 |
derreoDerreo | legleg | 44 | source-table model match; display unverified | #706 |
euladaEulada | circlecircle | 42 | source-table model match; display unverified | #708 |
euladaveilEuladaveil | circle_blackcircle | 43 | source-table model match; display unverified | #708 |
eulidEulid | lowerlower | 46 | source-table model match; display unverified | #707 |
eulidveilEulidveil | lower_blacklower_black | 47 | source-table model match; display unverified | #707 |
finjer_bFinjer B | board_blueboard_blue | 39 | source-table model match; display unverified | #687 |
finjer_gFinjer G | board_greenboard_green | 38 | source-table model match; display unverified | #687 |
finjer_rFinjer R | boardboard | 37 | source-table model match; display unverified | #687 |
force_motherForce Mother | mother_techmother_tech | 60 | source-table model match; display unverified | #690 |
froutangFroutang | orangutanorangutan | 33 | source-table model match; display unverified | #700 |
frunakedFrunaked | orangutan_rareorangutan | 34 | source-table model match; display unverified | #700 |
garahadanGarahadan | snake_raresnake | 4 | source-table model match; display unverified | #692 |
garapythonGarapython | snakesnake | 3 | source-table model match; display unverified | #692 |
ghowlGhowl | lizardlizard | 1 | source-table model match; display unverified | #709 |
gigobooma_originGigobooma Origin | jigoboomajigobooma | 56 | source-table model match; display unverified | #684 |
goldixGoldix | shrimp_rareshrimp | 29 | source-table model match; display unverified | #702 |
grimbleGrimble | hyenahyena | 7 | source-table model match; display unverified | #693 |
helionHelion | lionlion | 5 | source-table model match; display unverified | #685 |
hildegaoHildegao | gorillagorilla | 19 | source-table model match; display unverified | #699 |
hildeghanaHildeghana | gorilla_femalegorilla | 21 | source-table model match; display unverified | #699 |
hildegigasHildegigas | gorilla_raregorilla | 20 | source-table model match; display unverified | #699 |
humiliasHumilias (boss) | boss_robot_cmbboss_robot_cmb | 65 | Confirmed ROM species 65 Humilias; combined robot, partial behavior port | #718 |
hypaoHypao | sealseal | 11 | source-table model match; display unverified | #697 |
izhirak_s6Izhirak-S6 | quadquad | 31 | source-table model match; display unverified | #705 |
kapanthaKapantha | tigertiger | 25 | source-table model match; display unverified | #694 |
korseKorse | shootershooter | 35 | source-table model match; display unverified | #704 |
mother_trinityMother Trinity (boss) | boss_motherboss_mother | 66 | ROM identity corrected; dedicated encounter is a partial port | #690 |
octo_diabloOcto Diablo (boss) | boss_octopusboss_octopus | 62 | source-table model match; display unverified | #715 |
pelcatoburPelcatobur | roc_rareroc | 14 | source-table model match; display unverified | #698 |
pelcatrazPelcatraz | rocroc | 13 | source-table model match; display unverified | #698 |
phobosPhobos | swordman_bswordman_b | 49 | user-directed melee mapping (2026-10-10) | #688 |
phobos_dynaPhobos Dyna | swordman_rare_bswordman_rare_b | 51 | user-directed melee mapping (2026-10-10) | #688 |
pobommaPobomma | frog_bombfrog | 30 | source-table model match; display unverified | #703 |
poison_lilyPoison Lily | poison_lilypoison_lily | — | PSO addition; source-game validation pending | #719 |
pomarrPomarr | frog_rarefrog | 10 | source-table model match; display unverified | #703 |
porelPorel | frogfrog | 9 | source-table model match; display unverified | #703 |
rab_rappyRab Rappy | rappy_redrappy | 54 | source-table model match; display unverified | #691 |
rappyRappy | rappyrappy | 52 | source-table model match; display unverified | #691 |
reyburnReyburn (boss) | boss_dragonboss_dragon | 61 | source-table model match; display unverified | #714 |
reyhoundReyhound | wolfwolf | 18 | source-table model match; display unverified | #695 |
rohcrystaRohcrysta | armadillo_rarearmadillo | 27 | source-table model match; display unverified | #701 |
rohjadeRohjade | armadilloarmadillo | 26 | source-table model match; display unverified | #701 |
rumoleRumole | molemole | 22 | source-table model match; display unverified | #712 |
shinowaSinow Beat | shinowashinowa | — | unresolved; display duplicates Sinow Beat | #713 |
shot_motherShot Mother | mother_gunmother_gun | 59 | source-table model match; display unverified | #690 |
sinow_beatSinow Beat (boss) | sinow_beatsinow_beat | — | PSO addition; source-game validation pending | #720 |
sinow_goldSinow Gold (boss) | sinow_goldsinow_gold | — | PSO addition; source-game validation pending | #720 |
staggStagg | deerdeer | 17 | source-table model match; display unverified | #696 |
tormatibleTormatible | hyena_rarehyena | 8 | source-table model match; display unverified | #693 |
usanimereUsanimere | rabbit_rarerabbit | 16 | source-table model match; display unverified | #710 |
usannyUsanny | rabbitrabbit | 15 | source-table model match; display unverified | #710 |
vespaoVespao | seal_rareseal | 12 | source-table model match; display unverified | #697 |
vulkureVulkure | vulturevulture | 2 | source-table model match; display unverified | #711 |
zaphobosZaphobos | tanktank | 40 | user-directed tank mapping (2026-10-10); display-name source conflicts remain unresolved | #689 |
zaphobos_dynaZaphobos Dyna | tank_raretank_rare | 41 | user-directed tank mapping (2026-10-10); display-name source conflicts remain unresolved | #689 |
zerreoZerreo | leg_blackleg_black | 45 | source-table model match; display unverified | #706 |
pso_boomaPSO Booma | pso_boomapso_booma | — | PSO comparison addition from user archive; local asset only, original behavior unvalidated | #684 |
pso_goboomaPSO Gobooma | pso_goboomapso_gobooma | — | PSO comparison addition from user archive; local asset only, original behavior unvalidated | #684 |
pso_gigoboomaPSO Gigobooma | pso_gigoboomapso_gigobooma | — | PSO comparison addition from user archive; local asset only, original behavior unvalidated | #684 |
Boss encounters
| ID | Model | Disposition | Ticket |
|---|---|---|---|
| reyburn | boss_dragon | Matches resource model; original behavior pending. | #714 |
| octo_diablo | boss_octopus | Matches resource model; original behavior pending. | #715 |
| humilias | boss_robot_cmb | Combined/split robot controller; original source65 stats. Pack mesh alias is explicit. | #718 |
| chaos_mobius | boss_robot | Dedicated split robot controller; remaining parity gaps in /states/robot-bosses. | #716 |
| chaos_sorcerer | chaos_sorcerer | Matches resource model; original behavior pending. | #721 |
| sinow_beat | shinowa | Encounter uses shinowa, not the sinow_beat resource rig; identity unresolved. | #713 |
| heavens_mother | mother_sword | Composite of blade/force/shot_mother; no standalone resource. | #690 |
| dark_falz | boss_darkfalz | Matches resource model; original behavior pending. | #717 |
| mother_trinity | boss_mother | Fixed body in broken north platform edge; see animation reference #755. Piece tactics and attack geometry remain partial. | #690 |
Attack-only entries
chaos_mobius_paru: Known orphan: attack table only; no resource or boss definition. References in boss notes do not make this playable. #716
Catalog discrepancies
shinowa.presence: EnemyData exists but data/enemies.json omits shinowa; source identity needs reconciliation. #713
sinow_beat.model_id: JSON metadata and boss encounter use shinowa, while EnemyData uses sinow_beat. Resolve provenance before changing consumers. #720
Source slots without standalone resources
#0 sample: Sample slot; no matching source NARC. #683
#64 (empty): Empty source slot. #683
#67 boss_mother_piece: Boss component excluded from room population. Trinity now spawns three procedural independently damageable test pieces; original rig/board tactics remain unported. #718
#57 mother: Tower Heaven Mother has no dedicated resource after correcting the old mother_trinity misidentification to source 66. Authored three-Mother encounter remains available. #690
Reproducible evidence
The machine-readable crosswalk is data/combat_roster.json. It cites data/re_reference/enemy_ids.json, boss_roster.json, the October 7 enemy_viewer_audit.json, current data/enemies/*.tres, data/enemies.json and data/boss_arenas.json. These are repository snapshots, not a claim to have fetched newer upstream evidence.