codemp/cgame/cg_event.c File Reference

#include "cg_local.h"
#include "fx_local.h"
#include "../ui/ui_shared.h"
#include "../ui/ui_public.h"
#include "../../ui/menudef.h"
#include "../ghoul2/G2.h"
#include "../namespace_begin.h"
#include "../namespace_end.h"

Go to the source code of this file.

Defines

#define DEBUGNAME(x)   if(cg_debugEvents.integer){CG_Printf(x"\n");}

Enumerations

enum  {
  TAUNT_TAUNT = 0, TAUNT_BOW, TAUNT_MEDITATE, TAUNT_FLOURISH,
  TAUNT_GLOAT
}

Functions

qboolean WP_SaberBladeUseSecondBladeStyle (saberInfo_t *saber, int bladeNum)
qboolean CG_VehicleWeaponImpact (centity_t *cent)
qboolean CG_InFighter (void)
qboolean CG_InATST (void)
const char * CG_PlaceString (int rank)
qboolean CG_ThereIsAMaster (void)
void CG_ToggleBinoculars (centity_t *cent, int forceZoom)
void CG_LocalTimingBar (int startTime, int duration)
void CG_PainEvent (centity_t *cent, int health)
qboolean BG_GetRootSurfNameWithVariant (void *ghoul2, const char *rootSurfName, char *returnSurfName, int returnSize)
void CG_ReattachLimb (centity_t *source)
const char * CG_TeamName (int team)
void CG_PrintCTFMessage (clientInfo_t *ci, const char *teamName, int ctfMessage)
void CG_GetCTFMessageEvent (entityState_t *es)
qboolean BG_InKnockDownOnly (int anim)
void DoFall (centity_t *cent, entityState_t *es, int clientNum)
int CG_InClientBitflags (entityState_t *ent, int client)
void CG_PlayDoorLoopSound (centity_t *cent)
void CG_PlayDoorSound (centity_t *cent, int type)
void CG_TryPlayCustomSound (vec3_t origin, int entityNum, int channel, const char *soundName)
void CG_G2MarkEvent (entityState_t *es)
void CG_CalcVehMuzzle (Vehicle_t *pVeh, centity_t *ent, int muzzleNum)
void CG_VehMuzzleFireFX (centity_t *veh, entityState_t *broadcaster)
const char * CG_GetStringForVoiceSound (const char *s)
void CG_ChatBox_AddString (char *chatStr)
void CG_EntityEvent (centity_t *cent, vec3_t position)
void CG_CheckEvents (centity_t *cent)

Variables

int cg_saberFlashTime
vec3_t cg_saberFlashPos
char * showPowersName []
int cg_siegeDeathTime
int cg_siegeDeathDelay
int cg_vehicleAmmoWarning
int cg_vehicleAmmoWarningTime
int cg_genericTimerBar
int cg_genericTimerDur
vec4_t cg_genericTimerColor
const char * cg_stringEdVoiceChatTable [MAX_CUSTOM_SIEGE_SOUNDS]


Define Documentation

#define DEBUGNAME  )     if(cg_debugEvents.integer){CG_Printf(x"\n");}
 

Definition at line 1315 of file cg_event.c.

Referenced by CG_EntityEvent().


Enumeration Type Documentation

anonymous enum
 

Enumeration values:
TAUNT_TAUNT 
TAUNT_BOW 
TAUNT_MEDITATE 
TAUNT_FLOURISH 
TAUNT_GLOAT 

Definition at line 30 of file cg_event.c.

00031 {
00032         TAUNT_TAUNT = 0,
00033         TAUNT_BOW,
00034         TAUNT_MEDITATE,
00035         TAUNT_FLOURISH,
00036         TAUNT_GLOAT
00037 };


Function Documentation

qboolean BG_GetRootSurfNameWithVariant void *  ghoul2,
const char *  rootSurfName,
char *  returnSurfName,
int  returnSize
 

Definition at line 101 of file bg_g2_utils.c.

00102 {
00103         if ( !ghoul2 || !trap_G2API_GetSurfaceRenderStatus( ghoul2, 0, rootSurfName ) )
00104         {//see if the basic name without variants is on
00105                 Q_strncpyz( returnSurfName, rootSurfName, returnSize );
00106                 return qtrue;
00107         }
00108         else
00109         {//check variants
00110                 int i;
00111                 for ( i = 0; i < MAX_VARIANTS; i++ )
00112                 {
00113                         Com_sprintf( returnSurfName, returnSize, "%s%c", rootSurfName, 'a'+i );
00114                         if ( !trap_G2API_GetSurfaceRenderStatus( ghoul2, 0, returnSurfName ) )
00115                         {
00116                                 return qtrue;
00117                         }
00118                 }
00119         }
00120         Q_strncpyz( returnSurfName, rootSurfName, returnSize );
00121         return qfalse;
00122 }

qboolean BG_InKnockDownOnly int  anim  ) 
 

Definition at line 930 of file bg_panimate.c.

00931 {
00932         switch ( anim )
00933         {
00934         case BOTH_KNOCKDOWN1:
00935         case BOTH_KNOCKDOWN2:
00936         case BOTH_KNOCKDOWN3:
00937         case BOTH_KNOCKDOWN4:
00938         case BOTH_KNOCKDOWN5:
00939                 return qtrue;
00940         }
00941         return qfalse;
00942 }

void CG_CalcVehMuzzle Vehicle_t pVeh,
centity_t ent,
int  muzzleNum
 

Definition at line 1176 of file cg_event.c.

References centity_t, cg, centity_s::ghoul2, centity_s::lerpAngles, centity_s::lerpOrigin, Vehicle_s::m_iMuzzleTag, Vehicle_s::m_iMuzzleTime, Vehicle_s::m_pVehicleInfo, Vehicle_s::m_vMuzzleDir, Vehicle_s::m_vMuzzlePos, centity_s::modelScale, NEGATIVE_Y, NULL, ORIGIN, PITCH, ROLL, cg_t::time, trap_G2API_GetBoltMatrix_NoRecNoRot(), vehicleInfo_t::type, vec3_t, VectorCopy, Vehicle_t, VH_ANIMAL, VH_SPEEDER, and VH_WALKER.

