1 
2 /***** bh_weap.h *****/
3 
4 #include "particle.h"
5 
6 extern void FireProjectileAmmo(enum AMMO_ID AmmoID);
7 extern void FrisbeeBehaviour(STRATEGYBLOCK *sbPtr);
8 extern void RocketBehaviour(STRATEGYBLOCK *sbPtr);
9 extern void GrenadeBehaviour(STRATEGYBLOCK *sbPtr);
10 extern void MolotovBehaviour(STRATEGYBLOCK *sbPtr);
11 extern void PulseGrenadeBehaviour(STRATEGYBLOCK *sbPtr);
12 extern void ProximityGrenadeBehaviour(STRATEGYBLOCK *sbPtr);
13 extern void FlareGrenadeBehaviour(STRATEGYBLOCK *sbPtr);
14 extern void ClusterGrenadeBehaviour(STRATEGYBLOCK *sbPtr);
15 extern void XenoborgEnergyBoltBehaviour(STRATEGYBLOCK *sbPtr);
16 extern void PredatorEnergyBoltBehaviour(STRATEGYBLOCK *sbPtr);
17 extern void AlienSpitBehaviour(STRATEGYBLOCK *sbPtr);
18 extern void NPCDiscBehaviour(STRATEGYBLOCK *sbPtr);
19 extern void DiscBehaviour_SeekTrack(STRATEGYBLOCK *sbPtr);
20 extern void PPPlasmaBoltBehaviour(STRATEGYBLOCK *sbPtr);
21 extern void SpeargunBoltBehaviour(STRATEGYBLOCK *sbPtr);
22 extern void FireFlameThrower(VECTORCH *position,VECTORCH *base_offset,MATRIXCH *orientmat, int player, int *timer);
23 extern void FireNetGhostFlameThrower(VECTORCH *positionPtr, MATRIXCH *orientMatPtr);
24 extern DISPLAYBLOCK *SpawnMolotovCocktail(SECTION_DATA *root, MATRIXCH *master_orient);
25 void Convert_Disc_To_Pickup(STRATEGYBLOCK *sbPtr);
26 void FirePredPistolFlechettes(VECTORCH *base_position,VECTORCH *base_offset,MATRIXCH *orientmat,int player,int *timer,BOOL damaging);
27 extern void FrisbeeEnergyBoltBehaviour(STRATEGYBLOCK *sbPtr);
28 
29 extern int SBIsEnvironment(STRATEGYBLOCK *sbPtr);
30 int ValidTargetForProxMine(STRATEGYBLOCK *obstaclePtr);
31 
32 typedef struct OneShotBehaviourType
33 {
34 	int counter;
35 } ONE_SHOT_BEHAV_BLOCK;
36 
37 typedef struct PredPistolBehaviourType
38 {
39 	int counter;
40 	int player;
41 } PREDPISTOL_BEHAV_BLOCK;
42 
43 typedef struct GrenadeBehaviourType
44 {
45 	int counter;
46 	int bouncelastframe;
47 } GRENADE_BEHAV_BLOCK;
48 
49 typedef struct
50 {
51 	int LifeTimeRemaining;
52 	int ParticleGenerationTimer;
53 	int SoundHandle;
54 
55 	/*
56 	becomeStuck set when flare hits wall.
57 	gets reset once a network message about it has been sent
58 	*/
59 	unsigned int becomeStuck:1;
60 
61 } FLARE_BEHAV_BLOCK;
62 
63 typedef struct
64 {
65 	int LifeTimeRemaining;
66 	int SoundGenerationTimer;
67 	int SoundHandle;
68 
69 } PROX_GRENADE_BEHAV_BLOCK;
70 
71 typedef struct CasterBoltBehaviourType
72 {
73 	int counter;
74 	DAMAGE_PROFILE damage;
75 	int blast_radius;
76 	int player;
77 	int soundHandle;
78 } CASTER_BOLT_BEHAV_BLOCK;
79 
80 typedef struct MolotovBehaviourType {
81 	int counter;
82 	HMODELCONTROLLER HModelController;
83 } MOLOTOV_BEHAV_BLOCK;
84 
85 typedef struct FrisbeeBehaviourType
86 {
87 	int counter;
88 	HMODELCONTROLLER HModelController;
89 	int soundHandle;
90 	int Bounced :1;
91 	int bounces;
92 
93 	LASER_BEAM_DESC Laser;
94 
95 } FRISBEE_BEHAV_BLOCK;
96 
97 typedef struct PCPredDiscBehaviourType
98 {
99 	int counter;
100 	STRATEGYBLOCK *Target;
101 	char Target_SBname[SB_NAME_LENGTH];
102 	char Prev_Target_SBname[SB_NAME_LENGTH];
103 	char Prev_Damaged_SBname[SB_NAME_LENGTH];
104 	HMODELCONTROLLER HModelController;
105 	int soundHandle;
106 	int Destruct:1;
107 	int Stuck	:1;
108 	int Bounced :1;
109 	int bounces;
110 
111 
112 } PC_PRED_DISC_BEHAV_BLOCK;
113 
114 typedef struct SpearBehaviourType
115 {
116 	int counter;
117 	MATRIXCH Orient;
118 	VECTORCH Position;
119 	HMODELCONTROLLER HierarchicalFragment;
120 	int Android;
121 
122 	/* behaviour type of parent object, e.g. I_BehaviourAlien */
123 	AVP_BEHAVIOUR_TYPE Type;
124 	int SubType;
125 
126 	unsigned int SpearThroughFragment;
127 	unsigned int Stuck :1;
128 
129 } SPEAR_BEHAV_BLOCK;
130 
131 #define FLARE_LIFETIME 16
132 #define FLARE_PARTICLE_GENERATION_TIME (ONE_FIXED/120)
133 
134 #define FRAG_LIFETIME 65536
135 
136 #define NO_OF_FRAGS_IN_CLUSTER_BOMB 6
137 
138 #define PROX_GRENADE_TRIGGER_TIME (ONE_FIXED/4)
139 #define PROX_GRENADE_RANGE (4000)
140 #define PROX_GRENADE_SOUND_GENERATION_TIME 65536
141 #define PROX_GRENADE_LIFETIME (20)
142 
143 STRATEGYBLOCK* CreateGrenadeKernel(AVP_BEHAVIOUR_TYPE behaviourID, VECTORCH *position, MATRIXCH *orient,int fromplayer);
144 
145 
146 /* KJL 17:46:30 02/24/97 - below is some old stuff I'll leave for reference */
147 #if 0
148 extern void FlameProjectileFunction(STRATEGYBLOCK *sptr);
149 extern void GrenadeBehaviour(STRATEGYBLOCK *sptr);
150 extern void TOWMissileBehaviour(STRATEGYBLOCK *sptr);
151 extern void PredatorDiscBehaviour(STRATEGYBLOCK *sptr);
152 
153 typedef struct OneShotBehaviourType {
154 
155         AVP_BEHAVIOUR_TYPE bhvr_type;
156         VECTORCH ObWorld;
157         int counter;
158 
159         } ONE_SHOT_BEHAV_BLOCK;
160 
161 typedef struct FlameProjectileBehaviourType {
162 
163         AVP_BEHAVIOUR_TYPE bhvr_type;
164         VECTORCH ObWorld;
165         int counter;
166 #if SupportMorphing
167 	MORPHCTRL *FPmctrl;
168 #endif
169 
170 } FLAME_PROJ_BEHAV_BLOCK;
171 
172 typedef struct TowMissileBehaviourType {
173 
174         AVP_BEHAVIOUR_TYPE bhvr_type;
175         VECTORCH ObWorld;
176 		VECTORCH Target;
177         int counter;
178 
179 } TOW_MISSILE_BEHAV_BLOCK;
180 
181 typedef struct PredatorDiscBehaviourType {
182 
183         AVP_BEHAVIOUR_TYPE bhvr_type;
184         VECTORCH ObWorld;
185 		VECTORCH Target;
186 		STRATEGYBLOCK *MovingTarget;
187         int counter;
188 		int retargetcounter;
189 		int phase;
190 
191 } PRED_DISC_BEHAV_BLOCK;
192 
193 #endif
194