]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sv_user.c
updated MSVC and mingw files to compile filematch.c
[xonotic/darkplaces.git] / sv_user.c
index 10cd006b3c608863d8fcd5e379ef21a72ffeee3e..27c8ec9fb653c83eb54ebceaab5a68870877846b 100644 (file)
--- a/sv_user.c
+++ b/sv_user.c
@@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 See the GNU General Public License for more details.
 
@@ -23,11 +23,12 @@ 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"};
-cvar_t sv_deltacompress = {"sv_deltacompress", "1"};
-extern cvar_t  sv_stopspeed;
+cvar_t sv_edgefriction = {0, "edgefriction", "2"};
+cvar_t sv_predict = {0, "sv_predict", "1"};
+cvar_t sv_deltacompress = {0, "sv_deltacompress", "1"};
+cvar_t sv_idealpitchscale = {0, "sv_idealpitchscale","0.8"};
+cvar_t sv_maxspeed = {CVAR_NOTIFY, "sv_maxspeed", "320"};
+cvar_t sv_accelerate = {0, "sv_accelerate", "10"};
 
 static vec3_t          forward, right, up;
 
@@ -43,8 +44,6 @@ qboolean      onground;
 
 usercmd_t      cmd;
 
-cvar_t sv_idealpitchscale = {"sv_idealpitchscale","0.8"};
-
 
 /*
 ===============
@@ -77,8 +76,8 @@ void SV_SetIdealPitch (void)
                bottom[0] = top[0];
                bottom[1] = top[1];
                bottom[2] = top[2] - 160;
-               
-               tr = SV_Move (top, vec3_origin, vec3_origin, bottom, 1, sv_player);
+
+               tr = SV_Move (top, vec3_origin, vec3_origin, bottom, MOVE_NOMONSTERS, sv_player);
                if (tr.allsolid)
                        return; // looking at a wall, leave ideal the way is was
 
@@ -141,7 +140,7 @@ void SV_UserFriction (void)
        start[2] = origin[2] + sv_player->v.mins[2];
        stop[2] = start[2] - 34;
 
-       trace = SV_Move (start, vec3_origin, vec3_origin, stop, true, sv_player);
+       trace = SV_Move (start, vec3_origin, vec3_origin, stop, MOVE_NOMONSTERS, sv_player);
 
        if (trace.fraction == 1.0)
                friction = sv_friction.value*sv_edgefriction.value;
@@ -167,8 +166,6 @@ void SV_UserFriction (void)
 SV_Accelerate
 ==============
 */
-cvar_t sv_maxspeed = {"sv_maxspeed", "320", false, true};
-cvar_t sv_accelerate = {"sv_accelerate", "10"};
 #if 0
 void SV_Accelerate (vec3_t wishvel)
 {
@@ -235,7 +232,7 @@ void DropPunchAngle (void)
        eval_t  *val;
        
        len = VectorNormalizeLength (sv_player->v.punchangle);
-       
+
        len -= 10*sv.frametime;
        if (len < 0)
                len = 0;
@@ -262,7 +259,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
@@ -280,7 +277,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;
@@ -293,8 +291,9 @@ void SV_WaterMove (void)
        {
                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;
@@ -341,7 +340,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;
@@ -368,7 +367,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;
        }
        
@@ -447,7 +447,7 @@ void SV_ClientThink (void)
                return;
        }
 
-       SV_AirMove ();  
+       SV_AirMove ();
 }
 
 
@@ -463,34 +463,26 @@ void SV_ReadClientMove (usercmd_t *move)
        int             bits;
        eval_t  *val;
        float   total;
-       
+
 // read ping time
-       host_client->ping_times[host_client->num_pings%NUM_PING_TIMES]
-               = sv.time - MSG_ReadFloat ();
+       host_client->ping_times[host_client->num_pings % NUM_PING_TIMES] = sv.time - MSG_ReadFloat ();
        host_client->num_pings++;
        for (i=0, total = 0;i < NUM_PING_TIMES;i++)
                total += host_client->ping_times[i];
        host_client->ping = total / NUM_PING_TIMES; // can be used for prediction
        host_client->latency = 0;
-       if (sv_predict.value && (svs.maxclients > 1) && (!sv.paused)) // if paused or a local game, don't predict
+       if (sv_predict.integer && (svs.maxclients > 1) && (!sv.paused)) // if paused or a local game, don't predict
                host_client->latency = host_client->ping;
        if ((val = GETEDICTFIELDVALUE(host_client->edict, eval_ping)))
                val->_float = host_client->ping * 1000.0;
 
 // read current angles
