jmp_buf host_abortframe;
+// random seed
+cvar_t sv_random_seed = {0, "sv_random_seed", "", "random seed; when set, on every map start this random seed is used to initialize the random number generator. Don't touch it unless for benchmarking or debugging"};
+
// pretend frames take this amount of time (in seconds), 0 = realtime
cvar_t host_framerate = {0, "host_framerate","0", "locks frame timing to this value in seconds, 0.05 is 20fps for example, note that this can easily run too fast, use host_maxfps if you want to limit your framerate instead, or sys_ticrate to limit server speed"};
// shows time used by certain subsystems
======================
*/
void Host_SaveConfig_f(void);
+void Host_LoadConfig_f(void);
static void Host_InitLocal (void)
{
Cmd_AddCommand("saveconfig", Host_SaveConfig_f, "save settings to config.cfg immediately (also automatic when quitting)");
+ Cmd_AddCommand("loadconfig", Host_LoadConfig_f, "reset everything and reload configs");
+ Cvar_RegisterVariable (&sv_random_seed);
Cvar_RegisterVariable (&host_framerate);
Cvar_RegisterVariable (&host_speeds);
Cvar_RegisterVariable (&slowmo);
// dedicated servers initialize the host but don't parse and set the
// config.cfg cvars
// LordHavoc: don't save a config if it crashed in startup
- if (host_framecount >= 3 && cls.state != ca_dedicated)
+ if (host_framecount >= 3 && cls.state != ca_dedicated && !COM_CheckParm("-benchmark"))
{
f = FS_Open ("config.cfg", "wb", false, false);
if (!f)
}
+/*
+===============
+Host_LoadConfig_f
+
+Resets key bindings and cvars to defaults and then reloads scripts
+===============
+*/
+void Host_LoadConfig_f(void)
+{
+ // unlock the cvar default strings so they can be updated by the new default.cfg
+ Cvar_UnlockDefaults();
+ // reset cvars to their defaults, and then exec startup scripts again
+ Cbuf_InsertText("cvar_resettodefaults_all;exec quake.rc\n");
+}
+
/*
=================
SV_ClientPrint
for (i = 0, client = svs.clients;i < svs.maxclients;i++, client++)
{
- if (client->spawned && client->netconnection)
+ if (client->active && client->netconnection)
{
MSG_WriteByte(&client->netconnection->message, svc_print);
MSG_WriteString(&client->netconnection->message, msg);
prog->globals.server->self = saveSelf;
}
+ // if a download is active, close it
+ if (host_client->download_file)
+ {
+ Con_DPrintf("Download of %s aborted when %s dropped\n", host_client->download_name, host_client->name);
+ FS_Close(host_client->download_file);
+ host_client->download_file = NULL;
+ host_client->download_name[0] = 0;
+ host_client->download_expectedposition = 0;
+ host_client->download_started = false;
+ }
+
// remove leaving player from scoreboard
- //host_client->edict->fields.server->netname = PRVM_SetEngineString(host_client->name);
- //if ((val = PRVM_GETEDICTFIELDVALUE(host_client->edict, eval_clientcolors)))
- // val->_float = 0;
- //host_client->edict->fields.server->frags = 0;
host_client->name[0] = 0;
host_client->colors = 0;
host_client->frags = 0;
}
// keep the random time dependent
- rand();
+ if(!*sv_random_seed.string)
+ rand();
cl.islocalgame = NetConn_IsLocalGame();
// decide the simulation time
if (!cls.timedemo)
{
- if (cls.capturevideo_active)// && !cls.capturevideo_soundfile)
+ if (cls.capturevideo.active)
{
- frametime = 1.0 / cls.capturevideo_framerate;
- cl.realframetime = max(cl.realframetime, frametime);
+ if (cls.capturevideo.realtime)
+ frametime = cl.realframetime = max(cl.realframetime, 1.0 / cls.capturevideo.framerate);
+ else
+ {
+ 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);
cl.time += frametime;
// Collect input into cmd
- CL_Move();
+ CL_Input();
NetConn_ClientFrame();
//PR_Cmd_Init();
PRVM_Init();
Mod_Init();
+ World_Init();
SV_Init();
Host_InitCommands();
Host_InitLocal();