diff --git a/restoration/source410/BT_L4/BTL4GAU3.CPP b/restoration/source410/BT_L4/BTL4GAU3.CPP index 5e131897..9d51a451 100644 --- a/restoration/source410/BT_L4/BTL4GAU3.CPP +++ b/restoration/source410/BT_L4/BTL4GAU3.CPP @@ -155,7 +155,7 @@ static Player * if (((MechControlsMapper *) controls)->GetPilotArray() == 0) { - return NULL; // no pod roster authored -> the page stays empty + return NULL; // no pod roster authored -> the rows stay empty } return ResolveRosterPlayer(slot); @@ -207,7 +207,7 @@ static Logical // binary's own cache-miss branch (the tinted name box), never an AV. // static BitMap * - LookupPlayerNameBitmap(int player_bitmap_index) + LookupPlayerNameBitmap(int player_bitmap_index, Logical large) { // // The mission owns the name art: the egg's [smallbitmap] index page @@ -228,7 +228,17 @@ static BitMap * { return NULL; } - return mission->GetSmallNameBitmap(player_bitmap_index); + // + // SMALL vs LARGE (A/B rig, 5.3.39): Mission carries both rasters. + // The Comm page's OWN row is the wide box and takes the large one + // -- the shipped page draws 'Aeolus' there in the tall face, and + // the small raster left it visibly undersized and low in the box. + // The seven strip slots keep the small raster: their boxes are + // half the height. + // + return large + ? mission->GetLargeNameBitmap(player_bitmap_index) + : mission->GetSmallNameBitmap(player_bitmap_index); } @@ -915,7 +925,8 @@ void Check(pilot); BitMap - *name_bitmap = LookupPlayerNameBitmap(pilot->playerBitmapIndex); + *name_bitmap = LookupPlayerNameBitmap(pilot->playerBitmapIndex, + (currentSlot == 0) ? True : False); // slot 0 == the own row int box_color = selected ? 0xff : 0, blit_color = selected ? 0 : 0xff; @@ -974,10 +985,21 @@ void *pilot; if (built == False) { - pilot = ResolveCommRosterPlayer(currentSlot); - if (pilot == NULL) + // + // SLOT 0 IS THE OWN ROW. Its layout entry is the odd one out + // ({180,225} at layout mode 0, KILLS/DEATHS at +0x95/+0xe8 + // instead of the strip boxes' +0x48), and the shipped Comm page + // fills it with the LOCAL pilot -- name, kills, deaths -- while + // the seven surrounding boxes stay empty in a solo mission. So + // slot 0 takes the mission player directly; only slots 1..7 come + // from the pod roster. + // + pilot = (currentSlot == 0) + ? local_player + : ResolveCommRosterPlayer(currentSlot); + if (pilot == NULL && currentSlot > 0) { - built = True; // past the first empty slot -> rest empty this cycle + built = True; // past the first empty roster slot -> rest empty } } else