-       if (dpprotocol)
-       {
-               for (i=0 ; i<3 ; i++)
-                       angle[i] = MSG_ReadPreciseAngle ();
-       }
-       else
-       {
-               for (i=0 ; i<3 ; i++)
-                       angle[i] = MSG_ReadAngle ();
-       }
+       // dpprotocol version 2
+       for (i = 0;i < 3;i++)
+               angle[i] = MSG_ReadFloat ();
 
        VectorCopy (angle, host_client->edict->v.v_angle);
-               
+
 // read movement
        move->forwardmove = MSG_ReadShort ();
        move->sidemove = MSG_ReadShort ();
@@ -501,7 +493,7 @@ void SV_ReadClientMove (usercmd_t *move)
                val->vector[1] = move->sidemove;
                val->vector[2] = move->upmove;
        }
-       
+
 // read buttons
        bits = MSG_ReadByte ();
        host_client->edict->v.button0 = bits & 1;
@@ -526,6 +518,7 @@ SV_ReadClientMessage
 Returns false if the client should be killed
 ===================
 */
+void SV_SendServerinfo (client_t *client);
 qboolean SV_ReadClientMessage (void)
 {
        int             ret;
@@ -555,24 +548,30 @@ nextmsg:
                        {
                                Sys_Printf ("SV_ReadClientMessage: badread\n");
                                return false;
-                       }       
-       
+                       }
+
                        cmd = MSG_ReadChar ();
-                       
+
+                       if (cmd != -1 && host_client->waitingforconnect)
+                       {
+                               host_client->waitingforconnect = false;
+                               host_client->sendserverinfo = true;
+                       }
+
                        switch (cmd)
                        {
                        case -1:
                                goto nextmsg;           // end of message
-                               
+
                        default:
-                               Sys_Printf ("SV_ReadClientMessage: unknown command char\n");
+                               Sys_Printf ("SV_ReadClientMessage: unknown command char %i\n", cmd);
                                return false;
-                                                       
+
                        case clc_nop:
 //                             Sys_Printf ("clc_nop\n");
                                break;
-                               
-                       case clc_stringcmd:     
+
+                       case clc_stringcmd:
                                s = MSG_ReadString ();
                                ret = 0;
                                if (Q_strncasecmp(s, "status", 6) == 0
@@ -590,8 +589,8 @@ nextmsg:
                                 || Q_strncasecmp(s, "ping", 4) == 0
                                 || Q_strncasecmp(s, "ban", 3) == 0
                                 || Q_strncasecmp(s, "pmodel", 6) == 0
-                                || (nehahra && (Q_strncasecmp(s, "max", 3) == 0 || Q_strncasecmp(s, "monster", 7) == 0 || Q_strncasecmp(s, "scrag", 5) == 0 || Q_strncasecmp(s, "gimme", 5) == 0 || Q_strncasecmp(s, "wraith", 6) == 0))
-                                || (!nehahra && (Q_strncasecmp(s, "god", 3) == 0 || Q_strncasecmp(s, "notarget", 8) == 0 || Q_strncasecmp(s, "fly", 3) == 0 || Q_strncasecmp(s, "give", 4) == 0 || Q_strncasecmp(s, "noclip", 6) == 0)))
+                                || (gamemode == GAME_NEHAHRA && (Q_strncasecmp(s, "max", 3) == 0 || Q_strncasecmp(s, "monster", 7) == 0 || Q_strncasecmp(s, "scrag", 5) == 0 || Q_strncasecmp(s, "gimme", 5) == 0 || Q_strncasecmp(s, "wraith", 6) == 0))
+                                || (gamemode != GAME_NEHAHRA && (Q_strncasecmp(s, "god", 3) == 0 || Q_strncasecmp(s, "notarget", 8) == 0 || Q_strncasecmp(s, "fly", 3) == 0 || Q_strncasecmp(s, "give", 4) == 0 || Q_strncasecmp(s, "noclip", 6) == 0)))
                                {
                                        ret = 1;
                                        Cmd_ExecuteString (s, src_client);
@@ -615,6 +614,10 @@ nextmsg:
                        case clc_move:
                                SV_ReadClientMove (&host_client->cmd);
                                break;
+
+                       case clc_ackentities:
+                               EntityFrame_AckFrame(&host_client->entitydatabase, MSG_ReadLong());
+                               break;
                        }
                }
        } while (ret == 1);
@@ -628,7 +631,6 @@ nextmsg:
 SV_RunClients
 ==================
 */
-extern dfunction_t *SV_PlayerPhysicsQC;
 void SV_RunClients (void)
 {
        int                             i;