// AI_monster_demon_mancubus.h // Native state-machine replacement for ai_monster_demon_mancubus.script. #pragma once #ifndef MANC_WALKTURN #define MANC_WALKTURN 65 #endif #ifndef MANC_ATTACK_RATE #define MANC_ATTACK_RATE 1 #endif #ifndef MANC_MAX_SHOTS #define MANC_MAX_SHOTS 5 #endif #ifndef MANC_MIN_SHOTS #define MANC_MIN_SHOTS 1 #endif #ifndef MANC_NOFOVTIME #define MANC_NOFOVTIME 8 #endif class rvmMonsterDemonMancubus : public rvmMonsterBase { public: CLASS_PROTOTYPE( rvmMonsterDemonMancubus ); rvmMonsterDemonMancubus(); virtual void Init( idAI* aiOwner ) override; virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override; protected: float nextAttack; float nextNoFOVAttack; float fire; float painNextTime; idEntityPtr combat_node; virtual stateResult_t Torso_Idle( stateParms_t* parms ); virtual stateResult_t Torso_Pain( stateParms_t* parms ); virtual stateResult_t Torso_MeleeAttack( stateParms_t* parms ); virtual stateResult_t Torso_RangeAttack( stateParms_t* parms ); virtual stateResult_t Torso_TurretAttack( stateParms_t* parms ); virtual stateResult_t Legs_Idle( stateParms_t* parms ); virtual stateResult_t Legs_Walk( stateParms_t* parms ); virtual stateResult_t state_Begin( stateParms_t* parms ); virtual stateResult_t state_Idle( stateParms_t* parms ); virtual stateResult_t combat_range( stateParms_t* parms ); virtual stateResult_t combat_melee( stateParms_t* parms ); virtual int check_attacks() override; virtual bool do_attack( int attack_flags ) override; };