X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=cl_parse.c;h=9f11a47d0055081e55fbe9bd787780f0566442c8;hb=d4ffce6349c1960f435b8877832d88c7c54e17ba;hp=8b6c8d2b824c386291e9dbdaa0128693ce0cfe74;hpb=8f3d959ac85f03156169ab23784ed23b2aeaa7de;p=xonotic%2Fdarkplaces.git diff --git a/cl_parse.c b/cl_parse.c index 8b6c8d2b..9f11a47d 100644 --- a/cl_parse.c +++ b/cl_parse.c @@ -106,22 +106,22 @@ CL_ParseStartSoundPacket */ void CL_ParseStartSoundPacket(int largesoundindex) { - vec3_t pos; - int channel, ent; - int sound_num; - int volume; - int field_mask; - float attenuation; - int i; + vec3_t pos; + int channel, ent; + int sound_num; + int volume; + int field_mask; + float attenuation; + int i; - field_mask = MSG_ReadByte(); + field_mask = MSG_ReadByte(); - if (field_mask & SND_VOLUME) + if (field_mask & SND_VOLUME) volume = MSG_ReadByte (); else volume = DEFAULT_SOUND_PACKET_VOLUME; - if (field_mask & SND_ATTENUATION) + if (field_mask & SND_ATTENUATION) attenuation = MSG_ReadByte () / 64.0; else attenuation = DEFAULT_SOUND_PACKET_ATTENUATION; @@ -153,7 +153,7 @@ void CL_ParseStartSoundPacket(int largesoundindex) for (i = 0;i < 3;i++) pos[i] = MSG_ReadCoord (); - S_StartSound (ent, channel, cl.sound_precache[sound_num], pos, volume/255.0, attenuation); + S_StartSound (ent, channel, cl.sound_precache[sound_num], pos, volume/255.0, attenuation); } /* @@ -449,15 +449,18 @@ void CL_ParseServerInfo (void) // entire entity array was cleared, so just fill in a few fields ent->state_current.active = true; ent->render.model = cl.worldmodel = cl.model_precache[1]; - ent->render.scale = 1; + //ent->render.scale = 1; ent->render.alpha = 1; + ent->render.flags = RENDER_SHADOW; + Matrix4x4_CreateFromQuakeEntity(&ent->render.matrix, 0, 0, 0, 0, 0, 0, 1); + Matrix4x4_Invert_Simple(&ent->render.inversematrix, &ent->render.matrix); CL_BoundingBoxForEntity(&ent->render); // clear entlife array memset(entlife, 0, MAX_EDICTS); cl_num_entities = 1; - R_NewMap (); + R_Modules_NewMap (); CL_CGVM_Start(); // noclip is turned off at start @@ -510,7 +513,7 @@ void CL_MoveLerpEntityStates(entity_t *ent) VectorCopy(ent->state_current.origin, ent->persistent.neworigin); VectorCopy(ent->state_current.angles, ent->persistent.newangles); } - else// if (ent->state_current.flags & RENDER_STEP) + else if (ent->state_current.flags & RENDER_STEP) { // monster interpolation if (DotProduct(odelta, odelta) + DotProduct(adelta, adelta) > 0.01) @@ -523,22 +526,20 @@ void CL_MoveLerpEntityStates(entity_t *ent) VectorCopy(ent->state_current.angles, ent->persistent.newangles); } } - /* else { // not a monster ent->persistent.lerpstarttime = cl.mtime[1]; // no lerp if it's singleplayer - //if (sv.active && svs.maxclients == 1 && !ent->state_current.flags & RENDER_STEP) - // ent->persistent.lerpdeltatime = 0; - //else + if (sv.active && svs.maxclients == 1 && !ent->state_current.flags & RENDER_STEP) + ent->persistent.lerpdeltatime = 0; + else ent->persistent.lerpdeltatime = cl.mtime[0] - cl.mtime[1]; VectorCopy(ent->persistent.neworigin, ent->persistent.oldorigin); VectorCopy(ent->persistent.newangles, ent->persistent.oldangles); VectorCopy(ent->state_current.origin, ent->persistent.neworigin); VectorCopy(ent->state_current.angles, ent->persistent.newangles); } - */ } /* @@ -650,10 +651,10 @@ void CL_ParseUpdate (int bits) } } +static entity_frame_t entityframe; void CL_ReadEntityFrame(void) { entity_t *ent; - entity_frame_t entityframe; int i; EntityFrame_Read(&cl.entitydatabase); EntityFrame_FetchFrame(&cl.entitydatabase, EntityFrame_MostRecentlyRecievedFrameNum(&cl.entitydatabase), &entityframe); @@ -668,8 +669,6 @@ void CL_ReadEntityFrame(void) entlife[ent->state_current.number] = 2; cl_entities_active[ent->state_current.number] = true; } - VectorCopy(cl.viewentoriginnew, cl.viewentoriginold); - VectorCopy(entityframe.eye, cl.viewentoriginnew); } void CL_EntityUpdateSetup(void) @@ -848,12 +847,13 @@ void CL_ParseStatic (int large) ent->render.skinnum = ent->state_baseline.skin; ent->render.effects = ent->state_baseline.effects; ent->render.alpha = 1; - ent->render.scale = 1; - ent->render.alpha = 1; + //ent->render.scale = 1; - VectorCopy (ent->state_baseline.origin, ent->render.origin); - VectorCopy (ent->state_baseline.angles, ent->render.angles); + //VectorCopy (ent->state_baseline.origin, ent->render.origin); + //VectorCopy (ent->state_baseline.angles, ent->render.angles); + Matrix4x4_CreateFromQuakeEntity(&ent->render.matrix, ent->state_baseline.origin[0], ent->state_baseline.origin[1], ent->state_baseline.origin[2], ent->state_baseline.angles[0], ent->state_baseline.angles[1], ent->state_baseline.angles[2], 1); + Matrix4x4_Invert_Simple(&ent->render.inversematrix, &ent->render.matrix); CL_BoundingBoxForEntity(&ent->render); // This is definitely cheating... @@ -1007,7 +1007,8 @@ void CL_ParseTempEntity (void) case TE_WIZSPIKE: // spike hitting wall MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); + CL_AllocDlight (NULL, pos, 50, 0.25f, 1.00f, 0.25f, 250, 0.2); CL_RunParticleEffect (pos, vec3_origin, 20, 30); S_StartSound (-1, 0, cl_sfx_wizhit, pos, 1, 1); break; @@ -1015,7 +1016,8 @@ void CL_ParseTempEntity (void) case TE_KNIGHTSPIKE: // spike hitting wall MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); + CL_AllocDlight (NULL, pos, 50, 1.0f, 0.60f, 0.20f, 250, 0.2); CL_RunParticleEffect (pos, vec3_origin, 226, 20); S_StartSound (-1, 0, cl_sfx_knighthit, pos, 1, 1); break; @@ -1023,7 +1025,7 @@ void CL_ParseTempEntity (void) case TE_SPIKE: // spike hitting wall MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); // LordHavoc: changed to spark shower CL_SparkShower(pos, vec3_origin, 15); if ( rand() % 5 ) @@ -1042,7 +1044,7 @@ void CL_ParseTempEntity (void) case TE_SPIKEQUAD: // quad spike hitting wall MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); // LordHavoc: changed to spark shower CL_SparkShower(pos, vec3_origin, 15); CL_AllocDlight (NULL, pos, 200, 0.1f, 0.1f, 1.0f, 1000, 0.2); @@ -1063,7 +1065,7 @@ void CL_ParseTempEntity (void) case TE_SUPERSPIKE: // super spike hitting wall MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); // LordHavoc: changed to dust shower CL_SparkShower(pos, vec3_origin, 30); if ( rand() % 5 ) @@ -1082,7 +1084,7 @@ void CL_ParseTempEntity (void) case TE_SUPERSPIKEQUAD: // quad super spike hitting wall MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); // LordHavoc: changed to dust shower CL_SparkShower(pos, vec3_origin, 30); CL_AllocDlight (NULL, pos, 200, 0.1f, 0.1f, 1.0f, 1000, 0.2); @@ -1103,6 +1105,7 @@ void CL_ParseTempEntity (void) case TE_BLOOD: // blood puff MSG_ReadVector(pos); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); dir[0] = MSG_ReadChar (); dir[1] = MSG_ReadChar (); dir[2] = MSG_ReadChar (); @@ -1112,21 +1115,22 @@ void CL_ParseTempEntity (void) case TE_BLOOD2: // blood puff MSG_ReadVector(pos); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); CL_BloodPuff(pos, vec3_origin, 10); break; case TE_SPARK: // spark shower MSG_ReadVector(pos); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); dir[0] = MSG_ReadChar (); dir[1] = MSG_ReadChar (); dir[2] = MSG_ReadChar (); count = MSG_ReadByte (); - Mod_FindNonSolidLocation(pos, cl.worldmodel); CL_SparkShower(pos, dir, count); break; case TE_PLASMABURN: MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); CL_AllocDlight (NULL, pos, 200, 1, 1, 1, 1000, 0.2); CL_PlasmaBurn(pos); break; @@ -1174,7 +1178,7 @@ void CL_ParseTempEntity (void) case TE_GUNSHOT: // bullet hitting wall MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); // LordHavoc: changed to dust shower CL_SparkShower(pos, vec3_origin, 15); break; @@ -1182,7 +1186,7 @@ void CL_ParseTempEntity (void) case TE_GUNSHOTQUAD: // quad bullet hitting wall MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); CL_SparkShower(pos, vec3_origin, 15); CL_AllocDlight (NULL, pos, 200, 0.1f, 0.1f, 1.0f, 1000, 0.2); break; @@ -1190,7 +1194,7 @@ void CL_ParseTempEntity (void) case TE_EXPLOSION: // rocket explosion MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 10); CL_ParticleExplosion (pos); // LordHavoc: boosted color from 1.0, 0.8, 0.4 to 1.25, 1.0, 0.5 CL_AllocDlight (NULL, pos, 350, 1.25f, 1.0f, 0.5f, 700, 0.5); @@ -1200,7 +1204,7 @@ void CL_ParseTempEntity (void) case TE_EXPLOSIONQUAD: // quad rocket explosion MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 10); CL_ParticleExplosion (pos); CL_AllocDlight (NULL, pos, 600, 0.5f, 0.4f, 1.0f, 1200, 0.5); S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1); @@ -1209,7 +1213,7 @@ void CL_ParseTempEntity (void) case TE_EXPLOSION3: // Nehahra movie colored lighting explosion MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 10); CL_ParticleExplosion (pos); CL_AllocDlight (NULL, pos, 350, MSG_ReadCoord(), MSG_ReadCoord(), MSG_ReadCoord(), 700, 0.5); S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1); @@ -1218,7 +1222,7 @@ void CL_ParseTempEntity (void) case TE_EXPLOSIONRGB: // colored lighting explosion MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 10); CL_ParticleExplosion (pos); color[0] = MSG_ReadByte() * (1.0 / 255.0); color[1] = MSG_ReadByte() * (1.0 / 255.0); @@ -1230,7 +1234,7 @@ void CL_ParseTempEntity (void) case TE_TAREXPLOSION: // tarbaby explosion MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 10); CL_BlobExplosion (pos); S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1); @@ -1240,13 +1244,13 @@ void CL_ParseTempEntity (void) case TE_SMALLFLASH: MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 10); CL_AllocDlight (NULL, pos, 200, 1, 1, 1, 1000, 0.2); break; case TE_CUSTOMFLASH: MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); radius = MSG_ReadByte() * 8; velspeed = (MSG_ReadByte() + 1) * (1.0 / 256.0); color[0] = MSG_ReadByte() * (1.0 / 255.0); @@ -1280,7 +1284,7 @@ void CL_ParseTempEntity (void) // lightning bolts if (!cl_model_bolt3) cl_model_bolt3 = Mod_ForName("progs/bolt3.mdl", true, false, false); - CL_ParseBeam (cl_model_bolt3, true); + CL_ParseBeam (cl_model_bolt3, false); break; // PGM 01/21/97 @@ -1315,7 +1319,7 @@ void CL_ParseTempEntity (void) case TE_EXPLOSION2: // color mapped explosion MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 10); colorStart = MSG_ReadByte (); colorLength = MSG_ReadByte (); CL_ParticleExplosion2 (pos, colorStart, colorLength); @@ -1336,13 +1340,13 @@ void CL_ParseTempEntity (void) MSG_ReadVector(pos); MSG_ReadVector(dir); count = MSG_ReadByte (); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 4); CL_Tei_Smoke(pos, dir, count); break; case TE_TEI_BIGEXPLOSION: MSG_ReadVector(pos); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 10); 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); @@ -1352,7 +1356,7 @@ void CL_ParseTempEntity (void) MSG_ReadVector(pos); MSG_ReadVector(dir); count = MSG_ReadByte (); - Mod_FindNonSolidLocation(pos, cl.worldmodel); + Mod_FindNonSolidLocation(pos, pos, cl.worldmodel, 5); CL_Tei_PlasmaHit(pos, dir, count); CL_AllocDlight (NULL, pos, 500, 0.3, 0.6, 1.0f, 2000, 9999); break; @@ -1578,9 +1582,6 @@ void CL_ParseServerMessage (void) if (i >= cl.maxclients) Host_Error ("CL_ParseServerMessage: svc_updatecolors >= cl.maxclients"); cl.scores[i].colors = MSG_ReadByte (); - // update our color cvar if our color changed - if (i == cl.playerentity - 1) - Cvar_SetValue ("_cl_color", cl.scores[i].colors); break; case svc_particle: