]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - view.c
the record command now disconnects you if starting a new map, this fixes a crash...
[xonotic/darkplaces.git] / view.c
diff --git a/view.c b/view.c
index 9506c9483bb51c58afaacaaf1b93e67eb791330f..4d40d8d472285ad59943e1d0ec5cf7ed5e2d5b4d 100644 (file)
--- a/view.c
+++ b/view.c
@@ -322,17 +322,17 @@ CL_StairSmoothing
 void CL_StairSmoothing (void)
 {
        if (v_dmg_time > 0)
-               v_dmg_time -= (cl.time - cl.oldtime);
+               v_dmg_time -= bound(0, cl.time - cl.oldtime, 0.1);
 
        // stair smoothing
        if (cl.onground && cl.stairoffset < 0)
        {
-               cl.stairoffset += (cl.time - cl.oldtime) * cl_stairsmoothspeed.value;
+               cl.stairoffset += bound(0, cl.time - cl.oldtime, 0.1) * cl_stairsmoothspeed.value;
                cl.stairoffset = bound(-16, cl.stairoffset, 0);
        }
        else if (cl.onground && cl.stairoffset > 0)
        {
-               cl.stairoffset -= (cl.time - cl.oldtime) * cl_stairsmoothspeed.value;
+               cl.stairoffset -= bound(0, cl.time - cl.oldtime, 0.1) * cl_stairsmoothspeed.value;
                cl.stairoffset = bound(0, cl.stairoffset, 16);
        }
        else
@@ -351,8 +351,6 @@ void V_CalcRefdef (void)
        entity_t *ent;
        float vieworg[3], gunorg[3], viewangles[3];
        trace_t trace;
-       if(csqc_loaded)
-               return;
        VectorClear(gunorg);
        viewmodelmatrix = identitymatrix;
        r_view.matrix = identitymatrix;
@@ -367,25 +365,15 @@ void V_CalcRefdef (void)
 
                // update the stairoffset if the player entity has gone up or down without leaving the ground
                //Con_Printf("cl.onground %i oldz %f newz %f vel %f %f %f\n", cl.onground, oldz, vieworg[2], cl.movement_velocity[0], cl.movement_velocity[1], cl.movement_velocity[2]);
-               cl.stairoffset -= vieworg[2] - oldz;
-               oldz = vieworg[2];
-               cl.stairoffset = bound(-16, cl.stairoffset, 16);
-
-               // interpolate the angles if playing a demo or spectating someone
-               if (cls.demoplayback || cl.fixangle[0])
+               if (cl.onground)
                {
-                       int i;
-                       float frac = bound(0, (cl.time - cl.mtime[1]) / (cl.mtime[0] - cl.mtime[1]), 1);
-                       for (i = 0;i < 3;i++)
-                       {
-                               float d = cl.mviewangles[0][i] - cl.mviewangles[1][i];
-                               if (d > 180)
-                                       d -= 360;
-                               else if (d < -180)
-                                       d += 360;
-                               viewangles[i] = cl.mviewangles[1][i] + frac * d;
-                       }
+                       cl.stairoffset -= vieworg[2] - oldz;
+                       cl.stairoffset = bound(-16, cl.stairoffset, 16);
                }
+               else
+                       cl.stairoffset = 0;
+               oldz = vieworg[2];
+
                if (cl.intermission)
                {
                        // entity is a fixed camera, just copy the matrix
@@ -538,6 +526,9 @@ void V_CalcRefdef (void)
 
 void V_FadeViewFlashs(void)
 {
+       // don't flash if time steps backwards
+       if (cl.time <= cl.oldtime)
+               return;
        // drop the damage value
        cl.cshifts[CSHIFT_DAMAGE].percent -= (cl.time - cl.oldtime)*150;
        if (cl.cshifts[CSHIFT_DAMAGE].percent <= 0)