many misc. changes

This commit is contained in:
Bryce Hutchings 2002-05-18 03:55:35 +00:00
parent d143ae8072
commit bf037e303f
5 changed files with 108 additions and 182 deletions

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.41 2002/05/18 03:55:35 niceass
// many misc. changes
//
// Revision 1.40 2002/05/13 05:24:54 jbravo // Revision 1.40 2002/05/13 05:24:54 jbravo
// the ssg color cvars now also control normal xhair color // the ssg color cvars now also control normal xhair color
// //
@ -1324,7 +1327,7 @@ static void CG_DrawUpperRight( void ) {
if ( cg_drawFPS.integer ) { if ( cg_drawFPS.integer ) {
y = CG_DrawFPS( y ); y = CG_DrawFPS( y );
} }
if ( cg_drawTimer.integer ) { if ( cg_drawTimer.integer || cg_RQ3_matchmode.integer) {
y = CG_DrawTimer( y ); y = CG_DrawTimer( y );
} }
if ( cg_drawAttacker.integer ) { if ( cg_drawAttacker.integer ) {

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.75 2002/05/18 03:55:35 niceass
// many misc. changes
//
// Revision 1.74 2002/05/12 14:39:48 makro // Revision 1.74 2002/05/12 14:39:48 makro
// Wood, brick & ceramic impact sounds // Wood, brick & ceramic impact sounds
// //
@ -396,7 +399,7 @@ typedef enum {
LE_SCALE_FADE, LE_SCALE_FADE,
LE_SCOREPLUM, LE_SCOREPLUM,
LE_PRESSURE, LE_PRESSURE,
LE_MOVING_TRACER, LE_TRACER,
#ifdef MISSIONPACK #ifdef MISSIONPACK
LE_KAMIKAZE, LE_KAMIKAZE,
LE_INVULIMPACT, LE_INVULIMPACT,

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.13 2002/05/18 03:55:35 niceass
// many misc. changes
//
// Revision 1.12 2002/05/09 06:42:06 niceass // Revision 1.12 2002/05/09 06:42:06 niceass
// New tracers // New tracers
// //
@ -858,14 +861,15 @@ void CG_AddPressureEntity ( localEntity_t *le ) {
/* /*
================ ================
CG_AddMovingTracer CG_AddMovingTracer
"Borrowed" this from Wolf, hope this is legal =D - NiceAss
- NiceAss
================ ================
*/ */
void CG_AddMovingTracer( localEntity_t *le ) { void CG_AddTracer( localEntity_t *le ) {
vec3_t start, end, dir; vec3_t start, end, dir;
BG_EvaluateTrajectory( &le->pos, cg.time, start ); //BG_EvaluateTrajectory( &le->pos, cg.time, start );
VectorMA(le->pos.trBase, (cg.time - le->pos.trTime) / 1000.0f, le->pos.trDelta, start);
VectorNormalize2( le->pos.trDelta, dir ); VectorNormalize2( le->pos.trDelta, dir );
VectorMA( start, cg_tracerLength.value, dir, end ); VectorMA( start, cg_tracerLength.value, dir, end );
@ -903,8 +907,8 @@ void CG_AddLocalEntities( void ) {
case LE_MARK: case LE_MARK:
break; break;
case LE_MOVING_TRACER: case LE_TRACER:
CG_AddMovingTracer( le ); CG_AddTracer( le );
break; break;
case LE_SPRITE_EXPLOSION: case LE_SPRITE_EXPLOSION:

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.65 2002/05/18 03:55:35 niceass
// many misc. changes
//
// Revision 1.64 2002/05/13 05:24:54 jbravo // Revision 1.64 2002/05/13 05:24:54 jbravo
// the ssg color cvars now also control normal xhair color // the ssg color cvars now also control normal xhair color
// //
@ -1203,7 +1206,7 @@ static void CG_RegisterGraphics( void ) {
cgs.media.bloodTrailShader = trap_R_RegisterShader( "bloodTrail" ); cgs.media.bloodTrailShader = trap_R_RegisterShader( "bloodTrail" );
cgs.media.lagometerShader = trap_R_RegisterShader("lagometer" ); cgs.media.lagometerShader = trap_R_RegisterShader("lagometer" );
cgs.media.connectionShader = trap_R_RegisterShader( "disconnected" ); cgs.media.connectionShader = trap_R_RegisterShader( "disconnected" );
cgs.media.waterParticleShader = trap_R_RegisterShader( "gfx/misc/water.tga" ); // NiceAss: Used in pressure entities //cgs.media.waterParticleShader = trap_R_RegisterShader( "gfx/misc/water.tga" ); // NiceAss: Used in pressure entities
cgs.media.waterBubbleShader = trap_R_RegisterShader( "waterBubble" ); cgs.media.waterBubbleShader = trap_R_RegisterShader( "waterBubble" );
cgs.media.tracerShader = trap_R_RegisterShader( "gfx/misc/tracer" ); cgs.media.tracerShader = trap_R_RegisterShader( "gfx/misc/tracer" );

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.72 2002/05/18 03:55:35 niceass
// many misc. changes
//
// Revision 1.71 2002/05/12 14:39:48 makro // Revision 1.71 2002/05/12 14:39:48 makro
// Wood, brick & ceramic impact sounds // Wood, brick & ceramic impact sounds
// //
@ -167,6 +170,46 @@ static qboolean CG_ParseWeaponSoundFile( const char *filename, weaponInfo_t *wea
return qtrue; return qtrue;
} }
/*
======================
CG_CalcMuzzlePoint
======================
*/
static qboolean CG_CalcMuzzlePoint( int entityNum, vec3_t muzzle ) {
vec3_t forward;
centity_t *cent;
int anim;
if ( entityNum == cg.snap->ps.clientNum ) {
VectorCopy( cg.snap->ps.origin, muzzle );
muzzle[2] += cg.snap->ps.viewheight;
AngleVectors( cg.snap->ps.viewangles, forward, NULL, NULL );
VectorMA( muzzle, 14, forward, muzzle );
return qtrue;
}
cent = &cg_entities[entityNum];
if ( !cent->currentValid ) {
return qfalse;
}
VectorCopy( cent->currentState.pos.trBase, muzzle );
AngleVectors( cent->currentState.apos.trBase, forward, NULL, NULL );
anim = cent->currentState.legsAnim & ~ANIM_TOGGLEBIT;
if ( anim == LEGS_WALKCR || anim == LEGS_IDLECR ) {
muzzle[2] += CROUCH_VIEWHEIGHT;
} else {
muzzle[2] += DEFAULT_VIEWHEIGHT;
}
VectorMA( muzzle, 14, forward, muzzle );
return qtrue;
}
/* [QUARANTINE] - Weapon Animations - CG_ParseWeaponAnimFile /* [QUARANTINE] - Weapon Animations - CG_ParseWeaponAnimFile
========================== ==========================
@ -331,41 +374,6 @@ localEntity_t *CG_ShotgunEjectBrass( centity_t *cent ) {
return le; return le;
} }
#ifdef MISSIONPACK
/*
==========================
CG_NailgunEjectBrass
==========================
*/
static void CG_NailgunEjectBrass( centity_t *cent ) {
localEntity_t *smoke;
vec3_t origin;
vec3_t v[3];
vec3_t offset;
vec3_t xoffset;
vec3_t up;
AnglesToAxis( cent->lerpAngles, v );
offset[0] = 0;
offset[1] = -12;
offset[2] = 24;
xoffset[0] = offset[0] * v[0][0] + offset[1] * v[1][0] + offset[2] * v[2][0];
xoffset[1] = offset[0] * v[0][1] + offset[1] * v[1][1] + offset[2] * v[2][1];
xoffset[2] = offset[0] * v[0][2] + offset[1] * v[1][2] + offset[2] * v[2][2];
VectorAdd( cent->lerpOrigin, xoffset, origin );
VectorSet( up, 0, 0, 64 );
smoke = CG_SmokePuff( origin, up, 32, 1, 1, 1, 0.33f, 700, cg.time, 0, 0, cgs.media.smokePuffShader );
// use the optimized local entity add
smoke->leType = LE_SCALE_FADE;
}
#endif
/* /*
========================== ==========================
CG_RailTrail CG_RailTrail
@ -1607,13 +1615,14 @@ void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent
//CG_LightningBolt( nonPredictedCent, parent->lightingOrigin ); //CG_LightningBolt( nonPredictedCent, parent->lightingOrigin );
if ( ps && bg_itemlist[cg.snap->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_SILENCER && if ( ps && bg_itemlist[cg.snap->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_SILENCER &&
( weaponNum == WP_PISTOL || weaponNum == WP_MP5 || weaponNum == WP_SSG3000) ) { ( weaponNum == WP_PISTOL || weaponNum == WP_MP5 || weaponNum == WP_SSG3000 ) ) {
//Makro - wasn't initialized, caused a warning in MSVC //Makro - wasn't initialized, caused a warning in MSVC
float scale = 0.0f; vec3_t silencerEnd;
vec3_t angles; float scale = 0.0f;
vec3_t angles;
if (weaponNum == WP_PISTOL) scale = 1.2f; if (weaponNum == WP_PISTOL) scale = 1.2f;
if (weaponNum == WP_SSG3000) scale = 1.8f; if (weaponNum == WP_SSG3000) scale = 2.0f;
if (weaponNum == WP_MP5) scale = 1.7f; if (weaponNum == WP_MP5) scale = 1.7f;
memset( &silencer, 0, sizeof( silencer ) ); memset( &silencer, 0, sizeof( silencer ) );
@ -1633,9 +1642,26 @@ void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent
CG_PositionRotatedOffsetEntityOnTag( &silencer, &gun, weapon->firstModel, "tag_silencer", vec3_origin); CG_PositionRotatedOffsetEntityOnTag( &silencer, &gun, weapon->firstModel, "tag_silencer", vec3_origin);
// Offset weapon // Offset weapon
VectorMA(silencer.origin, -7.2f, silencer.axis[1], silencer.origin); VectorMA(silencer.origin, -7.2f, silencer.axis[1], silencer.origin);
VectorMA(silencer.origin, 10.0f, silencer.axis[1], silencerEnd);
flash.nonNormalizedAxes = qtrue; flash.nonNormalizedAxes = qtrue;
CG_AddWeaponWithPowerups( &silencer, cent->currentState.powerups ); CG_AddWeaponWithPowerups( &silencer, cent->currentState.powerups );
/*
NiceAss: Add a puff of smoke at the end of the silencer when fired. Not alligned properly and looks bad.
if (cent->muzzleFlashTime == -1) {
localEntity_t *smoke;
vec3_t up;
silencerEnd[2] += 5.0f;
VectorSet(up, 0.0f, 0.0f, 15.0f);
smoke = CG_SmokePuff( silencerEnd, up, 0.75f, 1, 1, 1, 0.75f, 300, cg.time, 0, 0, cgs.media.shotgunSmokePuffShader );
smoke->leType = LE_SCALE_FADE;
cent->muzzleFlashTime = 0;
}
*/
} }
// NiceAss: Tag locations used for shell ejection // NiceAss: Tag locations used for shell ejection
@ -1672,7 +1698,7 @@ void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent
if (trap_CM_PointContents(shell->pos.trBase, 0) == CONTENTS_WATER) speed = 0.5f; if (trap_CM_PointContents(shell->pos.trBase, 0) == CONTENTS_WATER) speed = 0.5f;
if ( weaponNum == WP_HANDCANNON ) { if (weaponNum == WP_HANDCANNON) {
speed = -speed * 1.5; // horrible hacks speed = -speed * 1.5; // horrible hacks
axis = 1; axis = 1;
} }
@ -2656,9 +2682,9 @@ void CG_FireWeapon( centity_t *cent, int weapModification ) {
// mark the entity as muzzle flashing, so when it is added it will // mark the entity as muzzle flashing, so when it is added it will
// append the flash to the weapon model // append the flash to the weapon model
if (weapModification != RQ3_WPMOD_SILENCER) if (weapModification != RQ3_WPMOD_SILENCER)
{
cent->muzzleFlashTime = cg.time; cent->muzzleFlashTime = cg.time;
} else
cent->muzzleFlashTime = -1;
// Elder: choose alternate muzzle flashes for 3rd-person views // Elder: choose alternate muzzle flashes for 3rd-person views
if (ent->weapon == WP_AKIMBO) { if (ent->weapon == WP_AKIMBO) {
@ -2706,70 +2732,6 @@ void CG_FireWeapon( centity_t *cent, int weapModification ) {
} }
} }
} }
//Elder: TODO: eject sync with animation for M3 and only eject for HC when reloading
// do brass ejection
//if ( weap->ejectBrassFunc && cg_brassTime.integer > 0 ) {
// weap->ejectBrassFunc( cent );
//}
/*
// MK23
//Calculate the kick angles
for (i=1 ; i<3 ; i++)
{
ent->client->kick_origin[i] = crandom() * 0.35;
ent->client->kick_angles[i] = crandom() * 0.7;
}
ent->client->kick_origin[0] = crandom() * 0.35;
// Akimbo
//Calculate the kick angles
for (i=1 ; i<3 ; i++)
{
ent->client->kick_origin[i] = crandom() * 0.25;
ent->client->kick_angles[i] = crandom() * 0.5;
}
ent->client->kick_origin[0] = crandom() * 0.35;
// Handcannon
AngleVectors (ent->client->v_angle, forward, right, NULL);
VectorScale (forward, -2, ent->client->kick_origin);
ent->client->kick_angles[0] = -2;
// Knives
AngleVectors (ent->client->v_angle, forward, right, NULL);
VectorScale (forward, -2, ent->client->kick_origin);
ent->client->kick_angles[0] = -2;
// M3
AngleVectors (ent->client->v_angle, forward, right, NULL);
VectorScale (forward, -2, ent->client->kick_origin);
ent->client->kick_angles[0] = -2;
// M4 -- we already add the ride-up angles in pmove
//Calculate the kick angles
for (i=1 ; i<3 ; i++)
{
ent->client->kick_origin[i] = crandom() * 0.25;
ent->client->kick_angles[i] = crandom() * 0.5;
}
ent->client->kick_origin[0] = crandom() * 0.35;
// MP5
//Calculate the kick angles
for (i=1 ; i<3 ; i++)
{
ent->client->kick_origin[i] = crandom() * 0.25;
ent->client->kick_angles[i] = crandom() * 0.5;
}
ent->client->kick_origin[0] = crandom() * 0.35;
// SSG3000 has no kick
*/
// View kicks -- note this doesn't affect aim which is handled on the server-side // View kicks -- note this doesn't affect aim which is handled on the server-side
// even though it probably should // even though it probably should
@ -3795,47 +3757,6 @@ void CG_ShotgunFire( entityState_t *es, qboolean ism3) {
} }
} }
/*
======================
CG_CalcMuzzlePoint
======================
*/
static qboolean CG_CalcMuzzlePoint( int entityNum, vec3_t muzzle ) {
vec3_t forward;
centity_t *cent;
int anim;
if ( entityNum == cg.snap->ps.clientNum ) {
VectorCopy( cg.snap->ps.origin, muzzle );
muzzle[2] += cg.snap->ps.viewheight;
AngleVectors( cg.snap->ps.viewangles, forward, NULL, NULL );
VectorMA( muzzle, 14, forward, muzzle );
return qtrue;
}
cent = &cg_entities[entityNum];
if ( !cent->currentValid ) {
return qfalse;
}
VectorCopy( cent->currentState.pos.trBase, muzzle );
AngleVectors( cent->currentState.apos.trBase, forward, NULL, NULL );
anim = cent->currentState.legsAnim & ~ANIM_TOGGLEBIT;
if ( anim == LEGS_WALKCR || anim == LEGS_IDLECR ) {
muzzle[2] += CROUCH_VIEWHEIGHT;
} else {
muzzle[2] += DEFAULT_VIEWHEIGHT;
}
VectorMA( muzzle, 14, forward, muzzle );
return qtrue;
}
/* /*
============================================================================ ============================================================================
@ -3846,51 +3767,42 @@ BULLETS
/* /*
=============== ===============
CG_SpawnTracer CG_CreateTracer
"Borrowed" most of this from Wolf. Hope this is legal =D
- NiceAss - NiceAss
=============== ===============
*/ */
void CG_SpawnTracer( int sourceEnt, vec3_t pstart, vec3_t pend ) { void CG_CreateTracer( int entity, vec3_t start, vec3_t end ) {
localEntity_t *le; localEntity_t *le;
float dist; float dist;
vec3_t dir; vec3_t dir;
vec3_t start, end, temp, midpoint; vec3_t temp, midpoint;
float tracerSpeed = 4200; float tracerSpeed = 4200;
VectorCopy( pstart, start );
VectorCopy( pend, end );
VectorSubtract( end, start, dir ); VectorSubtract( end, start, dir );
dist = VectorNormalize( dir ); dist = VectorNormalize( dir );
if (dist < 2 * cg_tracerLength.value) if (dist < 1.5 * cg_tracerLength.value)
return; // segment isnt long enough, dont bother return;
if (!CG_CalcMuzzlePoint( sourceEnt, start ) ) { // Stop right before the end
return; // Not a player
}
// subtract the length of the tracer from the end point, so we dont go through the end point
VectorMA( end, -cg_tracerLength.value, dir, end ); VectorMA( end, -cg_tracerLength.value, dir, end );
VectorSubtract( end, start, temp ); VectorSubtract( end, start, temp );
dist = VectorLength( temp ); dist = VectorLength( temp );
le = CG_AllocLocalEntity(); le = CG_AllocLocalEntity();
le->leType = LE_MOVING_TRACER; le->leType = LE_TRACER;
le->startTime = cg.time - (cg.frametime ? (rand()%cg.frametime)/2 : 0); le->startTime = cg.time;
le->endTime = le->startTime + 1000.0 * dist / tracerSpeed; le->endTime = le->startTime + 1000.0 * (dist / tracerSpeed);
le->pos.trType = TR_LINEAR; le->pos.trType = TR_LINEAR;
le->pos.trTime = le->startTime; le->pos.trTime = le->startTime;
VectorCopy( start, le->pos.trBase ); VectorCopy( start, le->pos.trBase );
VectorScale( dir, tracerSpeed, le->pos.trDelta ); VectorScale( dir, tracerSpeed, le->pos.trDelta );
midpoint[0] = ( start[0] + end[0] ) * 0.5;
midpoint[0] = ( pstart[0] + pend[0] ) * 0.5; midpoint[1] = ( start[1] + end[1] ) * 0.5;
midpoint[1] = ( pstart[1] + pend[1] ) * 0.5; midpoint[2] = ( start[2] + end[2] ) * 0.5;
midpoint[2] = ( pstart[2] + pend[2] ) * 0.5;
trap_S_StartSound( midpoint, ENTITYNUM_WORLD, CHAN_AUTO, cgs.media.tracerSound ); trap_S_StartSound( midpoint, ENTITYNUM_WORLD, CHAN_AUTO, cgs.media.tracerSound );
} }
@ -4015,22 +3927,23 @@ void CG_Bullet( vec3_t end, int sourceEntityNum, vec3_t normal,
// draw a tracer // draw a tracer
// Elder: only if not using SSG, check if this client is the source // Elder: only if not using SSG, check if this client is the source
//CG_Tracer( start, end ); //CG_Tracer( start, end );
if (sourceEntityNum == cg.snap->ps.clientNum) if (sourceEntityNum == cg.snap->ps.clientNum)
{ {
if (cg.snap->ps.weapon != WP_SSG3000) if (cg.snap->ps.weapon != WP_SSG3000 )
{ {
if ( random() < cg_tracerChance.value ) if ( random() < cg_tracerChance.value )
CG_SpawnTracer( sourceEntityNum, start, end ); CG_CreateTracer( sourceEntityNum, start, end );
// CG_Tracer( start, end ); // CG_Tracer( start, end );
} }
} }
else else
{ {
cent = &cg_entities[sourceEntityNum]; cent = &cg_entities[sourceEntityNum];
if ( cent->currentValid && cent->currentState.weapon != WP_SSG3000) if ( cent->currentValid && cent->currentState.weapon != WP_SSG3000 )
{ {
if ( random() < cg_tracerChance.value ) { if ( random() < cg_tracerChance.value ) {
CG_SpawnTracer( sourceEntityNum, start, end ); CG_CreateTracer( sourceEntityNum, start, end );
// CG_Tracer( start, end ); // CG_Tracer( start, end );
} }
} }