diff --git a/engine/client/cl_game.c b/engine/client/cl_game.c index e74b2e58..0aac21ba 100644 --- a/engine/client/cl_game.c +++ b/engine/client/cl_game.c @@ -649,54 +649,6 @@ void CL_ParseTextMessage( sizebuf_t *msg ) CL_HudMessage( text->pName ); } -/* -================ -CL_ParseFinaleCutscene - -show display finale or cutscene message -================ -*/ -void CL_ParseFinaleCutscene( sizebuf_t *msg, int level ) -{ - static int msgindex = 0; - client_textmessage_t *text; - int channel; - - cl.intermission = level; - - channel = msgindex; - msgindex = (msgindex + 1) & (MAX_TEXTCHANNELS - 1); - - // grab message channel - text = &cl_textmessage[channel]; - - // NOTE: svc_finale and svc_cutscene has a - // predefined settings like Quake-style - text->x = -1.0f; - text->y = 0.15f; - text->effect = 2; // scan out effect - text->r1 = 245; - text->g1 = 245; - text->b1 = 245; - text->a1 = 0; // unused - text->r2 = 0; - text->g2 = 0; - text->b2 = 0; - text->a2 = 0; - text->fadein = 0.15f; - text->fadeout = 0.0f; - text->holdtime = 99999.0f; - text->fxtime = 0.0f; - - // to prevent grab too long messages - Q_strncpy( (char *)text->pMessage, MSG_ReadString( msg ), 2048 ); - - if( *text->pMessage == '\0' ) - return; // no real text - - CL_HudMessage( text->pName ); -} - /* ==================== CL_GetMaxlients diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index 5078fff3..c5567a73 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -42,7 +42,7 @@ CL_ParseViewEntity ================== */ -void CL_ParseViewEntity( sizebuf_t *msg ) +static void CL_ParseViewEntity( sizebuf_t *msg ) { cl.viewentity = MSG_ReadWord( msg ); @@ -161,7 +161,7 @@ CL_ParseSignon ================== */ -void CL_ParseSignon( sizebuf_t *msg, connprotocol_t proto ) +static void CL_ParseSignon( sizebuf_t *msg, connprotocol_t proto ) { int i = MSG_ReadByte( msg ); @@ -209,7 +209,7 @@ CL_ParseParticles ================== */ -void CL_ParseParticles( sizebuf_t *msg, connprotocol_t proto ) +static void CL_ParseParticles( sizebuf_t *msg, connprotocol_t proto ) { vec3_t org, dir; int i, count, color; @@ -362,7 +362,7 @@ CL_ParseSoundFade ================== */ -void CL_ParseSoundFade( sizebuf_t *msg ) +static void CL_ParseSoundFade( sizebuf_t *msg ) { int fade_percent = MSG_ReadByte( msg ); int hold_time = MSG_ReadByte( msg ); @@ -616,7 +616,7 @@ CL_ParseCustomization ================== */ -void CL_ParseCustomization( sizebuf_t *msg ) +static void CL_ParseCustomization( sizebuf_t *msg ) { customization_t *pExistingCustomization; customization_t *pList; @@ -704,7 +704,7 @@ CL_ParseResourceRequest ================== */ -void CL_ParseResourceRequest( sizebuf_t *msg ) +static void CL_ParseResourceRequest( sizebuf_t *msg ) { byte buffer[MAX_INIT_MSG]; int i, arg, nStartIndex; @@ -776,7 +776,7 @@ CL_ParseFileTransferFailed ================== */ -void CL_ParseFileTransferFailed( sizebuf_t *msg ) +static void CL_ParseFileTransferFailed( sizebuf_t *msg ) { const char *name = MSG_ReadString( msg ); @@ -796,7 +796,7 @@ void CL_ParseFileTransferFailed( sizebuf_t *msg ) CL_ParseServerData ================== */ -void CL_ParseServerData( sizebuf_t *msg, connprotocol_t proto ) +static void CL_ParseServerData( sizebuf_t *msg, connprotocol_t proto ) { char gamefolder[MAX_QPATH]; string mapfile; @@ -1234,7 +1234,7 @@ void CL_ParseBaseline( sizebuf_t *msg, connprotocol_t proto ) CL_ParseLightStyle ================ */ -void CL_ParseLightStyle( sizebuf_t *msg, connprotocol_t proto ) +static void CL_ParseLightStyle( sizebuf_t *msg, connprotocol_t proto ) { int style; const char *s; @@ -1255,7 +1255,7 @@ CL_ParseSetAngle set the view angle to this absolute value ================ */ -void CL_ParseSetAngle( sizebuf_t *msg ) +static void CL_ParseSetAngle( sizebuf_t *msg ) { MSG_ReadVec3Angles( msg, cl.viewangles ); } @@ -1267,7 +1267,7 @@ CL_ParseAddAngle add the view angle yaw ================ */ -void CL_ParseAddAngle( sizebuf_t *msg ) +static void CL_ParseAddAngle( sizebuf_t *msg ) { pred_viewangle_t *a; float delta_yaw; @@ -1296,7 +1296,7 @@ CL_ParseCrosshairAngle offset crosshair angles ================ */ -void CL_ParseCrosshairAngle( sizebuf_t *msg ) +static void CL_ParseCrosshairAngle( sizebuf_t *msg ) { cl.crosshairangle[0] = MSG_ReadChar( msg ) * 0.2f; cl.crosshairangle[1] = MSG_ReadChar( msg ) * 0.2f; @@ -1310,7 +1310,7 @@ CL_ParseRestore reading decals, etc. ================ */ -void CL_ParseRestore( sizebuf_t *msg ) +static void CL_ParseRestore( sizebuf_t *msg ) { string filename; int i, mapCount; @@ -1337,7 +1337,7 @@ CL_RegisterUserMessage register new user message or update existing ================ */ -void CL_RegisterUserMessage( sizebuf_t *msg, connprotocol_t proto ) +static void CL_RegisterUserMessage( sizebuf_t *msg, connprotocol_t proto ) { char *pszName; char szName[17]; @@ -1375,7 +1375,7 @@ CL_UpdateUserinfo collect userinfo from all players ================ */ -void CL_UpdateUserinfo( sizebuf_t *msg, connprotocol_t proto ) +static void CL_UpdateUserinfo( sizebuf_t *msg, connprotocol_t proto ) { int slot, id; qboolean active; @@ -1898,7 +1898,7 @@ CL_ParseVoiceInit ================== */ -void CL_ParseVoiceInit( sizebuf_t *msg ) +static void CL_ParseVoiceInit( sizebuf_t *msg ) { char *pszCodec = MSG_ReadString( msg ); int quality = MSG_ReadByte( msg ); @@ -1912,7 +1912,7 @@ CL_ParseVoiceData ================== */ -void CL_ParseVoiceData( sizebuf_t *msg, connprotocol_t proto ) +static void CL_ParseVoiceData( sizebuf_t *msg, connprotocol_t proto ) { int size, idx, frames = 0; byte received[VOICE_MAX_DATA_SIZE]; @@ -1962,7 +1962,7 @@ CL_ParseResLocation ================== */ -void CL_ParseResLocation( sizebuf_t *msg ) +static void CL_ParseResLocation( sizebuf_t *msg ) { char *data = MSG_ReadString( msg ); char token[256]; @@ -1991,7 +1991,7 @@ sended from game.dll normal client ignores any of HLTV messages ============== */ -void CL_ParseHLTV( sizebuf_t *msg ) +static void CL_ParseHLTV( sizebuf_t *msg ) { switch( MSG_ReadByte( msg )) { @@ -2025,7 +2025,7 @@ spectator message (director) sended from game.dll ============== */ -void CL_ParseDirector( sizebuf_t *msg ) +static void CL_ParseDirector( sizebuf_t *msg ) { int iSize = MSG_ReadByte( msg ); byte pbuf[256]; @@ -2119,7 +2119,7 @@ Find the client cvar value and sent it back to the server ============== */ -void CL_ParseCvarValue( sizebuf_t *msg, const qboolean ext, const connprotocol_t proto ) +static void CL_ParseCvarValue( sizebuf_t *msg, const qboolean ext, const connprotocol_t proto ) { const char *cvarName, *response = NULL; convar_t *cvar; @@ -2181,7 +2181,7 @@ CL_ParseExec Exec map/class specific configs ============== */ -void CL_ParseExec( sizebuf_t *msg ) +static void CL_ParseExec( sizebuf_t *msg ) { qboolean is_class; int class_idx; @@ -2357,25 +2357,150 @@ ACTION MESSAGES */ /* -============ -CL_ParseCommonDLLMessage +================ +CL_ParseFinaleCutscene -parse a message which structure is enforced by DLL compatibility -it should always be the same regardless of protocol used +show display finale or cutscene message +================ +*/ +static void CL_ParseFinaleCutscene( sizebuf_t *msg, int level ) +{ + static int msgindex = 0; + client_textmessage_t *text; + int channel; + + cl.intermission = level; + + channel = msgindex; + msgindex = (msgindex + 1) & (MAX_TEXTCHANNELS - 1); + + // grab message channel + text = &cl_textmessage[channel]; + + // NOTE: svc_finale and svc_cutscene has a + // predefined settings like Quake-style + text->x = -1.0f; + text->y = 0.15f; + text->effect = 2; // scan out effect + text->r1 = 245; + text->g1 = 245; + text->b1 = 245; + text->a1 = 0; // unused + text->r2 = 0; + text->g2 = 0; + text->b2 = 0; + text->a2 = 0; + text->fadein = 0.15f; + text->fadeout = 0.0f; + text->holdtime = 99999.0f; + text->fxtime = 0.0f; + + // to prevent grab too long messages + Q_strncpy( (char *)text->pMessage, MSG_ReadString( msg ), 2048 ); + + if( *text->pMessage == '\0' ) + return; // no real text + + CL_HudMessage( text->pName ); +} + +/* +============ +CL_ParseCommonMessage + +parse a message which is the same across all supported protocols ============ */ -qboolean CL_ParseCommonDLLMessage( sizebuf_t *msg, connprotocol_t proto, int svc_num, int startoffset ) +qboolean CL_ParseCommonMessage( sizebuf_t *msg, connprotocol_t proto, int svc_num, int startoffset ) { - int param1, param2; + switch( svc_num ) + { + case svc_nop: + break; + case svc_setview: + CL_ParseViewEntity( msg ); + break; + case svc_lightstyle: + CL_ParseLightStyle( msg, proto ); + break; + case svc_intermission: + cl.intermission = 1; + break; + case svc_finale: + CL_ParseFinaleCutscene( msg, 2 ); + break; + case svc_cutscene: + CL_ParseFinaleCutscene( msg, 3 ); + break; + default: + return false; + } + + return true; +} + +/* +============ +CL_ParseCommonHLMessage + +parse a message which structure is enforced by DLL compatibility +it should always be the same regardless of HL-based protocol used +============ +*/ +qboolean CL_ParseCommonHLMessage( sizebuf_t *msg, connprotocol_t proto, int svc_num, int startoffset ) +{ + const char *s; + int param1, param2; switch( svc_num ) { + case svc_bad: + Host_Error( "svc_bad\n" ); + break; + case svc_time: + CL_ParseServerTime( msg, proto ); + break; + case svc_print: + Con_Printf( "%s", MSG_ReadString( msg )); + break; + case svc_stufftext: + s = MSG_ReadString( msg ); + if( cl_trace_stufftext.value ) + { + size_t len = Q_strlen( s ); + Con_Printf( "Stufftext: %s%c", s, len && s[len-1] == '\n' ? '\0' : '\n' ); + } + +#ifdef HACKS_RELATED_HLMODS + // disable Cry Of Fear antisave protection + if( !Q_strnicmp( s, "disconnect", 10 ) && cls.signon != SIGNONS ) + break; // too early +#endif + + Cbuf_AddFilteredText( s ); + break; + case svc_setangle: + CL_ParseSetAngle( msg ); + break; + case svc_serverdata: + Cbuf_Execute(); // make sure any stuffed commands are done + CL_ParseServerData( msg, proto ); + break; + case svc_updateuserinfo: + CL_UpdateUserinfo( msg, proto ); + break; + case svc_particle: + CL_ParseParticles( msg, proto ); + break; case svc_temp_entity: CL_ParseTempEntity( msg, proto ); // need protocol because message header differs cl.frames[cl.parsecountmod].graphdata.tentities += MSG_GetNumBytesRead( msg ) - startoffset; break; - case svc_intermission: - cl.intermission = 1; + case svc_signonnum: + CL_ParseSignon( msg, proto ); + break; + case svc_centerprint: + CL_CenterPrint( MSG_ReadString( msg ), 0.25f ); break; case svc_cdtrack: param1 = MSG_ReadByte( msg ); @@ -2384,6 +2509,9 @@ qboolean CL_ParseCommonDLLMessage( sizebuf_t *msg, connprotocol_t proto, int svc param2 = bound( 1, param2, MAX_CDTRACKS ); // loopnum S_StartBackgroundTrack( clgame.cdtracks[param1-1], clgame.cdtracks[param2-1], 0, false ); break; + case svc_restore: + CL_ParseRestore( msg ); + break; case svc_weaponanim: param1 = MSG_ReadByte( msg ); // iAnim param2 = MSG_ReadByte( msg ); // body @@ -2393,9 +2521,56 @@ qboolean CL_ParseCommonDLLMessage( sizebuf_t *msg, connprotocol_t proto, int svc param1 = MSG_ReadShort( msg ); Cvar_SetValue( "room_type", param1 ); break; + case svc_addangle: + CL_ParseAddAngle( msg ); + break; + case svc_usermessage: + CL_RegisterUserMessage( msg, proto ); + break; + case svc_choke: + cl.frames[cls.netchan.incoming_sequence & CL_UPDATE_MASK].choked = true; + cl.frames[cls.netchan.incoming_sequence & CL_UPDATE_MASK].receivedtime = -2.0; + break; + case svc_resourcerequest: + CL_ParseResourceRequest( msg ); + break; + case svc_customization: + CL_ParseCustomization( msg ); + break; + case svc_crosshairangle: + CL_ParseCrosshairAngle( msg ); + break; + case svc_soundfade: + CL_ParseSoundFade( msg ); + break; + case svc_filetxferfailed: + CL_ParseFileTransferFailed( msg ); + break; + case svc_hltv: + CL_ParseHLTV( msg ); + break; case svc_director: CL_ParseDirector( msg ); break; + case svc_voiceinit: + CL_ParseVoiceInit( msg ); + break; + case svc_voicedata: + CL_ParseVoiceData( msg, proto ); + cl.frames[cl.parsecountmod].graphdata.voicebytes += MSG_GetNumBytesRead( msg ) - startoffset; + break; + case svc_resourcelocation: + CL_ParseResLocation( msg ); + break; + case svc_querycvarvalue: + CL_ParseCvarValue( msg, false, proto ); + break; + case svc_querycvarvalue2: + CL_ParseCvarValue( msg, true, proto ); + break; + case svc_exec: + CL_ParseExec( msg ); + break; default: return false; } @@ -2415,7 +2590,6 @@ void CL_ParseServerMessage( sizebuf_t *msg ) size_t bufStart, playerbytes; int cmd; int old_background; - const char *s; // parse the message while( 1 ) @@ -2438,18 +2612,15 @@ void CL_ParseServerMessage( sizebuf_t *msg ) // record command for debugging spew on parse problem CL_Parse_RecordCommand( cmd, bufStart ); - if( CL_ParseCommonDLLMessage( msg, PROTO_CURRENT, cmd, bufStart )) + if( CL_ParseCommonMessage( msg, PROTO_CURRENT, cmd, bufStart )) + continue; + + if( CL_ParseCommonHLMessage( msg, PROTO_CURRENT, cmd, bufStart )) continue; // other commands switch( cmd ) { - case svc_bad: - Host_Error( "svc_bad\n" ); - break; - case svc_nop: - // this does nothing - break; case svc_disconnect: CL_Drop (); Host_AbortCurrentFrame (); @@ -2497,48 +2668,10 @@ void CL_ParseServerMessage( sizebuf_t *msg ) cls.connect_retry = 0; } break; - case svc_setview: - CL_ParseViewEntity( msg ); - break; case svc_sound: CL_ParseSoundPacket( msg, false ); cl.frames[cl.parsecountmod].graphdata.sound += MSG_GetNumBytesRead( msg ) - bufStart; break; - case svc_time: - CL_ParseServerTime( msg, PROTO_CURRENT ); - break; - case svc_print: - Con_Printf( "%s", MSG_ReadString( msg )); - break; - case svc_stufftext: - s = MSG_ReadString( msg ); - if( cl_trace_stufftext.value ) - { - size_t len = Q_strlen( s ); - Con_Printf( "Stufftext: %s%c", s, len && s[len-1] == '\n' ? '\0' : '\n' ); - } - -#ifdef HACKS_RELATED_HLMODS - // disable Cry Of Fear antisave protection - if( !Q_strnicmp( s, "disconnect", 10 ) && cls.signon != SIGNONS ) - break; // too early -#endif - - Cbuf_AddFilteredText( s ); - break; - case svc_setangle: - CL_ParseSetAngle( msg ); - break; - case svc_serverdata: - Cbuf_Execute(); // make sure any stuffed commands are done - CL_ParseServerData( msg, PROTO_CURRENT ); - break; - case svc_lightstyle: - CL_ParseLightStyle( msg, PROTO_CURRENT ); - break; - case svc_updateuserinfo: - CL_UpdateUserinfo( msg, PROTO_CURRENT ); - break; case svc_deltatable: Delta_ParseTableField( msg ); break; @@ -2552,9 +2685,6 @@ void CL_ParseServerMessage( sizebuf_t *msg ) case svc_pings: CL_UpdateUserPings( msg ); break; - case svc_particle: - CL_ParseParticles( msg, PROTO_CURRENT ); - break; case svc_restoresound: CL_ParseSoundPacket( msg, true ); cl.frames[cl.parsecountmod].graphdata.sound += MSG_GetNumBytesRead( msg ) - bufStart; @@ -2572,30 +2702,9 @@ void CL_ParseServerMessage( sizebuf_t *msg ) case svc_setpause: cl.paused = ( MSG_ReadOneBit( msg ) != 0 ); break; - case svc_signonnum: - CL_ParseSignon( msg, PROTO_CURRENT ); - break; - case svc_centerprint: - CL_CenterPrint( MSG_ReadString( msg ), 0.25f ); - break; - case svc_finale: - CL_ParseFinaleCutscene( msg, 2 ); - break; - case svc_restore: - CL_ParseRestore( msg ); - break; - case svc_cutscene: - CL_ParseFinaleCutscene( msg, 3 ); - break; case svc_bspdecal: CL_ParseStaticDecal( msg ); break; - case svc_addangle: - CL_ParseAddAngle( msg ); - break; - case svc_usermessage: - CL_RegisterUserMessage( msg, PROTO_CURRENT ); - break; case svc_packetentities: playerbytes = CL_ParsePacketEntities( msg, false, PROTO_CURRENT ); cl.frames[cl.parsecountmod].graphdata.players += playerbytes; @@ -2606,53 +2715,12 @@ void CL_ParseServerMessage( sizebuf_t *msg ) cl.frames[cl.parsecountmod].graphdata.players += playerbytes; cl.frames[cl.parsecountmod].graphdata.entities += MSG_GetNumBytesRead( msg ) - bufStart - playerbytes; break; - case svc_choke: - cl.frames[cls.netchan.incoming_sequence & CL_UPDATE_MASK].choked = true; - cl.frames[cls.netchan.incoming_sequence & CL_UPDATE_MASK].receivedtime = -2.0; - break; case svc_resourcelist: CL_ParseResourceList( msg, PROTO_CURRENT ); break; case svc_deltamovevars: CL_ParseMovevars( msg ); break; - case svc_resourcerequest: - CL_ParseResourceRequest( msg ); - break; - case svc_customization: - CL_ParseCustomization( msg ); - break; - case svc_crosshairangle: - CL_ParseCrosshairAngle( msg ); - break; - case svc_soundfade: - CL_ParseSoundFade( msg ); - break; - case svc_filetxferfailed: - CL_ParseFileTransferFailed( msg ); - break; - case svc_hltv: - CL_ParseHLTV( msg ); - break; - case svc_voiceinit: - CL_ParseVoiceInit( msg ); - break; - case svc_voicedata: - CL_ParseVoiceData( msg, PROTO_CURRENT ); - cl.frames[cl.parsecountmod].graphdata.voicebytes += MSG_GetNumBytesRead( msg ) - bufStart; - break; - case svc_resourcelocation: - CL_ParseResLocation( msg ); - break; - case svc_querycvarvalue: - CL_ParseCvarValue( msg, false, PROTO_CURRENT ); - break; - case svc_querycvarvalue2: - CL_ParseCvarValue( msg, true, PROTO_CURRENT ); - break; - case svc_exec: - CL_ParseExec( msg ); - break; default: CL_ParseUserMessage( msg, cmd, PROTO_CURRENT ); cl.frames[cl.parsecountmod].graphdata.usr += MSG_GetNumBytesRead( msg ) - bufStart; diff --git a/engine/client/cl_parse_gs.c b/engine/client/cl_parse_gs.c index 7c6b92c0..5d99aaa5 100644 --- a/engine/client/cl_parse_gs.c +++ b/engine/client/cl_parse_gs.c @@ -569,22 +569,15 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg ) // record command for debugging spew on parse problem CL_Parse_RecordCommand( cmd, bufStart ); - if( CL_ParseCommonDLLMessage( msg, PROTO_GOLDSRC, cmd, bufStart )) + if( CL_ParseCommonMessage( msg, PROTO_GOLDSRC, cmd, bufStart )) + continue; + + if( CL_ParseCommonHLMessage( msg, PROTO_GOLDSRC, cmd, bufStart )) continue; // other commands switch( cmd ) { - case svc_bad: - Host_Error( "svc_bad\n" ); - break; - case svc_nop: - case svc_spawnstatic: - case svc_goldsrc_damage: - case svc_goldsrc_killedmonster: - case svc_goldsrc_foundsecret: - // this does nothing - break; case svc_disconnect: s = MSG_ReadString( msg ); if( !COM_StringEmpty( s )) @@ -603,47 +596,10 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg ) if( param1 != PROTOCOL_GOLDSRC_VERSION ) Host_Error( "Server use invalid protocol (%i should be %i)\n", param1, PROTOCOL_GOLDSRC_VERSION ); break; - case svc_setview: - CL_ParseViewEntity( msg ); - break; case svc_sound: CL_ParseSoundPacketGS( msg ); cl.frames[cl.parsecountmod].graphdata.sound += MSG_GetNumBytesRead( msg ) - bufStart; break; - case svc_time: - CL_ParseServerTime( msg, PROTO_GOLDSRC ); - break; - case svc_print: - Con_Printf( "%s", MSG_ReadString( msg )); - break; - case svc_stufftext: - s = MSG_ReadString( msg ); - if( cl_trace_stufftext.value ) - { - size_t len = Q_strlen( s ); - Con_Printf( "Stufftext: %s%c", s, len && s[len-1] == '\n' ? '\0' : '\n' ); - } - -#ifdef HACKS_RELATED_HLMODS - // disable Cry Of Fear antisave protection - if( !Q_strnicmp( s, "disconnect", 10 ) && cls.signon != SIGNONS ) - break; // too early -#endif - Cbuf_AddFilteredText( s ); - break; - case svc_setangle: - CL_ParseSetAngle( msg ); - break; - case svc_serverdata: - Cbuf_Execute(); // make sure any stuffed commands are done - CL_ParseServerData( msg, PROTO_GOLDSRC ); - break; - case svc_lightstyle: - CL_ParseLightStyle( msg, PROTO_GOLDSRC ); - break; - case svc_updateuserinfo: - CL_UpdateUserinfo( msg, PROTO_GOLDSRC ); - break; case svc_deltatable: Delta_ParseTableField_GS( msg ); break; @@ -663,8 +619,9 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg ) CL_UpdateUserPings( msg ); MSG_EndBitWriting( msg ); break; - case svc_particle: - CL_ParseParticles( msg, PROTO_GOLDSRC ); + case svc_goldsrc_damage: + case svc_spawnstatic: + // this does nothing break; case svc_event_reliable: MSG_StartBitWriting( msg ); @@ -680,35 +637,18 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg ) case svc_setpause: cl.paused = ( MSG_ReadByte( msg ) != 0 ); break; - case svc_signonnum: - CL_ParseSignon( msg, PROTO_GOLDSRC ); - break; - case svc_centerprint: - CL_CenterPrint( MSG_ReadString( msg ), 0.25f ); + case svc_goldsrc_killedmonster: + case svc_goldsrc_foundsecret: + // this does nothing break; case svc_goldsrc_spawnstaticsound: CL_ParseSpawnStaticSound( msg ); break; - case svc_finale: - CL_ParseFinaleCutscene( msg, 2 ); - break; - case svc_restore: - CL_ParseRestore( msg ); - break; - case svc_cutscene: - CL_ParseFinaleCutscene( msg, 3 ); - break; case svc_goldsrc_decalname: param1 = MSG_ReadByte( msg ); s = MSG_ReadString( msg ); Q_strncpy( host.draw_decals[param1], s, sizeof( host.draw_decals[param1] )); break; - case svc_addangle: - CL_ParseAddAngle( msg ); - break; - case svc_usermessage: - CL_RegisterUserMessage( msg, PROTO_GOLDSRC ); - break; case svc_packetentities: playerbytes = CL_ParsePacketEntitiesGS( msg, false ); cl.frames[cl.parsecountmod].graphdata.players += playerbytes; @@ -719,10 +659,6 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg ) cl.frames[cl.parsecountmod].graphdata.players += playerbytes; cl.frames[cl.parsecountmod].graphdata.entities += MSG_GetNumBytesRead( msg ) - bufStart - playerbytes; break; - case svc_choke: - cl.frames[cls.netchan.incoming_sequence & CL_UPDATE_MASK].choked = true; - cl.frames[cls.netchan.incoming_sequence & CL_UPDATE_MASK].receivedtime = -2.0; - break; case svc_resourcelist: MSG_StartBitWriting( msg ); CL_ParseResourceList( msg, PROTO_GOLDSRC ); @@ -731,34 +667,6 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg ) case svc_deltamovevars: CL_ParseNewMovevars( msg ); break; - case svc_resourcerequest: - CL_ParseResourceRequest( msg ); - break; - case svc_customization: - CL_ParseCustomization( msg ); - break; - case svc_crosshairangle: - CL_ParseCrosshairAngle( msg ); - break; - case svc_soundfade: - CL_ParseSoundFade( msg ); - break; - case svc_filetxferfailed: - CL_ParseFileTransferFailed( msg ); - break; - case svc_hltv: - CL_ParseHLTV( msg ); - break; - case svc_voiceinit: - CL_ParseVoiceInit( msg ); - break; - case svc_voicedata: - CL_ParseVoiceData( msg, PROTO_GOLDSRC ); - cl.frames[cl.parsecountmod].graphdata.voicebytes += MSG_GetNumBytesRead( msg ) - bufStart; - break; - case svc_resourcelocation: - CL_ParseResLocation( msg ); - break; case svc_goldsrc_sendextrainfo: CL_ParseExtraInfo( msg ); break; @@ -768,15 +676,6 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg ) Con_Reportf( S_ERROR "%s: svc_goldsrc_timescale: implement me!\n", __func__ ); MSG_ReadFloat( msg ); break; - case svc_querycvarvalue: - CL_ParseCvarValue( msg, false, PROTO_GOLDSRC ); - break; - case svc_querycvarvalue2: - CL_ParseCvarValue( msg, true, PROTO_GOLDSRC ); - break; - case svc_exec: - CL_ParseExec( msg ); - break; default: CL_ParseUserMessage( msg, cmd, PROTO_GOLDSRC ); cl.frames[cl.parsecountmod].graphdata.usr += MSG_GetNumBytesRead( msg ) - bufStart; diff --git a/engine/client/cl_qparse.c b/engine/client/cl_qparse.c index 21d339d8..90a9d3af 100644 --- a/engine/client/cl_qparse.c +++ b/engine/client/cl_qparse.c @@ -930,12 +930,12 @@ void CL_ParseQuakeMessage( sizebuf_t *msg ) // record command for debugging spew on parse problem CL_Parse_RecordCommand( cmd, bufStart ); + if( CL_ParseCommonMessage( msg, PROTO_QUAKE, cmd, bufStart )) + continue; + // other commands switch( cmd ) { - case svc_nop: - // this does nothing - break; case svc_disconnect: CL_DemoCompleted (); break; @@ -947,9 +947,6 @@ void CL_ParseQuakeMessage( sizebuf_t *msg ) if( param1 != PROTOCOL_VERSION_QUAKE ) Host_Error( "Server is protocol %i instead of %i\n", param1, PROTOCOL_VERSION_QUAKE ); break; - case svc_setview: - CL_ParseViewEntity( msg ); - break; case svc_sound: CL_ParseQuakeSound( msg ); cl.frames[cl.parsecountmod].graphdata.sound += MSG_GetNumBytesRead( msg ) - bufStart; @@ -974,9 +971,6 @@ void CL_ParseQuakeMessage( sizebuf_t *msg ) Cbuf_Execute(); // make sure any stuffed commands are done CL_ParseQuakeServerInfo( msg ); break; - case svc_lightstyle: - CL_ParseLightStyle( msg, PROTO_QUAKE ); - break; case svc_updatename: param1 = MSG_ReadByte( msg ); Q_strncpy( cl.players[param1].name, MSG_ReadString( msg ), sizeof( cl.players[0].name )); @@ -1029,8 +1023,7 @@ void CL_ParseQuakeMessage( sizebuf_t *msg ) CL_ParseQuakeSignon( msg ); break; case svc_centerprint: - str = MSG_ReadString( msg ); - CL_DispatchUserMessage( "HudText", Q_strlen( str ) + 1, (void *)str ); + CL_HudMessage( MSG_ReadString( msg )); break; case svc_killedmonster: CL_DispatchQuakeMessage( "KillMonster" ); // just an event @@ -1041,12 +1034,6 @@ void CL_ParseQuakeMessage( sizebuf_t *msg ) case svc_spawnstaticsound: CL_ParseQuakeStaticSound( msg ); break; - case svc_intermission: - cl.intermission = 1; - break; - case svc_finale: - CL_ParseFinaleCutscene( msg, 2 ); - break; case svc_cdtrack: param1 = MSG_ReadByte( msg ); param1 = bound( 0, param1, MAX_CDTRACKS - 1 ); // tracknum @@ -1059,15 +1046,12 @@ void CL_ParseQuakeMessage( sizebuf_t *msg ) case svc_sellscreen: Cmd_ExecuteString( "help" ); // open quake menu break; - case svc_cutscene: - CL_ParseFinaleCutscene( msg, 3 ); + case svc_showlmp: + CL_ParseNehahraShowLMP( msg ); break; case svc_hidelmp: CL_ParseNehahraHideLMP( msg ); break; - case svc_showlmp: - CL_ParseNehahraShowLMP( msg ); - break; case svc_skybox: Q_strncpy( clgame.movevars.skyName, MSG_ReadString( msg ), sizeof( clgame.movevars.skyName )); break; diff --git a/engine/client/client.h b/engine/client/client.h index 96bc856f..0b7a8e67 100644 --- a/engine/client/client.h +++ b/engine/client/client.h @@ -855,6 +855,7 @@ void CL_FreeEdicts( void ); void CL_ClearWorld( void ); void CL_DrawCenterPrint( void ); void CL_ClearSpriteTextures( void ); +void CL_HudMessage( const char *pMessage ); void CL_CenterPrint( const char *text, float y ); client_textmessage_t *CL_TextMessageGet( const char *pName ); void NetAPI_CancelAllRequests( void ); @@ -925,45 +926,23 @@ static inline cl_entity_t *CL_GetLocalPlayer( void ) // // cl_parse.c // -void CL_ParseSetAngle( sizebuf_t *msg ); -void CL_ParseServerData( sizebuf_t *msg, connprotocol_t proto ); -void CL_ParseLightStyle( sizebuf_t *msg, connprotocol_t proto ); -void CL_UpdateUserinfo( sizebuf_t *msg, connprotocol_t proto ); void CL_ParseResource( sizebuf_t *msg ); void CL_ParseClientData( sizebuf_t *msg, connprotocol_t proto ); void CL_UpdateUserPings( sizebuf_t *msg ); -void CL_ParseParticles( sizebuf_t *msg, connprotocol_t proto ); void CL_ParseBaseline( sizebuf_t *msg, connprotocol_t proto ); -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, connprotocol_t proto ); void CL_ParseResourceList( sizebuf_t *msg, connprotocol_t proto ); void CL_ParseMovevars( sizebuf_t *msg ); -void CL_ParseResourceRequest( sizebuf_t *msg ); -void CL_ParseCustomization( sizebuf_t *msg ); -void CL_ParseCrosshairAngle( sizebuf_t *msg ); -void CL_ParseSoundFade( sizebuf_t *msg ); -void CL_ParseFileTransferFailed( sizebuf_t *msg ); -void CL_ParseHLTV( sizebuf_t *msg ); -void CL_ParseDirector( sizebuf_t *msg ); -void CL_ParseVoiceInit( sizebuf_t *msg ); -void CL_ParseVoiceData( sizebuf_t *msg, connprotocol_t proto ); -void CL_ParseResLocation( sizebuf_t *msg ); -void CL_ParseCvarValue( sizebuf_t *msg, const qboolean ext, const connprotocol_t proto ); void CL_ParseServerMessage( sizebuf_t *msg ); -qboolean CL_ParseCommonDLLMessage( sizebuf_t *msg, connprotocol_t proto, int svc_num, int startoffset ); +qboolean CL_ParseCommonMessage( sizebuf_t *msg, connprotocol_t proto, int svc_num, int startoffset ); +qboolean CL_ParseCommonHLMessage( sizebuf_t *msg, connprotocol_t proto, int svc_num, int startoffset ); void CL_ParseTempEntity( sizebuf_t *msg, connprotocol_t proto ); qboolean CL_DispatchUserMessage( const char *pszName, int iSize, void *pbuf ); 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, connprotocol_t proto ); 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 ); void CL_BatchResourceRequest( qboolean initialize ); int CL_EstimateNeededResources( void );