// AI_monster_zombie_security_pistol.h // Native state-machine replacement for ai_monster_zombie_security_pistol.script. #pragma once #ifndef ZSECP_RUNDISTANCE #define ZSECP_RUNDISTANCE 192 #define ZSECP_WALKTURN 65 #define ZSECP_DODGE_RATE 3 #define ZSECP_NOFOVTIME 4 #define ZSECP_MIN_SHOT_TIME 0.5 #define ZSECP_ATTACK_DELAY_MIN 0.5 #define ZSECP_ATTACK_DELAY_MAX 2 #define ZSECP_STAND_ATTACK_MIN_LENGTH 3 #define ZSECP_STAND_ATTACK_MAX_LENGTH 15 #define ZSECP_CROUCH_ATTACK_MIN_LENGTH 3 #define ZSECP_CROUCH_ATTACK_MAX_LENGTH 15 #define ZSECP_WAIT_MIN_LENGTH 0.3 #define ZSECP_WAIT_MAX_LENGTH 1.5 #define ATTACK_ZSECP_CROUCHFIRE ATTACK_SPECIAL1 #endif class rvmMonsterZombieSecurityPistol : public rvmMonsterZombieBase { public: CLASS_PROTOTYPE( rvmMonsterZombieSecurityPistol ); rvmMonsterZombieSecurityPistol(); 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; };