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;
}
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())
{
float HUD_WouldDrawScoreboard ();
float view_set;
float camera_mode;
+float reticle_type;
string NextFrameCommand;
void CSQC_SPIDER_HUD();
void CSQC_RAPTOR_HUD();
float f, i, j;
vector v, vo;
+ vector reticle_pos, reticle_size;
+
WaypointSprite_Load();
if(spectatee_status)
input_angles = warpzone_fixview_cl_viewangles;
view_angles = warpzone_fixview_angles;
- if(cvar("cl_lockview") || hud_configure)
+ if(cvar("cl_lockview") || autocvar__hud_configure)
{
pmove_org = freeze_pmove_org;
input_angles = view_angles = freeze_input_angles;
if(intermission && !isdemo() && !(calledhooks & HOOK_END))
if(calledhooks & HOOK_START)
{
- localcmd("\ncl_hook_gameend;");
+ localcmd("\ncl_hook_gameend\n");
calledhooks |= HOOK_END;
}
if(last_weapon != activeweapon) {
weapontime = time;
last_weapon = activeweapon;
+
+ e = get_weaponinfo(activeweapon);
+ if(e.netname != "")
+ localcmd(strcat("\ncl_hook_activeweapon ", e.netname), "\n");
+ else
+ localcmd("\ncl_hook_activeweapon none\n");
}
// ALWAYS Clear Current Scene First
// next R_RenderScene call
drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0);
+ // 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 || zoomscript_caught)
+ reticle_type = 1; // normal zoom
+ else if(activeweapon == WEP_NEX && button_attack2 || activeweapon == WEP_CAMPINGRIFLE && button_attack2)
+ reticle_type = 2; // nex zoom
+
+ if(cvar("cl_reticle_stretch"))
+ {
+ reticle_size_x = vid_conwidth;
+ reticle_size_y = vid_conheight;
+ reticle_pos_x = 0;
+ reticle_pos_y = 0;
+ }
+ else
+ {
+ reticle_size_x = max(vid_conwidth, vid_conheight);
+ reticle_size_y = max(vid_conwidth, vid_conheight);
+ reticle_pos_x = (vid_conwidth - reticle_size_x) / 2;
+ 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 && 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 && f)
+ drawpic(reticle_pos, "gfx/reticle_nex", reticle_size, '1 1 1', f * cvar("cl_reticle_item_nex"), 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
- }
-
float hud;
hud = getstati(STAT_HUD);
if(hud == HUD_SPIDERBOT)
CSQC_common_hud();
// crosshair goes VERY LAST
- if(!scoreboard_active && !camera_active) {
+ if(!scoreboard_active && !camera_active && intermission != 2) {
// TrueAim check
float shottype;
float bullets, ring_scale;
if (activeweapon == WEP_CAMPINGRIFLE)
{
ring_scale = cvar("crosshair_campingrifle_ring_size");
- bullets = bound(0, getstati(STAT_BULLETS_LOADED), 8);
+ bullets = bound(0, getstati(STAT_BULLETS_LOADED), 4);
}
else
bullets = 0;
#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/hud/", cvar_string("hud_skin"), "/rifle_ring_", ftos(bullets)), sz * wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
+ 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)
#define CROSSHAIR_DO_BLUR(M,sz,wcross_name,wcross_alpha) \
do \
cvar_set("vid_conheight", h0);
}
- if(hud_configure)
+ 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
switch(hud)
{
case HUD_NORMAL:
- // hud first
- HUD_Main();
+ // do some accuracy var caching
+ 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;
- // scoreboard/accuracy
- if (intermission == 2 && !scoreboard_showaccuracy && !scoreboard_showscores) // map voting screen
+ for (i = 0; i < acc_levels; ++i)
+ acc_lev[i] = stof(argv(i));
+ }
+
+ 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
+ {
+ 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: