- 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.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;
-}
-
-/*
-==============
-V_BoundOffsets
-==============
-*/
-void V_BoundOffsets (void)
-{
- entity_t *ent;
-
- ent = &cl_entities[cl.viewentity];
-
-// absolutely bound refresh relative to entity clipping hull
-// so the view can never be inside a solid wall
-
- 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;
-}
-
-/*
-==============
-V_AddIdle
-
-Idle swaying
-==============
-*/
-void V_AddIdle (void)
-{
- r_refdef.viewangles[ROLL] += v_idlescale.value * sin(cl.time*v_iroll_cycle.value) * v_iroll_level.value;
- r_refdef.viewangles[PITCH] += v_idlescale.value * sin(cl.time*v_ipitch_cycle.value) * v_ipitch_level.value;
- r_refdef.viewangles[YAW] += v_idlescale.value * sin(cl.time*v_iyaw_cycle.value) * v_iyaw_level.value;
-}
-
-
-/*
-==============
-V_CalcViewRoll
-
-Roll is induced by movement and damage
-==============
-*/
-void V_CalcViewRoll (void)
-{
- float side;
-
- 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 -= cl.frametime;
- }
-
- if (cl.stats[STAT_HEALTH] <= 0)
- {
- r_refdef.viewangles[ROLL] = 80; // dead view angle
- return;
- }
-
-}
-
-
-/*
-==================
-V_CalcIntermissionRefdef
-
-==================
-*/
-void V_CalcIntermissionRefdef (void)
-{
- entity_t *ent, *view;
- float old;
-
-// ent is the player model (visible when out of body)
- ent = &cl_entities[cl.viewentity];
-// view is the weapon model (only visible from inside body)
- view = &cl.viewent;
-
- VectorCopy (ent->render.origin, r_refdef.vieworg);
- VectorCopy (ent->render.angles, r_refdef.viewangles);
- view->render.model = NULL;
-
-// always idle in intermission
- old = v_idlescale.value;
- v_idlescale.value = 1;
- V_AddIdle ();
- v_idlescale.value = old;
-}
-
-/*
-==================
-V_CalcRefdef
-
-==================
-*/
-void V_CalcRefdef (void)
-{
- entity_t *ent, *view;
- int i;
- vec3_t forward;
- vec3_t angles;
- float bob;
-// static float oldz = 0;
-
- V_DriftPitch ();
-
-// ent is the player model (visible when out of body)
- 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
- 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
- }
-
-
- bob = V_CalcBob ();
-
-// refresh position
- VectorCopy (ent->render.origin, r_refdef.vieworg);
- r_refdef.vieworg[2] += cl.viewheight + bob;
-
- // 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;
-
- if (!intimerefresh)
- VectorCopy (cl.viewangles, r_refdef.viewangles);
- V_CalcViewRoll ();
- V_AddIdle ();
-
-// 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];
-
- AngleVectors (angles, forward, NULL, NULL);
-
- V_BoundOffsets ();
-
-// set up gun position
- VectorCopy (cl.viewangles, view->render.angles);
-
- CalcGunAngle ();
-
- VectorCopy (ent->render.origin, view->render.origin);
- view->render.origin[2] += cl.viewheight;
-
- 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;
+ // set contents color
+ switch (CL_PointQ1Contents(r_vieworigin))
+ {
+ case CONTENTS_EMPTY:
+ case CONTENTS_SOLID:
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 0;
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 0;
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 0;
+ cl.cshifts[CSHIFT_CONTENTS].percent = 0;
+ break;
+ case CONTENTS_LAVA:
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 255;
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 80;
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 0;
+ cl.cshifts[CSHIFT_CONTENTS].percent = 150 >> 1;
+ break;
+ case CONTENTS_SLIME:
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 0;
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 25;
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 5;
+ cl.cshifts[CSHIFT_CONTENTS].percent = 150 >> 1;
+ break;
+ default:
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 130;
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 80;
+ cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 50;
+ cl.cshifts[CSHIFT_CONTENTS].percent = 128 >> 1;
+ }