07 Jan 2011
This commit is contained in:
parent
5eb8b0932a
commit
e24679f749
|
@ -1,3 +1,7 @@
|
|||
build 1430
|
||||
Engine: fix crash with invalid room_type set (more than 60)
|
||||
Engine: fix stuck on elevators or tracktrains for clients
|
||||
|
||||
build 1428
|
||||
|
||||
Engine: fix trigger_camera serialization bug
|
||||
|
|
|
@ -705,6 +705,9 @@ void R_DrawEntitiesOnList( void )
|
|||
// don't fogging translucent surfaces
|
||||
pglDisable( GL_FOG );
|
||||
|
||||
CL_DrawBeams( true );
|
||||
CL_DrawParticles();
|
||||
|
||||
// then draw translicent entities
|
||||
for( i = 0; i < tr.num_trans_entities; i++ )
|
||||
{
|
||||
|
@ -733,9 +736,6 @@ void R_DrawEntitiesOnList( void )
|
|||
}
|
||||
}
|
||||
|
||||
CL_DrawBeams( true );
|
||||
CL_DrawParticles();
|
||||
|
||||
clgame.dllFuncs.pfnDrawTransparentTriangles ();
|
||||
|
||||
// FIXME: allow to brush and sprite viewmodel ?
|
||||
|
|
|
@ -1099,7 +1099,7 @@ void CL_BulletImpactParticles( const vec3_t org )
|
|||
CL_SparkleTracer( pos, dir );
|
||||
}
|
||||
|
||||
for( i = 0; i < 25; i++ )
|
||||
for( i = 0; i < 12; i++ )
|
||||
{
|
||||
p = CL_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
@ -1107,14 +1107,11 @@ void CL_BulletImpactParticles( const vec3_t org )
|
|||
p->die += 2.0f;
|
||||
p->color = 0; // black
|
||||
|
||||
if( i & 1 )
|
||||
p->type = pt_grav;
|
||||
for( j = 0; j < 3; j++ )
|
||||
{
|
||||
p->type = pt_grav;
|
||||
for( j = 0; j < 3; j++ )
|
||||
{
|
||||
p->org[j] = org[j] + Com_RandomFloat( -2.0f, 3.0f );
|
||||
p->vel[j] = Com_RandomFloat( -70.0f, 70.0f );
|
||||
}
|
||||
p->org[j] = org[j] + Com_RandomFloat( -2.0f, 3.0f );
|
||||
p->vel[j] = Com_RandomFloat( -70.0f, 70.0f );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
void DSP_InitAll( void ); // initalize
|
||||
void DSP_FreeAll( void ); // shutdown
|
||||
void DSP_ClearState( void ); // same as VidInit
|
||||
int DSP_Alloc( int ipset, float xfade, int cchan ); // alloc
|
||||
void DSP_SetPreset( int idsp, int ipsetnew ); // set preset
|
||||
void DSP_Process( int idsp, portable_samplepair_t *pbfront, int sampleCount ); // process
|
||||
void DSP_Free( int idsp ); // free
|
|
@ -711,8 +711,8 @@ void FLT_Design_Cheb( int Nmax, float cutoff, float ftype, float qwidth, int *pM
|
|||
Wstop = tan( M_PI * fstop / fs );
|
||||
Wstop = pow( Wstop, s );
|
||||
|
||||
epass = com.sqrt( pow( 10, Apass/10 ) - 1 );
|
||||
estop = com.sqrt( pow( 10, Astop/10 ) - 1 );
|
||||
epass = com.sqrt( pow( (float)10.0f, (float)Apass/10.0f ) - 1 );
|
||||
estop = com.sqrt( pow( (float)10.0f, (float)Astop/10.0f ) - 1 );
|
||||
|
||||
// calculate filter order N
|
||||
|
||||
|
@ -4361,7 +4361,7 @@ pset_t psettemplates[] =
|
|||
|
||||
// number of presets currently defined above
|
||||
|
||||
#define CPSETTEMPLATES (sizeof( psets ) / sizeof( pset_t ))
|
||||
#define CPSETTEMPLATES 60 //(sizeof( psets ) / sizeof( pset_t ))
|
||||
|
||||
// init a preset - just clear state array
|
||||
void PSET_Init( pset_t *ppset )
|
||||
|
@ -4892,11 +4892,6 @@ void DSP_InitAll( void )
|
|||
|
||||
for( idsp = 0; idsp < CDSPS; idsp++ )
|
||||
DSP_Init( idsp );
|
||||
|
||||
// initialize DSP cvars
|
||||
dsp_room = Cvar_Get( "dsp_room", "0", 0, "room dsp preset - sounds more distant from player (1ch)" );
|
||||
dsp_room_type = Cvar_Get( "room_type", "0", 0, "duplicate for dsp_room cvar for backward compatibility" );
|
||||
dsp_stereo = Cvar_Get( "dsp_stereo", "0", 0, "set to 1 for true stereo processing. 2x perf hits" );
|
||||
}
|
||||
|
||||
// free all resources associated with dsp - called once, during engine shutdown
|
||||
|
@ -5392,6 +5387,11 @@ qboolean AllocDsps( void )
|
|||
|
||||
idsp_room = -1.0;
|
||||
|
||||
// initialize DSP cvars
|
||||
dsp_room = Cvar_Get( "dsp_room", "0", 0, "room dsp preset - sounds more distant from player (1ch)" );
|
||||
dsp_room_type = Cvar_Get( "room_type", "0", 0, "duplicate for dsp_room cvar for backward compatibility" );
|
||||
dsp_stereo = Cvar_Get( "dsp_stereo", "0", 0, "set to 1 for true stereo processing. 2x perf hits" );
|
||||
|
||||
// alloc dsp room channel (mono, stereo if dsp_stereo is 1)
|
||||
|
||||
// dsp room is mono, 300ms fade time
|
||||
|
|
|
@ -93,8 +93,7 @@ void World_MoveBounds( const vec3_t start, vec3_t mins, vec3_t maxs, const vec3_
|
|||
|
||||
trace_t World_CombineTraces( trace_t *cliptrace, trace_t *trace, edict_t *touch )
|
||||
{
|
||||
// g-cont. needs for global test!!!
|
||||
if( trace->allsolid || /*trace->startsolid ||*/ trace->fraction < cliptrace->fraction )
|
||||
if( trace->allsolid || trace->fraction < cliptrace->fraction )
|
||||
{
|
||||
trace->ent = touch;
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ extern int SV_UPDATE_BACKUP;
|
|||
#define MAP_IS_EXIST BIT( 0 )
|
||||
#define MAP_HAS_SPAWNPOINT BIT( 1 )
|
||||
#define MAP_HAS_LANDMARK BIT( 2 )
|
||||
#define MAP_INVALID_VERSION BIT( 3 )
|
||||
|
||||
#define EDICT_FROM_AREA( l ) STRUCT_FROM_LINK( l, edict_t, area )
|
||||
#define NUM_FOR_EDICT(e) ((int)((edict_t *)(e) - svgame.edicts))
|
||||
|
|
|
@ -219,6 +219,12 @@ void SV_Map_f( void )
|
|||
|
||||
flags = SV_MapIsValid( mapname, spawn_entity, NULL );
|
||||
|
||||
if( flags & MAP_INVALID_VERSION )
|
||||
{
|
||||
Msg( "SV_NewMap: map %s is invalid or not supported\n", mapname );
|
||||
return;
|
||||
}
|
||||
|
||||
if(!( flags & MAP_IS_EXIST ))
|
||||
{
|
||||
Msg( "SV_NewMap: map %s doesn't exist\n", mapname );
|
||||
|
@ -380,6 +386,12 @@ void SV_ChangeLevel_f( void )
|
|||
|
||||
flags = SV_MapIsValid( mapname, spawn_entity, Cmd_Argv( 2 ));
|
||||
|
||||
if( flags & MAP_INVALID_VERSION )
|
||||
{
|
||||
Msg( "SV_ChangeLevel: map %s is invalid or not supported\n", mapname );
|
||||
return;
|
||||
}
|
||||
|
||||
if(!( flags & MAP_IS_EXIST ))
|
||||
{
|
||||
Msg( "SV_ChangeLevel: map %s doesn't exist\n", mapname );
|
||||
|
|
|
@ -481,7 +481,7 @@ void SV_WriteEntityPatch( const char *filename )
|
|||
FS_Close( f );
|
||||
}
|
||||
|
||||
script_t *SV_GetEntityScript( const char *filename )
|
||||
script_t *SV_GetEntityScript( const char *filename, int *flags )
|
||||
{
|
||||
file_t *f;
|
||||
dheader_t *header;
|
||||
|
@ -491,9 +491,13 @@ script_t *SV_GetEntityScript( const char *filename )
|
|||
byte buf[MAX_SYSPATH]; // 1 kb
|
||||
qboolean result = false;
|
||||
|
||||
ASSERT( flags != NULL );
|
||||
|
||||
f = FS_Open( va( "maps/%s.bsp", filename ), "rb" );
|
||||
if( !f ) return NULL;
|
||||
|
||||
*flags |= MAP_IS_EXIST;
|
||||
|
||||
Mem_Set( buf, 0, MAX_SYSPATH );
|
||||
FS_Read( f, buf, MAX_SYSPATH );
|
||||
ver = *(uint *)buf;
|
||||
|
@ -515,6 +519,7 @@ script_t *SV_GetEntityScript( const char *filename )
|
|||
}
|
||||
break;
|
||||
default:
|
||||
*flags |= MAP_INVALID_VERSION;
|
||||
FS_Close( f );
|
||||
return NULL;
|
||||
}
|
||||
|
@ -543,7 +548,7 @@ int SV_MapIsValid( const char *filename, const char *spawn_entity, const char *l
|
|||
script_t *ents = NULL;
|
||||
int flags = 0;
|
||||
|
||||
ents = SV_GetEntityScript( filename );
|
||||
ents = SV_GetEntityScript( filename, &flags );
|
||||
|
||||
if( ents )
|
||||
{
|
||||
|
@ -559,11 +564,9 @@ int SV_MapIsValid( const char *filename, const char *spawn_entity, const char *l
|
|||
Com_CloseScript( ents );
|
||||
|
||||
// skip spawnpoint checks in devmode
|
||||
return (MAP_IS_EXIST|MAP_HAS_SPAWNPOINT);
|
||||
return (flags|MAP_HAS_SPAWNPOINT);
|
||||
}
|
||||
|
||||
flags |= MAP_IS_EXIST; // map is exist
|
||||
|
||||
while( Com_ReadToken( ents, SC_ALLOW_NEWLINES|SC_ALLOW_PATHNAMES2, &token ))
|
||||
{
|
||||
if( !com.strcmp( token.string, "classname" ))
|
||||
|
|
|
@ -511,6 +511,12 @@ void SV_AddGravity( edict_t *ent )
|
|||
SV_CheckVelocity( ent );
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
SV_AddHalfGravity
|
||||
|
||||
============
|
||||
*/
|
||||
void SV_AddHalfGravity( edict_t *ent, float timestep )
|
||||
{
|
||||
float ent_gravity;
|
||||
|
@ -562,8 +568,7 @@ trace_t SV_PushEntity( edict_t *ent, const vec3_t lpush, const vec3_t apush, int
|
|||
trace = SV_Move( ent->v.origin, vec3_origin, vec3_origin, end, type, ent );
|
||||
else trace = SV_Move( ent->v.origin, ent->v.mins, ent->v.maxs, end, type, ent );
|
||||
|
||||
// g-cont. needs for global test!!!
|
||||
if( !trace.allsolid )//&& !trace.startsolid )
|
||||
if( !trace.allsolid )
|
||||
{
|
||||
VectorCopy( trace.endpos, ent->v.origin );
|
||||
SV_LinkEdict( ent, true );
|
||||
|
@ -805,10 +810,8 @@ static edict_t *SV_PushMove( edict_t *pusher, float movetime )
|
|||
pusher->v.solid = oldsolid;
|
||||
|
||||
// if it is still inside the pusher, block
|
||||
if( SV_TestEntityPosition( check ))
|
||||
if( SV_TestEntityPosition( check ) && block )
|
||||
{
|
||||
if( !block ) continue;
|
||||
|
||||
if( !SV_CanBlock( check ))
|
||||
continue;
|
||||
|
||||
|
@ -829,7 +832,6 @@ static edict_t *SV_PushMove( edict_t *pusher, float movetime )
|
|||
{
|
||||
if( check->v.movetype == MOVETYPE_WALK && lmove[2] < 0.0f )
|
||||
check->v.groundentity = NULL;
|
||||
pushed_p--;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -923,8 +925,17 @@ static edict_t *SV_PushRotate( edict_t *pusher, float movetime )
|
|||
|
||||
// calculate destination position
|
||||
VectorCopy( check->v.origin, org );
|
||||
Matrix4x4_VectorTransform( start_l, org, temp );
|
||||
Matrix4x4_VectorTransform( end_l, temp, org2 );
|
||||
|
||||
if( check->v.movetype == MOVETYPE_PUSHSTEP )
|
||||
{
|
||||
Matrix4x4_VectorITransform( start_l, org, temp );
|
||||
Matrix4x4_VectorITransform( end_l, temp, org2 );
|
||||
}
|
||||
else
|
||||
{
|
||||
Matrix4x4_VectorTransform( start_l, org, temp );
|
||||
Matrix4x4_VectorTransform( end_l, temp, org2 );
|
||||
}
|
||||
VectorSubtract( org2, org, lmove );
|
||||
|
||||
// try moving the contacted entity
|
||||
|
@ -933,10 +944,8 @@ static edict_t *SV_PushRotate( edict_t *pusher, float movetime )
|
|||
pusher->v.solid = oldsolid;
|
||||
|
||||
// if it is still inside the pusher, block
|
||||
if( SV_TestEntityPosition( check ))
|
||||
if( SV_TestEntityPosition( check ) && block )
|
||||
{
|
||||
if( !block ) continue;
|
||||
|
||||
if( !SV_CanBlock( check ))
|
||||
continue;
|
||||
|
||||
|
@ -957,7 +966,6 @@ static edict_t *SV_PushRotate( edict_t *pusher, float movetime )
|
|||
else
|
||||
{
|
||||
SV_AngularMove( check, movetime, pusher->v.friction );
|
||||
pushed_p--; // moved ok
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
|
@ -1018,11 +1026,7 @@ void SV_Physics_Pusher( edict_t *ent )
|
|||
|
||||
// if the pusher has a "blocked" function, call it
|
||||
// otherwise, just stay in place until the obstacle is gone
|
||||
if( pBlocker )
|
||||
{
|
||||
MsgDev( D_INFO, "%s is blocked by %s\n", SV_ClassName( ent ), SV_ClassName( pBlocker ));
|
||||
svgame.dllFuncs.pfnBlocked( ent, pBlocker );
|
||||
}
|
||||
if( pBlocker ) svgame.dllFuncs.pfnBlocked( ent, pBlocker );
|
||||
|
||||
if( thinktime > oldtime && thinktime <= ent->v.ltime || ( ent->v.flags & FL_ALWAYSTHINK ))
|
||||
{
|
||||
|
@ -1206,7 +1210,7 @@ void SV_Physics_Toss( edict_t *ent )
|
|||
SV_CheckWaterTransition( ent );
|
||||
SV_CheckWater( ent );
|
||||
|
||||
if( ent->v.velocity[2] > DIST_EPSILON )
|
||||
if( ent->v.velocity[2] > DIST_EPSILON || svgame.globals->changelevel )
|
||||
{
|
||||
ent->v.flags &= ~FL_ONGROUND;
|
||||
ent->v.groundentity = NULL;
|
||||
|
@ -1260,6 +1264,7 @@ void SV_Physics_Toss( edict_t *ent )
|
|||
SV_CheckVelocity( ent );
|
||||
|
||||
// make sure what we don't collide with like entity (e.g. gib with gib)
|
||||
#if 0
|
||||
if( trace.allsolid && SV_IsValidEdict( trace.ent ) && trace.ent->v.movetype != ent->v.movetype )
|
||||
{
|
||||
if( trace.ent->v.flags & (FL_CLIENT|FL_FAKECLIENT))
|
||||
|
@ -1279,7 +1284,7 @@ void SV_Physics_Toss( edict_t *ent )
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
if( trace.fraction == 1.0f )
|
||||
{
|
||||
SV_CheckWater( ent );
|
||||
|
@ -1370,9 +1375,7 @@ void SV_Physics_Step( edict_t *ent )
|
|||
if( ent->v.movetype == MOVETYPE_PUSHSTEP )
|
||||
{
|
||||
if( wasinwater && !inwater )
|
||||
{
|
||||
ent->v.velocity[2] = 0.0f;
|
||||
}
|
||||
|
||||
if( inwater && ( ent->v.flags & FL_FLOAT ))
|
||||
{
|
||||
|
@ -1526,7 +1529,6 @@ void SV_Physics_None( edict_t *ent )
|
|||
SV_RunThink( ent );
|
||||
}
|
||||
|
||||
|
||||
//============================================================================
|
||||
static void SV_Physics_Client( edict_t *ent )
|
||||
{
|
||||
|
@ -1645,11 +1647,11 @@ void SV_Physics( void )
|
|||
edict_t *ent;
|
||||
int i;
|
||||
|
||||
SV_CheckAllEnts ();
|
||||
|
||||
// let the progs know that a new frame has started
|
||||
svgame.dllFuncs.pfnStartFrame();
|
||||
|
||||
SV_CheckAllEnts ();
|
||||
|
||||
// treat each object in turn
|
||||
if( !( sv.hostflags & SVF_PLAYERSONLY ))
|
||||
{
|
||||
|
|
|
@ -256,7 +256,7 @@ hull_t *SV_HullForBsp( edict_t *ent, const vec3_t mins, const vec3_t maxs, float
|
|||
// calculate an offset value to center the origin
|
||||
// NOTE: never get offset of drawing hull
|
||||
if( !hullNumber ) VectorCopy( hull->clip_mins, offset );
|
||||
else VectorSubtract( hull->clip_mins, mins, offset );
|
||||
else VectorSubtract( hull->clip_mins, mins, offset );
|
||||
#else
|
||||
if( size[0] <= 8.0f )
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue