// AI_monster_flying_lostsoul.h // Native state-machine replacement for ai_monster_flying_lostsoul.script. #pragma once #ifndef LOSTSOUL_CHARGE_SPEED #define LOSTSOUL_CHARGE_SPEED 440 #endif #ifndef LOSTSOUL_NORMAL_SPEED #define LOSTSOUL_NORMAL_SPEED 140 #endif #ifndef LOSTSOUL_ATTACK_RATE #define LOSTSOUL_ATTACK_RATE 2 #endif #ifndef LOSTSOUL_CHARGE_RANGE_MAX #define LOSTSOUL_CHARGE_RANGE_MAX 768 #endif #ifndef LOSTSOUL_CHARGE_RANGE_MIN #define LOSTSOUL_CHARGE_RANGE_MIN 64 #endif #ifndef LOSTSOUL_NOFOVTIME #define LOSTSOUL_NOFOVTIME 4 #endif #ifndef ATTACK_LOSTSOUL_CHARGE #define ATTACK_LOSTSOUL_CHARGE ATTACK_SPECIAL1 #endif #ifndef ATTACK_LOSTSOUL_RETREAT #define ATTACK_LOSTSOUL_RETREAT ATTACK_SPECIAL2 #endif class rvmMonsterFlyingLostsoul : public rvmMonsterBase { public: CLASS_PROTOTYPE( rvmMonsterFlyingLostsoul ); rvmMonsterFlyingLostsoul(); virtual void Init( idAI* aiOwner ) override; virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override; protected: float nextAttack; float nextNoFOVAttack; float noMeleeTime; float fly_offset; float painNextTime; idVec3 chargeVelocity; virtual stateResult_t Torso_Idle( stateParms_t* parms ); virtual stateResult_t Torso_Fly( stateParms_t* parms ); virtual stateResult_t Torso_Charge( stateParms_t* parms ); virtual stateResult_t Torso_Pain( stateParms_t* parms ); virtual stateResult_t Torso_MeleeAttack( stateParms_t* parms ); virtual stateResult_t state_Begin( stateParms_t* parms ); virtual stateResult_t state_Idle( stateParms_t* parms ); virtual stateResult_t combat_charge( stateParms_t* parms ); virtual stateResult_t combat_melee( stateParms_t* parms ); virtual stateResult_t combat_retreat( stateParms_t* parms ); virtual int check_attacks() override; virtual bool do_attack( int attack_flags ) override; };