shuffled cl_light and some of cl_tent into cl_main and remaining cl_tent code into...
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 19 Sep 2002 18:01:45 +0000 (18:01 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 19 Sep 2002 18:01:45 +0000 (18:01 +0000)
got rid of bitprofile console command because it only worked for old protocol (probably should add it back for new protocol though)

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@2392 d7cf8633-e32d-0410-b094-e92efae38249

cl_light.c [deleted file]
cl_main.c
cl_parse.c
cl_tent.c [deleted file]
client.h
darkplaces.dsp
makefile
makefile.mingw

diff --git a/cl_light.c b/cl_light.c
deleted file mode 100644 (file)
index 9c5d291..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-
-#include "quakedef.h"
-
-/*
-===============
-CL_AllocDlight
-
-===============
-*/
-void CL_AllocDlight (entity_render_t *ent, vec3_t org, float radius, float red, float green, float blue, float decay, float lifetime)
-{
-       int             i;
-       dlight_t        *dl;
-
-       /*
-// first look for an exact key match
-       if (ent)
-       {
-               dl = cl_dlights;
-               for (i = 0;i < MAX_DLIGHTS;i++, dl++)
-                       if (dl->ent == ent)
-                               goto dlightsetup;
-       }
-       */
-
-// then look for anything else
-       dl = cl_dlights;
-       for (i = 0;i < MAX_DLIGHTS;i++, dl++)
-               if (!dl->radius)
-                       goto dlightsetup;
-
-       // unable to find one
-       return;
-
-dlightsetup:
-       //Con_Printf("dlight %i : %f %f %f : %f %f %f\n", i, org[0], org[1], org[2], red * radius, green * radius, blue * radius);
-       memset (dl, 0, sizeof(*dl));
-       //dl->ent = ent;
-       VectorCopy(org, dl->origin);
-       dl->radius = radius;
-       dl->color[0] = red;
-       dl->color[1] = green;
-       dl->color[2] = blue;
-       dl->decay = decay;
-       if (lifetime)
-               dl->die = cl.time + lifetime;
-       else
-               dl->die = 0;
-}
-
-
-/*
-===============
-CL_DecayLights
-
-===============
-*/
-void CL_DecayLights (void)
-{
-       int                     i;
-       dlight_t        *dl;
-       float           time;
-
-       time = cl.time - cl.oldtime;
-
-       dl = cl_dlights;
-       for (i=0 ; i<MAX_DLIGHTS ; i++, dl++)
-       {
-               if (!dl->radius)
-                       continue;
-               if (dl->die < cl.time)
-               {
-                       dl->radius = 0;
-                       continue;
-               }
-
-               dl->radius -= time*dl->decay;
-               if (dl->radius < 0)
-                       dl->radius = 0;
-       }
-}
-
index 0e885f0..d64715f 100644 (file)
--- a/cl_main.c
+++ b/cl_main.c
@@ -361,6 +361,103 @@ static float CL_LerpPoint (void)
        return bound(0, f, 1);
 }
 
+void CL_ClearTempEntities (void)
+{
+       cl_num_temp_entities = 0;
+}
+
+entity_t *CL_NewTempEntity (void)
+{
+       entity_t *ent;
+
+       if (r_refdef.numentities >= r_refdef.maxentities)
+               return NULL;
+       if (cl_num_temp_entities >= cl_max_temp_entities)
+               return NULL;
+       ent = &cl_temp_entities[cl_num_temp_entities++];
+       memset (ent, 0, sizeof(*ent));
+       r_refdef.entities[r_refdef.numentities++] = &ent->render;
+
+       ent->render.colormap = -1; // no special coloring
+       ent->render.scale = 1;
+       ent->render.alpha = 1;
+       return ent;
+}
+
+void CL_AllocDlight (entity_render_t *ent, vec3_t org, float radius, float red, float green, float blue, float decay, float lifetime)
+{
+       int i;
+       dlight_t *dl;
+
+       /*
+// first look for an exact key match
+       if (ent)
+       {
+               dl = cl_dlights;
+               for (i = 0;i < MAX_DLIGHTS;i++, dl++)
+                       if (dl->ent == ent)
+                               goto dlightsetup;
+       }
+       */
+
+// then look for anything else
+       dl = cl_dlights;
+       for (i = 0;i < MAX_DLIGHTS;i++, dl++)
+               if (!dl->radius)
+                       goto dlightsetup;
+
+       // unable to find one
+       return;
+
+dlightsetup:
+       //Con_Printf("dlight %i : %f %f %f : %f %f %f\n", i, org[0], org[1], org[2], red * radius, green * radius, blue * radius);
+       memset (dl, 0, sizeof(*dl));
+       //dl->ent = ent;
+       VectorCopy(org, dl->origin);
+       dl->radius = radius;
+       dl->color[0] = red;
+       dl->color[1] = green;
+       dl->color[2] = blue;
+       dl->decay = decay;
+       if (lifetime)
+               dl->die = cl.time + lifetime;
+       else
+               dl->die = 0;
+}
+
+void CL_DecayLights (void)
+{
+       int i;
+       dlight_t *dl;
+       float time;
+
+       time = cl.time - cl.oldtime;
+
+       dl = cl_dlights;
+       for (i=0 ; i<MAX_DLIGHTS ; i++, dl++)
+       {
+               if (!dl->radius)
+                       continue;
+               if (dl->die < cl.time)
+               {
+                       dl->radius = 0;
+                       continue;
+               }
+
+               dl->radius -= time*dl->decay;
+               if (dl->radius < 0)
+                       dl->radius = 0;
+       }
+}
+
+void CL_RelinkWorld (void)
+{
+       if (cl_num_entities < 1)
+               cl_num_entities = 1;
+       cl_brushmodel_entities[cl_num_brushmodel_entities++] = &cl_entities[0].render;
+       CL_BoundingBoxForEntity(&cl_entities[0].render);
+}
+
 static void CL_RelinkStaticEntities(void)
 {
        int i;
@@ -655,40 +752,6 @@ static void CL_RelinkNetworkEntities()
        }
 }
 
