X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fview.qc;h=9b44d903de0c20be6cfbe5c43d68903714f5ac66;hb=2d0db2a2b98d9ee669f1ee607f3e778ab8806a4f;hp=b1593cf3a222315b6f7d6c66514d0bb6c25932c6;hpb=7225542c271470021b0006aadce6d7db255ec2af;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index b1593cf3a..9b44d903d 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -133,8 +133,8 @@ void calc_followmodel_ofs(entity view) vel = view.velocity; else { - vector forward = '0 0 0', right = '0 0 0', up = '0 0 0'; - MAKEVECTORS(makevectors, view_angles, forward, right, up); + vector forward, right, up; + MAKE_VECTORS(view_angles, forward, right, up); vel.x = view.velocity * forward; vel.y = view.velocity * right * -1; vel.z = view.velocity * up; @@ -159,8 +159,8 @@ void calc_followmodel_ofs(entity view) if (autocvar_cl_followmodel_velocity_absolute) { vector fixed_gunorg; - vector forward = '0 0 0', right = '0 0 0', up = '0 0 0'; - MAKEVECTORS(makevectors, view_angles, forward, right, up); + vector forward, right, up; + MAKE_VECTORS(view_angles, forward, right, up); fixed_gunorg.x = gunorg * forward; fixed_gunorg.y = gunorg * right * -1; fixed_gunorg.z = gunorg * up; @@ -493,15 +493,16 @@ vector GetCurrentFov(float fov) curspeed = 0; else { - makevectors(view_angles); + vector forward, right, up; + MAKE_VECTORS(view_angles, forward, right, up); v = pmove_vel; if(csqcplayer) v = csqcplayer.velocity; switch(autocvar_cl_velocityzoom_type) { - case 3: curspeed = max(0, v_forward * v); break; - case 2: curspeed = (v_forward * v); break; + case 3: curspeed = max(0, forward * v); break; + case 2: curspeed = (forward * v); break; case 1: default: curspeed = vlen(v); break; } } @@ -655,6 +656,9 @@ float TrueAimCheck(entity wepent) traceline(traceorigin, traceorigin + view_forward * max_shot_distance, mv, ta); trueaimpoint = trace_endpos; + // move trueaimpoint a little bit forward to make the final tracebox reliable + // since it sometimes doesn't reach a teammate by a hair + trueaimpoint += view_forward; if(vdist((trueaimpoint - traceorigin), <, g_trueaim_minrange)) trueaimpoint = traceorigin + view_forward * g_trueaim_minrange; @@ -714,7 +718,7 @@ vector liquidcolor_prev; float eventchase_current_distance; float eventchase_running; -int WantEventchase(entity this) +int WantEventchase(entity this, bool want_vehiclechase) { if(autocvar_cl_orthoview) return 0; @@ -724,7 +728,7 @@ int WantEventchase(entity this) return 1; if(spectatee_status >= 0) { - if(hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0)) + if(want_vehiclechase) return 1; if(MUTATOR_CALLHOOK(WantEventchase, this)) return 1; @@ -776,7 +780,7 @@ void UpdateDamage() if (damage_dealt_time != damage_dealt_time_prev) { unaccounted_damage += unaccounted_damage_new; - LOG_TRACE("dmg total: ", ftos(unaccounted_damage), " (+", ftos(unaccounted_damage_new), ")"); + //LOG_TRACE("dmg total: ", ftos(unaccounted_damage), " (+", ftos(unaccounted_damage_new), ")"); } damage_dealt_time_prev = damage_dealt_time; @@ -980,8 +984,9 @@ void HUD_Crosshair(entity this) if(csqcplayer && crosshair_chase_playeralpha && crosshair_chase_playeralpha < 1) { traceline(view_origin, view_origin + max_shot_distance * view_forward, MOVE_NORMAL, NULL); - if(trace_ent == csqcplayer) - csqcplayer.alpha = crosshair_chase_playeralpha; + float myalpha = (!csqcplayer.m_alpha) ? 1 : csqcplayer.m_alpha; + if(trace_ent == csqcplayer && STAT(HEALTH) > 0) + csqcplayer.alpha = min(crosshair_chase_playeralpha, myalpha); else csqcplayer.alpha = csqcplayer.m_alpha; } @@ -1093,8 +1098,10 @@ void HUD_Crosshair(entity this) wcross_color.z += sin(hitindication_crosshair_size) * hitindication_color.z; } - if(shottype == SHOTTYPE_HITENEMY) - wcross_scale *= autocvar_crosshair_hittest; // is not queried if hittest is 0 + // no effects needed for targeting enemies, this can't possibly span all valid targets! + // just show for teammates to give a sign that they're an invalid target + //if(shottype == SHOTTYPE_HITENEMY) + //wcross_scale *= autocvar_crosshair_hittest; // is not queried if hittest is 0 if(shottype == SHOTTYPE_HITTEAM) wcross_scale /= autocvar_crosshair_hittest; // is not queried if hittest is 0 @@ -1120,7 +1127,7 @@ void HUD_Crosshair(entity this) wcross_alpha_goal_prev = wcross_alpha; wcross_color_goal_prev = wcross_color; - if(spectatee_status == -1 && shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && autocvar_crosshair_hittest_blur && !autocvar_chase_active)) + if(spectatee_status == 0 && (shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && autocvar_crosshair_hittest_blur && !autocvar_chase_active))) { wcross_blur = 1; wcross_alpha *= 0.75; @@ -1671,7 +1678,7 @@ void CSQC_UpdateView(entity this, float w, float h) else if(autocvar_chase_active == -2) cvar_set("chase_active", "0"); - float vehicle_chase = (hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0)); + bool vehicle_chase = (hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0)); float vehicle_viewdist = 0; vector vehicle_viewofs = '0 0 0'; @@ -1683,10 +1690,14 @@ void CSQC_UpdateView(entity this, float w, float h) Vehicle info = Vehicles_from(hud); vehicle_viewdist = info.height; vehicle_viewofs = info.view_ofs; + if(vehicle_viewdist < 0) // when set below 0, this vehicle doesn't use third person view (gunner slots) + vehicle_chase = false; } + else + vehicle_chase = false; } - int eventchase = WantEventchase(this); + int eventchase = WantEventchase(this, vehicle_chase); if (eventchase) { vector current_view_origin_override = '0 0 0'; @@ -1747,18 +1758,19 @@ void CSQC_UpdateView(entity this, float w, float h) else if(eventchase_current_distance != chase_distance) eventchase_current_distance = chase_distance; - makevectors(view_angles); + vector forward, right, up; + MAKE_VECTORS(view_angles, forward, right, up); - vector eventchase_target_origin = (current_view_origin - (v_forward * eventchase_current_distance)); + vector eventchase_target_origin = (current_view_origin - (forward * eventchase_current_distance)); WarpZone_TraceBox(current_view_origin, autocvar_cl_eventchase_mins, autocvar_cl_eventchase_maxs, eventchase_target_origin, MOVE_WORLDONLY, this); // If the boxtrace fails, revert back to line tracing. if(!local_player.viewloc) if(trace_startsolid) { - eventchase_target_origin = (current_view_origin - (v_forward * eventchase_current_distance)); + eventchase_target_origin = (current_view_origin - (forward * eventchase_current_distance)); WarpZone_TraceLine(current_view_origin, eventchase_target_origin, MOVE_WORLDONLY, this); - setproperty(VF_ORIGIN, (trace_endpos - (v_forward * autocvar_cl_eventchase_mins.z))); + setproperty(VF_ORIGIN, (trace_endpos - (forward * autocvar_cl_eventchase_mins.z))); } else { setproperty(VF_ORIGIN, trace_endpos); } @@ -1885,7 +1897,7 @@ void CSQC_UpdateView(entity this, float w, float h) // Render the Scene view_origin = getpropertyvec(VF_ORIGIN); view_angles = getpropertyvec(VF_ANGLES); - MAKEVECTORS(makevectors, view_angles, view_forward, view_right, view_up); + MAKE_VECTORS(view_angles, view_forward, view_right, view_up); #ifdef BLURTEST if(time > blurtest_time0 && time < blurtest_time1) @@ -2436,14 +2448,15 @@ void CSQC_UpdateView(entity this, float w, float h) setproperty(VF_ORIGIN, '0 0 0'); setproperty(VF_ANGLES, '0 0 0'); setproperty(VF_PERSPECTIVE, 1); - makevectors('0 0 0'); + vector forward, right, up; + MAKE_VECTORS('0 0 0', forward, right, up); vector v1, v2; cvar_set("vid_conwidth", "800"); cvar_set("vid_conheight", "600"); - v1 = cs_project(v_forward); + v1 = cs_project(forward); cvar_set("vid_conwidth", "640"); cvar_set("vid_conheight", "480"); - v2 = cs_project(v_forward); + v2 = cs_project(forward); if(v1 == v2) cs_project_is_b0rked = 1; else