// AI_monster_zombie_commando_tentacle.h // Native state-machine replacement for ai_monster_zombie_commando_tentacle.script. #pragma once #ifndef ZCT_RUNDISTANCE #define ZCT_RUNDISTANCE 128 #define ZCT_WALKTURN 65 #define ZCT_ATTACK_RATE 5 #define ZCT_TENTACLE_RANGE_MAX 200 #define ZCT_NOFOVTIME 4 #define ATTACK_TENTACLE ATTACK_SPECIAL1 #endif class rvmMonsterZombieCommandoTentacle : public rvmMonsterBase { public: CLASS_PROTOTYPE( rvmMonsterZombieCommandoTentacle ); rvmMonsterZombieCommandoTentacle(); virtual void Init( idAI* aiOwner ) override; virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override; protected: float nextAttack; float nextNoFOVAttack; bool tentacleDamage; float painNextTime; virtual stateResult_t Torso_Idle( stateParms_t* parms ) override; virtual stateResult_t Torso_Pain( stateParms_t* parms ); virtual stateResult_t Torso_MeleeAttack( stateParms_t* parms ); virtual stateResult_t Torso_TentacleAttack( stateParms_t* parms ); virtual stateResult_t Legs_Idle( stateParms_t* parms ) override; virtual stateResult_t Legs_Walk( stateParms_t* parms ); virtual stateResult_t Legs_Run( stateParms_t* parms ); virtual stateResult_t state_Begin( stateParms_t* parms ) override; virtual stateResult_t state_Idle( stateParms_t* parms ); virtual stateResult_t combat_tentacle( stateParms_t* parms ); virtual stateResult_t combat_melee( stateParms_t* parms ); virtual int check_attacks() override; virtual bool do_attack( int attack_flags ) override; virtual void tentacle_attack_start(); virtual void tentacle_attack_end(); };