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.
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
*/
-cvar_t cl_rollspeed = {"cl_rollspeed", "200"};
-cvar_t cl_rollangle = {"cl_rollangle", "2.0"};
+cvar_t cl_rollspeed = {0, "cl_rollspeed", "200"};
+cvar_t cl_rollangle = {0, "cl_rollangle", "2.0"};
-cvar_t cl_bob = {"cl_bob","0.02", false};
-cvar_t cl_bobcycle = {"cl_bobcycle","0.6", false};
-cvar_t cl_bobup = {"cl_bobup","0.5", false};
+cvar_t cl_bob = {0, "cl_bob","0.02"};
+cvar_t cl_bobcycle = {0, "cl_bobcycle","0.6"};
+cvar_t cl_bobup = {0, "cl_bobup","0.5"};
-cvar_t v_kicktime = {"v_kicktime", "0.5", false};
-cvar_t v_kickroll = {"v_kickroll", "0.6", false};
-cvar_t v_kickpitch = {"v_kickpitch", "0.6", false};
+cvar_t v_kicktime = {0, "v_kicktime", "0.5"};
+cvar_t v_kickroll = {0, "v_kickroll", "0.6"};
+cvar_t v_kickpitch = {0, "v_kickpitch", "0.6"};
-cvar_t v_iyaw_cycle = {"v_iyaw_cycle", "2", false};
-cvar_t v_iroll_cycle = {"v_iroll_cycle", "0.5", false};
-cvar_t v_ipitch_cycle = {"v_ipitch_cycle", "1", false};
-cvar_t v_iyaw_level = {"v_iyaw_level", "0.3", false};
-cvar_t v_iroll_level = {"v_iroll_level", "0.1", false};
-cvar_t v_ipitch_level = {"v_ipitch_level", "0.3", false};
+cvar_t v_punch = {0, "v_punch", "1"};
-cvar_t v_idlescale = {"v_idlescale", "0", false};
+cvar_t v_iyaw_cycle = {0, "v_iyaw_cycle", "2"};
+cvar_t v_iroll_cycle = {0, "v_iroll_cycle", "0.5"};
+cvar_t v_ipitch_cycle = {0, "v_ipitch_cycle", "1"};
+cvar_t v_iyaw_level = {0, "v_iyaw_level", "0.3"};
+cvar_t v_iroll_level = {0, "v_iroll_level", "0.1"};
+cvar_t v_ipitch_level = {0, "v_ipitch_level", "0.3"};
-cvar_t crosshair = {"crosshair", "0", true};
-cvar_t cl_crossx = {"cl_crossx", "0", false};
-cvar_t cl_crossy = {"cl_crossy", "0", false};
+cvar_t v_idlescale = {0, "v_idlescale", "0"};
-cvar_t gl_cshiftpercent = {"gl_cshiftpercent", "100", false};
+cvar_t crosshair = {CVAR_SAVE, "crosshair", "0"};
-float v_dmg_time, v_dmg_roll, v_dmg_pitch;
+//cvar_t gl_cshiftpercent = {0, "gl_cshiftpercent", "100"};
+cvar_t gl_polyblend = {CVAR_SAVE, "gl_polyblend", "1"};
+
+cvar_t v_centermove = {0, "v_centermove", "0.15"};
+cvar_t v_centerspeed = {0, "v_centerspeed","500"};
-extern int in_forward, in_forward2, in_back;
+float v_dmg_time, v_dmg_roll, v_dmg_pitch;
/*
Used by view and sv_user
===============
*/
-vec3_t forward, right, up;
-
float V_CalcRoll (vec3_t angles, vec3_t velocity)
{
+ vec3_t right;
float sign;
float side;
float value;
- AngleVectors (angles, forward, right, up);
+ AngleVectors (angles, NULL, right, NULL);
side = DotProduct (velocity, right);
sign = side < 0 ? -1 : 1;
side = fabs(side);
side = side * value / cl_rollspeed.value;
else
side = value;
-
+
return side*sign;
-
+
}
//=============================================================================
-cvar_t v_centermove = {"v_centermove", "0.15", false};
-cvar_t v_centerspeed = {"v_centerspeed","500"};
-
-
void V_StartPitchDrift (void)
{
#if 1
mlook and mouse, or klook and keyboard, pitch drifting is constantly stopped.
Drifting is enabled when the center view key is hit, mlook is released and
-lookspring is non 0, or when
+lookspring is non 0, or when
===============
*/
void V_DriftPitch (void)
if ( fabs(cl.cmd.forwardmove) < cl_forwardspeed.value)
cl.driftmove = 0;
else
- cl.driftmove += host_frametime;
+ cl.driftmove += cl.frametime;
if ( cl.driftmove > v_centermove.value)
{
return;
}
- move = host_frametime * cl.pitchvel;
- cl.pitchvel += host_frametime * v_centerspeed.value;
+ move = cl.frametime * cl.pitchvel;
+ cl.pitchvel += cl.frametime * v_centerspeed.value;
-//Con_Printf ("move: %f (%f)\n", move, host_frametime);
+//Con_Printf ("move: %f (%f)\n", move, cl.frametime);
if (delta > 0)
{
/*
==============================================================================
- PALETTE FLASHES
+ SCREEN FLASHES
==============================================================================
*/
int armor, blood;
vec3_t from;
int i;
- vec3_t forward, right, up;
+ vec3_t forward, right;
entity_t *ent;
float side;
float count;
if (count < 10)
count = 10;
- cl.faceanimtime = cl.time + 0.2; // but sbar face into pain frame
-
- cl.cshifts[CSHIFT_DAMAGE].percent += 3*count;
- if (cl.cshifts[CSHIFT_DAMAGE].percent < 0)
- cl.cshifts[CSHIFT_DAMAGE].percent = 0;
- if (cl.cshifts[CSHIFT_DAMAGE].percent > 150)
- cl.cshifts[CSHIFT_DAMAGE].percent = 150;
+ cl.faceanimtime = cl.time + 0.2; // put sbar face into pain frame
- if (armor > blood)
+ if (gl_polyblend.value)
{
- cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 200;
- cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 100;
- cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 100;
- }
- else if (armor)
- {
- cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 220;
- cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 50;
- cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 50;
- }
- else
- {
- cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 255;
- cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 0;
- cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 0;
+ cl.cshifts[CSHIFT_DAMAGE].percent += 3*count;
+ if (cl.cshifts[CSHIFT_DAMAGE].percent < 0)
+ cl.cshifts[CSHIFT_DAMAGE].percent = 0;
+ if (cl.cshifts[CSHIFT_DAMAGE].percent > 150)
+ cl.cshifts[CSHIFT_DAMAGE].percent = 150;
+
+ if (armor > blood)
+ {
+ cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 200;
+ cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 100;
+ cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 100;
+ }
+ else if (armor)
+ {
+ cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 220;
+ cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 50;
+ cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 50;
+ }
+ else
+ {
+ cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 255;
+ cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 0;
+ cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 0;
+ }
}
//
//
ent = &cl_entities[cl.viewentity];
- VectorSubtract (from, ent->origin, from);
+ VectorSubtract (from, ent->render.origin, from);
VectorNormalize (from);
- AngleVectors (ent->angles, forward, right, up);
+ AngleVectors (ent->render.angles, forward, right, NULL);
side = DotProduct (from, right);
v_dmg_roll = count*side*v_kickroll.value;
*/
void V_BonusFlash_f (void)
{
- cl.cshifts[CSHIFT_BONUS].destcolor[0] = 215;
- cl.cshifts[CSHIFT_BONUS].destcolor[1] = 186;
- cl.cshifts[CSHIFT_BONUS].destcolor[2] = 69;
- cl.cshifts[CSHIFT_BONUS].percent = 50;
+ if (gl_polyblend.value)
+ {
+ cl.cshifts[CSHIFT_BONUS].destcolor[0] = 215;
+ cl.cshifts[CSHIFT_BONUS].destcolor[1] = 186;
+ cl.cshifts[CSHIFT_BONUS].destcolor[2] = 69;
+ cl.cshifts[CSHIFT_BONUS].percent = 50;
+ }
}
/*
{
cshift_t* c;
c = &cl.cshifts[CSHIFT_CONTENTS]; // just to shorten the code below
+ if (!gl_polyblend.value)
+ {
+ c->percent = 0;
+ return;
+ }
switch (contents)
{
case CONTENTS_EMPTY:
*/
void V_CalcPowerupCshift (void)
{
+ if (!gl_polyblend.value)
+ {
+ cl.cshifts[CSHIFT_POWERUP].percent = 0;
+ return;
+ }
if (cl.items & IT_QUAD)
{
cl.cshifts[CSHIFT_POWERUP].destcolor[0] = 0;
b = 0;
a = 0;
- if (gl_cshiftpercent.value)
- {
+// if (gl_cshiftpercent.value)
+// {
for (j=0 ; j<NUM_CSHIFTS ; j++)
{
- a2 = ((cl.cshifts[j].percent * gl_cshiftpercent.value) / 100.0) / 255.0;
+// a2 = ((cl.cshifts[j].percent * gl_cshiftpercent.value) / 100.0) / 255.0;
+ a2 = cl.cshifts[j].percent * (1.0f / 255.0f);
if (!a2)
continue;
g *= a2;
b *= a2;
}
- }
+// }
v_blend[0] = bound(0, r * (1.0/255.0), 1);
v_blend[1] = bound(0, g * (1.0/255.0), 1);
/*
=============
-V_UpdatePalette
+V_UpdateBlends
=============
*/
-void V_UpdatePalette (void)
+void V_UpdateBlends (void)
{
int i, j;
qboolean new;
V_CalcPowerupCshift ();
new = false;
-
+
for (i=0 ; i<NUM_CSHIFTS ; i++)
{
if (cl.cshifts[i].percent != cl.prev_cshifts[i].percent)
}
// drop the damage value
- cl.cshifts[CSHIFT_DAMAGE].percent -= host_frametime*150;
+ cl.cshifts[CSHIFT_DAMAGE].percent -= (cl.time - cl.oldtime)*150;
if (cl.cshifts[CSHIFT_DAMAGE].percent <= 0)
cl.cshifts[CSHIFT_DAMAGE].percent = 0;
// drop the bonus value
- cl.cshifts[CSHIFT_BONUS].percent -= host_frametime*100;
+ cl.cshifts[CSHIFT_BONUS].percent -= (cl.time - cl.oldtime)*100;
if (cl.cshifts[CSHIFT_BONUS].percent <= 0)
cl.cshifts[CSHIFT_BONUS].percent = 0;
float angledelta (float a)
{
- a = anglemod(a);
+ a = ANGLEMOD(a);
if (a > 180)
a -= 360;
return a;
==================
*/
void CalcGunAngle (void)
-{
- float yaw, pitch, move;
- static float oldyaw = 0;
- static float oldpitch = 0;
-
- yaw = r_refdef.viewangles[YAW];
- pitch = -r_refdef.viewangles[PITCH];
-
- yaw = angledelta(yaw - r_refdef.viewangles[YAW]) * 0.4;
- if (yaw > 10)
- yaw = 10;
- if (yaw < -10)
- yaw = -10;
- pitch = angledelta(-pitch - r_refdef.viewangles[PITCH]) * 0.4;
- if (pitch > 10)
- pitch = 10;
- if (pitch < -10)
- pitch = -10;
- move = host_frametime*20;
- if (yaw > oldyaw)
- {
- if (oldyaw + move < yaw)
- yaw = oldyaw + move;
- }
- else
- {
- if (oldyaw - move > yaw)
- yaw = oldyaw - move;
- }
-
- if (pitch > oldpitch)
- {
- if (oldpitch + move < pitch)
- pitch = oldpitch + move;
- }
- else
- {
- if (oldpitch - move > pitch)
- pitch = oldpitch - move;
- }
-
- oldyaw = yaw;
- oldpitch = pitch;
-
- cl.viewent.angles[YAW] = r_refdef.viewangles[YAW] + yaw;
- cl.viewent.angles[PITCH] = - (r_refdef.viewangles[PITCH] + pitch);
+{
+ cl.viewent.render.angles[YAW] = r_refdef.viewangles[YAW];
+ cl.viewent.render.angles[PITCH] = -r_refdef.viewangles[PITCH];
- cl.viewent.angles[ROLL] -= v_idlescale.value * sin(cl.time*v_iroll_cycle.value) * v_iroll_level.value;
- cl.viewent.angles[PITCH] -= v_idlescale.value * sin(cl.time*v_ipitch_cycle.value) * v_ipitch_level.value;
- cl.viewent.angles[YAW] -= v_idlescale.value * sin(cl.time*v_iyaw_cycle.value) * v_iyaw_level.value;
+ cl.viewent.render.angles[ROLL] -= v_idlescale.value * sin(cl.time*v_iroll_cycle.value) * v_iroll_level.value;
+ cl.viewent.render.angles[PITCH] -= v_idlescale.value * sin(cl.time*v_ipitch_cycle.value) * v_ipitch_level.value;
+ cl.viewent.render.angles[YAW] -= v_idlescale.value * sin(cl.time*v_iyaw_cycle.value) * v_iyaw_level.value;
}
/*
ent = &cl_entities[cl.viewentity];
-// absolutely bound refresh reletive to entity clipping hull
+// absolutely bound refresh relative to entity clipping hull
// so the view can never be inside a solid wall
- if (r_refdef.vieworg[0] < ent->origin[0] - 14)
- r_refdef.vieworg[0] = ent->origin[0] - 14;
- else if (r_refdef.vieworg[0] > ent->origin[0] + 14)
- r_refdef.vieworg[0] = ent->origin[0] + 14;
- if (r_refdef.vieworg[1] < ent->origin[1] - 14)
- r_refdef.vieworg[1] = ent->origin[1] - 14;
- else if (r_refdef.vieworg[1] > ent->origin[1] + 14)
- r_refdef.vieworg[1] = ent->origin[1] + 14;
- if (r_refdef.vieworg[2] < ent->origin[2] - 22)
- r_refdef.vieworg[2] = ent->origin[2] - 22;
- else if (r_refdef.vieworg[2] > ent->origin[2] + 30)
- r_refdef.vieworg[2] = ent->origin[2] + 30;
+ if (r_refdef.vieworg[0] < ent->render.origin[0] - 14)
+ r_refdef.vieworg[0] = ent->render.origin[0] - 14;
+ else if (r_refdef.vieworg[0] > ent->render.origin[0] + 14)
+ r_refdef.vieworg[0] = ent->render.origin[0] + 14;
+ if (r_refdef.vieworg[1] < ent->render.origin[1] - 14)
+ r_refdef.vieworg[1] = ent->render.origin[1] - 14;
+ else if (r_refdef.vieworg[1] > ent->render.origin[1] + 14)
+ r_refdef.vieworg[1] = ent->render.origin[1] + 14;
+ if (r_refdef.vieworg[2] < ent->render.origin[2] - 22)
+ r_refdef.vieworg[2] = ent->render.origin[2] - 22;
+ else if (r_refdef.vieworg[2] > ent->render.origin[2] + 30)
+ r_refdef.vieworg[2] = ent->render.origin[2] + 30;
}
/*
{
float side;
- side = V_CalcRoll (cl_entities[cl.viewentity].angles, cl.velocity);
+ side = V_CalcRoll (cl_entities[cl.viewentity].render.angles, cl.velocity);
r_refdef.viewangles[ROLL] += side;
if (v_dmg_time > 0)
{
r_refdef.viewangles[ROLL] += v_dmg_time/v_kicktime.value*v_dmg_roll;
r_refdef.viewangles[PITCH] += v_dmg_time/v_kicktime.value*v_dmg_pitch;
- v_dmg_time -= host_frametime;
+ v_dmg_time -= cl.frametime;
}
if (cl.stats[STAT_HEALTH] <= 0)
// view is the weapon model (only visible from inside body)
view = &cl.viewent;
- VectorCopy (ent->origin, r_refdef.vieworg);
- VectorCopy (ent->angles, r_refdef.viewangles);
- view->model = NULL;
+ VectorCopy (ent->render.origin, r_refdef.vieworg);
+ VectorCopy (ent->render.angles, r_refdef.viewangles);
+ view->render.model = NULL;
-// allways idle in intermission
+// always idle in intermission
old = v_idlescale.value;
v_idlescale.value = 1;
V_AddIdle ();
{
entity_t *ent, *view;
int i;
- vec3_t forward, right, up;
+ vec3_t forward;
vec3_t angles;
float bob;
- static float oldz = 0;
+// static float oldz = 0;
V_DriftPitch ();
ent = &cl_entities[cl.viewentity];
// view is the weapon model (only visible from inside body)
view = &cl.viewent;
-
-// transform the view offset by the model's matrix to get the offset from
-// model origin for the view
- ent->angles[YAW] = cl.viewangles[YAW]; // the model should face the view dir
- ent->angles[PITCH] = -cl.viewangles[PITCH]; // the model should face the view dir
-
-
- bob = V_CalcBob ();
-
-// refresh position
- VectorCopy (ent->origin, r_refdef.vieworg);
- r_refdef.vieworg[2] += cl.viewheight + bob;
-
-// never let it sit exactly on a node line, because a water plane can
-// dissapear when viewed with the eye exactly on it.
-// the server protocol only specifies to 1/16 pixel, so add 1/32 in each axis
- r_refdef.vieworg[0] += 1.0/32;
- r_refdef.vieworg[1] += 1.0/32;
- r_refdef.vieworg[2] += 1.0/32;
-
- VectorCopy (cl.viewangles, r_refdef.viewangles);
- V_CalcViewRoll ();
- V_AddIdle ();
-// offsets
- angles[PITCH] = -ent->angles[PITCH]; // because entity pitches are
- // actually backward
- angles[YAW] = ent->angles[YAW];
- angles[ROLL] = ent->angles[ROLL];
+ if (chase_active.value)
+ {
+ VectorCopy (ent->render.origin, r_refdef.vieworg);
+ VectorCopy (cl.viewangles, r_refdef.viewangles);
+ Chase_Update ();
+ V_AddIdle ();
+ }
+ else
+ {
+ // transform the view offset by the model's matrix to get the offset from model origin for the view
+ // if (!chase_active.value) // LordHavoc: get rid of angle problems in chase_active mode
+ // {
+ // ent->render.angles[YAW] = cl.viewangles[YAW]; // the model should face the view dir
+ // ent->render.angles[PITCH] = -cl.viewangles[PITCH]; // the model should face the view dir
+ // }
- AngleVectors (angles, forward, right, up);
+ bob = V_CalcBob ();
- V_BoundOffsets ();
-
-// set up gun position
- VectorCopy (cl.viewangles, view->angles);
-
- CalcGunAngle ();
+ // refresh position
+ VectorCopy (ent->render.origin, r_refdef.vieworg);
+ r_refdef.vieworg[2] += cl.viewheight + bob;
- VectorCopy (ent->origin, view->origin);
- view->origin[2] += cl.viewheight;
+ // LordHavoc: the protocol has changed... so this is an obsolete approach
+ // never let it sit exactly on a node line, because a water plane can
+ // dissapear when viewed with the eye exactly on it.
+ // the server protocol only specifies to 1/16 pixel, so add 1/32 in each axis
+ // r_refdef.vieworg[0] += 1.0/32;
+ // r_refdef.vieworg[1] += 1.0/32;
+ // r_refdef.vieworg[2] += 1.0/32;
- for (i=0 ; i<3 ; i++)
- {
- view->origin[i] += forward[i]*bob*0.4;
-// view->origin[i] += right[i]*bob*0.4;
-// view->origin[i] += up[i]*bob*0.8;
- }
- view->origin[2] += bob;
+ if (!intimerefresh)
+ VectorCopy (cl.viewangles, r_refdef.viewangles);
+ V_CalcViewRoll ();
+ V_AddIdle ();
-// fudge position around to keep amount of weapon visible
-// roughly equal with different FOV
+ // offsets
+ angles[PITCH] = -ent->render.angles[PITCH]; // because entity pitches are actually backward
+ angles[YAW] = ent->render.angles[YAW];
+ angles[ROLL] = ent->render.angles[ROLL];
-#if 0
- if (cl.model_precache[cl.stats[STAT_WEAPON]] && strcmp (cl.model_precache[cl.stats[STAT_WEAPON]]->name, "progs/v_shot2.mdl"))
-#endif
-// LordHavoc: everyone hates the gun moving around
-/*
- if (scr_viewsize.value == 110)
- view->origin[2] += 1;
- else if (scr_viewsize.value == 100)
- view->origin[2] += 2;
- else if (scr_viewsize.value == 90)
- view->origin[2] += 1;
- else if (scr_viewsize.value == 80)
- view->origin[2] += 0.5;
-*/
+ AngleVectors (angles, forward, NULL, NULL);
- view->model = cl.model_precache[cl.stats[STAT_WEAPON]];
- view->frame = cl.stats[STAT_WEAPONFRAME];
- view->colormap = 0; //vid.colormap;
+ V_BoundOffsets ();
-// set up the refresh position
- VectorAdd (r_refdef.viewangles, cl.punchangle, r_refdef.viewangles);
+ // set up gun position
+ VectorCopy (ent->render.origin, view->render.origin);
+ view->render.origin[2] += cl.viewheight;
+ VectorCopy (cl.viewangles, view->render.angles);
-// smooth out stair step ups
-if (cl.onground && ent->origin[2] - oldz > 0)
-{
- float steptime;
-
- steptime = cl.time - cl.oldtime;
- if (steptime < 0)
-//FIXME I_Error ("steptime < 0");
- steptime = 0;
-
- oldz += steptime * 80;
- if (oldz > ent->origin[2])
- oldz = ent->origin[2];
- if (ent->origin[2] - oldz > 12)
- oldz = ent->origin[2] - 12;
- r_refdef.vieworg[2] += oldz - ent->origin[2];
- view->origin[2] += oldz - ent->origin[2];
-}
-else
- oldz = ent->origin[2];
+ CalcGunAngle ();
- if (chase_active.value)
- Chase_Update ();
+ for (i=0 ; i<3 ; i++)
+ {
+ view->render.origin[i] += forward[i]*bob*0.4;
+ // view->render.origin[i] += right[i]*bob*0.4;
+ // view->render.origin[i] += up[i]*bob*0.8;
+ }
+ view->render.origin[2] += bob;
+
+ // FIXME: this setup code is somewhat evil (CL_LerpUpdate should be private)
+ CL_LerpUpdate(view, cl.stats[STAT_WEAPONFRAME], cl.stats[STAT_WEAPON]);
+
+ view->render.model = cl.model_precache[cl.stats[STAT_WEAPON]];
+ view->render.frame = cl.stats[STAT_WEAPONFRAME];
+ view->render.colormap = -1; // no special coloring
+ view->render.alpha = ent->render.alpha; // LordHavoc: if the player is transparent, so is the gun
+ view->render.effects = ent->render.effects;
+ view->render.scale = 1;
+
+ // set up the refresh position
+
+ // LordHavoc: this never looked all that good to begin with...
+ /*
+ // smooth out stair step ups
+ if (cl.onground && ent->render.origin[2] - oldz > 0)
+ {
+ float steptime;
+
+ steptime = cl.time - cl.oldtime;
+ if (steptime < 0)
+ //FIXME I_Error ("steptime < 0");
+ steptime = 0;
+
+ oldz += steptime * 80;
+ if (oldz > ent->render.origin[2])
+ oldz = ent->render.origin[2];
+ if (ent->render.origin[2] - oldz > 12)
+ oldz = ent->render.origin[2] - 12;
+ r_refdef.vieworg[2] += oldz - ent->render.origin[2];
+ view->render.origin[2] += oldz - ent->render.origin[2];
+ }
+ else
+ oldz = ent->render.origin[2];
+ */
+
+ // LordHavoc: origin view kick added
+ if (!intimerefresh && v_punch.value)
+ {
+ VectorAdd(r_refdef.viewangles, cl.punchangle, r_refdef.viewangles);
+ VectorAdd(r_refdef.vieworg, cl.punchvector, r_refdef.vieworg);
+ }
+ }
}
/*
*/
void V_RenderView (void)
{
- if (con_forcedup)
+ if (scr_con_current >= vid.conheight)
return;
if (cl.intermission)
- { // intermission / finale rendering
V_CalcIntermissionRefdef ();
- }
else
- {
- if (!cl.paused /* && (sv.maxclients > 1 || key_dest == key_game) */ )
- V_CalcRefdef ();
- }
-
- R_PushDlights ();
+ V_CalcRefdef ();
R_RenderView ();
}
Cvar_RegisterVariable (&v_idlescale);
Cvar_RegisterVariable (&crosshair);
- Cvar_RegisterVariable (&cl_crossx);
- Cvar_RegisterVariable (&cl_crossy);
- Cvar_RegisterVariable (&gl_cshiftpercent);
+// Cvar_RegisterVariable (&gl_cshiftpercent);
+ Cvar_RegisterVariable (&gl_polyblend);
Cvar_RegisterVariable (&cl_rollspeed);
Cvar_RegisterVariable (&cl_rollangle);
Cvar_RegisterVariable (&v_kicktime);
Cvar_RegisterVariable (&v_kickroll);
Cvar_RegisterVariable (&v_kickpitch);
+
+ Cvar_RegisterVariable (&v_punch);
}