Referenced by CG_CalcVehicleMuzzlePoint().

01177 {
01178         mdxaBone_t boltMatrix;
01179         vec3_t  vehAngles;
01180 
01181         assert(pVeh);
01182 
01183         if (pVeh->m_iMuzzleTime[muzzleNum] == cg.time)
01184         { //already done for this frame, don't need to do it again
01185                 return;
01186         }
01187         //Uh... how about we set this, hunh...?  :)
01188         pVeh->m_iMuzzleTime[muzzleNum] = cg.time;
01189 
01190         VectorCopy( ent->lerpAngles, vehAngles );
01191         if ( pVeh->m_pVehicleInfo )
01192         {
01193                 if (pVeh->m_pVehicleInfo->type == VH_ANIMAL
01194                          ||pVeh->m_pVehicleInfo->type == VH_WALKER)
01195                 {
01196                         vehAngles[PITCH] = vehAngles[ROLL] = 0.0f;
01197                 }
01198                 else if (pVeh->m_pVehicleInfo->type == VH_SPEEDER)
01199                 {
01200                         vehAngles[PITCH] = 0.0f;
01201                 }
01202         }
01203         trap_G2API_GetBoltMatrix_NoRecNoRot(ent->ghoul2, 0, pVeh->m_iMuzzleTag[muzzleNum], &boltMatrix, vehAngles,
01204                 ent->lerpOrigin, cg.time, NULL, ent->modelScale);
01205         BG_GiveMeVectorFromMatrix(&boltMatrix, ORIGIN, pVeh->m_vMuzzlePos[muzzleNum]);
01206         BG_GiveMeVectorFromMatrix(&boltMatrix, NEGATIVE_Y, pVeh->m_vMuzzleDir[muzzleNum]);
01207 }

void CG_ChatBox_AddString char *  chatStr  ) 
 

Definition at line 7540 of file cg_draw.c.

07541 {
07542         chatBoxItem_t *chat = &cg.chatItems[cg.chatItemActive];
07543         float chatLen;
07544 
07545         if (cg_chatBox.integer<=0)
07546         { //don't bother then.
07547                 return;
07548         }
07549 
07550         memset(chat, 0, sizeof(chatBoxItem_t));
07551 
07552         if (strlen(chatStr) > sizeof(chat->string))
07553         { //too long, terminate at proper len.
07554                 chatStr[sizeof(chat->string)-1] = 0;
07555         }
07556 
07557         strcpy(chat->string, chatStr);
07558         chat->time = cg.time + cg_chatBox.integer;
07559 
07560         chat->lines = 1;
07561 
07562         chatLen = CG_Text_Width(chat->string, 1.0f, FONT_SMALL);
07563         if (chatLen > CHATBOX_CUTOFF_LEN)
07564         { //we have to break it into segments...
07565         int i = 0;
07566                 int lastLinePt = 0;
07567                 char s[2];
07568 
07569                 chatLen = 0;
07570                 while (chat->string[i])
07571                 {
07572                         s[0] = chat->string[i];
07573                         s[1] = 0;
07574                         chatLen += CG_Text_Width(s, 0.65f, FONT_SMALL);
07575 
07576                         if (chatLen >= CHATBOX_CUTOFF_LEN)
07577                         {
07578                                 int j = i;
07579                                 while (j > 0 && j > lastLinePt)
07580                                 {
07581                                         if (chat->string[j] == ' ')
07582                                         {
07583                                                 break;
07584                                         }
07585                                         j--;
07586                                 }
07587                                 if (chat->string[j] == ' ')
07588                                 {
07589                                         i = j;
07590                                 }
07591 
07592                 chat->lines++;
07593                                 CG_ChatBox_StrInsert(chat->string, i, "\n");
07594                                 i++;
07595                                 chatLen = 0;
07596                                 lastLinePt = i+1;
07597                         }
07598                         i++;
07599                 }
07600         }
07601 
07602         cg.chatItemActive++;
07603         if (cg.chatItemActive >= MAX_CHATBOX_ITEMS)
07604         {
07605                 cg.chatItemActive = 0;
07606         }
07607 }

void CG_CheckEvents centity_t cent  ) 
 

Definition at line 3526 of file cg_event.c.

References BG_EvaluateTrajectory(), centity_t, cg, CG_EntityEvent(), CG_SetEntitySoundPosition(), centity_s::currentState, EF_PLAYER_EVENT, entityState_s::eFlags, ET_EVENTS, entityState_s::eType, EV_EVENT_BITS, entityState_s::event, centity_s::lerpOrigin, entityState_s::number, entityState_s::otherEntityNum, entityState_s::pos, centity_s::previousEvent, snapshot_t::serverTime, and cg_t::snap.

Referenced by CG_SetInitialSnapshot().

03526                                        {
03527         // check for event-only entities
03528         if ( cent->currentState.eType > ET_EVENTS ) {
03529                 if ( cent->previousEvent ) {
03530                         return; // already fired
03531                 }
03532                 // if this is a player event set the entity number of the client entity number
03533                 if ( cent->currentState.eFlags & EF_PLAYER_EVENT ) {
03534                         cent->currentState.number = cent->currentState.otherEntityNum;
03535                 }
03536 
03537                 cent->previousEvent = 1;
03538 
03539                 cent->currentState.event = cent->currentState.eType - ET_EVENTS;
03540         } else {
03541                 // check for events riding with another entity
03542                 if ( cent->currentState.event == cent->previousEvent ) {
03543                         return;
03544                 }
03545                 cent->previousEvent = cent->currentState.event;
03546                 if ( ( cent->currentState.event & ~EV_EVENT_BITS ) == 0 ) {
03547                         return;
03548                 }
03549         }
03550 
03551         // calculate the position at exactly the frame time
03552         BG_EvaluateTrajectory( &cent->currentState.pos, cg.snap->serverTime, cent->lerpOrigin );
03553         CG_SetEntitySoundPosition( cent );
03554 
03555         CG_EntityEvent( cent, cent->lerpOrigin );
03556 }

