From 5a18130ba012649cd225b8caed572c748eb8c686 Mon Sep 17 00:00:00 2001 From: serge_shubin Date: Mon, 23 Mar 2026 06:08:34 +0800 Subject: [PATCH] Force non-delta snapshot on map_restart during playback snapFlagServerBit toggle alone doesn't clear client entity interpolation state. Also reset deltaMessage=-1 for all active clients, forcing the next snapshot to be full (non-delta). The client receives deltaNum<=0, clears old entity state, and renders all entities at their new positions without interpolation. Co-Authored-By: Claude Opus 4.6 (1M context) --- code/server/sv_netdemo.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/code/server/sv_netdemo.c b/code/server/sv_netdemo.c index 71d39bd..01e8429 100644 --- a/code/server/sv_netdemo.c +++ b/code/server/sv_netdemo.c @@ -659,9 +659,16 @@ static qboolean SVD_ReadFrame( fileHandle_t f ) { byte frameFlags; FS_Read( &frameFlags, 1, f ); if ( frameFlags & 1 ) { - // map was restarted — toggle server bit so client - // treats next snapshot as fresh (no interpolation) + int j; + // map was restarted — toggle server bit and force all + // clients to receive a full (non-delta) snapshot so the + // client clears old entity state and doesn't interpolate svs.snapFlagServerBit ^= SNAPFLAG_SERVERCOUNT; + for ( j = 0; j < sv_maxclients->integer; j++ ) { + if ( svs.clients[j].state >= CS_PRIMED ) { + svs.clients[j].deltaMessage = -1; + } + } } }