mirror of
https://github.com/FWGS/xash3d-fwgs.git
synced 2026-08-05 19:45:05 +08:00
Compare commits
26 Commits
continuous
...
continuous
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f07eea5073 | ||
|
|
fe407fbe00 | ||
|
|
78bc177e05 | ||
|
|
8fb908e3d4 | ||
|
|
d8b261370a | ||
|
|
a2c9ac5b1f | ||
|
|
7f9025e178 | ||
|
|
8647110a10 | ||
|
|
48e44f0057 | ||
|
|
e3934af7d1 | ||
|
|
a5ee631191 | ||
|
|
ce39255ef0 | ||
|
|
5aac5d2a52 | ||
|
|
061b50404d | ||
|
|
279cec5ae9 | ||
|
|
83a5648335 | ||
|
|
a8fc9a4c5a | ||
|
|
6f6ddbce28 | ||
|
|
4cb425d2bb | ||
|
|
bf5fd40d64 | ||
|
|
6bc613bdb4 | ||
|
|
a982562658 | ||
|
|
96a9172e36 | ||
|
|
34d7664342 | ||
|
|
b0a79df86f | ||
|
|
9e107e900c |
@@ -1124,7 +1124,10 @@ void CL_FinishTimeDemo( void )
|
||||
time = host.realtime - cls.td_starttime;
|
||||
if( !time ) time = 1.0;
|
||||
|
||||
Con_Printf( "%i frames %5.3f seconds %5.3f fps\n", frames, time, frames / time );
|
||||
Con_Printf( "timedemo result: %i frames %5.3f seconds %5.3f fps\n", frames, time, frames / time );
|
||||
|
||||
if( Sys_CheckParm( "-timedemo" ))
|
||||
CL_Quit_f();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -982,28 +982,21 @@ pfnCheckGameDll
|
||||
*/
|
||||
int GAME_EXPORT pfnCheckGameDll( void )
|
||||
{
|
||||
string dllpath;
|
||||
void *hInst;
|
||||
|
||||
#if TARGET_OS_IPHONE
|
||||
// loading server library drains too many ram
|
||||
// so 512MB iPod Touch cannot even connect to
|
||||
// to servers in cstrike
|
||||
#if XASH_INTERNAL_GAMELIBS
|
||||
return true;
|
||||
#endif
|
||||
#else
|
||||
string dllpath;
|
||||
|
||||
if( svgame.hInstance )
|
||||
return true;
|
||||
|
||||
COM_GetCommonLibraryPath( LIBRARY_SERVER, dllpath, sizeof( dllpath ));
|
||||
|
||||
if(( hInst = COM_LoadLibrary( dllpath, true, false )) != NULL )
|
||||
{
|
||||
COM_FreeLibrary( hInst ); // don't increase linker's reference counter
|
||||
if( FS_FileExists( dllpath, false ))
|
||||
return true;
|
||||
}
|
||||
Con_Reportf( S_WARN "Could not load server library: %s\n", COM_GetLibraryError() );
|
||||
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -34,7 +34,7 @@ GNU General Public License for more details.
|
||||
CVAR_DEFINE_AUTO( mp_decals, "300", FCVAR_ARCHIVE, "decals limit in multiplayer" );
|
||||
CVAR_DEFINE_AUTO( dev_overview, "0", 0, "draw level in overview-mode" );
|
||||
CVAR_DEFINE_AUTO( cl_resend, "6.0", 0, "time to resend connect" );
|
||||
CVAR_DEFINE_AUTO( cl_allow_download, "1", FCVAR_ARCHIVE, "allow to downloading resources from the server" );
|
||||
CVAR_DEFINE( cl_allow_download, "cl_allowdownload", "1", FCVAR_ARCHIVE, "allow to downloading resources from the server" );
|
||||
CVAR_DEFINE_AUTO( cl_allow_upload, "1", FCVAR_ARCHIVE, "allow to uploading resources to the server" );
|
||||
CVAR_DEFINE_AUTO( cl_download_ingame, "1", FCVAR_ARCHIVE, "allow to downloading resources while client is active" );
|
||||
CVAR_DEFINE_AUTO( cl_logofile, "lambda", FCVAR_ARCHIVE, "player logo name" );
|
||||
|
||||
@@ -1983,7 +1983,7 @@ void Con_DrawConsole( void )
|
||||
|
||||
if( cls.state == ca_connecting || cls.state == ca_connected )
|
||||
{
|
||||
if( !cl_allow_levelshots.value )
|
||||
if( !cl_allow_levelshots.value && !cls.timedemo )
|
||||
{
|
||||
if(( Cvar_VariableInteger( "cl_background" ) || Cvar_VariableInteger( "sv_background" )) && cls.key_dest != key_console )
|
||||
con.vislines = con.showlines = 0;
|
||||
@@ -1993,7 +1993,7 @@ void Con_DrawConsole( void )
|
||||
{
|
||||
con.showlines = 0;
|
||||
|
||||
if( host_developer.value >= DEV_EXTENDED )
|
||||
if( host_developer.value >= DEV_EXTENDED && !cls.timedemo )
|
||||
Con_DrawNotify(); // draw notify lines
|
||||
}
|
||||
}
|
||||
@@ -2025,7 +2025,7 @@ void Con_DrawConsole( void )
|
||||
{
|
||||
if( con.vislines )
|
||||
Con_DrawSolidConsole( con.vislines );
|
||||
else if( cls.state == ca_active && ( cls.key_dest == key_game || cls.key_dest == key_message ))
|
||||
else if( cls.state == ca_active && ( cls.key_dest == key_game || cls.key_dest == key_message ) && !cls.timedemo )
|
||||
Con_DrawNotify(); // draw notify lines
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -747,8 +747,6 @@ void SV_ShutdownGame( void );
|
||||
void SV_ExecLoadLevel( void );
|
||||
void SV_ExecLoadGame( void );
|
||||
void SV_ExecChangeLevel( void );
|
||||
qboolean SV_InitGameProgs( void );
|
||||
void SV_FreeGameProgs( void );
|
||||
void CL_WriteMessageHistory( void );
|
||||
void CL_SendCmd( void );
|
||||
void CL_Disconnect( void );
|
||||
|
||||
@@ -1423,15 +1423,11 @@ save serverinfo variables into server.cfg (using for dedicated server too)
|
||||
*/
|
||||
void GAME_EXPORT Host_WriteServerConfig( const char *name )
|
||||
{
|
||||
qboolean already_loaded;
|
||||
file_t *f;
|
||||
string newconfigfile;
|
||||
|
||||
Q_snprintf( newconfigfile, MAX_STRING, "%s.new", name );
|
||||
|
||||
// TODO: remove this mechanism, make it safer for now
|
||||
already_loaded = SV_InitGameProgs(); // collect user variables
|
||||
|
||||
// FIXME: move this out until menu parser is done
|
||||
CSCR_LoadDefaultCVars( "settings.scr" );
|
||||
|
||||
@@ -1448,10 +1444,6 @@ void GAME_EXPORT Host_WriteServerConfig( const char *name )
|
||||
Host_FinalizeConfig( f, name );
|
||||
}
|
||||
else Con_DPrintf( S_ERROR "Couldn't write %s.\n", name );
|
||||
|
||||
// don't unload library that wasn't loaded by us
|
||||
if( !already_loaded )
|
||||
SV_FreeGameProgs(); // release progs with all variables
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -33,6 +33,7 @@ GNU General Public License for more details.
|
||||
#include "common.h"
|
||||
#include "base_cmd.h"
|
||||
#include "client.h"
|
||||
#include "server.h"
|
||||
#include "netchan.h"
|
||||
#include "protocol.h"
|
||||
#include "mod_local.h"
|
||||
@@ -127,6 +128,7 @@ void Sys_PrintUsage( void )
|
||||
O("-noenginejoy ", "disable engine builtin joystick support")
|
||||
O("-noenginemouse ", "disable engine builtin mouse support")
|
||||
O("-nosound ", "disable sound output")
|
||||
O("-timedemo ", "run timedemo and exit")
|
||||
#endif
|
||||
|
||||
"\nPlatform-specific options:\n"
|
||||
@@ -1016,10 +1018,11 @@ void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bCha
|
||||
else
|
||||
{
|
||||
#if TARGET_OS_IOS
|
||||
const char *IOS_GetDocsDir();
|
||||
Q_strncpy( host.rootdir, IOS_GetDocsDir(), sizeof(host.rootdir) );
|
||||
Q_strncpy( host.rootdir, IOS_GetDocsDir(), sizeof( host.rootdir ));
|
||||
#elif XASH_ANDROID && XASH_SDL
|
||||
Q_strncpy( host.rootdir, SDL_AndroidGetExternalStoragePath, sizeof( host.rootdir ));
|
||||
#elif XASH_PSVITA
|
||||
if ( !PSVita_GetBasePath( host.rootdir, sizeof( host.rootdir ) ) )
|
||||
if ( !PSVita_GetBasePath( host.rootdir, sizeof( host.rootdir )))
|
||||
{
|
||||
Sys_Error( "couldn't find xash3d data directory" );
|
||||
host.rootdir[0] = 0;
|
||||
@@ -1158,6 +1161,7 @@ Host_Main
|
||||
int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGame, pfnChangeGame func )
|
||||
{
|
||||
static double oldtime, newtime;
|
||||
string demoname;
|
||||
|
||||
host.starttime = Sys_DoubleTime();
|
||||
|
||||
@@ -1254,6 +1258,9 @@ int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGa
|
||||
Cbuf_ExecStuffCmds(); // execute stuffcmds (commandline)
|
||||
SCR_CheckStartupVids(); // must be last
|
||||
|
||||
if( Sys_GetParmFromCmdLine( "-timedemo", demoname ))
|
||||
Cbuf_AddTextf( "timedemo %s\n", demoname );
|
||||
|
||||
oldtime = Sys_DoubleTime() - 0.1;
|
||||
|
||||
if( Host_IsDedicated( ))
|
||||
@@ -1302,6 +1309,7 @@ void EXPORT Host_Shutdown( void )
|
||||
#endif
|
||||
|
||||
SV_Shutdown( "Server shutdown\n" );
|
||||
SV_UnloadProgs();
|
||||
SV_ShutdownFilter();
|
||||
CL_Shutdown();
|
||||
|
||||
|
||||
@@ -444,6 +444,7 @@ static void NET_InitializeCriticalSections( void )
|
||||
void NET_ResolveThread( void )
|
||||
{
|
||||
struct sockaddr_storage addr;
|
||||
qboolean res;
|
||||
|
||||
RESOLVE_DBG( "[resolve thread] starting resolve for " );
|
||||
RESOLVE_DBG( nsthread.hostname );
|
||||
@@ -453,13 +454,14 @@ void NET_ResolveThread( void )
|
||||
RESOLVE_DBG( " with gethostbyname\n" );
|
||||
#endif
|
||||
|
||||
if( NET_GetHostByName( nsthread.hostname, nsthread.family, &addr ))
|
||||
if(( res = NET_GetHostByName( nsthread.hostname, nsthread.family, &addr )))
|
||||
RESOLVE_DBG( "[resolve thread] success\n" );
|
||||
else
|
||||
RESOLVE_DBG( "[resolve thread] failed\n" );
|
||||
mutex_lock( &nsthread.mutexres );
|
||||
nsthread.addr = addr;
|
||||
nsthread.busy = false;
|
||||
nsthread.result = res ? NET_EAI_OK : NET_EAI_NONAME;
|
||||
RESOLVE_DBG( "[resolve thread] returning result\n" );
|
||||
mutex_unlock( &nsthread.mutexres );
|
||||
RESOLVE_DBG( "[resolve thread] exiting thread\n" );
|
||||
@@ -544,6 +546,7 @@ static net_gai_state_t NET_StringToSockaddr( const char *s, struct sockaddr_stor
|
||||
memset( &nsthread.addr, 0, sizeof( nsthread.addr ));
|
||||
|
||||
detach_thread( nsthread.thread );
|
||||
asyncfailed = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -37,6 +37,11 @@ void Platform_MessageBox( const char *title, const char *message, qboolean paren
|
||||
qboolean Sys_DebuggerPresent( void ); // optional, see Sys_DebugBreak
|
||||
void Platform_SetStatus( const char *status );
|
||||
|
||||
// legacy iOS port functions
|
||||
#if TARGET_OS_IOS
|
||||
const char *IOS_GetDocsDir( void );
|
||||
#endif // TARGET_OS_IOS
|
||||
|
||||
#if XASH_WIN32 || XASH_LINUX
|
||||
#define XASH_PLATFORM_HAVE_STATUS 1
|
||||
#else
|
||||
|
||||
@@ -128,7 +128,7 @@ static qboolean SDLash_IsInstanceIDAGameController( SDL_JoystickID joyId )
|
||||
return true;
|
||||
return false;
|
||||
#else
|
||||
if( SDL_GameControllerFromInstanceID( joyId ) )
|
||||
if( SDL_GameControllerFromInstanceID( joyId ) != NULL )
|
||||
return true;
|
||||
return false;
|
||||
#endif
|
||||
@@ -148,7 +148,7 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
|
||||
#else
|
||||
int keynum = key.keysym.sym;
|
||||
#endif
|
||||
qboolean numLock = SDL_GetModState() & KMOD_NUM;
|
||||
qboolean numLock = FBitSet( SDL_GetModState(), KMOD_NUM );
|
||||
|
||||
#if XASH_ANDROID
|
||||
if( keynum == SDL_SCANCODE_VOLUMEUP || keynum == SDL_SCANCODE_VOLUMEDOWN )
|
||||
@@ -159,7 +159,7 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
|
||||
|
||||
if( SDL_IsTextInputActive() && down && cls.key_dest != key_game )
|
||||
{
|
||||
if( SDL_GetModState() & KMOD_CTRL )
|
||||
if( FBitSet( SDL_GetModState(), KMOD_CTRL ))
|
||||
{
|
||||
if( keynum >= SDL_SCANCODE_A && keynum <= SDL_SCANCODE_Z )
|
||||
{
|
||||
@@ -176,7 +176,7 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
|
||||
|
||||
if( isprint( keynum ) )
|
||||
{
|
||||
if( SDL_GetModState() & KMOD_SHIFT )
|
||||
if( FBitSet( SDL_GetModState(), KMOD_SHIFT ))
|
||||
{
|
||||
keynum = Key_ToUpper( keynum );
|
||||
}
|
||||
|
||||
@@ -158,8 +158,8 @@ void *SW_LockBuffer( void )
|
||||
void *pixels;
|
||||
int stride;
|
||||
|
||||
if( SDL_LockTexture(sw.tex, NULL, &pixels, &stride ) )
|
||||
Sys_Error("%s", SDL_GetError());
|
||||
if( SDL_LockTexture(sw.tex, NULL, &pixels, &stride ) < 0 )
|
||||
Sys_Error( "%s: %s", __func__, SDL_GetError( ));
|
||||
return pixels;
|
||||
}
|
||||
|
||||
@@ -272,7 +272,7 @@ static void R_InitVideoModes( void )
|
||||
int j;
|
||||
SDL_DisplayMode mode;
|
||||
|
||||
if( SDL_GetDisplayMode( displayIndex, i, &mode ) )
|
||||
if( SDL_GetDisplayMode( displayIndex, i, &mode ) < 0 )
|
||||
{
|
||||
Msg( "SDL_GetDisplayMode: %s\n", SDL_GetError() );
|
||||
continue;
|
||||
@@ -419,12 +419,16 @@ static qboolean WIN_SetWindowIcon( HICON ico )
|
||||
{
|
||||
SDL_SysWMinfo wminfo;
|
||||
|
||||
if( SDL_GetWindowWMInfo( host.hWnd, &wminfo ))
|
||||
SDL_VERSION( &wminfo.version );
|
||||
|
||||
if( SDL_GetWindowWMInfo( host.hWnd, &wminfo ) == SDL_TRUE )
|
||||
{
|
||||
SendMessage( wminfo.info.win.window, WM_SETICON, ICON_SMALL, (LONG_PTR)ico );
|
||||
SendMessage( wminfo.info.win.window, WM_SETICON, ICON_BIG, (LONG_PTR)ico );
|
||||
return true;
|
||||
}
|
||||
|
||||
Con_Reportf( S_ERROR "%s: %s", __func__, SDL_GetError( ));
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
@@ -492,8 +496,8 @@ void GL_UpdateSwapInterval( void )
|
||||
{
|
||||
ClearBits( gl_vsync.flags, FCVAR_CHANGED );
|
||||
|
||||
if( SDL_GL_SetSwapInterval( gl_vsync.value ) )
|
||||
Con_Reportf( S_ERROR "SDL_GL_SetSwapInterval: %s\n", SDL_GetError( ) );
|
||||
if( SDL_GL_SetSwapInterval( gl_vsync.value ) < 0 )
|
||||
Con_Reportf( S_ERROR "SDL_GL_SetSwapInterval: %s\n", SDL_GetError( ));
|
||||
}
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
}
|
||||
@@ -542,7 +546,7 @@ GL_UpdateContext
|
||||
static qboolean GL_UpdateContext( void )
|
||||
{
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( SDL_GL_MakeCurrent( host.hWnd, glw_state.context ))
|
||||
if( SDL_GL_MakeCurrent( host.hWnd, glw_state.context ) < 0 )
|
||||
{
|
||||
Con_Reportf( S_ERROR "GL_UpdateContext: %s\n", SDL_GetError());
|
||||
return GL_DeleteContext();
|
||||
@@ -599,7 +603,7 @@ static qboolean VID_SetScreenResolution( int width, int height, window_mode_t wi
|
||||
want.w = width;
|
||||
want.h = height;
|
||||
|
||||
if( SDL_GetClosestDisplayMode( 0, &want, &got ) < 0 )
|
||||
if( SDL_GetClosestDisplayMode( 0, &want, &got ) == NULL )
|
||||
{
|
||||
Con_Printf( S_ERROR "%s: SDL_GetClosestDisplayMode: %s", __func__, SDL_GetError( ));
|
||||
return false;
|
||||
@@ -1047,7 +1051,7 @@ qboolean R_Init_Video( const int type )
|
||||
// refdll can request some attributes
|
||||
GL_SetupAttributes( );
|
||||
|
||||
if( SDL_GL_LoadLibrary( EGL_LIB ) )
|
||||
if( SDL_GL_LoadLibrary( EGL_LIB ) < 0 )
|
||||
{
|
||||
Con_Reportf( S_ERROR "Couldn't initialize OpenGL: %s\n", SDL_GetError());
|
||||
return false;
|
||||
@@ -1086,7 +1090,11 @@ rserr_t R_ChangeDisplaySettings( int width, int height, window_mode_t window_mod
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_DisplayMode displayMode;
|
||||
|
||||
SDL_GetCurrentDisplayMode( 0, &displayMode );
|
||||
if( SDL_GetCurrentDisplayMode( 0, &displayMode ) < 0 )
|
||||
{
|
||||
Con_Printf( S_ERROR "SDL_GetCurrentDisplayMode: %s", SDL_GetError( ));
|
||||
return rserr_invalid_mode;
|
||||
}
|
||||
|
||||
// check our desktop attributes
|
||||
refState.desktopBitsPixel = SDL_BITSPERPIXEL( displayMode.format );
|
||||
@@ -1115,8 +1123,11 @@ rserr_t R_ChangeDisplaySettings( int width, int height, window_mode_t window_mod
|
||||
VID_RestoreScreenResolution();
|
||||
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( SDL_SetWindowFullscreen( host.hWnd, 0 ))
|
||||
if( SDL_SetWindowFullscreen( host.hWnd, 0 ) < 0 )
|
||||
{
|
||||
Con_Printf( S_ERROR "SDL_SetWindowFullscreen: %s", SDL_GetError( ));
|
||||
return rserr_invalid_fullscreen;
|
||||
}
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 5 )
|
||||
SDL_SetWindowResizable( host.hWnd, SDL_TRUE );
|
||||
#endif
|
||||
|
||||
@@ -360,7 +360,6 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
qboolean initialized; // sv_init has completed
|
||||
qboolean game_library_loaded; // is game library loaded in SV_InitGame
|
||||
double timestart; // just for profiling
|
||||
|
||||
int maxclients; // server max clients
|
||||
|
||||
@@ -3031,7 +3031,7 @@ void SV_SetStringArrayMode( qboolean dynamic )
|
||||
#endif
|
||||
}
|
||||
|
||||
#if XASH_64BIT && !XASH_WIN32 && !XASH_APPLE && !XASH_NSWITCH
|
||||
#if XASH_64BIT && !XASH_WIN32 && !XASH_APPLE && !XASH_NSWITCH && !XASH_ANDROID
|
||||
#define USE_MMAP
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
@@ -5130,7 +5130,6 @@ void SV_UnloadProgs( void )
|
||||
|
||||
Mod_ResetStudioAPI ();
|
||||
|
||||
svs.game_library_loaded = false;
|
||||
COM_FreeLibrary( svgame.hInstance );
|
||||
Mem_FreePool( &svgame.mempool );
|
||||
memset( &svgame, 0, sizeof( svgame ));
|
||||
@@ -5148,7 +5147,14 @@ qboolean SV_LoadProgs( const char *name )
|
||||
static playermove_t gpMove;
|
||||
edict_t *e;
|
||||
|
||||
if( svgame.hInstance ) SV_UnloadProgs();
|
||||
if( svgame.hInstance )
|
||||
{
|
||||
#if XASH_WIN32
|
||||
SV_UnloadProgs();
|
||||
#else // XASH_WIN32
|
||||
return true;
|
||||
#endif // XASH_WIN32
|
||||
}
|
||||
|
||||
// fill it in
|
||||
svgame.pmove = &gpMove;
|
||||
|
||||
@@ -706,7 +706,7 @@ qboolean SV_InitGame( void )
|
||||
{
|
||||
string dllpath;
|
||||
|
||||
if( svs.game_library_loaded )
|
||||
if( svgame.hInstance )
|
||||
return true;
|
||||
|
||||
// first initialize?
|
||||
@@ -721,7 +721,6 @@ qboolean SV_InitGame( void )
|
||||
}
|
||||
|
||||
// client frames will be allocated in SV_ClientConnect
|
||||
svs.game_library_loaded = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1115,28 +1114,6 @@ int SV_GetMaxClients( void )
|
||||
return svs.maxclients;
|
||||
}
|
||||
|
||||
qboolean SV_InitGameProgs( void )
|
||||
{
|
||||
string dllpath;
|
||||
|
||||
if( svgame.hInstance ) return true; // already loaded
|
||||
|
||||
COM_GetCommonLibraryPath( LIBRARY_SERVER, dllpath, sizeof( dllpath ));
|
||||
|
||||
// just try to initialize
|
||||
SV_LoadProgs( dllpath );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void SV_FreeGameProgs( void )
|
||||
{
|
||||
if( svs.initialized ) return; // server is active
|
||||
|
||||
// unload progs (free cvars and commands)
|
||||
SV_UnloadProgs();
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
SV_ExecLoadLevel
|
||||
|
||||
@@ -48,7 +48,8 @@ CVAR_DEFINE_AUTO( sv_send_logos, "1", 0, "send custom decal logo to other player
|
||||
CVAR_DEFINE_AUTO( sv_send_resources, "1", 0, "allow to download missed resources for players" );
|
||||
CVAR_DEFINE_AUTO( sv_logbans, "0", 0, "print into the server log info about player bans" );
|
||||
CVAR_DEFINE_AUTO( sv_allow_upload, "1", FCVAR_SERVER, "allow uploading custom resources on a server" );
|
||||
CVAR_DEFINE_AUTO( sv_allow_download, "1", FCVAR_SERVER, "allow downloading custom resources to the client" );
|
||||
CVAR_DEFINE( sv_allow_download, "sv_allowdownload", "1", FCVAR_SERVER, "allow downloading custom resources to the client" );
|
||||
static CVAR_DEFINE_AUTO( sv_allow_dlfile, "1", 0, "compatibility cvar, does nothing" );
|
||||
CVAR_DEFINE_AUTO( sv_uploadmax, "0.5", FCVAR_SERVER, "max size to upload custom resources (500 kB as default)" );
|
||||
CVAR_DEFINE_AUTO( sv_downloadurl, "", FCVAR_PROTECTED, "location from which clients can download missing files" );
|
||||
CVAR_DEFINE( sv_consistency, "mp_consistency", "1", FCVAR_SERVER, "enbale consistency check in multiplayer" );
|
||||
@@ -925,6 +926,7 @@ void SV_Init( void )
|
||||
Cvar_RegisterVariable( &sv_unlagsamples );
|
||||
Cvar_RegisterVariable( &sv_allow_upload );
|
||||
Cvar_RegisterVariable( &sv_allow_download );
|
||||
Cvar_RegisterVariable( &sv_allow_dlfile );
|
||||
Cvar_RegisterVariable( &sv_send_logos );
|
||||
Cvar_RegisterVariable( &sv_send_resources );
|
||||
Cvar_RegisterVariable( &sv_uploadmax );
|
||||
@@ -1089,7 +1091,9 @@ void SV_Shutdown( const char *finalmsg )
|
||||
if( CL_IsPlaybackDemo( ))
|
||||
CL_Drop();
|
||||
|
||||
SV_UnloadProgs ();
|
||||
#if XASH_WIN32
|
||||
SV_UnloadProgs();
|
||||
#endif // XASH_WIN32
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1106,7 +1110,10 @@ void SV_Shutdown( const char *finalmsg )
|
||||
NET_MasterShutdown();
|
||||
|
||||
NET_Config( false, false );
|
||||
SV_UnloadProgs ();
|
||||
SV_DeactivateServer();
|
||||
#if XASH_WIN32
|
||||
SV_UnloadProgs();
|
||||
#endif // XASH_WIN32
|
||||
CL_Drop();
|
||||
|
||||
// free current level
|
||||
|
||||
@@ -80,8 +80,8 @@ static qboolean SV_CopyEdictToPhysEnt( physent_t *pe, edict_t *ed )
|
||||
}
|
||||
else
|
||||
{
|
||||
// otherwise copy the classname
|
||||
Q_strncpy( pe->name, STRING( ed->v.classname ), sizeof( pe->name ));
|
||||
// otherwise copy the modelname
|
||||
Q_strncpy( pe->name, mod->name, sizeof( pe->name ));
|
||||
}
|
||||
|
||||
pe->model = pe->studiomodel = NULL;
|
||||
|
||||
@@ -150,7 +150,10 @@ public:
|
||||
|
||||
void RemoveFile( const char *path, const char *id ) override
|
||||
{
|
||||
FS_Delete( path ); // FS_Delete is aware of slashes
|
||||
char dir[MAX_VA_STRING], fullpath[MAX_VA_STRING];
|
||||
|
||||
Q_snprintf( fullpath, sizeof( fullpath ), "%s/%s", IdToDir( dir, sizeof( dir ), id ), path );
|
||||
FS_Delete( fullpath ); // FS_Delete is aware of slashes
|
||||
}
|
||||
|
||||
void CreateDirHierarchy( const char *path, const char *id ) override
|
||||
|
||||
@@ -770,13 +770,13 @@ void FS_ParseGenericGameInfo( gameinfo_t *GameInfo, const char *buf, const qbool
|
||||
else if( !Q_stricmp( token, "secure" ))
|
||||
{
|
||||
pfile = COM_ParseFile( pfile, token, sizeof( token ));
|
||||
GameInfo->secure = Q_atoi( token );
|
||||
GameInfo->secure = Q_atoi( token ) ? true : false;
|
||||
}
|
||||
// valid for both
|
||||
else if( !Q_stricmp( token, "nomodels" ))
|
||||
{
|
||||
pfile = COM_ParseFile( pfile, token, sizeof( token ));
|
||||
GameInfo->nomodels = Q_atoi( token );
|
||||
GameInfo->nomodels = Q_atoi( token ) ? true : false;
|
||||
}
|
||||
else if( !Q_stricmp( token, isGameInfo ? "max_edicts" : "edicts" ))
|
||||
{
|
||||
@@ -844,17 +844,17 @@ void FS_ParseGenericGameInfo( gameinfo_t *GameInfo, const char *buf, const qbool
|
||||
else if( !Q_stricmp( token, "noskills" ))
|
||||
{
|
||||
pfile = COM_ParseFile( pfile, token, sizeof( token ));
|
||||
GameInfo->noskills = Q_atoi( token );
|
||||
GameInfo->noskills = Q_atoi( token ) ? true : false;
|
||||
}
|
||||
else if( !Q_stricmp( token, "render_picbutton_text" ))
|
||||
{
|
||||
pfile = COM_ParseFile( pfile, token, sizeof( token ));
|
||||
GameInfo->render_picbutton_text = Q_atoi( token );
|
||||
GameInfo->render_picbutton_text = Q_atoi( token ) ? true : false;
|
||||
}
|
||||
else if( !Q_stricmp( token, "internal_vgui_support" ))
|
||||
{
|
||||
pfile = COM_ParseFile( pfile, token, sizeof( token ));
|
||||
GameInfo->internal_vgui_support = Q_atoi( token );
|
||||
GameInfo->internal_vgui_support = Q_atoi( token ) ? true : false;
|
||||
}
|
||||
else if( !Q_stricmp( token, "quicksave_aged_count" ))
|
||||
{
|
||||
|
||||
@@ -642,7 +642,14 @@ COM_ExtractFilePath
|
||||
*/
|
||||
void COM_ExtractFilePath( const char *path, char *dest )
|
||||
{
|
||||
const char *src = path + Q_strlen( path ) - 1;
|
||||
size_t len = Q_strlen( path );
|
||||
const char *src = path + len - 1;
|
||||
|
||||
if( len == 0 )
|
||||
{
|
||||
dest[0] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// back up until a \ or the start
|
||||
while( src != path && !(*(src - 1) == '\\' || *(src - 1) == '/' ))
|
||||
|
||||
@@ -1014,7 +1014,7 @@ static void APIENTRY GL2_TexImage2D( GLenum target, GLint level, GLint internalf
|
||||
}
|
||||
internalformat = format;
|
||||
}
|
||||
if( internalformat == GL_LUMINANCE8_ALPHA8 || internalformat == GL_RGB )
|
||||
if( internalformat == GL_LUMINANCE8_ALPHA8 || internalformat == GL_RGB || internalformat == GL_RGB8 || internalformat == GL_RGB5 )
|
||||
internalformat = GL_RGBA;
|
||||
rpglTexImage2D( target, level, internalformat, width, height, border, format, type, data );
|
||||
if( data != pixels )
|
||||
|
||||
@@ -26,7 +26,7 @@ CVAR_DEFINE_AUTO( r_novis, "0", 0, "ignore vis information (perfomance test)" );
|
||||
CVAR_DEFINE_AUTO( r_nocull, "0", 0, "ignore frustrum culling (perfomance test)" );
|
||||
CVAR_DEFINE_AUTO( r_lockpvs, "0", FCVAR_CHEAT, "lockpvs area at current point (pvs test)" );
|
||||
CVAR_DEFINE_AUTO( r_lockfrustum, "0", FCVAR_CHEAT, "lock frustrum area at current point (cull test)" );
|
||||
CVAR_DEFINE_AUTO( r_traceglow, "1", FCVAR_GLCONFIG, "cull flares behind models" );
|
||||
CVAR_DEFINE_AUTO( r_traceglow, "0", FCVAR_GLCONFIG, "cull flares behind models" );
|
||||
CVAR_DEFINE_AUTO( gl_round_down, "2", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "round texture sizes to nearest POT value" );
|
||||
CVAR_DEFINE( r_vbo, "gl_vbo", "0", FCVAR_ARCHIVE, "draw world using VBO (known to be glitchy)" );
|
||||
CVAR_DEFINE( r_vbo_dlightmode, "gl_vbo_dlightmode", "1", FCVAR_ARCHIVE, "vbo dlight rendering mode (0-1)" );
|
||||
@@ -859,7 +859,9 @@ void GL_InitExtensionsGLES( void )
|
||||
#endif
|
||||
case GL_DEBUG_OUTPUT:
|
||||
if( glw_state.extended )
|
||||
GL_CheckExtension( "GL_KHR_debug", NULL, NULL, extid, 0 );
|
||||
GL_CheckExtension( "GL_KHR_debug", debugoutputfuncs, "gl_debug_output", extid, 0 );
|
||||
else
|
||||
GL_SetExtension( extid, false );
|
||||
break;
|
||||
// case GL_TEXTURE_COMPRESSION_EXT: NOPE
|
||||
// case GL_SHADER_GLSL100_EXT: NOPE
|
||||
@@ -1123,6 +1125,7 @@ void GL_InitExtensions( void )
|
||||
|
||||
// force everything to happen in the main thread instead of in a separate driver thread
|
||||
pglEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB );
|
||||
|
||||
}
|
||||
|
||||
// enable all the low priority messages
|
||||
@@ -1375,7 +1378,7 @@ void GL_SetupAttributes( int safegl )
|
||||
#ifdef XASH_NANOGL
|
||||
gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_MAJOR_VERSION, 1 );
|
||||
gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_MINOR_VERSION, 1 );
|
||||
#elif defined( XASH_WES ) || defined( XASH_REGAL )
|
||||
#else
|
||||
gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_MAJOR_VERSION, 2 );
|
||||
gEngfuncs.GL_SetAttribute( REF_GL_CONTEXT_MINOR_VERSION, 0 );
|
||||
#endif
|
||||
|
||||
@@ -85,7 +85,7 @@ static void R_ParseDetailTextures( const char *filename )
|
||||
if( Q_stricmp( tex->name, texname ))
|
||||
continue;
|
||||
|
||||
tex->dt_texturenum = GL_LoadTexture( detail_path, NULL, 0, TF_FORCE_COLOR );
|
||||
tex->dt_texturenum = GL_LoadTexture( detail_path, NULL, 0, TF_FORCE_COLOR|TF_NOFLIP_TGA );
|
||||
|
||||
// texture is loaded
|
||||
if( tex->dt_texturenum )
|
||||
|
||||
@@ -67,7 +67,7 @@ CVAR_DEFINE_AUTO( sw_surfcacheoverride, "0", 0, "");
|
||||
static CVAR_DEFINE_AUTO( sw_waterwarp, "1", FCVAR_GLCONFIG, "nothing");
|
||||
static CVAR_DEFINE_AUTO( sw_notransbrushes, "0", FCVAR_GLCONFIG, "do not apply transparency to water/glasses (faster)");
|
||||
CVAR_DEFINE_AUTO( sw_noalphabrushes, "0", FCVAR_GLCONFIG, "do not draw brush holes (faster)");
|
||||
CVAR_DEFINE_AUTO( r_traceglow, "1", FCVAR_GLCONFIG, "cull flares behind models" );
|
||||
CVAR_DEFINE_AUTO( r_traceglow, "0", FCVAR_GLCONFIG, "cull flares behind models" );
|
||||
CVAR_DEFINE_AUTO( sw_texfilt, "0", FCVAR_GLCONFIG, "texture dither");
|
||||
static CVAR_DEFINE_AUTO( r_novis, "0", 0, "" );
|
||||
|
||||
|
||||
2
wscript
2
wscript
@@ -167,7 +167,7 @@ def configure(conf):
|
||||
conf.env.MSVC_TARGETS = ['x86' if not conf.options.ALLOW64 else 'x64']
|
||||
|
||||
# Load compilers early
|
||||
conf.load('xshlib xcompile compiler_c compiler_cxx')
|
||||
conf.load('xshlib xcompile compiler_c compiler_cxx cmake')
|
||||
|
||||
if conf.options.NSWITCH:
|
||||
conf.load('nswitch')
|
||||
|
||||
Reference in New Issue
Block a user