]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sv_user.c
Major update, been neglecting CVS for some time...
[xonotic/darkplaces.git] / sv_user.c
index 8ddff9948e7a980a1d89973871eb62bd6f3a8c26..9bf6c2189efca730953da76f9b5726296965e395 100644 (file)
--- a/sv_user.c
+++ b/sv_user.c
@@ -23,10 +23,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 edict_t        *sv_player;
 
-extern cvar_t  sv_friction;
 cvar_t sv_edgefriction = {"edgefriction", "2"};
 cvar_t sv_predict = {"sv_predict", "1"};
-extern cvar_t  sv_stopspeed;
+cvar_t sv_deltacompress = {"sv_deltacompress", "1"};
 
 static vec3_t          forward, right, up;
 
@@ -149,7 +148,7 @@ void SV_UserFriction (void)
 
 // apply friction      
        control = speed < sv_stopspeed.value ? sv_stopspeed.value : speed;
-       newspeed = speed - host_frametime*control*friction;
+       newspeed = speed - sv.frametime*control*friction;
        
        if (newspeed < 0)
                newspeed = 0;
@@ -181,7 +180,7 @@ void SV_Accelerate (vec3_t wishvel)
        VectorSubtract (wishvel, velocity, pushvec);
        addspeed = VectorNormalize (pushvec);
 
-       accelspeed = sv_accelerate.value*host_frametime*addspeed;
+       accelspeed = sv_accelerate.value*sv.frametime*addspeed;
        if (accelspeed > addspeed)
                accelspeed = addspeed;
        
@@ -198,7 +197,7 @@ void SV_Accelerate (void)
        addspeed = wishspeed - currentspeed;
        if (addspeed <= 0)
                return;
-       accelspeed = sv_accelerate.value*host_frametime*wishspeed;
+       accelspeed = sv_accelerate.value*sv.frametime*wishspeed;
        if (accelspeed > addspeed)
                accelspeed = addspeed;
        
@@ -218,8 +217,8 @@ void SV_AirAccelerate (vec3_t wishveloc)
        addspeed = wishspd - currentspeed;
        if (addspeed <= 0)
                return;
-//     accelspeed = sv_accelerate.value * host_frametime;
-       accelspeed = sv_accelerate.value*wishspeed * host_frametime;
+//     accelspeed = sv_accelerate.value * sv.frametime;
+       accelspeed = sv_accelerate.value*wishspeed * sv.frametime;
        if (accelspeed > addspeed)
                accelspeed = addspeed;
        
