# Player paint and decal texture source audit, r283

## Result

No source-backed body-paint or glass image was recoverable from the installed
texture catalogs for the exported stock cars. The exporter and vehicle
shading were left unchanged.

The 240SX stock GLB contains 26 distinct texture-key references. Its three
embedded images are `BADGING`, `MISC`, and `TIRE`; the badge atlas is assigned
to a detail run, not the painted body. The body paint runs refer to keys such
as `0x3c84d757`, `0xa7366ae6`, `0x77a20245`, and `0xbd1f0e0a`. The glass runs
refer to `0x7b220ddf`, `0x4cdebfca`, `0x0ab88f5d`, `0x910e6654`,
`0xe7e4ef49`, `0x60f8b13c`, `0xd195be56`, `0x267d188c`, and `0xf68ef19f`.
None of these paint or glass keys occurs in the 240SX `TEXTURES.BIN`, the
shared `CARS/TEXTURES.BIN`, or the union of the 31 decoded installed car
texture catalogs (2,732 unique keys).

The same material-key check across all 29 stock garage GLBs found no match for
any `paint_*` or `glass_vehicle` slot in the 546-key shared car texture
catalog. One unrelated shared-catalog match exists in another material role;
it does not provide a paint or glass image.

The 240SX `GEOMETRY.BIN` contains references to these keys, while
`VINYLS.BIN` does not. The separate 240SX vinyl catalog contains 832 named
`*_MASK` decal images; none of their keys matches the GLB's material texture
keys. These are UV-mapped decal masks selected by the body shop, not a base
paint image or a missing window image. The GLB's `BADGING` atlas is present
and assigned to its detail run, so it is not a replacement for a body texture.

## Missing runtime inputs

Body paint is a runtime material state, not a diffuse image in these catalogs.
The retail render owner stores the resolved paint state at `+0x384`; the draw
path resolves it for material hash `0xd6d6080a` via `0x0048d860`. To recover
the exact 240SX paint, capture that state object and the replacement value or
texture binding at the body draw. For ambient paint selection, the separate
class-`0x3f` selector and state-row capture is described in
[`traffic-paint-runtime-capture.md`](traffic-paint-runtime-capture.md).

The missing glass catalog keys do not establish whether the retail draw binds
another streamed texture or uses a descriptor without one. The exact
descriptor, BlendState, technique, and bound texture capture point is listed
in [`glass-alpha-audit-r283.md`](glass-alpha-audit-r283.md). No opacity or
blend behavior is inferred here.

## Sources checked

- `CARS/240SX/TEXTURES.BIN` (73 decoded entries) and
  `CARS/TEXTURES.BIN` (546 entries).
- The 31 decoded installed car `TEXTURES.BIN` catalogs (2,732 unique keys).
- The 29 exported stock garage GLBs and their per-material texture keys.
- `CARS/240SX/GEOMETRY.BIN` and `CARS/240SX/VINYLS.BIN`.
- The exported 832-entry 240SX vinyl mask catalog.

The installed catalogs contain no source image match for the unresolved paint
or glass slots. The actionable next input is a retail XP draw capture with the
resolved paint state/texture binding and, for glass, the descriptor and
BlendState fields recorded alongside the selected technique and bound texture.

## Executable slot and loader trace, r284

The executable lead identifies these hashes as model-resource slot keys, not
shader/effect parameters. The RTTI string `WorldModelSlotPool` is at
`0x007a8480`. Its constructor begins at `0x00638190`; at
`0x00638504–0x006385e7` it seeds a fixed hash table. This table includes 240SX
body keys `0x3c84d757` and `0xa7366ae6`, and eight of the nine glass keys:
`0x7b220ddf`, `0x4cdebfca`, `0x0ab88f5d`, `0xe7e4ef49`, `0x60f8b13c`,
`0xd195be56`, `0x267d188c`, and `0xf68ef19f`. The other 240SX glass key,
`0x910e6654`, is not written by this initializer.

The constructor's dispatch at `0x006395e0–0x00639949` compares a loaded
resource item's hash at `[item]` and links matching items into per-key list
heads. Directly confirmed mappings are `0x7b220ddf → this+0x5a8`,
`0x4cdebfca → this+0x5c0`, `0x0ab88f5d → this+0x5d0`,
`0xe7e4ef49 → this+0x5b8`, and `0x60f8b13c → this+0x5c8`. The linked nodes
retain the matched item pointer. This is a runtime slot registry over loaded
resource objects; it does not decode pixels or generate a texture.

The surrounding names confirm the purpose is car skin/texture customization:
the executable registers `CarLoadedTexturePackSlotPool`,
`CarLoadedSolidPackSlotPool`, and `CarLoadedSkinLayerSlotPool` at
`0x0061c700`. The car factory at `0x0063ae70` requests
`CARS\\<car>\\TEXTURES.BIN` through `0x00633b90` for every car. For
non-type-2 cars it checks for and then requests `CARS\\<car>\\VINYLS.BIN`
through the same texture-pack pool. The ambient type-2 branch skips that
VINYLS request. `0x00633c30` groups loaded resource handles into the skin
layer pool; it is called while building the car's loaded model/resource
records. These paths show file-backed texture-pack and vinyl loading. They do
not show the missing material slot keys being present in either package, nor
do they show a generated body/glass bitmap or profile paint color being
written into those slots.

For the 240SX, the two source files have already been decoded: `TEXTURES.BIN`
has 73 texture entries and `VINYLS.BIN` has 832 named mask records. The
unresolved GLB paint/glass keys match neither catalog. The vinyl mask hashes
are distinct from the geometry slot hashes. This leaves a precise gap: the
executable has slot labels and can attach loaded resource objects to some of
them, but the installed 240SX packages contain no corresponding image
records. The trace does not establish whether the remaining empty slots are
populated by selected profile/customization state, generated at runtime, or
left without a texture in a particular car configuration.

To resolve that, capture the loaded resource item and pool list at
`0x006395e0` for a player 240SX, then follow its attached handle through the
`0x00633b90` asynchronous texture-pack load completion. Record the path,
resource key, resolved texture object, and whether it originated in
`TEXTURES.BIN`, `VINYLS.BIN`, or profile/customization state. At the same
draw, capture the actual bound stage-0 texture and alpha for the glass path;
the blend/technique capture remains detailed in
[`glass-alpha-audit-r283.md`](glass-alpha-audit-r283.md). No exporter, GLB, or
shader change is justified by the static trace alone.
