// AI_monster_boss_vagary.h // Native state-machine replacement for ai_monster_boss_vagary.script. #pragma once #ifndef VAGARY_ATTACK_RATE #define VAGARY_ATTACK_RATE 1.5f #endif #ifndef VAGARY_DODGE_RATE #define VAGARY_DODGE_RATE 4 #endif #ifndef VAGARY_PAIN_DELAY #define VAGARY_PAIN_DELAY 0.25f #endif #ifndef VAGARY_TURRET_TO_IDLE #define VAGARY_TURRET_TO_IDLE 4 #endif #ifndef VAGARY_THROW_SPEED #define VAGARY_THROW_SPEED 1200 #endif #ifndef VAGARY_THROW_SPEED2 #define VAGARY_THROW_SPEED2 1500 #endif #ifndef VAGARY_THROW_DIST #define VAGARY_THROW_DIST 200 #endif #ifndef VAGARY_THROW_OFFSET #define VAGARY_THROW_OFFSET 64 #endif #ifndef VAGARY_NOFOVTIME #define VAGARY_NOFOVTIME 4 #endif #ifndef VAGARY_PAIN_TO_IDLE #define VAGARY_PAIN_TO_IDLE 2 #endif #ifndef VAGARY_PAIN_TO_PAIN #define VAGARY_PAIN_TO_PAIN 0 #endif #ifndef VAGARY_MELEE_TO_IDLE #define VAGARY_MELEE_TO_IDLE 4 #endif #ifndef VAGARY_RANGE_TO_IDLE #define VAGARY_RANGE_TO_IDLE 4 #endif #ifndef VAGARY_DODGE_LEFT_TO_IDLE #define VAGARY_DODGE_LEFT_TO_IDLE 4 #endif #ifndef VAGARY_DODGE_RIGHT_TO_IDLE #define VAGARY_DODGE_RIGHT_TO_IDLE 4 #endif #ifndef VAGARY_IDLE_TO_PAIN #define VAGARY_IDLE_TO_PAIN 0 #endif #ifndef VAGARY_IDLE_TO_WALK #define VAGARY_IDLE_TO_WALK 4 #endif #ifndef VAGARY_WALK_TO_IDLE #define VAGARY_WALK_TO_IDLE 4 #endif #ifndef VAGARY_WALK_TO_RANGEATTACK #define VAGARY_WALK_TO_RANGEATTACK 4 #endif #ifndef VAGARY_WALK_TO_MELEE #define VAGARY_WALK_TO_MELEE 4 #endif #ifndef VAGARY_WALK_TO_DODGE_LEFT #define VAGARY_WALK_TO_DODGE_LEFT 4 #endif #ifndef VAGARY_WALK_TO_DODGE_RIGHT #define VAGARY_WALK_TO_DODGE_RIGHT 4 #endif class rvmMonsterBossVagary : public rvmMonsterBase { public: CLASS_PROTOTYPE( rvmMonsterBossVagary ); rvmMonsterBossVagary(); 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 painNextTime; idEntityPtr combat_node; idEntityPtr throwEntity; 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 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 throw_object( stateParms_t* parms ); virtual stateResult_t combat_range( stateParms_t* parms ); virtual stateResult_t combat_melee( 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; };