void CG_EntityEvent centity_t cent,
vec3_t  position
 

Definition at line 1317 of file cg_event.c.

References cgEffects_t::acidSplash, playerState_s::ammo, entityState_s::angles, entityState_s::angles2, AngleVectors(), entityState_s::apos, bg_itemlist, bg_numItems, BIGCHAR_WIDTH, saberInfo_t::block2Sound, saberInfo_t::blockEffect, saberInfo_t::blockEffect2, saberInfo_t::blockSound, cgMedia_t::blueFlagReturnedSound, cgMedia_t::blueLeadsSound, cgMedia_t::blueScoredSound, cgMedia_t::blueTookFlagSound, cgMedia_t::blueTookYsalSound, cgMedia_t::blueYsalReturnedSound, centity_s::bodyFadeTime, centity_s::bodyHeight, centity_s::bolt1, entityState_s::bolt1, centity_s::bolt2, entityState_s::bolt2, centity_s::bolt3, centity_s::bolt4, centity_s::boltInfo, BONE_ANIM_BLEND, BONE_ANIM_OVERRIDE_FREEZE, ByteToDir(), centity_t, cg, CG_AddBufferedSound(), CG_Beam(), CG_CenterPrint(), CG_ChatBox_AddString(), CG_Chunks(), CG_ConfigString(), CG_CreateNPCClient(), CG_CustomSound(), cg_debugEvents, cg_entities, CG_Error(), CG_FireWeapon(), cg_footsteps, CG_G2MarkEvent(), CG_GetClientWeaponMuzzleBoltPoint(), CG_GetCTFMessageEvent(), CG_GetStringEdString(), CG_GetStringForVoiceSound(), cg_ghoul2Marks, CG_GlassShatter(), CG_InATST(), CG_InClientBitflags(), CG_InFighter(), cg_jumpSounds, CG_LocalTimingBar(), CG_MiscModelExplosion(), CG_MissileHitPlayer(), CG_MissileHitWall(), cg_nopredict, cg_oldPainSounds, CG_OutOfAmmoChange(), CG_PainEvent(), CG_PlayDoorLoopSound(), CG_PlayDoorSound(), CG_PlayerShieldHit(), CG_Printf(), CG_RegisterWeapon(), CG_S_AddRealLoopingSound(), CG_S_StopLoopingSound(), cg_saberFlashPos, cg_saberFlashTime, CG_ScorePlum(), cg_siegeDeathTime, CG_SiegeObjectiveCompleted(), CG_SiegeRoundOver(), CG_StartMusic(), cg_synchronousClients, CG_TestLine(), CG_Trace(), CG_TryPlayCustomSound(), cg_vehicleAmmoWarning, cg_vehicleAmmoWarningTime, CG_VehicleWeaponImpact(), CG_VehMuzzleFireFX(), cg_weapons, CGCam_SetMusicMult(), CGCam_Shake(), cgs, CHAN_ANNOUNCER, CHAN_AUTO, CHAN_BODY, CHAN_LOCAL, CHAN_MENU1, CHAN_VOICE, CHAN_WEAPON, CLASS_VEHICLE, client, cgs_t::clientinfo, entityState_s::clientNum, playerState_s::clientNum, Com_Printf(), CONTENTS_SOLID, CONTENTS_TERRAIN, cgMedia_t::countFightSound, CS_AMBIENT_SET, CS_EFFECTS, CS_SOUNDS, centity_s::currentState, DEBUGNAME, DEFAULT_MAXS_2, DEFAULT_MINS_2, cg_t::demoPlayback, cgMedia_t::disruptorZoomLoop, DoFall(), cgMedia_t::drainSound, cgMedia_t::dramaticFailure, EF_ALT_FIRING, EF_SOUNDTRACKER, EFFECT_ACID_SPLASH, EFFECT_EXPLOSION, EFFECT_EXPLOSION_DEMP2ALT, EFFECT_EXPLOSION_DETPACK, EFFECT_EXPLOSION_FLECHETTE, EFFECT_EXPLOSION_PAS, EFFECT_EXPLOSION_TRIPMINE, EFFECT_EXPLOSION_TURRET, EFFECT_LANDING_DIRT, EFFECT_LANDING_GRAVEL, EFFECT_LANDING_MUD, EFFECT_LANDING_SAND, EFFECT_LANDING_SNOW, EFFECT_LAVA_SPLASH, EFFECT_SMOKE, EFFECT_SPARK_EXPLOSION, EFFECT_SPARKS, EFFECT_STUNHIT, EFFECT_WATER_SPLASH, cgs_t::effects, entityState_s::eFlags, entityState_s::emplacedOwner, trace_t::endpos, trace_t::entityNum, ENTITYNUM_NONE, entityState_t, ET_BODY, ET_NPC, entityState_s::eType, EV_ALT_FIRE, EV_ANGER1, EV_ANGER2, EV_ANGER3, EV_BECOME_JEDIMASTER, EV_BMODEL_SOUND, EV_BODYFADE, EV_CHANGE_WEAPON, EV_CHASE1, EV_CHASE2, EV_CHASE3, EV_CHOKE1, EV_CHOKE2, EV_CHOKE3, EV_CLIENTJOIN, EV_COMBAT1, EV_COMBAT2, EV_COMBAT3, EV_CONC_ALT_IMPACT, EV_CONFUSE1, EV_CONFUSE2, EV_CONFUSE3, EV_COVER1, EV_COVER2, EV_COVER3, EV_COVER4, EV_COVER5, EV_CTFMESSAGE, EV_DEATH1, EV_DEATH2, EV_DEATH3, EV_DEBRIS, EV_DEBUG_LINE, EV_DEFLECT1, EV_DEFLECT2, EV_DEFLECT3, EV_DESTROY_GHOUL2_INSTANCE, EV_DESTROY_WEAPON_MODEL, EV_DETECTED1, EV_DETECTED2, EV_DETECTED3, EV_DETECTED4, EV_DETECTED5, EV_DISRUPTOR_HIT, EV_DISRUPTOR_MAIN_SHOT, EV_DISRUPTOR_SNIPER_MISS, EV_DISRUPTOR_SNIPER_SHOT, EV_DISRUPTOR_ZOOMSOUND, EV_ENTITY_SOUND, EV_ESCAPING1, EV_ESCAPING2, EV_ESCAPING3, EV_EVENT_BITS, EV_FALL, EV_FFTURN, EV_FFWARN, EV_FIRE_WEAPON, EV_FOOTSPLASH, EV_FOOTSTEP, EV_FOOTSTEP_METAL, EV_FOOTWADE, EV_FORCE_DRAINED, EV_GENERAL_SOUND, EV_GHOUL2_MARK, EV_GIB_PLAYER, EV_GIVE_NEW_RANK, EV_GIVEUP1, EV_GIVEUP2, EV_GIVEUP3, EV_GIVEUP4, EV_GLASS_SHATTER, EV_GLOAT1, EV_GLOAT2, EV_GLOAT3, EV_GLOBAL_DUEL, EV_GLOBAL_ITEM_PICKUP, EV_GLOBAL_SOUND, EV_GLOBAL_TEAM_SOUND, EV_GRENADE_BOUNCE, EV_ITEM_PICKUP, EV_ITEM_POP, EV_ITEM_RESPAWN, EV_ITEMUSEFAIL, EV_JCHASE1, EV_JCHASE2, EV_JCHASE3, EV_JDETECTED1, EV_JDETECTED2, EV_JDETECTED3, EV_JLOST1, EV_JLOST2, EV_JLOST3, EV_JUMP, EV_JUMP_PAD, EV_LOCALTIMER, EV_LOOK1, EV_LOOK2, EV_LOST1, EV_MISC_MODEL_EXP, EV_MISSILE_HIT, EV_MISSILE_MISS, EV_MISSILE_MISS_METAL, EV_MISSILE_STICK, EV_MUTE_SOUND, EV_NOAMMO, EV_OBITUARY, EV_OUTFLANK1, EV_OUTFLANK2, EV_PAIN, EV_PLAY_EFFECT, EV_PLAY_EFFECT_ID, EV_PLAY_PORTAL_EFFECT_ID, EV_PLAY_ROFF, EV_PLAYDOORLOOPSOUND, EV_PLAYDOORSOUND, EV_PLAYER_TELEPORT_IN, EV_PLAYER_TELEPORT_OUT, EV_POWERUP_BATTLESUIT, EV_POWERUP_QUAD, EV_PREDEFSOUND, EV_PRIVATE_DUEL, EV_PUSHED1, EV_PUSHED2, EV_PUSHED3, EV_PUSHFAIL, EV_ROLL, EV_SABER_ATTACK, EV_SABER_BLOCK, EV_SABER_CLASHFLARE, EV_SABER_HIT, EV_SABER_UNHOLSTER, EV_SCOREPLUM, EV_SCREENSHAKE, EV_SET_FORCE_DISABLE, EV_SET_FREE_SABER, EV_SHIELD_HIT, EV_SIEGE_OBJECTIVECOMPLETE, EV_SIEGE_ROUNDOVER, EV_SIEGESPEC, EV_SIGHT1, EV_SIGHT2, EV_SIGHT3, EV_SOUND1, EV_SOUND2, EV_SOUND3, EV_STARTLOOPINGSOUND, EV_STEP_12, EV_STEP_16, EV_STEP_4, EV_STEP_8, EV_STOPLOOPINGSOUND, EV_SUSPICIOUS1, EV_SUSPICIOUS2, EV_SUSPICIOUS3, EV_SUSPICIOUS4, EV_SUSPICIOUS5, EV_SWIM, EV_TAUNT, EV_TAUNT1, EV_TAUNT2, EV_TAUNT3, EV_TEAM_POWER, EV_TESTLINE, EV_USE_ITEM0, EV_USE_ITEM1, EV_USE_ITEM10, EV_USE_ITEM11, EV_USE_ITEM12, EV_USE_ITEM13, EV_USE_ITEM14, EV_USE_ITEM2, EV_USE_ITEM3, EV_USE_ITEM4, EV_USE_ITEM5, EV_USE_ITEM6, EV_USE_ITEM7, EV_USE_ITEM8, EV_USE_ITEM9, EV_VEH_FIRE, EV_VICTORY1, EV_VICTORY2, EV_VICTORY3, EV_VOICECMD_SOUND, EV_WATER_CLEAR, EV_WATER_LEAVE, EV_WATER_TOUCH, EV_WATER_UNDER, EV_WEAPON_CHARGE, EV_WEAPON_CHARGE_ALT, entityState_s::event, entityState_s::eventParm, playerState_s::fallingToDeath, playerState_s::fd, FOOTSTEP_DIRTWALK, FOOTSTEP_GRASSWALK, FOOTSTEP_GRAVELWALK, FOOTSTEP_METALWALK, FOOTSTEP_MUDWALK, FOOTSTEP_PIPEWALK, FOOTSTEP_RUGWALK, FOOTSTEP_SANDWALK, FOOTSTEP_SNOWWALK, FOOTSTEP_SPLASH, FOOTSTEP_STONEWALK, footstep_t, FOOTSTEP_WOODWALK, cgMedia_t::footsteps, cg_t::forceHUDTotalFlashTime, forcedata_s::forcePowersActive, forcedata_s::forcePowerSelected, cg_t::forceSelect, cg_t::forceSelectTime, FP_LEVITATION, FP_SABER_DEFENSE, FP_SABER_OFFENSE, FP_SABERTHROW, trace_t::fraction, centity_s::frame_hold_refreshed, centity_s::frame_hold_time, centity_s::frame_minus1_refreshed, centity_s::frame_minus2_refreshed, FX_ConcAltShot(), FX_DEMP2_AltDetonate(), FX_DisruptorAltMiss(), FX_DisruptorAltShot(), FX_DisruptorHitPlayer(), FX_DisruptorHitWall(), FX_DisruptorMainShot(), cgs_t::gameEffects, cgs_t::gameModels, cgs_t::gameSounds, cgs_t::gametype, entityState_s::generic1, entityState_s::genericenemyindex, centity_s::ghoul2, clientInfo_t::ghoul2Model, centity_s::ghoul2weapon, GIANTCHAR_WIDTH, gitem_t, gitem_s::giType, entityState_s::groundEntityNum, GT_CTY, GT_DUEL, GT_POWERDUEL, GTS_BLUE_CAPTURE, GTS_BLUE_RETURN, GTS_BLUE_TAKEN, GTS_BLUETEAM_SCORED, GTS_BLUETEAM_TOOK_LEAD, GTS_RED_CAPTURE, GTS_RED_RETURN, GTS_RED_TAKEN, GTS_REDTEAM_SCORED, GTS_REDTEAM_TOOK_LEAD, GTS_TEAMS_ARE_TIED, cgMedia_t::happyMusic, saberInfo_t::hit2Sound, saberInfo_t::hitOtherEffect, saberInfo_t::hitOtherEffect2, saberInfo_t::hitPersonEffect, saberInfo_t::hitPersonEffect2, saberInfo_t::hitSound, cgMedia_t::holocronPickup, IMPACTSOUND_DEFAULT, IMPACTSOUND_METAL, vmCvar_t::integer, IT_TEAM, KEYCATCH_UI, cgEffects_t::landingDirt, cgEffects_t::landingGravel, cgEffects_t::landingMud, cgEffects_t::landingSand, cgEffects_t::landingSnow, cg_t::lastFPFlashPoint, cgEffects_t::lavaSplash, entityState_s::legsAnim, centity_s::lerpOrigin, entityState_s::loopSound, centity_s::m_pVehicle, Vehicle_s::m_pVehicleInfo, cgEffects_t::mAltDetonate, MASK_SOLID, MATERIAL_CANVAS, MATERIAL_CARPET, MATERIAL_DIRT, MATERIAL_FABRIC, MATERIAL_GRAVEL, MATERIAL_HOLLOWMETAL, MATERIAL_HOLLOWWOOD, MATERIAL_LONGGRASS, MATERIAL_MUD, MATERIAL_PLASTIC, MATERIAL_RUBBER, MATERIAL_SAND, MATERIAL_SHORTGRASS, MATERIAL_SNOW, MATERIAL_SOLIDMETAL, MATERIAL_SOLIDWOOD, mdxaBone_t::matrix, MAX_CLIENTS, MAX_STEP_CHANGE, MAX_WEAPONS, cgEffects_t::mBlasterDeflect, cgEffects_t::mConcussionAltRing, cgEffects_t::mDetpackExplosion, cgs_t::media, cgEffects_t::mEmplacedDeadSmoke, cgEffects_t::mEmplacedExplode, cgEffects_t::mEmplacedMuzzleFlash, memset(), cgEffects_t::mFlechetteAltBlow, cg_t::mInRMG, centity_s::miscTime, cgEffects_t::mJediSpawn, entityState_s::modelindex, centity_s::modelScale, cgEffects_t::mSaberBlock, cgEffects_t::mSaberBloodSparks, cgEffects_t::mSaberBloodSparksMid, cgEffects_t::mSaberBloodSparksSmall, cgEffects_t::mSaberCut, cgEffects_t::mSparkExplosion, cgEffects_t::mSparksExplodeNoSound, cgEffects_t::mSpawn, cgEffects_t::mStunBatonFleshImpact, cgEffects_t::mTripmineExplosion, cgEffects_t::mTurretExplode, clientInfo_t::name, cgMedia_t::noAmmoSound, entityState_s::NPC_class, centity_s::npcClient, NULL, entityState_s::number, centity_s::numLoopingSounds, entityState_s::origin, entityState_s::origin2, entityState_s::otherEntityNum, entityState_s::otherEntityNum2, entityState_s::owner, PDSOUND_ABSORB, PDSOUND_ABSORBHIT, PDSOUND_FORCEGRIP, PDSOUND_FORCEJUMP, PDSOUND_PROTECT, PDSOUND_PROTECTHIT, PERS_TEAM, playerState_s::persistant, gitem_s::pickup_sound, playerMaxs, playerMins, playerState_s::pm_flags, PMF_FOLLOW, entityState_s::pos, cg_t::powerupActive, cg_t::powerupTime, cg_t::predictedPlayerState, snapshot_t::ps, PW_BATTLESUIT, PW_QUAD, Q_irand(), qboolean, qfalse, qhandle_t, qtrue, rand(), cgMedia_t::redFlagReturnedSound, cgMedia_t::redLeadsSound, cgMedia_t::redScoredSound, cgMedia_t::redTookFlagSound, cgMedia_t::redTookYsalSound, cgMedia_t::redYsalReturnedSound, cg_t::refdef, weaponInfo_s::registered, cg_t::renderingThirdPerson, cgMedia_t::respawnSound, ROLL, cgMedia_t::rollSound, gclient_s::saber, clientInfo_t::saber, entityState_s::saberEntityNum, saberInfo_t::saberFlags2, SCREEN_HEIGHT, SEEKER_ALREADYDEPLOYED, weaponInfo_s::selectSound, cgMedia_t::selectSound, SENTRY_ALREADYPLACED, SENTRY_NOROOM, centity_s::serverSaberFleshImpact, centity_s::serverSaberHitIndex, centity_s::serverSaberHitTime, SFL2_NO_CLASH_FLARE, sfxHandle_t, SHIELD_NOROOM, entityState_s::shouldtarget, showPowersName, cg_t::snap, saberInfo_t::soundOn, entityState_s::soundSetIndex, entityState_s::speed, STAT_WEAPONS, playerState_s::stats, STEP_TIME, cg_t::stepChange, cg_t::stepTime, strcpy(), saberInfo_t::swingSound, TAUNT_BOW, TAUNT_FLOURISH, TAUNT_GLOAT, TAUNT_MEDITATE, TAUNT_TAUNT, clientInfo_t::team, cgMedia_t::teamHealSound, centity_s::teamPowerEffectTime, centity_s::teamPowerType, cgMedia_t::teamRegenSound, cgMedia_t::teamsTiedSound, cgMedia_t::teleInSound, cgMedia_t::teleOutSound, cg_t::time, entityState_s::time, entityState_s::time2, TRACK_CHANNEL_2, TRACK_CHANNEL_3, TRACK_CHANNEL_5, trap_AS_GetBModelSound(), trap_Cvar_Set(), trap_FX_PlayEffectID(), trap_FX_PlayPortalEffectID(), trap_FX_RegisterEffect(), trap_G2_HaveWeGhoul2Models(), trap_G2API_AddBolt(), trap_G2API_CleanGhoul2Models(), trap_G2API_GetBoltMatrix(), trap_G2API_HasGhoul2ModelOnIndex(), trap_G2API_RemoveGhoul2Model(), trap_G2API_SetBoneAnim(), trap_G2API_SetSurfaceOnOff(), trap_Key_GetCatcher(), trap_OpenUIMenu(), trap_ROFF_Play(), trap_S_MuteSound(), trap_S_RegisterSound(), trap_S_StartBackgroundTrack(), trap_S_StartLocalSound(), trap_S_StartSound(), trajectory_t::trBase, centity_s::trickAlpha, centity_s::trickAlphaTime, entityState_s::trickedentindex, entityState_s::trickedentindex2, trajectory_t::trTime, UIMENU_PLAYERCONFIG, va(), centity_s::vChatTime, vec3_origin, vec3_t, VectorClear, VectorCopy, VectorMA, VectorNormalize(), VectorSubtract, refdef_t::vieworg, cgEffects_t::waterSplash, cgMedia_t::watrInSound, cgMedia_t::watrOutSound, cgMedia_t::watrUnSound, centity_s::weapon, playerState_s::weapon, vehicleInfo_t::weapon, entityState_s::weapon, weaponData, weaponInfo_t, WP_CONCUSSION, WP_DET_PACK, WP_DISRUPTOR, WP_EMPLACED_GUN, WP_NONE, WP_NUM_WEAPONS, WP_SABER, WP_SaberBladeUseSecondBladeStyle(), WP_TURRET, and playerState_s::zoomMode.

