// AI_monster_demon_wraith.h // Native state-machine replacement for ai_monster_demon_wraith.script. #pragma once #ifndef WRAITH_ATTACK_RATE #define WRAITH_ATTACK_RATE 1.5f #endif #ifndef WRAITH_DODGE_RATE #define WRAITH_DODGE_RATE 5 #endif #ifndef WRAITH_PAIN_DELAY #define WRAITH_PAIN_DELAY 0.25f #endif #ifndef WRAITH_RUNDISTANCE #define WRAITH_RUNDISTANCE 192 #endif #ifndef WRAITH_WALKTURN #define WRAITH_WALKTURN 65 #endif #ifndef WRAITH_INVISIBLE_DIST_MIN #define WRAITH_INVISIBLE_DIST_MIN 140 #endif #ifndef WRAITH_INVISIBLE_DIST_MAX #define WRAITH_INVISIBLE_DIST_MAX 256 #endif #ifndef WRAITH_INVISIBLE_DELAY_MIN #define WRAITH_INVISIBLE_DELAY_MIN 0.6f #endif #ifndef WRAITH_INVISIBLE_DELAY_MAX #define WRAITH_INVISIBLE_DELAY_MAX 1.5f #endif #ifndef WRAITH_VISIBLE_DELAY_MIN #define WRAITH_VISIBLE_DELAY_MIN 1.3f #endif #ifndef WRAITH_VISIBLE_DELAY_MAX #define WRAITH_VISIBLE_DELAY_MAX 2.2f #endif #ifndef WRAITH_PAIN_TO_IDLE #define WRAITH_PAIN_TO_IDLE 2 #endif #ifndef WRAITH_PAIN_TO_PAIN #define WRAITH_PAIN_TO_PAIN 0 #endif #ifndef WRAITH_MELEE_TO_IDLE #define WRAITH_MELEE_TO_IDLE 4 #endif #ifndef WRAITH_DODGE_LEFT_TO_IDLE #define WRAITH_DODGE_LEFT_TO_IDLE 4 #endif #ifndef WRAITH_DODGE_RIGHT_TO_IDLE #define WRAITH_DODGE_RIGHT_TO_IDLE 4 #endif #ifndef WRAITH_IDLE_TO_PAIN #define WRAITH_IDLE_TO_PAIN 0 #endif #ifndef WRAITH_IDLE_TO_WALK #define WRAITH_IDLE_TO_WALK 4 #endif #ifndef WRAITH_WALK_TO_IDLE #define WRAITH_WALK_TO_IDLE 4 #endif #ifndef WRAITH_IDLE_TO_RUN #define WRAITH_IDLE_TO_RUN 4 #endif #ifndef WRAITH_WALK_TO_RUN #define WRAITH_WALK_TO_RUN 4 #endif #ifndef WRAITH_RUN_TO_WALK #define WRAITH_RUN_TO_WALK 4 #endif #ifndef WRAITH_RUN_TO_IDLE #define WRAITH_RUN_TO_IDLE 4 #endif #ifndef WRAITH_WALK_TO_MELEE #define WRAITH_WALK_TO_MELEE 4 #endif #ifndef WRAITH_WALK_TO_DODGE_LEFT #define WRAITH_WALK_TO_DODGE_LEFT 4 #endif #ifndef WRAITH_WALK_TO_DODGE_RIGHT #define WRAITH_WALK_TO_DODGE_RIGHT 4 #endif #ifndef ATTACK_BECOME_INVISIBLE #define ATTACK_BECOME_INVISIBLE ATTACK_SPECIAL1 #endif #ifndef ATTACK_BECOME_VISIBLE #define ATTACK_BECOME_VISIBLE ATTACK_SPECIAL2 #endif class rvmMonsterDemonWraith : public rvmMonsterBase { public: CLASS_PROTOTYPE( rvmMonsterDemonWraith ); rvmMonsterDemonWraith(); virtual void Init( idAI* aiOwner ) override; virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override; protected: bool invisible; float nextDodge; float nextInvisible; float painNextTime; idEntityPtr combat_node; idEntityPtr spawn_effect; 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 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 state_LostCombat( 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 stateResult_t combat_become_visible( stateParms_t* parms ); virtual stateResult_t combat_become_invisible( stateParms_t* parms ); virtual stateResult_t spawn_fx( stateParms_t* parms ); virtual int check_attacks() override; virtual bool do_attack( int attack_flags ) override; };