// cl_main.c -- client main loop
#include "quakedef.h"
+#include "cl_collision.h"
// we need to declare some mouse variables here, because the menu system
// references them even when on a unix system.
VectorCopy (ent->state_current.origin, oldorg); // skip trails
VectorCopy (ent->state_current.origin, neworg);
VectorCopy (ent->state_current.angles, ent->render.angles);
-
- /*
- // monster interpolation
- ent->persistent.steplerptime = 0;
- VectorCopy(ent->state_current.origin, ent->persistent.stepoldorigin);
- VectorCopy(ent->state_current.angles, ent->persistent.stepoldangles);
- VectorCopy(ent->state_current.origin, ent->persistent.steporigin);
- VectorCopy(ent->state_current.angles, ent->persistent.stepangles);
- */
}
- /*
- else if ((ent->state_current.flags & ent->state_previous.flags) & ENTFLAG_STEP)
- {
- if (ent->state_current.origin[0] != ent->persistent.steporigin[0]
- || ent->state_current.origin[1] != ent->persistent.steporigin[1]
- || ent->state_current.origin[2] != ent->persistent.steporigin[2]
- || ent->state_current.angles[0] != ent->persistent.stepangles[0]
- || ent->state_current.angles[1] != ent->persistent.stepangles[1]
- || ent->state_current.angles[2] != ent->persistent.stepangles[2])
- {
- // update lerp positions
- ent->clientpersistent.steplerptime = sv.time;
- VectorCopy(ent->steporigin, ent->stepoldorigin);
- VectorCopy(ent->stepangles, ent->stepoldangles);
- VectorCopy(ent->v.origin, ent->steporigin);
- VectorCopy(ent->v.angles, ent->stepangles);
- }
- lerp = (cl.time - ent->persistent.steplerptime) * 10.0;
- if (lerp < 1)
- {
- // origin
- VectorSubtract(ent->persistent.steporigin, ent->persistent.stepoldorigin, delta);
- VectorMA(ent->persistent.stepoldorigin, lerp, delta, neworg);
-
- // angles
- VectorSubtract(ent->persistent.stepangles, ent->persistent.stepoldangles, delta);
- // choose shortest rotate (to avoid 'spin around' situations)
- if (delta[0] < -180) delta[0] += 360;else if (delta[0] >= 180) delta[0] -= 360;
- if (delta[1] < -180) delta[1] += 360;else if (delta[1] >= 180) delta[1] -= 360;
- if (delta[2] < -180) delta[2] += 360;else if (delta[2] >= 180) delta[2] -= 360;
- VectorMA(ent->stepoldangles, lerp, delta, ent->render.angles);
- }
- else
- {
- VectorCopy(ent->persistent.steporigin, neworg);
- VectorCopy(ent->persistent.stepangles, ent->render.angles);
- }
- }
- */
else
{
- /*
- // monster interpolation
- ent->persistent.steplerptime = 0;
- VectorCopy(ent->state_current.origin, ent->persistent.stepoldorigin);
- VectorCopy(ent->state_current.angles, ent->persistent.stepoldangles);
- VectorCopy(ent->state_current.origin, ent->persistent.steporigin);
- VectorCopy(ent->state_current.angles, ent->persistent.stepangles);
- */
-
// if the delta is large, assume a teleport and don't lerp
VectorSubtract(ent->state_current.origin, ent->state_previous.origin, delta);
// LordHavoc: increased tolerance from 100 to 200, and now to 1000
if (effects & EF_BRIGHTFIELD)
CL_EntityParticles (ent);
if (effects & EF_MUZZLEFLASH)
- {
- vec3_t v, v2;
-
- AngleVectors (ent->render.angles, v, NULL, NULL);
-
- v2[0] = v[0] * 18 + neworg[0];
- v2[1] = v[1] * 18 + neworg[1];
- v2[2] = v[2] * 18 + neworg[2] + 16;
- TraceLine(neworg, v2, v, NULL, 0, true);
-
- CL_AllocDlight (NULL, v, 100, 1, 1, 1, 0, 0);
- }
+ ent->persistent.muzzleflash = 100.0f;
if (effects & EF_DIMLIGHT)
{
dlightcolor[0] += 200.0f;
{
vec3_t mins, maxs;
int temp;
- /*
- if (ent->render.angles[0] || ent->render.angles[2])
- {
- VectorMA(neworg, 0.25f, ent->render.model->rotatedmins, mins);
- VectorMA(neworg, 0.25f, ent->render.model->rotatedmaxs, maxs);
- }
- else if (ent->render.angles[1])
- {
- VectorMA(neworg, 0.25f, ent->render.model->yawmins, mins);
- VectorMA(neworg, 0.25f, ent->render.model->yawmaxs, maxs);
- }
- else
- {
- VectorMA(neworg, 0.25f, ent->render.model->normalmins, mins);
- VectorMA(neworg, 0.25f, ent->render.model->normalmaxs, maxs);
- }
- */
mins[0] = neworg[0] - 16.0f;
mins[1] = neworg[1] - 16.0f;
mins[2] = neworg[2] - 16.0f;
{
vec3_t mins, maxs;
int temp;
- /*
- if (ent->render.angles[0] || ent->render.angles[2])
- {
- VectorMA(neworg, 0.25f, ent->render.model->rotatedmins, mins);
- VectorMA(neworg, 0.25f, ent->render.model->rotatedmaxs, maxs);
- }
- else if (ent->render.angles[1])
- {
- VectorMA(neworg, 0.25f, ent->render.model->yawmins, mins);
- VectorMA(neworg, 0.25f, ent->render.model->yawmaxs, maxs);
- }
- else
- {
- VectorMA(neworg, 0.25f, ent->render.model->normalmins, mins);
- VectorMA(neworg, 0.25f, ent->render.model->normalmaxs, maxs);
- }
- */
mins[0] = neworg[0] - 16.0f;
mins[1] = neworg[1] - 16.0f;
mins[2] = neworg[2] - 16.0f;
}
}
+ if (ent->persistent.muzzleflash > 0)
+ {
+ vec3_t v, v2;
+
+ AngleVectors (ent->render.angles, v, NULL, NULL);
+
+ v2[0] = v[0] * 18 + neworg[0];
+ v2[1] = v[1] * 18 + neworg[1];
+ v2[2] = v[2] * 18 + neworg[2] + 16;
+ CL_TraceLine(neworg, v2, v, NULL, 0, true);
+
+ CL_AllocDlight (NULL, v, ent->persistent.muzzleflash, 1, 1, 1, 0, 0);
+ ent->persistent.muzzleflash -= cl.frametime * 1000;
+ }
+
// LordHavoc: if the model has no flags, don't check each
if (ent->render.model && ent->render.model->flags)
{
// hack to make glowing player light shine on their gun
if (i == cl.viewentity && !chase_active.integer)
vec[2] += 30;
- CL_AllocDlight (/*&ent->render*/ NULL, vec, 1, dlightcolor[0], dlightcolor[1], dlightcolor[2], 0, 0);
+ CL_AllocDlight (NULL, vec, 1, dlightcolor[0], dlightcolor[1], dlightcolor[2], 0, 0);
}
if (chase_active.integer)
CL_DecayLights ();
CL_RelinkStaticEntities();
CL_RelinkNetworkEntities();
- TraceLine_ScanForBModels();
+ CL_TraceLine_ScanForBModels();
CL_RelinkEffects();
CL_MoveParticles();
CL_UpdateTEnts();
// send the unreliable message
CL_SendMove (&cmd);
}
+#ifndef NOROUTINGFIX
+ else
+ {
+ // LordHavoc: fix for NAT routing of netquake:
+ // bounce back a clc_nop message to the newly allocated server port,
+ // to establish a routing connection for incoming frames,
+ // the server waits for this before sending anything
+ if (realtime > cl.sendnoptime)
+ {
+ Con_DPrintf("sending clc_nop to get server's attention\n");
+ cl.sendnoptime = realtime + 3;
+ MSG_WriteByte(&cls.message, clc_nop);
+ }
+ }
+#endif
if (cls.demoplayback)
{
CL_Screen_Init();
CL_CGVM_Init();
}
+