diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 4192e1384..001a95ea8 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -5754,6 +5754,18 @@ INT32 D_NumPlayers(void) return num; } +/** Return whether a player is a real person (not a CPU) and not spectating. + */ +boolean D_IsPlayerHumanAndGaming (INT32 player_number) +{ + player_t * player = &players[player_number]; + return ( + playeringame[player_number] && + ! player->spectator && + ! player->bot + ); +} + tic_t GetLag(INT32 node) { return gametic - nettics[node]; diff --git a/src/d_clisrv.h b/src/d_clisrv.h index a48ddb9c3..b9bcd61e7 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -637,6 +637,7 @@ extern UINT8 playernode[MAXPLAYERS]; extern UINT8 playerconsole[MAXPLAYERS]; INT32 D_NumPlayers(void); +boolean D_IsPlayerHumanAndGaming(INT32 player_number); void D_ResetTiccmds(void); tic_t GetLag(INT32 node); diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index 5713760e1..7630f705c 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -1375,6 +1375,8 @@ static inline boolean I_SkipFrame(void) // void I_FinishUpdate(void) { + int player; + if (rendermode == render_none) return; //Alam: No software or OpenGl surface @@ -1389,7 +1391,25 @@ void I_FinishUpdate(void) if (cv_showping.value && netgame && ( consoleplayer != serverplayer || ! server_lagless )) { - SCR_DisplayLocalPing(); + if (server_lagless) + { + if (consoleplayer != serverplayer) + SCR_DisplayLocalPing(); + } + else + { + for ( + player = 1; + player < MAXPLAYERS; + player++ + ){ + if (D_IsPlayerHumanAndGaming(player)) + { + SCR_DisplayLocalPing(); + break; + } + } + } } }