+ // setup the VM frame
+ SV_VM_Begin();
+ // stop running server frames if the wall time reaches this value
+ aborttime = Sys_DoubleTime() + 0.05;
+ for (framecount = 0;framecount < framelimit && sv.timer > 0;framecount++)
+ {
+ if (sys_ticrate.value <= 0)
+ advancetime = sv.timer;
+ else if (cl.islocalgame && !sv_fixedframeratesingleplayer.integer)
+ advancetime = min(sv.timer, sys_ticrate.value);
+ else
+ advancetime = sys_ticrate.value;
+ advancetime = min(advancetime, 0.1);
+ sv.timer -= advancetime;
+
+ // only advance time if not paused
+ // the game also pauses in singleplayer when menu or console is used
+ sv.frametime = advancetime * slowmo.value;
+ if (host_framerate.value)
+ sv.frametime = host_framerate.value;
+ if (sv.paused || (cl.islocalgame && (key_dest != key_game || key_consoleactive)))
+ sv.frametime = 0;
+
+ // set the time and clear the general datagram
+ SV_ClearDatagram();
+
+ // move things around and think unless paused
+ if (sv.frametime)
+ SV_Physics();
+
+ // send all messages to the clients
+ SV_SendClientMessages();
+
+ // if this server frame took too long, break out of the loop
+ if (Sys_DoubleTime() >= aborttime)
+ break;
+ }