From 190e4a5e8a088d5017e5aa450c9cdac1f22906bc Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 15 Nov 2024 07:42:33 +0300 Subject: [PATCH] engine: client: don't kill entity's beams if this entity number was never used on client Fixes issue when beam was sent over to client before it's start point entity (due to PVS, for example) --- engine/client/cl_frame.c | 8 +++++++- engine/client/cl_parse_gs.c | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/engine/client/cl_frame.c b/engine/client/cl_frame.c index 41dccfff..be252543 100644 --- a/engine/client/cl_frame.c +++ b/engine/client/cl_frame.c @@ -806,7 +806,13 @@ static void CL_DeltaEntity( sizebuf_t *msg, frame_t *frame, int newnum, entity_s SETVISBIT( frame->flags, pack ); // release beams from previous entity - CL_KillDeadBeams( ent ); + + // a1ba: check that this entity number was never used on client + // as beams can be transferred before this entity was sent to client + // (for example, beam was sent over during beam entity spawn + // but referenced start point entity hasn't been sent over due to PVS) + if( ent->curstate.messagenum != 0 ) + CL_KillDeadBeams( ent ); } // add entity to packet diff --git a/engine/client/cl_parse_gs.c b/engine/client/cl_parse_gs.c index 37050200..d083a33c 100644 --- a/engine/client/cl_parse_gs.c +++ b/engine/client/cl_parse_gs.c @@ -241,7 +241,13 @@ static void CL_DeltaEntityGS( const delta_header_t *hdr, sizebuf_t *msg, frame_t SETVISBIT( frame->flags, pack ); // release beams from previous entity - CL_KillDeadBeams( ent ); + + // a1ba: check that this entity number was never used on client + // as beams can be transferred before this entity was sent to client + // (for example, beam was sent over during beam entity spawn + // but referenced start point entity hasn't been sent over due to PVS) + if( ent->curstate.messagenum != 0 ) + CL_KillDeadBeams( ent ); } // add entity to packet