void CASW_Parasite::GatherEnemyConditions( CBaseEntity *pEnemy ) { // Do the base class BaseClass::GatherEnemyConditions( pEnemy ); // If we're not already too far away, check again //TODO: Check to make sure we don't already have a condition set that removes the need for this if ( HasCondition( COND_ENEMY_UNREACHABLE ) == false ) { Vector predPosition; UTIL_PredictedPosition( GetEnemy(), 1.0f, &predPosition ); Vector predDir = ( predPosition - GetAbsOrigin() ); float predLength = VectorNormalize( predDir ); // See if we'll be outside our effective target range if ( predLength > 2000 ) // m_flEludeDistance { Vector predVelDir = ( predPosition - GetEnemy()->GetAbsOrigin() ); float predSpeed = VectorNormalize( predVelDir ); // See if the enemy is moving mostly away from us if ( ( predSpeed > 512.0f ) && ( DotProduct( predVelDir, predDir ) > 0.0f ) ) { // Mark the enemy as eluded and burrow away ClearEnemyMemory(); SetEnemy( NULL ); SetIdealState( NPC_STATE_ALERT ); SetCondition( COND_ENEMY_UNREACHABLE ); } } } }
//----------------------------------------------------------------------------- // Purpose: // Input: // Output: //----------------------------------------------------------------------------- void CASW_Boomer::Spawn( void ) { SetHullType( HULL_LARGE ); BaseClass::Spawn(); SetHullType( HULL_LARGE ); SetCollisionGroup( ASW_COLLISION_GROUP_ALIEN ); SetHealthByDifficultyLevel(); CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_INNATE_MELEE_ATTACK1 | bits_CAP_INNATE_MELEE_ATTACK2 ); // "Health" "435" // "WalkSpeed" "45" // "RunSpeed" "254" SetIdealState( NPC_STATE_ALERT ); m_bNeverRagdoll = true; //softcopy: //SetRenderColor(asw_boomer_color.GetColor().r(), asw_boomer_color.GetColor().g(), asw_boomer_color.GetColor().b()); //Ch1ckensCoop: Allow setting colors. alienLabel = "boomer"; SetColorScale( alienLabel ); }
//----------------------------------------------------------------------------- // Purpose: // Input: // Output: //----------------------------------------------------------------------------- void CASW_Ranger::Spawn( void ) { SetHullType( HULL_MEDIUMBIG ); BaseClass::Spawn(); SetHullType( HULL_MEDIUMBIG ); SetHealthByDifficultyLevel(); SetBloodColor( BLOOD_COLOR_GREEN ); CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_INNATE_MELEE_ATTACK1 | bits_CAP_INNATE_RANGE_ATTACK1 ); SetIdealState( NPC_STATE_ALERT ); m_bNeverRagdoll = true; // // Firing patterns // // 3 shots CASW_AlienVolley volley; volley.m_rounds.SetCount( 3 ); volley.m_rounds[0].m_flTime = 0; volley.m_rounds[0].m_nShot_type = GetShotIndex( "shot1" ); volley.m_rounds[0].m_flStartAngle = 0; volley.m_rounds[0].m_flEndAngle = 0; volley.m_rounds[0].m_nNumShots = 1; volley.m_rounds[0].m_flShotDelay = 0; volley.m_rounds[0].m_flSpeed = 425; volley.m_rounds[0].m_flHorizontalOffset = 0; volley.m_rounds[1].m_flTime = 0.1; volley.m_rounds[1].m_nShot_type = GetShotIndex( "shot1" ); volley.m_rounds[1].m_flStartAngle = -4; volley.m_rounds[1].m_flEndAngle = 0; volley.m_rounds[1].m_nNumShots = 1; volley.m_rounds[1].m_flShotDelay = 0; volley.m_rounds[1].m_flSpeed = 425; volley.m_rounds[1].m_flHorizontalOffset = 0; volley.m_rounds[2].m_flTime = 0.2; volley.m_rounds[2].m_nShot_type = GetShotIndex( "shot1" ); volley.m_rounds[2].m_flStartAngle = 4; volley.m_rounds[2].m_flEndAngle = 0; volley.m_rounds[2].m_nNumShots = 1; volley.m_rounds[2].m_flShotDelay = 0; volley.m_rounds[2].m_flSpeed = 425; volley.m_rounds[2].m_flHorizontalOffset = 0; CreateVolley( "volley1", &volley ); }
//----------------------------------------------------------------------------- // Purpose: // Input: // Output: //----------------------------------------------------------------------------- void CASW_Shaman::Spawn( void ) { SetHullType( HULL_MEDIUM ); BaseClass::Spawn(); SetHullType( HULL_MEDIUM ); SetHealthByDifficultyLevel(); SetBloodColor( BLOOD_COLOR_GREEN ); CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_AUTO_DOORS ); AddFactionRelationship( FACTION_MARINES, D_FEAR, 10 ); SetIdealState( NPC_STATE_ALERT ); m_bNeverRagdoll = true; SetCollisionGroup( ASW_COLLISION_GROUP_PARASITE ); }