22 Jan 2017

This commit is contained in:
g-cont 2017-01-22 00:00:00 +03:00 committed by Alibek Omarov
parent e60d33603b
commit 203a9fbd95
9 changed files with 96 additions and 50 deletions

View File

@ -3437,14 +3437,14 @@ void NetAPI_CancelRequest( int context )
nr->pfnFunc( &nr->resp );
}
memset( &clgame.net_requests[i], 0, sizeof( net_request_t ));
if( clgame.net_requests[i].resp.type == NETAPI_REQUEST_SERVERLIST && &clgame.net_requests[i] == clgame.master_request )
{
if( clgame.request_type == NET_REQUEST_CLIENT )
clgame.request_type = NET_REQUEST_CANCEL;
clgame.master_request = NULL;
}
memset( &clgame.net_requests[i], 0, sizeof( net_request_t ));
break;
}
}

View File

@ -41,6 +41,8 @@ convar_t *cl_lightstyle_lerping;
convar_t *cl_idealpitchscale;
convar_t *cl_nosmooth;
convar_t *cl_smoothtime;
convar_t *cl_clockreset;
convar_t *cl_fixtimerate;
convar_t *cl_solid_players;
convar_t *cl_draw_beams;
convar_t *cl_updaterate;
@ -190,38 +192,32 @@ should be put at.
*/
static float CL_LerpPoint( void )
{
float f, frac;
float f, frac = 1.0f;
f = cl_serverframetime();
if( !f || SV_Active( ))
if( f == 0.0f || cls.timedemo )
{
cl.time = cl.mtime[0];
// g-cont. probably this is redundant
if( cls.demoplayback )
cl.oldtime = cl.mtime[0] - cl_clientframetime();
return 1.0f;
}
if( f > 0.1f )
{
// dropped packet, or start of demo
cl.mtime[1] = cl.mtime[0] - 0.1f;
f = 0.1f;
if( cl_interp->value > 0.001f )
{
// manual lerp value (goldsrc mode)
frac = ( cl.time - cl.mtime[0] ) / cl_interp->value;
}
else if( f > 0.001f )
{
// automatic lerp (classic mode)
frac = ( cl.time - cl.mtime[1] ) / f;
}
frac = ( cl.time - cl.mtime[1] ) / f;
if( frac < 0 )
{
if( frac < -0.01f )
cl.time = cl.mtime[1];
frac = 0.0f;
}
else if( frac > 1.0f )
{
if( frac > 1.01f )
cl.time = cl.mtime[0];
frac = 1.0f;
}
return frac;
}
@ -403,23 +399,7 @@ void CL_CreateCmd( void )
VectorCopy( cl.data.viewangles, cl.refdef.cl_viewangles );
cl.scr_fov = cl.data.fov;
}
#if 0
// allways dump the first ten messages,
// because it may contain leftover inputs
// from the last level
// disabled because it's invoke crash in HLFX 0.6 while we trying to playback a demo
if( ++cl.movemessages <= 10 )
{
if( !cls.demoplayback )
{
cl.refdef.cmd = &cl.commands[cls.netchan.outgoing_sequence & CL_UPDATE_MASK].cmd;
*cl.refdef.cmd = cmd;
}
CL_PopPMStates();
return;
}
#endif
// message we are constructing.
i = cls.netchan.outgoing_sequence & CL_UPDATE_MASK;
pcmd = &cl.commands[i];
@ -1870,7 +1850,7 @@ void CL_InitLocal( void )
cl_nodelta = Cvar_Get ("cl_nodelta", "0", 0, "disable delta-compression for usercommnds" );
cl_idealpitchscale = Cvar_Get( "cl_idealpitchscale", "0.8", 0, "how much to look up/down slopes and stairs when not using freelook" );
cl_solid_players = Cvar_Get( "cl_solid_players", "1", 0, "Make all players not solid (can't traceline them)" );
cl_interp = Cvar_Get( "ex_interp", "0.1", 0, "Interpolate object positions starting this many seconds in past" );
cl_interp = Cvar_Get( "ex_interp", "0.1", CVAR_ARCHIVE, "Interpolate object positions starting this many seconds in past" );
cl_timeout = Cvar_Get( "cl_timeout", "60", 0, "connect timeout (in-seconds)" );
rcon_client_password = Cvar_Get( "rcon_password", "", 0, "remote control client password" );
@ -1894,6 +1874,8 @@ void CL_InitLocal( void )
cl_lightstyle_lerping = Cvar_Get( "cl_lightstyle_lerping", "0", CVAR_ARCHIVE, "enables animated light lerping (perfomance option)" );
cl_showerror = Cvar_Get( "cl_showerror", "0", CVAR_ARCHIVE, "show prediction error" );
cl_bmodelinterp = Cvar_Get( "cl_bmodelinterp", "1", CVAR_ARCHIVE, "enable bmodel interpolation" );
cl_clockreset = Cvar_Get( "cl_clockreset", "0.1", CVAR_ARCHIVE, "frametime delta maximum value before reset" );
cl_fixtimerate = Cvar_Get( "cl_fixtimerate", "7.5", CVAR_ARCHIVE, "time in msec to client clock adjusting" );
Cvar_Get( "hud_scale", "0", CVAR_ARCHIVE|CVAR_LATCH, "scale hud at current resolution" );
Cvar_Get( "skin", "", CVAR_USERINFO, "player skin" ); // XDM 3.3 want this cvar
@ -1980,6 +1962,42 @@ void CL_SendCommand( void )
CL_CheckForResend ();
}
/*
==================
CL_AdjustClock
slowly adjuct client clock
to smooth lag effect
==================
*/
void CL_AdjustClock( void )
{
if( cl.timedelta == 0.0f || !cl_fixtimerate->value )
return;
if( cl_fixtimerate->value < 0.0f )
Cvar_SetFloat( "cl_fixtimerate", 7.5f );
if( fabs( cl.timedelta ) >= 0.001f )
{
double msec, adjust, sign;
msec = ( cl.timedelta * 1000.0 );
sign = ( msec < 0 ) ? 1.0 : -1.0;
msec = fabs( msec );
adjust = sign * ( cl_fixtimerate->value / 1000.0 );
if( fabs( adjust ) < fabs( cl.timedelta ))
{
cl.timedelta += adjust;
cl.time += adjust;
}
if( cl.oldtime > cl.time )
cl.oldtime = cl.time;
}
}
/*
==================
CL_PrepareFrame
@ -2093,6 +2111,9 @@ void Host_ClientFrame( void )
CL_PredictMovement();
}
// adjust client time
CL_AdjustClock();
// animate lightestyles
CL_RunLightStyles();

View File

@ -363,8 +363,28 @@ CL_ParseServerTime
*/
void CL_ParseServerTime( sizebuf_t *msg )
{
double dt;
cl.mtime[1] = cl.mtime[0];
cl.mtime[0] = MSG_ReadFloat( msg );
if( cl.maxclients == 1 )
cl.time = cl.mtime[0];
dt = cl.time - cl.mtime[0];
if( fabs( dt ) > cl_clockreset->value ) // 0.1 by default
{
cl.time = cl.mtime[0];
cl.timedelta = 0.0f;
}
else if( dt != 0.0 )
{
cl.timedelta = dt;
}
if( cl.oldtime > cl.time )
cl.oldtime = cl.time;
}
/*

View File

@ -104,7 +104,7 @@ extern int CL_UPDATE_BACKUP;
#define INVALID_HANDLE 0xFFFF // for XashXT cache system
#define cl_serverframetime() (cl.mtime[0] - cl.mtime[1])
#define cl_clientframetime() (host.frametime)
#define cl_clientframetime() (cl.time - cl.oldtime)
typedef struct
{
@ -171,6 +171,7 @@ typedef struct
float lerpFrac; // interpolation value
float lerpBack; // invert interpolation value
float timedelta; // floating delta between two updates
ref_params_t refdef; // shared refdef
char serverinfo[MAX_INFO_STRING];
@ -183,7 +184,6 @@ typedef struct
// server state information
int playernum;
int maxclients;
int movemessages;
int num_custombeams; // server beams count
char model_precache[MAX_MODELS][CS_SIZE];
@ -578,6 +578,8 @@ extern convar_t *cl_lightstyle_lerping;
extern convar_t *cl_draw_particles;
extern convar_t *cl_levelshot_name;
extern convar_t *cl_draw_beams;
extern convar_t *cl_clockreset;
extern convar_t *cl_fixtimerate;
extern convar_t *gl_showtextures;
extern convar_t *cl_bmodelinterp;
extern convar_t *cl_lw; // local weapons

View File

@ -3343,7 +3343,7 @@ void R_DrawViewModel( void )
if( cl.thirdperson || cl.refdef.health <= 0 || cl.refdef.viewentity != ( cl.playernum + 1 ))
return;
if( RI.params & RP_NONVIEWERREF )
if( cl.refdef.nextView || RI.params & RP_NONVIEWERREF )
return;
if( !Mod_Extradata( clgame.viewent.model ))

View File

@ -549,7 +549,7 @@ void Con_Printf( char *szFmt, ... )
static char buffer[16384]; // must support > 1k messages
va_list args;
if( host.developer <= 0 )
if( host.developer < D_INFO )
return;
va_start( args, szFmt );
@ -570,7 +570,7 @@ void Con_DPrintf( char *szFmt, ... )
static char buffer[16384]; // must support > 1k messages
va_list args;
if( host.developer < D_INFO )
if( host.developer < D_ERROR )
return;
va_start( args, szFmt );

View File

@ -73,8 +73,8 @@ typedef struct
enum
{
D_INFO = 1, // "-dev 1", shows various system messages
D_ERROR, // "-dev 2", shows critical warnings
D_WARN, // "-dev 3", shows not critical system warnings
D_WARN, // "-dev 2", shows not critical system warnings
D_ERROR, // "-dev 3", shows critical warnings
D_REPORT, // "-dev 4", special case for game reports
D_NOTE // "-dev 5", show system notifications for engine developers
};

View File

@ -1992,6 +1992,8 @@ Close a file
*/
int FS_Close( file_t *file )
{
if( !file ) return 0;
if( close( file->handle ))
return EOF;
@ -2724,7 +2726,7 @@ qboolean FS_FileCopy( file_t *pOutput, file_t *pInput, int fileSize )
if(( readSize = FS_Read( pInput, buf, size )) < size )
{
MsgDev( D_ERROR, "FS_FileCopy: unexpected end of input file\n" );
MsgDev( D_ERROR, "FS_FileCopy: unexpected end of input file (%d < %d)\n", readSize, size );
fileSize = 0;
done = false;
break;

View File

@ -20,6 +20,7 @@ GNU General Public License for more details.
#ifdef WIN32
// enable NVIDIA High Performance Graphics while using Integrated Graphics.
__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
__declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 1;
#endif
typedef void (*pfnChangeGame)( const char *progname );