#include "csprogs.h"
#include "sv_demo.h"
#include "snd_main.h"
+#include "thread.h"
/*
Host_SaveConfig_to(file);
}
+void Host_AddConfigText(void)
+{
+ // set up the default startmap_sp and startmap_dm aliases (mods can
+ // override these) and then execute the quake.rc startup script
+ if (gamemode == GAME_NEHAHRA)
+ Cbuf_InsertText("alias startmap_sp \"map nehstart\"\nalias startmap_dm \"map nehstart\"\nexec " STARTCONFIGFILENAME "\n");
+ else if (gamemode == GAME_TRANSFUSION)
+ Cbuf_InsertText("alias startmap_sp \"map e1m1\"\n""alias startmap_dm \"map bb1\"\nexec " STARTCONFIGFILENAME "\n");
+ else if (gamemode == GAME_TEU)
+ Cbuf_InsertText("alias startmap_sp \"map start\"\nalias startmap_dm \"map start\"\nexec teu.rc\n");
+ else
+ Cbuf_InsertText("alias startmap_sp \"map start\"\nalias startmap_dm \"map start\"\nexec " STARTCONFIGFILENAME "\n");
+}
+
/*
===============
Host_LoadConfig_f
*/
void Host_LoadConfig_f(void)
{
- // unlock the cvar default strings so they can be updated by the new default.cfg
- Cvar_UnlockDefaults();
+ // reset all cvars, commands and aliases to init values
+ Cmd_RestoreInitState();
+ // prepend a menu restart command to execute after the config
+ Cbuf_InsertText("\nmenu_restart\n");
// reset cvars to their defaults, and then exec startup scripts again
- Cbuf_InsertText("cvar_resettodefaults_all;exec " STARTCONFIGFILENAME "\n");
+ Host_AddConfigText();
}
/*
if (host_client->netconnection)
{
- // free the client (the body stays around)
+ // tell the client to be gone
if (!crash)
{
// LordHavoc: no opportunity for resending, so use unreliable 3 times
NetConn_SendUnreliableMessage(host_client->netconnection, &buf, sv.protocol, 10000, false);
NetConn_SendUnreliableMessage(host_client->netconnection, &buf, sv.protocol, 10000, false);
}
- // break the net connection
- NetConn_Close(host_client->netconnection);
- host_client->netconnection = NULL;
}
// call qc ClientDisconnect function
prog->globals.server->self = saveSelf;
}
+ if (host_client->netconnection)
+ {
+ // break the net connection
+ NetConn_Close(host_client->netconnection);
+ host_client->netconnection = NULL;
+ }
+
// if a download is active, close it
if (host_client->download_file)
{
double advancetime, aborttime = 0;
float offset;
+ if (cls.state == ca_dedicated)
+ Collision_Cache_NewFrame();
+
// run the world state
// don't allow simulation to run too fast or too slow or logic glitches can occur
if (cls.state != ca_dedicated && (cl_timer > 0 || cls.timedemo || ((vid_activewindow ? cl_maxfps : cl_maxidlefps).value < 1)))
{
R_TimeReport("---");
+ Collision_Cache_NewFrame();
+ R_TimeReport("collisioncache");
// decide the simulation time
if (cls.capturevideo.active)
{
// initialize filesystem (including fs_basedir, fs_gamedir, -game, scr_screenshot_name)
FS_Init();
+ // must be after FS_Init
+ Crypto_Init();
+ Crypto_Init_Commands();
+
NetConn_Init();
Curl_Init();
//PR_Init();
R_Modules_Init();
Palette_Init();
MR_Init_Commands();
+ Thread_Init();
VID_Shared_Init();
VID_Init();
Render_Init();
CL_Init();
}
- // set up the default startmap_sp and startmap_dm aliases (mods can
- // override these) and then execute the quake.rc startup script
- if (gamemode == GAME_NEHAHRA)
- Cbuf_AddText("alias startmap_sp \"map nehstart\"\nalias startmap_dm \"map nehstart\"\nexec " STARTCONFIGFILENAME "\n");
- else if (gamemode == GAME_TRANSFUSION)
- Cbuf_AddText("alias startmap_sp \"map e1m1\"\n""alias startmap_dm \"map bb1\"\nexec " STARTCONFIGFILENAME "\n");
- else if (gamemode == GAME_TEU)
- Cbuf_AddText("alias startmap_sp \"map start\"\nalias startmap_dm \"map start\"\nexec teu.rc\n");
- else
- Cbuf_AddText("alias startmap_sp \"map start\"\nalias startmap_dm \"map start\"\nexec " STARTCONFIGFILENAME "\n");
+ // save off current state of aliases, commands and cvars for later restore if FS_GameDir_f is called
+ // NOTE: menu commands are freed by Cmd_RestoreInitState
+ Cmd_SaveInitState();
+
+ // FIXME: put this into some neat design, but the menu should be allowed to crash
+ // without crashing the whole game, so this should just be a short-time solution
+
+ // here comes the not so critical stuff
+ if (setjmp(host_abortframe)) {
+ return;
+ }
+
+ Host_AddConfigText();
Cbuf_Execute();
// if stuffcmds wasn't run, then quake.rc is probably missing, use default
// put up the loading image so the user doesn't stare at a black screen...
SCR_BeginLoadingPlaque();
- // FIXME: put this into some neat design, but the menu should be allowed to crash
- // without crashing the whole game, so this should just be a short-time solution
-
- // here comes the not so critical stuff
- if (setjmp(host_abortframe)) {
- return;
- }
-
if (cls.state != ca_dedicated)
{
MR_Init();
{
R_Modules_Shutdown();
VID_Shutdown();
+ Thread_Shutdown();
}
Cmd_Shutdown();
CL_Shutdown();
Sys_Shutdown();
Log_Close();
+ Crypto_Shutdown();
FS_Shutdown();
Con_Shutdown();
Memory_Shutdown();