# Common TPK pixel-base alignment (r447)

## Finding

The shared `GLOBAL/InGameCommon.bun` pixel blocks use offsets relative to a 0x80-aligned payload base. The common reader found the pixel marker at `0xb380`; its raw payload begins at `0xb388`. A 0x11 padding run reaches the aligned base `0xb400`, then continues for three bytes into the first texture payload. The old greedy filler skip stopped at `0xb403` and treated that as the base.

For `SFX_LIGHT_BEAMA` (`0x2e95ce7c`), the TPK image offset is `0x28a80`; for `SFX_LIGHT_BEAMB` (`0x2e95ce7d`), it is `0x2b480`. The corrected positions are `0xb400 + 0x28a80 = 0x33e80` and `0xb400 + 0x2b480 = 0x36880`. Both land on DXT3 block boundaries. The old positions ended in byte offset 3 and produced colored block noise. The corrected images are smooth grayscale beam textures.

The parser now walks backward over the 0x11 padding run and chooses the 0x80 boundary when the run crosses it. This matches the independently implemented `tm_payload_base` rule in the OpenUG2 reader. The correction applies to TPK records generally, so all eight regional scene exports and the merged scene were rebuilt. Geometry counts remained unchanged in L4RA.

## Browser review

The before/after host Chrome captures use the L4RA drive view at `?radius=120&debug`. The old upper-right colored fragment is gone after the correction. Chrome 150 on the host Quadro P2000 reported WebGL 2, 23,405 nearby triangles, 115 textures, 832 routes, and no console or page errors. The combined scene also loaded with 108,111 nearby triangles, 257 textures, and no page errors.

- Before: [r444 host capture](../webgl-city/review/images/594-r444-current-host-drive.png)
- After: [r447 host capture](../webgl-city/review/images/598-r447-aligned-common-texture-host.png)

This validates the extracted texture layout and the WebGL build. It does not establish that the retail executable uses the same blend equation for these beam materials. The player's flat gray body remains a separate, unresolved appearance issue.