Referenced by CG_CheckChangedPredictableEvents(), CG_CheckEvents(), and CG_CheckPlayerstateEvents().

01317                                                         {
01318         entityState_t   *es;
01319         int                             event;
01320         vec3_t                  dir;
01321         const char              *s;
01322         int                             clientNum;
01323         clientInfo_t    *ci;
01324         int                             eID = 0;
01325         int                             isnd = 0;
01326         centity_t               *cl_ent;
01327 
01328         es = &cent->currentState;
01329         event = es->event & ~EV_EVENT_BITS;
01330 
01331         if ( cg_debugEvents.integer ) {
01332                 CG_Printf( "ent:%3i  event:%3i ", es->number, event );
01333         }
01334 
01335         if ( !event ) {
01336                 DEBUGNAME("ZEROEVENT");
01337                 return;
01338         }
01339 
01340         clientNum = es->clientNum;
01341         if ( clientNum < 0 || clientNum >= MAX_CLIENTS ) {
01342                 clientNum = 0;
01343         }
01344 
01345         if (es->eType == ET_NPC)
01346         {
01347                 clientNum = es->number;
01348 
01349                 if (!cent->npcClient)
01350                 {
01351                         CG_CreateNPCClient(&cent->npcClient); //allocate memory for it
01352 
01353                         if (!cent->npcClient)
01354                         {
01355                                 assert(0);
01356                                 return;
01357                         }
01358 
01359                         memset(cent->npcClient, 0, sizeof(clientInfo_t));
01360                         cent->npcClient->ghoul2Model = NULL;
01361                 }
01362 
01363                 ci = cent->npcClient;
01364 
01365                 assert(ci);
01366         }
01367         else
01368         {
01369                 ci = &cgs.clientinfo[ clientNum ];
01370         }
01371 
01372         switch ( event ) {
01373         //
01374         // movement generated events
01375         //
01376         case EV_CLIENTJOIN:
01377                 DEBUGNAME("EV_CLIENTJOIN");
01378 
01379                 //Slight hack to force a local reinit of client entity on join.
01380                 cl_ent = &cg_entities[es->eventParm];
01381 
01382                 if (cl_ent)
01383                 {
01384                         //cl_ent->torsoBolt = 0;
01385                         cl_ent->bolt1 = 0;
01386                         cl_ent->bolt2 = 0;
01387                         cl_ent->bolt3 = 0;
01388                         cl_ent->bolt4 = 0;
01389                         cl_ent->bodyHeight = 0;//SABER_LENGTH_MAX;
01390                         //cl_ent->saberExtendTime = 0;
01391                         cl_ent->boltInfo = 0;
01392                         cl_ent->frame_minus1_refreshed = 0;
01393                         cl_ent->frame_minus2_refreshed = 0;
01394                         cl_ent->frame_hold_time = 0;
01395                         cl_ent->frame_hold_refreshed = 0;
01396                         cl_ent->trickAlpha = 0;
01397                         cl_ent->trickAlphaTime = 0;
01398                         cl_ent->ghoul2weapon = NULL;
01399                         cl_ent->weapon = WP_NONE;
01400                         cl_ent->teamPowerEffectTime = 0;
01401                         cl_ent->teamPowerType = 0;
01402                         cl_ent->numLoopingSounds = 0;
01403                         //cl_ent->localAnimIndex = 0;
01404                 }
01405                 break;
01406 
01407         case EV_FOOTSTEP:
01408                 DEBUGNAME("EV_FOOTSTEP");
01409                 if (cg_footsteps.integer) {
01410                         footstep_t      soundType;
01411                         switch( es->eventParm )
01412                         {
01413                         case MATERIAL_MUD:
01414                                 soundType = FOOTSTEP_MUDWALK;
01415                                 break;
01416                         case MATERIAL_DIRT:                     
01417                                 soundType = FOOTSTEP_DIRTWALK;
01418                                 break;
01419                         case MATERIAL_SAND:                     
01420                                 soundType = FOOTSTEP_SANDWALK;
01421                                 break;
01422                         case MATERIAL_SNOW:                     
01423                                 soundType = FOOTSTEP_SNOWWALK;
01424                                 break;
01425                         case MATERIAL_SHORTGRASS:               
01426                         case MATERIAL_LONGGRASS:                
01427                                 soundType = FOOTSTEP_GRASSWALK;
01428                                 break;
01429                         case MATERIAL_SOLIDMETAL:               
01430                                 soundType = FOOTSTEP_METALWALK;
01431                                 break;
01432                         case MATERIAL_HOLLOWMETAL:      
01433                                 soundType = FOOTSTEP_PIPEWALK;
01434                                 break;
01435                         case MATERIAL_GRAVEL:
01436                                 soundType = FOOTSTEP_GRAVELWALK;
01437                                 break;
01438                         case MATERIAL_CARPET:
01439                         case MATERIAL_FABRIC:
01440                         case MATERIAL_CANVAS:
01441                         case MATERIAL_RUBBER:
01442                         case MATERIAL_PLASTIC:
01443                                 soundType = FOOTSTEP_RUGWALK;
01444                                 break;
01445                         case MATERIAL_SOLIDWOOD:
01446                         case MATERIAL_HOLLOWWOOD:
01447                                 soundType = FOOTSTEP_WOODWALK;
01448                                 break;
01449 
01450                         default:
01451                                 soundType = FOOTSTEP_STONEWALK;
01452                                 break;
01453                         }
01454 
01455                         trap_S_StartSound (NULL, es->number, CHAN_BODY, cgs.media.footsteps[ soundType ][rand()&3] );
01456                 }
01457                 break;
01458         case EV_FOOTSTEP_METAL:
01459                 DEBUGNAME("EV_FOOTSTEP_METAL");
01460                 if (cg_footsteps.integer) {
01461                         trap_S_StartSound (NULL, es->number, CHAN_BODY, 
01462                                 cgs.media.footsteps[ FOOTSTEP_METALWALK ][rand()&3] );
01463                 }
01464                 break;
01465         case EV_FOOTSPLASH:
01466                 DEBUGNAME("EV_FOOTSPLASH");
01467                 if (cg_footsteps.integer) {
01468                         trap_S_StartSound (NULL, es->number, CHAN_BODY, 
01469                                 cgs.media.footsteps[ FOOTSTEP_SPLASH ][rand()&3] );
01470                 }
01471                 break;
01472         case EV_FOOTWADE:
01473                 DEBUGNAME("EV_FOOTWADE");
01474                 if (cg_footsteps.integer) {
01475                         trap_S_StartSound (NULL, es->number, CHAN_BODY, 
01476                                 cgs.media.footsteps[ FOOTSTEP_SPLASH ][rand()&3] );
01477                 }
01478                 break;
01479         case EV_SWIM:
01480                 DEBUGNAME("EV_SWIM");
01481                 if (cg_footsteps.integer) {
01482                         trap_S_StartSound (NULL, es->number, CHAN_BODY, 
01483                                 cgs.media.footsteps[ FOOTSTEP_SPLASH ][rand()&3] );
01484                 }
01485                 break;
01486 
01487 
01488         case EV_FALL:
01489                 DEBUGNAME("EV_FALL");
01490                 if (es->number == cg.snap->ps.clientNum && cg.snap->ps.fallingToDeath)
01491                 {
01492                         break;
01493                 }
01494                 DoFall(cent, es, clientNum);
01495                 break;
01496         case EV_STEP_4:
01497         case EV_STEP_8:
01498         case EV_STEP_12:
01499         case EV_STEP_16:                // smooth out step up transitions
01500                 DEBUGNAME("EV_STEP");
01501         {
01502                 float   oldStep;
01503                 int             delta;
01504                 int             step;
01505 
01506                 if ( clientNum != cg.predictedPlayerState.clientNum ) {
01507                         break;
01508                 }
01509                 // if we are interpolating, we don't need to smooth steps
01510                 if ( cg.demoPlayback || (cg.snap->ps.pm_flags & PMF_FOLLOW) ||
01511                         cg_nopredict.integer || cg_synchronousClients.integer ) {
01512                         break;
01513                 }
01514                 // check for stepping up before a previous step is completed
01515                 delta = cg.time - cg.stepTime;
01516                 if (delta < STEP_TIME) {
01517                         oldStep = cg.stepChange * (STEP_TIME - delta) / STEP_TIME;
01518                 } else {
01519                         oldStep = 0;
01520                 }
01521 
01522                 // add this amount
01523                 step = 4 * (event - EV_STEP_4 + 1 );
01524                 cg.stepChange = oldStep + step;
01525                 if ( cg.stepChange > MAX_STEP_CHANGE ) {
01526                         cg.stepChange = MAX_STEP_CHANGE;
01527                 }
01528                 cg.stepTime = cg.time;
01529                 break;
01530         }
01531 
01532         case EV_JUMP_PAD:
01533                 DEBUGNAME("EV_JUMP_PAD");
01534                 break;
01535 
01536         case EV_GHOUL2_MARK:
01537                 DEBUGNAME("EV_GHOUL2_MARK");
01538 
01539                 if (cg_ghoul2Marks.integer)
01540                 { //Can we put a burn mark on him?
01541                         CG_G2MarkEvent(es);
01542                 }
01543                 break;
01544 
01545         case EV_GLOBAL_DUEL:
01546                 DEBUGNAME("EV_GLOBAL_DUEL");
01547                 //used for beginning of power duels
01548                 //if (cg.predictedPlayerState.persistant[PERS_TEAM] != TEAM_SPECTATOR)
01549                 if (es->otherEntityNum == cg.predictedPlayerState.clientNum ||
01550                         es->otherEntityNum2 == cg.predictedPlayerState.clientNum ||
01551                         es->groundEntityNum == cg.predictedPlayerState.clientNum)
01552                 {
01553                         CG_CenterPrint( CG_GetStringEdString("MP_SVGAME", "BEGIN_DUEL"), 120, GIANTCHAR_WIDTH*2 );                              
01554                         trap_S_StartLocalSound( cgs.media.countFightSound, CHAN_ANNOUNCER );
01555                 }
01556                 break;
01557 
01558         case EV_PRIVATE_DUEL:
01559                 DEBUGNAME("EV_PRIVATE_DUEL");
01560 
01561                 if (cg.snap->ps.clientNum != es->number)
01562                 {
01563                         break;
01564                 }
01565 
01566                 if (es->eventParm)
01567                 { //starting the duel
01568                         if (es->eventParm == 2)
01569                         {
01570                                 CG_CenterPrint( CG_GetStringEdString("MP_SVGAME", "BEGIN_DUEL"), 120, GIANTCHAR_WIDTH*2 );                              
01571                                 trap_S_StartLocalSound( cgs.media.countFightSound, CHAN_ANNOUNCER );
01572                         }
01573                         else
01574                         {
01575                                 trap_S_StartBackgroundTrack( "music/mp/duel.mp3", "music/mp/duel.mp3", qfalse );
01576                         }
01577                 }
01578                 else
01579                 { //ending the duel
01580                         CG_StartMusic(qtrue);
01581                 }
01582                 break;
01583 
01584         case EV_JUMP:
01585                 DEBUGNAME("EV_JUMP");
01586                 if (cg_jumpSounds.integer)
01587                 {
01588                         trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
01589                 }
01590                 break;
01591         case EV_ROLL:
01592                 DEBUGNAME("EV_ROLL");
01593                 if (es->number == cg.snap->ps.clientNum && cg.snap->ps.fallingToDeath)
01594                 {
01595                         break;
01596                 }
01597                 if (es->eventParm)
01598                 { //fall-roll-in-one event
01599                         DoFall(cent, es, clientNum);
01600                 }
01601 
01602                 trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
01603                 trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.rollSound  );
01604 
01605                 //FIXME: need some sort of body impact on ground sound and maybe kick up some dust?
01606                 break;
01607 
01608         case EV_TAUNT:
01609                 DEBUGNAME("EV_TAUNT");
01610                 {
01611                         int soundIndex = 0;
01612                         if ( cgs.gametype != GT_DUEL
01613                                 && cgs.gametype != GT_POWERDUEL
01614                                 && es->eventParm == TAUNT_TAUNT )
01615                         {//normal taunt
01616                                 soundIndex = CG_CustomSound( es->number, "*taunt.wav" );
01617                         }
01618                         else
01619                         {
01620                                 switch ( es->eventParm )
01621                                 {
01622                                 case TAUNT_TAUNT:
01623                                 default:
01624                                         if ( Q_irand( 0, 1 ) )
01625                                         {
01626                                                 soundIndex = CG_CustomSound( es->number, va("*anger%d.wav", Q_irand(1,3)) );
01627                                         }
01628                                         else
01629                                         {
01630                                                 soundIndex = CG_CustomSound( es->number, va("*taunt%d.wav", Q_irand(1,3)) );
01631                                                 if ( !soundIndex )
01632                                                 {
01633                                                         soundIndex = CG_CustomSound( es->number, va("*anger%d.wav", Q_irand(1,3)) );
01634                                                 }
01635                                         }
01636                                         break;
01637                                 case TAUNT_BOW:
01638                                         //soundIndex = CG_CustomSound( es->number, va("*respect%d.wav", Q_irand(1,3)) );
01639                                         break;
01640                                 case TAUNT_MEDITATE:
01641                                         //soundIndex = CG_CustomSound( es->number, va("*meditate%d.wav", Q_irand(1,3)) );
01642                                         break;
01643                                 case TAUNT_FLOURISH:
01644                                         if ( Q_irand( 0, 1 ) )
01645                                         {
01646                                                 soundIndex = CG_CustomSound( es->number, va("*deflect%d.wav", Q_irand(1,3)) );
01647                                                 if ( !soundIndex )
01648                                                 {
01649                                                         soundIndex = CG_CustomSound( es->number, va("*gloat%d.wav", Q_irand(1,3)) );
01650                                                         if ( !soundIndex )
01651                                                         {
01652                                                                 soundIndex = CG_CustomSound( es->number, va("*anger%d.wav", Q_irand(1,3)) );
01653                                                         }
01654                                                 }
01655                                         }
01656                                         else
01657                                         {
01658                                                 soundIndex = CG_CustomSound( es->number, va("*gloat%d.wav", Q_irand(1,3)) );
01659                                                 if ( !soundIndex )
01660                                                 {
01661                                                         soundIndex = CG_CustomSound( es->number, va("*deflect%d.wav", Q_irand(1,3)) );
01662                                                         if ( !soundIndex )
01663                                                         {
01664                                                                 soundIndex = CG_CustomSound( es->number, va("*anger%d.wav", Q_irand(1,3)) );
01665                                                         }
01666                                                 }
01667                                         }
01668                                         break;
01669                                 case TAUNT_GLOAT:
01670                                         soundIndex = CG_CustomSound( es->number, va("*victory%d.wav", Q_irand(1,3)) );
01671                                         break;
01672                                 }
01673                         }
01674                         if ( !soundIndex )
01675                         {
01676                                 soundIndex = CG_CustomSound( es->number, "*taunt.wav" );
01677                         }
01678                         if ( soundIndex )
01679                         {
01680                                 trap_S_StartSound (NULL, es->number, CHAN_VOICE, soundIndex );
01681                         }
01682                 }
01683                 break;
01684 
01685                 //Begin NPC sounds
01686         case EV_ANGER1: //Say when acquire