X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=host.c;h=70d81ae3d797b05882ac7e0c2e603d38af4317a3;hb=936647276e872f68e8dabe5484e5c5d01ae062bf;hp=3d8c3dce16518a10a0c1e98fdb0f09454a79fce0;hpb=82d0052f6cddbf9ac56bffb3528614dd26739b7d;p=xonotic%2Fdarkplaces.git diff --git a/host.c b/host.c index 3d8c3dce..70d81ae3 100644 --- a/host.c +++ b/host.c @@ -65,9 +65,8 @@ cvar_t cl_minfps_qualitymax = {CVAR_SAVE, "cl_minfps_qualitymax", "1", "highest 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_maxfps = {CVAR_SAVE, "cl_maxfps", "1000000", "maximum fps cap, 0 = unlimited, 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 cl_alwayssleep = {CVAR_SAVE, "cl_alwayssleep", "0", "calls operating system Sleep function at the end of each frame with 0 milliseconds, even if not hitting framerate cap - can make gameplay smoother"}; 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)"}; @@ -218,7 +217,6 @@ static void Host_InitLocal (void) Cvar_RegisterVariable (&cl_minfps_qualityscale); Cvar_RegisterVariable (&cl_maxfps); Cvar_RegisterVariable (&cl_maxidlefps); - Cvar_RegisterVariable (&cl_alwayssleep); Cvar_RegisterVariable (&developer); Cvar_RegisterVariable (&developer_loadfile); @@ -530,9 +528,6 @@ void Host_ShutdownServer(void) // make sure all the clients know we're disconnecting SV_VM_Begin(); - for (i = 0, host_client = svs.clients;i < svs.maxclients;i++, host_client++) - if (host_client->active) - SV_DropClient(false); // server shutdown if(prog->loaded) if(prog->funcoffsets.SV_Shutdown) { @@ -540,6 +535,9 @@ void Host_ShutdownServer(void) 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 SV_VM_End(); NetConn_CloseServerPorts(); @@ -662,6 +660,9 @@ void Host_Main(void) cl.islocalgame = NetConn_IsLocalGame(); + // begin gathering mouse input + in_mouse_x = in_mouse_y = 0; + // get new key events Sys_SendKeyEvents(); @@ -681,8 +682,8 @@ void Host_Main(void) // when a server is running we only execute console commands on server frames // (this mainly allows frikbot .way config files to work properly by staying in sync with the server qc) - // otherwise we execute them on all frames - if (sv_timer > 0 || !sv.active) + // otherwise we execute them on client frames + if (sv.active ? sv_timer > 0 : cl_timer > 0) { // process console commands Cbuf_Execute(); @@ -699,7 +700,7 @@ void Host_Main(void) wait = max(cl_timer, sv_timer) * -1000000.0; wait = bound(0, wait, 100000); - if (!cls.timedemo && wait > 0) + if (!cls.timedemo && wait >= 1) { double time0 = Sys_DoubleTime(); if (sv_checkforpacketsduringsleep.integer) @@ -823,10 +824,12 @@ void Host_Main(void) cl.realframetime = max(cl_timer, clframetime); } } - else if (vid_activewindow) - clframetime = cl.realframetime = max(cl_timer, 1.0 / max(5.0f, cl_maxfps.value)); + else if (vid_activewindow && cl_maxfps.value >= 1) + clframetime = cl.realframetime = max(cl_timer, 1.0 / cl_maxfps.value); + else if (!vid_activewindow && cl_maxidlefps.value >= 1) + clframetime = cl.realframetime = max(cl_timer, 1.0 / cl_maxidlefps.value); else - clframetime = cl.realframetime = max(cl_timer, 1.0 / max(5.0f, cl_maxidlefps.value)); + clframetime = cl.realframetime = cl_timer; // apply slowmo scaling clframetime *= cl.movevars_timescale; @@ -871,8 +874,6 @@ void Host_Main(void) if (host_speeds.integer) time1 = Sys_DoubleTime(); - //ui_update(); - CL_Video_Frame(); CL_Gecko_Frame(); @@ -913,9 +914,6 @@ void Host_Main(void) } host_framecount++; - - if (cl_alwayssleep.integer) - Sys_Sleep(0); } } @@ -1034,7 +1032,9 @@ static void Host_Init (void) Host_InitLocal(); Host_ServerOptions(); - if (cls.state != ca_dedicated) + if (cls.state == ca_dedicated) + Cmd_AddCommand ("disconnect", CL_Disconnect_f, "disconnect from server (or disconnect all clients if running a server)"); + else { Con_DPrintf("Initializing client\n");