re: the last base-solver blocks -- two findings, and a correction to how I read the index

CORRECTION FIRST: a row in name-block-bases.txt is a (function, REGISTER) pair,
not a function.  Every one-line label I carried for these blocks quoted one of
two rows, and the other row of the same function is an unrelated schema:
sub_822E3EC8 r11 = 29 shader constants + techniques, r10 = 15 material map slots;
sub_822AFA50 r11 = XDK shader-compiler tokens, r10 = 13 menu camera tags;
sub_823AE908 r11 = the 43-name S16 boss collision table, r31 = 33 shader tokens
(the dense-block false positive).  Quote the register.

The engine's material vocabulary (into xbg7-mesh.md, which owns the
_col/_spc/_gls/_lum suffixes): nine base map slots -- ColorMap, LuminosityMap,
SpecularityMap, GlossinessMap, ReflectionMap, TransparencyMap, NormalMap,
FresnelMap, EdgeTransparencyMap -- and seven *MapArray twins; 9 - 7 = 2, and the
two without a twin are FresnelMap and EdgeTransparencyMap.  Four of the nine are
exactly the four documented suffixes; the other five have no suffix in the
shipped meshes, so the engine supports more channels than the assets use.  Plus
17 g_* shader constants, three cube samplers, and DepthOnly / MotionVector /
Transparent techniques -- the ...Last matrices with the motion-vector technique
say the renderer keeps the previous frame's per-object transform.

The S16 boss's collision parts (into collisionset.md): sub_823AE908 r11 is an
interleaved (mesh, logical-part) table -- rou_e901_body_02_c ->
Boss16CollisionBody02, five wing pairs, both tails, barrier, rou_e910_core_cmesh
-> Boss16CollisionCore, and mob_n900{,_b01,_b02,_gear}_cmesh -> Room00/01/02 +
Gear00/01/02.  23 logical parts + 20 meshes = 43, differing by exactly three:
Body01 opens with no mesh and the one gear mesh carries three gear names.  Cross-
links the S16 Guardian/Core object found during the PlayerParams work.

Not settled: whether those meshes are CollisionSet entries, why Body01 has no
mesh, and no shader slot was traced to a shipped shader.

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 22:51:53 +00:00
parent e7c89fdcd1
commit dd6b13c751
4 changed files with 128 additions and 9 deletions

View File

@@ -157,3 +157,32 @@ exports any named mesh.
record is exactly counts, positions and indices — so whatever distinguishes a
hull hit from a shield hit is not stored here. And the library is not indexed:
lookup is presumably by name from the unit tables, which has not been traced.
## ✅ The Stage 16 boss's collision parts, named in the executable (2026-08-27)
Found by the base-solver ([[player-tuning-tables]]): **`sub_823AE908`, `r11`,
43 names**, and the list is an **interleaved (mesh, logical-part) table**:
```
rou_e901_body_02_c → Boss16CollisionBody02 rou_e901_wing_0N_{L,R}_c → …Wing0N{L,R}
rou_e901_tail_{L,R}_c→ Boss16CollisionTail{L,R} rou_e901_barrier_cmesh → …Barrier
rou_e910_core_cmesh → Boss16CollisionCore mob_n900_cmesh → …Room00
mob_n900_b01_cmesh → …Room01 mob_n900_b02_cmesh → …Room02
mob_n900_gear_cmesh → …Gear00 / …Gear01 / …Gear02
```
**23 logical parts + 20 meshes = 43**, and the two counts differ by exactly
three: `Boss16CollisionBody01` opens the list with no mesh before it, and
`mob_n900_gear_cmesh` is followed by **three** gear names. A second row
(`sub_823C0260`, 15 names) lists the hull parts alone — `Body01…03`, `TailL/R`,
`Wing01L…Wing05R` — with no meshes.
🔑 **This is the same boss the `PlayerParams` work turned up**: the S16
`Guardian` / `Core` object ([[player-tuning-tables]]) names its weapons
`Shell_S16Boss_*`, and here `rou_e910_core_cmesh → Boss16CollisionCore` gives the
`Core` record a collision hull. `rou_e901` is the boss craft; `mob_n900` is the
station/room structure it sits in, whose three `Gear` parts share one mesh.
🟡 Not settled: whether these meshes are entries of the `CollisionSet` library
above (all 18 blobs are byte-identical, so a name-level join was not attempted),
and why `Body01` has no mesh in the list.