// AI_monster_demon_vulgar.h // Native state-machine replacement for ai_monster_demon_vulgar.script. #pragma once #ifndef VULGAR_RUNDISTANCE #define VULGAR_RUNDISTANCE 192 #endif #ifndef VULGAR_WALKTURN #define VULGAR_WALKTURN 65 #endif #ifndef VULGAR_ATTACK_RATE #define VULGAR_ATTACK_RATE 1 #endif #ifndef VULGAR_DODGE_RATE #define VULGAR_DODGE_RATE 1 #endif #ifndef VULGAR_LEAP_RATE #define VULGAR_LEAP_RATE 8 #endif #ifndef VULGAR_LEAP_SPEED #define VULGAR_LEAP_SPEED 650 #endif #ifndef VULGAR_LEAP_MAXHEIGHT #define VULGAR_LEAP_MAXHEIGHT 48 #endif #ifndef VULGAR_LEAP_RANGE_MIN #define VULGAR_LEAP_RANGE_MIN 200 #endif #ifndef VULGAR_LEAP_RANGE_MAX #define VULGAR_LEAP_RANGE_MAX 480 #endif #ifndef VULGAR_PAIN_DELAY #define VULGAR_PAIN_DELAY 0.25f #endif #ifndef VULGAR_PAIN_TO_IDLE #define VULGAR_PAIN_TO_IDLE 8 #endif #ifndef VULGAR_PAIN_TO_PAIN #define VULGAR_PAIN_TO_PAIN 4 #endif #ifndef VULGAR_MELEE_TO_IDLE #define VULGAR_MELEE_TO_IDLE 4 #endif #ifndef VULGAR_RANGE_TO_IDLE #define VULGAR_RANGE_TO_IDLE 4 #endif #ifndef VULGAR_LEAP_TO_IDLE #define VULGAR_LEAP_TO_IDLE 4 #endif #ifndef VULGAR_NOFOVTIME #define VULGAR_NOFOVTIME 4 #endif class rvmMonsterDemonVulgar : public rvmMonsterBase { public: CLASS_PROTOTYPE( rvmMonsterDemonVulgar ); rvmMonsterDemonVulgar(); virtual void Init( idAI* aiOwner ) override; virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override; protected: float nextDodge; float nextAttack; float nextNoFOVAttack; float nextLeap; float painNextTime; idVec3 jumpVelocity; idStr range_attack_anim; 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 Torso_LeapAttack( stateParms_t* parms ); virtual stateResult_t Legs_Idle( stateParms_t* parms ); virtual stateResult_t Legs_Walk( stateParms_t* parms ); virtual stateResult_t Legs_Run( stateParms_t* parms ); virtual stateResult_t Legs_DodgeLeft( stateParms_t* parms ); virtual stateResult_t Legs_DodgeRight( 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 stateResult_t combat_leap( stateParms_t* parms ); virtual stateResult_t path_jump( stateParms_t* parms ); virtual stateResult_t combat_dodge_left( stateParms_t* parms ); virtual stateResult_t combat_dodge_right( stateParms_t* parms ); virtual int check_attacks() override; virtual bool do_attack( int attack_flags ) override; };