docs: map radar contacts now render (grid population + projection fix)

Update GAUGE_COMPOSITE.md + CLAUDE.md: the radar plots the enemy contact inside
the FOV wedge.  Record the two fixes (engine RebuildEntityGrid populating the
dropped entity feed; the delta-relative blip projection replacing the wrong
camera-matrix point transform) and narrow the remaining map work to the authentic
pip/name infrastructure + SetTargetRange zoom.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-06 22:23:39 -05:00
co-authored by Claude Opus 4.8
parent fb3ed38fa7
commit ab039bcc1e
2 changed files with 25 additions and 9 deletions
+13 -4
View File
@@ -417,10 +417,19 @@ fill the gaps (bind not-yet-needed ids to a shared read-only pad member).
stubs the map was the first consumer of, each fixed: Sensor `radarPercent` went negative (un-normalized
`heatEnergy` in the not-byte-exact heat-leaf → guarded to no-penalty); `ResolveOperatorEntity` returned
NULL (→ viewpoint fallback); `MapName::ExtractFromEntity` didn't NULL-guard the entity. ⚠ Debug via
`BT_MAP_LOG` (phase/draw trace). FOLLOW-UPS: contacts show 0 (the `GetStaticEntitiesWithinBounds`/
`GetMovingEntitiesWithinBounds` classification finds nothing — the enemy dummy isn't in the spatial
lists); the pip/name/video-object infrastructure (`GetVideoObject`/`LookUpPip`/`GetNameID`) is stubbed
so contacts/labels need it; radarRange is a 500m default until `SetTargetRange` is un-stubbed.
`BT_MAP_LOG` (phase/draw trace). **CONTACTS NOW RENDER** (2026-07): two more fixes landed the enemy
blip inside the FOV wedge. (a) The gauge renderer's entity grid was NEVER populated — the port dropped
`ExecuteImplementation`'s InterestingEntity feed; added `GaugeRenderer::RebuildEntityGrid()` (engine)
that fills `movingEntities` from the world's DynamicMaster+Replicant entities (the vehicles; AllEntity
floods it with ~311 cls-0x5E props), called from the map's guarded Execute; DrawMoving draws a cross+box
blip for cls-0xBB9 mechs (the pip table is stubbed). (b) The blip PROJECTION was wrong — `worldToView`
is a camera matrix whose baked scale is wrong for a point transform (a 120u contact projected to 167px
not 44px); fixed by projecting `delta = entity - viewpoint` directly (rotate by heading, scale by
pixelsPerMeter). Verified: the 120u enemy (dsq=14400, cls 0xBB9, own=0) plots at (0,44) inside the
wedge. FOLLOW-UPS: the authentic pip symbol/name/video-object infrastructure
(`GetVideoObject`/`LookUpPip`/`GetNameID`, still stubbed → the cross-blip is the stand-in); the
blip-vs-wedge rotation convention (reads ahead/in-wedge, correct); `SetTargetRange` (radar zoom, 1km
default).
### Reconstruction-technique additions (durable)
- **x87 float math Ghidra drops** (`FUN_004dcd94()`/`FUN_004dcd00()` show no args = FPU-stack operands):