@@ -231,13 +230,24 @@ void SV_AirAccelerate (vec3_t wishveloc)
 void DropPunchAngle (void)
 {
        float   len;
+       eval_t  *val;
        
        len = VectorNormalizeLength (sv_player->v.punchangle);
        
-       len -= 10*host_frametime;
+       len -= 10*sv.frametime;
        if (len < 0)
                len = 0;
        VectorScale (sv_player->v.punchangle, len, sv_player->v.punchangle);
+       
+       if ((val = GETEDICTFIELDVALUE(sv_player, eval_punchvector)))
+       {
+               len = VectorNormalizeLength (val->vector);
+               
+               len -= 20*sv.frametime;
+               if (len < 0)
+                       len = 0;
+               VectorScale (val->vector, len, val->vector);
+       }
 }
 
 /*
@@ -250,7 +260,7 @@ void SV_WaterMove (void)
 {
        int             i;
        vec3_t  wishvel;
-       float   speed, newspeed, wishspeed, addspeed, accelspeed;
+       float   speed, newspeed, wishspeed, addspeed, accelspeed, temp;
 
 //
 // user intentions
@@ -268,7 +278,8 @@ void SV_WaterMove (void)
        wishspeed = Length(wishvel);
        if (wishspeed > sv_maxspeed.value)
        {
-               VectorScale (wishvel, sv_maxspeed.value/wishspeed, wishvel);
+               temp = sv_maxspeed.value/wishspeed;
+               VectorScale (wishvel, temp, wishvel);
                wishspeed = sv_maxspeed.value;
        }
        wishspeed *= 0.7;
@@ -279,10 +290,11 @@ void SV_WaterMove (void)
        speed = Length (velocity);
        if (speed)
        {
-               newspeed = speed - host_frametime * speed * sv_friction.value;
+               newspeed = speed - sv.frametime * speed * sv_friction.value;
                if (newspeed < 0)
-                       newspeed = 0;   
-               VectorScale (velocity, newspeed/speed, velocity);
+                       newspeed = 0;
+               temp = newspeed/speed;
+               VectorScale (velocity, temp, velocity);
        }
        else
                newspeed = 0;
@@ -298,7 +310,7 @@ void SV_WaterMove (void)
                return;
 
        VectorNormalize (wishvel);
-       accelspeed = sv_accelerate.value * wishspeed * host_frametime;
+       accelspeed = sv_accelerate.value * wishspeed * sv.frametime;
        if (accelspeed > addspeed)
                accelspeed = addspeed;
 
@@ -329,7 +341,7 @@ void SV_AirMove (void)
 {
        int                     i;
        vec3_t          wishvel;
-       float           fmove, smove;
+       float           fmove, smove, temp;
 
        // LordHavoc: correct quake movement speed bug when looking up/down
        wishvel[0] = wishvel[2] = 0;
@@ -356,7 +368,8 @@ void SV_AirMove (void)
        wishspeed = VectorNormalizeLength(wishdir);
        if (wishspeed > sv_maxspeed.value)
        {
-               VectorScale (wishvel, sv_maxspeed.value/wishspeed, wishvel);
+               temp = sv_maxspeed.value/wishspeed;
+               VectorScale (wishvel, temp, wishvel);
                wishspeed = sv_maxspeed.value;
        }
        
@@ -429,8 +442,7 @@ void SV_ClientThink (void)
 //
 // walk
 //
-       if ( (sv_player->v.waterlevel >= 2)
-       && (sv_player->v.movetype != MOVETYPE_NOCLIP) )
+       if ( (sv_player->v.waterlevel >= 2)     && (sv_player->v.movetype != MOVETYPE_NOCLIP) )
        {
                SV_WaterMove ();
                return;
@@ -520,7 +532,7 @@ qboolean SV_ReadClientMessage (void)
        int             ret;
        int             cmd;
        char            *s;
-       
+
        do
        {
 nextmsg:
@@ -532,9 +544,9 @@ nextmsg:
                }
                if (!ret)
                        return true;
-                                       
+
                MSG_BeginReading ();
-               
+
                while (1)
                {
                        if (!host_client->active)
@@ -596,18 +608,18 @@ nextmsg:
                                        Con_DPrintf("%s tried to %s\n", host_client->name, s);
                                */
                                break;
-                               
+
                        case clc_disconnect:
 //                             Sys_Printf ("SV_ReadClientMessage: client disconnected\n");
                                return false;
-                       
+
                        case clc_move:
                                SV_ReadClientMove (&host_client->cmd);
                                break;
                        }
                }
        } while (ret == 1);
-       
+
        return true;
 }
 
@@ -617,7 +629,6 @@ nextmsg:
 SV_RunClients
 ==================
 */
-extern dfunction_t *SV_PlayerPhysicsQC;
 void SV_RunClients (void)
 {
        int                             i;
@@ -650,7 +661,7 @@ void SV_RunClients (void)
                        {
                                pr_global_struct->time = sv.time;
                                pr_global_struct->self = EDICT_TO_PROG(sv_player);
-                               PR_ExecuteProgram ((func_t)(SV_PlayerPhysicsQC - pr_functions));
+                               PR_ExecuteProgram ((func_t)(SV_PlayerPhysicsQC - pr_functions), "");
                        }
                        else
                                SV_ClientThink ();