void PostInit(void);
void CSQC_Demo_Camera();
-float HUD_WouldDrawScoreboard ();
+float HUD_WouldDrawScoreboard();
float view_set;
float camera_mode;
float reticle_type;
input_angles = warpzone_fixview_cl_viewangles;
view_angles = warpzone_fixview_angles;
- if(cvar("cl_lockview") || autocvar__hud_configure)
+ if(cvar("cl_lockview") || (autocvar__hud_configure && spectatee_status <= 0))
{
pmove_org = freeze_pmove_org;
input_angles = view_angles = freeze_input_angles;
}
}
- hud_accuracy_hud = cvar_or("hud_accuracy_hud", 1);
ColorTranslateMode = cvar("cl_stripcolorcodes");
activeweapon = getstati(STAT_SWITCHWEAPON);
f = cvar("teamplay");
}
// Draw the Crosshair
- float scoreboard_active;
- scoreboard_active = HUD_WouldDrawScoreboard();
R_SetView(VF_DRAWCROSSHAIR, 0); //Make sure engine crosshairs are always hidden
// Draw the Engine Status Bar (the default Quake HUD)
// the view to go back to normal, so reticle_type would become 0 as we fade out)
if(spectatee_status || getstati(STAT_HEALTH) <= 0)
reticle_type = 0; // prevent reticle from showing during the respawn zoom effect or for spectators
+ else if(activeweapon == WEP_NEX && (button_zoom || zoomscript_caught) || activeweapon == WEP_CAMPINGRIFLE && (button_zoom || zoomscript_caught) || activeweapon == WEP_MINSTANEX && (button_zoom || zoomscript_caught))
+ reticle_type = 2; // nex zoom
else if(button_zoom || zoomscript_caught)
reticle_type = 1; // normal zoom
else if(activeweapon == WEP_NEX && button_attack2 || activeweapon == WEP_CAMPINGRIFLE && button_attack2)
self.draw2d();
self = e;
+ scoreboard_active = HUD_WouldDrawScoreboard();
+
float hud;
hud = getstati(STAT_HUD);
if(hud == HUD_SPIDERBOT)
- {
CSQC_SPIDER_HUD();
- }
else if(hud == HUD_WAKIZASHI)
CSQC_WAKIZASHI_HUD();
else if(hud == HUD_RAPTOR)
if(cvar("viewsize") < 120)
CSQC_common_hud();
-
- // ring around crosshair representing velocity-dependent damage for the nex
- if (activeweapon == WEP_NEX)
- {
- float x, y, q, d;
- vector ringorigin, ringsize, t;
- ringorigin = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight;
- ringsize = 64 * '1 1 0'; // testing only
-
- // TODO send from server
- float maxvel, minvel, curvel;
- minvel = 400;
- maxvel = 1000;
- curvel = vlen(pmove_vel);
-
- f = bound(0, (curvel - minvel) / (maxvel - minvel), 1);
- x = cos(f * 2 * M_PI);
- y = sin(f * 2 * M_PI);
- q = fabs(x) + fabs(y);
- x /= q;
- y /= q;
-
- if(f >= 1)
- {
- // draw full rectangle
- R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE);
- v = ringorigin; t = '0.5 0.5 0';
- v_x += 0.5 * ringsize_x; t += '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_y += 0.5 * ringsize_y; t += '0.5 -0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_x -= 0.5 * ringsize_y; t -= '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_y -= 0.5 * ringsize_y; t -= '0.5 -0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
- R_EndPolygon();
-
- d = q - 1;
- if(d > 0)
- {
- R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE);
- v = ringorigin; t = '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_x += 0.5 * ringsize_x; t += '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
- }
- }
- else if(f > 0.75)
- {
- // draw upper and first triangle
- R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE);
- v = ringorigin; t = '0.5 0.5 0';
- v_x += 0.5 * ringsize_x; t += '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_y += 0.5 * ringsize_y; t += '0.5 -0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_x -= 0.5 * ringsize_y; t -= '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
- R_EndPolygon();
- R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE);
- v = ringorigin; t = '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_x -= 0.5 * ringsize_y; t -= '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_y -= 0.5 * ringsize_y; t -= '0.5 -0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- d = q - 0.75;
- if(d <= 0)
- R_EndPolygon();
- }
- else if(f > 0.5)
- {
- // draw upper triangle
- R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE);
- v = ringorigin; t = '0.5 0.5 0';
- v_x += 0.5 * ringsize_x; t += '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_y += 0.5 * ringsize_y; t += '0.5 -0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_x -= 0.5 * ringsize_y; t -= '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
- R_EndPolygon();
-
- d = q - 0.5;
- if(d > 0)
- {
- R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE);
- v = ringorigin; t = '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_x -= 0.5 * ringsize_x; t -= '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
- }
- }
- else if(f > 0.25)
- {
- // draw first triangle
- R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE);
- v = ringorigin; t = '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_x += 0.5 * ringsize_y; t += '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_y += 0.5 * ringsize_y; t += '0.5 -0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- d = q - 0.25;
- if(d <= 0)
- R_EndPolygon();
- }
- else
- {
- d = q;
- if(d > 0)
- {
- R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE);
- v = ringorigin; t = '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
-
- v = ringorigin; t = '0.5 0.5 0';
- v_x += 0.5 * ringsize_x; t += '0.5 0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
- }
- }
-
- if(d > 0)
- {
- v = ringorigin; t = '0.5 0.5 0';
- v_x += x * 0.5 * ringsize_x; t += x * '0.5 0.5 0';
- v_y += y * 0.5 * ringsize_y; t += y * '0.5 -0.5 0';
- R_PolygonVertex(v, t, '1 1 1', 1);
- R_EndPolygon();
- }
- }
-
// crosshair goes VERY LAST
if(!scoreboard_active && !camera_active && intermission != 2) {
// TrueAim check
wcross_scale *= 1 - cvar("_menu_alpha");
wcross_alpha *= 1 - cvar("_menu_alpha");
+ ring_scale = cvar("crosshair_ring_size");
+
+ wcross_size = drawgetimagesize(wcross_name) * wcross_scale;
+
+ float nex_charge;
+ nex_charge = getstatf(STAT_NEX_CHARGE);
+
// ring around crosshair representing bullets left in camping rifle clip
- if (activeweapon == WEP_CAMPINGRIFLE)
+ if (activeweapon == WEP_CAMPINGRIFLE && cr_maxbullets)
{
- ring_scale = cvar("crosshair_campingrifle_ring_size");
- bullets = bound(0, getstati(STAT_BULLETS_LOADED), 4);
- }
- else
- bullets = 0;
+ bullets = getstati(STAT_BULLETS_LOADED);
+ f = bound(0, bullets / cr_maxbullets, 1);
-#define CROSSHAIR_DRAW_RING(i,j,sz,wcross_name,wcross_alpha) \
- drawpic(wcross_origin - ('0.5 0 0' * (sz * wcross_size_x * ring_scale + i * wcross_blur) + '0 0.5 0' * (sz * wcross_size_y * ring_scale + j * wcross_blur)), strcat("gfx/rifle_ring_", ftos(bullets)), sz * wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
+ a = cvar("crosshair_campingrifle_bulletcounter_alpha");
+ DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, "gfx/crosshair_ring.tga", f, wcross_color, wcross_alpha * a, DRAWFLAG_ADDITIVE);
+ }
+ else if (activeweapon == WEP_NEX && nex_charge) // ring around crosshair representing velocity-dependent damage for the nex
+ {
+ a = cvar("crosshair_nexvelocity_alpha");
+ DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, "gfx/crosshair_ring.tga", nex_charge, wcross_color, wcross_alpha * a, DRAWFLAG_ADDITIVE);
+ }
#define CROSSHAIR_DO_BLUR(M,sz,wcross_name,wcross_alpha) \
do \
}
wcross_size = drawgetimagesize(wcross_name) * wcross_scale;
- if(bullets)
- {
- CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_RING, wcross_resolution, wcross_name, wcross_alpha);
- }
CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f);
+
+ if(cvar("crosshair_dot"))
+ CROSSHAIR_DRAW(wcross_resolution * cvar("crosshair_dot_size"), "gfx/crosshairdot.tga", wcross_alpha * f * cvar("crosshair_dot_alpha"));
+
wcross_name_alpha_goal_prev = f;
}
}
// let's reset the view back to normal for the end
R_SetView(VF_MIN, '0 0 0');
R_SetView(VF_SIZE, '1 0 0' * w + '0 1 0' * h);
-
- // be safe against triggerbots until everyone has the fixed engine
- // this call is meant to overwrite the trace globals by something
- // unsuspicious
- traceline('0 0 0', '0 0 0', MOVE_WORLDONLY, world);
}
#define spider_h "gfx/vehicles/hud_bg.tga"
case HUD_NORMAL:
// do some accuracy var caching
float i;
+ if(cvar_string("hud_panel_weapons_accuracy_color_levels") != acc_color_levels)
if(!(gametype == GAME_RACE || gametype == GAME_CTS))
{
- acc_levels = tokenize(cvar_string("hud_panel_weapons_accuracy_color_levels"));
+ if(acc_color_levels)
+ strunzone(acc_color_levels);
+ acc_color_levels = strzone(cvar_string("hud_panel_weapons_accuracy_color_levels"));
+ acc_levels = tokenize(acc_color_levels);
if (acc_levels > MAX_ACCURACY_LEVELS)
acc_levels = MAX_ACCURACY_LEVELS;
HUD_Main(); // always run these functions for alpha checks
HUD_DrawScoreboard();
- if (scoreboard_showscores || scoreboard_showscores_force || getstati(STAT_HEALTH) <= 0 || intermission == 1) // scoreboard/accuracy
+ if (scoreboard_active) // scoreboard/accuracy
{
HUD_Reset();
// HUD_DrawScoreboard takes care of centerprint_start