-void CL_LerpPlayer(float frac)
-{
-       int i;
-       float d;
-
-       if (cl.entitydatabase.numframes && cl.viewentity == cl.playerentity)
-       {
-               cl.viewentorigin[0] = cl.viewentoriginold[0] + frac * (cl.viewentoriginnew[0] - cl.viewentoriginold[0]);
-               cl.viewentorigin[1] = cl.viewentoriginold[1] + frac * (cl.viewentoriginnew[1] - cl.viewentoriginold[1]);
-               cl.viewentorigin[2] = cl.viewentoriginold[2] + frac * (cl.viewentoriginnew[2] - cl.viewentoriginold[2]);
-       }
-       else
-               VectorCopy (cl_entities[cl.viewentity].render.origin, cl.viewentorigin);
-
-       cl.viewzoom = cl.viewzoomold + frac * (cl.viewzoomnew - cl.viewzoomold);
-
-       for (i = 0;i < 3;i++)
-               cl.velocity[i] = cl.mvelocity[1][i] + frac * (cl.mvelocity[0][i] - cl.mvelocity[1][i]);
-
-       if (cls.demoplayback)
-       {
-               // interpolate the angles
-               for (i = 0;i < 3;i++)
-               {
-                       d = cl.mviewangles[0][i] - cl.mviewangles[1][i];
-                       if (d > 180)
-                               d -= 360;
-                       else if (d < -180)
-                               d += 360;
-                       cl.viewangles[i] = cl.mviewangles[1][i] + frac * d;
-               }
-       }
-}
-
 void CL_Effect(vec3_t org, int modelindex, int startframe, int framecount, float framerate)
 {
        int i;
@@ -768,12 +831,106 @@ static void CL_RelinkEffects()
        }
 }
 
-void CL_RelinkWorld (void)
+void CL_RelinkBeams (void)
 {
-       if (cl_num_entities < 1)
-               cl_num_entities = 1;
-       cl_brushmodel_entities[cl_num_brushmodel_entities++] = &cl_entities[0].render;
-       CL_BoundingBoxForEntity(&cl_entities[0].render);
+       int i;
+       beam_t *b;
+       vec3_t dist, org;
+       float d;
+       entity_t *ent;
+       float yaw, pitch;
+       float forward;
+
+       for (i = 0, b = cl_beams;i < cl_max_beams;i++, b++)
+       {
+               if (!b->model || b->endtime < cl.time)
+                       continue;
+
+               // if coming from the player, update the start position
+               //if (b->entity == cl.viewentity)
+               //      VectorCopy (cl_entities[cl.viewentity].render.origin, b->start);
+               if (b->entity)
+               {
+                       VectorCopy (cl_entities[b->entity].render.origin, b->start);
+                       b->start[2] += 16;
+               }
+
+               // calculate pitch and yaw
+               VectorSubtract (b->end, b->start, dist);
+
+               if (dist[1] == 0 && dist[0] == 0)
+               {
+                       yaw = 0;
+                       if (dist[2] > 0)
+                               pitch = 90;
+                       else
+                               pitch = 270;
+               }
+               else
+               {
+                       yaw = (int) (atan2(dist[1], dist[0]) * 180 / M_PI);
+                       if (yaw < 0)
+                               yaw += 360;
+
+                       forward = sqrt (dist[0]*dist[0] + dist[1]*dist[1]);
+                       pitch = (int) (atan2(dist[2], forward) * 180 / M_PI);
+                       if (pitch < 0)
+                               pitch += 360;
+               }
+
+               // add new entities for the lightning
+               VectorCopy (b->start, org);
+               d = VectorNormalizeLength(dist);
+               while (d > 0)
+               {
+                       ent = CL_NewTempEntity ();
+                       if (!ent)
+                               return;
+                       VectorCopy (org, ent->render.origin);
+                       ent->render.model = b->model;
+                       ent->render.effects = EF_FULLBRIGHT;
+                       ent->render.angles[0] = pitch;
+                       ent->render.angles[1] = yaw;
+                       ent->render.angles[2] = rand()%360;
+                       CL_BoundingBoxForEntity(&ent->render);
+                       VectorMA(org, 30, dist, org);
+                       d -= 30;
+               }
+       }
+}
+
+void CL_LerpPlayer(float frac)
+{
+       int i;
+       float d;
+
+       if (cl.entitydatabase.numframes && cl.viewentity == cl.playerentity)
+       {
+               cl.viewentorigin[0] = cl.viewentoriginold[0] + frac * (cl.viewentoriginnew[0] - cl.viewentoriginold[0]);
+               cl.viewentorigin[1] = cl.viewentoriginold[1] + frac * (cl.viewentoriginnew[1] - cl.viewentoriginold[1]);
+               cl.viewentorigin[2] = cl.viewentoriginold[2] + frac * (cl.viewentoriginnew[2] - cl.viewentoriginold[2]);
+       }
+       else
+               VectorCopy (cl_entities[cl.viewentity].render.origin, cl.viewentorigin);
+
+       cl.viewzoom = cl.viewzoomold + frac * (cl.viewzoomnew - cl.viewzoomold);
+
+       for (i = 0;i < 3;i++)
+               cl.velocity[i] = cl.mvelocity[1][i] + frac * (cl.mvelocity[0][i] - cl.mvelocity[1][i]);
+
+       if (cls.demoplayback)
+       {
+               // interpolate the angles
+               for (i = 0;i < 3;i++)
+               {
+                       d = cl.mviewangles[0][i] - cl.mviewangles[1][i];
+                       if (d > 180)
+                               d -= 360;
+                       else if (d < -180)
+                               d += 360;
+                       cl.viewangles[i] = cl.mviewangles[1][i] + frac * d;
+               }
+       }
 }
 
 void CL_RelinkEntities (void)
@@ -1044,7 +1201,6 @@ void CL_Init (void)
        Cvar_RegisterVariable (&cl_itembobheight);
 
        Cmd_AddCommand ("entities", CL_PrintEntities_f);
-       Cmd_AddCommand ("bitprofile", CL_BitProfile_f);
        Cmd_AddCommand ("disconnect", CL_Disconnect_f);
        Cmd_AddCommand ("record", CL_Record_f);
        Cmd_AddCommand ("stop", CL_Stop_f);
index 9d74bae..06fa7d1 100644 (file)
@@ -96,14 +96,6 @@ char *svc_strings[128] =
 
 cvar_t demo_nehahra = {0, "demo_nehahra", "0"};
 
-void CL_Parse_Init(void)
-{
-       // LordHavoc: added demo_nehahra cvar
-       Cvar_RegisterVariable (&demo_nehahra);
-       if (gamemode == GAME_NEHAHRA)
-               Cvar_SetValue("demo_nehahra", 1);
-}
-
 qboolean Nehahrademcompatibility; // LordHavoc: to allow playback of the early Nehahra movie segments
 int dpprotocol; // LordHavoc: version of network protocol, or 0 if not DarkPlaces
 
@@ -555,10 +547,9 @@ If an entities model or origin changes from frame to frame, it must be
 relinked.  Other attributes can change without relinking.
 ==================
 */
