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

70 lines
2.9 KiB
C++

// AI_monster_zombie_commando_cgun.h
// Native state-machine replacement for ai_monster_zombie_commando_cgun.script.
#pragma once
#ifndef ZOMBIE_CGUN_RUNDISTANCE
#define ZOMBIE_CGUN_RUNDISTANCE 192
#define ZOMBIE_CGUN_WALKTURN 65
#define ZOMBIE_CGUN_DODGE_RATE 3
#define ZOMBIE_CGUN_NOFOVTIME 4
#define ZOMBIE_CGUN_MIN_SHOT_TIME 0.5
#define ZOMBIE_CGUN_ATTACK_DELAY_MIN 0.5
#define ZOMBIE_CGUN_ATTACK_DELAY_MAX 2
#define ZOMBIE_CGUN_STAND_ATTACK_MIN_LENGTH 3
#define ZOMBIE_CGUN_STAND_ATTACK_MAX_LENGTH 15
#define ZOMBIE_CGUN_CROUCH_ATTACK_MIN_LENGTH 3
#define ZOMBIE_CGUN_CROUCH_ATTACK_MAX_LENGTH 15
#define ZOMBIE_CGUN_WAIT_MIN_LENGTH 0.3
#define ZOMBIE_CGUN_WAIT_MAX_LENGTH 1.5
#define ATTACK_ZCC_CROUCHFIRE ATTACK_SPECIAL1
#endif
class rvmMonsterZombieCommandoCGun : public rvmMonsterBase {
public:
CLASS_PROTOTYPE( rvmMonsterZombieCommandoCGun );
rvmMonsterZombieCommandoCGun();
virtual void Init( idAI* aiOwner ) override;
virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override;
protected:
bool fire;
bool crouch_fire;
bool step_left;
bool step_right;
bool run_attack;
float nextDodge;
float nextAttack;
float nextNoFOVAttack;
idEntityPtr<idEntity> combat_node;
float painNextTime;
float attackEndTime;
float loopEndTime;
float minShootTime;
bool firstShot;
virtual stateResult_t Torso_Idle( stateParms_t* parms ) override;
virtual stateResult_t Torso_Pain( stateParms_t* parms );
virtual stateResult_t Torso_RangeAttack( stateParms_t* parms );
virtual stateResult_t Torso_TurretAttack( stateParms_t* parms );
virtual stateResult_t Torso_CrouchAttack( stateParms_t* parms );
virtual stateResult_t Legs_Idle( stateParms_t* parms ) override;
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 Legs_StepLeft( stateParms_t* parms );
virtual stateResult_t Legs_StepRight( stateParms_t* parms );
virtual stateResult_t state_Begin( stateParms_t* parms ) override;
virtual stateResult_t state_Idle( stateParms_t* parms );
virtual stateResult_t stand_attack( stateParms_t* parms );
virtual stateResult_t crouch_attack( 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;
};