summaryrefslogtreecommitdiff
path: root/src/cgame/cg_event.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cgame/cg_event.c')
-rw-r--r--src/cgame/cg_event.c1524
1 files changed, 671 insertions, 853 deletions
diff --git a/src/cgame/cg_event.c b/src/cgame/cg_event.c
index b8c5e44c..98337c45 100644
--- a/src/cgame/cg_event.c
+++ b/src/cgame/cg_event.c
@@ -17,271 +17,239 @@
#include "cg_local.h"
-// for the voice chats
-#include "../../ui/menudef.h"
-
-//==========================================================================
-
-/*
-===================
-CG_PlaceString
-
-Also called by scoreboard drawing
-===================
-*/
-const char *CG_PlaceString( int rank ) {
- static char str[64];
- char *s, *t;
-
- if ( rank & RANK_TIED_FLAG ) {
- rank &= ~RANK_TIED_FLAG;
- t = "Tied for ";
- } else {
- t = "";
- }
-
- if ( rank == 1 ) {
- s = S_COLOR_BLUE "1st" S_COLOR_WHITE; // draw in blue
- } else if ( rank == 2 ) {
- s = S_COLOR_RED "2nd" S_COLOR_WHITE; // draw in red
- } else if ( rank == 3 ) {
- s = S_COLOR_YELLOW "3rd" S_COLOR_WHITE; // draw in yellow
- } else if ( rank == 11 ) {
- s = "11th";
- } else if ( rank == 12 ) {
- s = "12th";
- } else if ( rank == 13 ) {
- s = "13th";
- } else if ( rank % 10 == 1 ) {
- s = va("%ist", rank);
- } else if ( rank % 10 == 2 ) {
- s = va("%ind", rank);
- } else if ( rank % 10 == 3 ) {
- s = va("%ird", rank);
- } else {
- s = va("%ith", rank);
- }
-
- Com_sprintf( str, sizeof( str ), "%s%s", t, s );
- return str;
-}
-
/*
=============
CG_Obituary
=============
*/
-static void CG_Obituary( entityState_t *ent ) {
- int mod;
- int target, attacker;
- char *message;
- char *message2;
- const char *targetInfo;
- const char *attackerInfo;
- char targetName[32];
- char attackerName[32];
- gender_t gender;
+static void CG_Obituary( entityState_t *ent )
+{
+ int mod;
+ int target, attacker;
+ char *message;
+ char *message2;
+ const char *targetInfo;
+ const char *attackerInfo;
+ char targetName[ 32 ];
+ char attackerName[ 32 ];
+ gender_t gender;
clientInfo_t *ci;
target = ent->otherEntityNum;
attacker = ent->otherEntityNum2;
mod = ent->eventParm;
- if ( target < 0 || target >= MAX_CLIENTS ) {
+ if( target < 0 || target >= MAX_CLIENTS )
CG_Error( "CG_Obituary: target out of range" );
- }
- ci = &cgs.clientinfo[target];
+
+ ci = &cgs.clientinfo[ target ];
- if ( attacker < 0 || attacker >= MAX_CLIENTS ) {
+ if( attacker < 0 || attacker >= MAX_CLIENTS )
+ {
attacker = ENTITYNUM_WORLD;
attackerInfo = NULL;
- } else {
- attackerInfo = CG_ConfigString( CS_PLAYERS + attacker );
}
+ else
+ attackerInfo = CG_ConfigString( CS_PLAYERS + attacker );
targetInfo = CG_ConfigString( CS_PLAYERS + target );
- if ( !targetInfo ) {
+
+ if( !targetInfo )
return;
- }
- Q_strncpyz( targetName, Info_ValueForKey( targetInfo, "n" ), sizeof(targetName) - 2);
+
+ Q_strncpyz( targetName, Info_ValueForKey( targetInfo, "n" ), sizeof( targetName ) - 2);
strcat( targetName, S_COLOR_WHITE );
message2 = "";
// check for single client messages
- switch( mod ) {
- case MOD_SUICIDE:
- message = "suicides";
- break;
- case MOD_FALLING:
- message = "cratered";
- break;
- case MOD_CRUSH:
- message = "was squished";
- break;
- case MOD_WATER:
- message = "sank like a rock";
- break;
- case MOD_SLIME:
- message = "melted";
- break;
- case MOD_LAVA:
- message = "does a back flip into the lava";
- break;
- case MOD_TARGET_LASER:
- message = "saw the light";
- break;
- case MOD_TRIGGER_HURT:
- message = "was in the wrong place";
- break;
- case MOD_HSPAWN:
- message = "should have run further";
- break;
- case MOD_ASPAWN:
- message = "was melted by the acid blood";
- break;
- default:
- message = NULL;
- break;
- }
-
- if (attacker == target) {
- gender = ci->gender;
- switch (mod) {
- case MOD_GRENADE_SPLASH:
- if ( gender == GENDER_FEMALE )
- message = "tripped on her own grenade";
- else if ( gender == GENDER_NEUTER )
- message = "tripped on its own grenade";
- else
- message = "tripped on his own grenade";
+ switch( mod )
+ {
+ case MOD_SUICIDE:
+ message = "suicides";
break;
- case MOD_ROCKET_SPLASH:
- if ( gender == GENDER_FEMALE )
- message = "blew herself up";
- else if ( gender == GENDER_NEUTER )
- message = "blew itself up";
- else
- message = "blew himself up";
+ case MOD_FALLING:
+ message = "cratered";
break;
- case MOD_FLAMER_SPLASH:
- if ( gender == GENDER_FEMALE )
- message = "toasted herself";
- else if ( gender == GENDER_NEUTER )
- message = "toasted itself";
- else
- message = "toasted himself";
+ case MOD_CRUSH:
+ message = "was squished";
+ break;
+ case MOD_WATER:
+ message = "sank like a rock";
+ break;
+ case MOD_SLIME:
+ message = "melted";
+ break;
+ case MOD_LAVA:
+ message = "does a back flip into the lava";
+ break;
+ case MOD_TARGET_LASER:
+ message = "saw the light";
+ break;
+ case MOD_TRIGGER_HURT:
+ message = "was in the wrong place";
break;
- case MOD_BFG_SPLASH:
- message = "should have used a smaller gun";
+ case MOD_HSPAWN:
+ message = "should have run further";
+ break;
+ case MOD_ASPAWN:
+ message = "was melted by the acid blood";
break;
default:
- if ( gender == GENDER_FEMALE )
- message = "killed herself";
- else if ( gender == GENDER_NEUTER )
- message = "killed itself";
- else
- message = "killed himself";
+ message = NULL;
break;
+ }
+
+ if( attacker == target )
+ {
+ gender = ci->gender;
+ switch( mod )
+ {
+ case MOD_GRENADE_SPLASH:
+ if( gender == GENDER_FEMALE )
+ message = "tripped on her own grenade";
+ else if( gender == GENDER_NEUTER )
+ message = "tripped on its own grenade";
+ else
+ message = "tripped on his own grenade";
+ break;
+
+ case MOD_ROCKET_SPLASH:
+ if( gender == GENDER_FEMALE )
+ message = "blew herself up";
+ else if( gender == GENDER_NEUTER )
+ message = "blew itself up";
+ else
+ message = "blew himself up";
+ break;
+
+ case MOD_FLAMER_SPLASH:
+ if( gender == GENDER_FEMALE )
+ message = "toasted herself";
+ else if( gender == GENDER_NEUTER )
+ message = "toasted itself";
+ else
+ message = "toasted himself";
+ break;
+
+ case MOD_BFG_SPLASH:
+ message = "should have used a smaller gun";
+ break;
+
+ default:
+ if( gender == GENDER_FEMALE )
+ message = "killed herself";
+ else if( gender == GENDER_NEUTER )
+ message = "killed itself";
+ else
+ message = "killed himself";
+ break;
}
}
- if (message) {
- CG_Printf( "%s %s.\n", targetName, message);
+ if( message )
+ {
+ CG_Printf( "%s %s.\n", targetName, message );
return;
}
// check for kill messages from the current clientNum
- if ( attacker == cg.snap->ps.clientNum ) {
+ if( attacker == cg.snap->ps.clientNum )
+ {
char *s;
- s = va("You fragged %s", targetName );
+ s = va( "You fragged %s", targetName );
CG_CenterPrint( s, SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
// print the text message as well
}
// check for double client messages
- if ( !attackerInfo ) {
+ if( !attackerInfo )
+ {
attacker = ENTITYNUM_WORLD;
strcpy( attackerName, "noname" );
- } else {
- Q_strncpyz( attackerName, Info_ValueForKey( attackerInfo, "n" ), sizeof(attackerName) - 2);
+ }
+ else
+ {
+ Q_strncpyz( attackerName, Info_ValueForKey( attackerInfo, "n" ), sizeof( attackerName ) - 2);
strcat( attackerName, S_COLOR_WHITE );
// check for kill messages about the current clientNum
- if ( target == cg.snap->ps.clientNum ) {
+ if( target == cg.snap->ps.clientNum )
Q_strncpyz( cg.killerName, attackerName, sizeof( cg.killerName ) );
- }
}
- if ( attacker != ENTITYNUM_WORLD ) {
- switch (mod) {
- case MOD_GRAPPLE:
- message = "was caught by";
- break;
- case MOD_GAUNTLET:
- message = "was pummeled by";
- break;
- case MOD_MACHINEGUN:
- message = "was machinegunned by";
- break;
- case MOD_CHAINGUN:
- message = "was chaingunned by";
- break;
- case MOD_SHOTGUN:
- message = "was gunned down by";
- break;
- case MOD_GRENADE:
- message = "ate";
- message2 = "'s grenade";
- break;
- case MOD_GRENADE_SPLASH:
- message = "was shredded by";
- message2 = "'s shrapnel";
- break;
- case MOD_ROCKET:
- message = "ate";
- message2 = "'s rocket";
- break;
- case MOD_ROCKET_SPLASH:
- message = "almost dodged";
- message2 = "'s rocket";
- break;
- case MOD_FLAMER:
- message = "was toasted by";
- message2 = "'s flamer";
- break;
- case MOD_FLAMER_SPLASH:
- message = "was toasted by";
- message2 = "'s flamer";
- break;
- case MOD_RAILGUN:
- message = "was railed by";
- break;
- case MOD_LIGHTNING:
- message = "was electrocuted by";
- break;
- case MOD_VENOM:
- message = "was biten by";
- break;
- case MOD_BFG:
- case MOD_BFG_SPLASH:
- message = "was blasted by";
- message2 = "'s BFG";
- break;
- case MOD_TELEFRAG:
- message = "tried to invade";
- message2 = "'s personal space";
- break;
- default:
- message = "was killed by";
- break;
+ if( attacker != ENTITYNUM_WORLD )
+ {
+ switch( mod )
+ {
+ case MOD_GRAPPLE:
+ message = "was caught by";
+ break;
+ case MOD_GAUNTLET:
+ message = "was pummeled by";
+ break;
+ case MOD_MACHINEGUN:
+ message = "was machinegunned by";
+ break;
+ case MOD_CHAINGUN:
+ message = "was chaingunned by";
+ break;
+ case MOD_SHOTGUN:
+ message = "was gunned down by";
+ break;
+ case MOD_GRENADE:
+ message = "ate";
+ message2 = "'s grenade";
+ break;
+ case MOD_GRENADE_SPLASH:
+ message = "was shredded by";
+ message2 = "'s shrapnel";
+ break;
+ case MOD_ROCKET:
+ message = "ate";
+ message2 = "'s rocket";
+ break;
+ case MOD_ROCKET_SPLASH:
+ message = "almost dodged";
+ message2 = "'s rocket";
+ break;
+ case MOD_FLAMER:
+ message = "was toasted by";
+ message2 = "'s flamer";
+ break;
+ case MOD_FLAMER_SPLASH:
+ message = "was toasted by";
+ message2 = "'s flamer";
+ break;
+ case MOD_RAILGUN:
+ message = "was railed by";
+ break;
+ case MOD_LIGHTNING:
+ message = "was electrocuted by";
+ break;
+ case MOD_VENOM:
+ message = "was biten by";
+ break;
+ case MOD_BFG:
+ case MOD_BFG_SPLASH:
+ message = "was blasted by";
+ message2 = "'s BFG";
+ break;
+ case MOD_TELEFRAG:
+ message = "tried to invade";
+ message2 = "'s personal space";
+ break;
+ default:
+ message = "was killed by";
+ break;
}
- if (message) {
+ if( message )
+ {
CG_Printf( "%s %s %s%s\n",
- targetName, message, attackerName, message2);
+ targetName, message, attackerName, message2 );
return;
}
}
@@ -293,94 +261,29 @@ static void CG_Obituary( entityState_t *ent ) {
//==========================================================================
/*
-===============
-CG_UseItem
-===============
-*/
-static void CG_UseItem( centity_t *cent ) {
- clientInfo_t *ci;
- int itemNum, clientNum;
- gitem_t *item;
- entityState_t *es;
-
- es = &cent->currentState;
-
- itemNum = (es->event & ~EV_EVENT_BITS) - EV_USE_ITEM0;
- if ( itemNum < 0 || itemNum > HI_NUM_HOLDABLE ) {
- itemNum = 0;
- }
-
- // print a message if the local player
- if ( es->number == cg.snap->ps.clientNum ) {
- if ( !itemNum ) {
- CG_CenterPrint( "No item to use", SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
- } else {
- /*item = BG_FindItemForHoldable( itemNum );*/
- CG_CenterPrint( va("Use %s", item->pickup_name), SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
- }
- }
-
- switch ( itemNum ) {
- default:
- case HI_NONE:
- trap_S_StartSound (NULL, es->number, CHAN_BODY, cgs.media.useNothingSound );
- break;
-
- case HI_TELEPORTER:
- break;
-
- case HI_MEDKIT:
- clientNum = cent->currentState.clientNum;
- if ( clientNum >= 0 && clientNum < MAX_CLIENTS ) {
- ci = &cgs.clientinfo[ clientNum ];
- ci->medkitUsageTime = cg.time;
- }
- trap_S_StartSound (NULL, es->number, CHAN_BODY, cgs.media.medkitSound );
- break;
- }
-
-}
-
-/*
-================
-CG_ItemPickup
-
-A new item was picked up this frame
-================
-*/
-static void CG_ItemPickup( int itemNum ) {
- cg.itemPickup = itemNum;
- cg.itemPickupTime = cg.time;
- cg.itemPickupBlendTime = cg.time;
- // see if it should be the grabbed weapon
-
-}
-
-
-/*
================
CG_PainEvent
Also called by playerstate transition
================
*/
-void CG_PainEvent( centity_t *cent, int health ) {
+void CG_PainEvent( centity_t *cent, int health )
+{
char *snd;
// don't do more than two pain sounds a second
- if ( cg.time - cent->pe.painTime < 500 ) {
+ if( cg.time - cent->pe.painTime < 500 )
return;
- }
- if ( health < 25 ) {
+ if( health < 25 )
snd = "*pain25_1.wav";
- } else if ( health < 50 ) {
+ else if( health < 50 )
snd = "*pain50_1.wav";
- } else if ( health < 75 ) {
+ else if( health < 75 )
snd = "*pain75_1.wav";
- } else {
+ else
snd = "*pain100_1.wav";
- }
+
trap_S_StartSound( NULL, cent->currentState.number, CHAN_VOICE,
CG_CustomSound( cent->currentState.number, snd ) );
@@ -584,597 +487,509 @@ void CG_EntityEvent( centity_t *cent, vec3_t position )
es = &cent->currentState;
event = es->event & ~EV_EVENT_BITS;
- if ( cg_debugEvents.integer ) {
+ if( cg_debugEvents.integer )
CG_Printf( "ent:%3i event:%3i ", es->number, event );
- }
- if ( !event ) {
+ if( !event )
+ {
DEBUGNAME("ZEROEVENT");
return;
}
clientNum = es->clientNum;
- if ( clientNum < 0 || clientNum >= MAX_CLIENTS ) {
+ if( clientNum < 0 || clientNum >= MAX_CLIENTS )
clientNum = 0;
- }
+
ci = &cgs.clientinfo[ clientNum ];
- switch ( event ) {
- //
- // movement generated events
- //
- case EV_FOOTSTEP:
- DEBUGNAME("EV_FOOTSTEP");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ ci->footsteps ][rand()&3] );
- }
- break;
- case EV_FOOTSTEP_METAL:
- DEBUGNAME("EV_FOOTSTEP_METAL");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_METAL ][rand()&3] );
- }
- break;
- case EV_FOOTSTEP_SQUELCH:
- DEBUGNAME("EV_FOOTSTEP_SQUELCH");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_FLESH ][rand()&3] );
- }
- break;
- case EV_FOOTSPLASH:
- DEBUGNAME("EV_FOOTSPLASH");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_SPLASH ][rand()&3] );
- }
- break;
- case EV_FOOTWADE:
- DEBUGNAME("EV_FOOTWADE");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_SPLASH ][rand()&3] );
- }
- break;
- case EV_SWIM:
- DEBUGNAME("EV_SWIM");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_SPLASH ][rand()&3] );
- }
- break;
+ switch( event )
+ {
+ //
+ // movement generated events
+ //
+ case EV_FOOTSTEP:
+ DEBUGNAME( "EV_FOOTSTEP" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ ci->footsteps ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_FOOTSTEP_METAL:
+ DEBUGNAME( "EV_FOOTSTEP_METAL" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_METAL ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_FOOTSTEP_SQUELCH:
+ DEBUGNAME( "EV_FOOTSTEP_SQUELCH" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_FLESH ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_FOOTSPLASH:
+ DEBUGNAME( "EV_FOOTSPLASH" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_SPLASH ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_FOOTWADE:
+ DEBUGNAME( "EV_FOOTWADE" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_SPLASH ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_SWIM:
+ DEBUGNAME( "EV_SWIM" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_SPLASH ][ rand( ) & 3 ] );
+ }
+ break;
- case EV_FALL_SHORT:
- DEBUGNAME("EV_FALL_SHORT");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.landSound );
- if ( clientNum == cg.predictedPlayerState.clientNum ) {
- // smooth landing z changes
- cg.landChange = -8;
- cg.landTime = cg.time;
- }
- break;
- case EV_FALL_MEDIUM:
- DEBUGNAME("EV_FALL_MEDIUM");
- // use normal pain sound
- trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*pain100_1.wav" ) );
- if ( clientNum == cg.predictedPlayerState.clientNum ) {
- // smooth landing z changes
- cg.landChange = -16;
- cg.landTime = cg.time;
- }
- break;
- case EV_FALL_FAR:
- DEBUGNAME("EV_FALL_FAR");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*fall1.wav" ) );
- cent->pe.painTime = cg.time; // don't play a pain sound right after this
- if ( clientNum == cg.predictedPlayerState.clientNum ) {
- // smooth landing z changes
- cg.landChange = -24;
- cg.landTime = cg.time;
- }
- break;
-
- case EV_STEP_4:
- case EV_STEP_8:
- case EV_STEP_12:
- case EV_STEP_16: // smooth out step up transitions
- case EV_STEPDN_4:
- case EV_STEPDN_8:
- case EV_STEPDN_12:
- case EV_STEPDN_16: // smooth out step down transitions
- DEBUGNAME("EV_STEP");
- {
- float oldStep;
- int delta;
- int step;
-
- if( clientNum != cg.predictedPlayerState.clientNum )
- break;
-
- // if we are interpolating, we don't need to smooth steps
- if( cg.demoPlayback || ( cg.snap->ps.pm_flags & PMF_FOLLOW ) ||
- cg_nopredict.integer || cg_synchronousClients.integer )
- break;
-
- // check for stepping up before a previous step is completed
- delta = cg.time - cg.stepTime;
-
- if( delta < STEP_TIME )
- oldStep = cg.stepChange * ( STEP_TIME - delta ) / STEP_TIME;
- else
- oldStep = 0;
+ case EV_FALL_SHORT:
+ DEBUGNAME( "EV_FALL_SHORT" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.landSound );
+
+ if( clientNum == cg.predictedPlayerState.clientNum )
+ {
+ // smooth landing z changes
+ cg.landChange = -8;
+ cg.landTime = cg.time;
+ }
+ break;
+
+ case EV_FALL_MEDIUM:
+ DEBUGNAME( "EV_FALL_MEDIUM" );
+ // use normal pain sound
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*pain100_1.wav" ) );
+
+ if( clientNum == cg.predictedPlayerState.clientNum )
+ {
+ // smooth landing z changes
+ cg.landChange = -16;
+ cg.landTime = cg.time;
+ }
+ break;
+
+ case EV_FALL_FAR:
+ DEBUGNAME( "EV_FALL_FAR" );
+ trap_S_StartSound (NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*fall1.wav" ) );
+ cent->pe.painTime = cg.time; // don't play a pain sound right after this
+
+ if( clientNum == cg.predictedPlayerState.clientNum )
+ {
+ // smooth landing z changes
+ cg.landChange = -24;
+ cg.landTime = cg.time;
+ }
+ break;
- // add this amount
- if( event >= EV_STEPDN_4 )
- {
- step = 4 * ( event - EV_STEPDN_4 + 1 );
- cg.stepChange = oldStep - step;
- }
- else
- {
- step = 4 * ( event - EV_STEP_4 + 1 );
- cg.stepChange = oldStep + step;
- }
+ case EV_STEP_4:
+ case EV_STEP_8:
+ case EV_STEP_12:
+ case EV_STEP_16: // smooth out step up transitions
+ case EV_STEPDN_4:
+ case EV_STEPDN_8:
+ case EV_STEPDN_12:
+ case EV_STEPDN_16: // smooth out step down transitions
+ DEBUGNAME( "EV_STEP" );
+ {
+ float oldStep;
+ int delta;
+ int step;
+
+ if( clientNum != cg.predictedPlayerState.clientNum )
+ break;
+
+ // if we are interpolating, we don't need to smooth steps
+ if( cg.demoPlayback || ( cg.snap->ps.pm_flags & PMF_FOLLOW ) ||
+ cg_nopredict.integer || cg_synchronousClients.integer )
+ break;
+
+ // check for stepping up before a previous step is completed
+ delta = cg.time - cg.stepTime;
+
+ if( delta < STEP_TIME )
+ oldStep = cg.stepChange * ( STEP_TIME - delta ) / STEP_TIME;
+ else
+ oldStep = 0;
+
+ // add this amount
+ if( event >= EV_STEPDN_4 )
+ {
+ step = 4 * ( event - EV_STEPDN_4 + 1 );
+ cg.stepChange = oldStep - step;
+ }
+ else
+ {
+ step = 4 * ( event - EV_STEP_4 + 1 );
+ cg.stepChange = oldStep + step;
+ }
+
+ if( cg.stepChange > MAX_STEP_CHANGE )
+ cg.stepChange = MAX_STEP_CHANGE;
+ else if( cg.stepChange < -MAX_STEP_CHANGE )
+ cg.stepChange = -MAX_STEP_CHANGE;
+
+ cg.stepTime = cg.time;
+ break;
+ }
+
+ case EV_JUMP_PAD:
+ DEBUGNAME( "EV_JUMP_PAD" );
+ // CG_Printf( "EV_JUMP_PAD w/effect #%i\n", es->eventParm );
+ {
+ localEntity_t *smoke;
+ vec3_t up = { 0, 0, 1 };
+
+
+ smoke = CG_SmokePuff( cent->lerpOrigin, up,
+ 32,
+ 1, 1, 1, 0.33f,
+ 1000,
+ cg.time, 0,
+ LEF_PUFF_DONT_SCALE,
+ cgs.media.smokePuffShader );
+ }
- if( cg.stepChange > MAX_STEP_CHANGE )
- cg.stepChange = MAX_STEP_CHANGE;
- else if( cg.stepChange < -MAX_STEP_CHANGE )
- cg.stepChange = -MAX_STEP_CHANGE;
-
- cg.stepTime = cg.time;
- break;
- }
-
- case EV_JUMP_PAD:
- DEBUGNAME("EV_JUMP_PAD");
-// CG_Printf( "EV_JUMP_PAD w/effect #%i\n", es->eventParm );
- {
- localEntity_t *smoke;
- vec3_t up = {0, 0, 1};
+ // boing sound at origin, jump sound on player
+ trap_S_StartSound( cent->lerpOrigin, -1, CHAN_VOICE, cgs.media.jumpPadSound );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
+ break;
+ case EV_JUMP:
+ DEBUGNAME( "EV_JUMP" );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
+ break;
+
+ case EV_TAUNT:
+ DEBUGNAME( "EV_TAUNT" );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*taunt.wav" ) );
+ break;
+
+ case EV_WATER_TOUCH:
+ DEBUGNAME( "EV_WATER_TOUCH" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.watrInSound );
+ break;
+
+ case EV_WATER_LEAVE:
+ DEBUGNAME( "EV_WATER_LEAVE" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.watrOutSound );
+ break;
+
+ case EV_WATER_UNDER:
+ DEBUGNAME( "EV_WATER_UNDER" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.watrUnSound );
+ break;
+
+ case EV_WATER_CLEAR:
+ DEBUGNAME( "EV_WATER_CLEAR" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*gasp.wav" ) );
+ break;
- smoke = CG_SmokePuff( cent->lerpOrigin, up,
- 32,
- 1, 1, 1, 0.33f,
- 1000,
- cg.time, 0,
- LEF_PUFF_DONT_SCALE,
- cgs.media.smokePuffShader );
- }
- // boing sound at origin, jump sound on player
- trap_S_StartSound ( cent->lerpOrigin, -1, CHAN_VOICE, cgs.media.jumpPadSound );
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
- break;
-
- case EV_JUMP:
- DEBUGNAME("EV_JUMP");
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
- break;
- case EV_TAUNT:
- DEBUGNAME("EV_TAUNT");
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*taunt.wav" ) );
- break;
- case EV_WATER_TOUCH:
- DEBUGNAME("EV_WATER_TOUCH");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.watrInSound );
- break;
- case EV_WATER_LEAVE:
- DEBUGNAME("EV_WATER_LEAVE");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.watrOutSound );
- break;
- case EV_WATER_UNDER:
- DEBUGNAME("EV_WATER_UNDER");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.watrUnSound );
- break;
- case EV_WATER_CLEAR:
- DEBUGNAME("EV_WATER_CLEAR");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*gasp.wav" ) );
- break;
-
- case EV_ITEM_PICKUP:
- DEBUGNAME("EV_ITEM_PICKUP");
- {
- }
- break;
+ case EV_ITEM_PICKUP:
+ DEBUGNAME( "EV_ITEM_PICKUP" );
+ {
+ }
+ break;
- case EV_GLOBAL_ITEM_PICKUP:
- DEBUGNAME("EV_GLOBAL_ITEM_PICKUP");
- {
- }
- break;
-
- //
- // weapon events
- //
- case EV_NOAMMO:
- DEBUGNAME("EV_NOAMMO");
-// trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.noAmmoSound );
- if ( es->number == cg.snap->ps.clientNum ) {
- CG_OutOfAmmoChange();
- }
- break;
- case EV_CHANGE_WEAPON:
- DEBUGNAME("EV_CHANGE_WEAPON");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.selectSound );
- break;
- case EV_NEXT_WEAPON:
- DEBUGNAME("EV_NEXT_WEAPON");
- CG_NextWeapon_f( );
- break;
- case EV_FIRE_WEAPON:
- DEBUGNAME("EV_FIRE_WEAPON");
- CG_FireWeapon( cent, 0 );
- break;
- case EV_FIRE_WEAPON2:
- DEBUGNAME("EV_FIRE_WEAPON2");
- CG_FireWeapon( cent, 1 ); //FIXME:??
- break;
- case EV_FIRE_WEAPON3:
- DEBUGNAME("EV_FIRE_WEAPON3");
- CG_FireWeapon( cent, 2 ); //FIXME:??
- break;
- case EV_USE_ITEM0:
- DEBUGNAME("EV_USE_ITEM0");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM1:
- DEBUGNAME("EV_USE_ITEM1");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM2:
- DEBUGNAME("EV_USE_ITEM2");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM3:
- DEBUGNAME("EV_USE_ITEM3");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM4:
- DEBUGNAME("EV_USE_ITEM4");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM5:
- DEBUGNAME("EV_USE_ITEM5");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM6:
- DEBUGNAME("EV_USE_ITEM6");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM7:
- DEBUGNAME("EV_USE_ITEM7");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM8:
- DEBUGNAME("EV_USE_ITEM8");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM9:
- DEBUGNAME("EV_USE_ITEM9");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM10:
- DEBUGNAME("EV_USE_ITEM10");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM11:
- DEBUGNAME("EV_USE_ITEM11");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM12:
- DEBUGNAME("EV_USE_ITEM12");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM13:
- DEBUGNAME("EV_USE_ITEM13");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM14:
- DEBUGNAME("EV_USE_ITEM14");
- CG_UseItem( cent );
- break;
-
- //=================================================================
-
- //
- // other events
- //
- case EV_PLAYER_TELEPORT_IN:
- DEBUGNAME("EV_PLAYER_TELEPORT_IN");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.teleInSound );
- CG_SpawnEffect( position);
- break;
-
- case EV_PLAYER_TELEPORT_OUT:
- DEBUGNAME("EV_PLAYER_TELEPORT_OUT");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.teleOutSound );
- CG_SpawnEffect( position);
- break;
-
- case EV_ITEM_POP:
- DEBUGNAME("EV_ITEM_POP");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.respawnSound );
- break;
- case EV_ITEM_RESPAWN:
- DEBUGNAME("EV_ITEM_RESPAWN");
- cent->miscTime = cg.time; // scale up from this
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.respawnSound );
- break;
-
- //TA: make alien items "grow"
- case EV_BUILD_CONSTRUCT:
- DEBUGNAME("EV_BUILD_CONSTRUCT");
- cent->miscTime = cg.time; // scale up from this
- //probably a better place for this, but for the time being it lives here
- memset( &cent->lerpFrame, 0, sizeof( lerpFrame_t ) );
- cent->buildableAnim = es->eventParm;
- break;
-
- //TA: make alien creep "recede"
- case EV_BUILD_DESTROY:
- DEBUGNAME("EV_BUILD_DESTROY");
- cent->miscTime = -cg.time; // scale down from this
- break;
-
- //TA: trigger an anim on a buildable item
- case EV_BUILD_ANIM:
- DEBUGNAME("EV_BUILD_ANIM");
- if( cent->buildableAnim == es->torsoAnim || es->eventParm & ANIM_TOGGLEBIT )
+ case EV_GLOBAL_ITEM_PICKUP:
+ DEBUGNAME( "EV_GLOBAL_ITEM_PICKUP" );
+ {
+ }
+ break;
+
+ //
+ // weapon events
+ //
+ case EV_NOAMMO:
+ DEBUGNAME( "EV_NOAMMO" );
+ // trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.noAmmoSound );
+ {
+ }
+ break;
+
+ case EV_CHANGE_WEAPON:
+ DEBUGNAME( "EV_CHANGE_WEAPON" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.selectSound );
+ break;
+
+ case EV_NEXT_WEAPON:
+ DEBUGNAME( "EV_NEXT_WEAPON" );
+ CG_NextWeapon_f( );
+ break;
+
+ case EV_FIRE_WEAPON:
+ DEBUGNAME( "EV_FIRE_WEAPON" );
+ CG_FireWeapon( cent, 0 );
+ break;
+
+ case EV_FIRE_WEAPON2:
+ DEBUGNAME( "EV_FIRE_WEAPON2" );
+ CG_FireWeapon( cent, 1 ); //FIXME:??
+ break;
+
+ case EV_FIRE_WEAPON3:
+ DEBUGNAME( "EV_FIRE_WEAPON3" );
+ CG_FireWeapon( cent, 2 ); //FIXME:??
+ break;
+
+ //=================================================================
+
+ //
+ // other events
+ //
+ case EV_PLAYER_TELEPORT_IN:
+ DEBUGNAME( "EV_PLAYER_TELEPORT_IN" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.teleInSound );
+ CG_SpawnEffect( position );
+ break;
+
+ case EV_PLAYER_TELEPORT_OUT:
+ DEBUGNAME( "EV_PLAYER_TELEPORT_OUT" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.teleOutSound );
+ CG_SpawnEffect( position );
+ break;
+
+ case EV_BUILD_CONSTRUCT:
+ DEBUGNAME( "EV_BUILD_CONSTRUCT" );
+ cent->miscTime = cg.time; // scale up from this
+ //probably a better place for this, but for the time being it lives here
+ memset( &cent->lerpFrame, 0, sizeof( lerpFrame_t ) );
cent->buildableAnim = es->eventParm;
- break;
-
- case EV_GRENADE_BOUNCE:
- DEBUGNAME("EV_GRENADE_BOUNCE");
- if ( rand() & 1 ) {
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.hgrenb1aSound );
- } else {
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.hgrenb2aSound );
- }
- break;
-
- //
- // missile impacts
- //
- case EV_MISSILE_HIT:
- DEBUGNAME("EV_MISSILE_HIT");
- ByteToDir( es->eventParm, dir );
- CG_MissileHitPlayer( es->weapon, position, dir, es->otherEntityNum, es->generic1 );
- break;
-
- case EV_MISSILE_MISS:
- DEBUGNAME("EV_MISSILE_MISS");
- ByteToDir( es->eventParm, dir );
- CG_MissileHitWall( es->weapon, 0, position, dir, IMPACTSOUND_DEFAULT, es->generic1 );
- break;
-
- case EV_MISSILE_MISS_METAL:
- DEBUGNAME("EV_MISSILE_MISS_METAL");
- ByteToDir( es->eventParm, dir );
- CG_MissileHitWall( es->weapon, 0, position, dir, IMPACTSOUND_METAL, es->generic1 );
- break;
-
- case EV_ITEM_EXPLOSION:
- DEBUGNAME("EV_ITEM_EXPLOSION");
- ByteToDir( es->eventParm, dir );
- CG_Explosion( 0, position, dir );
- break;
-
- case EV_RAILTRAIL:
-/* DEBUGNAME("EV_RAILTRAIL");
- cent->currentState.weapon = WP_RAILGUN;
- // if the end was on a nomark surface, don't make an explosion
- CG_RailTrail( es->origin2, es->pos.trBase );
- if ( es->eventParm != 255 ) {
+ break;
+
+ case EV_BUILD_DESTROY:
+ DEBUGNAME( "EV_BUILD_DESTROY" );
+ cent->miscTime = -cg.time; // scale down from this
+ break;
+
+ //TA: trigger an anim on a buildable item
+ case EV_BUILD_ANIM:
+ DEBUGNAME( "EV_BUILD_ANIM" );
+ if( cent->buildableAnim == es->torsoAnim || es->eventParm & ANIM_TOGGLEBIT )
+ cent->buildableAnim = es->eventParm;
+ break;
+
+ case EV_GRENADE_BOUNCE:
+ DEBUGNAME( "EV_GRENADE_BOUNCE" );
+ if( rand( ) & 1 )
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.hgrenb1aSound );
+ else
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.hgrenb2aSound );
+ break;
+
+ //
+ // missile impacts
+ //
+ case EV_MISSILE_HIT:
+ DEBUGNAME( "EV_MISSILE_HIT" );
ByteToDir( es->eventParm, dir );
- CG_MissileHitWall( es->weapon, es->clientNum, position, dir, IMPACTSOUND_DEFAULT );
- }*/
- break;
-
- case EV_TESLATRAIL:
- DEBUGNAME("EV_TESLATRAIL");
- cent->currentState.weapon = WP_TESLAGEN;
- CG_TeslaTrail( es->origin2, es->pos.trBase, es->generic1, es->clientNum );
- break;
-
- case EV_ALIENZAP:
- DEBUGNAME("EV_ALIENZAP");
- CG_AlienZap( es->origin2, es->pos.trBase, es->generic1, es->clientNum );
- break;
-
- case EV_BULLET_HIT_WALL:
- DEBUGNAME("EV_BULLET_HIT_WALL");
- ByteToDir( es->eventParm, dir );
- CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD );
- break;
-
- case EV_BULLET_HIT_FLESH:
- DEBUGNAME("EV_BULLET_HIT_FLESH");
- CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qtrue, es->eventParm );
- break;
-
- case EV_LAS_HIT_WALL:
- DEBUGNAME("EV_LAS_HIT_WALL");
- ByteToDir( es->eventParm, dir );
- CG_LasGunHit( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD );
- break;
-
- case EV_LAS_HIT_FLESH:
- DEBUGNAME("EV_LAS_HIT_FLESH");
- CG_LasGunHit( es->pos.trBase, es->otherEntityNum, dir, qtrue, es->eventParm );
- break;
-
+ CG_MissileHitPlayer( es->weapon, position, dir, es->otherEntityNum, es->generic1 );
+ break;
+
+ case EV_MISSILE_MISS:
+ DEBUGNAME( "EV_MISSILE_MISS" );
+ ByteToDir( es->eventParm, dir );
+ CG_MissileHitWall( es->weapon, 0, position, dir, IMPACTSOUND_DEFAULT, es->generic1 );
+ break;
+
+ case EV_MISSILE_MISS_METAL:
+ DEBUGNAME( "EV_MISSILE_MISS_METAL" );
+ ByteToDir( es->eventParm, dir );
+ CG_MissileHitWall( es->weapon, 0, position, dir, IMPACTSOUND_METAL, es->generic1 );
+ break;
+
+ case EV_BUILDABLE_EXPLOSION:
+ DEBUGNAME( "EV_BUILDABLE_EXPLOSION" );
+ ByteToDir( es->eventParm, dir );
+ CG_Explosion( 0, position, dir );
+ break;
+
+ case EV_TESLATRAIL:
+ DEBUGNAME( "EV_TESLATRAIL" );
+ cent->currentState.weapon = WP_TESLAGEN;
+ CG_TeslaTrail( es->origin2, es->pos.trBase, es->generic1, es->clientNum );
+ break;
+
+ case EV_ALIENZAP:
+ DEBUGNAME( "EV_ALIENZAP" );
+ CG_AlienZap( es->origin2, es->pos.trBase, es->generic1, es->clientNum );
+ break;
+
+ case EV_BULLET_HIT_WALL:
+ DEBUGNAME( "EV_BULLET_HIT_WALL" );
+ ByteToDir( es->eventParm, dir );
+ CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD );
+ break;
+
+ case EV_BULLET_HIT_FLESH:
+ DEBUGNAME( "EV_BULLET_HIT_FLESH" );
+ CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qtrue, es->eventParm );
+ break;
+
+ case EV_LAS_HIT_WALL:
+ DEBUGNAME( "EV_LAS_HIT_WALL" );
+ ByteToDir( es->eventParm, dir );
+ CG_LasGunHit( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD );
+ break;
+
+ case EV_LAS_HIT_FLESH:
+ DEBUGNAME( "EV_LAS_HIT_FLESH" );
+ CG_LasGunHit( es->pos.trBase, es->otherEntityNum, dir, qtrue, es->eventParm );
+ break;
+
#define MASS_EJECTION_VEL 300
- case EV_MASS_DRIVER_HIT:
- DEBUGNAME("EV_MASS_DRIVER_HIT");
- for( i = 0; i <= 10; i++ )
- {
- qhandle_t spark;
- vec3_t velocity;
- vec3_t accel = { 0.0f, 0.0f, -DEFAULT_GRAVITY };
- vec3_t origin, normal;
+ case EV_MASS_DRIVER_HIT:
+ DEBUGNAME( "EV_MASS_DRIVER_HIT" );
+ for( i = 0; i <= 10; i++ )
+ {
+ qhandle_t spark;
+ vec3_t velocity;
+ vec3_t accel = { 0.0f, 0.0f, -DEFAULT_GRAVITY };
+ vec3_t origin, normal;
+
+ ByteToDir( es->eventParm, normal );
+
+ VectorMA( es->pos.trBase, 10.0f, normal, origin );
+
+ if( crandom( ) > 0.5f )
+ spark = cgs.media.gibSpark1;
+ else
+ spark = cgs.media.gibSpark2;
+
+ velocity[ 0 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
+ velocity[ 1 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
+ velocity[ 2 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
+
+ CG_LaunchSprite( origin, velocity, accel, 0.0f, 0.5f, 4.0f, 2.0f, 255, 0, rand( ) % 360,
+ cg.time, cg.time, 5000 + ( crandom( ) * 3000 ),
+ spark, qfalse, qfalse );
+ }
- ByteToDir( es->eventParm, normal );
+ break;
- VectorMA( es->pos.trBase, 10.0f, normal, origin );
+ case EV_GENERAL_SOUND:
+ DEBUGNAME( "EV_GENERAL_SOUND" );
+ if( cgs.gameSounds[ es->eventParm ] )
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.gameSounds[ es->eventParm ] );
+ else
+ {
+ s = CG_ConfigString( CS_SOUNDS + es->eventParm );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, s ) );
+ }
+ break;
- if( crandom( ) > 0.5f )
- spark = cgs.media.gibSpark1;
+ case EV_GLOBAL_SOUND: // play from the player's head so it never diminishes
+ DEBUGNAME( "EV_GLOBAL_SOUND" );
+ if( cgs.gameSounds[ es->eventParm ] )
+ trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_AUTO, cgs.gameSounds[ es->eventParm ] );
else
- spark = cgs.media.gibSpark2;
+ {
+ s = CG_ConfigString( CS_SOUNDS + es->eventParm );
+ trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_AUTO, CG_CustomSound( es->number, s ) );
+ }
+ break;
- velocity[ 0 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
- velocity[ 1 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
- velocity[ 2 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
-
- CG_LaunchSprite( origin, velocity, accel, 0.0f, 0.5f, 4.0f, 2.0f, 255, 0, rand( ) % 360,
- cg.time, cg.time, 5000 + ( crandom( ) * 3000 ),
- spark, qfalse, qfalse );
- }
+ case EV_PAIN:
+ // local player sounds are triggered in CG_CheckLocalSounds,
+ // so ignore events on the player
+ DEBUGNAME( "EV_PAIN" );
+ if( cent->currentState.number != cg.snap->ps.clientNum )
+ CG_PainEvent( cent, es->eventParm );
+ break;
- break;
+ case EV_DEATH1:
+ case EV_DEATH2:
+ case EV_DEATH3:
+ DEBUGNAME( "EV_DEATHx" );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE,
+ CG_CustomSound( es->number, va( "*death%i.wav", event - EV_DEATH1 + 1 ) ) );
+ break;
- case EV_SHOTGUN:
- DEBUGNAME("EV_SHOTGUN");
- CG_ShotgunFire( es );
- break;
+ case EV_OBITUARY:
+ DEBUGNAME( "EV_OBITUARY" );
+ CG_Obituary( es );
+ break;
- case EV_GENERAL_SOUND:
- DEBUGNAME("EV_GENERAL_SOUND");
- if ( cgs.gameSounds[ es->eventParm ] ) {
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, cgs.gameSounds[ es->eventParm ] );
- } else {
- s = CG_ConfigString( CS_SOUNDS + es->eventParm );
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, s ) );
- }
- break;
-
- case EV_GLOBAL_SOUND: // play from the player's head so it never diminishes
- DEBUGNAME("EV_GLOBAL_SOUND");
- if ( cgs.gameSounds[ es->eventParm ] ) {
- trap_S_StartSound (NULL, cg.snap->ps.clientNum, CHAN_AUTO, cgs.gameSounds[ es->eventParm ] );
- } else {
- s = CG_ConfigString( CS_SOUNDS + es->eventParm );
- trap_S_StartSound (NULL, cg.snap->ps.clientNum, CHAN_AUTO, CG_CustomSound( es->number, s ) );
- }
- break;
-
- case EV_PAIN:
- // local player sounds are triggered in CG_CheckLocalSounds,
- // so ignore events on the player
- DEBUGNAME("EV_PAIN");
- if ( cent->currentState.number != cg.snap->ps.clientNum ) {
- CG_PainEvent( cent, es->eventParm );
- }
- break;
-
- case EV_DEATH1:
- case EV_DEATH2:
- case EV_DEATH3:
- DEBUGNAME("EV_DEATHx");
- trap_S_StartSound( NULL, es->number, CHAN_VOICE,
- CG_CustomSound( es->number, va("*death%i.wav", event - EV_DEATH1 + 1) ) );
- break;
-
-
- case EV_OBITUARY:
- DEBUGNAME("EV_OBITUARY");
- CG_Obituary( es );
- break;
-
- //
- // powerup events
- //
- case EV_POWERUP_QUAD:
- DEBUGNAME("EV_POWERUP_QUAD");
- if ( es->number == cg.snap->ps.clientNum ) {
- cg.powerupActive = PW_QUAD;
- cg.powerupTime = cg.time;
- }
- trap_S_StartSound (NULL, es->number, CHAN_ITEM, cgs.media.quadSound );
- break;
- case EV_POWERUP_BATTLESUIT:
- DEBUGNAME("EV_POWERUP_BATTLESUIT");
- if ( es->number == cg.snap->ps.clientNum ) {
- cg.powerupActive = PW_BATTLESUIT;
- cg.powerupTime = cg.time;
- }
- trap_S_StartSound (NULL, es->number, CHAN_ITEM, cgs.media.protectSound );
- break;
- case EV_POWERUP_REGEN:
- DEBUGNAME("EV_POWERUP_REGEN");
- if ( es->number == cg.snap->ps.clientNum ) {
- cg.powerupActive = PW_REGEN;
- cg.powerupTime = cg.time;
- }
- trap_S_StartSound (NULL, es->number, CHAN_ITEM, cgs.media.regenSound );
- break;
-
- case EV_GIB_PLAYER:
- DEBUGNAME("EV_GIB_PLAYER");
- trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
- CG_GibPlayer( cent->lerpOrigin );
- break;
-
- case EV_GIB_ALIEN:
- DEBUGNAME("EV_GIB_ALIEN");
- trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
- CG_GenericGib( cent->lerpOrigin );
- break;
-
- case EV_STOPLOOPINGSOUND:
- DEBUGNAME("EV_STOPLOOPINGSOUND");
- trap_S_StopLoopingSound( es->number );
- es->loopSound = 0;
- break;
-
- case EV_DEBUG_LINE:
- DEBUGNAME("EV_DEBUG_LINE");
- CG_Beam( cent );
- break;
-
- case EV_MENU:
- DEBUGNAME("EV_MENU");
- if( es->number == cg.clientNum )
- CG_Menu( es->eventParm );
- break;
-
- case EV_BUILD_DELAY:
- DEBUGNAME("EV_BUILD_DELAY");
- //FIXME: change to "negative" sound
- trap_S_StartLocalSound( cgs.media.hitSound, CHAN_LOCAL_SOUND );
- cg.lastBuildAttempt = cg.time;
- break;
-
- case EV_POISONCLOUD:
- DEBUGNAME("EV_POISONCLOUD");
- cg.firstPoisonedTime = cg.time;
- break;
-
- case EV_KNOCKOVER:
- DEBUGNAME("EV_KNOCKOVER");
- cg.firstKnockedTime = cg.time;
- break;
-
- case EV_GETUP:
- DEBUGNAME("EV_GETUP");
- cg.firstGetUpTime = cg.time;
- break;
-
- case EV_PLAYER_RESPAWN:
- DEBUGNAME("EV_PLAYER_RESPAWN");
- if( es->number == cg.clientNum )
- cg.spawnTime = cg.time;
- break;
-
- default:
- DEBUGNAME("UNKNOWN");
- CG_Error( "Unknown event: %i", event );
- break;
- }
+ case EV_GIB_PLAYER:
+ DEBUGNAME( "EV_GIB_PLAYER" );
+ trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
+ CG_GibPlayer( cent->lerpOrigin );
+ break;
+
+ case EV_GIB_ALIEN:
+ DEBUGNAME( "EV_GIB_ALIEN" );
+ trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
+ CG_GenericGib( cent->lerpOrigin );
+ break;
+
+ case EV_STOPLOOPINGSOUND:
+ DEBUGNAME( "EV_STOPLOOPINGSOUND" );
+ trap_S_StopLoopingSound( es->number );
+ es->loopSound = 0;
+ break;
+
+ case EV_DEBUG_LINE:
+ DEBUGNAME( "EV_DEBUG_LINE" );
+ CG_Beam( cent );
+ break;
+
+ case EV_MENU:
+ DEBUGNAME( "EV_MENU" );
+ if( es->number == cg.clientNum )
+ CG_Menu( es->eventParm );
+ break;
+
+ case EV_BUILD_DELAY:
+ DEBUGNAME( "EV_BUILD_DELAY" );
+ //FIXME: change to "negative" sound
+ trap_S_StartLocalSound( cgs.media.hitSound, CHAN_LOCAL_SOUND );
+ cg.lastBuildAttempt = cg.time;
+ break;
+
+ case EV_POISONCLOUD:
+ DEBUGNAME( "EV_POISONCLOUD" );
+ cg.firstPoisonedTime = cg.time;
+ break;
+
+ case EV_KNOCKOVER:
+ DEBUGNAME( "EV_KNOCKOVER" );
+ cg.firstKnockedTime = cg.time;
+ break;
+ case EV_GETUP:
+ DEBUGNAME( "EV_GETUP" );
+ cg.firstGetUpTime = cg.time;
+ break;
+
+ case EV_PLAYER_RESPAWN:
+ DEBUGNAME( "EV_PLAYER_RESPAWN" );
+ if( es->number == cg.clientNum )
+ cg.spawnTime = cg.time;
+ break;
+
+ default:
+ DEBUGNAME( "UNKNOWN" );
+ CG_Error( "Unknown event: %i", event );
+ break;
+ }
}
@@ -1184,24 +999,27 @@ CG_CheckEvents
==============
*/
-void CG_CheckEvents( centity_t *cent ) {
+void CG_CheckEvents( centity_t *cent )
+{
// check for event-only entities
- if ( cent->currentState.eType > ET_EVENTS ) {
- if ( cent->previousEvent ) {
+ if( cent->currentState.eType > ET_EVENTS )
+ {
+ if( cent->previousEvent )
return; // already fired
- }
+
cent->previousEvent = 1;
cent->currentState.event = cent->currentState.eType - ET_EVENTS;
- } else {
+ }
+ else
+ {
// check for events riding with another entity
- if ( cent->currentState.event == cent->previousEvent ) {
+ if( cent->currentState.event == cent->previousEvent )
return;
- }
+
cent->previousEvent = cent->currentState.event;
- if ( ( cent->currentState.event & ~EV_EVENT_BITS ) == 0 ) {
+ if( ( cent->currentState.event & ~EV_EVENT_BITS ) == 0 )
return;
- }
}
// calculate the position at exactly the frame time