StageResource.EnumerateAIParams names the table, and every name resolves. 29 StageResource records; 28 carry EnumerateAIParams (the one without it is the _Test template); 23 distinct table names declared; 23/23 hash to an AIParams object key under the prefix "stage\"; 0 objects left unnamed; 0 declared names with no object. AIParams_S01..S16 (16) + AIParams_S24..S29 (6) + AIParams_Tutorial.tbl shared by six (UnitGroup_S18..S23, the tutorials) = 23 tables over 16 + 6 + 6 = 28 records. The arithmetic closes both ways and matches the 23-object count found last iteration. Same sharing shape as the settings family (stage-settings-table.md: 24 objects, StageParameter_Tutorial shared by six tutorials). Two independent families agree on how the tutorials are handled -- n=2, a pattern rather than a rule. aiparams_census.py extended with the stage mapping; artefact +7/-0, byte-identical across two runs; the other fourteen verify unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
53 lines
2.0 KiB
Plaintext
53 lines
2.0 KiB
Plaintext
# AIParams across the whole disc
|
|
# Regenerate: python3 tools/re-capture/aiparams_census.py
|
|
# See docs/re/structures/stage-mission-tables.md
|
|
|
|
## CONTROL the six language copies
|
|
GP_MAIN_GAME_D.pak 23 AIParams objects
|
|
GP_MAIN_GAME_E.pak 23 AIParams objects
|
|
GP_MAIN_GAME_F.pak 23 AIParams objects
|
|
GP_MAIN_GAME_I.pak 23 AIParams objects
|
|
GP_MAIN_GAME_J.pak 23 AIParams objects
|
|
GP_MAIN_GAME_S.pak 23 AIParams objects
|
|
|
|
## The roster
|
|
objects: 23 distinct declared-name sets: 1 roster size: [34]
|
|
declared names with no record in their own object: 0
|
|
profile records total: 782 (= 23 objects x 34)
|
|
|
|
## Which object is which stage
|
|
StageResource records: 29 carrying EnumerateAIParams: 28
|
|
distinct table names declared: 23 AIParams objects: 23
|
|
names that hash to an object key: 23 / 23 (prefix `stage\`, name_hash is case-insensitive)
|
|
objects left unnamed: 0 declared names with no object: 0
|
|
shared: AIParams_Tutorial.tbl by 6 -> ['UnitGroup_S18.tbl', 'UnitGroup_S19.tbl', 'UnitGroup_S20.tbl', 'UnitGroup_S21.tbl', 'UnitGroup_S22.tbl', 'UnitGroup_S23.tbl']
|
|
|
|
## Does `Type` predict the field count?
|
|
Fleet 6 fields x253
|
|
Squad 6 fields x46
|
|
Squad 20 fields x483
|
|
profiles breaking the rule, in full: 2 ['AI_CraftSquadron_Test', 'AI_Test']
|
|
profiles whose (Type, field count) varies between objects: 0 []
|
|
|
|
## Field census over every profile record
|
|
x782 AutoGuardLength
|
|
x782 CounterLength
|
|
x782 FiringLength
|
|
x782 GuardLength
|
|
x782 MusterLength
|
|
x782 Type
|
|
x483 BootDefManeuverRatio_Aimed
|
|
x483 BootDefManeuverRatio_Fired
|
|
x483 BootDefManeuverRatio_Missiled
|
|
x483 CounterManeuverRatio
|
|
x483 DefManeuverRatio_BarrelRoll
|
|
x483 DefManeuverRatio_BoostAway
|
|
x483 DefManeuverRatio_NoAction
|
|
x483 DefManeuverRatio_SideRoll
|
|
x483 DefManeuverRatio_TurnAttack
|
|
x483 DefManeuverRatio_TurnAway
|
|
x483 ManeuverRatio_Cutoff
|
|
x483 OffManeuverRatio_HoldPosition
|
|
x483 OffManeuverRatio_NoAction
|
|
x483 OffManeuverRatio_Through
|