X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2FView.qc;h=d2268ed58a32bb6e4d329f432ba28c84a52c33c7;hb=669ea85f389d64cf59d47c24f9b447843a4e9d57;hp=c42512a1cab4d06d2d67b7eca9e7029ce9106cc7;hpb=0e7ed909bffb4ff21f0c68d163edfc17487e380a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index c42512a1c..9953af664 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -79,11 +79,11 @@ void Porto_Draw() 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; } @@ -102,7 +102,7 @@ void CheckForGamestartChange() { 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(); @@ -137,7 +137,7 @@ vector GetCurrentFov(float fov) 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()) { @@ -291,6 +291,10 @@ float TrueAimCheck() mi = '-16 -16 -16'; ma = '16 16 16'; break; + case WEP_SEEKER: // projectile has a size! + mi = '-2 -2 -2'; + ma = '2 2 2'; + break; case WEP_ELECTRO: // projectile has a size! mi = '0 0 -3'; ma = '0 0 -3'; @@ -332,21 +336,33 @@ float TrueAimCheck() void CSQC_common_hud(void); -void CSQC_kh_hud(void); -void CSQC_ctf_hud(void); void PostInit(void); void CSQC_Demo_Camera(); -float Sbar_WouldDrawScoreboard (); +float HUD_WouldDrawScoreboard (); float view_set; float camera_mode; +float reticle_type; string NextFrameCommand; void CSQC_SPIDER_HUD(); +void CSQC_RAPTOR_HUD(); + +vector freeze_pmove_org, freeze_input_angles; +entity nightvision_noise, nightvision_noise2; + void CSQC_UpdateView(float w, float h) { entity e; float fov; float f, i, j; vector v, vo; + vector vf_size, vf_min; + + 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; WaypointSprite_Load(); @@ -359,10 +375,23 @@ void CSQC_UpdateView(float w, float h) vo = '0 0 1' * getstati(STAT_VIEWHEIGHT); warpzone_fixview_origin = pmove_org + vo; - warpzone_fixview_angles = input_angles; + warpzone_fixview_cl_viewangles = input_angles; + warpzone_fixview_angles = view_angles; WarpZone_FixView(); pmove_org = warpzone_fixview_origin - vo; - input_angles = warpzone_fixview_angles; + input_angles = warpzone_fixview_cl_viewangles; + view_angles = warpzone_fixview_angles; + + if(cvar("cl_lockview") || autocvar__hud_configure) + { + pmove_org = freeze_pmove_org; + input_angles = view_angles = freeze_input_angles; + R_SetView(VF_ORIGIN, pmove_org + vo); + R_SetView(VF_ANGLES, view_angles); + //R_SetView(VF_CL_VIEWANGLES, input_angles); + } + freeze_pmove_org = pmove_org; + freeze_input_angles = input_angles; // Render the Scene if(!intermission || !view_set) @@ -376,9 +405,6 @@ void CSQC_UpdateView(float w, float h) view_set = 1; } - vid_width = w; - vid_height = h; - #ifdef BLURTEST if(time > blurtest_time0 && time < blurtest_time1) { @@ -398,6 +424,7 @@ void CSQC_UpdateView(float w, float h) } #endif + TargetMusic_Advance(); Fog_Force(); drawframetime = max(0.000001, time - drawtime); @@ -412,7 +439,7 @@ void CSQC_UpdateView(float w, float h) if(intermission && !isdemo() && !(calledhooks & HOOK_END)) if(calledhooks & HOOK_START) { - localcmd("\ncl_hook_gameend;"); + localcmd("\ncl_hook_gameend\n"); calledhooks |= HOOK_END; } @@ -441,27 +468,34 @@ void CSQC_UpdateView(float w, float h) } } - sbar_alpha_fg = cvar("sbar_alpha_fg" ) * (1 - cvar("_menu_alpha")); - sbar_currentammo = cvar("sbar_showcurrentammo"); - sbar_hudselector = cvar("sbar_hudselector"); - sbar_accuracy_hud = cvar_or("sbar_accuracy_hud", 1); + hud_accuracy_hud = cvar_or("hud_accuracy_hud", 1); ColorTranslateMode = cvar("cl_stripcolorcodes"); activeweapon = getstati(STAT_SWITCHWEAPON); f = cvar("teamplay"); if(f != teamplay) { teamplay = f; - Sbar_InitScores(); + HUD_InitScores(); } 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 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); @@ -501,15 +535,15 @@ void CSQC_UpdateView(float w, float h) // Draw the Crosshair float scoreboard_active; - scoreboard_active = Sbar_WouldDrawScoreboard(); + 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) - R_SetView(VF_DRAWENGINESBAR, 0); + R_SetView(VF_DRAWENGINEHUD, 0); // fetch this one only once per frame - sbar_showbinds = cvar("sbar_showbinds"); - sbar_showbinds_limit = cvar("sbar_showbinds_limit"); + hud_showbinds = cvar("hud_showbinds"); + hud_showbinds_limit = cvar("hud_showbinds_limit"); // Update the mouse position /* @@ -532,6 +566,98 @@ void CSQC_UpdateView(float w, float h) // next R_RenderScene call drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0); + if(cvar("r_fakelight") >= 2 || cvar("r_fullbright")) + { + // apply night vision effect + vector rgb, tc_00, tc_01, tc_10, tc_11; + float a; + + 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 || 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); @@ -555,39 +681,6 @@ void CSQC_UpdateView(float w, float h) self.draw2d(); self = e; - // draw radar - if( - ons_showmap - || - ( - !scoreboard_active - && - cvar_string("cl_teamradar") != "0" - && - ( - cvar("cl_teamradar") == 2 - || - teamplay - ) - ) - ) - teamradar_view(); - - // draw sbar - if(cvar("r_letterbox") == 0) { - if (cvar("cl_showpressedkeys")) { // draw pressed keys when spectating and playing - if(spectatee_status > 0 || cvar("cl_showpressedkeys") >= 2) - Sbar_DrawPressedKeys(); - } - - if (cvar("cl_showspeed")) - Sbar_ShowSpeed(); - if (cvar("cl_showacceleration")) - Sbar_ShowAcceleration(); - - Sbar_DrawCenterPrint(); // draw centerprint messages even if viewsize >= 120 - } - float hud; hud = getstati(STAT_HUD); if(hud == HUD_SPIDERBOT) @@ -596,14 +689,35 @@ void CSQC_UpdateView(float w, float h) } else if(hud == HUD_WAKIZASHI) CSQC_WAKIZASHI_HUD(); + else if(hud == HUD_RAPTOR) + CSQC_RAPTOR_HUD(); else { if(cvar("r_letterbox") == 0) if(cvar("viewsize") < 120) CSQC_common_hud(); + + precache_pic("gfx/nex_ring.tga"); + // ring around crosshair representing velocity-dependent damage for the nex + if (activeweapon == WEP_NEX) + { + float f, a, curvel; + vector rgb; + + rgb_x = cvar("crosshair_nexvelocity_color_red"); + rgb_y = cvar("crosshair_nexvelocity_color_green"); + rgb_z = cvar("crosshair_nexvelocity_color_blue"); + a = cvar("crosshair_nexvelocity_alpha"); + + curvel = vlen('1 0 0' * pmove_vel_x + '0 1 0' * pmove_vel_y); + f = bound(0, (curvel - nex_minvelocity) / (nex_maxvelocity - nex_minvelocity), 1); + + DrawCircleClippedPic('0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight, 0.1 * vid_conheight, "gfx/nex_ring.tga", f, rgb, a, DRAWFLAG_ADDITIVE); + } + // crosshair goes VERY LAST - if(!scoreboard_active && !ons_showmap && !camera_active) { + if(!scoreboard_active && !camera_active && intermission != 2) { // TrueAim check float shottype; float bullets, ring_scale; @@ -733,13 +847,13 @@ void CSQC_UpdateView(float w, float h) 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/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 \ @@ -780,7 +894,12 @@ void CSQC_UpdateView(float w, float h) { 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; } } @@ -839,31 +958,36 @@ void CSQC_UpdateView(float w, float h) cvar_set("vid_conheight", h0); } + if(autocvar__hud_configure) + HUD_Panel_Mouse(); + + // 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); } -void Sbar_Draw(); #define spider_h "gfx/vehicles/hud_bg.tga" #define spider_b "gfx/vehicles/sbot.tga" #define spider_r "gfx/vehicles/sbot_rpods.tga" #define spider_g "gfx/vehicles/sbot_mguns.tga" #define spider_s "gfx/vehicles/shiled.tga" - #define spider_a1 "gfx/hud/sb_rocket.tga" #define spider_a2 "gfx/sb_bullets.tga" void CSQC_SPIDER_HUD() { - float rockets, reload, heat, hp, shield, i; + float rockets, reload, heat, hp, shield; vector picsize, hudloc; // Fetch health & ammo stats hp = bound(0,getstatf(STAT_VEHICLESTAT_HEALTH), 1); shield = bound(0,getstatf(STAT_VEHICLESTAT_SHIELD), 1); - heat = min(getstatf(STAT_VEHICLESTAT_RELOAD1), 1); + heat = min(getstatf(STAT_VEHICLESTAT_RELOAD1), 2); rockets = getstati(STAT_VEHICLESTAT_AMMO2); reload = min(getstatf(STAT_VEHICLESTAT_RELOAD2), 1); @@ -882,10 +1006,8 @@ void CSQC_SPIDER_HUD() picsize = drawgetimagesize(spider_a2) * 0.5; drawpic(hudloc + '120 96 0', spider_a2, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); - drawstring(hudloc + '145 19 0', strcat(ftos(rint(hp * 100)), "%"),'15 15 0','0 1 0', 1, DRAWFLAG_NORMAL); drawstring(hudloc + '175 34 0', strcat(ftos(rint(shield * 100)), "%"),'15 15 0','0 0 1', 1, DRAWFLAG_NORMAL); - drawstring(hudloc + '136 102 0', strcat(ftos(100 - rint(heat * 100)), "%"),'14 14 0','1 1 0', 1, DRAWFLAG_NORMAL); picsize = drawgetimagesize(spider_a1) * 0.85; @@ -956,10 +1078,77 @@ void CSQC_SPIDER_HUD() } */ - if (sb_showscores) + if (scoreboard_showscores) { - Sbar_DrawScoreboard(); - Sbar_DrawCenterPrint(); + HUD_DrawScoreboard(); + HUD_DrawCenterPrint(); + } + +} + +#define raptor_h "gfx/vehicles/hud_bg.tga" +#define raptor_b "gfx/vehicles/raptor.tga" +#define raptor_g1 "gfx/vehicles/raptor_guns.tga" +#define raptor_g2 "gfx/vehicles/raptor_bombs.tga" +#define raptor_s "gfx/vehicles/shiled.tga" + +void CSQC_RAPTOR_HUD() +{ + float rockets, reload, heat, hp, shield, energy; + vector picsize, hudloc; + + // Fetch health & ammo stats + hp = bound(0,getstatf(STAT_VEHICLESTAT_HEALTH), 1); + shield = bound(0,getstatf(STAT_VEHICLESTAT_SHIELD), 1); + reload = min(getstatf(STAT_VEHICLESTAT_RELOAD1), 1); + energy = min(getstatf(STAT_VEHICLESTAT_ENERGY), 1); + + // Draw the crosshairs + picsize = drawgetimagesize(SPIDER_CROSS); + picsize_x *= cvar_or("cl_vehicle_spiderbot_cross_size", 1); + picsize_y *= cvar_or("cl_vehicle_spiderbot_cross_size", 1); + drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), SPIDER_CROSS, picsize, '1 1 1', cvar_or("cl_vehicle_spiderbot_cross_alpha",0.6), DRAWFLAG_NORMAL); + + hudloc_y = 4; + hudloc_x = 4; + + picsize = drawgetimagesize(raptor_h) * 0.5; + drawpic(hudloc, raptor_h, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); + + picsize = drawgetimagesize(spider_a2) * 0.5; + drawpic(hudloc + '120 96 0', spider_a2, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); + + drawstring(hudloc + '145 19 0', strcat(ftos(rint(hp * 100)), "%"),'15 15 0','0 1 0', 1, DRAWFLAG_NORMAL); + drawstring(hudloc + '175 34 0', strcat(ftos(rint(shield * 100)), "%"),'15 15 0','0 0 1', 1, DRAWFLAG_NORMAL); + drawstring(hudloc + '136 102 0', strcat(ftos(rint(energy * 100)), "%"),'15 15 0','0.5 0.5 1', 1, DRAWFLAG_NORMAL); + + + picsize = drawgetimagesize(spider_a1) * 0.85; + if(reload == 1) + { + drawpic(hudloc + '132 54 0', spider_a1, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); + drawstring(hudloc + '179 69 0', strcat(ftos(rint(reload * 100)), "%"),'14 14 0','0 1 0', 0.5, DRAWFLAG_NORMAL); + } + else + { + drawpic(hudloc + '132 54 0', spider_a1, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); + drawstring(hudloc + '179 69 0', strcat(ftos(rint(reload * 100)), "%"),'14 14 0','0 0 1', 1, DRAWFLAG_NORMAL); + } + + picsize = drawgetimagesize(raptor_b) * 0.5; + hudloc_y = 10.5; + hudloc_x = 10.5; + + drawpic(hudloc, raptor_s, picsize, '1 1 1', shield, DRAWFLAG_NORMAL); + drawpic(hudloc, raptor_b, picsize, '0 1 0' * hp + '1 0 0' * (1 - hp), 1, DRAWFLAG_NORMAL); + drawpic(hudloc, raptor_g1, picsize, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL); + drawpic(hudloc, raptor_g2, picsize, '1 1 1' * reload + '1 0 0' * (1 - reload), 1, DRAWFLAG_NORMAL); + + + if (scoreboard_showscores) + { + HUD_DrawScoreboard(); + HUD_DrawCenterPrint(); } } @@ -1066,10 +1255,10 @@ const float STAT_VEHICLESTAT_RELOAD2 = 66; - if (sb_showscores) + if (scoreboard_showscores) { - Sbar_DrawScoreboard(); - Sbar_DrawCenterPrint(); + HUD_DrawScoreboard(); + HUD_DrawCenterPrint(); } } @@ -1077,7 +1266,7 @@ const float STAT_VEHICLESTAT_RELOAD2 = 66; void CSQC_common_hud(void) { - // Sbar_SortFrags(); done in Sbar_Draw + // HUD_SortFrags(); done in HUD_Draw float hud; hud = getstati(STAT_HUD); @@ -1085,7 +1274,41 @@ void CSQC_common_hud(void) switch(hud) { case HUD_NORMAL: - Sbar_Draw(); + // 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; + + 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(); + + 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: