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