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

@@ -5292,3 +5292,50 @@ screen rather than a different one.
convention, not a table. `PLAYER_AMMO_LESS_10` unexplained. And **two of the four
surfaced blocks remain unopened** (`g_mWorldViewProjection`/`NormalMap` engine
material slots; `Boss16Collision*` + `roh_n001_menu1_cam_pos`).
---
## ✅⚠️ 2026-08-27 — the last base-solver blocks: two findings, and a correction to how I read the index
Item (a). Static only; no artefact changed.
⚠️ **CORRECTION FIRST — a row 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:
| function | one row | the other |
|---|---|---|
| `sub_822E3EC8` | `r11` 29 — shader constants + techniques | `r10` 15 — the material map slots |
| `sub_822AFA50` | `r11` 16 — XDK shader-compiler tokens | `r10` 13 — the menu camera tags |
| `sub_823AE908` | `r11` 43 — the S16 boss collision table | `r31` 33 — shader tokens (false positive) |
So "`sub_822AFA50` = menu camera tags" and "`sub_822E3EC8` = `NormalMap`…" were
each half-right by accident. **Quote the register.**
**The engine's material vocabulary** (written 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 — the
engine supports more channels than the assets use. Plus 17 `g_*` shader
constants, three cube samplers, and `DepthOnlyTechnique` /
`MotionVectorTechnique` / `TransparentTechnique` — the `…Last` matrices plus the
motion-vector technique say the renderer keeps the previous frame's per-object
transform.
**The S16 boss's collision parts** (written into `collisionset.md`).
`sub_823AE908` `r11` is an **interleaved (mesh, logical-part) table**:
`rou_e901_body_02_c → Boss16CollisionBody02`, the five wing pairs, both tails,
`rou_e901_barrier_cmesh → …Barrier`, `rou_e910_core_cmesh → …Core`, 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 from the `PlayerParams` work —
`Shell_S16Boss_*` weapons there, `Boss16CollisionCore` here.
🟡 Not settled: whether the `rou_e901_*_c` meshes are entries of the
`CollisionSet` library (its 18 blobs are byte-identical, so a name join was not
attempted); why `Body01` has no mesh; and none of the shader slots was traced to
a shipped shader.