p = p - view_up * 16;
if(idx-1 >= portal1_idx)
{
- Draw_CylindricLine(p, q, 4, "", 1, 0, '0 0 1', 0.5, DRAWFLAG_NORMAL);
+ Draw_CylindricLine(p, q, 4, "", 1, 0, '0 0 1', 0.5, DRAWFLAG_NORMAL, view_origin);
}
else
{
- Draw_CylindricLine(p, q, 4, "", 1, 0, '1 0 0', 0.5, DRAWFLAG_NORMAL);
+ Draw_CylindricLine(p, q, 4, "", 1, 0, '1 0 0', 0.5, DRAWFLAG_NORMAL, view_origin);
}
--idx;
}
if (previous_game_starttime != startTime) {
if ((time + 5.0) < startTime) {
//if connecting to server while restart was active don't always play prepareforbattle
- sound(self, CHAN_VOICE, strcat("announcer/", cvar_string("cl_announcer"), "/prepareforbattle.wav"), VOL_BASEVOICE, ATTN_NONE);
+ sound(world, CHAN_AUTO, strcat("announcer/", cvar_string("cl_announcer"), "/prepareforbattle.wav"), VOL_BASEVOICE, ATTN_NONE);
}
if (time < startTime) {
restartAnnouncer = spawn();
zoomspeed = 3.5;
zoomdir = button_zoom;
- if(getstati(STAT_ACTIVEWEAPON) == WEP_NEX) // do NOT use switchweapon here
+ if((getstati(STAT_ACTIVEWEAPON) == WEP_NEX && nex_scope) || (getstati(STAT_ACTIVEWEAPON) == WEP_CAMPINGRIFLE && campingrifle_scope)) // do NOT use switchweapon here
zoomdir += button_attack2;
if(spectatee_status > 0 || isdemo())
{
void PostInit(void);
void CSQC_Demo_Camera();
-float HUD_WouldDrawScoreboard ();
+float HUD_WouldDrawScoreboard();
float view_set;
float camera_mode;
float reticle_type;
void CSQC_RAPTOR_HUD();
vector freeze_pmove_org, freeze_input_angles;
+entity nightvision_noise, nightvision_noise2;
+
+float pickup_crosshair_time, pickup_crosshair_size;
+
+float myhealth, myhealth_prev;
+float myhealth_flash;
void CSQC_UpdateView(float w, float h)
{
float fov;
float f, i, j;
vector v, vo;
+ vector vf_size, vf_min;
+ float a;
+
+ vf_size = R_SetView3fv(VF_SIZE);
+ vf_min = R_SetView3fv(VF_MIN);
+ vid_width = vf_size_x;
+ vid_height = vf_size_y;
vector reticle_pos, reticle_size;
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;
view_set = 1;
}
- vid_width = w;
- vid_height = h;
-
#ifdef BLURTEST
if(time > blurtest_time0 && time < blurtest_time1)
{
}
}
- hud_accuracy_hud = cvar_or("hud_accuracy_hud", 1);
ColorTranslateMode = cvar("cl_stripcolorcodes");
activeweapon = getstati(STAT_SWITCHWEAPON);
f = cvar("teamplay");
// ALWAYS Clear Current Scene First
R_ClearScene();
+ // FIXME engine bug? VF_SIZE and VF_MIN are not restored to sensible values by this
+ R_SetView(VF_SIZE, vf_size);
+ R_SetView(VF_MIN, vf_min);
+
// Assign Standard Viewflags
// Draw the World (and sky)
R_SetView(VF_DRAWWORLD, 1);
}
// 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)
// next R_RenderScene call
drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0);
+ if(cvar("r_fakelight") >= 2 || cvar("r_fullbright") >= 1)
+ if not(serverflags & SERVERFLAG_ALLOW_FULLBRIGHT)
+ {
+ // apply night vision effect
+ vector rgb, tc_00, tc_01, tc_10, tc_11;
+
+ if(!nightvision_noise)
+ {
+ nightvision_noise = spawn();
+ nightvision_noise.classname = "nightvision_noise";
+ }
+ if(!nightvision_noise2)
+ {
+ nightvision_noise2 = spawn();
+ nightvision_noise2.classname = "nightvision_noise2";
+ }
+
+ // color tint in yellow
+ drawfill('0 0 0', cvar("vid_conwidth") * '1 0 0' + cvar("vid_conheight") * '0 1 0', '0.5 1 0.3', 1, DRAWFLAG_MODULATE);
+
+ // draw BG
+ a = Noise_Pink(nightvision_noise, frametime * 1.5) * 0.05 + 0.15;
+ rgb = '1 1 1';
+ tc_00 = '0 0 0' + '0.2 0 0' * sin(time * 0.3) + '0 0.3 0' * cos(time * 0.7);
+ tc_01 = '0 2.25 0' + '0.6 0 0' * cos(time * 1.2) - '0 0.3 0' * sin(time * 2.2);
+ tc_10 = '1.5 0 0' - '0.2 0 0' * sin(time * 0.5) + '0 0.5 0' * cos(time * 1.7);
+ //tc_11 = '1 1 0' + '0.6 0 0' * sin(time * 0.6) + '0 0.3 0' * cos(time * 0.1);
+ tc_11 = tc_01 + tc_10 - tc_00;
+ R_BeginPolygon("gfx/nightvision-bg.tga", DRAWFLAG_ADDITIVE);
+ R_PolygonVertex('0 0 0', tc_00, rgb, a);
+ R_PolygonVertex(cvar("vid_conwidth") * '1 0 0', tc_10, rgb, a);
+ R_PolygonVertex(cvar("vid_conwidth") * '1 0 0' + cvar("vid_conheight") * '0 1 0', tc_11, rgb, a);
+ R_PolygonVertex(cvar("vid_conheight") * '0 1 0', tc_01, rgb, a);
+ R_EndPolygon();
+
+ // draw FG
+ a = Noise_Pink(nightvision_noise2, frametime * 0.1) * 0.05 + 0.12;
+ rgb = '0.3 0.6 0.4' + '0.1 0.4 0.2' * Noise_White(nightvision_noise2, frametime);
+ tc_00 = '0 0 0' + '1 0 0' * Noise_White(nightvision_noise2, frametime) + '0 1 0' * Noise_White(nightvision_noise2, frametime);
+ tc_01 = tc_00 + '0 3 0' * (1 + Noise_White(nightvision_noise2, frametime) * 0.2);
+ tc_10 = tc_00 + '2 0 0' * (1 + Noise_White(nightvision_noise2, frametime) * 0.3);
+ tc_11 = tc_01 + tc_10 - tc_00;
+ R_BeginPolygon("gfx/nightvision-fg.tga", DRAWFLAG_ADDITIVE);
+ R_PolygonVertex('0 0 0', tc_00, rgb, a);
+ R_PolygonVertex(cvar("vid_conwidth") * '1 0 0', tc_10, rgb, a);
+ R_PolygonVertex(cvar("vid_conwidth") * '1 0 0' + cvar("vid_conheight") * '0 1 0', tc_11, rgb, a);
+ R_PolygonVertex(cvar("vid_conheight") * '0 1 0', tc_01, rgb, a);
+ R_EndPolygon();
+ }
+
// Draw the aiming reticle for weapons that use it
// reticle_type is changed to the item we are zooming / aiming with, to decide which reticle to use
// It must be a persisted float for fading out to work properly (you let go of the zoom button for
// 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(button_zoom)
+ 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)
+ else if(activeweapon == WEP_NEX && button_attack2 || activeweapon == WEP_CAMPINGRIFLE && button_attack2)
reticle_type = 2; // nex zoom
if(cvar("cl_reticle_stretch"))
reticle_pos_y = (vid_conheight - reticle_size_y) / 2;
}
+ f = current_zoomfraction;
+ if(zoomscript_caught)
+ f = 1;
if(cvar("cl_reticle_item_normal"))
{
precache_pic("gfx/reticle_normal");
- if(reticle_type == 1 && current_zoomfraction)
- drawpic(reticle_pos, "gfx/reticle_normal", reticle_size, '1 1 1', current_zoomfraction * cvar("cl_reticle_item_normal"), DRAWFLAG_NORMAL);
+ if(reticle_type == 1 && f)
+ drawpic(reticle_pos, "gfx/reticle_normal", reticle_size, '1 1 1', f * cvar("cl_reticle_item_normal"), DRAWFLAG_NORMAL);
}
if(cvar("cl_reticle_item_nex"))
{
precache_pic("gfx/reticle_nex");
- if(reticle_type == 2 && current_zoomfraction)
- drawpic(reticle_pos, "gfx/reticle_nex", reticle_size, '1 1 1', current_zoomfraction * cvar("cl_reticle_item_nex"), DRAWFLAG_NORMAL);
+ if(reticle_type == 2 && f)
+ drawpic(reticle_pos, "gfx/reticle_nex", reticle_size, '1 1 1', f * cvar("cl_reticle_item_nex"), DRAWFLAG_NORMAL);
}
+ // improved polyblend
+ float myhealth_flash_temp;
+ myhealth = getstati(STAT_HEALTH);
+
+ // fade out
+ myhealth_flash = max(0, myhealth_flash - cvar("hud_damage_fade_rate") * frametime);
+ // add new damage
+ myhealth_flash = bound(0, myhealth_flash + max(0, myhealth_prev - myhealth) * cvar("hud_damage_factor"), cvar("hud_damage_maxalpha"));
+
+ float pain_treshold, pain_treshold_lower, pain_treshold_lower_health;
+ pain_treshold = cvar("hud_damage_pain_treshold");
+ pain_treshold_lower = cvar("hud_damage_pain_treshold_lower");
+ pain_treshold_lower_health = cvar("hud_damage_pain_treshold_lower_health");
+
+ if(pain_treshold_lower && myhealth < pain_treshold_lower_health)
+ {
+ pain_treshold = pain_treshold - max(cvar("hud_damage_pain_treshold_pulsating_min"), fabs(sin(M_PI * time / cvar("hud_damage_pain_treshold_pulsating_period")))) * pain_treshold_lower * (1 - max(0, myhealth)/pain_treshold_lower_health);
+ }
+
+ myhealth_flash_temp = bound(0, myhealth_flash - pain_treshold, 1);
+
+ if(myhealth_prev < 1)
+ {
+ if(myhealth >= 1)
+ {
+ myhealth_flash = 0; // just spawned, clear the flash immediately
+ myhealth_flash_temp = 0;
+ }
+ else
+ {
+ myhealth_flash += cvar("hud_damage_fade_rate") * frametime; // dead
+ }
+ }
+
+ if(spectatee_status == -1 || intermission)
+ {
+ myhealth_flash = 0; // observing, or match ended
+ myhealth_flash_temp = 0;
+ }
+
+ myhealth_prev = myhealth;
+
+ drawpic(reticle_pos, "gfx/blood", reticle_size, '1 0 0', bound(0, myhealth_flash_temp, 1), DRAWFLAG_NORMAL);
+
// Draw the mouse cursor
// NOTE: drawpic must happen after R_RenderScene for some reason
//drawpic(getmousepos(), "gfx/cursor.tga", '11 14 0', '1 1 1', 1, 0);
self.draw2d();
self = e;
- // draw hud
- if(cvar("r_letterbox") == 0) {
- HUD_DrawCenterPrint(); // draw centerprint messages even if viewsize >= 120
- }
+ 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)
CSQC_common_hud();
// crosshair goes VERY LAST
- if(!scoreboard_active && !camera_active) {
+ if(!scoreboard_active && !camera_active && intermission != 2) {
+ string wcross_style;
+ float wcross_alpha, wcross_resolution;
+ wcross_style = cvar_string("crosshair");
+ if (wcross_style == "0")
+ return;
+ wcross_resolution = cvar("crosshair_size");
+ if (wcross_resolution == 0)
+ return;
+ wcross_alpha = cvar("crosshair_alpha");
+ if (wcross_alpha == 0)
+ return;
+
// TrueAim check
float shottype;
float bullets, ring_scale;
else
shottype = SHOTTYPE_HITWORLD;
- string wcross_style;
- wcross_style = cvar_string("crosshair");
+ vector wcross_color, wcross_size;
+ string wcross_wep, wcross_name;
+ float wcross_scale, wcross_blur;
- if (wcross_style != "0") {
- vector wcross_color, wcross_size;
- string wcross_wep, wcross_name;
- float wcross_alpha, wcross_scale, wcross_blur, wcross_resolution;
-
- wcross_color_x = cvar("crosshair_color_red");
- wcross_color_y = cvar("crosshair_color_green");
- wcross_color_z = cvar("crosshair_color_blue");
- wcross_alpha = cvar("crosshair_color_alpha");
- wcross_resolution = cvar("crosshair_size");
- if (cvar("crosshair_per_weapon")) {
- e = get_weaponinfo(activeweapon);
- if (e && e.netname != "")
+ if (cvar("crosshair_per_weapon") || cvar("crosshair_color_per_weapon")) {
+ e = get_weaponinfo(activeweapon);
+ if (e && e.netname != "")
+ {
+ wcross_wep = e.netname;
+ if(cvar("crosshair_per_weapon"))
{
- wcross_wep = e.netname;
- wcross_style = cvar_string(strcat("crosshair_", wcross_wep));
- if(wcross_style == "")
- wcross_style = e.netname;
-
- if(!cvar("crosshair_color_override"))
- {
- wcross_color_x = cvar(strcat("crosshair_", wcross_wep, "_color_red"));
- wcross_color_y = cvar(strcat("crosshair_", wcross_wep, "_color_green"));
- wcross_color_z = cvar(strcat("crosshair_", wcross_wep, "_color_blue"));
- }
-
- wcross_alpha *= cvar(strcat("crosshair_", wcross_wep, "_color_alpha"));
wcross_resolution *= cvar(strcat("crosshair_", wcross_wep, "_size"));
+ if (wcross_resolution == 0)
+ return;
+ wcross_alpha *= cvar(strcat("crosshair_", wcross_wep, "_alpha"));
+ if (wcross_alpha == 0)
+ return;
+
+ wcross_style = cvar_string(strcat("crosshair_", wcross_wep));
+ if(wcross_style == "" || wcross_style == "0")
+ wcross_style = wcross_wep;
}
}
+ }
+ if(wcross_wep != "" && cvar("crosshair_color_per_weapon"))
+ wcross_color = stov(cvar_string(strcat("crosshair_", wcross_wep, "_color")));
+ else
+ wcross_color = stov(cvar_string("crosshair_color"));
- wcross_name = strcat("gfx/crosshair", wcross_style);
+ wcross_name = strcat("gfx/crosshair", wcross_style);
- if(cvar("crosshair_effect_scalefade"))
+ if(cvar("crosshair_effect_scalefade"))
+ {
+ wcross_scale = wcross_resolution;
+ wcross_resolution = 1;
+ }
+ else
+ {
+ wcross_scale = 1;
+ }
+
+ if(cvar("crosshair_pickup"))
+ {
+ if(pickup_crosshair_time < getstatf(STAT_LAST_PICKUP))
{
- wcross_scale = wcross_resolution;
- wcross_resolution = 1;
+ pickup_crosshair_size = 1;
+ pickup_crosshair_time = getstatf(STAT_LAST_PICKUP);
}
+
+ if(pickup_crosshair_size > 0)
+ pickup_crosshair_size -= cvar("crosshair_pickup_speed") * frametime;
else
- {
- wcross_scale = 1;
- }
+ pickup_crosshair_size = 0;
- if(shottype == SHOTTYPE_HITENEMY)
- wcross_scale *= cvar("crosshair_hittest"); // is not queried if hittest is 0
- if(shottype == SHOTTYPE_HITTEAM)
- wcross_scale /= cvar("crosshair_hittest"); // is not queried if hittest is 0
+ wcross_scale += sin(pickup_crosshair_size) * cvar("crosshair_pickup");
+ }
- f = cvar("crosshair_effect_speed");
- if(f < 0)
- f *= -2 * g_weaponswitchdelay;
- if(wcross_scale != wcross_scale_goal_prev || wcross_alpha != wcross_alpha_goal_prev || wcross_color != wcross_color_goal_prev)
- {
- wcross_changedonetime = time + f;
- }
- if(wcross_name != wcross_name_goal_prev || wcross_resolution != wcross_resolution_goal_prev)
- {
- wcross_name_changestarttime = time;
- wcross_name_changedonetime = time + f;
- if(wcross_name_goal_prev_prev)
- strunzone(wcross_name_goal_prev_prev);
- wcross_name_goal_prev_prev = wcross_name_goal_prev;
- wcross_name_goal_prev = strzone(wcross_name);
- wcross_name_alpha_goal_prev_prev = wcross_name_alpha_goal_prev;
- wcross_resolution_goal_prev_prev = wcross_resolution_goal_prev;
- wcross_resolution_goal_prev = wcross_resolution;
- }
+ if(shottype == SHOTTYPE_HITENEMY)
+ wcross_scale *= cvar("crosshair_hittest"); // is not queried if hittest is 0
+ if(shottype == SHOTTYPE_HITTEAM)
+ wcross_scale /= cvar("crosshair_hittest"); // is not queried if hittest is 0
- wcross_scale_goal_prev = wcross_scale;
- wcross_alpha_goal_prev = wcross_alpha;
- wcross_color_goal_prev = wcross_color;
+ f = cvar("crosshair_effect_speed");
+ if(f < 0)
+ f *= -2 * g_weaponswitchdelay;
+ if(wcross_scale != wcross_scale_goal_prev || wcross_alpha != wcross_alpha_goal_prev || wcross_color != wcross_color_goal_prev)
+ {
+ wcross_changedonetime = time + f;
+ }
+ if(wcross_name != wcross_name_goal_prev || wcross_resolution != wcross_resolution_goal_prev)
+ {
+ wcross_name_changestarttime = time;
+ wcross_name_changedonetime = time + f;
+ if(wcross_name_goal_prev_prev)
+ strunzone(wcross_name_goal_prev_prev);
+ wcross_name_goal_prev_prev = wcross_name_goal_prev;
+ wcross_name_goal_prev = strzone(wcross_name);
+ wcross_name_alpha_goal_prev_prev = wcross_name_alpha_goal_prev;
+ wcross_resolution_goal_prev_prev = wcross_resolution_goal_prev;
+ wcross_resolution_goal_prev = wcross_resolution;
+ }
- if(shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && cvar("crosshair_hittest_blur") && !cvar("chase_active")))
- {
- wcross_blur = 1;
- wcross_alpha *= 0.75;
- }
- else
- wcross_blur = 0;
- // *_prev is at time-frametime
- // * is at wcross_changedonetime+f
- // what do we have at time?
- if(time < wcross_changedonetime)
- {
- f = frametime / (wcross_changedonetime - time + frametime);
- wcross_scale = f * wcross_scale + (1 - f) * wcross_scale_prev;
- wcross_alpha = f * wcross_alpha + (1 - f) * wcross_alpha_prev;
- wcross_color = f * wcross_color + (1 - f) * wcross_color_prev;
- }
+ wcross_scale_goal_prev = wcross_scale;
+ wcross_alpha_goal_prev = wcross_alpha;
+ wcross_color_goal_prev = wcross_color;
- wcross_scale_prev = wcross_scale;
- wcross_alpha_prev = wcross_alpha;
- wcross_color_prev = wcross_color;
+ if(shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && cvar("crosshair_hittest_blur") && !cvar("chase_active")))
+ {
+ wcross_blur = 1;
+ wcross_alpha *= 0.75;
+ }
+ else
+ wcross_blur = 0;
+ // *_prev is at time-frametime
+ // * is at wcross_changedonetime+f
+ // what do we have at time?
+ if(time < wcross_changedonetime)
+ {
+ f = frametime / (wcross_changedonetime - time + frametime);
+ wcross_scale = f * wcross_scale + (1 - f) * wcross_scale_prev;
+ wcross_alpha = f * wcross_alpha + (1 - f) * wcross_alpha_prev;
+ wcross_color = f * wcross_color + (1 - f) * wcross_color_prev;
+ }
- wcross_scale *= 1 - cvar("_menu_alpha");
- wcross_alpha *= 1 - cvar("_menu_alpha");
+ wcross_scale_prev = wcross_scale;
+ wcross_alpha_prev = wcross_alpha;
+ wcross_color_prev = wcross_color;
- // ring around crosshair representing bullets left in camping rifle clip
- if (activeweapon == WEP_CAMPINGRIFLE)
- {
- ring_scale = cvar("crosshair_campingrifle_ring_size");
- bullets = bound(0, getstati(STAT_BULLETS_LOADED), 8);
- }
- else
- bullets = 0;
+ 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);
+
+ if(nex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
+ nex_charge_movingavg = nex_charge;
+
+ // ring around crosshair representing bullets left in camping rifle clip
+ if (activeweapon == WEP_CAMPINGRIFLE && cr_maxbullets)
+ {
+ bullets = getstati(STAT_BULLETS_LOADED);
+ f = bound(0, bullets / cr_maxbullets, 1);
+
+ 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
+ {
+ vector rgb;
+ // indicate how much we're charging right now with an inner circle
+ a = cvar("crosshair_nexvelocity_currentcharge_alpha");
+ nex_charge_movingavg = (1 - cvar("crosshair_nexvelocity_currentcharge_movingavg_rate")) * nex_charge_movingavg + cvar("crosshair_nexvelocity_currentcharge_movingavg_rate") * nex_charge;
-#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)
+ rgb = eX * cvar("crosshair_nexvelocity_currentcharge_color_red") + eY * cvar("crosshair_nexvelocity_currentcharge_color_green") + eZ * cvar("crosshair_nexvelocity_currentcharge_color_blue");
+ DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, "gfx/crosshair_ring_inner.tga", bound(0, cvar("crosshair_nexvelocity_currentcharge_scale") * (nex_charge - nex_charge_movingavg), 1), rgb, wcross_alpha * a, DRAWFLAG_ADDITIVE);
+
+ // draw the charge
+ 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 \
+ do \
+ { \
+ 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); \
+ } \
+ else \
{ \
- 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); \
- } \
- else \
- { \
- M(0,0,sz,wcross_name,wcross_alpha); \
- } \
+ M(0,0,sz,wcross_name,wcross_alpha); \
} \
- while(0)
+ } \
+ while(0)
#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)
+ 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(sz,wcross_name,wcross_alpha) \
- CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,sz,wcross_name,wcross_alpha)
-
- if(time < wcross_name_changedonetime && wcross_name != wcross_name_goal_prev_prev && wcross_name_goal_prev_prev)
- {
- f = (wcross_name_changedonetime - time) / (wcross_name_changedonetime - wcross_name_changestarttime);
- wcross_size = drawgetimagesize(wcross_name_goal_prev_prev) * wcross_scale;
- CROSSHAIR_DRAW(wcross_resolution_goal_prev_prev, wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev);
- f = 1 - f;
- }
- else
- {
- f = 1;
- }
+ CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,sz,wcross_name,wcross_alpha)
- 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);
- wcross_name_alpha_goal_prev = f;
+ if(time < wcross_name_changedonetime && wcross_name != wcross_name_goal_prev_prev && wcross_name_goal_prev_prev)
+ {
+ f = (wcross_name_changedonetime - time) / (wcross_name_changedonetime - wcross_name_changestarttime);
+ wcross_size = drawgetimagesize(wcross_name_goal_prev_prev) * wcross_scale;
+ CROSSHAIR_DRAW(wcross_resolution_goal_prev_prev, wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev);
+ f = 1 - f;
+ }
+ else
+ {
+ f = 1;
}
+
+ wcross_size = drawgetimagesize(wcross_name) * wcross_scale;
+ 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;
}
else
{
if(autocvar__hud_configure)
HUD_Panel_Mouse();
- // 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);
+
+ // 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);
}
#define spider_h "gfx/vehicles/hud_bg.tga"
void CSQC_RAPTOR_HUD()
{
- float rockets, reload, heat, hp, shield, energy;
+ float reload, hp, shield, energy;
vector picsize, hudloc;
// Fetch health & ammo stats
float i;
if(!(gametype == GAME_RACE || gametype == GAME_CTS))
{
- acc_levels = tokenize(cvar_string("hud_panel_weapons_accuracy_color_levels"));
- if (acc_levels > MAX_ACCURACY_LEVELS)
- acc_levels = MAX_ACCURACY_LEVELS;
-
- for (i = 0; i < acc_levels; ++i)
- acc_lev[i] = stof(argv(i));
+ if(cvar_string("accuracy_color_levels") != acc_color_levels)
+ {
+ if(acc_color_levels)
+ strunzone(acc_color_levels);
+ acc_color_levels = strzone(cvar_string("accuracy_color_levels"));
+ acc_levels = tokenize(acc_color_levels);
+ if (acc_levels > MAX_ACCURACY_LEVELS)
+ acc_levels = MAX_ACCURACY_LEVELS;
+
+ for (i = 0; i < acc_levels; ++i)
+ acc_lev[i] = stof(argv(i));
+ }
+ // let know that acc_col[] needs to be loaded
+ acc_col_x[0] = -1;
}
- // hud first
- HUD_Main();
+ HUD_Main(); // always run these functions for alpha checks
+ HUD_DrawScoreboard();
- // scoreboard/accuracy
- if (intermission == 2 && !scoreboard_showaccuracy && !scoreboard_showscores) // map voting screen
+ if (scoreboard_active) // scoreboard/accuracy
+ {
+ HUD_Reset();
+ // HUD_DrawScoreboard takes care of centerprint_start
+ }
+ else if (intermission == 2) // map voting screen
{
HUD_FinaleOverlay();
HUD_Reset();
- }
- else if(scoreboard_showaccuracy && spectatee_status != -1)
- HUD_DrawAccuracyStats();
- else
- HUD_DrawScoreboard();
- if (scoreboard_showscores || scoreboard_showaccuracy || scoreboard_showscores_force || getstati(STAT_HEALTH) <= 0 || intermission == 1)
- HUD_Reset();
+ centerprint_start_x = 0;
+ centerprint_start_y = cvar("scr_centerpos") * vid_conheight;
+ }
+ else // hud
+ {
+ centerprint_start_x = 0;
+ centerprint_start_y = cvar("scr_centerpos") * vid_conheight;
+ }
+ HUD_DrawCenterPrint();
break;
case HUD_SPIDERBOT: