diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index c4b092ae..80c12ff2 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -1409,14 +1409,14 @@ CL_RegisterUserMessage register new user message or update existing ================ */ -void CL_RegisterUserMessage( sizebuf_t *msg ) +void CL_RegisterUserMessage( sizebuf_t *msg, connprotocol_t proto ) { - char *pszName; + char *pszName; int svc_num, size, bits; svc_num = MSG_ReadByte( msg ); - if( cls.legacymode ) + if( proto == PROTO_LEGACY || proto == PROTO_GOLDSRC ) { size = MSG_ReadByte( msg ); bits = 8; @@ -1427,7 +1427,16 @@ void CL_RegisterUserMessage( sizebuf_t *msg ) bits = 16; } - pszName = MSG_ReadString( msg ); + if( proto == PROTO_GOLDSRC ) + { + static char szName[17]; + + MSG_ReadBytes( msg, szName, sizeof( szName ) - 1 ); + szName[16] = 0; + + pszName = szName; + } + else pszName = MSG_ReadString( msg ); // important stuff if( size == ( BIT( bits ) - 1 ) ) @@ -2298,7 +2307,7 @@ CL_ParseUserMessage handles all user messages ============== */ -void CL_ParseUserMessage( sizebuf_t *msg, int svc_num ) +void CL_ParseUserMessage( sizebuf_t *msg, int svc_num, connprotocol_t proto ) { byte pbuf[MAX_USERMSG_LENGTH]; int i, iSize; @@ -2338,7 +2347,7 @@ void CL_ParseUserMessage( sizebuf_t *msg, int svc_num ) // message with variable sizes receive an actual size as first byte if( iSize == -1 ) { - if( cls.legacymode ) + if( proto == PROTO_GOLDSRC || proto == PROTO_LEGACY ) iSize = MSG_ReadByte( msg ); else iSize = MSG_ReadWord( msg ); } @@ -2624,7 +2633,7 @@ void CL_ParseServerMessage( sizebuf_t *msg ) CL_ParseAddAngle( msg ); break; case svc_usermessage: - CL_RegisterUserMessage( msg ); + CL_RegisterUserMessage( msg, PROTO_CURRENT ); break; case svc_packetentities: playerbytes = CL_ParsePacketEntities( msg, false, PROTO_CURRENT ); @@ -2684,7 +2693,7 @@ void CL_ParseServerMessage( sizebuf_t *msg ) CL_ParseExec( msg ); break; default: - CL_ParseUserMessage( msg, cmd ); + CL_ParseUserMessage( msg, cmd, PROTO_CURRENT ); cl.frames[cl.parsecountmod].graphdata.usr += MSG_GetNumBytesRead( msg ) - bufStart; break; } diff --git a/engine/client/cl_parse_48.c b/engine/client/cl_parse_48.c index fd4f5de5..8916fc89 100644 --- a/engine/client/cl_parse_48.c +++ b/engine/client/cl_parse_48.c @@ -509,7 +509,7 @@ void CL_ParseLegacyServerMessage( sizebuf_t *msg ) CL_ParseAddAngle( msg ); break; case svc_usermessage: - CL_RegisterUserMessage( msg ); + CL_RegisterUserMessage( msg, PROTO_LEGACY ); break; case svc_packetentities: playerbytes = CL_ParsePacketEntities( msg, false, PROTO_LEGACY ); @@ -574,7 +574,7 @@ void CL_ParseLegacyServerMessage( sizebuf_t *msg ) CL_ParseCvarValue( msg, true, PROTO_LEGACY ); break; default: - CL_ParseUserMessage( msg, cmd ); + CL_ParseUserMessage( msg, cmd, PROTO_LEGACY ); cl.frames[cl.parsecountmod].graphdata.usr += MSG_GetNumBytesRead( msg ) - bufStart; break; } diff --git a/engine/client/cl_parse_gs.c b/engine/client/cl_parse_gs.c index 980d7926..a8db793c 100644 --- a/engine/client/cl_parse_gs.c +++ b/engine/client/cl_parse_gs.c @@ -89,22 +89,6 @@ static void CL_ParseNewMovevars( sizebuf_t *msg ) clgame.oldmovevars.features = clgame.movevars.features = host.features; } -static void CL_ParseNewUserMsg( sizebuf_t *msg ) -{ - int svc_num, size; - char s[16]; - - svc_num = MSG_ReadByte( msg ); - size = MSG_ReadByte( msg ); - MSG_ReadBytes( msg, s, sizeof( s )); - - s[15] = 0; - if( size == 255 ) - size = -1; - - CL_LinkUserMessage( s, svc_num, size ); -} - typedef struct delta_header_t { qboolean remove : 1; @@ -676,7 +660,7 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg ) CL_ParseAddAngle( msg ); break; case svc_goldsrc_newusermsg: - CL_ParseNewUserMsg( msg ); + CL_RegisterUserMessage( msg, PROTO_GOLDSRC ); break; case svc_packetentities: playerbytes = CL_ParsePacketEntitiesGS( msg, false ); @@ -741,7 +725,7 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg ) CL_ParseExec( msg ); break; default: - CL_ParseUserMessage( msg, cmd ); + CL_ParseUserMessage( msg, cmd, PROTO_LEGACY ); cl.frames[cl.parsecountmod].graphdata.usr += MSG_GetNumBytesRead( msg ) - bufStart; break; } diff --git a/engine/client/client.h b/engine/client/client.h index cda42d96..6ed47778 100644 --- a/engine/client/client.h +++ b/engine/client/client.h @@ -875,7 +875,7 @@ void CL_ParseSignon( sizebuf_t *msg, connprotocol_t proto ); void CL_ParseRestore( sizebuf_t *msg ); void CL_ParseStaticDecal( sizebuf_t *msg ); void CL_ParseAddAngle( sizebuf_t *msg ); -void CL_RegisterUserMessage( sizebuf_t *msg ); +void CL_RegisterUserMessage( sizebuf_t *msg, connprotocol_t proto ); void CL_ParseResourceList( sizebuf_t *msg, connprotocol_t proto ); void CL_ParseMovevars( sizebuf_t *msg ); void CL_ParseResourceRequest( sizebuf_t *msg ); @@ -897,7 +897,7 @@ qboolean CL_RequestMissingResources( void ); void CL_RegisterResources( sizebuf_t *msg, connprotocol_t proto ); void CL_ParseViewEntity( sizebuf_t *msg ); void CL_ParseServerTime( sizebuf_t *msg ); -void CL_ParseUserMessage( sizebuf_t *msg, int svc_num ); +void CL_ParseUserMessage( sizebuf_t *msg, int svc_num, connprotocol_t proto ); void CL_ParseFinaleCutscene( sizebuf_t *msg, int level ); void CL_ParseTextMessage( sizebuf_t *msg ); void CL_ParseExec( sizebuf_t *msg );