Host_AddConfigText(cmd_local);
}
- //============================================================================
-
/*
- ==================
- Host_TimeReport
-
- Returns a time report string, for example for
- ==================
- */
- const char *Host_TimingReport(char *buf, size_t buflen)
- {
- return va(buf, buflen, "%.1f%% CPU, %.2f%% lost, offset avg %.1fms, max %.1fms, sdev %.1fms", svs.perf_cpuload * 100, svs.perf_lost * 100, svs.perf_offset_avg * 1000, svs.perf_offset_max * 1000, svs.perf_offset_sdev * 1000);
- }
-
- /*
- ==================
- Host_Frame
-
- Runs all active servers
- ==================
+ =======================
+ Host_InitLocal
+ ======================
*/
- static void Host_Init(void);
- double Host_Frame(double time)
- {
- double cl_wait, sv_wait;
-
- TaskQueue_Frame(false);
-
- // keep the random time dependent, but not when playing demos/benchmarking
- if(!*sv_random_seed.string && !host.restless)
- rand();
-
- NetConn_UpdateSockets();
-
- Log_DestBuffer_Flush();
-
- // Run any downloads
- Curl_Frame();
-
- // process console commands
- Cbuf_Frame(host.cbuf);
-
- R_TimeReport("---");
-
- sv_wait = SV_Frame(time);
- cl_wait = CL_Frame(time);
-
- // Con_Printf("%6.0f %6.0f\n", cl_wait * 1000000.0, sv_wait * 1000000.0);
-
- Mem_CheckSentinelsGlobal();
-
- if(host.restless)
- return 0;
-
- // if the accumulators haven't become positive yet, wait a while
- if (cls.state == ca_dedicated)
- return sv_wait * -1000000.0; // dedicated
- else if (!sv.active || svs.threaded)
- return cl_wait * -1000000.0; // connected to server, main menu, or server is on different thread
- else
- return max(cl_wait, sv_wait) * -1000000.0; // listen server or singleplayer
- }
-
- static inline void Host_Sleep(double time)
- {
- double delta, time0;
-
- if(host_maxwait.value <= 0)
- time = min(time, 1000000.0);
- else
- time = min(time, host_maxwait.value * 1000.0);
- if(time < 1)
- time = 1; // because we cast to int
-
- time0 = Sys_DirtyTime();
- if (sv_checkforpacketsduringsleep.integer && !sys_usenoclockbutbenchmark.integer && !svs.threaded) {
- NetConn_SleepMicroseconds((int)time);
- if (cls.state != ca_dedicated)
- NetConn_ClientFrame(); // helps server browser get good ping values
- // TODO can we do the same for ServerFrame? Probably not.
- }
- else
- Sys_Sleep((int)time);
- delta = Sys_DirtyTime() - time0;
- if (delta < 0 || delta >= 1800)
- delta = 0;
- host.sleeptime += delta;
- // R_TimeReport("sleep");
- return;
- }
-
- // Cloudwalk: Most overpowered function declaration...
- static inline double Host_UpdateTime (double newtime, double oldtime)
- {
- double time = newtime - oldtime;
-
- if (time < 0)
- {
- // warn if it's significant
- if (time < -0.01)
- Con_Printf(CON_WARN "Host_UpdateTime: time stepped backwards (went from %f to %f, difference %f)\n", oldtime, newtime, time);
- time = 0;
- }
- else if (time >= 1800)
- {
- Con_Printf(CON_WARN "Host_UpdateTime: time stepped forward (went from %f to %f, difference %f)\n", oldtime, newtime, time);
- time = 0;
- }
-
- return time;
- }
-
- void Host_Main(void)
++void Json_Test_f(cmd_state_t *cmd);
+ extern cvar_t r_texture_jpeg_fastpicmip;
+ static void Host_InitLocal (void)
{
- double time, newtime, oldtime, sleeptime;
-
- Host_Init(); // Start!
-
- host.realtime = 0;
- oldtime = Sys_DirtyTime();
-
- // Main event loop
- while(host.state != host_shutdown)
- {
- // Something bad happened, or the server disconnected
- if (setjmp(host.abortframe))
- {
- host.state = host_active; // In case we were loading
- continue;
- }
-
- newtime = host.dirtytime = Sys_DirtyTime();
- host.realtime += time = Host_UpdateTime(newtime, oldtime);
-
- sleeptime = Host_Frame(time);
- oldtime = newtime;
+ Cmd_AddCommand(CF_SHARED, "quit", Host_Quit_f, "quit the game");
+ Cmd_AddCommand(CF_SHARED, "version", Host_Version_f, "print engine version");
+ Cmd_AddCommand(CF_SHARED, "saveconfig", Host_SaveConfig_f, "save settings to config.cfg (or a specified filename) immediately (also automatic when quitting)");
+ Cmd_AddCommand(CF_SHARED, "loadconfig", Host_LoadConfig_f, "reset everything and reload configs");
+ Cmd_AddCommand(CF_SHARED, "sendcvar", SendCvar_f, "sends the value of a cvar to the server as a sentcvar command, for use by QuakeC");
++ Cmd_AddCommand(CF_SHARED, "json_test", Json_Test_f, "test the json parser");
+ Cvar_RegisterVariable (&cl_maxphysicsframesperserverframe);
+ Cvar_RegisterVariable (&host_framerate);
+ Cvar_RegisterCallback (&host_framerate, Host_Framerate_c);
+ Cvar_RegisterVariable (&host_speeds);
+ Cvar_RegisterVariable (&host_maxwait);
+ Cvar_RegisterVariable (&host_isclient);
- if (sleeptime >= 1)
- {
- Host_Sleep(sleeptime);
- continue;
- }
+ Cvar_RegisterVariable (&developer);
+ Cvar_RegisterVariable (&developer_extra);
+ Cvar_RegisterVariable (&developer_insane);
+ Cvar_RegisterVariable (&developer_loadfile);
+ Cvar_RegisterVariable (&developer_loading);
+ Cvar_RegisterVariable (&developer_entityparsing);
- host.framecount++;
- }
+ Cvar_RegisterVariable (×tamps);
+ Cvar_RegisterVariable (&timeformat);
- return;
+ Cvar_RegisterVariable (&r_texture_jpeg_fastpicmip);
}
- //============================================================================
-
char engineversion[128];
qbool sys_nostdout = false;