-int bitprofile[32], bitprofilecount = 0;
 void CL_ParseUpdate (int bits)
 {
-       int i, num;
+       int num;
        entity_t *ent;
        entity_state_t new;
 
@@ -583,11 +574,6 @@ void CL_ParseUpdate (int bits)
 
        ent = cl_entities + num;
 
-       for (i = 0;i < 32;i++)
-               if (bits & (1 << i))
-                       bitprofile[i]++;
-       bitprofilecount++;
-
        // note: this inherits the 'active' state of the baseline chosen
        // (state_baseline is always active, state_current may not be active if
        // the entity was missing in the last frame)
@@ -683,55 +669,6 @@ void CL_ReadEntityFrame(void)
        VectorCopy(entityframe.eye, cl.viewentoriginnew);
 }
 
-char *bitprofilenames[32] =
-{
-       "U_MOREBITS",
-       "U_ORIGIN1",
-       "U_ORIGIN2",
-       "U_ORIGIN3",
-       "U_ANGLE2",
-       "U_STEP",
-       "U_FRAME",
-       "U_SIGNAL",
-       "U_ANGLE1",
-       "U_ANGLE3",
-       "U_MODEL",
-       "U_COLORMAP",
-       "U_SKIN",
-       "U_EFFECTS",
-       "U_LONGENTITY",
-       "U_EXTEND1",
-       "U_DELTA",
-       "U_ALPHA",
-       "U_SCALE",
-       "U_EFFECTS2",
-       "U_GLOWSIZE",
-       "U_GLOWCOLOR",
-       "obsolete U_COLORMOD",
-       "U_EXTEND2",
-       "U_GLOWTRAIL",
-       "U_VIEWMODEL",
-       "U_FRAME2",
-       "U_MODEL2",
-       "U_EXTERIORMODEL",
-       "U_UNUSED29",
-       "U_UNUSED30",
-       "U_EXTEND3",
-};
-
-void CL_BitProfile_f(void)
-{
-       int i;
-       Con_Printf("bitprofile: %i updates\n");
-       if (bitprofilecount)
-               for (i = 0;i < 32;i++)
-                       Con_Printf("%s: %i %3.2f%%\n", bitprofilenames[i], bitprofile[i], bitprofile[i] * 100.0 / bitprofilecount);
-       Con_Printf("\n");
-       for (i = 0;i < 32;i++)
-               bitprofile[i] = 0;
-       bitprofilecount = 0;
-}
-
 void CL_EntityUpdateSetup(void)
 {
 }
@@ -970,6 +907,414 @@ void CL_ParseEffect2 (void)
        CL_Effect(org, modelindex, startframe, framecount, framerate);
 }
 
