]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - host.c
oops... too many colors in xpm
[xonotic/darkplaces.git] / host.c
diff --git a/host.c b/host.c
index 5089a6a588730199bb464e6814f54ce434dac1b4..0bafb91ad6076e4d898bd50d1966b92d399afdd5 100644 (file)
--- a/host.c
+++ b/host.c
@@ -59,11 +59,18 @@ jmp_buf host_abortframe;
 cvar_t host_framerate = {0, "host_framerate","0", "locks frame timing to this value in seconds, 0.05 is 20fps for example, note that this can easily run too fast, use cl_maxfps if you want to limit your framerate instead, or sys_ticrate to limit server speed"};
 // shows time used by certain subsystems
 cvar_t host_speeds = {0, "host_speeds","0", "reports how much time is used in server/graphics/sound"};
-// LordHavoc: framerate upper cap
+cvar_t cl_minfps = {CVAR_SAVE, "cl_minfps", "40", "minimum fps target - while the rendering performance is below this, it will drift toward lower quality"};
+cvar_t cl_minfps_fade = {CVAR_SAVE, "cl_minfps_fade", "0.2", "how fast the quality adapts to varying framerate"};
+cvar_t cl_minfps_qualitymax = {CVAR_SAVE, "cl_minfps_qualitymax", "1", "highest allowed drawdistance multiplier"};
+cvar_t cl_minfps_qualitymin = {CVAR_SAVE, "cl_minfps_qualitymin", "0.25", "lowest allowed drawdistance multiplier"};
+cvar_t cl_minfps_qualitypower = {CVAR_SAVE, "cl_minfps_qualitypower", "4", "raises quality value to a power of itself, higher values make quality drop more sharply in relation to framerate"};
+cvar_t cl_minfps_qualityscale = {CVAR_SAVE, "cl_minfps_qualityscale", "0.5", "multiplier for quality"};
 cvar_t cl_maxfps = {CVAR_SAVE, "cl_maxfps", "1000000", "maximum fps cap, if game is running faster than this it will wait before running another frame (useful to make cpu time available to other programs)"};
 cvar_t cl_maxidlefps = {CVAR_SAVE, "cl_maxidlefps", "20", "maximum fps cap when the game is not the active window (makes cpu time available to other programs"};
 
 cvar_t developer = {0, "developer","0", "prints additional debugging messages and information (recommended for modders and level designers)"};
+cvar_t developer_loadfile = {0, "developer_loadfile","0", "prints name and size of every file loaded via the FS_LoadFile function (which is almost everything)"};
+cvar_t developer_loading = {0, "developer_loading","0", "prints information about files as they are loaded or unloaded successfully"};
 cvar_t developer_entityparsing = {0, "developer_entityparsing", "0", "prints detailed network entities information each time a packet is received"};
 
 cvar_t timestamps = {CVAR_SAVE, "timestamps", "0", "prints timestamps on console messages"};
@@ -202,10 +209,18 @@ static void Host_InitLocal (void)
 
        Cvar_RegisterVariable (&host_framerate);
        Cvar_RegisterVariable (&host_speeds);
+       Cvar_RegisterVariable (&cl_minfps);
+       Cvar_RegisterVariable (&cl_minfps_fade);
+       Cvar_RegisterVariable (&cl_minfps_qualitymax);
+       Cvar_RegisterVariable (&cl_minfps_qualitymin);
+       Cvar_RegisterVariable (&cl_minfps_qualitypower);
+       Cvar_RegisterVariable (&cl_minfps_qualityscale);
        Cvar_RegisterVariable (&cl_maxfps);
        Cvar_RegisterVariable (&cl_maxidlefps);
 
        Cvar_RegisterVariable (&developer);
+       Cvar_RegisterVariable (&developer_loadfile);
+       Cvar_RegisterVariable (&developer_loading);
        Cvar_RegisterVariable (&developer_entityparsing);
 
        Cvar_RegisterVariable (&timestamps);
@@ -220,15 +235,9 @@ Host_SaveConfig_f
 Writes key bindings and archived cvars to config.cfg
 ===============
 */
-void Host_SaveConfig_f(void)
+void Host_SaveConfig_to(const char *file)
 {
        qfile_t *f;
-       const char *file = "config.cfg";
-
-       if(Cmd_Argc() >= 2) {
-               file = Cmd_Argv(1);
-               Con_Printf("Saving to %s\n", file);
-       }
 
 // dedicated servers initialize the host but don't parse and set the
 // config.cfg cvars
@@ -248,7 +257,21 @@ void Host_SaveConfig_f(void)
                FS_Close (f);
        }
 }
