/* Side-scroller camera by Seth Kingsley - sethk@magnesium.net */ #include "quakedef.h" cvar_t sk_sidecam = {"sk_sidecam", "0", true}; static cvar_t _sk_sidecam_dist = {"sk_sidecam_dist", "100", true}, _sk_sidecam_noclip = {"sk_sidecam_noclip", "0", true}, _sk_sidecam_side = {"sk_sidecam_side", "1", true}, _sk_sidecam_pitch = {"sk_sidecam_pitch", "0", true}; extern void side_init(void) { Cvar_RegisterVariable(&sk_sidecam); Cvar_RegisterVariable(&_sk_sidecam_noclip); Cvar_RegisterVariable(&_sk_sidecam_dist); Cvar_RegisterVariable(&_sk_sidecam_side); Cvar_RegisterVariable(&_sk_sidecam_pitch); } extern void side_update(void) { vec3_t fav3, rav3, uav3, dv3; register int i; trace_t t; if (_sk_sidecam_side.value != 1 && _sk_sidecam_side.value != -1) _sk_sidecam_side.value = 1; AngleVectors(cl.viewangles, fav3, rav3, uav3); for (i = 0; i < 3; ++i) dv3[i] = r_refdef.vieworg[i] - fav3[i] + (_sk_sidecam_side.value * (rav3[i] * _sk_sidecam_dist.value)); if (!_sk_sidecam_noclip.value && !SV_RecursiveHullCheck(cl.worldmodel->hulls, 0, 0, 1, r_refdef.vieworg, dv3, &t)) VectorCopy(t.endpos, r_refdef.vieworg) else VectorCopy(dv3, r_refdef.vieworg) r_refdef.viewangles[YAW]+= _sk_sidecam_side.value * 90; if (_sk_sidecam_pitch.value) r_refdef.viewangles[ROLL] = _sk_sidecam_side.value * r_refdef.viewangles[PITCH]; r_refdef.viewangles[PITCH] = 0; }