+model_t *cl_model_bolt = NULL;
+model_t *cl_model_bolt2 = NULL;
+model_t *cl_model_bolt3 = NULL;
+model_t *cl_model_beam = NULL;
+
+sfx_t *cl_sfx_wizhit;
+sfx_t *cl_sfx_knighthit;
+sfx_t *cl_sfx_tink1;
+sfx_t *cl_sfx_ric1;
+sfx_t *cl_sfx_ric2;
+sfx_t *cl_sfx_ric3;
+sfx_t *cl_sfx_r_exp3;
+
+/*
+=================
+CL_ParseTEnt
+=================
+*/
+void CL_InitTEnts (void)
+{
+       cl_sfx_wizhit = S_PrecacheSound ("wizard/hit.wav", false);
+       cl_sfx_knighthit = S_PrecacheSound ("hknight/hit.wav", false);
+       cl_sfx_tink1 = S_PrecacheSound ("weapons/tink1.wav", false);
+       cl_sfx_ric1 = S_PrecacheSound ("weapons/ric1.wav", false);
+       cl_sfx_ric2 = S_PrecacheSound ("weapons/ric2.wav", false);
+       cl_sfx_ric3 = S_PrecacheSound ("weapons/ric3.wav", false);
+       cl_sfx_r_exp3 = S_PrecacheSound ("weapons/r_exp3.wav", false);
+}
+
+void CL_ParseBeam (model_t *m)
+{
+       int i, ent;
+       vec3_t start, end;
+       beam_t *b;
+
+       ent = MSG_ReadShort ();
+       MSG_ReadVector(start);
+       MSG_ReadVector(end);
+
+       // override any beam with the same entity
+       for (i = 0, b = cl_beams;i < cl_max_beams;i++, b++)
+       {
+               if (b->entity == ent)
+               {
+                       //b->entity = ent;
+                       b->model = m;
+                       b->endtime = cl.time + 0.2;
+                       VectorCopy (start, b->start);
+                       VectorCopy (end, b->end);
+                       return;
+               }
+       }
+
+       // find a free beam
+       for (i = 0, b = cl_beams;i < cl_max_beams;i++, b++)
+       {
+               if (!b->model || b->endtime < cl.time)
+               {
+                       b->entity = ent;
+                       b->model = m;
+                       b->endtime = cl.time + 0.2;
+                       VectorCopy (start, b->start);
+                       VectorCopy (end, b->end);
+                       return;
+               }
+       }
+       Con_Printf ("beam list overflow!\n");
+}
+
+void CL_ParseTempEntity (void)
+{
+       int type;
+       vec3_t pos;
+       vec3_t dir;
+       vec3_t pos2;
+       vec3_t color;
+       int rnd;
+       int colorStart, colorLength, count;
+       float velspeed, radius;
+       qbyte *tempcolor;
+
+       type = MSG_ReadByte ();
+       switch (type)
+       {
+       case TE_WIZSPIKE:
+               // spike hitting wall
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               CL_RunParticleEffect (pos, vec3_origin, 20, 30);
+               S_StartSound (-1, 0, cl_sfx_wizhit, pos, 1, 1);
+               break;
+
+       case TE_KNIGHTSPIKE:
+               // spike hitting wall
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               CL_RunParticleEffect (pos, vec3_origin, 226, 20);
+               S_StartSound (-1, 0, cl_sfx_knighthit, pos, 1, 1);
+               break;
+
+       case TE_SPIKE:
+               // spike hitting wall
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               // LordHavoc: changed to spark shower
+               CL_SparkShower(pos, vec3_origin, 15);
+               if ( rand() % 5 )
+                       S_StartSound (-1, 0, cl_sfx_tink1, pos, 1, 1);
+               else
+               {
+                       rnd = rand() & 3;
+                       if (rnd == 1)
+                               S_StartSound (-1, 0, cl_sfx_ric1, pos, 1, 1);
+                       else if (rnd == 2)
+                               S_StartSound (-1, 0, cl_sfx_ric2, pos, 1, 1);
+                       else
+                               S_StartSound (-1, 0, cl_sfx_ric3, pos, 1, 1);
+               }
+               break;
+       case TE_SPIKEQUAD:
+               // quad spike hitting wall
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               // 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);
+               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
+               if ( rand() % 5 )
+                       S_StartSound (-1, 0, cl_sfx_tink1, pos, 1, 1);
+               else
+               {
+                       rnd = rand() & 3;
+                       if (rnd == 1)
+                               S_StartSound (-1, 0, cl_sfx_ric1, pos, 1, 1);
+                       else if (rnd == 2)
+                               S_StartSound (-1, 0, cl_sfx_ric2, pos, 1, 1);
+                       else
+                               S_StartSound (-1, 0, cl_sfx_ric3, pos, 1, 1);
+               }
+               break;
+       case TE_SUPERSPIKE:
+               // super spike hitting wall
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               // LordHavoc: changed to dust shower
+               CL_SparkShower(pos, vec3_origin, 30);
+               if ( rand() % 5 )
+                       S_StartSound (-1, 0, cl_sfx_tink1, pos, 1, 1);
+               else
+               {
+                       rnd = rand() & 3;
+                       if (rnd == 1)
+                               S_StartSound (-1, 0, cl_sfx_ric1, pos, 1, 1);
+                       else if (rnd == 2)
+                               S_StartSound (-1, 0, cl_sfx_ric2, pos, 1, 1);
+                       else
+                               S_StartSound (-1, 0, cl_sfx_ric3, pos, 1, 1);
+               }
+               break;
+       case TE_SUPERSPIKEQUAD:
+               // quad super spike hitting wall
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               // 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);
+               if ( rand() % 5 )
+                       S_StartSound (-1, 0, cl_sfx_tink1, pos, 1, 1);
+               else
+               {
+                       rnd = rand() & 3;
+                       if (rnd == 1)
+                               S_StartSound (-1, 0, cl_sfx_ric1, pos, 1, 1);
+                       else if (rnd == 2)
+                               S_StartSound (-1, 0, cl_sfx_ric2, pos, 1, 1);
+                       else
+                               S_StartSound (-1, 0, cl_sfx_ric3, pos, 1, 1);
+               }
+               break;
+               // LordHavoc: added for improved blood splatters
+       case TE_BLOOD:
+               // blood puff
+               MSG_ReadVector(pos);
+               dir[0] = MSG_ReadChar ();
+               dir[1] = MSG_ReadChar ();
+               dir[2] = MSG_ReadChar ();
+               count = MSG_ReadByte ();
+               CL_BloodPuff(pos, dir, count);
+               break;
+       case TE_BLOOD2:
+               // blood puff
+               MSG_ReadVector(pos);
+               CL_BloodPuff(pos, vec3_origin, 10);
+               break;
+       case TE_SPARK:
+               // spark shower
+               MSG_ReadVector(pos);
+               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);
+               CL_AllocDlight (NULL, pos, 200, 1, 1, 1, 1000, 0.2);
+               CL_PlasmaBurn(pos);
+               break;
+               // LordHavoc: added for improved gore
+       case TE_BLOODSHOWER:
+               // vaporized body
+               MSG_ReadVector(pos); // mins
+               MSG_ReadVector(pos2); // maxs
+               velspeed = MSG_ReadCoord (); // speed
+               count = MSG_ReadShort (); // number of particles
+               CL_BloodShower(pos, pos2, velspeed, count);
+               break;
+       case TE_PARTICLECUBE:
+               // general purpose particle effect
+               MSG_ReadVector(pos); // mins
+               MSG_ReadVector(pos2); // maxs
+               MSG_ReadVector(dir); // dir
+               count = MSG_ReadShort (); // number of particles
+               colorStart = MSG_ReadByte (); // color
+               colorLength = MSG_ReadByte (); // gravity (1 or 0)
+               velspeed = MSG_ReadCoord (); // randomvel
+               CL_ParticleCube(pos, pos2, dir, count, colorStart, colorLength, velspeed);
+               break;
+
+       case TE_PARTICLERAIN:
+               // general purpose particle effect
+               MSG_ReadVector(pos); // mins
+               MSG_ReadVector(pos2); // maxs
+               MSG_ReadVector(dir); // dir
+               count = MSG_ReadShort (); // number of particles
+               colorStart = MSG_ReadByte (); // color
+               CL_ParticleRain(pos, pos2, dir, count, colorStart, 0);
+               break;
+
+       case TE_PARTICLESNOW:
+               // general purpose particle effect
+               MSG_ReadVector(pos); // mins
+               MSG_ReadVector(pos2); // maxs
+               MSG_ReadVector(dir); // dir
+               count = MSG_ReadShort (); // number of particles
+               colorStart = MSG_ReadByte (); // color
+               CL_ParticleRain(pos, pos2, dir, count, colorStart, 1);
+               break;
+
+       case TE_GUNSHOT:
+               // bullet hitting wall
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               // LordHavoc: changed to dust shower
+               CL_SparkShower(pos, vec3_origin, 15);
+               break;
+
+       case TE_GUNSHOTQUAD:
+               // quad bullet hitting wall
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               CL_SparkShower(pos, vec3_origin, 15);
+               CL_AllocDlight (NULL, pos, 200, 0.1f, 0.1f, 1.0f, 1000, 0.2);
+               break;
+
+       case TE_EXPLOSION:
+               // rocket explosion
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               CL_ParticleExplosion (pos, false);
+               // 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);
+               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
+               break;
+
+       case TE_EXPLOSIONQUAD:
+               // quad rocket explosion
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               CL_ParticleExplosion (pos, false);
+               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);
+               break;
+
+       case TE_EXPLOSION3:
+               // Nehahra movie colored lighting explosion
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               CL_ParticleExplosion (pos, false);
+               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);
+               break;
+
+       case TE_EXPLOSIONRGB:
+               // colored lighting explosion
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               CL_ParticleExplosion (pos, false);
+               color[0] = MSG_ReadByte() * (1.0 / 255.0);
+               color[1] = MSG_ReadByte() * (1.0 / 255.0);
+               color[2] = MSG_ReadByte() * (1.0 / 255.0);
+               CL_AllocDlight (NULL, pos, 350, color[0], color[1], color[2], 700, 0.5);
+               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
+               break;
+
+       case TE_TAREXPLOSION:
+               // tarbaby explosion
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               CL_BlobExplosion (pos);
+
+               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
+               CL_AllocDlight (NULL, pos, 600, 0.8f, 0.4f, 1.0f, 1200, 0.5);
+               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
+               break;
+
+       case TE_SMALLFLASH:
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               CL_AllocDlight (NULL, pos, 200, 1, 1, 1, 1000, 0.2);
+               break;
+
+       case TE_CUSTOMFLASH:
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               radius = MSG_ReadByte() * 8;
+               velspeed = (MSG_ReadByte() + 1) * (1.0 / 256.0);
+               color[0] = MSG_ReadByte() * (1.0 / 255.0);
+               color[1] = MSG_ReadByte() * (1.0 / 255.0);
+               color[2] = MSG_ReadByte() * (1.0 / 255.0);
+               CL_AllocDlight (NULL, pos, radius, color[0], color[1], color[2], radius / velspeed, velspeed);
+               break;
+
+       case TE_FLAMEJET:
+               MSG_ReadVector(pos);
+               MSG_ReadVector(dir);
+               count = MSG_ReadByte();
+               CL_Flames(pos, dir, count);
+               break;
+
+       case TE_LIGHTNING1:
+               // lightning bolts
+               if (!cl_model_bolt)
+                       cl_model_bolt = Mod_ForName("progs/bolt.mdl", true, false, false);
+               CL_ParseBeam (cl_model_bolt);
+               break;
+
+       case TE_LIGHTNING2:
+               // lightning bolts
+               if (!cl_model_bolt2)
+                       cl_model_bolt2 = Mod_ForName("progs/bolt2.mdl", true, false, false);
+               CL_ParseBeam (cl_model_bolt2);
+               break;
+
+       case TE_LIGHTNING3:
+               // lightning bolts
+               if (!cl_model_bolt3)
+                       cl_model_bolt3 = Mod_ForName("progs/bolt3.mdl", true, false, false);
+               CL_ParseBeam (cl_model_bolt3);
+               break;
+
+// PGM 01/21/97
+       case TE_BEAM:
+               // grappling hook beam
+               if (!cl_model_beam)
+                       cl_model_beam = Mod_ForName("progs/beam.mdl", true, false, false);
+               CL_ParseBeam (cl_model_beam);
+               break;
+// PGM 01/21/97
+
+// LordHavoc: for compatibility with the Nehahra movie...
+       case TE_LIGHTNING4NEH:
+               CL_ParseBeam (Mod_ForName(MSG_ReadString(), true, false, false));
+               break;
+
+       case TE_LAVASPLASH:
+               pos[0] = MSG_ReadCoord ();
+               pos[1] = MSG_ReadCoord ();
+               pos[2] = MSG_ReadCoord ();
+               CL_LavaSplash (pos);
+               break;
+
+       case TE_TELEPORT:
+               pos[0] = MSG_ReadCoord ();
+               pos[1] = MSG_ReadCoord ();
+               pos[2] = MSG_ReadCoord ();
+               CL_AllocDlight (NULL, pos, 1000, 1.25f, 1.25f, 1.25f, 3000, 99.0f);
+//             CL_TeleportSplash (pos);
+               break;
+
+       case TE_EXPLOSION2:
+               // color mapped explosion
+               MSG_ReadVector(pos);
+               Mod_FindNonSolidLocation(pos, cl.worldmodel);
+               colorStart = MSG_ReadByte ();
+               colorLength = MSG_ReadByte ();
+               CL_ParticleExplosion2 (pos, colorStart, colorLength);
+               tempcolor = (qbyte *)&d_8to24table[(rand()%colorLength) + colorStart];
+               CL_AllocDlight (NULL, pos, 350, tempcolor[0] * (1.0f / 255.0f), tempcolor[1] * (1.0f / 255.0f), tempcolor[2] * (1.0f / 255.0f), 700, 0.5);
+               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
+               break;
+
+       default:
+               Host_Error ("CL_ParseTempEntity: bad type %d", type);
+       }
+}
 
 #define SHOWNET(x) if(cl_shownet.integer==2)Con_Printf ("%3i:%s\n", msg_readcount-1, x);
 
