+++ /dev/null
-
-#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;
- }
-}
-
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;
}
}
-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;
}
}
-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)
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);
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
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;
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)
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)
{
}
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);
CL_ParseStatic (true);
break;
case svc_temp_entity:
- CL_ParseTEnt ();
+ CL_ParseTempEntity ();
break;
case svc_setpause:
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);
+}
+++ /dev/null
-/*
-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;
- }
- }
-}
//
void CL_Parse_Init(void);
void CL_ParseServerMessage(void);
-void CL_BitProfile_f(void);
//
// view
# 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
# 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
#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)
-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