From 9bab7d222ac446f22badb498409d0bcdb82f914c Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 26 Apr 2018 03:09:36 +0300 Subject: [PATCH] Apply 4097 update --- engine/client/cl_game.c | 2 +- engine/client/cl_gameui.c | 2 ++ engine/client/cl_main.c | 11 ++++++----- engine/client/cl_parse.c | 4 ++-- engine/client/cl_pmove.c | 4 ++-- engine/client/cl_scrn.c | 2 +- engine/client/gl_image.c | 4 ++-- engine/client/gl_rmain.c | 5 +---- engine/client/gl_vidnt.c | 7 +++++-- engine/common/cmd.c | 2 +- engine/common/console.c | 4 ++-- engine/common/crtlib.c | 5 +++-- engine/common/filesystem.c | 2 +- engine/common/host.c | 38 ++++++++++++++++++++++++++++++++------ engine/common/hpak.c | 2 +- engine/common/mod_bmodel.c | 2 +- engine/common/sys_win.c | 2 +- engine/common/zone.c | 13 +++++++++---- engine/menu_int.h | 2 ++ engine/server/sv_cmds.c | 7 +++++-- engine/server/sv_frame.c | 22 ++++++++++++++++++---- engine/server/sv_game.c | 4 ++++ 22 files changed, 102 insertions(+), 44 deletions(-) diff --git a/engine/client/cl_game.c b/engine/client/cl_game.c index 441c51c2..3105a11f 100644 --- a/engine/client/cl_game.c +++ b/engine/client/cl_game.c @@ -237,7 +237,7 @@ void CL_InitCDAudio( const char *filename ) if( ++c > MAX_CDTRACKS - 1 ) { - MsgDev( D_WARN, "CD_Init: too many tracks %i in %s\n", filename, MAX_CDTRACKS ); + MsgDev( D_WARN, "CD_Init: too many tracks %i in %s\n", MAX_CDTRACKS, filename ); break; } } diff --git a/engine/client/cl_gameui.c b/engine/client/cl_gameui.c index 177760bb..95b6ee76 100644 --- a/engine/client/cl_gameui.c +++ b/engine/client/cl_gameui.c @@ -985,6 +985,8 @@ static ui_enginefuncs_t gEngfuncs = GL_ProcessTexture, COM_CompareFileTime, VID_GetModeString, + COM_SaveFile, + FS_Delete, }; void UI_UnloadProgs( void ) diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index 17d2bb5c..ad2628cf 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -195,7 +195,7 @@ int CL_GetFragmentSize( void *unused ) if( Netchan_IsLocal( &cls.netchan )) return FRAGMENT_LOCAL_SIZE; - return bound( FRAGMENT_MIN_SIZE, cl_dlmax->value, FRAGMENT_MAX_SIZE ); + return FRAGMENT_MIN_SIZE; } /* @@ -1091,7 +1091,7 @@ void CL_CheckForResend( void ) if( cls.connect_retry == CL_TEST_RETRIES_NORESPONCE ) { // too many fails use default connection method - Msg( "hi-speed coonection is failed, use default method\n" ); + Con_Printf( "hi-speed connection is failed, use default method\n" ); Netchan_OutOfBandPrint( NS_CLIENT, adr, "getchallenge\n" ); Cvar_SetValue( "cl_dlmax", FRAGMENT_MIN_SIZE ); cls.connect_time = host.realtime; @@ -1801,7 +1801,7 @@ void CL_ConnectionlessPacket( netadr_t from, sizebuf_t *msg ) if( cls.connect_retry >= CL_TEST_RETRIES ) { // too many fails use default connection method - Msg( "hi-speed coonection is failed, use default method\n" ); + Con_Printf( "hi-speed connection is failed, use default method\n" ); Netchan_OutOfBandPrint( NS_CLIENT, from, "getchallenge\n" ); Cvar_SetValue( "cl_dlmax", FRAGMENT_MIN_SIZE ); cls.connect_time = host.realtime; @@ -1833,7 +1833,7 @@ void CL_ConnectionlessPacket( netadr_t from, sizebuf_t *msg ) if( cls.connect_retry >= CL_TEST_RETRIES ) { // too many fails use default connection method - Msg( "hi-speed coonection is failed, use default method\n" ); + Con_Printf( "hi-speed connection is failed, use default method\n" ); Netchan_OutOfBandPrint( NS_CLIENT, from, "getchallenge\n" ); Cvar_SetValue( "cl_dlmax", FRAGMENT_MIN_SIZE ); cls.connect_time = host.realtime; @@ -2216,7 +2216,8 @@ void CL_ProcessFile( qboolean successfully_received, const char *filename ) } else { - Con_Printf( "Downloaded %i bytes for purported %i byte file, ignoring download\n", p->nDownloadSize ); + Con_Printf( "Downloaded %i bytes for purported %i byte file, ignoring download\n", + cls.netchan.tempbuffersize, p->nDownloadSize ); } if( cls.netchan.tempbuffer ) diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index f1cf3232..fcce4559 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -730,7 +730,7 @@ void CL_BatchResourceRequest( qboolean initialize ) if( !COM_IsSafeFileToDownload( p->szFileName )) { CL_RemoveFromResourceList( p ); - MsgDev( D_WARN, "Invalid file type...skipping download of %s\n", p ); + MsgDev( D_WARN, "Invalid file type...skipping download of %s\n", p->szFileName ); Mem_Free( p ); break; } @@ -1039,7 +1039,7 @@ void CL_CreateCustomizationList( void ) pResource = &cl.resourcelist[i]; if( !COM_CreateCustomization( &pPlayer->customdata, pResource, cl.playernum, 0, NULL, NULL )) - Con_Printf( "problem with client customization %i, ignoring...", pResource ); + Con_Printf( "problem with client customization %s, ignoring...", pResource->szFileName ); } } diff --git a/engine/client/cl_pmove.c b/engine/client/cl_pmove.c index f6ddde84..5e1a1c94 100644 --- a/engine/client/cl_pmove.c +++ b/engine/client/cl_pmove.c @@ -1220,6 +1220,7 @@ void CL_PredictMovement( qboolean repredicting ) int i, stoppoint; qboolean runfuncs; double f = 1.0; + cl_entity_t *ent; double time; if( cls.state != ca_active || cls.spectator ) @@ -1349,8 +1350,7 @@ void CL_PredictMovement( qboolean repredicting ) if( FBitSet( to->client.flags, FL_ONGROUND )) { - cl_entity_t *ent = CL_GetEntityByIndex( cl.local.lastground ); - + ent = CL_GetEntityByIndex( cl.local.lastground ); cl.local.onground = cl.local.lastground; cl.local.moving = false; diff --git a/engine/client/cl_scrn.c b/engine/client/cl_scrn.c index 542f50a3..4c37072b 100644 --- a/engine/client/cl_scrn.c +++ b/engine/client/cl_scrn.c @@ -126,7 +126,7 @@ void SCR_NetSpeeds( void ) if( !host.allow_console ) return; - if( !net_speeds->value || cls.demoplayback || cls.state != ca_active ) + if( !net_speeds->value || cls.state != ca_active ) return; // prevent to get too big values at max diff --git a/engine/client/gl_image.c b/engine/client/gl_image.c index d5444937..971a4923 100644 --- a/engine/client/gl_image.c +++ b/engine/client/gl_image.c @@ -311,9 +311,9 @@ void R_SetTextureParameters( void ) if( GL_Support( GL_TEXTURE_LOD_BIAS )) { if( gl_texture_lodbias->value < -glConfig.max_texture_lod_bias ) - Cvar_SetValue( "gl_mipmap_bias", -glConfig.max_texture_lod_bias ); + Cvar_SetValue( "gl_texture_lodbias", -glConfig.max_texture_lod_bias ); else if( gl_texture_lodbias->value > glConfig.max_texture_lod_bias ) - Cvar_SetValue( "gl_mipmap_bias", glConfig.max_texture_lod_bias ); + Cvar_SetValue( "gl_texture_lodbias", glConfig.max_texture_lod_bias ); } ClearBits( gl_texture_anisotropy->flags, FCVAR_CHANGED ); diff --git a/engine/client/gl_rmain.c b/engine/client/gl_rmain.c index ab2de56f..793b3c2b 100644 --- a/engine/client/gl_rmain.c +++ b/engine/client/gl_rmain.c @@ -1119,10 +1119,7 @@ void R_EndFrame( void ) R_Set2DMode( false ); if( !pwglSwapBuffers( glw_state.hDC )) - { - Con_Printf( S_ERROR "failed to swap buffers\n" ); - Host_NewInstance( va("#%s", GI->gamefolder ), "stopped" ); - } + Sys_Error( "failed to swap buffers\nCheck your video driver and as possible of reinstall it" ); } /* diff --git a/engine/client/gl_vidnt.c b/engine/client/gl_vidnt.c index c1a7e6e4..a7335ee5 100644 --- a/engine/client/gl_vidnt.c +++ b/engine/client/gl_vidnt.c @@ -361,7 +361,10 @@ static void CALLBACK GL_DebugOutput( GLuint source, GLuint type, GLuint id, GLui Con_Printf( S_OPENGL_NOTE "%s\n", message ); break; case GL_DEBUG_TYPE_OTHER_ARB: - default: Con_Printf( S_OPENGL_NOTE "%s\n", message ); + default: + if( host_developer.value < DEV_EXTENDED ) + return; + Con_Printf( S_OPENGL_NOTE "%s\n", message ); break; } } @@ -904,7 +907,7 @@ void VID_CreateFakeWindow( void ) pwglGetPixelFormatAttribiv = GL_GetProcAddress( "wglGetPixelFormatAttribivARB" ); pwglChoosePixelFormat = GL_GetProcAddress( "wglChoosePixelFormatARB" ); - // destory now it's no longer needed + // destroy now it's no longer needed VID_DestroyFakeWindow(); } diff --git a/engine/common/cmd.c b/engine/common/cmd.c index 05677092..319a8394 100644 --- a/engine/common/cmd.c +++ b/engine/common/cmd.c @@ -328,7 +328,7 @@ void Cmd_Echo_f( void ) int i; for( i = 1; i < Cmd_Argc(); i++ ) - Con_Printf( Cmd_Argv( i )); + Con_Printf( "%s", Cmd_Argv( i )); Con_Printf( "\n" ); } diff --git a/engine/common/console.c b/engine/common/console.c index 0383ae0d..796e7562 100644 --- a/engine/common/console.c +++ b/engine/common/console.c @@ -1940,9 +1940,9 @@ void Con_DrawDebug( void ) if( scr_download->value != -1.0f ) { - Q_snprintf( dlstring, sizeof( dlstring ), "Downloading [%d remaining]: ^2%s^7 %5.1f%%", + Q_snprintf( dlstring, sizeof( dlstring ), "Downloading [%d remaining]: ^2%s^7 %5.1f%% time %.f secs", host.downloadcount, host.downloadfile, scr_download->value, Sys_DoubleTime() - timeStart ); - x = glState.width - 400; + x = glState.width - 500; y = con.curFont->charHeight * 1.05f; Con_DrawString( x, y, dlstring, g_color_table[7] ); } diff --git a/engine/common/crtlib.c b/engine/common/crtlib.c index e7a68cda..c258bde3 100644 --- a/engine/common/crtlib.c +++ b/engine/common/crtlib.c @@ -569,8 +569,9 @@ int Q_vsnprintf( char *buffer, size_t buffersize, const char *format, va_list ar // to prevent crash while output __except( EXCEPTION_EXECUTE_HANDLER ) { - memset( buffer, 0, buffersize ); - result = -1; + Q_strncpy( buffer, "^1sprintf throw exception^7\n", buffersize ); +// memset( buffer, 0, buffersize ); + result = buffersize; } if( result < 0 || result >= buffersize ) diff --git a/engine/common/filesystem.c b/engine/common/filesystem.c index 0b8cb225..fdb6b1d2 100644 --- a/engine/common/filesystem.c +++ b/engine/common/filesystem.c @@ -1502,7 +1502,7 @@ static file_t *FS_SysOpen( const char *filepath, const char *mode ) opt |= O_BINARY; break; default: - MsgDev( D_ERROR, "FS_SysOpen: %s: unknown char in mode (%c)\n", filepath, mode, mode[ind] ); + MsgDev( D_ERROR, "FS_SysOpen: %s: unknown char (%c) in mode (%s)\n", filepath, mode[ind], mode ); break; } } diff --git a/engine/common/host.c b/engine/common/host.c index 67fbd1f7..f3604972 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -30,10 +30,10 @@ host_parm_t host; // host parms sysinfo_t SI; CVAR_DEFINE( host_developer, "developer", "0", 0, "engine is in development-mode" ); +CVAR_DEFINE_AUTO( sys_ticrate, "100", 0, "framerate in dedicated mode" ); convar_t *host_gameloaded; convar_t *host_clientloaded; convar_t *host_limitlocal; -convar_t host_developer; convar_t *host_maxfps; convar_t *host_framerate; convar_t *con_gamemaps; @@ -130,7 +130,7 @@ void Host_CheckSleep( void ) if( host.type == HOST_DEDICATED ) { // let the dedicated server some sleep -// Sys_Sleep( 1 ); + Sys_Sleep( 1 ); } else { @@ -393,13 +393,20 @@ double Host_CalcFPS( void ) // NOTE: we should play demos with same fps as it was recorded if( CL_IsPlaybackDemo() || CL_IsRecordDemo( )) + { fps = CL_GetDemoFramerate(); + } else if( Host_IsLocalGame( )) + { fps = host_maxfps->value; + } + else if( host.type == HOST_DEDICATED ) + { + fps = sys_ticrate.value; + } else { fps = host_maxfps->value; - if( fps == 0.0 ) fps = HOST_FPS; // default for multiplayer fps = bound( MIN_FPS, fps, MAX_FPS ); } @@ -439,8 +446,16 @@ qboolean Host_FilterTime( float time ) // limit fps to withing tolerable range fps = bound( MIN_FPS, fps, MAX_FPS ); - if(( host.realtime - oldtime ) < ( 1.0 / fps )) - return false; + if( host.type == HOST_DEDICATED ) + { + if(( host.realtime - oldtime ) < ( 1.0 / ( fps + 1.0 ))) + return false; + } + else + { + if(( host.realtime - oldtime ) < ( 1.0 / fps )) + return false; + } } host.frametime = host.realtime - oldtime; @@ -589,6 +604,7 @@ void Host_InitCommon( const char *hostname, qboolean bChangeGame ) { MEMORYSTATUS lpBuffer; char dev_level[4]; + char ticrate[16]; char progname[128]; char cmdline[128]; qboolean parse_cmdline = false; @@ -596,6 +612,7 @@ void Host_InitCommon( const char *hostname, qboolean bChangeGame ) int developer = 0; string szRootPath; char *in, *out; + double fps; lpBuffer.dwLength = sizeof( MEMORYSTATUS ); GlobalMemoryStatus( &lpBuffer ); @@ -713,6 +730,8 @@ void Host_InitCommon( const char *hostname, qboolean bChangeGame ) // member console allowing host.allow_console_init = host.allow_console; + timeBeginPeriod( 1 ); + Con_CreateConsole(); // system console used by dedicated server or show fatal errors // NOTE: this message couldn't be passed into game console but it doesn't matter @@ -731,6 +750,13 @@ void Host_InitCommon( const char *hostname, qboolean bChangeGame ) // share developer level across all dlls Q_snprintf( dev_level, sizeof( dev_level ), "%i", developer ); Cvar_DirectSet( &host_developer, dev_level ); + Cvar_RegisterVariable( &sys_ticrate ); + + if( Sys_GetParmFromCmdLine( "-sys_ticrate", ticrate )) + { + fps = bound( MIN_FPS, atof( ticrate ), MAX_FPS ); + Cvar_SetValue( "sys_ticrate", fps ); + } Con_Init(); // early console running to catch all the messages Cmd_AddCommand( "exec", Host_Exec_f, "execute a script file" ); @@ -787,7 +813,7 @@ int EXPORT Host_Main( const char *progname, int bChangeGame, pfnChangeGame func Cmd_AddCommand ( "crash", Host_Crash_f, "a way to force a bus error for development reasons"); } - host_maxfps = Cvar_Get( "fps_max", "100", FCVAR_ARCHIVE, "host fps upper limit" ); + host_maxfps = Cvar_Get( "fps_max", "72", FCVAR_ARCHIVE, "host fps upper limit" ); host_framerate = Cvar_Get( "host_framerate", "0", 0, "locks frame timing to this value in seconds" ); host_gameloaded = Cvar_Get( "host_gameloaded", "0", FCVAR_READ_ONLY, "inidcates a loaded game.dll" ); host_clientloaded = Cvar_Get( "host_clientloaded", "0", FCVAR_READ_ONLY, "inidcates a loaded client.dll" ); diff --git a/engine/common/hpak.c b/engine/common/hpak.c index a83ed0e4..e5a77697 100644 --- a/engine/common/hpak.c +++ b/engine/common/hpak.c @@ -1023,7 +1023,7 @@ void HPAK_Extract_f( void ) if( entry->disksize <= 0 || entry->disksize >= HPAK_MAX_SIZE ) { - MsgDev( D_WARN, "Unable to extract data, size invalid: %s\n", nDataSize ); + MsgDev( D_WARN, "Unable to extract data, size invalid: %s\n", Q_memprint( entry->disksize )); continue; } diff --git a/engine/common/mod_bmodel.c b/engine/common/mod_bmodel.c index ed85cc42..5780075e 100644 --- a/engine/common/mod_bmodel.c +++ b/engine/common/mod_bmodel.c @@ -1528,7 +1528,7 @@ static void Mod_LoadEntities( dbspmodel_t *bmod ) { if( ft1 > ft2 ) { - Con_Printf( S_WARN "Entity patch is older than bsp. Ignored.\n", entfilename ); + Con_Printf( S_WARN "Entity patch is older than bsp. Ignored.\n" ); } else if(( entpatch = FS_LoadFile( entfilename, &entpatchsize, true )) != NULL ) { diff --git a/engine/common/sys_win.c b/engine/common/sys_win.c index 9f5023ba..775baf6d 100644 --- a/engine/common/sys_win.c +++ b/engine/common/sys_win.c @@ -114,7 +114,7 @@ freeze application for some time */ void Sys_Sleep( int msec ) { - msec = bound( 1, msec, 1000 ); + msec = bound( 0, msec, 1000 ); Sleep( msec ); } diff --git a/engine/common/zone.c b/engine/common/zone.c index f1292d01..5d12ad09 100644 --- a/engine/common/zone.c +++ b/engine/common/zone.c @@ -164,11 +164,16 @@ static const char *Mem_CheckFilename( const char *filename ) const char *out = filename; int i; - if( !out ) return dummy; + if( !COM_CheckString( out )) + return dummy; + for( i = 0; i < 128; i++, out++ ) - if( out == '\0' ) break; // valid name - if( i == 128 ) return dummy; - return filename; + { + if( *out == '\0' ) + return filename; // valid name + } + + return dummy; } static void Mem_FreeBlock( memheader_t *mem, const char *filename, int fileline ) diff --git a/engine/menu_int.h b/engine/menu_int.h index bbc93ab0..bd73d70b 100644 --- a/engine/menu_int.h +++ b/engine/menu_int.h @@ -162,6 +162,8 @@ typedef struct ui_enginefuncs_s int (*pfnCompareFileTime)( char *filename1, char *filename2, int *iCompare ); const char *(*pfnGetModeString)( int vid_mode ); + int (*COM_SaveFile)( const char *filename, const void *data, long len ); + int (*COM_RemoveFile)( const char *filepath ); } ui_enginefuncs_t; typedef struct diff --git a/engine/server/sv_cmds.c b/engine/server/sv_cmds.c index 8027f58b..e9a18b28 100644 --- a/engine/server/sv_cmds.c +++ b/engine/server/sv_cmds.c @@ -72,8 +72,11 @@ void SV_BroadcastPrintf( sv_client_t *ignore, char *fmt, ... ) } } - // echo to console - Con_DPrintf( string ); + if( host.type == HOST_DEDICATED ) + { + // echo to console + Con_DPrintf( string ); + } } /* diff --git a/engine/server/sv_frame.c b/engine/server/sv_frame.c index 28b1bc07..339b106b 100644 --- a/engine/server/sv_frame.c +++ b/engine/server/sv_frame.c @@ -60,8 +60,8 @@ static void SV_AddEntitiesToPacket( edict_t *pViewEnt, edict_t *pClient, client_ byte *clientpvs; byte *clientphs; qboolean fullvis = false; - sv_client_t *netclient; sv_client_t *cl = NULL; + qboolean player; entity_state_t *state; int e; @@ -101,15 +101,29 @@ static void SV_AddEntitiesToPacket( edict_t *pViewEnt, edict_t *pClient, client_ if( CHECKVISBIT( ents->sended, e )) continue; + if( e >= 1 && e <= svs.maxclients ) + player = 1; + else player = 0; + + if( player ) + { + sv_client_t *cl = &svs.clients[e - 1]; + + if( cl->state != cs_spawned ) + continue; + + if( FBitSet( cl->flags, FCL_HLTV_PROXY )) + continue; + } + if( FBitSet( ent->v.effects, EF_REQUEST_PHS )) pset = clientphs; else pset = clientpvs; state = &ents->entities[ents->num_entities]; - netclient = SV_ClientFromEdict( ent, true ); // add entity to the net packet - if( svgame.dllFuncs.pfnAddToFullPack( state, e, ent, pClient, sv.hostflags, ( netclient != NULL ), pset )) + if( svgame.dllFuncs.pfnAddToFullPack( state, e, ent, pClient, sv.hostflags, player, pset )) { // to prevent adds it twice through portals SETVISBIT( ents->sended, e ); @@ -807,7 +821,7 @@ void SV_SendClientMessages( void ) { cl = sv.current_client; - if( !cl->state || FBitSet( cl->flags, FCL_FAKECLIENT )) + if( cl->state <= cs_zombie || FBitSet( cl->flags, FCL_FAKECLIENT )) continue; if( FBitSet( cl->flags, FCL_SKIP_NET_MESSAGE )) diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index 381ccb14..07b9454d 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -874,6 +874,10 @@ void SV_InitEdict( edict_t *pEdict ) SV_FreePrivateData( pEdict ); memset( &pEdict->v, 0, sizeof( entvars_t )); pEdict->v.pContainingEntity = pEdict; + pEdict->v.controller[0] = 0x7F; + pEdict->v.controller[1] = 0x7F; + pEdict->v.controller[2] = 0x7F; + pEdict->v.controller[3] = 0x7F; pEdict->free = false; }