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
+6 -7
View File
@@ -299,11 +299,11 @@ extern void *BTResolveRosterPilot(int slot);
extern int BTPilotKills(void *pilot);
extern int BTPilotDeaths(void *pilot);
extern int BTPilotIsSelected(void *pilot, void *local_player); // SELECT-TARGET highlight (safe)
// App+0xC8 player-name-bitmap cache is not wired in the port (same deferral
// PlayerStatus uses for its nameImage) -> NULL routes DrawMechIcon to the binary's
// own cache-miss branch (the tinted name box), never an AV.
static BitMap *LookupPlayerNameBitmap(int /*name_id*/) { return NULL; }
// Gitea #43: the pilot's SMALL callsign raster (Mission small-bitmap chain via
// the pilot's compiled playerBitmapIndex -- bridge in btplayer.cpp). Replaces
// the port's old NULL-stub cache (which left every row an invisible blank box)
// AND the binary's raw pilot+0x1e0 key read (our compiled layout differs).
extern BitMap *BTPilotNameBitmap(void *pilot);
MethodDescription
PilotList::methodDescription =
@@ -429,8 +429,7 @@ Logical
void
PilotList::DrawMechIcon(void *pilot, int selected)
{
int nameId = *(int *)((char *)pilot + 0x1e0); // pilot name/id key
BitMap *bmp = LookupPlayerNameBitmap(nameId);
BitMap *bmp = BTPilotNameBitmap(pilot); // small callsign raster
int boxColor = selected ? 0xff : 0;
int blitColor = selected ? 0 : 0xff;
if (bmp == NULL)