]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - host.c
don't set qc impulse more than once per packet
[xonotic/darkplaces.git] / host.c
diff --git a/host.c b/host.c
index e63a7f7cce31c59ed27fa87e8f136a8f4d7ec5d6..fb15b44a55ba454c2bf090e1154b84533c9ee1da 100644 (file)
--- a/host.c
+++ b/host.c
@@ -39,7 +39,7 @@ Memory is cleared / released when a server or client begins, not when they end.
 
 // how many frames have occurred
 // (checked by Host_Error and Host_SaveConfig_f)
-int host_framecount;
+int host_framecount = 0;
 // LordHavoc: set when quit is executed
 qboolean host_shuttingdown = false;
 
@@ -51,9 +51,6 @@ double realtime;
 // realtime from previous frame
 double oldrealtime;
 
-// used for -developer commandline parameter, hacky hacky
-int forcedeveloper;
-
 // current client
 client_t *host_client;
 
@@ -122,6 +119,9 @@ void Host_Error (const char *error, ...)
        static qboolean hosterror = false;
        va_list argptr;
 
+       // turn off rcon redirect if it was active when the crash occurred
+       rcon_redirect = false;
+
        va_start (argptr,error);
        dpvsnprintf (hosterrorstring1,sizeof(hosterrorstring1),error,argptr);
        va_end (argptr);
@@ -141,6 +141,8 @@ void Host_Error (const char *error, ...)
 
        CL_Parse_DumpPacket();
 
+       CL_Parse_ErrorCleanUp();
+
        //PR_Crash();
 
        // print out where the crash happened, if it was caused by QC (and do a cleanup)
@@ -238,8 +240,6 @@ void Host_InitLocal (void)
        Cvar_RegisterVariable (&noexit);
        Cvar_RegisterVariable (&skill);
        Cvar_RegisterVariable (&developer);
-       if (forcedeveloper) // make it real now that the cvar is registered
-               Cvar_SetValue("developer", 1);
        Cvar_RegisterVariable (&developer_entityparsing);
        Cvar_RegisterVariable (&deathmatch);
        Cvar_RegisterVariable (&coop);
@@ -416,9 +416,9 @@ void SV_DropClient(qboolean crash)
                        buf.data = bufdata;
                        buf.maxsize = sizeof(bufdata);
                        MSG_WriteByte(&buf, svc_disconnect);
-                       NetConn_SendUnreliableMessage(host_client->netconnection, &buf);
-                       NetConn_SendUnreliableMessage(host_client->netconnection, &buf);
-                       NetConn_SendUnreliableMessage(host_client->netconnection, &buf);
+                       NetConn_SendUnreliableMessage(host_client->netconnection, &buf, sv.protocol);
+                       NetConn_SendUnreliableMessage(host_client->netconnection, &buf, sv.protocol);
+                       NetConn_SendUnreliableMessage(host_client->netconnection, &buf, sv.protocol);
                }
                // break the net connection
                NetConn_Close(host_client->netconnection);
@@ -694,12 +694,6 @@ void Host_ServerFrame (void)
                if (sv.paused || (cl.islocalgame && (key_dest != key_game || key_consoleactive)))
                        sv.frametime = 0;
 
-               // set the time and clear the general datagram
-               SV_ClearDatagram();
-
-               // check for network packets to the server each world step incase they
-               // come in midframe (particularly if host is running really slow)
-               NetConn_ServerFrame();
 
                // move things around and think unless paused
                if (sv.frametime)
@@ -708,6 +702,9 @@ void Host_ServerFrame (void)
                // send all messages to the clients
                SV_SendClientMessages();
 
+               // clear the general datagram
+               SV_ClearDatagram();
+
                // if this server frame took too long, break out of the loop
                if (Sys_DoubleTime() >= aborttime)
                        break;
@@ -770,6 +767,11 @@ void _Host_Frame (float time)
 //
 //-------------------
 
+       // receive server packets now, which might contain rcon commands, which
+       // may change level or other such things we don't want to have happen in
+       // the middle of Host_Frame
+       NetConn_ServerFrame();
+
        // check for commands typed to the host
        Host_GetConsoleCommands();
 
@@ -906,6 +908,24 @@ void Host_Init (void)
        int i;
        const char* os;
 
+       // FIXME: this is evil, but possibly temporary
+// COMMANDLINEOPTION: Console: -developer enables warnings and other notices (RECOMMENDED for mod developers)
+       if (COM_CheckParm("-developer"))
+       {
+               developer.value = developer.integer = 100;
+               developer.string = "100";
+       }
+
+       if (COM_CheckParm("-developer2"))
+       {
+               developer.value = developer.integer = 100;
+               developer.string = "100";
+               developer_memory.value = developer_memory.integer = 100;
+               developer.string = "100";
+               developer_memorydebug.value = developer_memorydebug.integer = 100;
+               developer_memorydebug.string = "100";
+       }
+
        // LordHavoc: quake never seeded the random number generator before... heh
        srand(time(NULL));
 
@@ -940,6 +960,8 @@ void Host_Init (void)
        os = "OpenBSD";
 #elif defined(MACOSX)
        os = "Mac OS X";
+#elif defined(__MORPHOS__)
+       os = "MorphOS";
 #else
        os = "Unknown";
 #endif
@@ -951,15 +973,6 @@ void Host_Init (void)
        else
                Con_Printf("%s\n", engineversion);
 
-       // FIXME: this is evil, but possibly temporary
-// COMMANDLINEOPTION: Console: -developer enables warnings and other notices (RECOMMENDED for mod developers)
-       if (COM_CheckParm("-developer"))
-       {
-               forcedeveloper = true;
-               developer.integer = 1;
-               developer.value = 1;
-       }
-
        // initialize filesystem (including fs_basedir, fs_gamedir, -path, -game, scr_screenshot_name)
        FS_Init();
 
@@ -1008,8 +1021,6 @@ void Host_Init (void)
                Cbuf_AddText("alias startmap_sp \"map nehstart\"\nalias startmap_dm \"map nehstart\"\nexec quake.rc\n");
        else if (gamemode == GAME_TRANSFUSION)
                Cbuf_AddText("alias startmap_sp \"map e1m1\"\n""alias startmap_dm \"map bb1\"\nexec quake.rc\n");
-       else if (gamemode == GAME_NEXUIZ)
-               Cbuf_AddText("alias startmap_sp \"map nexdm01\"\nalias startmap_dm \"map nexdm01\"\nexec quake.rc\n");
        else if (gamemode == GAME_TEU)
                Cbuf_AddText("alias startmap_sp \"map start\"\nalias startmap_dm \"map start\"\nexec teu.rc\n");
        else
@@ -1023,12 +1034,11 @@ void Host_Init (void)
                Cbuf_Execute();
        }
 
-       // save console log up to this point to log_file if it was set by configs
-       Log_Start();
+       // 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
-       Host_StartVideo();
 
        // here comes the not so critical stuff
        if (setjmp(host_abortframe)) {
@@ -1088,7 +1098,7 @@ void Host_Init (void)
 
        Con_DPrint("========Initialized=========\n");
 
-       Host_StartVideo();
+       //Host_StartVideo();
 }