engine: client: another fix baselines and entities parsing for GoldSrc, ensure we always call MSG_EndBitWriting

This commit is contained in:
Alibek Omarov 2024-10-14 03:15:36 +03:00
parent 87c88f7463
commit ff47fbaedc
2 changed files with 5 additions and 11 deletions

View file

@ -1230,9 +1230,6 @@ void CL_ParseBaseline( sizebuf_t *msg, connprotocol_t proto )
Delta_InitClient (); // finalize client delta's Delta_InitClient (); // finalize client delta's
if( proto == PROTO_GOLDSRC )
MSG_StartBitWriting( msg );
while( 1 ) while( 1 )
{ {
cl_entity_t *ent; cl_entity_t *ent;
@ -1270,7 +1267,6 @@ void CL_ParseBaseline( sizebuf_t *msg, connprotocol_t proto )
if( proto == PROTO_GOLDSRC ) if( proto == PROTO_GOLDSRC )
{ {
int type = MSG_ReadUBitLong( msg, 2 ); int type = MSG_ReadUBitLong( msg, 2 );
int bits = MSG_GetNumBitsWritten( msg );
int delta_type; int delta_type;
if( player ) delta_type = DT_ENTITY_STATE_PLAYER_T; if( player ) delta_type = DT_ENTITY_STATE_PLAYER_T;
@ -1278,6 +1274,7 @@ void CL_ParseBaseline( sizebuf_t *msg, connprotocol_t proto )
else delta_type = DT_ENTITY_STATE_T; else delta_type = DT_ENTITY_STATE_T;
Delta_ReadGSFields( msg, delta_type, &ent->prevstate, &ent->baseline, 1.0f ); Delta_ReadGSFields( msg, delta_type, &ent->prevstate, &ent->baseline, 1.0f );
ent->baseline.entityType = type;
} }
else MSG_ReadDeltaEntity( msg, &nullstate, &ent->baseline, newnum, player, 1.0f ); else MSG_ReadDeltaEntity( msg, &nullstate, &ent->baseline, newnum, player, 1.0f );
@ -1302,9 +1299,6 @@ void CL_ParseBaseline( sizebuf_t *msg, connprotocol_t proto )
} }
} }
} }
if( proto == PROTO_GOLDSRC )
MSG_EndBitWriting( msg );
} }
/* /*

View file

@ -191,7 +191,6 @@ static void CL_FlushEntityPacketGS( frame_t *frame, sizebuf_t *msg )
if( MSG_ReadWord( msg ) != 0 ) if( MSG_ReadWord( msg ) != 0 )
{ {
MSG_SeekToBit( msg, -16, SEEK_CUR ); MSG_SeekToBit( msg, -16, SEEK_CUR );
num = CL_ParseDeltaHeader( msg, false, num, &hdr ); num = CL_ParseDeltaHeader( msg, false, num, &hdr );
} }
else break; else break;
@ -204,8 +203,6 @@ static void CL_FlushEntityPacketGS( frame_t *frame, sizebuf_t *msg )
Delta_ReadGSFields( msg, CL_GetEntityDelta( &hdr, num ), &from, &to, cl.mtime[0] ); Delta_ReadGSFields( msg, CL_GetEntityDelta( &hdr, num ), &from, &to, cl.mtime[0] );
} }
MSG_EndBitWriting( msg );
} }
static void CL_DeltaEntityGS( const delta_header_t *hdr, sizebuf_t *msg, frame_t *frame, int newnum, entity_state_t *from, qboolean has_update ) static void CL_DeltaEntityGS( const delta_header_t *hdr, sizebuf_t *msg, frame_t *frame, int newnum, entity_state_t *from, qboolean has_update )
@ -301,7 +298,9 @@ static int CL_ParsePacketEntitiesGS( sizebuf_t *msg, qboolean delta )
if( !CL_ValidateDeltaPacket( oldpacket, oldframe )) if( !CL_ValidateDeltaPacket( oldpacket, oldframe ))
{ {
MSG_StartBitWriting( msg );
CL_FlushEntityPacketGS( frame, msg ); CL_FlushEntityPacketGS( frame, msg );
MSG_EndBitWriting( msg );
return playerbytes; return playerbytes;
} }
} }
@ -648,8 +647,9 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg )
cl.frames[cl.parsecountmod].graphdata.event += MSG_GetNumBytesRead( msg ) - bufStart; cl.frames[cl.parsecountmod].graphdata.event += MSG_GetNumBytesRead( msg ) - bufStart;
break; break;
case svc_spawnbaseline: case svc_spawnbaseline:
MSG_StartBitWriting( msg );
CL_ParseBaseline( msg, PROTO_GOLDSRC ); CL_ParseBaseline( msg, PROTO_GOLDSRC );
break; MSG_EndBitWriting( msg );
break; break;
case svc_setpause: case svc_setpause:
cl.paused = ( MSG_ReadOneBit( msg ) != 0 ); cl.paused = ( MSG_ReadOneBit( msg ) != 0 );