X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=cl_parse.c;h=b63a017a1cbf28fcefc7420ebbadd8b41fc5cdf2;hb=761080f3cc6ee2f9e7005db7155f503b8744ff06;hp=77b2d0fa3541d1e22ee6676701de84957f842d13;hpb=4e975c9330e8af651838786cb834c78d5389bcd3;p=xonotic%2Fdarkplaces.git diff --git a/cl_parse.c b/cl_parse.c index 77b2d0fa..b63a017a 100644 --- a/cl_parse.c +++ b/cl_parse.c @@ -330,7 +330,7 @@ void CL_ParseServerInfo (void) i = MSG_ReadLong (); if (i != PROTOCOL_VERSION && i != DPPROTOCOL_VERSION1 && i != DPPROTOCOL_VERSION2 && i != DPPROTOCOL_VERSION3 && i != 250) { - Con_Printf ("Server is protocol %i, not %i, %i, %i or %i", i, DPPROTOCOL_VERSION1, DPPROTOCOL_VERSION2, DPPROTOCOL_VERSION3, PROTOCOL_VERSION); + Host_Error ("Server is protocol %i, not %i, %i, %i or %i", i, DPPROTOCOL_VERSION1, DPPROTOCOL_VERSION2, DPPROTOCOL_VERSION3, PROTOCOL_VERSION); return; } Nehahrademcompatibility = false; @@ -510,7 +510,7 @@ void CL_MoveLerpEntityStates(entity_t *ent) // monster interpolation if (DotProduct(odelta, odelta) + DotProduct(adelta, adelta) > 0.01) { - ent->persistent.lerpdeltatime = bound(0, cl.mtime[1] - ent->persistent.lerpstarttime, 1); + ent->persistent.lerpdeltatime = bound(0, cl.mtime[1] - ent->persistent.lerpstarttime, 0.1); ent->persistent.lerpstarttime = cl.mtime[1]; VectorCopy(ent->persistent.neworigin, ent->persistent.oldorigin); VectorCopy(ent->persistent.newangles, ent->persistent.oldangles); @@ -1309,8 +1309,41 @@ void CL_ParseTempEntity (void) S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1); break; + case TE_TEI_G3: + MSG_ReadVector(pos); + MSG_ReadVector(pos2); + MSG_ReadVector(dir); + CL_BeamParticle(pos, pos2, 12, 1, 0.3, 0.1, 1, 1); + CL_BeamParticle(pos, pos2, 5, 1, 0.9, 0.3, 1, 1); + break; + + case TE_TEI_SMOKE: + MSG_ReadVector(pos); + MSG_ReadVector(dir); + count = MSG_ReadByte (); + Mod_FindNonSolidLocation(pos, cl.worldmodel); + CL_Tei_Smoke(pos, dir, count); + break; + + case TE_TEI_BIGEXPLOSION: + MSG_ReadVector(pos); + Mod_FindNonSolidLocation(pos, cl.worldmodel); + CL_ParticleExplosion (pos); + CL_AllocDlight (NULL, pos, 500, 1.25f, 1.0f, 0.5f, 500, 9999); + S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1); + break; + + case TE_TEI_PLASMAHIT: + MSG_ReadVector(pos); + MSG_ReadVector(dir); + count = MSG_ReadByte (); + Mod_FindNonSolidLocation(pos, cl.worldmodel); + CL_Tei_PlasmaHit(pos, dir, count); + CL_AllocDlight (NULL, pos, 500, 0.3, 0.6, 1.0f, 2000, 9999); + break; + default: - Host_Error ("CL_ParseTempEntity: bad type %d", type); + Host_Error ("CL_ParseTempEntity: bad type %d (hex %02X)", type, type); } } @@ -1323,6 +1356,7 @@ static qbyte cgamenetbuffer[65536]; CL_ParseServerMessage ===================== */ +int parsingerror = false; void CL_ParseServerMessage (void) { int cmd; @@ -1347,6 +1381,8 @@ void CL_ParseServerMessage (void) entitiesupdated = false; + parsingerror = true; + while (1) { if (msg_badread) @@ -1667,6 +1703,17 @@ void CL_ParseServerMessage (void) if (entitiesupdated) CL_EntityUpdateEnd(); + + parsingerror = false; +} + +void CL_Parse_DumpPacket(void) +{ + if (!parsingerror) + return; + Con_Printf("Packet dump:\n"); + SZ_HexDumpToConsole(&net_message); + parsingerror = false; } void CL_Parse_Init(void)