]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
removed cl_nettimesyncboundmode 5 because it seems to print many more
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 30 Apr 2007 05:27:03 +0000 (05:27 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 30 Apr 2007 05:27:03 +0000 (05:27 +0000)
time warnings than 4 does when developer is on
now sets cls.servermovesequence to cls.netcon->qw_incoming_sequence
now keeps around qw player entities if a packet does not contain any
(an fteqw server I was testing on sometimes sent packets containing
large reliable message groups but no player entities at all)

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7210 d7cf8633-e32d-0410-b094-e92efae38249

cl_parse.c

index ba4972dcb90d21fca888f674abb397a6dc620aa1..fcd88f7d80a086df4e6f4a88a8e007860aef4078 100644 (file)
@@ -169,7 +169,7 @@ cvar_t cl_sound_r_exp3 = {0, "cl_sound_r_exp3", "weapons/r_exp3.wav", "sound to
 cvar_t cl_serverextension_download = {0, "cl_serverextension_download", "0", "indicates whether the server supports the download command"};
 cvar_t cl_joinbeforedownloadsfinish = {CVAR_SAVE, "cl_joinbeforedownloadsfinish", "1", "if non-zero the game will begin after the map is loaded before other downloads finish"};
 cvar_t cl_nettimesyncfactor = {CVAR_SAVE, "cl_nettimesyncfactor", "0", "rate at which client time adapts to match server time, 1 = instantly, 0.125 = slowly, 0 = not at all (bounding still applies)"};
-cvar_t cl_nettimesyncboundmode = {CVAR_SAVE, "cl_nettimesyncboundmode", "5", "method of restricting client time to valid values, 0 = no correction, 1 = tight bounding (jerky with packet loss), 2 = loose bounding (corrects it if out of bounds), 3 = leniant bounding (ignores temporary errors due to varying framerate), 4 = slow adjustment method from Quake3, 5 = slightly nicer version of Quake3 method"};
+cvar_t cl_nettimesyncboundmode = {CVAR_SAVE, "cl_nettimesyncboundmode", "4", "method of restricting client time to valid values, 0 = no correction, 1 = tight bounding (jerky with packet loss), 2 = loose bounding (corrects it if out of bounds), 3 = leniant bounding (ignores temporary errors due to varying framerate), 4 = slow adjustment method from Quake3"};
 cvar_t cl_nettimesyncboundtolerance = {CVAR_SAVE, "cl_nettimesyncboundtolerance", "0.25", "how much error is tolerated by bounding check, as a fraction of frametime, 0.25 = up to 25% margin of error tolerated, 1 = use only new time, 0 = use only old time (same effect as setting cl_nettimesyncfactor to 1)"};
 cvar_t cl_iplog_name = {CVAR_SAVE, "cl_iplog_name", "darkplaces_iplog.txt", "name of iplog file containing player addresses for iplog_list command and automatic ip logging when parsing status command"};
 
@@ -2817,12 +2817,12 @@ extern cvar_t slowmo;
 static void CL_NetworkTimeReceived(double newtime)
 {
        double timehigh;
+       cl.mtime[1] = max(cl.mtime[0], newtime - 0.1);
+       cl.mtime[0] = newtime;
        if (cls.timedemo || (cl.islocalgame && !sv_fixedframeratesingleplayer.integer) || cl.mtime[0] == newtime || cls.signon < SIGNONS)
-               cl.time = cl.mtime[1] = cl.mtime[0] = newtime;
-       else
+               cl.time = cl.mtime[1] = newtime;
+       else if (cls.protocol != PROTOCOL_QUAKEWORLD)
        {
-               cl.mtime[1] = max(cl.mtime[0], newtime - 0.1);
-               cl.mtime[0] = newtime;
                if (developer.integer >= 100 && vid_activewindow)
                {
                        if (cl.time < cl.mtime[1] - (cl.mtime[0] - cl.mtime[1]))
@@ -2855,15 +2855,6 @@ static void CL_NetworkTimeReceived(double newtime)
                        else
                                cl.time += 0.001 * slowmo.value; // creep forward 1ms
                }
-               else if (cl_nettimesyncboundmode.integer == 5)
-               {
-                       if (fabs(cl.time - cl.mtime[1]) > 0.5)
-                               cl.time = cl.mtime[1]; // reset
-                       else if (fabs(cl.time - cl.mtime[1]) > 0.1)
-                               cl.time += 0.5 * (cl.mtime[1] - cl.time); // fast
-                       else
-                               cl.time = bound(cl.time - 0.002 * slowmo.value, cl.mtime[1], cl.time + 0.001 * slowmo.value); // slow adjust
-               }
        }
        // this packet probably contains a player entity update, so we will need
        // to update the prediction
@@ -2944,6 +2935,8 @@ void CL_ParseServerMessage(void)
                // fade weapon view kick
                cl.qw_weaponkick = min(cl.qw_weaponkick + 10 * bound(0, cl.time - cl.oldtime, 0.1), 0);
 
+               cls.servermovesequence = cls.netcon->qw.incoming_sequence;
+
                while (1)
                {
                        if (msg_badread)
@@ -3260,10 +3253,24 @@ void CL_ParseServerMessage(void)
                        }
                }
 
-               // fully kill the still slightly dead qw player entities each frame
-               for (i = 1;i < cl.maxclients;i++)
-                       if (!cl.entities_active[i])
-                               cl.entities[i].state_current.active = false;
+               // fully kill the still slightly dead qw player entities each frame,
+               // but only if a player update was received
+               for (i = 1;i <= cl.maxclients;i++)
+                       if (cl.entities_active[i])
+                               break;
+               if (i <= cl.maxclients)
+               {
+                       // kill all non-updated entities this frame
+                       for (i = 1;i <= cl.maxclients;i++)
+                               if (!cl.entities_active[i])
+                                       cl.entities[i].state_current.active = false;
+               }
+               else
+               {
+                       // no update this frame, restore the cl.entities_active for good measure
+                       for (i = 1;i <= cl.maxclients;i++)
+                               cl.entities_active[i] = cl.entities[i].state_current.active;
+               }
        }
        else
        {