Determine latency with leveltime BS instead of nettics

This commit is contained in:
fickleheart 2019-01-05 01:13:16 -06:00
parent 656de08b96
commit bc429ad4f8
3 changed files with 8 additions and 20 deletions

View file

@ -4007,25 +4007,6 @@ FILESTAMP
&netbuffer->u.client4pak.cmd4, 1); &netbuffer->u.client4pak.cmd4, 1);
} }
{ // Store the node's latency in tics on the ticcmd right as we receive it. I think this should be sync-stable
UINT8 latency = min(maketic - nettics[node], MAXPREDICTTICS-1); //@TODO add a cvar to allow setting this max
switch (netbuffer->packettype)
{
case PT_CLIENT4CMD:
netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].latency = latency;
case PT_CLIENT3CMD:
netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].latency = latency;
case PT_CLIENT2CMD:
netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].latency = latency;
default:
netcmds[maketic%BACKUPTICS][netconsole].latency = latency;
}
}
// A delay before we check resynching // A delay before we check resynching
// Used on join or just after a synch fail // Used on join or just after a synch fail
if (resynch_delay[node]) if (resynch_delay[node])

View file

@ -1567,6 +1567,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
lang += (cmd->angleturn<<16); lang += (cmd->angleturn<<16);
cmd->angleturn = (INT16)(lang >> 16); cmd->angleturn = (INT16)(lang >> 16);
cmd->latency = leveltime & 0xFF; // Send leveltime when this tic was generated to the server for control lag calculations
if (!hu_stopped) if (!hu_stopped)
{ {
@ -2142,6 +2143,9 @@ void G_Ticker(boolean run)
players[i].kartstuff[k_throwdir] = 0; players[i].kartstuff[k_throwdir] = 0;
G_CopyTiccmd(cmd, &netcmds[buf][i], 1); G_CopyTiccmd(cmd, &netcmds[buf][i], 1);
// Use the leveltime sent in the player's ticcmd to determine control lag
cmd->latency = min((leveltime & 0xFF) - cmd->latency, MAXPREDICTTICS-1); //@TODO add a cvar to allow setting this max
} }
} }

View file

@ -6678,7 +6678,10 @@ static void P_MovePlayer(player_t *player)
if (add_delta) { if (add_delta) {
player->mo->angle += angle_diff<<16; player->mo->angle += angle_diff<<16;
player->mo->angle &= ~0xFFFF; // Try to keep the turning somewhat similar to how it was before? player->mo->angle &= ~0xFFFF; // Try to keep the turning somewhat similar to how it was before?
CONS_Printf("leftover turn (%s): %d\n", player_names[player-players], (INT16) (cmd->angleturn - (player->mo->angle>>16))); CONS_Printf("leftover turn (%s): %5d or %4d%%\n",
player_names[player-players],
(INT16) (cmd->angleturn - (player->mo->angle>>16)),
(INT16) (cmd->angleturn - (player->mo->angle>>16)) * 100 / (angle_diff ?: 1));
} }
} }