@@ -1220,7 +1565,7 @@ void CL_ParseServerMessage (void)
                        CL_ParseStatic (true);
                        break;
                case svc_temp_entity:
-                       CL_ParseTEnt ();
+                       CL_ParseTempEntity ();
                        break;
 
                case svc_setpause:
@@ -1326,3 +1671,10 @@ void CL_ParseServerMessage (void)
                CL_EntityUpdateEnd();
 }
 
+void CL_Parse_Init(void)
+{
+       // LordHavoc: added demo_nehahra cvar
+       Cvar_RegisterVariable (&demo_nehahra);
+       if (gamemode == GAME_NEHAHRA)
+               Cvar_SetValue("demo_nehahra", 1);
+}
diff --git a/cl_tent.c b/cl_tent.c
deleted file mode 100644 (file)
index a3e1ed9..0000000
--- a/cl_tent.c
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
-Copyright (C) 1996-1997 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-
-*/
-// cl_tent.c -- client side temporary entities
-
-#include "quakedef.h"
-
-model_t *cl_model_bolt = NULL;
-model_t *cl_model_bolt2 = NULL;
-model_t *cl_model_bolt3 = NULL;
-model_t *cl_model_beam = NULL;
-
-sfx_t *cl_sfx_wizhit;
-sfx_t *cl_sfx_knighthit;
-sfx_t *cl_sfx_tink1;
-sfx_t *cl_sfx_ric1;
-sfx_t *cl_sfx_ric2;
-sfx_t *cl_sfx_ric3;
-sfx_t *cl_sfx_r_exp3;
-
-/*
-=================
-CL_ParseTEnt
-=================
-*/
-void CL_InitTEnts (void)
-{
-       cl_sfx_wizhit = S_PrecacheSound ("wizard/hit.wav", false);
-       cl_sfx_knighthit = S_PrecacheSound ("hknight/hit.wav", false);
-       cl_sfx_tink1 = S_PrecacheSound ("weapons/tink1.wav", false);
-       cl_sfx_ric1 = S_PrecacheSound ("weapons/ric1.wav", false);
-       cl_sfx_ric2 = S_PrecacheSound ("weapons/ric2.wav", false);
-       cl_sfx_ric3 = S_PrecacheSound ("weapons/ric3.wav", false);
-       cl_sfx_r_exp3 = S_PrecacheSound ("weapons/r_exp3.wav", false);
-}
-
-/*
-=================
-CL_ParseBeam
-=================
-*/
-void CL_ParseBeam (model_t *m)
-{
-       int i, ent;
-       vec3_t start, end;
-       beam_t *b;
-
-       ent = MSG_ReadShort ();
-       MSG_ReadVector(start);
-       MSG_ReadVector(end);
-
-       // override any beam with the same entity
-       for (i = 0, b = cl_beams;i < cl_max_beams;i++, b++)
-       {
-               if (b->entity == ent)
-               {
-                       //b->entity = ent;
-                       b->model = m;
-                       b->endtime = cl.time + 0.2;
-                       VectorCopy (start, b->start);
-                       VectorCopy (end, b->end);
-                       return;
-               }
-       }
-
-       // find a free beam
-       for (i = 0, b = cl_beams;i < cl_max_beams;i++, b++)
-       {
-               if (!b->model || b->endtime < cl.time)
-               {
-                       b->entity = ent;
-                       b->model = m;
-                       b->endtime = cl.time + 0.2;
-                       VectorCopy (start, b->start);
-                       VectorCopy (end, b->end);
-                       return;
-               }
-       }
-       Con_Printf ("beam list overflow!\n");
-}
-
-
-/*
-=================
-CL_ParseTEnt
-=================
-*/
-void CL_ParseTEnt (void)
-{
-       int type;
-       vec3_t pos;
-       vec3_t dir;
-       vec3_t pos2;
-       vec3_t color;
-       int rnd;
-       int colorStart, colorLength, count;
-       float velspeed, radius;
-       qbyte *tempcolor;
-
-       type = MSG_ReadByte ();
-       switch (type)
-       {
-       case TE_WIZSPIKE:
-               // spike hitting wall
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               CL_RunParticleEffect (pos, vec3_origin, 20, 30);
-               S_StartSound (-1, 0, cl_sfx_wizhit, pos, 1, 1);
-               break;
-
-       case TE_KNIGHTSPIKE:
-               // spike hitting wall
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               CL_RunParticleEffect (pos, vec3_origin, 226, 20);
-               S_StartSound (-1, 0, cl_sfx_knighthit, pos, 1, 1);
-               break;
-
-       case TE_SPIKE:
-               // spike hitting wall
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               // LordHavoc: changed to spark shower
-               CL_SparkShower(pos, vec3_origin, 15);
-               if ( rand() % 5 )
-                       S_StartSound (-1, 0, cl_sfx_tink1, pos, 1, 1);
-               else
-               {
-                       rnd = rand() & 3;
-                       if (rnd == 1)
-                               S_StartSound (-1, 0, cl_sfx_ric1, pos, 1, 1);
-                       else if (rnd == 2)
-                               S_StartSound (-1, 0, cl_sfx_ric2, pos, 1, 1);
-                       else
-                               S_StartSound (-1, 0, cl_sfx_ric3, pos, 1, 1);
-               }
-               break;
-       case TE_SPIKEQUAD:
-               // quad spike hitting wall
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               // 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);
-               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
-               if ( rand() % 5 )
-                       S_StartSound (-1, 0, cl_sfx_tink1, pos, 1, 1);
-               else
-               {
-                       rnd = rand() & 3;
-                       if (rnd == 1)
-                               S_StartSound (-1, 0, cl_sfx_ric1, pos, 1, 1);
-                       else if (rnd == 2)
-                               S_StartSound (-1, 0, cl_sfx_ric2, pos, 1, 1);
-                       else
-                               S_StartSound (-1, 0, cl_sfx_ric3, pos, 1, 1);
-               }
-               break;
-       case TE_SUPERSPIKE:
-               // super spike hitting wall
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               // LordHavoc: changed to dust shower
-               CL_SparkShower(pos, vec3_origin, 30);
-               if ( rand() % 5 )
-                       S_StartSound (-1, 0, cl_sfx_tink1, pos, 1, 1);
-               else
-               {
-                       rnd = rand() & 3;
-                       if (rnd == 1)
-                               S_StartSound (-1, 0, cl_sfx_ric1, pos, 1, 1);
-                       else if (rnd == 2)
-                               S_StartSound (-1, 0, cl_sfx_ric2, pos, 1, 1);
-                       else
-                               S_StartSound (-1, 0, cl_sfx_ric3, pos, 1, 1);
-               }
-               break;
-       case TE_SUPERSPIKEQUAD:
-               // quad super spike hitting wall
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               // 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);
-               if ( rand() % 5 )
-                       S_StartSound (-1, 0, cl_sfx_tink1, pos, 1, 1);
-               else
-               {
-                       rnd = rand() & 3;
-                       if (rnd == 1)
-                               S_StartSound (-1, 0, cl_sfx_ric1, pos, 1, 1);
-                       else if (rnd == 2)
-                               S_StartSound (-1, 0, cl_sfx_ric2, pos, 1, 1);
-                       else
-                               S_StartSound (-1, 0, cl_sfx_ric3, pos, 1, 1);
-               }
-               break;
-               // LordHavoc: added for improved blood splatters
-       case TE_BLOOD:
-               // blood puff
-               MSG_ReadVector(pos);
-               dir[0] = MSG_ReadChar ();
-               dir[1] = MSG_ReadChar ();
-               dir[2] = MSG_ReadChar ();
-               count = MSG_ReadByte ();
-               CL_BloodPuff(pos, dir, count);
-               break;
-       case TE_BLOOD2:
-               // blood puff
-               MSG_ReadVector(pos);
-               CL_BloodPuff(pos, vec3_origin, 10);
-               break;
-       case TE_SPARK:
-               // spark shower
-               MSG_ReadVector(pos);
-               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);
-               CL_AllocDlight (NULL, pos, 200, 1, 1, 1, 1000, 0.2);
-               CL_PlasmaBurn(pos);
-               break;
-               // LordHavoc: added for improved gore
-       case TE_BLOODSHOWER:
-               // vaporized body
-               MSG_ReadVector(pos); // mins
-               MSG_ReadVector(pos2); // maxs
-               velspeed = MSG_ReadCoord (); // speed
-               count = MSG_ReadShort (); // number of particles
-               CL_BloodShower(pos, pos2, velspeed, count);
-               break;
-       case TE_PARTICLECUBE:
-               // general purpose particle effect
-               MSG_ReadVector(pos); // mins
-               MSG_ReadVector(pos2); // maxs
-               MSG_ReadVector(dir); // dir
-               count = MSG_ReadShort (); // number of particles
-               colorStart = MSG_ReadByte (); // color
-               colorLength = MSG_ReadByte (); // gravity (1 or 0)
-               velspeed = MSG_ReadCoord (); // randomvel
-               CL_ParticleCube(pos, pos2, dir, count, colorStart, colorLength, velspeed);
-               break;
-
-       case TE_PARTICLERAIN:
-               // general purpose particle effect
-               MSG_ReadVector(pos); // mins
-               MSG_ReadVector(pos2); // maxs
-               MSG_ReadVector(dir); // dir
-               count = MSG_ReadShort (); // number of particles
-               colorStart = MSG_ReadByte (); // color
-               CL_ParticleRain(pos, pos2, dir, count, colorStart, 0);
-               break;
-
-       case TE_PARTICLESNOW:
-               // general purpose particle effect
-               MSG_ReadVector(pos); // mins
-               MSG_ReadVector(pos2); // maxs
-               MSG_ReadVector(dir); // dir
-               count = MSG_ReadShort (); // number of particles
-               colorStart = MSG_ReadByte (); // color
-               CL_ParticleRain(pos, pos2, dir, count, colorStart, 1);
-               break;
-
-       case TE_GUNSHOT:
-               // bullet hitting wall
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               // LordHavoc: changed to dust shower
-               CL_SparkShower(pos, vec3_origin, 15);
-               break;
-
-       case TE_GUNSHOTQUAD:
-               // quad bullet hitting wall
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               CL_SparkShower(pos, vec3_origin, 15);
-               CL_AllocDlight (NULL, pos, 200, 0.1f, 0.1f, 1.0f, 1000, 0.2);
-               break;
-
-       case TE_EXPLOSION:
-               // rocket explosion
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               CL_ParticleExplosion (pos, false);
-               // 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);
-               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
-               break;
-
-       case TE_EXPLOSIONQUAD:
-               // quad rocket explosion
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               CL_ParticleExplosion (pos, false);
-               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);
-               break;
-
-       case TE_EXPLOSION3:
-               // Nehahra movie colored lighting explosion
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               CL_ParticleExplosion (pos, false);
-               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);
-               break;
-
-       case TE_EXPLOSIONRGB:
-               // colored lighting explosion
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               CL_ParticleExplosion (pos, false);
-               color[0] = MSG_ReadByte() * (1.0 / 255.0);
-               color[1] = MSG_ReadByte() * (1.0 / 255.0);
-               color[2] = MSG_ReadByte() * (1.0 / 255.0);
-               CL_AllocDlight (NULL, pos, 350, color[0], color[1], color[2], 700, 0.5);
-               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
-               break;
-
-       case TE_TAREXPLOSION:
-               // tarbaby explosion
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               CL_BlobExplosion (pos);
-
-               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
-               CL_AllocDlight (NULL, pos, 600, 0.8f, 0.4f, 1.0f, 1200, 0.5);
-               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
-               break;
-
-       case TE_SMALLFLASH:
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               CL_AllocDlight (NULL, pos, 200, 1, 1, 1, 1000, 0.2);
-               break;
-
-       case TE_CUSTOMFLASH:
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               radius = MSG_ReadByte() * 8;
-               velspeed = (MSG_ReadByte() + 1) * (1.0 / 256.0);
-               color[0] = MSG_ReadByte() * (1.0 / 255.0);
-               color[1] = MSG_ReadByte() * (1.0 / 255.0);
-               color[2] = MSG_ReadByte() * (1.0 / 255.0);
-               CL_AllocDlight (NULL, pos, radius, color[0], color[1], color[2], radius / velspeed, velspeed);
-               break;
-
-       case TE_FLAMEJET:
-               MSG_ReadVector(pos);
-               MSG_ReadVector(dir);
-               count = MSG_ReadByte();
-               CL_Flames(pos, dir, count);
-               break;
-
-       case TE_LIGHTNING1:
-               // lightning bolts
-               if (!cl_model_bolt)
-                       cl_model_bolt = Mod_ForName("progs/bolt.mdl", true, false, false);
-               CL_ParseBeam (cl_model_bolt);
-               break;
-
-       case TE_LIGHTNING2:
-               // lightning bolts
-               if (!cl_model_bolt2)
-                       cl_model_bolt2 = Mod_ForName("progs/bolt2.mdl", true, false, false);
-               CL_ParseBeam (cl_model_bolt2);
-               break;
-
-       case TE_LIGHTNING3:
-               // lightning bolts
-               if (!cl_model_bolt3)
-                       cl_model_bolt3 = Mod_ForName("progs/bolt3.mdl", true, false, false);
-               CL_ParseBeam (cl_model_bolt3);
-               break;
-
-// PGM 01/21/97
-       case TE_BEAM:
-               // grappling hook beam
-               if (!cl_model_beam)
-                       cl_model_beam = Mod_ForName("progs/beam.mdl", true, false, false);
-               CL_ParseBeam (cl_model_beam);
-               break;
-// PGM 01/21/97
-
-// LordHavoc: for compatibility with the Nehahra movie...
-       case TE_LIGHTNING4NEH:
-               CL_ParseBeam (Mod_ForName(MSG_ReadString(), true, false, false));
-               break;
-
-       case TE_LAVASPLASH:
-               pos[0] = MSG_ReadCoord ();
-               pos[1] = MSG_ReadCoord ();
-               pos[2] = MSG_ReadCoord ();
-               CL_LavaSplash (pos);
-               break;
-
-       case TE_TELEPORT:
-               pos[0] = MSG_ReadCoord ();
-               pos[1] = MSG_ReadCoord ();
-               pos[2] = MSG_ReadCoord ();
-               CL_AllocDlight (NULL, pos, 1000, 1.25f, 1.25f, 1.25f, 3000, 99.0f);
-//             CL_TeleportSplash (pos);
-               break;
-
-       case TE_EXPLOSION2:
-               // color mapped explosion
-               MSG_ReadVector(pos);
-               Mod_FindNonSolidLocation(pos, cl.worldmodel);
-               colorStart = MSG_ReadByte ();
-               colorLength = MSG_ReadByte ();
-               CL_ParticleExplosion2 (pos, colorStart, colorLength);
-               tempcolor = (qbyte *)&d_8to24table[(rand()%colorLength) + colorStart];
-               CL_AllocDlight (NULL, pos, 350, tempcolor[0] * (1.0f / 255.0f), tempcolor[1] * (1.0f / 255.0f), tempcolor[2] * (1.0f / 255.0f), 700, 0.5);
-               S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1);
-               break;
-
-       default:
-               Host_Error ("CL_ParseTEnt: bad type %d", type);
-       }
-}
-
-
-void CL_ClearTempEntities (void)
-{
-       cl_num_temp_entities = 0;
-}
-
-/*
-=================
-CL_NewTempEntity
-=================
-*/
-entity_t *CL_NewTempEntity (void)
-{
-       entity_t *ent;
-
-       if (r_refdef.numentities >= r_refdef.maxentities)
-               return NULL;
-       if (cl_num_temp_entities >= cl_max_temp_entities)
-               return NULL;
-       ent = &cl_temp_entities[cl_num_temp_entities++];
-       memset (ent, 0, sizeof(*ent));
-       r_refdef.entities[r_refdef.numentities++] = &ent->render;
-
-       ent->render.colormap = -1; // no special coloring
-       ent->render.scale = 1;
-       ent->render.alpha = 1;
-       return ent;
-}
-
-void CL_RelinkBeams (void)
-{
-       int i;
-       beam_t *b;
-       vec3_t dist, org;
-       float d;
-       entity_t *ent;
-       float yaw, pitch;
-       float forward;
-
-       for (i = 0, b = cl_beams;i < cl_max_beams;i++, b++)
-       {
-               if (!b->model || b->endtime < cl.time)
-                       continue;
-
-               // if coming from the player, update the start position
-               //if (b->entity == cl.viewentity)
-               //      VectorCopy (cl_entities[cl.viewentity].render.origin, b->start);
-               if (b->entity)
-               {
-                       VectorCopy (cl_entities[b->entity].render.origin, b->start);
-                       b->start[2] += 16;
-               }
-
-               // calculate pitch and yaw
-               VectorSubtract (b->end, b->start, dist);
-
-               if (dist[1] == 0 && dist[0] == 0)
-               {
-                       yaw = 0;
-                       if (dist[2] > 0)
-                               pitch = 90;
-                       else
-                               pitch = 270;
-               }
-               else
-               {
-                       yaw = (int) (atan2(dist[1], dist[0]) * 180 / M_PI);
-                       if (yaw < 0)
-                               yaw += 360;
-
-                       forward = sqrt (dist[0]*dist[0] + dist[1]*dist[1]);
-                       pitch = (int) (atan2(dist[2], forward) * 180 / M_PI);
-                       if (pitch < 0)
-                               pitch += 360;
-               }
-
-               // add new entities for the lightning
-               VectorCopy (b->start, org);
-               d = VectorNormalizeLength(dist);
-               while (d > 0)
-               {
-                       ent = CL_NewTempEntity ();
-                       if (!ent)
-                               return;
-                       VectorCopy (org, ent->render.origin);
-                       ent->render.model = b->model;
-                       ent->render.effects = EF_FULLBRIGHT;
-                       ent->render.angles[0] = pitch;
-                       ent->render.angles[1] = yaw;
-                       ent->render.angles[2] = rand()%360;
-                       CL_BoundingBoxForEntity(&ent->render);
-                       VectorMA(org, 30, dist, org);
-                       d -= 30;
-               }
-       }
-}
index ce09e5d..3db2836 100644 (file)
--- a/client.h
+++ b/client.h
@@ -575,7 +575,6 @@ void CL_TimeDemo_f (void);
 //
 void CL_Parse_Init(void);
 void CL_ParseServerMessage(void);
