// 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 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; };