longjmp (host_abortserver, 1);
}
-mempool_t *sv_clients_mempool = NULL;
-
void Host_ServerOptions (void)
{
int i, numplayers;
Cvar_SetValueQuick(&deathmatch, 1);
svs.maxclients = numplayers;
- sv_clients_mempool = Mem_AllocPool("server clients", 0, NULL);
- svs.clients = Mem_Alloc(sv_clients_mempool, sizeof(client_t) * svs.maxclients);
+ svs.clients = Mem_Alloc(sv_mempool, sizeof(client_t) * svs.maxclients);
}
/*
// dedicated servers initialize the host but don't parse and set the
// config.cfg cvars
- if (host_initialized && cls.state != ca_dedicated)
+ // LordHavoc: save a config only after Host_Frame finished the first frame
+ if (host_initialized && host_loopactive && cls.state != ca_dedicated)
{
- f = FS_Open ("config.cfg", "wb", false);
+ f = FS_Open ("config.cfg", "wb", false, false);
if (!f)
{
Con_Print("Couldn't write config.cfg.\n");
double timecap, timeleft;
realtime += time;
- if (sys_ticrate.value < 0.01 || sys_ticrate.value > 0.10001)
+ if (sys_ticrate.value < 0.00999 || sys_ticrate.value > 0.10001)
Cvar_SetValue("sys_ticrate", bound(0.01, sys_ticrate.value, 0.1));
if (slowmo.value < 0)
Cvar_SetValue("slowmo", 0);
{
// never run more than 5 frames at a time as a sanity limit
int framecount, framelimit = 5;
- double advancetime, newtime;
+ double advancetime;
if (!sv.active)
+ {
+ sv.timer = 0;
return;
- newtime = Sys_DoubleTime();
- // if this is the first frame of a new server, ignore the huge time difference
- if (!sv.timer)
- sv.timer = newtime;
- // if we're already past the new time, don't run a frame
- // (does not happen if cl.islocalgame)
- if (sv.timer > newtime)
- return;
+ }
+ sv.timer += host_realframetime;
// run the world state
// don't allow simulation to run too fast or too slow or logic glitches can occur
- for (framecount = 0;framecount < framelimit && sv.timer < newtime;framecount++)
+ for (framecount = 0;framecount < framelimit && sv.timer > 0;framecount++)
{
if (cl.islocalgame)
- advancetime = min(newtime - sv.timer, sys_ticrate.value);
+ advancetime = min(sv.timer, sys_ticrate.value);
else
advancetime = sys_ticrate.value;
- sv.timer += advancetime;
+ 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;
NetConn_Heartbeat(0);
}
// if we fell behind too many frames just don't worry about it
- if (sv.timer < newtime)
- sv.timer = newtime;
+ if (sv.timer > 0)
+ sv.timer = 0;
}
time2 = Sys_DoubleTime();
// update audio
- if (cls.signon == SIGNONS && cl.viewentity >= 0 && cl.viewentity < MAX_EDICTS && cl_entities[cl.viewentity].state_current.active)
+ if (cls.signon == SIGNONS && cl_entities[cl.viewentity].state_current.active)
{
// LordHavoc: this used to use renderer variables (eww)
S_Update(&cl_entities[cl.viewentity].render.matrix);
Cmd_Init();
Memory_Init_Commands();
- R_Modules_Init();
+ Con_Init();
Cbuf_Init();
+ R_Modules_Init();
V_Init();
COM_Init();
- Host_InitLocal();
Key_Init();
- Con_Init();
PR_Init();
PRVM_Init();
Mod_Init();
NetConn_Init();
SV_Init();
+ Host_InitLocal();
Con_Printf("Builddate: %s\n", buildstring);
CL_Init();
}
+ Cbuf_Execute();
+
// only cvars are executed when host_initialized == false
if (gamemode == GAME_TEU)
Cbuf_InsertText("exec teu.rc\n");
else
Cbuf_InsertText("exec quake.rc\n");
+
+ Cbuf_Execute();
+ Cbuf_Execute();
Cbuf_Execute();
host_initialized = true;
if (cls.state != ca_dedicated)
{
VID_Open();
+ CDAudio_Startup();
CL_InitTEnts (); // We must wait after sound startup to load tent sounds
SCR_BeginLoadingPlaque();
MR_Init();
else
Cbuf_InsertText("exec quake.rc\n");
- if (!sv.active && (cls.state == ca_dedicated || COM_CheckParm("-listen")))
+ Cbuf_Execute();
+ Cbuf_Execute();
+ Cbuf_Execute();
+
+ // We must wait for the log_file cvar to be initialized to start the log
+ Log_Start ();
+
+ if (cls.state == ca_dedicated || COM_CheckParm("-listen"))
+ if (!sv.active && !cls.demoplayback && !cls.connect_trying)
Cbuf_InsertText ("startmap_dm\n");
+ Cbuf_Execute();
+
// check for special benchmark mode
// COMMANDLINEOPTION: Client: -benchmark <demoname> runs a timedemo and quits, results of any timedemo can be found in gamedir/benchmark.log (for example id1/benchmark.log)
i = COM_CheckParm("-benchmark");
if (i && i + 1 < com_argc)
+ if (!sv.active && !cls.demoplayback && !cls.connect_trying)
Cbuf_InsertText(va("timedemo %s\n", com_argv[i + 1]));
Cbuf_Execute();
- // We must wait for the log_file cvar to be initialized to start the log
- Log_Start ();
+ if (!sv.active && !cls.demoplayback && !cls.connect_trying)
+ {
+ Cbuf_InsertText("togglemenu\n");
+ if (gamemode == GAME_NEXUIZ)
+ {
+ Cbuf_InsertText("playvideo logo\n");
+ Cbuf_InsertText("cd loop 1\n");
+ }
+ }
+
+ Cbuf_Execute();
+ Cbuf_Execute();
+ Cbuf_Execute();
}