void CXenTree :: Attack( void ) { if ( GetActivity() == ACT_IDLE ) { SetActivity( ACT_MELEE_ATTACK1 ); pev->framerate = RANDOM_FLOAT( 1.0, 1.4 ); EMIT_SOUND_ARRAY_DYN( CHAN_WEAPON, pAttackMissSounds ); } }
void CBigMomma::DeathNotice( entvars_t *pevChild ) { if ( m_crabCount > 0 ) // Some babies may cross a transition, but we reset the count then m_crabCount--; if ( IsAlive() ) { // Make the "my baby's dead" noise! EMIT_SOUND_ARRAY_DYN( CHAN_WEAPON, pChildDieSounds ); } }
void CHellKnight :: CheckContinueCharge( void ) { if (gpGlobals->time > m_flAttackFinished) { AttackFinished (3); MonsterRun (); return; // done charging } EMIT_SOUND_ARRAY_DYN( CHAN_WEAPON, pAttackSounds, ATTN_NORM ); }
void CSoldier :: MonsterPain( CBaseEntity *pAttacker, float flDamage ) { if( pev->pain_finished > gpGlobals->time ) return; EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pPainSounds, ATTN_NORM ); m_iAIState = STATE_PAIN; SetActivity( ACT_BIG_FLINCH ); m_flMonsterSpeed = 0; pev->pain_finished = gpGlobals->time + (SequenceDuration() - 0.3f); }
void CBigMomma::TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) { if(ptr->iHitgroup != 1) { // didn't hit the sack? if(pev->dmgtime != gpGlobals->time || (RANDOM_LONG(0, 10) < 1)) { UTIL_Ricochet(ptr->vecEndPos, RANDOM_FLOAT(1, 2)); pev->dmgtime = gpGlobals->time; } flDamage = 0.1; // don't hurt the monster much, but allow bits_COND_LIGHT_DAMAGE to be generated } else if(gpGlobals->time > m_painSoundTime) { m_painSoundTime = gpGlobals->time + RANDOM_LONG(1, 3); EMIT_SOUND_ARRAY_DYN(CHAN_VOICE, pPainSounds); } CBaseMonster::TraceAttack(pevAttacker, flDamage, vecDir, ptr, bitsDamageType); }
void CXenTree :: HandleAnimEvent( MonsterEvent_t *pEvent ) { switch( pEvent->event ) { case TREE_AE_ATTACK: { CBaseEntity *pList[8]; BOOL sound = FALSE; int count = UTIL_EntitiesInBox( pList, 8, m_pTrigger->pev->absmin, m_pTrigger->pev->absmax, FL_MONSTER|FL_CLIENT ); Vector forward; UTIL_MakeVectorsPrivate( pev->angles, forward, NULL, NULL ); for ( int i = 0; i < count; i++ ) { if ( pList[i] != this ) { if ( pList[i]->pev->owner != edict() ) { sound = TRUE; pList[i]->TakeDamage( pev, pev, 25, DMG_CRUSH | DMG_SLASH ); pList[i]->pev->punchangle.x = 15; pList[i]->pev->velocity = pList[i]->pev->velocity + forward * 100; } } } if ( sound ) { EMIT_SOUND_ARRAY_DYN( CHAN_WEAPON, pAttackHitSounds ); } } return; } CActAnimating::HandleAnimEvent( pEvent ); }
//========================================================= // HandleAnimEvent - catches the monster-specific messages // that occur when tagged animation frames are played. // // Returns number of events handled, 0 if none. //========================================================= void CBigMomma :: HandleAnimEvent( MonsterEvent_t *pEvent ) { switch( pEvent->event ) { case BIG_AE_MELEE_ATTACKBR: case BIG_AE_MELEE_ATTACKBL: case BIG_AE_MELEE_ATTACK1: { Vector forward, right; UTIL_MakeVectorsPrivate( pev->angles, forward, right, NULL ); Vector center = pev->origin + forward * 128; Vector mins = center - Vector( 64, 64, 0 ); Vector maxs = center + Vector( 64, 64, 64 ); CBaseEntity *pList[8]; int count = UTIL_EntitiesInBox( pList, 8, mins, maxs, FL_MONSTER|FL_CLIENT ); CBaseEntity *pHurt = NULL; for ( int i = 0; i < count && !pHurt; i++ ) { if ( pList[i] != this ) { if ( pList[i]->pev->owner != edict() ) pHurt = pList[i]; } } if ( pHurt ) { pHurt->TakeDamage( pev, pev, gSkillData.bigmommaDmgSlash, DMG_CRUSH | DMG_SLASH ); pHurt->pev->punchangle.x = 15; switch( pEvent->event ) { case BIG_AE_MELEE_ATTACKBR: pHurt->pev->velocity = pHurt->pev->velocity + (forward * 150) + Vector(0,0,250) - (right * 200); break; case BIG_AE_MELEE_ATTACKBL: pHurt->pev->velocity = pHurt->pev->velocity + (forward * 150) + Vector(0,0,250) + (right * 200); break; case BIG_AE_MELEE_ATTACK1: pHurt->pev->velocity = pHurt->pev->velocity + (forward * 220) + Vector(0,0,200); break; } pHurt->pev->flags &= ~FL_ONGROUND; EMIT_SOUND_DYN( edict(), CHAN_WEAPON, RANDOM_SOUND_ARRAY(pAttackHitSounds), 1.0, ATTN_NORM, 0, 100 + RANDOM_LONG(-5,5) ); } } break; case BIG_AE_SCREAM: EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pAlertSounds ); break; case BIG_AE_PAIN_SOUND: EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pPainSounds ); break; case BIG_AE_ATTACK_SOUND: EMIT_SOUND_ARRAY_DYN( CHAN_WEAPON, pAttackSounds ); break; case BIG_AE_BIRTH_SOUND: EMIT_SOUND_ARRAY_DYN( CHAN_BODY, pBirthSounds ); break; case BIG_AE_SACK: if ( RANDOM_LONG(0,100) < 30 ) EMIT_SOUND_ARRAY_DYN( CHAN_BODY, pSackSounds ); break; case BIG_AE_DEATHSOUND: EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pDeathSounds ); break; case BIG_AE_STEP1: // Footstep left case BIG_AE_STEP3: // Footstep back left EMIT_SOUND_ARRAY_DYN( CHAN_ITEM, pFootSounds ); break; case BIG_AE_STEP4: // Footstep back right case BIG_AE_STEP2: // Footstep right EMIT_SOUND_ARRAY_DYN( CHAN_BODY, pFootSounds ); break; case BIG_AE_MORTAR_ATTACK1: LaunchMortar(); break; case BIG_AE_LAY_CRAB: LayHeadcrab(); break; case BIG_AE_JUMP_FORWARD: ClearBits( pev->flags, FL_ONGROUND ); UTIL_SetOrigin (pev, pev->origin + Vector ( 0 , 0 , 1) );// take him off ground so engine doesn't instantly reset onground UTIL_MakeVectors ( pev->angles ); pev->velocity = (gpGlobals->v_forward * 200) + gpGlobals->v_up * 500; break; case BIG_AE_EARLY_TARGET: { CBaseEntity *pTarget = m_hTargetEnt; if ( pTarget && pTarget->pev->message ) FireTargets( STRING(pTarget->pev->message), this, this, USE_TOGGLE, 0 ); Remember( bits_MEMORY_FIRED_NODE ); } break; default: CBaseMonster::HandleAnimEvent( pEvent ); break; } }
void CController :: DeathSound( void ) { EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pDeathSounds ); }
void CController :: AttackSound( void ) { EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pAttackSounds ); }
void CController :: IdleSound( void ) { EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pIdleSounds ); }
void CController :: PainSound( void ) { if (RANDOM_LONG(0,5) < 2) EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pPainSounds ); }
void CLuciole :: IdleSound( void ) { EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pIdleSounds ); }
void CLuciole :: AlertSound( void ) { EMIT_SOUND_ARRAY_DYN( CHAN_VOICE, pAlertSounds ); }