Gitea #43: the Comm pilot list now shows EVERY pilot -- three stacked fixes

1. Roster count used the binary's raw entry+0x29&0x40 read on our compiled
   objects (databinding trap) -> garbage latched pilotCount=1.  Decoded: the
   flag is Player::NonScoringPlayerFlag (bit 14 = Entity::NextBit); both
   loops now use IsScoringPlayer().  Also closes the pilotIDs[1] overrun.
2. The build-once latch races async replicant arrival (rig-proven 1-then-2):
   rebuild on scoring-census change [T3 accommodation, demand-latch
   precedent]; also un-dangles departed peers.  Forensic: '[score] pilot
   roster built: N'.
3. Name icons were a NULL stub + zeros blank authentically -> rows invisible.
   Wired BTPilotNameBitmap (playerBitmapIndex -> Mission small callsign
   raster, the radar-label chain); replaces the raw pilot+0x1e0 key.

Rig-verified: Aeolus + Boreas rows with callsigns on both nodes incl. the
staggered-start race; solo unregressed (1 scoring pilot).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0166KTsC7ADm7VXEi1HF1jNg
This commit is contained in:
arcattack
2026-07-24 17:51:52 -05:00
co-authored by Claude Opus 5
parent 7494e2ec6c
commit b7107b1020
4 changed files with 91 additions and 31 deletions
+17
View File
@@ -1497,6 +1497,23 @@ int BTPilotDeaths(void *pilot)
int deaths = ((BTPlayer *)pilot)->GetDeaths();
return (deaths < 0) ? 0 : deaths;
}
// Gitea #43 completion: the pilot-list NAME icon. The binary blits the
// pilot's SMALL callsign raster -- the same 64x16 egg bitmaps the radar
// labels use (Mission's small-bitmap chain, keyed 1-based by the egg
// 'bitmapindex') -- but the port's PilotList had a NULL-stub lookup, so a
// roster row was a blank box + blanked-zero numerals: invisible until the
// pilot scored. Camera players carry index -1 (PLAYER.cpp:744) -> NULL ->
// DrawMechIcon's authentic cache-miss box branch.
BitMap *BTPilotNameBitmap(void *pilot)
{
if (pilot == 0 || application == 0)
return 0;
Mission *mission = application->GetCurrentMission();
int index = ((BTPlayer *)pilot)->playerBitmapIndex;
if (mission == 0 || index <= 0)
return 0;
return mission->GetSmallNameBitmap(index);
}
// OBSERVED-DEATH tally (MP DEATHS fix): each node maintains every player's
// score from LOCALLY OBSERVED events -- exactly how the KILLS credit already