Integrate verified source and data progress; exclude unproven COMMON ownership, held UB/asm forms, and address-named data credit. Stable sweep: 23 exact functions gained, zero lost.
symbols.json renames the _bss_004d1198 placeholder in place to
_texture_cache_debug_bitmaps (static), the name xbox_texture_cache.c
already declares for its only user; the name is descriptive and marked
provisional in the source (house rule 8 forbids the bss+address form).
The debug listing computes both tab stops from frame_bounds.x0, as
January's bytes do. Full ninja + stable diff: +1 function (784 B),
0 regressions; active parks 220 -> 219.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- _connected_geometry_add_triangle: declare+init, short-index for loops
with the modulo edge neighbour, single-exit NONE result
- _render_inverse_transform_screen_point in xbox_texture_cache and
xbox_sound_cache: add_vectors3d(frustum apex, global_zero_vector3d)
replaces the hand-expanded origin sum (both park reopens; select-any
_add_vectors3d COMDAT, A30 class). The static helper's January register
convention returns at both callers; their fuzzy parks
_texture_cache_debug_render and _sound_cache_debug_render are
re-measured (non-exact before and after, objdiff slightly closer).
Stable diff: 0 regressions; active parks 222 -> 220.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>