-void CL_BitProfile_f(void);
 
 //
 // view
index 6423607..33cd8bf 100644 (file)
@@ -124,10 +124,6 @@ SOURCE=.\cl_input.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\cl_light.c
-# End Source File
-# Begin Source File
-
 SOURCE=.\cl_main.c
 # End Source File
 # Begin Source File
@@ -144,10 +140,6 @@ SOURCE=.\cl_screen.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\cl_tent.c
-# End Source File
-# Begin Source File
-
 SOURCE=.\cl_video.c
 # End Source File
 # Begin Source File
index 2489fe8..49c7edf 100644 (file)
--- a/makefile
+++ b/makefile
@@ -22,7 +22,7 @@ SOUNDLIB=
 #if you want no CD audio
 CD=cd_null.o
 
-CLIENTOBJECTS= cgame.o cgamevm.o chase.o cl_collision.o cl_demo.o cl_input.o cl_light.o cl_main.o cl_parse.o cl_particles.o cl_screen.o cl_tent.o cl_video.o console.o dpvsimpledecode.o fractalnoise.o gl_backend.o gl_draw.o gl_models.o gl_rmain.o gl_rsurf.o gl_textures.o keys.o menu.o meshqueue.o r_crosshairs.o r_explosion.o r_explosion.o r_lerpanim.o r_light.o r_modules.o r_sky.o r_sprites.o sbar.o ui.o vid_shared.o view.o wavefile.o
+CLIENTOBJECTS= cgame.o cgamevm.o chase.o cl_collision.o cl_demo.o cl_input.o cl_main.o cl_parse.o cl_particles.o cl_screen.o cl_video.o console.o dpvsimpledecode.o fractalnoise.o gl_backend.o gl_draw.o gl_models.o gl_rmain.o gl_rsurf.o gl_textures.o keys.o menu.o meshqueue.o r_crosshairs.o r_explosion.o r_explosion.o r_lerpanim.o r_light.o r_modules.o r_sky.o r_sprites.o sbar.o ui.o vid_shared.o view.o wavefile.o
 SERVEROBJECTS= pr_cmds.o pr_edict.o pr_exec.o sv_light.o sv_main.o sv_move.o sv_phys.o sv_user.o
 SHAREDOBJECTS= builddate.o cmd.o collision.o common.o crc.o cvar.o filematch.o host.o host_cmd.o image.o mathlib.o matrixlib.o model_alias.o model_brush.o model_shared.o model_sprite.o net_bsd.o net_dgrm.o net_loop.o net_main.o net_udp.o palette.o portals.o protocol.o quakeio.o sys_linux.o sys_shared.o transform.o world.o wad.o zone.o $(NETOBJECTS) $(SERVEROBJECTS)
 
