From 0d1f1d515e16839bacf857c00bd194151bc63c70 Mon Sep 17 00:00:00 2001 From: serge_shubin Date: Mon, 23 Mar 2026 05:47:51 +0800 Subject: [PATCH] Restore svs.time sync for trajectory interpolation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverting the svs.time change from the bugfix commit — entity trajectories (rockets, grenades, bobbing items) need svs.time to match recorded time for client-side interpolation. The zombie timeout issue is already handled by skipping SV_CheckTimeouts. Co-Authored-By: Claude Opus 4.6 (1M context) --- code/server/sv_netdemo.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/server/sv_netdemo.c b/code/server/sv_netdemo.c index 0ea122f..f7ac353 100644 --- a/code/server/sv_netdemo.c +++ b/code/server/sv_netdemo.c @@ -625,9 +625,10 @@ static qboolean SVD_ReadFrame( fileHandle_t f ) { return qfalse; // end of demo } - // don't overwrite svs.time — it advances normally via SV_Frame. - // the recorded serverTime is consumed but not applied, avoiding - // time jumps that break client timeouts and heartbeats. + // set svs.time to recorded time so entity trajectory interpolation + // works correctly (rockets, grenades, etc. use pos.trTime relative + // to server time). zombie timeout is already skipped during playback. + svs.time = serverTime; numEnts = SVD_ReadShort( f ); // read entity message (optionally LZ4 compressed)