#include "csprogs.h"
#include "sv_demo.h"
#include "snd_main.h"
+#include "thread.h"
/*
else
{
// default players in some games, singleplayer in most
- if (gamemode != GAME_GOODVSBAD2 && gamemode != GAME_NEXUIZ && gamemode != GAME_BATTLEMECH)
+ if (gamemode != GAME_GOODVSBAD2 && gamemode != GAME_NEXUIZ && gamemode != GAME_XONOTIC && gamemode != GAME_BATTLEMECH)
svs.maxclients = 1;
}
}
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
{
// call the prog function for removing a client
// this will set the body to a dead frame, among other things
- int saveSelf = prog->globals.server->self;
+ int saveSelf = PRVM_serverglobaledict(self);
host_client->clientconnectcalled = false;
- prog->globals.server->self = PRVM_EDICT_TO_PROG(host_client->edict);
- PRVM_ExecuteProgram(prog->globals.server->ClientDisconnect, "QC function ClientDisconnect is missing");
- prog->globals.server->self = saveSelf;
+ PRVM_serverglobaledict(self) = PRVM_EDICT_TO_PROG(host_client->edict);
+ PRVM_ExecuteProgram(PRVM_serverfunction(ClientDisconnect), "QC function ClientDisconnect is missing");
+ PRVM_serverglobaledict(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
SV_VM_Begin();
World_End(&sv.world);
if(prog->loaded)
- if(prog->funcoffsets.SV_Shutdown)
+ if(PRVM_serverfunction(SV_Shutdown))
{
- func_t s = prog->funcoffsets.SV_Shutdown;
- prog->funcoffsets.SV_Shutdown = 0; // prevent it from getting called again
+ func_t s = PRVM_serverfunction(SV_Shutdown);
+ PRVM_serverfunction(SV_Shutdown) = 0; // prevent it from getting called again
PRVM_ExecuteProgram(s,"SV_Shutdown() required");
}
for (i = 0, host_client = svs.clients;i < svs.maxclients;i++, host_client++)
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 (sv.paused == 1 && realtime > sv.pausedstart && sv.pausedstart > 0) {
prog->globals.generic[OFS_PARM0] = realtime - sv.pausedstart;
- PRVM_ExecuteProgram(prog->funcoffsets.SV_PausedTic, "QC function SV_PausedTic is missing");
+ PRVM_ExecuteProgram(PRVM_serverfunction(SV_PausedTic), "QC function SV_PausedTic is missing");
}
// end the server VM frame
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)
{
developer.string = "1";
}
- if (COM_CheckParm("-developer2"))
+ if (COM_CheckParm("-developer2") || COM_CheckParm("-developer3"))
{
developer.value = developer.integer = 1;
developer.string = "1";
developer_memorydebug.string = "1";
}
+ if (COM_CheckParm("-developer3"))
+ {
+ gl_paranoid.integer = 1;gl_paranoid.string = "1";
+ gl_printcheckerror.integer = 1;gl_printcheckerror.string = "1";
+ }
+
// COMMANDLINEOPTION: Console: -nostdout disables text output to the terminal the game was launched from
if (COM_CheckParm("-nostdout"))
sys_nostdout = 1;
// 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();