1 /* Patrick 4/7/97------------------------------
2   Header file for xenoborg support functions
3 
4   ChrisF 6/7/98 Well, sort of.
5   ---------------------------------------------*/
6 
7 #ifndef _bhxeno_h_
8 	#define _bhxeno_h_ 1
9 
10 
11 	#ifdef __cplusplus
12 
13 		extern "C" {
14 
15 	#endif
16 
17 /* KJL 16:57:28 16/07/98 - particle.h is needed for LASER_BEAM_DESC */
18 #include "particle.h"
19 #include "bh_ais.h"
20 /* Patrick 4/7/97------------------------------
21   Enumerations of sequences and states
22   ---------------------------------------------*/
23 
24 	typedef enum xeno_bhstate
25 	{
26 		XS_ActiveWait,
27 		XS_TurnToFace,
28 		XS_Following,
29 		XS_Returning,
30   		XS_Inactive,
31 		XS_Activating,
32   		XS_Deactivating,
33 		XS_Avoidance,
34 		XS_Regenerating,
35 		XS_Dying,
36 		XS_ShootingTheRoof,
37 
38 	}XENO_BHSTATE;
39 
40 /* Patrick 4/7/97------------------------------
41   Structures for behaviour data & tools data
42   ---------------------------------------------*/
43  	typedef struct xenoStatusBlock
44  	{
45 		signed int health;
46 		XENO_BHSTATE behaviourState;
47 		XENO_BHSTATE lastState;
48 		int stateTimer;
49 		NPC_MOVEMENTDATA moveData;
50 		NPC_WANDERDATA wanderData;
51 		NPC_OBSTRUCTIONREPORT obstruction;
52 		AIMODULE *my_module;
53 		VECTORCH my_spot_therin;
54 		VECTORCH my_orientdir_therin;
55 		int module_range;
56 		int UpTime;
57 		int GibbFactor;
58 		int Wounds;
59 
60 		HMODELCONTROLLER HModelController;
61 		DELTA_CONTROLLER *head_pan;
62 		DELTA_CONTROLLER *head_tilt;
63 		DELTA_CONTROLLER *left_arm_pan;
64 		DELTA_CONTROLLER *left_arm_tilt;
65 		DELTA_CONTROLLER *right_arm_pan;
66 		DELTA_CONTROLLER *right_arm_tilt;
67 		DELTA_CONTROLLER *torso_twist;
68 
69 		STRATEGYBLOCK *Target;
70 		char Target_SBname[SB_NAME_LENGTH];
71 
72 		VECTORCH targetTrackPos;
73 
74 		int Head_Pan;
75 		int Head_Tilt;
76 		int Left_Arm_Pan;
77 		int Left_Arm_Tilt;
78 		int Right_Arm_Pan;
79 		int Right_Arm_Tilt;
80 		int Torso_Twist;
81 
82 		int Old_Head_Pan;
83 		int Old_Head_Tilt;
84 		int Old_Left_Arm_Pan;
85 		int Old_Left_Arm_Tilt;
86 		int Old_Right_Arm_Pan;
87 		int Old_Right_Arm_Tilt;
88 		int Old_Torso_Twist;
89 
90 		/* KJL 12:23:24 09/12/98 - muzzleflashes replaced by
91 		beam weapon thingies */
92 		LASER_BEAM_DESC LeftMainBeam;
93 		LASER_BEAM_DESC RightMainBeam;
94 
95 		/* KJL 16:56:38 16/07/98 */
96 		LASER_BEAM_DESC TargetingLaser[3];
97 
98 		unsigned int headpandir			:1;
99 		unsigned int headtiltdir		:1;
100 		unsigned int leftarmpandir		:1;
101 		unsigned int leftarmtiltdir		:1;
102 		unsigned int rightarmpandir		:1;
103 		unsigned int rightarmtiltdir	:1;
104 		unsigned int torsotwistdir		:1;
105 
106 		unsigned int headLock			:1;
107 		unsigned int leftArmLock		:1;
108 		unsigned int rightArmLock		:1;
109 		unsigned int targetSightTest	:1;
110 		unsigned int IAmFar				:1;
111 		unsigned int ShotThisFrame		:1;
112 
113 		unsigned int FiringLeft			:1;
114 		unsigned int FiringRight		:1;
115 
116 		unsigned int UseHeadLaser		:1;
117 		unsigned int UseLALaser			:1;
118 		unsigned int UseRALaser			:1;
119 
120 		unsigned int HeadLaserOnTarget	:1;
121 		unsigned int LALaserOnTarget	:1;
122 		unsigned int RALaserOnTarget	:1;
123 
124 		unsigned int head_moving		:1;
125 		unsigned int la_moving			:1;
126 		unsigned int ra_moving			:1;
127 		unsigned int torso_moving		:1;
128 
129 		int soundHandle1;
130 		int soundHandle2;
131 
132 		int incidentFlag;
133 		int incidentTimer;
134 
135 		int head_whirr;
136 		int left_arm_whirr;
137 		int right_arm_whirr;
138 		int torso_whirr;
139 
140 		char death_target_ID[SB_NAME_LENGTH];
141 		STRATEGYBLOCK* death_target_sbptr;
142 		int death_target_request;
143 
144 		WAYPOINT_MANAGER waypointManager;
145 
146  	}XENO_STATUS_BLOCK;
147 
148  	typedef struct tools_data_xeno
149  	{
150 		struct vectorch position;
151 		int shapeIndex;
152 		char nameID[SB_NAME_LENGTH];
153 		char death_target_ID[SB_NAME_LENGTH];
154 		int death_target_request;
155 		struct euler starteuler;
156 		int UpTime;			/* Default to '20' */
157 		int ModuleRange;	/* Default to '7' */
158  	}TOOLS_DATA_XENO;
159 
160 /* Patrick 4/7/97------------------------------
161   Some defines
162   ---------------------------------------------*/
163 	#define XENO_STARTING_HEALTH				600
164 	#define XENO_NEAR_SPEED						1000 	/* mm/s */
165   	#define XENO_NEAR_ACCURACY					5		/* mm per m max deviation */
166 	#define XENO_NEAR_VIEW_WIDTH				500		/* mm */
167 	#define XENO_CLOSE_APPROACH_DISTANCE		3000	/* mm */
168 	#define XENO_FIRINGPOINT_INFRONT			1000		/* mm */
169 	#define XENO_FIRINGPOINT_ACROSS				300 	/* mm */
170 	#define XENO_FIRINGPOINT_UP					100 	/* mm */
171     #define XENO_PROJECTILESPEED 				20000	/* mm/s */
172 	#define XENO_PROJECTILEDAMAGE				10
173 	#define XENO_SENTRY_SENSITIVITY				1500
174 	#define XENO_FAR_MOVE_TIME					((24+(FastRandom()&0x07))*(ONE_FIXED>>4))
175 
176 	/* 1-2 seconds in 1/8ths of a second */
177 	#define XENO_NEAR_TIMEBETWEENFIRING	((8+(FastRandom()&0x07))*(ONE_FIXED>>3))
178 	#define XENO_RECOILTIME				(ONE_FIXED>>1) 	/* 1/2 seconds */
179 	#define XENO_ACTIVATION_TIME		(ONE_FIXED)  /* 1 second */
180 	#define XENO_DEACTIVATION_TIME		(ONE_FIXED)  /* 1 second */
181 	#define XENO_REGEN_TIME				(ONE_FIXED*5)
182 	#define XENO_POWERDOWN_TIME			(ONE_FIXED*5)
183 
184 	/* 2,3 or 4*/
185 	#define XENO_VOLLEYSIZE				(2+(FastRandom()%3))
186 
187 	#define XENO_HEADPAN_GIMBALL		(1024)
188 	#define XENO_HEADTILT_GIMBALL		(512)
189 	#define XENO_TORSO_GIMBALL			(1195)
190 
191 	#define XENO_LEFTARM_CW_GIMBALL		(626)
192 	#define XENO_LEFTARM_ACW_GIMBALL	(910)
193 	#define XENO_RIGHTARM_CW_GIMBALL	(910)
194 	#define XENO_RIGHTARM_ACW_GIMBALL	(626)
195 
196 	#define XENO_ARM_PITCH_GIMBALL		(1024)
197 
198 	#if 0
199 	/* Original values. */
200 	#define XENO_HEAD_LOCK_RATE			(2)	/* Was 0 */
201 	#define XENO_HEAD_SCAN_RATE			(3)
202 	#define XENO_TORSO_TWIST_RATE		(3)
203 	#define XENO_ARM_LOCK_RATE			(4)
204 	#define XENO_FOOT_TURN_RATE			(3)
205 
206 	#else
207 	/* Let's slow everything down a wee bit. */
208 	#define XENO_HEAD_LOCK_RATE			(2)	/* Was 0 */
209 	#define XENO_HEAD_SCAN_RATE			(4)
210 	#define XENO_TORSO_TWIST_RATE		(5)
211 	#define XENO_ARM_LOCK_RATE			(5)
212 	#define XENO_FOOT_TURN_RATE			(5)
213 
214 	#endif
215 
216 /* Patrick 4/7/97------------------------------
217    Some prototypes
218   ---------------------------------------------*/
219 	void InitXenoborgBehaviour(void* bhdata, STRATEGYBLOCK *sbPtr);
220 	void XenoborgBehaviour(STRATEGYBLOCK *sbPtr);
221 	void MakeXenoborgNear(STRATEGYBLOCK *sbPtr);
222 	void MakeXenoborgFar(STRATEGYBLOCK *sbPtr);
223 	void XenoborgIsDamaged(STRATEGYBLOCK *sbPtr, DAMAGE_PROFILE *damage, int multiple, int wounds,VECTORCH *incoming);
224 	int XenoSight_FrustrumReject(STRATEGYBLOCK *sbtr,VECTORCH *localOffset);
225 
226 
227 	#ifdef __cplusplus
228 
229 		}
230 
231 	#endif
232 
233 
234 #endif
235