// AI_monster_demon_archvile.h // Native state-machine replacement for ai_monster_demon_archvile.script. #pragma once #ifndef ARCH_ATTACK_RATE #define ARCH_ATTACK_RATE 2 #endif #ifndef ARCH_DODGE_RATE #define ARCH_DODGE_RATE 4 #endif #ifndef ARCH_PAIN_DELAY #define ARCH_PAIN_DELAY 0.25f #endif #ifndef ARCH_TURRET_TO_IDLE #define ARCH_TURRET_TO_IDLE 4 #endif #ifndef ARCH_FLAME_WALL_NUM #define ARCH_FLAME_WALL_NUM 20 #endif #ifndef ARCH_FLAME_WALL_SEPERATION #define ARCH_FLAME_WALL_SEPERATION 48 #endif #ifndef ARCH_FLAME_WALL_RANGE #define ARCH_FLAME_WALL_RANGE ( ARCH_FLAME_WALL_NUM * ARCH_FLAME_WALL_SEPERATION ) #endif #ifndef ARCH_NOFOVTIME #define ARCH_NOFOVTIME 4 #endif #ifndef ARCH_PAIN_TO_IDLE #define ARCH_PAIN_TO_IDLE 2 #endif #ifndef ARCH_PAIN_TO_PAIN #define ARCH_PAIN_TO_PAIN 0 #endif #ifndef ARCH_SIGHT_TO_IDLE #define ARCH_SIGHT_TO_IDLE 4 #endif #ifndef ARCH_RESURRECT_TO_IDLE #define ARCH_RESURRECT_TO_IDLE 4 #endif #ifndef ARCH_IDLE_TO_RESURRECT #define ARCH_IDLE_TO_RESURRECT 4 #endif #ifndef ARCH_MELEE_TO_IDLE #define ARCH_MELEE_TO_IDLE 4 #endif #ifndef ARCH_INCINERATE_TO_IDLE #define ARCH_INCINERATE_TO_IDLE 4 #endif #ifndef ARCH_FLAMEWALL_TO_IDLE #define ARCH_FLAMEWALL_TO_IDLE 4 #endif #ifndef ARCH_DODGE_LEFT_TO_IDLE #define ARCH_DODGE_LEFT_TO_IDLE 4 #endif #ifndef ARCH_DODGE_RIGHT_TO_IDLE #define ARCH_DODGE_RIGHT_TO_IDLE 4 #endif #ifndef ARCH_WAIT_TO_OUT #define ARCH_WAIT_TO_OUT 4 #endif #ifndef ARCH_IN_TO_WAIT #define ARCH_IN_TO_WAIT 4 #endif #ifndef ARCH_WALK_TO_WAIT #define ARCH_WALK_TO_WAIT 4 #endif #ifndef ARCH_WALK_TO_ACTION #define ARCH_WALK_TO_ACTION 4 #endif #ifndef ARCH_ACTION_TO_IDLE #define ARCH_ACTION_TO_IDLE 4 #endif #ifndef ARCH_WALK_TO_DODGE_LEFT #define ARCH_WALK_TO_DODGE_LEFT 4 #endif #ifndef ARCH_WALK_TO_DODGE_RIGHT #define ARCH_WALK_TO_DODGE_RIGHT 4 #endif #ifndef ARCH_IDLE_TO_PAIN #define ARCH_IDLE_TO_PAIN 0 #endif #ifndef ARCH_IDLE_TO_WALK #define ARCH_IDLE_TO_WALK 4 #endif #ifndef ARCH_IDLE_TO_SIGHT #define ARCH_IDLE_TO_SIGHT 4 #endif #ifndef ARCH_WALK_TO_IDLE #define ARCH_WALK_TO_IDLE 4 #endif #ifndef ARCH_WALK_TO_FLAMEWALLATTACK #define ARCH_WALK_TO_FLAMEWALLATTACK 4 #endif #ifndef ARCH_IDLE_TO_FLAMEWALLATTACK #define ARCH_IDLE_TO_FLAMEWALLATTACK 4 #endif #ifndef ARCH_WALK_TO_INCINERATEATTACK #define ARCH_WALK_TO_INCINERATEATTACK 4 #endif #ifndef ARCH_IDLE_TO_INCINERATEATTACK #define ARCH_IDLE_TO_INCINERATEATTACK 4 #endif #ifndef ARCH_WALK_TO_MELEE #define ARCH_WALK_TO_MELEE 4 #endif #ifndef ARCH_IDLE_TO_TURRETATTACK #define ARCH_IDLE_TO_TURRETATTACK 4 #endif #ifndef ARCH_TURRETATTACK_TO_IDLE #define ARCH_TURRETATTACK_TO_IDLE 4 #endif #ifndef ATTACK_FLAMEWALL #define ATTACK_FLAMEWALL ATTACK_SPECIAL1 #endif #ifndef ATTACK_RESURRECT #define ATTACK_RESURRECT ATTACK_SPECIAL2 #endif class rvmMonsterDemonArchvile : public rvmMonsterBase { public: CLASS_PROTOTYPE( rvmMonsterDemonArchvile ); rvmMonsterDemonArchvile(); 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; float keep_alive; float num_start; float summon_delay; float summon_time; idEntityPtr combat_node; idEntityPtr resurrectionTarget; idVec3 flameWallOrigin; idVec3 incinerateOrigin; virtual stateResult_t Torso_Idle( stateParms_t* parms ); virtual stateResult_t Torso_Pain( stateParms_t* parms ); virtual stateResult_t Torso_Resurrect( stateParms_t* parms ); virtual stateResult_t Torso_MeleeAttack( stateParms_t* parms ); virtual stateResult_t Torso_FlameWallAttack( stateParms_t* parms ); virtual stateResult_t Torso_IncinerateAttack( 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 combat_resurrect( stateParms_t* parms ); virtual stateResult_t combat_flamewall( stateParms_t* parms ); virtual stateResult_t combat_incinerate( 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 spawn_flame_wall( stateParms_t* parms ); virtual stateResult_t spawn_incerate( stateParms_t* parms ); virtual stateResult_t flame_wall_loop( stateParms_t* parms ); virtual stateResult_t flame_wall( stateParms_t* parms ); virtual stateResult_t incinerate( stateParms_t* parms ); virtual stateResult_t resurrection( stateParms_t* parms ); virtual int check_attacks() override; virtual bool do_attack( int attack_flags ) override; virtual float num_minions(); };