]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - host.c
added EF_DOUBLESIDED (and internally RENDER_NOCULLFACE)
[xonotic/darkplaces.git] / host.c
diff --git a/host.c b/host.c
index 97b51e240bf6fd5e8c9ca56f24f974abcd99e304..10b964c17a9e192f4cb39f2927c19445c5331074 100644 (file)
--- a/host.c
+++ b/host.c
@@ -71,6 +71,7 @@ cvar_t cl_maxfps = {CVAR_SAVE, "cl_maxfps", "1000"};
 cvar_t sv_echobprint = {CVAR_SAVE, "sv_echobprint", "1"};
 
 cvar_t sys_ticrate = {CVAR_SAVE, "sys_ticrate","0.05"};
+cvar_t sv_fixedframeratesingleplayer = {0, "sv_fixedframeratesingleplayer", "0"};
 cvar_t serverprofile = {0, "serverprofile","0"};
 
 cvar_t fraglimit = {CVAR_NOTIFY, "fraglimit","0"};
@@ -81,6 +82,7 @@ cvar_t samelevel = {0, "samelevel","0"};
 cvar_t noexit = {CVAR_NOTIFY, "noexit","0"};
 
 cvar_t developer = {0, "developer","0"};
+cvar_t developer_entityparsing = {0, "developer_entityparsing", "0"};
 
 cvar_t skill = {0, "skill","1"};
 cvar_t deathmatch = {0, "deathmatch","0"};
@@ -114,8 +116,8 @@ This shuts down both the client and server
 */
 void Host_Error (const char *error, ...)
 {
-       static char hosterrorstring1[4096];
-       static char hosterrorstring2[4096];
+       static char hosterrorstring1[MAX_INPUTLINE];
+       static char hosterrorstring2[MAX_INPUTLINE];
        static qboolean hosterror = false;
        va_list argptr;
 
@@ -147,7 +149,7 @@ void Host_Error (const char *error, ...)
        Host_ShutdownServer (false);
 
        if (cls.state == ca_dedicated)
-               Sys_Error ("Host_Error: %s\n",hosterrorstring2);        // dedicated servers exit
+               Sys_Error ("Host_Error: %s",hosterrorstring2);  // dedicated servers exit
 
        CL_Disconnect ();
        cls.demonum = -1;
@@ -176,7 +178,7 @@ void Host_ServerOptions (void)
                if (i && i + 1 < com_argc && atoi (com_argv[i+1]) >= 1)
                        svs.maxclients = atoi (com_argv[i+1]);
                if (COM_CheckParm ("-listen"))
-                       Con_Printf ("Only one of -dedicated or -listen can be specified");
+                       Con_Printf ("Only one of -dedicated or -listen can be specified\n");
                // default sv_public on for dedicated servers (often hosted by serious administrators), off for listen servers (often hosted by clueless users)
                Cvar_SetValue("sv_public", 1);
        }
@@ -225,6 +227,7 @@ void Host_InitLocal (void)
        Cvar_RegisterVariable (&sv_echobprint);
 
        Cvar_RegisterVariable (&sys_ticrate);
+       Cvar_RegisterVariable (&sv_fixedframeratesingleplayer);
        Cvar_RegisterVariable (&serverprofile);
 
        Cvar_RegisterVariable (&fraglimit);
@@ -236,6 +239,7 @@ void Host_InitLocal (void)
        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);
 
@@ -304,7 +308,7 @@ FIXME: make this just a stuffed echo?
 void SV_ClientPrintf(const char *fmt, ...)
 {
        va_list argptr;
-       char msg[4096];
+       char msg[MAX_INPUTLINE];
 
        va_start(argptr,fmt);
        dpvsnprintf(msg,sizeof(msg),fmt,argptr);
@@ -348,7 +352,7 @@ Sends text to all active clients
 void SV_BroadcastPrintf(const char *fmt, ...)
 {
        va_list argptr;
-       char msg[4096];
+       char msg[MAX_INPUTLINE];
 
        va_start(argptr,fmt);
        dpvsnprintf(msg,sizeof(msg),fmt,argptr);
@@ -367,7 +371,7 @@ Send text over to the client to be executed
 void Host_ClientCommands(const char *fmt, ...)
 {
        va_list argptr;
-       char string[1024];
+       char string[MAX_INPUTLINE];
 
        va_start(argptr,fmt);
        dpvsnprintf(string, sizeof(string), fmt, argptr);
@@ -477,15 +481,13 @@ void Host_ShutdownServer(qboolean crash)
 {
        int i, count;
        sizebuf_t buf;
-       qbyte message[4];
+       unsigned char message[4];
 
        Con_DPrintf("Host_ShutdownServer\n");
 
        if (!sv.active)
                return;
 
-       SV_VM_Begin();
-
        NetConn_Heartbeat(2);
        NetConn_Heartbeat(2);
 
@@ -498,10 +500,11 @@ void Host_ShutdownServer(qboolean crash)
        if (count)
                Con_Printf("Host_ShutdownServer: NetConn_SendToAll failed for %u clients\n", count);
 
+       SV_VM_Begin();
        for (i = 0, host_client = svs.clients;i < svs.maxclients;i++, host_client++)
-               if (host_client->active) {
+               if (host_client->active)
                        SV_DropClient(crash); // server shutdown
-               }
+       SV_VM_End();
 
        NetConn_CloseServerPorts();
 
@@ -511,8 +514,6 @@ void Host_ShutdownServer(qboolean crash)
 //
        memset(&sv, 0, sizeof(sv));
        memset(svs.clients, 0, svs.maxclients*sizeof(client_t));
-
-       SV_VM_End();
 }
 
 
@@ -586,23 +587,17 @@ qboolean Host_FilterTime (double time)
        timeleft = timecap - (realtime - oldrealtime);
        if (timeleft > 0)
        {
+#if 1
+               if (timeleft * 1000 >= 10)
+                       Sys_Sleep(1);
+#else
                int msleft;
                // don't totally hog the CPU
-               if (cls.state == ca_dedicated)
-               {
-                       // if dedicated, try to use as little cpu as possible by waiting
-                       // just a little longer than necessary
-                       // (yes this means it doesn't quite keep up with the framerate)
-                       msleft = (int)ceil(timeleft * 1000);
-               }
-               else
-               {
-                       // if not dedicated, try to hit exactly a steady framerate by not
-                       // sleeping the full amount
-                       msleft = (int)floor(timeleft * 1000);
-               }
-               if (msleft > 0)
+               // try to hit exactly a steady framerate by not sleeping the full amount
+               msleft = (int)floor(timeleft * 1000);
+               if (msleft >= 10)
                        Sys_Sleep(msleft);
+#endif
                return false;
        }
 
@@ -658,8 +653,11 @@ Host_ServerFrame
 */
 void Host_ServerFrame (void)
 {
-       // never run more than 5 frames at a time as a sanity limit
-       int framecount, framelimit = 5;
+       // never run more than 1 frame per call because multiple frames per call it
+       // does not handle overload gracefully, slowing down is better than a
+       // sudden significant drop in framerate (or worse, freezing until the
+       // problem goes away)
+       int framecount, framelimit = 1;
        double advancetime;
        if (!sv.active)
        {
@@ -676,7 +674,7 @@ void Host_ServerFrame (void)
                // setup the VM frame
                SV_VM_Begin();
 
-               if (cl.islocalgame)
+               if (cl.islocalgame && !sv_fixedframeratesingleplayer.integer)
                        advancetime = min(sv.timer, sys_ticrate.value);
                else
                        advancetime = sys_ticrate.value;