From 12b0e7d5da355821e66379d688afde3142a22d1e Mon Sep 17 00:00:00 2001 From: fickleheart Date: Fri, 4 Jan 2019 22:27:09 -0600 Subject: [PATCH] Send latency in players' ticcmds --- src/d_clisrv.c | 19 +++++++++++++++++++ src/d_clisrv.h | 8 ++++---- src/d_ticcmd.h | 1 + src/g_game.c | 1 + src/k_kart.c | 2 +- 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index eafc1283..e05b9b44 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -4007,6 +4007,25 @@ FILESTAMP &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], 12); //@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 // Used on join or just after a synch fail if (resynch_delay[node]) diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 4207325e..911f25b4 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -433,10 +433,10 @@ typedef struct UINT8 reserved; // Padding union { - clientcmd_pak clientpak; // 144 bytes - client2cmd_pak client2pak; // 200 bytes - client3cmd_pak client3pak; // 256 bytes(?) - client4cmd_pak client4pak; // 312 bytes(?) + clientcmd_pak clientpak; // 145 bytes + client2cmd_pak client2pak; // 202 bytes + client3cmd_pak client3pak; // 258 bytes(?) + client4cmd_pak client4pak; // 316 bytes(?) servertics_pak serverpak; // 132495 bytes (more around 360, no?) serverconfig_pak servercfg; // 773 bytes resynchend_pak resynchend; // diff --git a/src/d_ticcmd.h b/src/d_ticcmd.h index 7df2d412..6524870d 100644 --- a/src/d_ticcmd.h +++ b/src/d_ticcmd.h @@ -60,6 +60,7 @@ typedef struct INT16 aiming; // vertical aiming, see G_BuildTicCmd UINT16 buttons; INT16 driftturn; // SRB2Kart: Used for getting drift turn speed + UINT8 latency; // Netgames: how many tics ago was this ticcmd generated from this player's end? } ATTRPACK ticcmd_t; #if defined(_MSC_VER) diff --git a/src/g_game.c b/src/g_game.c index ac8e27a3..5b5ceb1a 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -4542,6 +4542,7 @@ ticcmd_t *G_MoveTiccmd(ticcmd_t* dest, const ticcmd_t* src, const size_t n) dest[i].aiming = (INT16)SHORT(src[i].aiming); dest[i].buttons = (UINT16)SHORT(src[i].buttons); dest[i].driftturn = (INT16)SHORT(src[i].driftturn); + dest[i].latency = (INT16)SHORT(src[i].latency); } return dest; } diff --git a/src/k_kart.c b/src/k_kart.c index 2a152162..6162e772 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8263,7 +8263,7 @@ void K_drawKartHUD(void) { UINT8 p; for (p = 0; p < MAXPLAYERS; p++) - V_DrawString(8, 64+(8*p), V_YELLOWMAP, va("%d - %d", p, playernode[p])); + V_DrawString(8, 64+(8*p), V_YELLOWMAP, va("%d - %d (%dl)", p, playernode[p], players[p].cmd.latency)); } }