
Source code release, imported from: https://www.gamefront.com/games/aliens-vs-predator-3/file/avp-gold-complete-source-code All text files were converted to Unix format.
261 lines
No EOL
6.8 KiB
C
261 lines
No EOL
6.8 KiB
C
/*--------------Patrick 21/1/97-----------------------
|
|
Header file for predator AI & NPC support functions
|
|
---------------------------------------------------*/
|
|
|
|
#ifndef _bhpred_h_
|
|
#define _bhpred_h_ 1
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "bh_ais.h"
|
|
#include "decal.h"
|
|
|
|
/*-----------------------------
|
|
Predator Specific Support
|
|
-------------------------------*/
|
|
/* predator animation sequences */
|
|
typedef enum predatorsequence
|
|
{
|
|
PredSQ_Run=0,
|
|
PredSQ_Crawl,
|
|
PredSQ_Stand,
|
|
PredSQ_Crouch,
|
|
PredSQ_StandDie,
|
|
PredSQ_StandDead,
|
|
PredSQ_CrouchDie,
|
|
PredSQ_CrouchDead,
|
|
PredSQ_StandingSwipe,
|
|
PredSQ_CrouchedSwipe,
|
|
PredSQ_RunningSwipe,
|
|
PredSQ_CrawlingSwipe,
|
|
PredSQ_Jump,
|
|
PredSQ_Taunt,
|
|
PredSQ_Run_Backwards,
|
|
PredSQ_Crawl_Backwards,
|
|
PredSQ_RunningSwipe_Backwards,
|
|
PredSQ_CrawlingSwipe_Backwards,
|
|
PredSQ_BaseOfStaffAttacks=20,
|
|
PredSQ_BaseOfWristbladeAttacks=40,
|
|
}PREDATOR_SEQUENCE;
|
|
|
|
typedef enum pred_bhstate {
|
|
PBS_Wandering,
|
|
PBS_Hunting,
|
|
PBS_Avoidance,
|
|
PBS_Withdrawing,
|
|
PBS_Dying,
|
|
PBS_Recovering,
|
|
PBS_SwapWeapon,
|
|
PBS_Engaging,
|
|
PBS_Attacking,
|
|
PBS_Pathfinding,
|
|
PBS_Returning,
|
|
PBS_Taunting,
|
|
PBS_SelfDestruct,
|
|
} PRED_BHSTATE;
|
|
|
|
typedef enum pred_return_condition {
|
|
PRC_No_Change,
|
|
PRC_Request_Engage,
|
|
PRC_Request_Attack,
|
|
PRC_Request_Wander,
|
|
PRC_Request_Avoidance,
|
|
PRC_Request_Hunt,
|
|
PRC_Request_Withdraw,
|
|
PRC_Request_Recover,
|
|
PRC_Request_Swap,
|
|
PRC_Request_Return,
|
|
PRC_Request_Pathfind,
|
|
PRC_Request_Taunt,
|
|
PRC_Request_SelfDestruct,
|
|
} PRED_RETURN_CONDITION;
|
|
|
|
/* cloaking states */
|
|
typedef enum pred_cloakstate
|
|
{
|
|
PCLOAK_Off,
|
|
PCLOAK_Activating,
|
|
PCLOAK_On,
|
|
PCLOAK_Deactivating,
|
|
}PRED_CLOAKSTATE;
|
|
|
|
typedef struct predatorPersonalParameters
|
|
{
|
|
int startingHealth; /* initial health */
|
|
int speed; /* running speed */
|
|
int defenceHealth; /* health level below which defensive behaviour is used */
|
|
int useShoulderCannon; /* 1 = shouldercannon, 0 = disc */
|
|
int timeBetweenRangedAttacks;
|
|
int maxShotsPerRangedAttack;
|
|
int timeBetweenShots;
|
|
int closeAttackDamage;
|
|
int regenerationUnit; /* health recovered when made visible */
|
|
int chanceOfCloaking; /* 0-8, chance in 8 */
|
|
} PREDATOR_PERSONALPARAMETERS;
|
|
|
|
typedef enum predator_npc_weapons {
|
|
|
|
PNPCW_Pistol,
|
|
PNPCW_Wristblade,
|
|
PNPCW_PlasmaCaster,
|
|
PNPCW_Staff,
|
|
PNPCW_Medicomp,
|
|
PNPCW_Speargun,
|
|
PNPCW_SeriousPlasmaCaster,
|
|
PNPCW_End,
|
|
|
|
} PREDATOR_NPC_WEAPONS;
|
|
|
|
typedef struct predator_weapon_data {
|
|
|
|
PREDATOR_NPC_WEAPONS id;
|
|
PRED_RETURN_CONDITION (*WeaponFireFunction)(STRATEGYBLOCK *);
|
|
PRED_RETURN_CONDITION (*WeaponEngageFunction)(STRATEGYBLOCK *);
|
|
char *Riffname;
|
|
char *HierarchyName;
|
|
char *GunName;
|
|
char *ElevationName;
|
|
char *HitLocationTableName;
|
|
int MinRange;
|
|
int ForceFireRange;
|
|
int MaxRange;
|
|
int FiringRate;
|
|
int VolleySize;
|
|
int SwappingTime;
|
|
int UseElevation :1;
|
|
|
|
}PREDATOR_WEAPON_DATA;
|
|
|
|
typedef struct predatorStatusBlock
|
|
{
|
|
signed int health;
|
|
PRED_BHSTATE behaviourState;
|
|
PRED_BHSTATE lastState;
|
|
|
|
int stateTimer;
|
|
int internalState;
|
|
int patience;
|
|
int enableSwap;
|
|
int enableTaunt;
|
|
VECTORCH weaponTarget; /* target position for firing weapon at */
|
|
int volleySize; /* used for weapon control */
|
|
NPC_OBSTRUCTIONREPORT obstruction;
|
|
NPC_MOVEMENTDATA moveData;
|
|
NPC_WANDERDATA wanderData;
|
|
|
|
NPC_AVOIDANCEMANAGER avoidanceManager;
|
|
WAYPOINT_MANAGER waypointManager;
|
|
|
|
int IAmCrouched;
|
|
int personalNumber; /* for predator personalisation */
|
|
int nearSpeed;
|
|
int GibbFactor;
|
|
|
|
int incidentFlag;
|
|
int incidentTimer;
|
|
|
|
PREDATOR_WEAPON_DATA *Selected_Weapon;
|
|
PREDATOR_NPC_WEAPONS PrimaryWeapon;
|
|
PREDATOR_NPC_WEAPONS SecondaryWeapon;
|
|
PREDATOR_NPC_WEAPONS ChangeToWeapon;
|
|
ATTACK_DATA *current_attack;
|
|
|
|
STRATEGYBLOCK *Target;
|
|
char Target_SBname[SB_NAME_LENGTH];
|
|
int soundHandle;
|
|
|
|
HMODELCONTROLLER HModelController;
|
|
SECTION_DATA *My_Gun_Section; /* For template computation. */
|
|
SECTION_DATA *My_Elevation_Section; /* For elevation computation. */
|
|
|
|
/* these are for cloaking... */
|
|
PRED_CLOAKSTATE CloakStatus;
|
|
int CloakingEffectiveness;
|
|
int CloakTimer;
|
|
|
|
/* And these for the laser dots. */
|
|
THREE_LASER_DOT_DESC Pred_Laser_Sight;
|
|
int Pred_Laser_On :1;
|
|
int Explode :1;
|
|
/* Pathfinder parameters */
|
|
int path;
|
|
int stepnumber;
|
|
AIMODULE *missionmodule;
|
|
AIMODULE *fearmodule;
|
|
/* Pathfinder parameters */
|
|
|
|
char death_target_ID[SB_NAME_LENGTH]; //another strategy can be notified of the marine's death
|
|
STRATEGYBLOCK* death_target_sbptr;
|
|
int death_target_request;
|
|
|
|
}PREDATOR_STATUS_BLOCK;
|
|
|
|
typedef struct dormantPredatorStatusBlock
|
|
{
|
|
AVP_BEHAVIOUR_TYPE bhvr_type;
|
|
void* toolsData;
|
|
}DORMANT_PREDATOR_STATUS_BLOCK;
|
|
|
|
/* Tools data template */
|
|
typedef struct tools_data_predator
|
|
{
|
|
struct vectorch position;
|
|
int shapeIndex;
|
|
int predator_number;
|
|
char nameID[SB_NAME_LENGTH];
|
|
PREDATOR_NPC_WEAPONS primary;
|
|
PREDATOR_NPC_WEAPONS secondary;
|
|
int path;
|
|
int stepnumber;
|
|
|
|
char death_target_ID[SB_NAME_LENGTH];
|
|
int death_target_request;
|
|
|
|
}TOOLS_DATA_PREDATOR;
|
|
|
|
#define PRED_SELF_DESTRUCT_TIMER (ONE_FIXED*3)
|
|
#define PRED_WALKING_SPEED_MAX (5000)
|
|
#define PRED_WALKING_SPEED_MIN (3000)
|
|
#define PRED_PATIENCE_TIME (6*ONE_FIXED)
|
|
#define PRED_REGEN_TIME (10*ONE_FIXED)
|
|
#define PRED_MAXIDENTITY (4)
|
|
#define NO_OF_FRAGMENTS_FROM_DEAD_PREDATOR (10)
|
|
#define PRED_CLOSE_ATTACK_RANGE (1500) /* mm */
|
|
#define PRED_STAFF_ATTACK_RANGE (2000) /* mm */
|
|
#define PRED_NEAR_VIEW_WIDTH (500) /* mm */
|
|
#define PRED_FPPLASMA_INFRONT (600) /* mm */
|
|
#define PRED_FPPLASMA_ACROSS (-500) /* mm */
|
|
#define PRED_FPPLASMA_UP (900) /* mm */
|
|
#define PRED_FPPLASMA_INFRONTCROUCH (600) /* mm */
|
|
#define PRED_FPPLASMA_ACROSSCROUCH (-500) /* mm */
|
|
#define PRED_FPPLASMA_UPCROUCH (400) /* mm */
|
|
#define PRED_FPDISC_INFRONT (600) /* mm */
|
|
#define PRED_FPDISC_ACROSS (500) /* mm */
|
|
#define PRED_FPDISC_UP (500) /* mm */
|
|
#define PRED_FPDISC_INFRONTCROUCH (600) /* mm */
|
|
#define PRED_FPDISC_ACROSSCROUCH (500) /* mm */
|
|
#define PRED_FPDISC_UPCROUCH (200) /* mm */
|
|
#define PRED_PLASBOLTSPEED (22000) /* mm/s */
|
|
#define PRED_PLASBOLTDAMAGE (50)
|
|
/* 1.5-2 seconds in 1/16 second. NB DO NOT INCREASE THIS */
|
|
#define PRED_FAR_MOVE_TIME ((24+(FastRandom()&0x07))*(ONE_FIXED>>4))
|
|
#define PRED_NEAR_CLOSEATTACK_TIME ONE_FIXED /* 1 second */
|
|
|
|
extern void InitPredatorBehaviour(void* bhdata, STRATEGYBLOCK *sbPtr);
|
|
extern void InitDormantPredatorBehaviour(void* bhdata, STRATEGYBLOCK *sbPtr);
|
|
extern void PredatorBehaviour(STRATEGYBLOCK *sbPtr);
|
|
extern void MakePredatorNear(STRATEGYBLOCK *sbPtr);
|
|
extern void MakePredatorFar(STRATEGYBLOCK *sbPtr);
|
|
extern void PredatorIsDamaged(STRATEGYBLOCK *sbPtr, DAMAGE_PROFILE *damage, int multiple,SECTION_DATA *Section, VECTORCH *incoming);
|
|
extern void ActivateDormantPredator(STRATEGYBLOCK *sbPtr);
|
|
extern int NPCPredatorIsCloaked(STRATEGYBLOCK *sbPtr);
|
|
extern void StartPredatorSelfDestructExplosion(STRATEGYBLOCK *sbPtr);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif |