- if (cl_nolerp.integer || cls.timedemo || (cl.islocalgame && !sv_fixedframeratesingleplayer.integer))
- cl.mtime[1] = cl.mtime[0] = newtime;
- else
- {
- cl.mtime[1] = max(cl.mtime[0], newtime - 0.1);
- cl.mtime[0] = newtime;
- }
- if (cl_nettimesyncmode.integer == 3)
- cl.time = cl.mtime[1];
- if (cl_nettimesyncmode.integer == 2)
- {
- if (cl.time < cl.mtime[1] || cl.time > cl.mtime[0])
- cl.time = cl.mtime[1];
+ 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[1] == cl.mtime[0] || cls.signon < SIGNONS)
+ cl.time = cl.mtime[1] = newtime;
+ else if (cls.protocol != PROTOCOL_QUAKEWORLD)
+ {
+ if (developer.integer >= 100 && vid_activewindow)
+ {
+ if (cl.time < cl.mtime[1] - (cl.mtime[0] - cl.mtime[1]))
+ Con_Printf("--- cl.time < cl.mtime[1] (%f < %f ... %f)\n", cl.time, cl.mtime[1], cl.mtime[0]);
+ else if (cl.time > cl.mtime[0] + (cl.mtime[0] - cl.mtime[1]))
+ Con_Printf("--- cl.time > cl.mtime[0] (%f > %f ... %f)\n", cl.time, cl.mtime[1], cl.mtime[0]);
+ }
+ cl.time += (cl.mtime[1] - cl.time) * bound(0, cl_nettimesyncfactor.value, 1);
+ timehigh = cl.mtime[1] + (cl.mtime[0] - cl.mtime[1]) * cl_nettimesyncboundtolerance.value;
+ if (cl_nettimesyncboundmode.integer == 1)
+ cl.time = bound(cl.mtime[1], cl.time, cl.mtime[0]);
+ else if (cl_nettimesyncboundmode.integer == 2)
+ {
+ if (cl.time < cl.mtime[1] || cl.time > timehigh)
+ cl.time = cl.mtime[1];
+ }
+ else if (cl_nettimesyncboundmode.integer == 3)
+ {
+ if ((cl.time < cl.mtime[1] && cl.oldtime < cl.mtime[1]) || (cl.time > timehigh && cl.oldtime > timehigh))
+ cl.time = cl.mtime[1];
+ }
+ else if (cl_nettimesyncboundmode.integer == 4)
+ {
+ 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 if (cl.time > cl.mtime[1])
+ cl.time -= 0.002 * cl.movevars_slowmo; // fall into the past by 2ms
+ else
+ cl.time += 0.001 * cl.movevars_slowmo; // creep forward 1ms
+ }