mirror of
https://github.com/FWGS/xash3d-fwgs.git
synced 2026-08-05 11:35:05 +08:00
Compare commits
28 Commits
continuous
...
continuous
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
520fc33394 | ||
|
|
f705a7cd26 | ||
|
|
65bfff69d0 | ||
|
|
9d8ba03f5e | ||
|
|
778b8ede58 | ||
|
|
f8a1a2ed71 | ||
|
|
b4a7c266b5 | ||
|
|
a488f79852 | ||
|
|
b290046503 | ||
|
|
e8409cee8b | ||
|
|
1d4d355b38 | ||
|
|
dfe12535a5 | ||
|
|
74946100f1 | ||
|
|
9a1717915c | ||
|
|
3691eb6e48 | ||
|
|
3bb7471fd3 | ||
|
|
74e09ddb12 | ||
|
|
6b73d056b2 | ||
|
|
3e7847551a | ||
|
|
91d92935fa | ||
|
|
eff033298a | ||
|
|
3a8f4961bc | ||
|
|
b81f94518a | ||
|
|
96f7f5457d | ||
|
|
498ec6b4f1 | ||
|
|
607e62a1ae | ||
|
|
d41a80bc2c | ||
|
|
643bec4071 |
@@ -27,4 +27,16 @@ GNU General Public License for more details.
|
||||
#define ENGINE_COMPUTE_STUDIO_LERP (1<<7) // enable MOVETYPE_STEP lerping back in engine
|
||||
#define ENGINE_LINEAR_GAMMA_SPACE (1<<8) // disable influence of gamma/brightness cvars to textures/lightmaps, for mods with custom renderer
|
||||
|
||||
// adjust the mask when features will be added or removed
|
||||
#define ENGINE_FEATURES_MASK \
|
||||
( ENGINE_WRITE_LARGE_COORD \
|
||||
| ENGINE_QUAKE_COMPATIBLE \
|
||||
| ENGINE_LOAD_DELUXEDATA \
|
||||
| ENGINE_PHYSICS_PUSHER_EXT \
|
||||
| ENGINE_LARGE_LIGHTMAPS \
|
||||
| ENGINE_COMPENSATE_QUAKE_BUG \
|
||||
| ENGINE_IMPROVED_LINETRACE \
|
||||
| ENGINE_COMPUTE_STUDIO_LERP \
|
||||
| ENGINE_LINEAR_GAMMA_SPACE )
|
||||
|
||||
#endif//FEATURES_H
|
||||
|
||||
@@ -121,10 +121,15 @@ typedef uint64_t longtime_t;
|
||||
#define likely(x) (x)
|
||||
#endif
|
||||
|
||||
#if defined( static_assert ) // C11 static_assert
|
||||
#define STATIC_ASSERT static_assert
|
||||
#if __STDC_VERSION >= 202311L || __cplusplus >= 201103L // C23 or C++ static_assert is a keyword
|
||||
#define STATIC_ASSERT_ static_assert
|
||||
#define STATIC_ASSERT static_assert
|
||||
#elif __STDC_VERSION >= 201112L // in C11 it's _Static_assert
|
||||
#define STATIC_ASSERT_ _Static_assert
|
||||
#define STATIC_ASSERT _Static_assert
|
||||
#else
|
||||
#define STATIC_ASSERT( x, y ) extern int _static_assert_##__LINE__[( x ) ? 1 : -1]
|
||||
#define STATIC_ASSERT_( id, x, y ) extern int id[( x ) ? 1 : -1]
|
||||
#define STATIC_ASSERT( x, y ) STATIC_ASSERT_( static_assert_##__LINE__, x, y )
|
||||
#endif
|
||||
|
||||
#ifdef XASH_BIG_ENDIAN
|
||||
|
||||
@@ -372,7 +372,7 @@ void CL_WriteDemoHeader( const char *name )
|
||||
demo.header.id = IDEMOHEADER;
|
||||
demo.header.dem_protocol = DEMO_PROTOCOL;
|
||||
demo.header.net_protocol = cls.legacymode ? PROTOCOL_LEGACY_VERSION : PROTOCOL_VERSION;
|
||||
demo.header.host_fps = bound( MIN_FPS, host_maxfps.value, MAX_FPS );
|
||||
demo.header.host_fps = host_maxfps.value ? bound( MIN_FPS, host_maxfps.value, MAX_FPS ) : MAX_FPS;
|
||||
Q_strncpy( demo.header.mapname, clgame.mapname, sizeof( demo.header.mapname ));
|
||||
Q_strncpy( demo.header.comment, clgame.maptitle, sizeof( demo.header.comment ));
|
||||
Q_strncpy( demo.header.gamedir, FS_Gamedir(), sizeof( demo.header.gamedir ));
|
||||
|
||||
@@ -87,6 +87,7 @@ static CVAR_DEFINE_AUTO( model, "", FCVAR_USERINFO|FCVAR_ARCHIVE|FCVAR_FILTERABL
|
||||
static CVAR_DEFINE_AUTO( topcolor, "0", FCVAR_USERINFO|FCVAR_ARCHIVE|FCVAR_FILTERABLE, "player top color" );
|
||||
static CVAR_DEFINE_AUTO( bottomcolor, "0", FCVAR_USERINFO|FCVAR_ARCHIVE|FCVAR_FILTERABLE, "player bottom color" );
|
||||
CVAR_DEFINE_AUTO( rate, "3500", FCVAR_USERINFO|FCVAR_ARCHIVE|FCVAR_FILTERABLE, "player network rate" );
|
||||
static CVAR_DEFINE_AUTO( cl_maxframetime, "0", 0, "set deadline timer for client rendering to catch freezes" );
|
||||
|
||||
client_t cl;
|
||||
client_static_t cls;
|
||||
@@ -2917,6 +2918,7 @@ void CL_InitLocal( void )
|
||||
Cvar_RegisterVariable( &cl_showevents );
|
||||
Cvar_Get( "lastdemo", "", FCVAR_ARCHIVE, "last played demo" );
|
||||
Cvar_RegisterVariable( &ui_renderworld );
|
||||
Cvar_RegisterVariable( &cl_maxframetime );
|
||||
|
||||
// these two added to shut up CS 1.5 about 'unknown' commands
|
||||
Cvar_Get( "lightgamma", "1", FCVAR_ARCHIVE, "ambient lighting level (legacy, unused)" );
|
||||
@@ -3057,6 +3059,8 @@ void Host_ClientFrame( void )
|
||||
{
|
||||
// if client is not active, do nothing
|
||||
if( !cls.initialized ) return;
|
||||
if( cls.key_dest == key_game && cls.state == ca_active && !Con_Visible() )
|
||||
Platform_SetTimer( cl_maxframetime.value );
|
||||
|
||||
// if running the server remotely, send intentions now after
|
||||
// the incoming messages have been read
|
||||
|
||||
@@ -904,6 +904,10 @@ void CL_ParseServerData( sizebuf_t *msg, qboolean legacy )
|
||||
background = MSG_ReadOneBit( msg );
|
||||
Q_strncpy( gamefolder, MSG_ReadString( msg ), sizeof( gamefolder ));
|
||||
host.features = (uint)MSG_ReadLong( msg );
|
||||
host.features &= legacy ? ENGINE_LEGACY_FEATURES_MASK : ENGINE_FEATURES_MASK;
|
||||
|
||||
if( !Host_IsLocalGame( ))
|
||||
Host_PrintEngineFeatures( host.features );
|
||||
|
||||
if( !legacy )
|
||||
{
|
||||
|
||||
@@ -549,5 +549,6 @@ void V_PostRender( void )
|
||||
|
||||
SCR_MakeScreenShot();
|
||||
ref.dllFuncs.R_AllowFog( true );
|
||||
Platform_SetTimer( 0.0f );
|
||||
ref.dllFuncs.R_EndFrame();
|
||||
}
|
||||
|
||||
@@ -552,7 +552,7 @@ qboolean Host_IsLocalGame( void );
|
||||
qboolean Host_IsLocalClient( void );
|
||||
void Host_ShutdownServer( void );
|
||||
void Host_Error( const char *error, ... ) _format( 1 );
|
||||
void Host_PrintEngineFeatures( void );
|
||||
void Host_PrintEngineFeatures( int features );
|
||||
void Host_Frame( float time );
|
||||
void Host_InitDecals( void );
|
||||
void Host_Credits( void );
|
||||
|
||||
@@ -190,22 +190,27 @@ void Host_ShutdownServer( void )
|
||||
Host_PrintEngineFeatures
|
||||
================
|
||||
*/
|
||||
void Host_PrintEngineFeatures( void )
|
||||
void Host_PrintEngineFeatures( int features )
|
||||
{
|
||||
if( FBitSet( host.features, ENGINE_WRITE_LARGE_COORD ))
|
||||
Con_Reportf( "^3EXT:^7 big world support enabled\n" );
|
||||
const char *features_str[] =
|
||||
{
|
||||
"Big World Support",
|
||||
"Quake Compatibility",
|
||||
"Deluxemap Support",
|
||||
"Improved MOVETYPE_PUSH",
|
||||
"Large Lightmaps",
|
||||
"Stupid Quake Bug Compensation",
|
||||
"Improved Trace Line",
|
||||
"Studio MOVETYPE_STEP Lerping",
|
||||
"Linear Gamma Space"
|
||||
};
|
||||
int i;
|
||||
|
||||
if( FBitSet( host.features, ENGINE_LOAD_DELUXEDATA ))
|
||||
Con_Reportf( "^3EXT:^7 deluxemap support enabled\n" );
|
||||
|
||||
if( FBitSet( host.features, ENGINE_PHYSICS_PUSHER_EXT ))
|
||||
Con_Reportf( "^3EXT:^7 Improved MOVETYPE_PUSH is used\n" );
|
||||
|
||||
if( FBitSet( host.features, ENGINE_LARGE_LIGHTMAPS ))
|
||||
Con_Reportf( "^3EXT:^7 Large lightmaps enabled\n" );
|
||||
|
||||
if( FBitSet( host.features, ENGINE_COMPENSATE_QUAKE_BUG ))
|
||||
Con_Reportf( "^3EXT:^7 Compensate quake bug enabled\n" );
|
||||
for( i = 0; i < ARRAYSIZE( features_str ); i++ )
|
||||
{
|
||||
if( FBitSet( features, BIT( i )))
|
||||
Con_Reportf( "^3EXT:^7 %s is enabled\n", features_str[i] );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -305,6 +305,14 @@ extern const char *clc_strings[clc_lastmsg+1];
|
||||
#define MAX_LEGACY_EDICTS (1 << MAX_LEGACY_ENTITY_BITS) // 4096 edicts
|
||||
#define MIN_LEGACY_EDICTS 30
|
||||
|
||||
// legacy engine features that can be implemented through currently supported features
|
||||
#define ENGINE_LEGACY_FEATURES_MASK \
|
||||
( ENGINE_WRITE_LARGE_COORD \
|
||||
| ENGINE_LOAD_DELUXEDATA \
|
||||
| ENGINE_LARGE_LIGHTMAPS \
|
||||
| ENGINE_COMPENSATE_QUAKE_BUG \
|
||||
| ENGINE_COMPUTE_STUDIO_LERP )
|
||||
|
||||
// Master Server protocol
|
||||
#define MS_SCAN_REQUEST "1\xFF" "0.0.0.0:0\0" // TODO: implement IP filter
|
||||
|
||||
|
||||
@@ -13,10 +13,16 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <dlfcn.h>
|
||||
#include <signal.h>
|
||||
#include <ucontext.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <math.h>
|
||||
#include "platform/platform.h"
|
||||
|
||||
static void *g_hsystemd;
|
||||
@@ -103,3 +109,44 @@ void Linux_Shutdown( void )
|
||||
g_hsystemd = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void Linux_TimerHandler( int sig, siginfo_t *si, void *uc )
|
||||
{
|
||||
timer_t *tidp = si->si_value.sival_ptr;
|
||||
int overrun = timer_getoverrun( *tidp );
|
||||
Con_Printf( "Frame too long (overrun %d)!\n", overrun );
|
||||
}
|
||||
|
||||
#define DEBUG_TIMER_SIGNAL SIGRTMIN
|
||||
|
||||
void Linux_SetTimer( float tm )
|
||||
{
|
||||
static timer_t timerid;
|
||||
|
||||
if( !timerid && tm )
|
||||
{
|
||||
struct sigevent sev = { 0 };
|
||||
struct sigaction sa = { 0 };
|
||||
|
||||
sa.sa_flags = SA_SIGINFO;
|
||||
sa.sa_sigaction = Linux_TimerHandler;
|
||||
sigaction( DEBUG_TIMER_SIGNAL, &sa, NULL );
|
||||
// this path availiable in POSIX, but may signal wrong thread...
|
||||
// sev.sigev_notify = SIGEV_SIGNAL;
|
||||
sev.sigev_notify = SIGEV_THREAD_ID;
|
||||
sev._sigev_un._tid = gettid();
|
||||
sev.sigev_signo = DEBUG_TIMER_SIGNAL;
|
||||
sev.sigev_value.sival_ptr = &timerid;
|
||||
timer_create( CLOCK_REALTIME, &sev, &timerid );
|
||||
}
|
||||
|
||||
if( timerid )
|
||||
{
|
||||
struct itimerspec its = {0};
|
||||
its.it_value.tv_sec = tm;
|
||||
its.it_value.tv_nsec = 1000000000ULL * fmod( tm, 1.0f );
|
||||
its.it_interval.tv_sec = 0;
|
||||
its.it_interval.tv_nsec = 0;
|
||||
timer_settime( timerid, 0, &its, NULL );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +91,7 @@ void DOS_Shutdown( void );
|
||||
#if XASH_LINUX
|
||||
void Linux_Init( void );
|
||||
void Linux_Shutdown( void );
|
||||
void Linux_SetTimer( float time );
|
||||
#endif
|
||||
|
||||
static inline void Platform_Init( void )
|
||||
@@ -181,6 +182,13 @@ void Platform_SetClipboardText( const char *buffer );
|
||||
#define SDL_VERSION_ATLEAST( x, y, z ) 0
|
||||
#endif
|
||||
|
||||
static void Platform_SetTimer( float time )
|
||||
{
|
||||
#if XASH_LINUX
|
||||
Linux_SetTimer( time );
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
|
||||
@@ -2139,8 +2139,8 @@ qboolean SV_InitPhysicsAPI( void )
|
||||
if( svgame.physFuncs.SV_CheckFeatures != NULL )
|
||||
{
|
||||
// grab common engine features (it will be shared across the network)
|
||||
host.features = svgame.physFuncs.SV_CheckFeatures();
|
||||
Host_PrintEngineFeatures ();
|
||||
host.features = svgame.physFuncs.SV_CheckFeatures() & ENGINE_FEATURES_MASK;
|
||||
Host_PrintEngineFeatures( host.features );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -37,8 +37,6 @@ def options(opt):
|
||||
def configure(conf):
|
||||
# check for dedicated server build
|
||||
if conf.options.DEDICATED:
|
||||
if conf.env.DEST_OS == 'linux':
|
||||
conf.check_cc(lib='rt')
|
||||
conf.define('XASH_DEDICATED', 1)
|
||||
elif conf.env.DEST_OS == 'dos':
|
||||
conf.options.STATIC = True
|
||||
@@ -73,12 +71,9 @@ def configure(conf):
|
||||
# unused, XASH_LINUX without XASH_SDL gives fbdev & alsa support
|
||||
# conf.define('XASH_FBDEV', 1)
|
||||
conf.check_cc( lib = 'asound' )
|
||||
conf.check_cc( lib = 'rt' )
|
||||
elif conf.options.SDL12:
|
||||
conf.define('XASH_SDL', 12)
|
||||
conf.check_cfg(package='sdl', args='--cflags --libs', uselib_store='SDL2' )
|
||||
if conf.env.DEST_OS == 'linux':
|
||||
conf.check_cc( lib='rt' )
|
||||
conf.env.HAVE_SDL2 = True
|
||||
else:
|
||||
conf.load('sdl2')
|
||||
@@ -97,6 +92,9 @@ def configure(conf):
|
||||
if not conf.env.DEST_OS in ['win32', 'android'] and not conf.options.NO_ASYNC_RESOLVE:
|
||||
conf.check_pthreads()
|
||||
|
||||
if conf.env.DEST_OS == 'linux':
|
||||
conf.check_cc(lib='rt')
|
||||
|
||||
if hasattr(conf.options, 'DLLEMU'):
|
||||
conf.define_cond('XASH_DLL_LOADER', conf.options.DLLEMU)
|
||||
|
||||
|
||||
@@ -774,6 +774,7 @@ extern convar_t r_lockfrustum;
|
||||
extern convar_t r_traceglow;
|
||||
extern convar_t r_vbo;
|
||||
extern convar_t r_vbo_dlightmode;
|
||||
extern convar_t r_vbo_detail;
|
||||
extern convar_t r_studio_sort_textures;
|
||||
extern convar_t r_studio_drawelements;
|
||||
extern convar_t r_ripple;
|
||||
|
||||
@@ -29,6 +29,7 @@ CVAR_DEFINE_AUTO( r_lockfrustum, "0", FCVAR_CHEAT, "lock frustrum area at curren
|
||||
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_detail, "gl_vbo_detail", "0", FCVAR_ARCHIVE, "detail vbo mode (0: disable, 1: multipass, 2: singlepass, broken decal dlights)" );
|
||||
CVAR_DEFINE( r_vbo_dlightmode, "gl_vbo_dlightmode", "1", FCVAR_ARCHIVE, "vbo dlight rendering mode (0-1)" );
|
||||
CVAR_DEFINE_AUTO( r_ripple, "0", FCVAR_GLCONFIG, "enable software-like water texture ripple simulation" );
|
||||
CVAR_DEFINE_AUTO( r_ripple_updatetime, "0.05", FCVAR_GLCONFIG, "how fast ripple simulation is" );
|
||||
@@ -1244,6 +1245,7 @@ static void R_CheckVBO( void )
|
||||
|
||||
gEngfuncs.Cvar_RegisterVariable( &r_vbo );
|
||||
gEngfuncs.Cvar_RegisterVariable( &r_vbo_dlightmode );
|
||||
gEngfuncs.Cvar_RegisterVariable( &r_vbo_detail );
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
1260
ref/gl/gl_rsurf.c
1260
ref/gl/gl_rsurf.c
File diff suppressed because it is too large
Load Diff
@@ -385,7 +385,7 @@ static qboolean LoadMDL( const char *modelname )
|
||||
}
|
||||
}
|
||||
|
||||
if( filesize < sizeof( studiohdr_t ) || filesize != model_hdr->length )
|
||||
if( filesize < sizeof( studiohdr_t ) || filesize != texture_hdr->length )
|
||||
{
|
||||
fprintf( stderr, "ERROR: Wrong file size! File %s may be corrupted!\n", texturename );
|
||||
return false;
|
||||
@@ -427,7 +427,7 @@ static qboolean LoadMDL( const char *modelname )
|
||||
return false;
|
||||
}
|
||||
|
||||
if( filesize < sizeof( studiohdr_t ) || filesize != model_hdr->length )
|
||||
if( filesize < sizeof( studiohdr_t ) || filesize != anim_hdr[i]->length )
|
||||
{
|
||||
fprintf( stderr, "ERROR: Wrong file size! File %s may be corrupted!\n", seqgroupname );
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user