Don't let eventchase put the view into the ceiling when you die
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / View.qc
index 13e41a4167c531dcbba9387dfca2af50cb29ab2b..5d5f28789e0449dd846777465d6174db501dc1f6 100644 (file)
@@ -483,7 +483,16 @@ void CSQC_UpdateView(float w, float h)
                if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && is_dead) || intermission)
                {
                        // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.)
-                       vector current_view_origin = ((csqcplayer ? csqcplayer.origin : pmove_org) + autocvar_cl_eventchase_viewoffset);
+                       vector current_view_origin = (csqcplayer ? csqcplayer.origin : pmove_org);
+
+                       // detect maximum viewoffset and use it
+                       WarpZone_TraceLine(current_view_origin, current_view_origin + autocvar_cl_eventchase_viewoffset + ('0 0 1' * autocvar_cl_eventchase_maxs_z), MOVE_WORLDONLY, self);
+                       current_view_origin_z +=
+                               max(0,
+                                       (trace_fraction * autocvar_cl_eventchase_viewoffset_z)
+                                       -
+                                       autocvar_cl_eventchase_maxs_z
+                               );
 
                        // We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing).
                        // Ideally, there should be another way to enable third person cameras, such as through setproperty()