index 5e01946..14163af 100644 (file)
@@ -1,5 +1,5 @@
 
-OBJECTS= builddate.o chase.o cl_demo.o cl_input.o cl_main.o cl_parse.o cl_tent.o cmd.o common.o console.o crc.o cvar.o fractalnoise.o gl_draw.o r_sky.o gl_rmain.o gl_rsurf.o host.o host_cmd.o image.o keys.o mathlib.o menu.o model_alias.o model_brush.o model_shared.o model_sprite.o net_dgrm.o net_loop.o net_main.o pr_cmds.o pr_edict.o pr_exec.o r_light.o r_explosion.o sbar.o snd_dma.o snd_mem.o snd_mix.o sv_main.o sv_move.o sv_phys.o sv_user.o sv_light.o transform.o view.o wad.o world.o zone.o vid_shared.o palette.o r_crosshairs.o gl_textures.o gl_models.o r_sprites.o r_modules.o r_explosion.o r_lerpanim.o protocol.o quakeio.o ui.o portals.o sys_shared.o cl_light.o gl_backend.o cl_particles.o cl_screen.o cgamevm.o cgame.o filematch.o collision.o cl_collision.o matrixlib.o cl_video.o dpvsimpledecode.o wavefile.o meshqueue.o
+OBJECTS= builddate.o chase.o cl_demo.o cl_input.o cl_main.o cl_parse.o cmd.o common.o console.o crc.o cvar.o fractalnoise.o gl_draw.o r_sky.o gl_rmain.o gl_rsurf.o host.o host_cmd.o image.o keys.o mathlib.o menu.o model_alias.o model_brush.o model_shared.o model_sprite.o net_dgrm.o net_loop.o net_main.o pr_cmds.o pr_edict.o pr_exec.o r_light.o r_explosion.o sbar.o snd_dma.o snd_mem.o snd_mix.o sv_main.o sv_move.o sv_phys.o sv_user.o sv_light.o transform.o view.o wad.o world.o zone.o vid_shared.o palette.o r_crosshairs.o gl_textures.o gl_models.o r_sprites.o r_modules.o r_explosion.o r_lerpanim.o protocol.o quakeio.o ui.o portals.o sys_shared.o gl_backend.o cl_particles.o cl_screen.o cgamevm.o cgame.o filematch.o collision.o cl_collision.o matrixlib.o cl_video.o dpvsimpledecode.o wavefile.o meshqueue.o
 
 #K6/athlon optimizations
 #CPUOPTIMIZATIONS=-march=k6