re: AA_/AV_ are one interleaved block; the selection is still unfound
sub_822F9498 (the unit-definition loader, called only from sub_821A6CF0) is the only function referencing the AA_/AV_ name strings. Mapping each name to the stfs that follows gives an exact interleave: AV_ at X, AA_ at X+8, for all five axes -- PitchPlus 196/204, PitchMinus 212/220, Yaw 228/236, Roll 244/252, AxisMode 320/328. A selector is an offset of 0 or 8, not two lookups. The 20 strings exist twice in the image; the first block is referenced by nothing. Data control: the ten suffixes match exactly between families. The selection stays a reading: functions loading two or more of 196/204/320/328 number 39 image-wide, and only two are call-graph-reachable from the loader. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -109,8 +109,49 @@ AA_* and AV_* Pitch/Yaw/Roll Min/Max pairs
|
||||
```
|
||||
|
||||
🟡 The `AA_` / `AV_` prefixes pair with `AttackCraftPoint` / `AttackVesselPoint`,
|
||||
so *anti-air* vs *anti-vessel* rate limits is the obvious reading — **not
|
||||
adopted**, nothing here shows the selection.
|
||||
so *anti-air* vs *anti-vessel* rate limits is the obvious reading — **still not
|
||||
adopted**. See below for what the executable does say.
|
||||
|
||||
### ✅ The two families are one interleaved block (2026-08-27)
|
||||
|
||||
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`
|
||||
that follows gives the definition-object layout, and it is a clean interleave —
|
||||
**`AV_` at `X`, `AA_` at `X+8`**, for all five axes:
|
||||
|
||||
| axis | `AV_Max` / `AV_Min` | `AA_Max` / `AA_Min` |
|
||||
|---|---|---|
|
||||
| `PitchPlus` | `+196` / `+200` | `+204` / `+208` |
|
||||
| `PitchMinus` | `+212` / `+216` | `+220` / `+224` |
|
||||
| `Yaw` | `+228` / `+232` | `+236` / `+240` |
|
||||
| `Roll` | `+244` / `+248` | `+252` / `+256` |
|
||||
| `AxisMode` | `+320` / `+324` | `+328` / `+332` |
|
||||
|
||||
The **constant `+8` displacement** is the structural point: whatever selects
|
||||
between the families does it as an offset of `0` or `8`, not as two separate
|
||||
lookups. The loader reads 78 named float fields in total.
|
||||
|
||||
Data side: the ten suffixes match **exactly** between the two families (checked
|
||||
as a list equality, not a count), with 690 records each for the eight rate fields
|
||||
and 36 each for `AxisMode`. Where the values differ, **`AA_` is consistently the
|
||||
larger** — `AA_AxisMode_Min` 100 vs `AV_` 35, `AA_Yaw_Max` 50 vs `AV_` 25,
|
||||
`AA_PitchPlus_Min` 100 vs `AV_` 200 being the exception that keeps this a
|
||||
description, not a rule.
|
||||
|
||||
⚠️ **The 20 strings exist twice** in the image, at `0x82085B98…` and
|
||||
`0x8209F674…`. The loader uses the second block; **the first 20 are referenced by
|
||||
nothing**.
|
||||
|
||||
### 🔴 The selection is still not found
|
||||
|
||||
Looking for the consumer by offset does not work here: functions loading two or
|
||||
more of `+196`/`+204`/`+320`/`+328` number **39** across the image, and those
|
||||
offsets are far too common to identify anything — the same trap the corpus has
|
||||
paid for before. Only two of the 39 are call-graph-reachable from the loader's
|
||||
owner (`sub_821A6CF0` itself, and `sub_821AB650`); that is the next handle, and
|
||||
it was not followed this iteration. **So "anti-air vs anti-vessel" remains a
|
||||
reading.**
|
||||
|
||||
## `Effect`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user