Implement Worst mode for lagless (for #129)

This commit is contained in:
NepDisk 2025-09-26 15:04:32 -04:00
parent db315f72ac
commit f60e499f91
5 changed files with 19 additions and 12 deletions

View file

@ -117,7 +117,7 @@ UINT32 playerpacketlosstable[MAXPLAYERS];
UINT32 playerdelaytable[MAXPLAYERS]; // mindelay values.
static tic_t lowest_lag;
boolean server_lagless;
SINT8 server_lagless;
SINT8 nodetoplayer[MAXNETNODES];
SINT8 nodetoplayer2[MAXNETNODES]; // say the numplayer for this node if any (splitscreen)
@ -5989,6 +5989,7 @@ static tic_t gametime = 0;
static void UpdatePingTable(void)
{
tic_t fastest;
tic_t slowest;
tic_t lag;
INT32 i;
@ -5999,6 +6000,7 @@ static void UpdatePingTable(void)
PingUpdate();
fastest = 0;
slowest = 0;
// update node latency values so we can take an average later.
for (i = 0; i < MAXPLAYERS; i++)
@ -6013,14 +6015,19 @@ static void UpdatePingTable(void)
lag = playerpingtable[i];
if (! fastest || lag < fastest)
fastest = lag;
if (! slowest || lag > slowest)
slowest = lag;
}
}
}
if (server_lagless)
if (server_lagless == 1)
lowest_lag = 0;
else
else if (server_lagless == 0)
lowest_lag = fastest;
else if (server_lagless == -1)
lowest_lag = slowest;
// Don't gentleman below your mindelay
if (lowest_lag < (tic_t)cv_mindelay.value)

View file

@ -489,7 +489,7 @@ extern UINT32 playerpacketlosstable[MAXPLAYERS];
extern UINT32 playerdelaytable[MAXPLAYERS];
extern tic_t servermaxping;
extern boolean server_lagless;
extern SINT8 server_lagless;
extern consvar_t cv_mindelay;
extern consvar_t cv_netticbuffer, cv_allownewplayer, cv_maxplayers, cv_joindelay;

View file

@ -655,7 +655,8 @@ consvar_t cv_nettimeout = CVAR_INIT ("nettimeout", "210", CV_CALL|CV_SAVE, netti
consvar_t cv_jointimeout = CVAR_INIT ("jointimeout", "210", CV_CALL|CV_SAVE, nettimeout_cons_t, JoinTimeout_OnChange);
consvar_t cv_maxping = CVAR_INIT ("maxdelay", "20", CV_SAVE, CV_Unsigned, NULL);
consvar_t cv_lagless = CVAR_INIT ("lagless", "On", CV_SAVE|CV_NETVAR|CV_CALL, CV_OnOff, Lagless_OnChange);
static CV_PossibleValue_t lagless_cons_t[] = {{-1, "Worst"}, {0, "Best"}, {1, "Lagless"}, {0, NULL}};
consvar_t cv_lagless = CVAR_INIT ("lagless", "Lagless", CV_SAVE|CV_NETVAR|CV_CALL, lagless_cons_t, Lagless_OnChange);
static CV_PossibleValue_t pingtimeout_cons_t[] = {{8, "MIN"}, {120, "MAX"}, {0, NULL}};
consvar_t cv_pingtimeout = CVAR_INIT ("maxdelaytimeout", "10", CV_SAVE, pingtimeout_cons_t, NULL);
@ -5408,9 +5409,8 @@ static void JoinTimeout_OnChange(void)
static void
Lagless_OnChange (void)
{
/* don't back out of dishonesty, or go lagless after playing honestly */
if (cv_lagless.value && gamestate == GS_LEVEL)
server_lagless = true;
if (gamestate == GS_LEVEL)
server_lagless = cv_lagless.value;
}
UINT32 timelimitintics = 0;

View file

@ -2238,7 +2238,7 @@ INT32 K_DrawNeoTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines
{
V_DrawThinString(x - 18 + 25, y, 0, "CPU");
}
else if (tab[i].num != serverplayer || !server_lagless)
else if (tab[i].num != serverplayer || (server_lagless == 0 || server_lagless == -1))
{
INT32 xoff = cv_pingmeasurement.value == 1 ? 33 : 26;
@ -2495,7 +2495,7 @@ void K_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, IN
{
V_DrawString(x + ((i < 8) ? -25 : rightoffset + 3), y-2, V_SNAPTOLEFT, "CPU");
}
else if (tab[i].num != serverplayer || !server_lagless)
else if (tab[i].num != serverplayer || (server_lagless == 0 || server_lagless == -1))
{
HU_drawPing(x + ((i < 8) ? -17 : rightoffset + 11), y-4, playerpingtable[tab[i].num], playerdelaytable[tab[i].num], playerpacketlosstable[tab[i].num], 0, true);
}

View file

@ -1288,9 +1288,9 @@ void I_FinishUpdate(void)
SCR_DisplayTicRate();
if (cv_showping.value && netgame &&
( consoleplayer != serverplayer || ! server_lagless ))
( consoleplayer != serverplayer || (server_lagless == 0 || server_lagless == -1) ))
{
if (server_lagless)
if (server_lagless == 1)
{
if (consoleplayer != serverplayer)
SCR_DisplayLocalPing();