+ if (cl_timer > 0 || cls.timedemo)
+ {
+ if (cls.state == ca_dedicated)
+ {
+ // if there is no client, run client timing at 10fps
+ cl_timer -= 0.1;
+ if (host_speeds.integer)
+ time1 = time2 = Sys_DoubleTime();
+ }
+ else
+ {
+ double frametime;
+ frametime = cl.realframetime = min(cl_timer, 1);
+
+ // decide the simulation time
+ if (!cls.timedemo)
+ {
+ if (cls.capturevideo_active && !cls.capturevideo_soundfile)
+ {
+ frametime = 1.0 / cls.capturevideo_framerate;
+ cl.realframetime = max(cl.realframetime, frametime);
+ }
+ else if (vid_activewindow)
+ frametime = cl.realframetime = max(cl.realframetime, 1.0 / cl_maxfps.value);
+ else
+ frametime = cl.realframetime = 0.1;
+
+ // deduct the frame time from the accumulator
+ cl_timer -= cl.realframetime;
+
+ // apply slowmo scaling
+ frametime *= slowmo.value;
+
+ // host_framerate overrides all else
+ if (host_framerate.value)
+ frametime = host_framerate.value;
+ }
+
+ cl.oldtime = cl.time;
+ cl.time += frametime;
+
+ // Collect input into cmd
+ CL_Move();
+
+ NetConn_ClientFrame();
+
+ if (cls.state == ca_connected)
+ {
+ CL_ReadFromServer();
+ // if running the server remotely, send intentions now after
+ // the incoming messages have been read
+ //if (!cl.islocalgame)
+ // CL_SendCmd();
+ }
+
+ // update video
+ if (host_speeds.integer)
+ time1 = Sys_DoubleTime();
+
+ //ui_update();
+
+ CL_VideoFrame();
+
+ CL_UpdateScreen();
+
+ if (host_speeds.integer)
+ time2 = Sys_DoubleTime();
+
+ // update audio
+ if(csqc_usecsqclistener)
+ {
+ S_Update(&csqc_listenermatrix);
+ csqc_usecsqclistener = false;
+ }
+ else
+ S_Update(&r_refdef.viewentitymatrix);
+
+ CDAudio_Update();
+ }
+
+ if (host_speeds.integer)
+ {
+ int pass1, pass2, pass3;
+ pass1 = (int)((time1 - time3)*1000000);
+ time3 = Sys_DoubleTime();
+ pass2 = (int)((time2 - time1)*1000000);
+ pass3 = (int)((time3 - time2)*1000000);
+ Con_Printf("%6ius total %6ius server %6ius gfx %6ius snd\n",
+ pass1+pass2+pass3, pass1, pass2, pass3);
+ }
+ }