1 /* Patrick 18/2/97 ------------------------------------------------
2   Header file for alien queen and predator-alien support functions
3   -----------------------------------------------------------------*/
4 
5 #ifndef _bhpaq_h_
6 #define _bhpaq_h_ 1
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #include "bh_pred.h"
13 
14 /* Patrick 18/2/97 ------------------------------------------------
15   Some enumerations
16 -----------------------------------------------------------------*/
17 typedef enum PaqSequence
18 {
19 	PaqSQ_Run,
20 	PaqSQ_Attack,
21 	PaqSQ_Stand,
22 	PaqSQ_Dying,
23 	PaqSQ_Dead,
24 	PaqSQ_Attack2,
25 }PAQ_SEQUENCE;
26 
27 typedef enum paq_far_bhstate
28 {
29 	PAQFS_Wait,
30 	PAQFS_Hunt,
31 	PAQFS_Wander,
32 	PAQFS_Dying,
33 }PAQ_FAR_BHSTATE;
34 
35 typedef enum paq_near_bhstate
36 {
37 	PAQNS_Wait,
38 	PAQNS_Approach,
39 	PAQNS_Attack,
40 	PAQNS_Wander,
41 	PAQNS_Avoidance,
42 	PAQNS_Dying,
43 }PAQ_NEAR_BHSTATE;
44 
45 /* Patrick 18/2/97 ------------------------------------------------
46   Some structures
47 -----------------------------------------------------------------*/
48 typedef struct paqStatusBlock
49 {
50 	signed int health;
51 	signed int nearSpeed;
52 	signed int damageInflicted;
53 	PAQ_FAR_BHSTATE FarBehaviourState;
54 	PAQ_NEAR_BHSTATE NearBehaviourState;
55 	int stateTimer;
56 	SHAPEANIMATIONCONTROLLER ShpAnimCtrl;
57 	HMODELCONTROLLER HModelController;
58 	NPC_MOVEMENTDATA moveData;
59 	NPC_WANDERDATA wanderData;
60 }PAQ_STATUS_BLOCK;
61 
62 typedef struct tools_data_paq
63 {
64 	struct vectorch position;
65 	int shapeIndex;
66 	char nameID[SB_NAME_LENGTH];
67 }TOOLS_DATA_PAQ;
68 
69 /* Patrick 18/2/97 ------------------------------------------------
70   Some defines
71 -----------------------------------------------------------------*/
72 #define PRAL_STARTING_HEALTH			700
73 #define QUEEN_STARTING_HEALTH			1400
74 #define NO_OF_FRAGMENTS_FROM_DEAD_PAQ	10
75 #define PRAL_NEAR_SPEED					10000 	/* mm/s */
76 #define QUEEN_NEAR_SPEED				12000 	/* mm/s */
77 #define PRAL_NEAR_DAMAGE				20 		/* mm/s */
78 #define QUEEN_NEAR_DAMAGE				40 		/* mm/s */
79 #define PAQ_CLOSE_ATTACK_RANGE			1500 	/* mm */
80 #define PAQ_NEAR_VIEW_WIDTH				500		/* mm */
81 /* 1-1.5 seconds in 16ths of a second */
82 #define PAQ_FAR_MOVE_TIME			((16+(FastRandom()&0x07))*(ONE_FIXED>>4))
83 #define PAQ_NEAR_CLOSEATTACK_TIME	(ONE_FIXED>>1)	/* 1/2 second */
84 /* random time between 1 and 2 seconds,in fixed point,with granularity 1/8th second */
85 #define PAQ_NEARWAITTIME			(ONE_FIXED+((FastRandom()&0x7)*(ONE_FIXED>>3)))
86 #define PAQ_DIETIME					(ONE_FIXED<<4)
87 
88 /* Patrick 18/2/97 ------------------------------------------------
89   Some prototypes
90 -----------------------------------------------------------------*/
91 void InitPredAlBehaviour(void* bhdata, STRATEGYBLOCK *sbPtr);
92 void InitQueenBehaviour(void* bhdata, STRATEGYBLOCK *sbPtr);
93 void PAQBehaviour(STRATEGYBLOCK *sbPtr);
94 void MakePAQNear(STRATEGYBLOCK *sbPtr);
95 void MakePAQFar(STRATEGYBLOCK *sbPtr);
96 void PAQIsDamaged(STRATEGYBLOCK *sbPtr, DAMAGE_PROFILE *damage, int multiple);
97 
98 
99 #ifdef __cplusplus
100 }
101 #endif
102 
103 #endif
104