02 Mar 2011
This commit is contained in:
parent
7a1152a373
commit
2250b222c2
|
@ -519,14 +519,14 @@ void CL_ParsePacketEntities( sizebuf_t *msg, qboolean delta )
|
|||
// is too old, so we can't reconstruct it properly.
|
||||
MsgDev( D_INFO, "CL_ParsePacketEntities: delta frame too old\n" );
|
||||
}
|
||||
else if( cls.next_client_entities - oldframe->first_entity > cls.num_client_entities - 128 )
|
||||
else if(( cls.next_client_entities - oldframe->first_entity ) > ( cls.num_client_entities - 128 ))
|
||||
{
|
||||
MsgDev( D_INFO, "CL_ParsePacketEntities: delta parse_entities too old\n" );
|
||||
}
|
||||
else newframe->valid = true; // valid delta parse
|
||||
|
||||
if(( cl.delta_sequence & CL_UPDATE_MASK ) != ( delta_sequence & CL_UPDATE_MASK ))
|
||||
MsgDev( D_WARN, "CL_ParsePacketEntities: mismatch delta_sequence %i != %i\n", cl.delta_sequence, delta );
|
||||
MsgDev( D_WARN, "CL_ParsePacketEntities: mismatch delta_sequence %i != %i\n", cl.delta_sequence, ( delta_sequence & CL_UPDATE_MASK ));
|
||||
|
||||
// keep sequence an actual
|
||||
newframe->delta_sequence = delta_sequence;
|
||||
|
|
|
@ -1877,7 +1877,7 @@ static int pfnDrawConsoleString( int x, int y, char *string )
|
|||
drawLen = Con_DrawString( x, y, string, clgame.ds.textColor );
|
||||
MakeRGBA( clgame.ds.textColor, 255, 255, 255, 255 );
|
||||
|
||||
return drawLen; // exclude color prexfixes
|
||||
return (x + drawLen); // exclude color prexfixes
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1562,7 +1562,7 @@ void CL_Explosion( vec3_t pos, int model, float scale, float framerate, int flag
|
|||
|
||||
if( flags & TE_EXPLFLAG_NOSOUND ) return;
|
||||
|
||||
hSound = S_RegisterSound( "weapons/explode3.wav" );
|
||||
hSound = S_RegisterSound( va( "weapons/explode%i.wav", Com_RandomLong( 3, 5 )));
|
||||
S_StartSound( pos, 0, CHAN_AUTO, hSound, VOL_NORM, ATTN_NORM, PITCH_NORM, 0 );
|
||||
}
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ void SCR_CreateStartupVids( void )
|
|||
void SCR_CheckStartupVids( void )
|
||||
{
|
||||
int c = 0;
|
||||
script_t *vidlist = NULL;
|
||||
char *afile, *pfile;
|
||||
string token;
|
||||
|
||||
if( host.developer >= 2 )
|
||||
|
@ -97,14 +97,14 @@ void SCR_CheckStartupVids( void )
|
|||
}
|
||||
|
||||
if( !FS_FileExists( "media/StartupVids.txt" ))
|
||||
{
|
||||
SCR_CreateStartupVids();
|
||||
}
|
||||
|
||||
vidlist = Com_OpenScript( "media/StartupVids.txt", NULL, 0 );
|
||||
if( !vidlist ) return; // something bad happens
|
||||
afile = FS_LoadFile( "media/StartupVids.txt", NULL );
|
||||
if( !afile ) return; // something bad happens
|
||||
|
||||
while( Com_ReadString( vidlist, SC_ALLOW_NEWLINES|SC_ALLOW_PATHNAMES2, token ))
|
||||
pfile = afile;
|
||||
|
||||
while(( pfile = COM_ParseFile( pfile, token )) != NULL )
|
||||
{
|
||||
com.strncpy( cls.movies[c], token, sizeof( cls.movies[0] ));
|
||||
|
||||
|
@ -115,7 +115,7 @@ void SCR_CheckStartupVids( void )
|
|||
}
|
||||
}
|
||||
|
||||
Com_CloseScript( vidlist );
|
||||
Mem_Free( afile );
|
||||
|
||||
// run cinematic
|
||||
if( !SV_Active() && cls.movienum != -1 && cls.state != ca_cinematic )
|
||||
|
|
|
@ -342,7 +342,6 @@ void R_LightForPoint( const vec3_t point, color24 *ambientLight, qboolean invLig
|
|||
float dist, add;
|
||||
model_t *pmodel;
|
||||
mnode_t *pnodes;
|
||||
int lnum;
|
||||
|
||||
if( !RI.refdef.movevars )
|
||||
{
|
||||
|
@ -403,7 +402,12 @@ void R_LightForPoint( const vec3_t point, color24 *ambientLight, qboolean invLig
|
|||
// add dynamic lights
|
||||
if( radius && r_dynamic->integer )
|
||||
{
|
||||
for( lnum = 0, dl = cl_dlights; lnum < MAX_DLIGHTS; lnum++, dl++ )
|
||||
int lnum, total;
|
||||
float f;
|
||||
|
||||
VectorClear( r_pointColor );
|
||||
|
||||
for( total = lnum = 0, dl = cl_dlights; lnum < MAX_DLIGHTS; lnum++, dl++ )
|
||||
{
|
||||
if( dl->die < cl.time || !dl->radius )
|
||||
continue;
|
||||
|
@ -414,10 +418,25 @@ void R_LightForPoint( const vec3_t point, color24 *ambientLight, qboolean invLig
|
|||
if( !dist || dist > dl->radius + radius )
|
||||
continue;
|
||||
|
||||
add = (dl->radius - dist);
|
||||
ambientLight->r = ambientLight->r + (dl->color.r * add);
|
||||
ambientLight->g = ambientLight->g + (dl->color.g * add);
|
||||
ambientLight->b = ambientLight->b + (dl->color.b * add);
|
||||
add = 1.0f - (dist / ( dl->radius + radius ));
|
||||
r_pointColor[0] += dl->color.r * add;
|
||||
r_pointColor[1] += dl->color.g * add;
|
||||
r_pointColor[2] += dl->color.b * add;
|
||||
total++;
|
||||
}
|
||||
|
||||
if( total != 0 )
|
||||
{
|
||||
r_pointColor[0] += ambientLight->r;
|
||||
r_pointColor[1] += ambientLight->g;
|
||||
r_pointColor[2] += ambientLight->b;
|
||||
|
||||
f = max( max( r_pointColor[0], r_pointColor[1] ), r_pointColor[2] );
|
||||
if( f > 1.0f ) VectorScale( r_pointColor, ( 255.0f / f ), r_pointColor );
|
||||
|
||||
ambientLight->r = r_pointColor[0];
|
||||
ambientLight->g = r_pointColor[1];
|
||||
ambientLight->b = r_pointColor[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -280,6 +280,11 @@ int R_ComputeFxBlend( cl_entity_t *e )
|
|||
else blend = renderAmt;
|
||||
break;
|
||||
}
|
||||
|
||||
// NOTE: never pass sprites with rendercolor '0 0 0' it's a stupid Valve Hammer Editor bug
|
||||
if( !e->curstate.rendercolor.r && !e->curstate.rendercolor.g && !e->curstate.rendercolor.b )
|
||||
e->curstate.rendercolor.r = e->curstate.rendercolor.g = e->curstate.rendercolor.b = 255;
|
||||
|
||||
blend = bound( 0, blend, 255 );
|
||||
|
||||
return blend;
|
||||
|
|
|
@ -161,6 +161,14 @@ void Mod_LoadSpriteModel( model_t *mod, const void *buffer )
|
|||
mod->maxs[2] = pin->bounds[1] / 2;
|
||||
numi = (short *)(pin + 1);
|
||||
|
||||
if( host.type == HOST_DEDICATED )
|
||||
{
|
||||
// skip frames loading
|
||||
mod->type = mod_sprite;
|
||||
psprite->numframes = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if( *numi == 256 )
|
||||
{
|
||||
byte *src = (byte *)(numi+1);
|
||||
|
@ -375,6 +383,9 @@ void Mod_UnloadSpriteModel( model_t *mod )
|
|||
// release all textures
|
||||
for( i = 0; i < psprite->numframes; i++ )
|
||||
{
|
||||
if( host.type == HOST_DEDICATED )
|
||||
break; // nothing to release
|
||||
|
||||
if( psprite->frames[i].type == SPR_SINGLE )
|
||||
{
|
||||
pspriteframe = psprite->frames[i].frameptr;
|
||||
|
@ -775,8 +786,6 @@ static void R_DrawSpriteQuad( mspriteframe_t *frame, vec3_t org, vec3_t v_right,
|
|||
{
|
||||
vec3_t point;
|
||||
|
||||
GL_Bind( GL_TEXTURE0, frame->gl_texturenum );
|
||||
|
||||
pglBegin( GL_QUADS );
|
||||
pglTexCoord2f( 0.0f, 1.0f );
|
||||
VectorMA( org, frame->down * scale, v_up, point );
|
||||
|
@ -811,8 +820,7 @@ void R_DrawSpriteModel( cl_entity_t *e )
|
|||
float angle, dot, sr, cr, flAlpha;
|
||||
float lerp = 1.0f, ilerp, scale;
|
||||
vec3_t v_forward, v_right, v_up;
|
||||
vec3_t origin;
|
||||
vec3_t color;
|
||||
vec3_t origin, color, color2;
|
||||
|
||||
model = e->model;
|
||||
psprite = (msprite_t * )model->cache.data;
|
||||
|
@ -880,37 +888,22 @@ void R_DrawSpriteModel( cl_entity_t *e )
|
|||
|
||||
// all sprites can have color
|
||||
pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
|
||||
|
||||
// add basecolor
|
||||
color[0] = (float)e->curstate.rendercolor.r * ( 1.0f / 255.0f );
|
||||
color[1] = (float)e->curstate.rendercolor.g * ( 1.0f / 255.0f );
|
||||
color[2] = (float)e->curstate.rendercolor.b * ( 1.0f / 255.0f );
|
||||
|
||||
if( psprite->texFormat == SPR_ALPHTEST )
|
||||
if( psprite->texFormat == SPR_ALPHTEST && r_lighting_extended->integer )
|
||||
{
|
||||
color24 lightColor;
|
||||
qboolean invLight;
|
||||
float f;
|
||||
|
||||
invLight = (e->curstate.effects & EF_INVLIGHT) ? true : false;
|
||||
R_LightForPoint( origin, &lightColor, invLight, sprite_radius );
|
||||
color[0] = (float)lightColor.r * ( 1.0f / 255.0f );
|
||||
color[1] = (float)lightColor.g * ( 1.0f / 255.0f );
|
||||
color[2] = (float)lightColor.b * ( 1.0f / 255.0f );
|
||||
|
||||
// add basecolor
|
||||
color[0] += (float)e->curstate.rendercolor.r * ( 1.0f / 255.0f );
|
||||
color[1] += (float)e->curstate.rendercolor.g * ( 1.0f / 255.0f );
|
||||
color[2] += (float)e->curstate.rendercolor.b * ( 1.0f / 255.0f );
|
||||
|
||||
// renormalize color
|
||||
f = max( max( color[0], color[1] ), color[2] );
|
||||
if( f > 1.0f ) VectorScale( color, ( 1.0f / f ), color );
|
||||
}
|
||||
else
|
||||
{
|
||||
// NOTE: never pass sprites with rendercolor '0 0 0' it's a stupid Valve Hammer Editor bug
|
||||
if( !e->curstate.rendercolor.r && !e->curstate.rendercolor.g && !e->curstate.rendercolor.b )
|
||||
e->curstate.rendercolor.r = e->curstate.rendercolor.g = e->curstate.rendercolor.b = 255;
|
||||
|
||||
color[0] = (float)e->curstate.rendercolor.r * ( 1.0f / 255.0f );
|
||||
color[1] = (float)e->curstate.rendercolor.g * ( 1.0f / 255.0f );
|
||||
color[2] = (float)e->curstate.rendercolor.b * ( 1.0f / 255.0f );
|
||||
color2[0] = (float)lightColor.r * ( 1.0f / 255.0f );
|
||||
color2[1] = (float)lightColor.g * ( 1.0f / 255.0f );
|
||||
color2[2] = (float)lightColor.b * ( 1.0f / 255.0f );
|
||||
}
|
||||
|
||||
if( e->curstate.rendermode == kRenderNormal || e->curstate.rendermode == kRenderTransAlpha )
|
||||
|
@ -972,6 +965,7 @@ void R_DrawSpriteModel( cl_entity_t *e )
|
|||
{
|
||||
// draw the single non-lerped frame
|
||||
pglColor4f( color[0], color[1], color[2], flAlpha );
|
||||
GL_Bind( GL_TEXTURE0, frame->gl_texturenum );
|
||||
R_DrawSpriteQuad( frame, origin, v_right, v_up, scale );
|
||||
}
|
||||
else
|
||||
|
@ -983,16 +977,32 @@ void R_DrawSpriteModel( cl_entity_t *e )
|
|||
if( ilerp != 0 )
|
||||
{
|
||||
pglColor4f( color[0], color[1], color[2], flAlpha * ilerp );
|
||||
GL_Bind( GL_TEXTURE0, frame->gl_texturenum );
|
||||
R_DrawSpriteQuad( oldframe, origin, v_right, v_up, scale );
|
||||
}
|
||||
|
||||
if( lerp != 0 )
|
||||
{
|
||||
pglColor4f( color[0], color[1], color[2], flAlpha * lerp );
|
||||
GL_Bind( GL_TEXTURE0, frame->gl_texturenum );
|
||||
R_DrawSpriteQuad( frame, origin, v_right, v_up, scale );
|
||||
}
|
||||
}
|
||||
|
||||
// draw the sprite 'lightmap' :-)
|
||||
if( psprite->texFormat == SPR_ALPHTEST && r_lighting_extended->integer )
|
||||
{
|
||||
pglEnable( GL_BLEND );
|
||||
pglDepthFunc( GL_EQUAL );
|
||||
pglDisable( GL_ALPHA_TEST );
|
||||
pglBlendFunc( GL_ZERO, GL_SRC_COLOR );
|
||||
pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
|
||||
|
||||
pglColor4f( color2[0], color2[1], color2[2], flAlpha );
|
||||
GL_Bind( GL_TEXTURE0, tr.whiteTexture );
|
||||
R_DrawSpriteQuad( frame, origin, v_right, v_up, scale );
|
||||
}
|
||||
|
||||
if( psprite->facecull == SPR_CULL_NONE )
|
||||
GL_Cull( GL_FRONT );
|
||||
|
||||
|
@ -1006,6 +1016,7 @@ void R_DrawSpriteModel( cl_entity_t *e )
|
|||
}
|
||||
|
||||
pglDisable( GL_BLEND );
|
||||
pglDepthFunc( GL_LEQUAL );
|
||||
pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
|
||||
pglColor4ub( 255, 255, 255, 255 );
|
||||
}
|
|
@ -1467,7 +1467,7 @@ void R_StudioSetupLighting( alight_t *lightinfo )
|
|||
|
||||
// setup ambient lighting
|
||||
invLight = (RI.currententity->curstate.effects & EF_INVLIGHT) ? true : false;
|
||||
R_LightForPoint( ent->origin, &ambient, invLight, 0.0f ); // we already handle dynamic lights
|
||||
R_LightForPoint( ent->origin, &ambient, invLight, 0.0f ); // ignore dlights
|
||||
|
||||
plight->lightcolor[0] = ambient.r * (1.0f / 255.0f);
|
||||
plight->lightcolor[1] = ambient.g * (1.0f / 255.0f);
|
||||
|
|
|
@ -40,6 +40,8 @@
|
|||
#define MAX_MSGLEN 32768 // max length of network message
|
||||
// FIXME: replace with NET_MAX_PAYLOAD
|
||||
|
||||
typedef struct stream_s stream_t; // sound stream for background music playing
|
||||
|
||||
#ifdef _DEBUG
|
||||
void DBG_AssertFunction( qboolean fExpr, const char* szExpr, const char* szFile, int szLine, const char* szMessage );
|
||||
#define Assert( f ) DBG_AssertFunction( f, #f, __FILE__, __LINE__, NULL )
|
||||
|
@ -93,6 +95,14 @@ typedef enum
|
|||
PRINT_CHAT, // chat messages
|
||||
} messagelevel_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
NS_CLIENT,
|
||||
NS_SERVER
|
||||
} netsrc_t;
|
||||
|
||||
#include "netadr.h"
|
||||
|
||||
typedef struct host_redirect_s
|
||||
{
|
||||
rdtype_t target;
|
||||
|
@ -154,6 +164,22 @@ extern host_parm_t host;
|
|||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
// network.c
|
||||
//
|
||||
void NET_Init( void );
|
||||
void NET_Shutdown( void );
|
||||
void NET_Sleep( int msec );
|
||||
void NET_Config( qboolean net_enable );
|
||||
qboolean NET_IsLocalAddress( netadr_t adr );
|
||||
char *NET_AdrToString( const netadr_t a );
|
||||
char *NET_BaseAdrToString( const netadr_t a );
|
||||
qboolean NET_StringToAdr( const char *string, netadr_t *adr );
|
||||
qboolean NET_CompareAdr( const netadr_t a, const netadr_t b );
|
||||
qboolean NET_CompareBaseAdr( const netadr_t a, const netadr_t b );
|
||||
qboolean NET_GetPacket( netsrc_t sock, netadr_t *from, byte *data, size_t *length );
|
||||
void NET_SendPacket( netsrc_t sock, size_t length, const void *data, netadr_t to );
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ skipwhite:
|
|||
}
|
||||
|
||||
// parse single characters
|
||||
if( c == '{' || c == '}'|| c == ')'|| c == '(' || c == '\'' || c == ',' )
|
||||
if( c == '{' || c == '}' || c == ')' || c == '(' || c == '\'' || c == ',' )
|
||||
{
|
||||
token[len] = c;
|
||||
len++;
|
||||
|
|
|
@ -521,36 +521,37 @@ void Delta_ParseTableField( sizebuf_t *msg )
|
|||
Delta_AddField( dt->pName, pName, flags, bits, mul, post_mul );
|
||||
}
|
||||
|
||||
qboolean Delta_ParseField( script_t *delta_script, const delta_field_t *pInfo, delta_t *pField, qboolean bPost )
|
||||
qboolean Delta_ParseField( char **delta_script, const delta_field_t *pInfo, delta_t *pField, qboolean bPost )
|
||||
{
|
||||
token_t token;
|
||||
string token;
|
||||
delta_field_t *pFieldInfo;
|
||||
char *oldpos;
|
||||
|
||||
Com_ReadToken( delta_script, 0, &token );
|
||||
if( com.strcmp( token.string, "(" ))
|
||||
*delta_script = COM_ParseFile( *delta_script, token );
|
||||
if( com.strcmp( token, "(" ))
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ParseField: expected '(', found '%s' instead\n", token.string );
|
||||
MsgDev( D_ERROR, "Delta_ParseField: expected '(', found '%s' instead\n", token );
|
||||
return false;
|
||||
}
|
||||
|
||||
// read the variable name
|
||||
if( !Com_ReadToken( delta_script, SC_ALLOW_PATHNAMES2, &token ))
|
||||
if(( *delta_script = COM_ParseFile( *delta_script, token )) == NULL )
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ParseField: missing field name\n" );
|
||||
return false;
|
||||
}
|
||||
|
||||
pFieldInfo = Delta_FindFieldInfo( pInfo, token.string );
|
||||
pFieldInfo = Delta_FindFieldInfo( pInfo, token );
|
||||
if( !pFieldInfo )
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ParseField: unable to find field %s\n", token.string );
|
||||
MsgDev( D_ERROR, "Delta_ParseField: unable to find field %s\n", token );
|
||||
return false;
|
||||
}
|
||||
|
||||
Com_ReadToken( delta_script, 0, &token );
|
||||
if( com.strcmp( token.string, "," ))
|
||||
*delta_script = COM_ParseFile( *delta_script, token );
|
||||
if( com.strcmp( token, "," ))
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ParseField: expected ',', found '%s' instead\n", token.string );
|
||||
MsgDev( D_ERROR, "Delta_ParseField: expected ',', found '%s' instead\n", token );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -561,74 +562,81 @@ qboolean Delta_ParseField( script_t *delta_script, const delta_field_t *pInfo, d
|
|||
pField->flags = 0;
|
||||
|
||||
// read delta-flags
|
||||
while( Com_ReadToken( delta_script, false, &token ))
|
||||
while(( *delta_script = COM_ParseFile( *delta_script, token )) != NULL )
|
||||
{
|
||||
if( !com.strcmp( token.string, "," ))
|
||||
if( !com.strcmp( token, "," ))
|
||||
break; // end of flags argument
|
||||
|
||||
if( !com.strcmp( token.string, "|" ))
|
||||
if( !com.strcmp( token, "|" ))
|
||||
continue;
|
||||
|
||||
if( !com.strcmp( token.string, "DT_BYTE" ))
|
||||
if( !com.strcmp( token, "DT_BYTE" ))
|
||||
pField->flags |= DT_BYTE;
|
||||
else if( !com.strcmp( token.string, "DT_SHORT" ))
|
||||
else if( !com.strcmp( token, "DT_SHORT" ))
|
||||
pField->flags |= DT_SHORT;
|
||||
else if( !com.strcmp( token.string, "DT_FLOAT" ))
|
||||
else if( !com.strcmp( token, "DT_FLOAT" ))
|
||||
pField->flags |= DT_FLOAT;
|
||||
else if( !com.strcmp( token.string, "DT_INTEGER" ))
|
||||
else if( !com.strcmp( token, "DT_INTEGER" ))
|
||||
pField->flags |= DT_INTEGER;
|
||||
else if( !com.strcmp( token.string, "DT_ANGLE" ))
|
||||
else if( !com.strcmp( token, "DT_ANGLE" ))
|
||||
pField->flags |= DT_ANGLE;
|
||||
else if( !com.strncmp( token.string, "DT_TIMEWINDOW", 13 ))
|
||||
else if( !com.strncmp( token, "DT_TIMEWINDOW", 13 ))
|
||||
pField->flags |= DT_TIMEWINDOW;
|
||||
else if( !com.strcmp( token.string, "DT_STRING" ))
|
||||
else if( !com.strcmp( token, "DT_STRING" ))
|
||||
pField->flags |= DT_STRING;
|
||||
else if( !com.strcmp( token.string, "DT_SIGNED" ))
|
||||
else if( !com.strcmp( token, "DT_SIGNED" ))
|
||||
pField->flags |= DT_SIGNED;
|
||||
}
|
||||
|
||||
if( com.strcmp( token.string, "," ))
|
||||
if( com.strcmp( token, "," ))
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ParseField: expected ',', found '%s' instead\n", token.string );
|
||||
MsgDev( D_ERROR, "Delta_ParseField: expected ',', found '%s' instead\n", token );
|
||||
return false;
|
||||
}
|
||||
|
||||
// read delta-bits
|
||||
if( !Com_ReadLong( delta_script, false, &pField->bits ))
|
||||
|
||||
if(( *delta_script = COM_ParseFile( *delta_script, token )) == NULL )
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ReadField: %s field bits argument is missing\n", pField->name );
|
||||
return false;
|
||||
}
|
||||
|
||||
Com_ReadToken( delta_script, 0, &token );
|
||||
if( com.strcmp( token.string, "," ))
|
||||
pField->bits = com.atoi( token );
|
||||
|
||||
*delta_script = COM_ParseFile( *delta_script, token );
|
||||
if( com.strcmp( token, "," ))
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ReadField: expected ',', found '%s' instead\n", token.string );
|
||||
MsgDev( D_ERROR, "Delta_ReadField: expected ',', found '%s' instead\n", token );
|
||||
return false;
|
||||
}
|
||||
|
||||
// read delta-multiplier
|
||||
if( !Com_ReadFloat( delta_script, false, &pField->multiplier ))
|
||||
if(( *delta_script = COM_ParseFile( *delta_script, token )) == NULL )
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ReadField: %s missing 'multiplier' argument\n", pField->name );
|
||||
return false;
|
||||
}
|
||||
|
||||
pField->multiplier = com.atof( token );
|
||||
|
||||
if( bPost )
|
||||
{
|
||||
Com_ReadToken( delta_script, 0, &token );
|
||||
if( com.strcmp( token.string, "," ))
|
||||
*delta_script = COM_ParseFile( *delta_script, token );
|
||||
if( com.strcmp( token, "," ))
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ReadField: expected ',', found '%s' instead\n", token.string );
|
||||
MsgDev( D_ERROR, "Delta_ReadField: expected ',', found '%s' instead\n", token );
|
||||
return false;
|
||||
}
|
||||
|
||||
// read delta-postmultiplier
|
||||
if( !Com_ReadFloat( delta_script, false, &pField->post_multiplier ))
|
||||
if(( *delta_script = COM_ParseFile( *delta_script, token )) == NULL )
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ReadField: %s missing 'post_multiply' argument\n", pField->name );
|
||||
return false;
|
||||
}
|
||||
|
||||
pField->post_multiplier = com.atof( token );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -637,22 +645,24 @@ qboolean Delta_ParseField( script_t *delta_script, const delta_field_t *pInfo, d
|
|||
}
|
||||
|
||||
// closing brace...
|
||||
Com_ReadToken( delta_script, 0, &token );
|
||||
if( com.strcmp( token.string, ")" ))
|
||||
*delta_script = COM_ParseFile( *delta_script, token );
|
||||
if( com.strcmp( token, ")" ))
|
||||
{
|
||||
MsgDev( D_ERROR, "Delta_ParseField: expected ')', found '%s' instead\n", token.string );
|
||||
MsgDev( D_ERROR, "Delta_ParseField: expected ')', found '%s' instead\n", token );
|
||||
return false;
|
||||
}
|
||||
|
||||
// ... and trying to parse optional ',' post-symbol
|
||||
Com_ReadToken( delta_script, 0, &token );
|
||||
oldpos = *delta_script;
|
||||
*delta_script = COM_ParseFile( *delta_script, token );
|
||||
if( token[0] != ',' ) *delta_script = oldpos; // not a ','
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Delta_ParseTable( script_t *delta_script, delta_info_t *dt, const char *encodeDll, const char *encodeFunc )
|
||||
void Delta_ParseTable( char **delta_script, delta_info_t *dt, const char *encodeDll, const char *encodeFunc )
|
||||
{
|
||||
token_t token;
|
||||
string token;
|
||||
delta_t *pField;
|
||||
const delta_field_t *pInfo;
|
||||
|
||||
|
@ -664,23 +674,21 @@ void Delta_ParseTable( script_t *delta_script, delta_info_t *dt, const char *enc
|
|||
dt->numFields = 0;
|
||||
|
||||
// assume we have handled '{'
|
||||
while( Com_ReadToken( delta_script, SC_ALLOW_NEWLINES|SC_ALLOW_PATHNAMES2, &token ))
|
||||
while(( *delta_script = COM_ParseFile( *delta_script, token )) != NULL )
|
||||
{
|
||||
ASSERT( dt->numFields <= dt->maxFields );
|
||||
|
||||
if( !com.strcmp( token.string, "DEFINE_DELTA" ))
|
||||
if( !com.strcmp( token, "DEFINE_DELTA" ))
|
||||
{
|
||||
if( Delta_ParseField( delta_script, pInfo, &pField[dt->numFields], false ))
|
||||
dt->numFields++;
|
||||
else Com_SkipRestOfLine( delta_script );
|
||||
}
|
||||
else if( !com.strcmp( token.string, "DEFINE_DELTA_POST" ))
|
||||
else if( !com.strcmp( token, "DEFINE_DELTA_POST" ))
|
||||
{
|
||||
if( Delta_ParseField( delta_script, pInfo, &pField[dt->numFields], true ))
|
||||
dt->numFields++;
|
||||
else Com_SkipRestOfLine( delta_script );
|
||||
}
|
||||
else if( token.string[0] == '}' )
|
||||
else if( token[0] == '}' )
|
||||
{
|
||||
// end of the section
|
||||
break;
|
||||
|
@ -708,13 +716,12 @@ void Delta_ParseTable( script_t *delta_script, delta_info_t *dt, const char *enc
|
|||
|
||||
void Delta_InitFields( void )
|
||||
{
|
||||
script_t *delta_script;
|
||||
char *afile, *pfile;
|
||||
string encodeDll, encodeFunc, token;
|
||||
delta_info_t *dt;
|
||||
string encodeDll, encodeFunc;
|
||||
token_t token;
|
||||
|
||||
delta_script = Com_OpenScript( DELTA_PATH, NULL, 0 );
|
||||
if( !delta_script )
|
||||
|
||||
afile = FS_LoadFile( DELTA_PATH, NULL );
|
||||
if( !afile )
|
||||
{
|
||||
static string errormsg;
|
||||
|
||||
|
@ -723,24 +730,32 @@ void Delta_InitFields( void )
|
|||
com.error( errormsg );
|
||||
}
|
||||
|
||||
while( Com_ReadToken( delta_script, SC_ALLOW_NEWLINES|SC_ALLOW_PATHNAMES2, &token ))
|
||||
{
|
||||
dt = Delta_FindStruct( token.string );
|
||||
pfile = afile;
|
||||
|
||||
Com_ReadString( delta_script, false, encodeDll );
|
||||
while(( pfile = COM_ParseFile( pfile, token )) != NULL )
|
||||
{
|
||||
dt = Delta_FindStruct( token );
|
||||
if( dt == NULL )
|
||||
{
|
||||
Sys_Break( "delta.lst: unknown struct %s\n", token );
|
||||
}
|
||||
|
||||
pfile = COM_ParseFile( pfile, encodeDll );
|
||||
|
||||
if( !com.stricmp( encodeDll, "none" ))
|
||||
com.strcpy( encodeFunc, "null" );
|
||||
else Com_ReadString( delta_script, false, encodeFunc );
|
||||
else pfile = COM_ParseFile( pfile, encodeFunc );
|
||||
|
||||
// jump to '{'
|
||||
Com_ReadToken( delta_script, SC_ALLOW_NEWLINES, &token );
|
||||
ASSERT( token.string[0] == '{' );
|
||||
|
||||
if( dt ) Delta_ParseTable( delta_script, dt, encodeDll, encodeFunc );
|
||||
else Com_SkipBracedSection( delta_script, 1 );
|
||||
pfile = COM_ParseFile( pfile, token );
|
||||
if( token[0] != '{' )
|
||||
{
|
||||
Sys_Break( "delta.lst: missing '{' in section %s\n", dt->pName );
|
||||
}
|
||||
|
||||
Delta_ParseTable( &pfile, dt, encodeDll, encodeFunc );
|
||||
}
|
||||
Com_CloseScript( delta_script );
|
||||
Mem_Free( afile );
|
||||
|
||||
// adding some requrid fields fields that use may forget or don't know how to specified
|
||||
Delta_AddField( "event_t", "flags", DT_INTEGER, 8, 1.0f, 1.0f );
|
||||
|
|
|
@ -4,10 +4,8 @@
|
|||
//=======================================================================
|
||||
|
||||
#include <winsock.h>
|
||||
#include "launch.h"
|
||||
|
||||
// This is the packet payload without any header bytes (which are attached for actual sending)
|
||||
#define NET_MAX_PAYLOAD 80000
|
||||
#include "common.h"
|
||||
#include "netchan.h"
|
||||
|
||||
#define PORT_ANY -1
|
||||
#define PORT_CLIENT 27901
|
||||
|
@ -458,7 +456,7 @@ void NET_SendPacket( netsrc_t sock, size_t length, const void *data, netadr_t to
|
|||
return;
|
||||
|
||||
if( to.type != NA_BROADCAST && to.type != NA_IP )
|
||||
Sys_Error( "NET_SendPacket: bad address type %i\n", to.type );
|
||||
Host_Error( "NET_SendPacket: bad address type %i\n", to.type );
|
||||
|
||||
net_socket = ip_sockets[sock];
|
||||
if( !net_socket ) return;
|
||||
|
@ -554,12 +552,12 @@ static void NET_OpenIP( void )
|
|||
if( !port ) port = Cvar_Get( "port", va( "%i", PORT_SERVER ), CVAR_INIT, "network default port" )->integer;
|
||||
|
||||
ip_sockets[NS_SERVER] = NET_IPSocket( net_ip->string, port );
|
||||
if( !ip_sockets[NS_SERVER] && Sys.app_name == HOST_DEDICATED )
|
||||
Sys_Error( "couldn't allocate dedicated server IP port\n" );
|
||||
if( !ip_sockets[NS_SERVER] && host.type == HOST_DEDICATED )
|
||||
Host_Error( "couldn't allocate dedicated server IP port\n" );
|
||||
}
|
||||
|
||||
// dedicated servers don't need client ports
|
||||
if( Sys.app_name == HOST_DEDICATED ) return;
|
||||
if( host.type == HOST_DEDICATED ) return;
|
||||
|
||||
if( !ip_sockets[NS_CLIENT] )
|
||||
{
|
||||
|
@ -618,7 +616,7 @@ void NET_Sleep( int msec )
|
|||
fd_set fdset;
|
||||
int i = 0;
|
||||
|
||||
if( Sys.app_name == HOST_NORMAL )
|
||||
if( host.type == HOST_NORMAL )
|
||||
return; // we're not a server, just run full speed
|
||||
|
||||
FD_ZERO( &fdset );
|
|
@ -326,6 +326,10 @@ SOURCE=.\common\net_huff.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\common\network.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\common\pm_studio.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -228,7 +228,7 @@ gotnewcl:
|
|||
BF_Init( &newcl->datagram, "Datagram", newcl->datagram_buf, sizeof( newcl->datagram_buf )); // datagram buf
|
||||
|
||||
newcl->state = cs_connected;
|
||||
newcl->cl_updaterate = 0.05;
|
||||
newcl->cl_updaterate = 0.05; // 20 fps as default
|
||||
newcl->lastmessage = host.realtime;
|
||||
newcl->lastconnect = host.realtime;
|
||||
newcl->next_messagetime = host.realtime + newcl->cl_updaterate;
|
||||
|
@ -313,6 +313,8 @@ edict_t *SV_FakeConnect( const char *netname )
|
|||
// parse some info from the info strings
|
||||
SV_UserinfoChanged( newcl, userinfo );
|
||||
|
||||
MsgDev( D_INFO, "Bot %i connecting with challenge %p\n", i, -1 );
|
||||
|
||||
newcl->state = cs_spawned;
|
||||
newcl->lastmessage = host.realtime; // don't timeout
|
||||
newcl->lastconnect = host.realtime;
|
||||
|
@ -481,10 +483,10 @@ char *SV_StatusString( void )
|
|||
{
|
||||
char player[1024];
|
||||
static char status[MAX_MSGLEN - 16];
|
||||
int i;
|
||||
sv_client_t *cl;
|
||||
int statusLength;
|
||||
int playerLength;
|
||||
sv_client_t *cl;
|
||||
int i;
|
||||
|
||||
com.strcpy( status, Cvar_Serverinfo( ));
|
||||
com.strcat( status, "\n" );
|
||||
|
@ -497,7 +499,7 @@ char *SV_StatusString( void )
|
|||
{
|
||||
com.sprintf( player, "%i %i \"%s\"\n", (int)cl->edict->v.frags, cl->ping, cl->name );
|
||||
playerLength = com.strlen( player );
|
||||
if( statusLength + playerLength >= sizeof(status))
|
||||
if( statusLength + playerLength >= sizeof( status ))
|
||||
break; // can't hold any more
|
||||
com.strcpy( status + statusLength, player );
|
||||
statusLength += playerLength;
|
||||
|
|
|
@ -642,6 +642,7 @@ void SV_Status_f( void )
|
|||
|
||||
if( cl->state == cs_connected ) Msg( "Connect" );
|
||||
else if( cl->state == cs_zombie ) Msg( "Zombie " );
|
||||
else if( cl->fakeclient ) Msg( "Bot " );
|
||||
else
|
||||
{
|
||||
ping = cl->ping < 9999 ? cl->ping : 9999;
|
||||
|
|
|
@ -1448,7 +1448,7 @@ int pfnDropToFloor( edict_t* e )
|
|||
if( !SV_IsValidEdict( e ))
|
||||
{
|
||||
MsgDev( D_ERROR, "SV_DropToFloor: invalid entity %s\n", SV_ClassName( e ));
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
VectorCopy( e->v.origin, end );
|
||||
|
|
|
@ -117,7 +117,7 @@ static void SV_StudioCalcBoneAdj( float *adj, const byte *pcontroller )
|
|||
// check for 360% wrapping
|
||||
if( pbonecontroller[j].type & STUDIO_RLOOP )
|
||||
{
|
||||
value = pcontroller[i] * (360.0/256.0) + pbonecontroller[j].start;
|
||||
value = pcontroller[i] * (360.0f / 256.0f) + pbonecontroller[j].start;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1126,8 +1126,8 @@ static qboolean FS_ParseLiblistGam( const char *filename, const char *gamedir, g
|
|||
else if( !com.stricmp( token.string, "gamedll" ))
|
||||
{
|
||||
PS_ReadToken( script, false, &token );
|
||||
if( !com.strstr( token.string, ".." )) // don't use indirect paths (..\valve\dlls\hl.dll)
|
||||
com.strncpy( GameInfo->game_dll, token.string, sizeof( GameInfo->game_dll ));
|
||||
// if( !com.strstr( token.string, ".." )) // don't use indirect paths (..\valve\dlls\hl.dll)
|
||||
com.strncpy( GameInfo->game_dll, token.string, sizeof( GameInfo->game_dll ));
|
||||
}
|
||||
else if( !com.stricmp( token.string, "type" ))
|
||||
{
|
||||
|
@ -2418,6 +2418,7 @@ dll_user_t *FS_FindLibrary( const char *dllname, qboolean directpath )
|
|||
// replace all backward slashes
|
||||
for( i = 0; i < com.strlen( dllname ); i++ )
|
||||
{
|
||||
if( dllname[i] == '.' ) continue;
|
||||
if( dllname[i] == '\\' ) dllpath[i] = '/';
|
||||
else dllpath[i] = com.tolower( dllname[i] );
|
||||
}
|
||||
|
|
|
@ -140,10 +140,6 @@ SOURCE=.\memlib.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\network.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\parselib.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -153,22 +153,6 @@ void Sys_QueEvent( ev_type_t type, int value, int value2, int length, void *ptr
|
|||
#define Msg Sys_Msg
|
||||
#define MsgDev Sys_MsgDev
|
||||
|
||||
//
|
||||
// network.c
|
||||
//
|
||||
void NET_Init( void );
|
||||
void NET_Shutdown( void );
|
||||
void NET_Sleep( int msec );
|
||||
void NET_Config( qboolean net_enable );
|
||||
qboolean NET_IsLocalAddress( netadr_t adr );
|
||||
char *NET_AdrToString( const netadr_t a );
|
||||
char *NET_BaseAdrToString( const netadr_t a );
|
||||
qboolean NET_StringToAdr( const char *string, netadr_t *adr );
|
||||
qboolean NET_CompareAdr( const netadr_t a, const netadr_t b );
|
||||
qboolean NET_CompareBaseAdr( const netadr_t a, const netadr_t b );
|
||||
qboolean NET_GetPacket( netsrc_t sock, netadr_t *from, byte *data, size_t *length );
|
||||
void NET_SendPacket( netsrc_t sock, size_t length, const void *data, netadr_t to );
|
||||
|
||||
//
|
||||
// stdlib.c
|
||||
//
|
||||
|
|
|
@ -65,11 +65,9 @@ typedef struct file_s file_t; // normal file
|
|||
typedef struct wfile_s wfile_t; // wad file
|
||||
typedef struct convar_s convar_t; // console variable
|
||||
typedef struct script_s script_t; // script machine
|
||||
typedef struct stream_s stream_t; // sound stream for background music playing
|
||||
typedef struct { const char *name; void **func; } dllfunc_t; // Sys_LoadLibrary stuff
|
||||
typedef struct { int numfilenames; char **filenames; char *filenamesbuffer; } search_t;
|
||||
typedef void ( *setpair_t )( const char *key, const char *value, void *buffer, void *numpairs );
|
||||
typedef enum { NS_CLIENT, NS_SERVER } netsrc_t;
|
||||
typedef void ( *xcommand_t )( void );
|
||||
|
||||
// command buffer modes
|
||||
|
@ -116,7 +114,6 @@ typedef enum
|
|||
} cvar_flags_t;
|
||||
|
||||
#include "cvardef.h"
|
||||
#include "netadr.h"
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
|
@ -317,20 +314,6 @@ typedef struct stdilib_api_s
|
|||
void (*memcheck)(const char *file, int line); // check memory pools for consistensy
|
||||
qboolean (*is_allocated)( byte *poolptr, void *data ); // return true is memory is allocated
|
||||
|
||||
// network.c funcs
|
||||
void (*NET_Init)( void );
|
||||
void (*NET_Shutdown)( void );
|
||||
void (*NET_Sleep)( int msec );
|
||||
void (*NET_Config)( qboolean net_enable );
|
||||
char *(*NET_AdrToString)( netadr_t a );
|
||||
qboolean (*NET_IsLocalAddress)( netadr_t adr );
|
||||
char *(*NET_BaseAdrToString)( const netadr_t a );
|
||||
qboolean (*NET_StringToAdr)( const char *s, netadr_t *a );
|
||||
qboolean (*NET_CompareAdr)( const netadr_t a, const netadr_t b );
|
||||
qboolean (*NET_CompareBaseAdr)( const netadr_t a, const netadr_t b );
|
||||
qboolean (*NET_GetPacket)( netsrc_t sock, netadr_t *from, byte *data, size_t *length );
|
||||
void (*NET_SendPacket)( netsrc_t sock, size_t length, const void *data, netadr_t to );
|
||||
|
||||
// common functions
|
||||
void (*Com_LoadGameInfo)( const char *rootfolder ); // initialize gamedir
|
||||
void (*Com_AddGameHierarchy)( const char *dir, int flags ); // add base directory in search list
|
||||
|
@ -612,24 +595,6 @@ filesystem manager
|
|||
#define FS_CheckParm com.Com_CheckParm
|
||||
#define FS_GetParmFromCmdLine( a, b ) com.Com_GetParm( a, b, sizeof( b ))
|
||||
|
||||
/*
|
||||
===========================================
|
||||
network messages
|
||||
===========================================
|
||||
*/
|
||||
#define NET_Init com.NET_Init
|
||||
#define NET_Shutdown com.NET_Shutdown
|
||||
#define NET_Sleep com.NET_Sleep
|
||||
#define NET_Config com.NET_Config
|
||||
#define NET_AdrToString com.NET_AdrToString
|
||||
#define NET_BaseAdrToString com.NET_BaseAdrToString
|
||||
#define NET_IsLocalAddress com.NET_IsLocalAddress
|
||||
#define NET_StringToAdr com.NET_StringToAdr
|
||||
#define NET_SendPacket com.NET_SendPacket
|
||||
#define NET_GetPacket com.NET_GetPacket
|
||||
#define NET_CompareAdr com.NET_CompareAdr
|
||||
#define NET_CompareBaseAdr com.NET_CompareBaseAdr
|
||||
|
||||
/*
|
||||
===========================================
|
||||
console variables
|
||||
|
|
|
@ -304,8 +304,8 @@ void *Com_LoadLibraryExt( const char *dllname, int build_ordinals_table, qboolea
|
|||
if( hInst->custom_loader )
|
||||
{
|
||||
if( hInst->encrypted )
|
||||
MsgDev( D_NOTE, "Sys_LoadLibrary: couldn't load encrypted library %s\n", dllname );
|
||||
else MsgDev( D_NOTE, "Sys_LoadLibrary: couldn't load library %s from packfile\n", dllname );
|
||||
MsgDev( D_ERROR, "Sys_LoadLibrary: couldn't load encrypted library %s\n", dllname );
|
||||
else MsgDev( D_ERROR, "Sys_LoadLibrary: couldn't load library %s from packfile\n", dllname );
|
||||
return NULL;
|
||||
}
|
||||
else hInst->hInstance = LoadLibrary( hInst->fullPath );
|
||||
|
|
|
@ -58,22 +58,6 @@ void Sys_GetStdAPI( void )
|
|||
com.clearpool = _mem_emptypool;
|
||||
com.memcheck = _mem_check;
|
||||
|
||||
// network.c funcs
|
||||
com.NET_Init = NET_Init;
|
||||
com.NET_Shutdown = NET_Shutdown;
|
||||
com.NET_Sleep = NET_Sleep;
|
||||
com.NET_Config = NET_Config;
|
||||
com.NET_AdrToString = NET_AdrToString;
|
||||
com.NET_StringToAdr = NET_StringToAdr;
|
||||
com.NET_SendPacket = NET_SendPacket;
|
||||
com.NET_IsLocalAddress = NET_IsLocalAddress;
|
||||
com.NET_BaseAdrToString = NET_BaseAdrToString;
|
||||
com.NET_StringToAdr = NET_StringToAdr;
|
||||
com.NET_CompareAdr = NET_CompareAdr;
|
||||
com.NET_CompareBaseAdr = NET_CompareBaseAdr;
|
||||
com.NET_GetPacket = NET_GetPacket;
|
||||
com.NET_SendPacket = NET_SendPacket;
|
||||
|
||||
com.Com_LoadGameInfo = FS_LoadGameInfo; // gate game info from script file
|
||||
com.Com_AddGameHierarchy = FS_AddGameHierarchy; // add base directory in search list
|
||||
com.Com_AddGameDirectory = FS_AddGameDirectory; // add game directory in search list
|
||||
|
@ -277,7 +261,7 @@ void Sys_LookupInstance( void )
|
|||
CloseHandle( Sys.hMutex );
|
||||
Sys.hMutex = CreateSemaphore( NULL, 0, 1, "Xash Dedicated Server" );
|
||||
if( !Sys.developer ) Sys.developer = 3; // otherwise we see empty console
|
||||
com.sprintf( Sys.log_path, "engine.log", com.timestamp( TIME_FILENAME )); // logs folder
|
||||
com.sprintf( Sys.log_path, "dedicated.log", com.timestamp( TIME_FILENAME )); // logs folder
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -727,7 +727,8 @@ bool UI_StartBackGroundMap( void )
|
|||
|
||||
first = FALSE;
|
||||
|
||||
if( !uiStatic.bgmapcount || CVAR_GET_FLOAT( "sv_background" ))
|
||||
// some map is already running
|
||||
if( !uiStatic.bgmapcount || CVAR_GET_FLOAT( "host_serverstate" ))
|
||||
return FALSE;
|
||||
|
||||
int bgmapid = RANDOM_LONG( 0, uiStatic.bgmapcount - 1 );
|
||||
|
|
Reference in New Issue