+void Host_SaveConfig(void)
+{
+       Host_SaveConfig_to("config.cfg");
+}
+void Host_SaveConfig_f(void)
+{
+       const char *file = "config.cfg";
+
+       if(Cmd_Argc() >= 2) {
+               file = Cmd_Argv(1);
+               Con_Printf("Saving to %s\n", file);
+       }
 
+       Host_SaveConfig_to(file);
+}
 
 /*
 ===============
@@ -505,6 +528,13 @@ void Host_ShutdownServer(void)
 
 // make sure all the clients know we're disconnecting
        SV_VM_Begin();
+       if(prog->loaded)
+               if(prog->funcoffsets.SV_Shutdown)
+               {
+                       func_t s = prog->funcoffsets.SV_Shutdown;
+                       prog->funcoffsets.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++)
                if (host_client->active)
                        SV_DropClient(false); // server shutdown
@@ -665,22 +695,15 @@ void Host_Main(void)
                        wait = cl_timer * -1000000.0;
                else
                        wait = max(cl_timer, sv_timer) * -1000000.0;
-               if (wait > 100000)
-                       wait = 100000;
+               wait = bound(0, wait, 100000);
 
-               if (!cls.timedemo && wait > 0)
+               if (!cls.timedemo && wait >= 1)
                {
                        double time0 = Sys_DoubleTime();
                        if (sv_checkforpacketsduringsleep.integer)
-                       {
-                               if (wait >= 1)
-                                       NetConn_SleepMicroseconds((int)wait);
-                       }
+                               NetConn_SleepMicroseconds((int)wait);
                        else
-                       {
-                               if (wait >= 1000)
-                                       Sys_Sleep((int)wait / 1000);
-                       }
+                               Sys_Sleep((int)wait);
                        svs.perf_acc_sleeptime += Sys_DoubleTime() - time0;
                        continue;
                }
@@ -849,9 +872,7 @@ void Host_Main(void)
                        //ui_update();
 
                        CL_Video_Frame();
-#ifdef SUPPORT_GECKO
                        CL_Gecko_Frame();
-#endif
 
                        CL_UpdateScreen();
 
@@ -865,7 +886,7 @@ void Host_Main(void)
                                cl.csqc_usecsqclistener = false;
                        }
                        else
-                               S_Update(&r_view.matrix);
+                               S_Update(&r_refdef.view.matrix);
 
                        CDAudio_Update();
 
@@ -942,8 +963,8 @@ static void Host_Init (void)
 // COMMANDLINEOPTION: Console: -developer enables warnings and other notices (RECOMMENDED for mod developers)
        if (COM_CheckParm("-developer"))
        {
-               developer.value = developer.integer = 100;
-               developer.string = "100";
+               developer.value = developer.integer = 1;
+               developer.string = "1";
        }
 
        if (COM_CheckParm("-developer2"))
@@ -986,23 +1007,7 @@ static void Host_Init (void)
        COM_InitGameType();
 
        // construct a version string for the corner of the console
-#if defined(__linux__)
-       os = "Linux";
-#elif defined(WIN32)
-       os = "Windows";
-#elif defined(__FreeBSD__)
-       os = "FreeBSD";
-#elif defined(__NetBSD__)
-       os = "NetBSD";
-#elif defined(__OpenBSD__)
-       os = "OpenBSD";
-#elif defined(MACOSX)
-       os = "Mac OS X";
-#elif defined(__MORPHOS__)
-       os = "MorphOS";
-#else
-       os = "Unknown";
-#endif
+       os = DP_OS_NAME;
        dpsnprintf (engineversion, sizeof (engineversion), "%s %s %s", gamename, os, buildstring);
        Con_Printf("%s\n", engineversion);
 
@@ -1026,7 +1031,7 @@ static void Host_Init (void)
 
        if (cls.state != ca_dedicated)
        {
-               Con_Printf("Initializing client\n");
+               Con_DPrintf("Initializing client\n");
 
                R_Modules_Init();
                Palette_Init();
@@ -1164,12 +1169,10 @@ void Host_Shutdown(void)
        // AK shutdown PRVM
        // AK hmm, no PRVM_Shutdown(); yet
 
-#ifdef SUPPORT_GECKO
        CL_Gecko_Shutdown();
-#endif
        CL_Video_Shutdown();
 
-       Host_SaveConfig_f();
+       Host_SaveConfig();
 
        CDAudio_Shutdown ();
        S_Terminate ();