re: the object is PlayerParams, and sub_822F9498 is ITS loader -- not the unit loader

Resolving every string sub_822F9498 references, in code order, gives 90, and they
are exactly the 890e1be4 object's schema in its record order: Misc (5 effect
names), SpecialAttack (+17), TacticalManeuver (+7), SpecialWeapon (+8), Booster
(+50).  It never names Generic, Maneuver, Explosion, Shield or StructureCount, and
the string Maneuver has 0 xrefs.  One call site, from sub_821A6CF0, which is
itself called once and references the literal PlayerParams.

CORRECTION to unit-datasheet-static.md, which calls sub_822F9498 the
unit-definition loader.  It loads one object: the player parameter table.  Its
AA_/AV_ interleave still stands as a struct layout, but the struct is
PlayerParams's Booster record, not each unit's Maneuver.  What loads the 114 unit
Maneuver records is now an open question -- it uses none of these strings.

Ranking all 114 units by how many of Booster's 50 values they reproduce: the top
five are exactly the five _Player units, all at 39/50; the sixth drops to 13/50;
none matches 50/50.  The five players agree with each other on all 50 -- the three
player ships share one flight model.  Booster stands alone on 10 fields; the
eleventh, AA_Yaw_Max, is 65.0 vs 65, formatting not a value (last iteration's
"11 differ" over-counted).

Still open, and sharper: nothing selects Booster.  PlayerParams is loaded once,
unconditionally, no branch -- yet the measured flight tracks the unit Maneuver
(1.25/1.20/1.28) and misses Booster badly.  Both cannot govern the same craft; the
next test is a runtime watch.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
Claude (auto)
2026-08-27 20:48:56 +00:00
parent 3718b7a5f2
commit 909408f00d
4 changed files with 114 additions and 10 deletions

View File

@@ -114,6 +114,16 @@ adopted**. See below for what the executable does say.
### ✅ The two families are one interleaved block (2026-08-27)
> 🔴 **Corrected 2026-08-27 — `sub_822F9498` is not the unit-definition
> loader.** Every one of the 90 strings it references is a field or record name
> of the **`PlayerParams`** object (`Misc` / `SpecialAttack` / `TacticalManeuver`
> / `SpecialWeapon` / `Booster`); it never names `Generic`, `Maneuver` or
> `StructureCount`, and `Maneuver` has 0 xrefs. It is called once, from
> `sub_821A6CF0`, which references the literal `PlayerParams`. **The interleave
> below is real — but it is the layout of `PlayerParams`'s `Booster` record, not
> of each unit's `Maneuver`.** See [`player-tuning-tables.md`](player-tuning-tables.md).
> What loads the 114 unit `Maneuver` records is now an open question.
Exactly **one** function in the image references the `AA_`/`AV_` name strings:
`sub_822F9498`, the unit-definition loader, itself called only from
`sub_821A6CF0`. Mapping each `addi rN, r29, -offset` (the name) to the `stfs`