From 595cf9864b09925adafd1162cfe0a0383dbdbae6 Mon Sep 17 00:00:00 2001 From: serge_shubin Date: Mon, 23 Mar 2026 06:11:08 +0800 Subject: [PATCH] Reset playback delta state on map_restart marker The recording resets its delta state on map_restart (writes from zero baseline). The playback must do the same, otherwise the delta decoder uses stale pre-restart state as baseline, producing corrupt entity data and preventing EF_TELEPORT_BIT from being decoded correctly. Co-Authored-By: Claude Opus 4.6 (1M context) --- code/server/sv_netdemo.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/server/sv_netdemo.c b/code/server/sv_netdemo.c index 01e8429..a34486b 100644 --- a/code/server/sv_netdemo.c +++ b/code/server/sv_netdemo.c @@ -660,9 +660,12 @@ static qboolean SVD_ReadFrame( fileHandle_t f ) { FS_Read( &frameFlags, 1, f ); if ( frameFlags & 1 ) { 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 + // map was restarted — reset playback delta state to match + // the recording's reset (both now decode from zero baseline). + // Also toggle server bit and force non-delta snapshot so the + // client clears old entity state and doesn't interpolate. + Com_Memset( demo.playPrevEntities, 0, sizeof(demo.playPrevEntities) ); + Com_Memset( demo.playPrevPlayers, 0, sizeof(demo.playPrevPlayers) ); svs.snapFlagServerBit ^= SNAPFLAG_SERVERCOUNT; for ( j = 0; j < sv_maxclients->integer; j++ ) { if ( svs.clients[j].state >= CS_PRIMED ) {