X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=host.c;h=20d22b8b3a90a4d6a634017331a6aee91b50e327;hp=88ef16a664fea2b29aecc0301186446ecc0ce63a;hb=5487a6f74245074ed93b2efcb4249c697b7409fe;hpb=069527b0cff9d91784bba159329e01b0b94df752 diff --git a/host.c b/host.c index 88ef16a6..20d22b8b 100644 --- a/host.c +++ b/host.c @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -19,7 +19,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // host.c -- coordinates spawning and killing of local servers +#include #include "quakedef.h" +#include "cl_video.h" /* @@ -142,8 +144,6 @@ void Host_Error (char *error, ...) } inerror = true; - SCR_EndLoadingPlaque (); // reenable screen updates - va_start (argptr,error); vsprintf (hosterrorstring,error,argptr); va_end (argptr); @@ -200,6 +200,11 @@ void Host_FindMaxClients (void) else svs.maxclients = 8; } + + // Transfusion doesn't support single player games + if (gamemode == GAME_TRANSFUSION && svs.maxclients < 4) + svs.maxclients = 4; + if (svs.maxclients < 1) svs.maxclients = 8; else if (svs.maxclients > MAX_SCOREBOARD) @@ -296,7 +301,7 @@ void Host_WriteConfiguration (void) ================= SV_ClientPrintf -Sends text across to be displayed +Sends text across to be displayed FIXME: make this just a stuffed echo? ================= */ @@ -353,7 +358,7 @@ void Host_ClientCommands (char *fmt, ...) va_start (argptr,fmt); vsprintf (string, fmt,argptr); va_end (argptr); - + MSG_WriteByte (&host_client->message, svc_stufftext); MSG_WriteString (&host_client->message, string); } @@ -519,6 +524,7 @@ Host_FilterTime Returns false if the time is too short to run a frame =================== */ +extern cvar_t cl_avidemo; qboolean Host_FilterTime (double time) { double timecap; @@ -530,12 +536,21 @@ qboolean Host_FilterTime (double time) Cvar_SetValue("host_minfps", 10.0f); if (host_maxfps.value < host_minfps.value) Cvar_SetValue("host_maxfps", host_minfps.value); + if (cl_avidemo.value < 0.1f && cl_avidemo.value != 0.0f) + Cvar_SetValue("cl_avidemo", 0.0f); - // check if framerate is too high - if (!cls.timedemo) + // check if framerate is too high + if (cl_avidemo.value >= 0.1f) + { + timecap = 1.0 / (double)cl_avidemo.value; + if ((realtime - oldrealtime) < timecap) + return false; + } + else if (!cls.timedemo) { + // default to sys_ticrate (server framerate - presumably low) unless we're the active window and either connected to a server or playing a video timecap = sys_ticrate.value; - if (cls.state == ca_connected) + if (vid_activewindow && (cls.state == ca_connected || cl_videoplaying)) timecap = 1.0 / host_maxfps.value; if ((realtime - oldrealtime) < timecap) @@ -555,6 +570,8 @@ qboolean Host_FilterTime (double time) if (host_framerate.value > 0) host_frametime = host_framerate.value; + else if (cl_avidemo.value >= 0.1f) + host_frametime = (1.0 / cl_avidemo.value); else { // don't allow really short frames @@ -563,7 +580,7 @@ qboolean Host_FilterTime (double time) } cl.frametime = host_frametime = bound(0, host_frametime * slowmo.value, 0.1f); // LordHavoc: the QC code relies on no less than 10fps - + return true; } @@ -609,7 +626,6 @@ void Host_ServerFrame (void) sv.frametime = 0; frametimetotal = 0; lastservertime = realtime; -// pr_global_struct->frametime = host_frametime; // set the time and clear the general datagram SV_ClearDatagram (); @@ -702,6 +718,8 @@ void _Host_Frame (float time) ui_update(); + CL_VideoFrame(); + // update video if (host_speeds.integer) time1 = Sys_DoubleTime (); @@ -786,6 +804,9 @@ Host_Init */ void Host_Init (void) { + // LordHavoc: quake never seeded the random number generator before... heh + srand(time(NULL)); + com_argc = host_parms.argc; com_argv = host_parms.argv; // FIXME: this is evil, but possibly temporary @@ -815,7 +836,7 @@ void Host_Init (void) NET_Init (); SV_Init (); - Con_Printf ("Exe: "__TIME__" "__DATE__"\n"); + Con_Printf ("Builddate: %s\n", buildstring); if (cls.state != ca_dedicated) { @@ -867,9 +888,6 @@ void Host_Shutdown(void) } isdown = true; -// keep Con_Printf from trying to update the screen - scr_disabled_for_loading = true; - Host_WriteConfiguration (); CDAudio_Shutdown ();