Files
BT411/game
Joe DiPrimaandClaude Opus 5 86c1f54644 #183 FIXED: the ENG-page BAY FIRE icon could never light -- the gauge cluster's ammo-bin link was a RAW-OFFSET walk that resolved to NULL. Oracle reported no bay-fire icon where the jam icon shows. Everything upstream was already correct and #47-verified: the AmmoBin arms cookOffArmed on the authentic gate (heat alarm FAILURE + rounds remaining), counts a fixed 10s fuse and detonates; the widget exists (btefire.pcc, TwoState) and its coordinates are BYTE-FAITHFUL to the binary (jam 0xa0,0xb2 / fire 0x121,0xb6, part_014.c:6510-6522 -- note the machine puts them in DIFFERENT places, so the report's 'same place as the jam icon' premise is wrong). The break was BallisticWeaponCluster::Execute resolving the bin with ResolveLink(subsystem + 0x43c) -- the BINARY's layout applied to our compiled ProjectileWeapon, i.e. the databinding trap the conventions forbid. It returned NULL, so BTAmmoBinCookOffArmed(NULL) read 0 forever and the icon had no input. The typed bridge already existed: BTWeaponAmmoBin (projweap.cpp) was written in July for this exact trap when the ammo DIGITS failed to bind the same way -- these two call sites were simply missed. Both now use it; TestInstance's raw bin+0x180 round-count read replaced with a new typed BTAmmoBinRoundCount. Rig added (BT_BAYFIRE_TEST=<seconds> drives the AUTHENTIC arming condition, same hook family as BT_VALVE/BT_FLUSH_TEST) plus an edge-only [gau-fire] receipt. Measured: before, bin=00000000 cookOffArmed=0 on every cluster; after, each cluster binds a real bin and the burning rack alone reports cookOffArmed 0->1->0 across arm and detonation while its neighbours stay 0. NOTE #47's fix was correct but only 'data path rig-verified' with the pixels left to the field -- this is why that gap mattered.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-15 11:04:02 -05:00
..
#183 FIXED: the ENG-page BAY FIRE icon could never light -- the gauge cluster's ammo-bin link was a RAW-OFFSET walk that resolved to NULL. Oracle reported no bay-fire icon where the jam icon shows. Everything upstream was already correct and #47-verified: the AmmoBin arms cookOffArmed on the authentic gate (heat alarm FAILURE + rounds remaining), counts a fixed 10s fuse and detonates; the widget exists (btefire.pcc, TwoState) and its coordinates are BYTE-FAITHFUL to the binary (jam 0xa0,0xb2 / fire 0x121,0xb6, part_014.c:6510-6522 -- note the machine puts them in DIFFERENT places, so the report's 'same place as the jam icon' premise is wrong). The break was BallisticWeaponCluster::Execute resolving the bin with ResolveLink(subsystem + 0x43c) -- the BINARY's layout applied to our compiled ProjectileWeapon, i.e. the databinding trap the conventions forbid. It returned NULL, so BTAmmoBinCookOffArmed(NULL) read 0 forever and the icon had no input. The typed bridge already existed: BTWeaponAmmoBin (projweap.cpp) was written in July for this exact trap when the ammo DIGITS failed to bind the same way -- these two call sites were simply missed. Both now use it; TestInstance's raw bin+0x180 round-count read replaced with a new typed BTAmmoBinRoundCount. Rig added (BT_BAYFIRE_TEST=<seconds> drives the AUTHENTIC arming condition, same hook family as BT_VALVE/BT_FLUSH_TEST) plus an edge-only [gau-fire] receipt. Measured: before, bin=00000000 cookOffArmed=0 on every cluster; after, each cluster binds a real bin and the burning rack alone reports cookOffArmed 0->1->0 across arm and detonation while its neighbours stay 0. NOTE #47's fix was correct but only 'data path rig-verified' with the pixels left to the field -- this is why that gap mattered.
2026-08-15 11:04:02 -05:00