ret = ref_store = ref_store * (1 - frac) + (value) * frac;
#define lowpass_limited(value, frac, limit, ref_store, ret) MACRO_BEGIN \
-{ \
float __ignore; lowpass(value, frac, ref_store, __ignore); \
ret = ref_store = bound((value) - (limit), ref_store, (value) + (limit)); \
-} MACRO_END
+MACRO_END
#define highpass(value, frac, ref_store, ret) MACRO_BEGIN \
-{ \
float __f = 0; lowpass(value, frac, ref_store, __f); \
ret = (value) - __f; \
-} MACRO_END
+MACRO_END
#define highpass_limited(value, frac, limit, ref_store, ret) MACRO_BEGIN \
-{ \
float __f = 0; lowpass_limited(value, frac, limit, ref_store, __f); \
ret = (value) - __f; \
-} MACRO_END
+MACRO_END
#define lowpass2(value, frac, ref_store, ref_out) MACRO_BEGIN \
-{ \
lowpass(value.x, frac, ref_store.x, ref_out.x); \
lowpass(value.y, frac, ref_store.y, ref_out.y); \
-} MACRO_END
+MACRO_END
#define highpass2(value, frac, ref_store, ref_out) MACRO_BEGIN \
-{ \
highpass(value.x, frac, ref_store.x, ref_out.x); \
highpass(value.y, frac, ref_store.y, ref_out.y); \
-} MACRO_END
+MACRO_END
#define highpass2_limited(value, frac, limit, ref_store, ref_out) MACRO_BEGIN \
-{ \
highpass_limited(value.x, frac, limit, ref_store.x, ref_out.x); \
highpass_limited(value.y, frac, limit, ref_store.y, ref_out.y); \
-} MACRO_END
+MACRO_END
#define lowpass3(value, frac, ref_store, ref_out) MACRO_BEGIN \
-{ \
lowpass(value.x, frac, ref_store.x, ref_out.x); \
lowpass(value.y, frac, ref_store.y, ref_out.y); \
lowpass(value.z, frac, ref_store.z, ref_out.z); \
-} MACRO_END
+MACRO_END
#define highpass3(value, frac, ref_store, ref_out) MACRO_BEGIN \
-{ \
highpass(value.x, frac, ref_store.x, ref_out.x); \
highpass(value.y, frac, ref_store.y, ref_out.y); \
highpass(value.z, frac, ref_store.z, ref_out.z); \
-} MACRO_END
+MACRO_END
void calc_followmodel_ofs(entity view)
{
vel = view.velocity;
else
{
- vector forward = '0 0 0', right = '0 0 0', up = '0 0 0';
- MAKEVECTORS(makevectors, view_angles, forward, right, up);
+ vector forward, right, up;
+ MAKE_VECTORS(view_angles, forward, right, up);
vel.x = view.velocity * forward;
vel.y = view.velocity * right * -1;
vel.z = view.velocity * up;
if (autocvar_cl_followmodel_velocity_absolute)
{
vector fixed_gunorg;
- vector forward = '0 0 0', right = '0 0 0', up = '0 0 0';
- MAKEVECTORS(makevectors, view_angles, forward, right, up);
+ vector forward, right, up;
+ MAKE_VECTORS(view_angles, forward, right, up);
fixed_gunorg.x = gunorg * forward;
fixed_gunorg.y = gunorg * right * -1;
fixed_gunorg.z = gunorg * up;
vector pos = view_origin;
vector dir = view_forward;
- makevectors(((autocvar_chase_active) ? warpzone_save_view_angles : view_angles));
- pos += v_right * -wepent.movedir.y
- + v_up * wepent.movedir.z;
+ vector forward, right, up;
+ MAKE_VECTORS(autocvar_chase_active ? warpzone_save_view_angles : view_angles, forward, right, up);
+ pos += right * -wepent.movedir.y
+ + up * wepent.movedir.z;
if (wepent.angles_held_status)
{
- makevectors(wepent.angles_held);
- dir = v_forward;
+ MAKE_VECTORS(wepent.angles_held, forward, right, up);
+ dir = forward;
}
wepent.polyline[0] = pos;
{
vector ang = vectoangles2(trace_plane_normal, dir);
ang.x = -ang.x;
- makevectors(ang);
- if (!CheckWireframeBox(this, pos - 48 * v_right - 48 * v_up + 16 * v_forward, 96 * v_right, 96 * v_up, 96 * v_forward))
+ MAKE_VECTORS(ang, forward, right, up);
+ if (!CheckWireframeBox(this, pos - 48 * right - 48 * up + 16 * forward, 96 * right, 96 * up, 96 * forward))
{
n = max(2, idx);
break;
curspeed = 0;
else
{
- makevectors(view_angles);
+ vector forward, right, up;
+ MAKE_VECTORS(view_angles, forward, right, up);
v = pmove_vel;
if(csqcplayer)
v = csqcplayer.velocity;
switch(autocvar_cl_velocityzoom_type)
{
- case 3: curspeed = max(0, v_forward * v); break;
- case 2: curspeed = (v_forward * v); break;
+ case 3: curspeed = max(0, forward * v); break;
+ case 2: curspeed = (forward * v); break;
case 1: default: curspeed = vlen(v); break;
}
}
float eventchase_current_distance;
float eventchase_running;
-bool WantEventchase(entity this)
+int WantEventchase(entity this)
{
if(autocvar_cl_orthoview)
- return false;
+ return 0;
if(STAT(GAME_STOPPED) || intermission)
- return true;
+ return 1;
if(this.viewloc)
- return true;
+ return 1;
if(spectatee_status >= 0)
{
if(hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0))
- return true;
+ return 1;
if(MUTATOR_CALLHOOK(WantEventchase, this))
- return true;
+ return 1;
if(autocvar_cl_eventchase_frozen && STAT(FROZEN))
- return true;
+ return 1;
if(autocvar_cl_eventchase_death && (STAT(HEALTH) <= 0))
{
if(autocvar_cl_eventchase_death == 2)
{
// don't stop eventchase once it's started (even if velocity changes afterwards)
if(this.velocity == '0 0 0' || eventchase_running)
- return true;
+ return 1;
}
- else return true;
+ else return 1;
+ }
+ if (spectatee_status > 0 && autocvar_cl_eventchase_spectated_change)
+ {
+ if (time <= spectatee_status_changed_time + min(3, autocvar_cl_eventchase_spectated_change_time))
+ return 1;
+ else if (eventchase_running)
+ return -1; // disable chase_active while eventchase is still enabled so to avoid a glicth
}
- if (spectatee_status > 0 && autocvar_cl_eventchase_spectated_change
- && time <= spectatee_status_changed_time + 0.5)
- return true;
}
- return false;
+ return 0;
}
void HUD_Crosshair_Vehicle(entity this)
}
#define CROSSHAIR_DO_BLUR(M,sz,wcross_name,wcross_alpha) \
- MACRO_BEGIN { \
+ MACRO_BEGIN \
+ vector scaled_sz = sz * wcross_size; \
if(wcross_blur > 0) \
{ \
for(i = -2; i <= 2; ++i) \
for(j = -2; j <= 2; ++j) \
- M(i,j,sz,wcross_name,wcross_alpha*0.04); \
+ M(i,j,sz,scaled_sz,wcross_name,wcross_alpha*0.04); \
} \
else \
{ \
- M(0,0,sz,wcross_name,wcross_alpha); \
+ M(0,0,sz,scaled_sz,wcross_name,wcross_alpha); \
} \
- } MACRO_END
+ MACRO_END
-#define CROSSHAIR_DRAW_SINGLE(i,j,sz,wcross_name,wcross_alpha) \
- drawpic(wcross_origin - ('0.5 0 0' * (sz * wcross_size.x + i * wcross_blur) + '0 0.5 0' * (sz * wcross_size.y + j * wcross_blur)), wcross_name, sz * wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
+#define CROSSHAIR_DRAW_SINGLE(i,j,sz,scaled_sz,wcross_name,wcross_alpha) \
+ drawpic(wcross_origin - ('0.5 0 0' * (scaled_sz.x + i * wcross_blur) + '0 0.5 0' * (scaled_sz.y + j * wcross_blur)), wcross_name, scaled_sz, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
#define CROSSHAIR_DRAW(sz,wcross_name,wcross_alpha) \
CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,sz,wcross_name,wcross_alpha)
if(autocvar_r_letterbox == 0)
if(autocvar_viewsize < 120)
{
- if(!(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS))
+ if(!(ISGAMETYPE(RACE) || ISGAMETYPE(CTS)))
Accuracy_LoadLevels();
HUD_Main();
return;
}
+ if (cursor_active == -1) // starting to display the cursor
+ {
+ // since HUD_Mouse is called by CSQC_UpdateView before CSQC_InputEvent,
+ // in the first frame mousepos is the mouse position of the last time
+ // the cursor was displayed, thus we ignore it to avoid a glictch
+ cursor_active = 1;
+ return;
+ }
+
if(!autocvar_hud_cursormode)
update_mousepos();
}
}
- if(WantEventchase(this))
+ int eventchase = WantEventchase(this);
+ if (eventchase)
{
vector current_view_origin_override = '0 0 0';
vector view_offset_override = '0 0 0';
else if(eventchase_current_distance != chase_distance)
eventchase_current_distance = chase_distance;
- makevectors(view_angles);
+ vector forward, right, up;
+ MAKE_VECTORS(view_angles, forward, right, up);
- vector eventchase_target_origin = (current_view_origin - (v_forward * eventchase_current_distance));
+ vector eventchase_target_origin = (current_view_origin - (forward * eventchase_current_distance));
WarpZone_TraceBox(current_view_origin, autocvar_cl_eventchase_mins, autocvar_cl_eventchase_maxs, eventchase_target_origin, MOVE_WORLDONLY, this);
// If the boxtrace fails, revert back to line tracing.
if(!local_player.viewloc)
if(trace_startsolid)
{
- eventchase_target_origin = (current_view_origin - (v_forward * eventchase_current_distance));
+ eventchase_target_origin = (current_view_origin - (forward * eventchase_current_distance));
WarpZone_TraceLine(current_view_origin, eventchase_target_origin, MOVE_WORLDONLY, this);
- setproperty(VF_ORIGIN, (trace_endpos - (v_forward * autocvar_cl_eventchase_mins.z)));
+ setproperty(VF_ORIGIN, (trace_endpos - (forward * autocvar_cl_eventchase_mins.z)));
}
else { setproperty(VF_ORIGIN, trace_endpos); }
if(!local_player.viewloc)
setproperty(VF_ANGLES, WarpZone_TransformVAngles(WarpZone_trace_transform, view_angles));
}
- else if(autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
+
+ if (eventchase <= 0 && autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
{
eventchase_running = false;
cvar_set("chase_active", "0");
// Render the Scene
view_origin = getpropertyvec(VF_ORIGIN);
view_angles = getpropertyvec(VF_ANGLES);
- makevectors(view_angles);
- view_forward = v_forward;
- view_right = v_right;
- view_up = v_up;
+ MAKE_VECTORS(view_angles, view_forward, view_right, view_up);
#ifdef BLURTEST
if(time > blurtest_time0 && time < blurtest_time1)
{
if(!minigame_wasactive)
{
- localcmd("+button14\n");
+ localcmd("+button12\n");
minigame_wasactive = true;
}
}
else if(minigame_wasactive)
{
- localcmd("-button14\n");
+ localcmd("-button12\n");
minigame_wasactive = false;
}
R_EndPolygon();
}
- if(autocvar_cl_reticle)
+ if(autocvar_cl_reticle && !MUTATOR_CALLHOOK(DrawReticle))
{
string reticle_image = string_null;
bool wep_zoomed = false;
else if(cvar("r_glsl_postprocess") == 2)
cvar_set("r_glsl_postprocess", "0");
- /*if(gametype == MAPINFO_TYPE_CTF)
+ /*if(ISGAMETYPE(CTF))
{
ctf_view();
} else */
setproperty(VF_ORIGIN, '0 0 0');
setproperty(VF_ANGLES, '0 0 0');
setproperty(VF_PERSPECTIVE, 1);
- makevectors('0 0 0');
+ vector forward, right, up;
+ MAKE_VECTORS('0 0 0', forward, right, up);
vector v1, v2;
cvar_set("vid_conwidth", "800");
cvar_set("vid_conheight", "600");
- v1 = cs_project(v_forward);
+ v1 = cs_project(forward);
cvar_set("vid_conwidth", "640");
cvar_set("vid_conheight", "480");
- v2 = cs_project(v_forward);
+ v2 = cs_project(forward);
if(v1 == v2)
cs_project_is_b0rked = 1;
else