diff --git a/src/hu_stuff.c b/src/hu_stuff.c index ad64552d8..c9fb7f45e 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -78,6 +78,7 @@ patch_t *cred_font[CRED_FONTSIZE]; // Note: I'd like to adress that at this point we might *REALLY* want to work towards a common drawString function that can take any font we want because this is really turning into a MESS. :V -Lat' patch_t *pingnum[10]; patch_t *pinggfx[5]; // small ping graphic +patch_t *mping[5]; // smaller ping graphic patch_t *framecounter; patch_t *frameslash; // framerate stuff. Used in screen.c @@ -311,6 +312,8 @@ void HU_LoadGraphics(void) { sprintf(buffer, "PINGGFX%d", i+1); pinggfx[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX); + sprintf(buffer, "MPING%d", i+1); + mping[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX); } // fps stuff @@ -2480,22 +2483,30 @@ void HU_Erase(void) // IN-LEVEL MULTIPLAYER RANKINGS //====================================================================== +static int +Ping_gfx_num (int ping) +{ + if (ping < 76) + return 0; + else if (ping < 137) + return 1; + else if (ping < 256) + return 2; + else if (ping < 500) + return 3; + else + return 4; +} + // // HU_drawPing // void HU_drawPing(INT32 x, INT32 y, UINT32 ping, INT32 flags) { - INT32 gfxnum = 4; // gfx to draw + INT32 gfxnum; // gfx to draw UINT8 const *colormap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_SALMON, GTC_CACHE); - if (ping < 76) - gfxnum = 0; - else if (ping < 137) - gfxnum = 1; - else if (ping < 256) - gfxnum = 2; - else if (ping < 500) - gfxnum = 3; + gfxnum = Ping_gfx_num(ping); V_DrawScaledPatch(x, y, flags, pinggfx[gfxnum]); if (servermaxping && ping > servermaxping && hu_tick < 4) // flash ping red if too high @@ -2504,6 +2515,19 @@ void HU_drawPing(INT32 x, INT32 y, UINT32 ping, INT32 flags) V_DrawPingNum(x, y+9, flags, ping, NULL); } +void +HU_drawMiniPing (INT32 x, INT32 y, UINT32 ping, INT32 flags) +{ + patch_t *patch; + + patch = mping[Ping_gfx_num(ping)]; + + if (( flags & V_SNAPTORIGHT )) + x += ( BASEVIDWIDTH - SHORT (patch->width) ); + + V_DrawScaledPatch(x, y, flags, patch); +} + // // HU_DrawTabRankings -- moved to k_kart.c // diff --git a/src/hu_stuff.h b/src/hu_stuff.h index be6798a82..c3da1d2a2 100644 --- a/src/hu_stuff.h +++ b/src/hu_stuff.h @@ -115,6 +115,7 @@ char HU_dequeueChatChar(void); void HU_Erase(void); void HU_clearChatChars(void); void HU_drawPing(INT32 x, INT32 y, UINT32 ping, INT32 flags); // Lat': Ping drawer for scoreboard. +void HU_drawMiniPing(INT32 x, INT32 y, UINT32 ping, INT32 flags); //void HU_DrawTeamTabRankings(playersort_t *tab, INT32 whiteplayer); //void HU_DrawDualTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer); void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer, INT32 hilicol); diff --git a/src/k_kart.c b/src/k_kart.c index 3a7202c99..099c50700 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9884,6 +9884,35 @@ void K_drawKartFreePlay(UINT32 flashtime) LAPS_Y+3, V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTORIGHT, "FREE PLAY"); } +static void +Draw_party_ping (int ss, INT32 snap) +{ + HU_drawMiniPing(0, 0, playerpingtable[displayplayers[ss]], V_HUDTRANS|snap); +} + +static void +K_drawMiniPing (void) +{ + if (cv_showping.value) + { + switch (r_splitscreen) + { + case 3: + Draw_party_ping(3, V_SNAPTORIGHT|V_SPLITSCREEN); + /*FALLTHRU*/ + case 2: + Draw_party_ping(2, V_SPLITSCREEN); + Draw_party_ping(1, V_SNAPTORIGHT); + Draw_party_ping(0, 0); + break; + case 1: + Draw_party_ping(1, V_SNAPTORIGHT|V_SPLITSCREEN); + Draw_party_ping(0, V_SNAPTORIGHT); + break; + } + } +} + static void K_drawDistributionDebugger(void) { patch_t *items[NUMKARTRESULTS] = { @@ -10212,6 +10241,11 @@ void K_drawKartHUD(void) K_drawKartFreePlay(leveltime); } + if (netgame && r_splitscreen) + { + K_drawMiniPing(); + } + if (cv_kartdebugdistribution.value) K_drawDistributionDebugger(); diff --git a/src/screen.c b/src/screen.c index 96a78ae8e..5b38f82db 100644 --- a/src/screen.c +++ b/src/screen.c @@ -445,7 +445,7 @@ void SCR_DisplayTicRate(void) void SCR_DisplayLocalPing(void) { UINT32 ping = playerpingtable[consoleplayer]; // consoleplayer's ping is everyone's ping in a splitnetgame :P - if (cv_showping.value == 1 || (cv_showping.value == 2 && ping > servermaxping)) // only show 2 (warning) if our ping is at a bad level + if (! r_splitscreen && ( cv_showping.value == 1 || (cv_showping.value == 2 && ping > servermaxping) )) // only show 2 (warning) if our ping is at a bad level { INT32 dispy = cv_ticrate.value ? 160 : 181; HU_drawPing(307, dispy, ping, V_SNAPTORIGHT | V_SNAPTOBOTTOM | V_HUDTRANS);