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:
@@ -4951,3 +4951,49 @@ taken for ours.
|
||||
🟡 Not settled: what selects the `Booster` profile; what `adv_yaw`'s non-monotone
|
||||
curve indexes (unchanged — it needs the reader); why the `0x820A1xxx` block has
|
||||
no xref at all when its neighbour has 36.
|
||||
|
||||
---
|
||||
|
||||
## ✅✅🔴 2026-08-27 — the object is `PlayerParams`, and `sub_822F9498` is ITS loader, not the unit loader
|
||||
|
||||
Item (a), "what selects the `Booster` profile". It answered a different, bigger
|
||||
question and **corrected a corpus doc**. Static only; no artefact changed.
|
||||
|
||||
✅✅ **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`; the string `Maneuver` exists once and has **0
|
||||
xrefs**. One call site, from `sub_821A6CF0` — itself called once, and referencing
|
||||
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 (`AV_` at `X`, `AA_` at `X+8`, five axes) **still stands as
|
||||
a struct layout — but the struct is `PlayerParams`'s `Booster` record**, not each
|
||||
unit's `Maneuver`. Note added in place. ⇒ ❔ **What loads the 114 unit `Maneuver`
|
||||
records is now an open question** — it uses none of these name strings.
|
||||
|
||||
🟡 `PlayerParams` hashed under 7 prefixes × 6 spellings × both hash families (84
|
||||
combinations) hits the key `0x890E1BE4` **0 times**: the string names the table to
|
||||
the code, not the pak entry.
|
||||
|
||||
⚠️ The loader names **8** `SpecialWeapon` fields; the disc values **7** —
|
||||
`HPRegenerator_Quantity` is named and never valued.
|
||||
|
||||
✅ **Ranking all 114 units by how many of `Booster`'s 50 values they reproduce:
|
||||
the top five are exactly the five `_Player` units** (`f001_T`, two `f001_T_Tt`,
|
||||
`f002_W`, `f004_A`), all at **39/50**; the sixth drops to **13/50**; **none
|
||||
matches 50/50**. And the five players **agree with each other on all 50** — the
|
||||
three player ships share one flight model. `Booster` stands alone on **10**
|
||||
fields. ⚠️ Correcting myself: the eleventh, `AA_Yaw_Max`, is `65.0` vs `65` —
|
||||
formatting, not a value. Last iteration's "11 differ" over-counted.
|
||||
|
||||
🟡 **NOT SETTLED, and it is now sharper: nothing selects `Booster`.**
|
||||
`PlayerParams` is loaded **once, unconditionally** — one call site, one caller, no
|
||||
branch. Yet `flight-speed-law.md` clocked the player at ~125 / ~420 / ~1 530,
|
||||
which tracks the unit `Maneuver` 100/350/1 200 at a flat ~1.25 and misses
|
||||
`Booster`'s 100/612/2 100 badly; the `RT`-held run reached ~1 530, nowhere near
|
||||
2 100. **Both tables cannot govern the same craft.** Cheapest next test is a
|
||||
runtime one (NEEDS-HUMAN): watch which constant set reaches the live flight
|
||||
struct, and re-measure with the afterburner held.
|
||||
|
||||
Reference in New Issue
Block a user