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

173 lines
5.6 KiB
C++

// AI_monster_boss_guardian.h
#pragma once
#ifndef SPAWNER_PAIN_FADEOUT
#define SPAWNER_PAIN_FADEOUT 2.5f
#endif
#ifndef SPAWNER_FADEOUT
#define SPAWNER_FADEOUT 1.0f
#endif
#ifndef SPAWNER_FADEIN_TIME
#define SPAWNER_FADEIN_TIME 0.25f
#endif
#ifndef GUARDIAN_PAIN_DELAY
#define GUARDIAN_PAIN_DELAY 0.25f
#endif
#ifndef GUARDIAN_RANGE_ATTACK_RANGE
#define GUARDIAN_RANGE_ATTACK_RANGE 1024
#endif
#ifndef GUARDIAN_RANGE_ATTACK_DELAY
#define GUARDIAN_RANGE_ATTACK_DELAY 7
#endif
#ifndef GUARDIAN_CHARGE_ATTACK_RANGE
#define GUARDIAN_CHARGE_ATTACK_RANGE 680
#endif
#ifndef GUARDIAN_NUM_PROJECTILES
#define GUARDIAN_NUM_PROJECTILES 12
#endif
#ifndef GUARDIAN_PAIN_TO_IDLE
#define GUARDIAN_PAIN_TO_IDLE 3
#endif
#ifndef GUARDIAN_PAIN_TO_PAIN
#define GUARDIAN_PAIN_TO_PAIN 3
#endif
#ifndef GUARDIAN_SIGHT_TO_IDLE
#define GUARDIAN_SIGHT_TO_IDLE 8
#endif
#ifndef GUARDIAN_MELEE_TO_IDLE
#define GUARDIAN_MELEE_TO_IDLE 12
#endif
#ifndef GUARDIAN_IDLE_TO_PAIN
#define GUARDIAN_IDLE_TO_PAIN 3
#endif
#ifndef GUARDIAN_IDLE_TO_WALK
#define GUARDIAN_IDLE_TO_WALK 12
#endif
#ifndef GUARDIAN_IDLE_TO_CHARGE
#define GUARDIAN_IDLE_TO_CHARGE 12
#endif
#ifndef GUARDIAN_IDLE_TO_MELEE
#define GUARDIAN_IDLE_TO_MELEE 12
#endif
#ifndef GUARDIAN_IDLE_TO_RANGE
#define GUARDIAN_IDLE_TO_RANGE 12
#endif
#ifndef GUARDIAN_IDLE_TO_SIGHT
#define GUARDIAN_IDLE_TO_SIGHT 12
#endif
#ifndef GUARDIAN_IDLE_TO_LOST
#define GUARDIAN_IDLE_TO_LOST 12
#endif
#ifndef GUARDIAN_WALK_TO_IDLE
#define GUARDIAN_WALK_TO_IDLE 12
#endif
#ifndef GUARDIAN_WALK_TO_PAIN
#define GUARDIAN_WALK_TO_PAIN 3
#endif
#ifndef GUARDIAN_WALK_TO_CHARGE
#define GUARDIAN_WALK_TO_CHARGE 8
#endif
#ifndef GUARDIAN_CHARGE_TO_WALK
#define GUARDIAN_CHARGE_TO_WALK 0
#endif
#ifndef GUARDIAN_CHARGE_TO_IDLE
#define GUARDIAN_CHARGE_TO_IDLE 12
#endif
#ifndef GUARDIAN_CHARGE_TO_PAIN
#define GUARDIAN_CHARGE_TO_PAIN 3
#endif
#ifndef GUARDIAN_LOST_TO_IDLE
#define GUARDIAN_LOST_TO_IDLE 10
#endif
#ifndef GUARDIAN_LOST_TO_PAIN
#define GUARDIAN_LOST_TO_PAIN 3
#endif
#ifndef GUARDIAN_LOST_TO_WALK
#define GUARDIAN_LOST_TO_WALK 24
#endif
#ifndef GUARDIAN_LOST_TO_CHARGE
#define GUARDIAN_LOST_TO_CHARGE 24
#endif
#ifndef GUARDIAN_RANGEATTACK_TO_IDLE
#define GUARDIAN_RANGEATTACK_TO_IDLE 4
#endif
#ifndef GUARDIAN_SPAWN_TO_IDLE
#define GUARDIAN_SPAWN_TO_IDLE 4
#endif
#ifndef GUARDIAN_IDLE_TO_SPAWN
#define GUARDIAN_IDLE_TO_SPAWN 4
#endif
class rvmSeekerBase : public rvmMonsterBase {
public:
CLASS_PROTOTYPE( rvmSeekerBase );
rvmSeekerBase();
virtual void Init( idAI* aiOwner ) override;
virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override;
virtual bool isAlive() const;
protected:
virtual stateResult_t respawnSeeker( stateParms_t* parms );
};
class rvmMonsterBossGuardianSpawner : public rvmMonsterBase {
public:
CLASS_PROTOTYPE( rvmMonsterBossGuardianSpawner );
rvmMonsterBossGuardianSpawner();
virtual void Init( idAI* aiOwner ) override;
virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override;
protected:
idEntityPtr<idEntity> guardian;
float inactive_time;
float active_time;
float pain_time;
virtual stateResult_t update_effects( stateParms_t* parms );
virtual stateResult_t setGuardian( stateParms_t* parms );
virtual stateResult_t state_Inactive( stateParms_t* parms );
virtual stateResult_t state_Active( stateParms_t* parms );
virtual stateResult_t state_Killed( stateParms_t* parms );
};
class rvmMonsterBossGuardian : public rvmMonsterBase {
public:
CLASS_PROTOTYPE( rvmMonsterBossGuardian );
rvmMonsterBossGuardian();
virtual void Init( idAI* aiOwner ) override;
virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override;
protected:
float nextAttack;
float painNextTime;
bool in_melee;
bool rightfoot;
bool charge;
idEntityPtr<idEntity> seeker1;
idEntityPtr<idEntity> seeker2;
idEntityPtr<idEntity> seeker3;
idEntityPtr<idEntity> spawner;
virtual stateResult_t Legs_Sight( stateParms_t* parms );
virtual stateResult_t Legs_Death( stateParms_t* parms );
virtual stateResult_t Legs_Pain( stateParms_t* parms );
virtual stateResult_t Legs_RangeAttack( stateParms_t* parms );
virtual stateResult_t Legs_MeleeAttack( stateParms_t* parms );
virtual stateResult_t Legs_Walk_Melee_Left( stateParms_t* parms );
virtual stateResult_t Legs_Walk_Melee_Right( stateParms_t* parms );
virtual stateResult_t Legs_Walk( stateParms_t* parms );
virtual stateResult_t Legs_Run_Melee_Left( stateParms_t* parms );
virtual stateResult_t Legs_Run_Melee_Right( stateParms_t* parms );
virtual stateResult_t Legs_Charge( stateParms_t* parms );
virtual stateResult_t Legs_Lost( stateParms_t* parms );
virtual stateResult_t Legs_Idle( stateParms_t* parms );
virtual stateResult_t Legs_SpawnSeeker( stateParms_t* parms );
virtual stateResult_t addSeeker( stateParms_t* parms );
virtual stateResult_t sightEnemy( stateParms_t* parms );
virtual stateResult_t state_Idle( stateParms_t* parms );
virtual stateResult_t state_Killed( stateParms_t* parms );
virtual stateResult_t state_Combat( stateParms_t* parms );
virtual stateResult_t combat_melee( stateParms_t* parms );
virtual stateResult_t combat_range( stateParms_t* parms );
virtual stateResult_t combat_charge( stateParms_t* parms );
virtual stateResult_t pound_impact( stateParms_t* parms );
virtual stateResult_t pound_attack( stateParms_t* parms );
virtual stateResult_t pound_attack_left( stateParms_t* parms );
virtual stateResult_t pound_attack_right( stateParms_t* parms );
virtual stateResult_t smash_ground( stateParms_t* parms );
};