X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fview.qc;h=65df30fd89ff5ec10f4eb3804cac9e7d3776c384;hp=d8aada77ec3e14b825f092f31e49e38a5cb04201;hb=63de1215428d078d5fb2021c49edf59a7900cef9;hpb=d09ad7bf5ecb60b1eab38a2324c6a8ad361fd15d diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index d8aada77e..65df30fd8 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -21,6 +22,8 @@ #include #include +#include + #include #include #include @@ -122,7 +125,6 @@ void calc_followmodel_ofs(entity view) float frac; vector gunorg = '0 0 0'; static vector vel_average; - static vector gunorg_prev = '0 0 0'; static vector gunorg_adjustment_highpass; static vector gunorg_adjustment_lowpass; @@ -312,6 +314,9 @@ void viewmodel_draw(entity this) } { string name = wep.mdl; + string newname = wep.wr_viewmodel(wep, this); + if(newname) + name = newname; bool swap = name != this.name_last; // if (swap) { @@ -321,7 +326,7 @@ void viewmodel_draw(entity this) this.viewmodel_angles = this.angles; } anim_update(this); - if (!this.animstate_override && !this.animstate_looping) + if ((!this.animstate_override && !this.animstate_looping) || time > this.animstate_endtime) anim_set(this, this.anim_idle, true, false, false); } float f = 0; // 0..1; 0: fully active @@ -354,7 +359,6 @@ void viewmodel_draw(entity this) setorigin(this, this.origin); } -entity viewmodels[MAX_WEAPONSLOTS]; STATIC_INIT(viewmodel) { for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) viewmodels[slot] = new(viewmodel); @@ -386,9 +390,9 @@ void Porto_Draw(entity this) vector pos = view_origin; vector dir = view_forward; - if (angles_held_status) + if (wepent.angles_held_status) { - makevectors(angles_held); + makevectors(wepent.angles_held); dir = v_forward; } @@ -518,7 +522,7 @@ vector GetCurrentFov(float fov) current_zoomfraction = (current_viewzoom - 1) / (1/zoomfactor - 1); if(zoomsensitivity < 1) - setsensitivityscale(pow(current_viewzoom, 1 - zoomsensitivity)); + setsensitivityscale(current_viewzoom ** (1 - zoomsensitivity)); else setsensitivityscale(1); @@ -662,7 +666,7 @@ float TrueAimCheck(entity wepent) mv = MOVE_NORMAL; if(zoomscript_caught) { - tracebox(view_origin, '0 0 0', '0 0 0', view_origin + view_forward * MAX_SHOT_DISTANCE, mv, ta); + tracebox(view_origin, '0 0 0', '0 0 0', view_origin + view_forward * max_shot_distance, mv, ta); return EnemyHitCheck(); } break; @@ -688,7 +692,7 @@ float TrueAimCheck(entity wepent) vecs = decompressShotOrigin(STAT(SHOTORG)); - traceline(traceorigin, traceorigin + view_forward * MAX_SHOT_DISTANCE, mv, ta); + traceline(traceorigin, traceorigin + view_forward * max_shot_distance, mv, ta); trueaimpoint = trace_endpos; if(vdist((trueaimpoint - traceorigin), <, g_trueaim_minrange)) @@ -755,7 +759,7 @@ bool WantEventchase(entity this) { if(autocvar_cl_orthoview) return false; - if(intermission) + if(STAT(GAME_STOPPED) || intermission) return true; if(this.viewloc) return true; @@ -839,8 +843,8 @@ void HitSound() float a = autocvar_cl_hitsound_max_pitch; float b = autocvar_cl_hitsound_min_pitch; float c = autocvar_cl_hitsound_nom_damage; - float x = unaccounted_damage; - float pitch_shift = (b*x*(a-1) + a*c*(1-b)) / (x*(a-1) + c*(1-b)); + float d = unaccounted_damage; + float pitch_shift = (b*d*(a-1) + a*c*(1-b)) / (d*(a-1) + c*(1-b)); // if sound variation is disabled, set pitch_shift to 1 if (autocvar_cl_hitsound == 1) @@ -871,6 +875,14 @@ void HitSound() sound(NULL, CH_INFO, SND_TYPEHIT, VOL_BASE, ATTN_NONE); typehit_time_prev = typehit_time; } + + static float kill_time_prev = 0; + float kill_time = STAT(KILL_TIME); + if (COMPARE_INCREASING(kill_time, kill_time_prev) > autocvar_cl_hitsound_antispam_time) + { + sound(NULL, CH_INFO, SND_KILL, VOL_BASE, ATTN_NONE); + kill_time_prev = kill_time; + } } vector crosshair_getcolor(entity this, float health_stat) @@ -892,7 +904,7 @@ vector crosshair_getcolor(entity this, float health_stat) case 2: // crosshair_color_by_health { - float x = health_stat; + float hp = health_stat; //x = red //y = green @@ -900,33 +912,33 @@ vector crosshair_getcolor(entity this, float health_stat) wcross_color.z = 0; - if(x > 200) + if(hp > 200) { wcross_color.x = 0; wcross_color.y = 1; } - else if(x > 150) + else if(hp > 150) { - wcross_color.x = 0.4 - (x-150)*0.02 * 0.4; - wcross_color.y = 0.9 + (x-150)*0.02 * 0.1; + wcross_color.x = 0.4 - (hp-150)*0.02 * 0.4; + wcross_color.y = 0.9 + (hp-150)*0.02 * 0.1; } - else if(x > 100) + else if(hp > 100) { - wcross_color.x = 1 - (x-100)*0.02 * 0.6; - wcross_color.y = 1 - (x-100)*0.02 * 0.1; - wcross_color.z = 1 - (x-100)*0.02; + wcross_color.x = 1 - (hp-100)*0.02 * 0.6; + wcross_color.y = 1 - (hp-100)*0.02 * 0.1; + wcross_color.z = 1 - (hp-100)*0.02; } - else if(x > 50) + else if(hp > 50) { wcross_color.x = 1; wcross_color.y = 1; - wcross_color.z = 0.2 + (x-50)*0.02 * 0.8; + wcross_color.z = 0.2 + (hp-50)*0.02 * 0.8; } - else if(x > 20) + else if(hp > 20) { wcross_color.x = 1; - wcross_color.y = (x-20)*90/27/100; - wcross_color.z = (x-20)*90/27/100 * 0.2; + wcross_color.y = (hp-20)*90/27/100; + wcross_color.z = (hp-20)*90/27/100 * 0.2; } else { @@ -957,7 +969,7 @@ void HUD_Crosshair(entity this) { float f, i, j; vector v; - if(!scoreboard_active && !camera_active && intermission != 2 && + if(!scoreboard_active && !camera_active && intermission != 2 && !STAT(GAME_STOPPED) && spectatee_status != -1 && !csqcplayer.viewloc && !MUTATOR_CALLHOOK(DrawCrosshair) && !HUD_MinigameMenu_IsOpened() ) { @@ -989,7 +1001,7 @@ void HUD_Crosshair(entity this) float shottype; // wcross_origin = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight; - wcross_origin = project_3d_to_2d(view_origin + MAX_SHOT_DISTANCE * view_forward); + wcross_origin = project_3d_to_2d(view_origin + max_shot_distance * view_forward); wcross_origin.z = 0; if(autocvar_crosshair_hittest) { @@ -1731,7 +1743,7 @@ void CSQC_UpdateView(entity this, float w, float h) t = (time - blurtest_time0) / (blurtest_time1 - blurtest_time0); r = t * blurtest_radius; - f = 1 / pow(t, blurtest_power) - 1; + f = 1 / (t ** blurtest_power) - 1; cvar_set("r_glsl_postprocess", "1"); cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(r), " ", ftos(f), " 0 0")); @@ -1758,8 +1770,8 @@ void CSQC_UpdateView(entity this, float w, float h) if(!postinit) PostInit(); - if(intermission && !gameover_time) - gameover_time = time; + if(intermission && !intermission_time) + intermission_time = time; if(intermission && !isdemo() && !(calledhooks & HOOK_END)) { @@ -1949,7 +1961,7 @@ void CSQC_UpdateView(entity this, float w, float h) if(autocvar_cl_reticle) { - string reticle_image = ""; + string reticle_image = string_null; bool wep_zoomed = false; for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) { @@ -1958,7 +1970,7 @@ void CSQC_UpdateView(entity this, float w, float h) if(wep != WEP_Null && wep.wr_zoom) { bool do_zoom = wep.wr_zoom(wep, NULL); - if(wep.w_reticle && wep.w_reticle != "") + if(!reticle_image && wep.w_reticle && wep.w_reticle != "") reticle_image = wep.w_reticle; wep_zoomed += do_zoom; } @@ -1974,7 +1986,7 @@ void CSQC_UpdateView(entity this, float w, float h) } else if(wep_zoomed && autocvar_cl_reticle_weapon) { - if(reticle_image && reticle_image != "") { reticle_type = 2; } + if(reticle_image) { reticle_type = 2; } else { reticle_type = 0; } } else if(button_zoom || zoomscript_caught) @@ -2010,7 +2022,7 @@ void CSQC_UpdateView(entity this, float w, float h) switch(reticle_type) { case 1: drawpic(reticle_pos, "gfx/reticle_normal", reticle_size, '1 1 1', f * autocvar_cl_reticle_normal_alpha, DRAWFLAG_NORMAL); break; - case 2: drawpic(reticle_pos, reticle_image, reticle_size, '1 1 1', f * autocvar_cl_reticle_weapon_alpha, DRAWFLAG_NORMAL); break; + case 2: if(reticle_image) drawpic(reticle_pos, reticle_image, reticle_size, '1 1 1', f * autocvar_cl_reticle_weapon_alpha, DRAWFLAG_NORMAL); break; } } }