Files
DoomRTX/neo/doom3/game/ai/AI_monster_boss_vagary.h
T
2026-05-23 14:30:21 -07:00

110 lines
3.3 KiB
C++

// 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<idEntity> combat_node;
idEntityPtr<idEntity> 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;
};