Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
4.3 KiB

#ifndef _INCLUDED_ASW_ZOMBIE_H
#define _INCLUDED_ASW_ZOMBIE_H
#include "iasw_spawnable_npc.h"
#include "npc_BaseZombie.h"
class CSprite;
class CASW_Zombie : public CAI_BlendingHost<CNPC_BaseZombie>, public IASW_Spawnable_NPC
{
DECLARE_DATADESC();
DECLARE_CLASS( CASW_Zombie, CAI_BlendingHost<CNPC_BaseZombie> );
DECLARE_SERVERCLASS();
public:
CASW_Zombie()
: m_DurationDoorBash( 2, 6),
m_NextTimeToStartDoorBash( 3.0 ),
m_bHoldoutAlien( false )
{
}
void Spawn( void );
void OnRestore();
void Precache( void );
void SetZombieModel( void );
void MoanSound( envelopePoint_t *pEnvelope, int iEnvelopeSize );
bool ShouldBecomeTorso( const CTakeDamageInfo &info, float flDamageThreshold );
bool CanBecomeLiveTorso() { return !m_fIsHeadless; }
void GatherConditions( void );
int SelectFailSchedule( int failedSchedule, int failedTask, AI_TaskFailureCode_t taskFailCode );
int TranslateSchedule( int scheduleType );
bool FInViewCone( const Vector &vecSpot );
bool ShouldPlayerAvoid( void );
virtual float GetIdealSpeed() const;
virtual void StudioFrameAdvance();
#ifndef HL2_EPISODIC
void CheckFlinches() {} // Zombie has custom flinch code
#endif // HL2_EPISODIC
Activity NPC_TranslateActivity( Activity newActivity );
void OnStateChange( NPC_STATE OldState, NPC_STATE NewState );
void StartTask( const Task_t *pTask );
void RunTask( const Task_t *pTask );
virtual const char *GetLegsModel( void );
virtual const char *GetTorsoModel( void );
virtual const char *GetHeadcrabClassname( void );
virtual const char *GetHeadcrabModel( void );
virtual bool OnObstructingDoor( AILocalMoveGoal_t *pMoveGoal,
CBaseDoor *pDoor,
float distClear,
AIMoveResult_t *pResult );
virtual HeadcrabRelease_t ShouldReleaseHeadcrab( const CTakeDamageInfo &info, float flDamageThreshold );
virtual bool IsChopped( const CTakeDamageInfo &info ) { return false; }
virtual bool IsSquashed( const CTakeDamageInfo &info ) { return false; }
Activity SelectDoorBash();
void Ignite( float flFlameLifetime, bool bNPCOnly = true, float flSize = 0.0f, bool bCalledByLevelDesigner = false );
int OnTakeDamage_Alive( const CTakeDamageInfo &inputInfo );
bool IsHeavyDamage( const CTakeDamageInfo &info );
void BuildScheduleTestBits( void );
void PrescheduleThink( void );
int SelectSchedule ( void );
virtual void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr );
void CreateEyeGlows( void );
void RemoveEyeGlows( float flDelay );
virtual void Event_Killed( const CTakeDamageInfo &info );
virtual void UpdateOnRemove();
void PainSound( const CTakeDamageInfo &info );
void DeathSound();
void AlertSound( void );
void IdleSound( void );
void AttackSound( void );
void AttackHitSound( void );
void AttackMissSound( void );
void FootstepSound( bool fRightFoot );
void FootscuffSound( bool fRightFoot );
const char *GetMoanSound( int nSound );
public:
DEFINE_CUSTOM_AI;
// IASW_Spawnable_NPC implementation
CHandle<CASW_Base_Spawner> m_hSpawner;
void SetSpawner(CASW_Base_Spawner* spawner);
CAI_BaseNPC* GetNPC() { return this; }
virtual bool CanStartBurrowed() { return false; }
virtual void StartBurrowed() { }
virtual void SetUnburrowActivity( string_t iszActivityName ) { }
virtual void SetUnburrowIdleActivity( string_t iszActivityName ) { }
virtual void SetAlienOrders(AlienOrder_t Orders, Vector vecOrderSpot, CBaseEntity* pOrderObject) { }
AlienOrder_t GetAlienOrders() { return AOT_None; }
virtual void MoveAside() { }
virtual void ASW_Ignite( float flFlameLifetime, float flSize, CBaseEntity *pAttacker, CBaseEntity *pDamagingWeapon = NULL );
virtual void ElectroStun( float flStunTime ) { }
virtual void Extinguish();
CNetworkVar(bool, m_bOnFire);
virtual void OnSwarmSensed(int iDistance) { }
virtual void OnSwarmSenseEntity(CBaseEntity* pEnt) { }
virtual void SetHealthByDifficultyLevel();
virtual void SetHoldoutAlien() { m_bHoldoutAlien = true; }
virtual bool IsHoldoutAlien() { return m_bHoldoutAlien; }
protected:
static const char *pASWMoanSounds[];
private:
CHandle< CBaseDoor > m_hBlockingDoor;
float m_flDoorBashYaw;
CRandSimTimer m_DurationDoorBash;
CSimTimer m_NextTimeToStartDoorBash;
Vector m_vPositionCharged;
bool m_bHoldoutAlien;
CSprite *m_pEyeGlow[2];
};
#endif // _INCLUDED_ASW_ZOMBIE_H