void NPC_BSInterrogator_Default( void ) { //NPC->e_DieFunc = dieF_Interrogator_die; if ( NPC->enemy ) { Interrogator_Attack(); } else { Interrogator_Idle(); } }
/* ------------------------- Interrogator_Attack ------------------------- */ void Interrogator_Attack( void ) { float distance; qboolean visible; qboolean advance; // Always keep a good height off the ground Interrogator_MaintainHeight(); //randomly talk if ( TIMER_Done(NPC,"patrolNoise") ) { if (TIMER_Done(NPC,"angerNoise")) { G_SoundOnEnt( NPC, CHAN_AUTO, va("sound/chars/probe/misc/talk.wav", Q_irand(1, 3)) ); TIMER_Set( NPC, "patrolNoise", Q_irand( 4000, 10000 ) ); } } // If we don't have an enemy, just idle if ( NPC_CheckEnemyExt(qfalse) == qfalse ) { Interrogator_Idle(); return; } // Rate our distance to the target, and our visibilty distance = (int) DistanceHorizontalSquared( NPC->r.currentOrigin, NPC->enemy->r.currentOrigin ); visible = NPC_ClearLOS4( NPC->enemy ); advance = (qboolean)(distance > MIN_DISTANCE*MIN_DISTANCE ); if ( !visible ) { advance = qtrue; } if ( NPCInfo->scriptFlags & SCF_CHASE_ENEMIES ) { Interrogator_Hunt( visible, advance ); } NPC_FaceEnemy( qtrue ); if (!advance) { Interrogator_Melee( visible, advance ); } }