1 /*
2 ===========================================================================
3 Copyright (C) 2000 - 2013, Raven Software, Inc.
4 Copyright (C) 2001 - 2013, Activision, Inc.
5 Copyright (C) 2013 - 2015, OpenJK contributors
6 
7 This file is part of the OpenJK source code.
8 
9 OpenJK is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License version 2 as
11 published by the Free Software Foundation.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, see <http://www.gnu.org/licenses/>.
20 ===========================================================================
21 */
22 
23 // Filename:-	g_functions.h
24 //
25 
26 #ifndef G_FUNCTIONS
27 #define G_FUNCTIONS
28 
29 #undef thinkFunc_t
30 #undef clThinkFunc_t
31 #undef reachedFunc_t
32 #undef blockedFunc_t
33 #undef touchFunc_t
34 #undef useFunc_t
35 #undef painFunc_t
36 #undef dieFunc_t
37 
38 //	void		(*think)(gentity_t *self);
39 typedef enum
40 {
41 	thinkF_NULL = 0,
42 	//
43 	thinkF_teleporter_think,
44 	thinkF_funcBBrushDieGo,
45 	thinkF_ExplodeDeath,
46 	thinkF_RespawnItem,
47 	thinkF_G_FreeEntity,
48 	thinkF_FinishSpawningItem,
49 	thinkF_locateCamera,
50 	thinkF_G_RunObject,
51 	thinkF_ReturnToPos1,
52 	thinkF_Use_BinaryMover_Go,
53 	thinkF_Think_MatchTeam,
54 	thinkF_Think_BeginMoving,
55 	thinkF_Think_SetupTrainTargets,
56 	thinkF_Think_SpawnNewDoorTrigger,
57 	thinkF_ref_link,
58 	thinkF_Think_Target_Delay,
59 	thinkF_target_laser_think,
60 	thinkF_target_laser_start,
61 	thinkF_target_location_linkup,
62 	thinkF_scriptrunner_run,
63 	thinkF_multi_wait,
64 	thinkF_multi_trigger_run,
65 	thinkF_trigger_always_think,
66 	thinkF_AimAtTarget,
67 	thinkF_func_timer_think,
68 	thinkF_NPC_RemoveBody,
69 	thinkF_Disappear,
70 	thinkF_NPC_Think,
71 	thinkF_NPC_Spawn_Go,
72 	thinkF_NPC_Begin,
73 	thinkF_moverCallback,
74 	thinkF_anglerCallback,
75 	thinkF_RemoveOwner,
76 	thinkF_MakeOwnerInvis,
77 	thinkF_MakeOwnerEnergy,
78 	thinkF_transporter_stream_think,
79 	thinkF_func_usable_think,
80 	thinkF_misc_dlight_think,
81 	thinkF_health_think,
82 	thinkF_ammo_think,
83 	thinkF_trigger_teleporter_find_closest_portal,
84 	thinkF_thermalDetonatorExplode,
85 	thinkF_WP_ThermalThink,
86 	thinkF_trigger_hurt_reset,
87 	thinkF_turret_base_think,
88 	thinkF_turret_head_think,
89 	thinkF_HS_Think,
90 	thinkF_laser_arm_fire,
91 	thinkF_laser_arm_start,
92 	thinkF_trigger_visible_check_player_visibility,
93 	thinkF_target_relay_use_go,
94 	thinkF_trigger_cleared_fire,
95 	thinkF_MoveOwner,
96 	thinkF_SolidifyOwner,
97 	thinkF_cycleCamera,
98 	thinkF_spawn_ammo_crystal_trigger,
99 	thinkF_NPC_ShySpawn,
100 	thinkF_func_wait_return_solid,
101 	thinkF_InflateOwner,
102 	thinkF_mega_ammo_think,
103 	thinkF_misc_replicator_item_finish_spawn,
104 	thinkF_fx_runner_link,
105 	thinkF_fx_runner_think,
106 	thinkF_fx_rain_think,		// cdr added
107 	thinkF_removeBoltSurface,
108 	thinkF_set_MiscAnim,
109 	thinkF_LimbThink,
110 	thinkF_laserTrapThink,
111 	thinkF_TieFighterThink,
112 	thinkF_TieBomberThink,
113 	thinkF_rocketThink,
114 	thinkF_prox_mine_think,
115 	thinkF_emplaced_blow,
116 	thinkF_WP_Explode,
117 	thinkF_pas_think,	//personal assault sentry
118 	thinkF_ion_cannon_think,
119 	thinkF_maglock_link,
120 	thinkF_WP_flechette_alt_blow,
121 	thinkF_WP_prox_mine_think,
122 	thinkF_camera_aim,
123 	thinkF_fx_explosion_trail_link,
124 	thinkF_fx_explosion_trail_think,
125 	thinkF_fx_target_beam_link,
126 	thinkF_fx_target_beam_think,
127 	thinkF_spotlight_think,
128 	thinkF_spotlight_link,
129 	thinkF_trigger_push_checkclear,
130 	thinkF_DEMP2_AltDetonate,
131 	thinkF_DEMP2_AltRadiusDamage,
132 	thinkF_panel_turret_think,
133 	thinkF_welder_think,
134 	thinkF_gas_random_jet,
135 	thinkF_poll_converter,
136 	thinkF_spawn_rack_goods,
137 	thinkF_misc_weapon_shooter_aim,
138 	thinkF_misc_weapon_shooter_fire,
139 	thinkF_beacon_think,
140 	thinkF_NoghriGasCloudThink,
141 
142 	//rww - added for sky portals
143 	thinkF_G_PortalifyEntities,
144 
145 } thinkFunc_t;
146 
147 // THINK functions...
148 //
149 extern void teleporter_think	( gentity_t *ent );
150 extern void funcBBrushDieGo		( gentity_t *ent );
151 extern void ExplodeDeath		( gentity_t *ent );
152 extern void RespawnItem			( gentity_t *ent );
153 extern void G_FreeEntity		( gentity_t *ent );
154 extern void FinishSpawningItem	( gentity_t *ent );
155 extern void locateCamera		( gentity_t *ent );
156 extern void G_RunObject			( gentity_t *ent );
157 extern void ReturnToPos1		( gentity_t *ent );
158 extern void Use_BinaryMover_Go	( gentity_t *ent );
159 extern void Think_MatchTeam		( gentity_t *ent );
160 extern void Think_MatchTeam		( gentity_t *ent );
161 extern void Think_BeginMoving	( gentity_t *ent );
162 extern void Think_SetupTrainTargets	( gentity_t *ent );
163 extern void Think_SpawnNewDoorTrigger	( gentity_t *ent );
164 extern void ref_link			( gentity_t *ent );
165 extern void Think_Target_Delay	( gentity_t *ent );
166 extern void target_laser_think	( gentity_t *ent );
167 extern void target_laser_start	( gentity_t *ent );
168 extern void target_location_linkup	( gentity_t *ent );
169 extern void scriptrunner_run	( gentity_t *ent );
170 extern void multi_wait			( gentity_t *ent );
171 extern void multi_trigger_run	( gentity_t *ent );
172 extern void trigger_always_think	( gentity_t *ent );
173 extern void AimAtTarget			( gentity_t *ent );
174 extern void func_timer_think	( gentity_t *ent );
175 extern void NPC_RemoveBody		( gentity_t *ent );
176 extern void Disappear			( gentity_t *ent );
177 extern void NPC_Think			( gentity_t *ent );
178 extern void NPC_Spawn_Go		( gentity_t *ent );
179 extern void NPC_Begin			( gentity_t *ent );
180 extern void moverCallback		( gentity_t *ent );
181 extern void anglerCallback		( gentity_t *ent );
182 extern void RemoveOwner			( gentity_t *ent );
183 extern void MakeOwnerInvis		( gentity_t *ent );
184 extern void MakeOwnerEnergy		( gentity_t *ent );
185 extern void func_usable_think	( gentity_t *self );
186 extern void misc_dlight_think	( gentity_t *ent );
187 extern void laser_link				( gentity_t *ent );
188 extern void blow_chunks_link		( gentity_t *ent );
189 extern void health_think			( gentity_t *ent );
190 extern void ammo_think				( gentity_t *ent );
191 extern void trigger_teleporter_find_closest_portal ( gentity_t *self );
192 extern void thermalDetonatorExplode	( gentity_t *ent );
193 extern void WP_ThermalThink			( gentity_t *ent );
194 extern void trigger_hurt_reset		( gentity_t *self );
195 extern void turret_base_think		( gentity_t *self );
196 extern void turret_head_think		( gentity_t *self );
197 extern void laser_arm_fire			( gentity_t *ent );
198 extern void laser_arm_start			( gentity_t *base );
199 extern void trigger_visible_check_player_visibility	( gentity_t *self );
200 extern void target_relay_use_go		( gentity_t *self );
201 extern void trigger_cleared_fire	( gentity_t *self );
202 extern void MoveOwner				( gentity_t *self );
203 extern void SolidifyOwner			( gentity_t *self );
204 extern void cycleCamera				( gentity_t *self );
205 extern void spawn_ammo_crystal_trigger	( gentity_t *ent );
206 extern void NPC_ShySpawn			( gentity_t *ent );
207 extern void func_wait_return_solid	( gentity_t *self );
208 extern void InflateOwner			( gentity_t *self );
209 extern void mega_ammo_think			( gentity_t *self );
210 extern void misc_replicator_item_finish_spawn( gentity_t *self );
211 extern void fx_runner_link			( gentity_t *self );
212 extern void fx_runner_think			( gentity_t *self );
213 extern void fx_rain_think			( gentity_t *self );
214 extern void set_MiscAnim			( gentity_t *self);
215 extern void removeBoltSurface		( gentity_t *self);
216 extern void LimbThink				( gentity_t *ent );
217 extern void laserTrapThink			( gentity_t *self );
218 extern void TieFighterThink			( gentity_t *self );
219 extern void TieBomberThink			( gentity_t *self );
220 extern void rocketThink				( gentity_t *ent );
221 extern void prox_mine_think			( gentity_t *ent );
222 extern void emplaced_blow			( gentity_t *self );
223 extern void WP_Explode				( gentity_t *self );
224 extern void pas_think				( gentity_t *self );
225 extern void ion_cannon_think		( gentity_t *self );
226 extern void maglock_link			( gentity_t *self );
227 extern void WP_flechette_alt_blow	( gentity_t *self );
228 extern void WP_prox_mine_think		( gentity_t *self );
229 extern void camera_aim				( gentity_t *self );
230 extern void fx_explosion_trail_link	( gentity_t *self );
231 extern void fx_explosion_trail_think( gentity_t *self );
232 extern void fx_target_beam_link		( gentity_t *self );
233 extern void fx_target_beam_think	( gentity_t *self );
234 extern void spotlight_think			( gentity_t *self );
235 extern void spotlight_link			( gentity_t *self );
236 extern void trigger_push_checkclear	( gentity_t *self );
237 extern void DEMP2_AltDetonate		( gentity_t *self );
238 extern void DEMP2_AltRadiusDamage	( gentity_t *self );
239 extern void panel_turret_think		( gentity_t *self );
240 extern void welder_think			( gentity_t *self );
241 extern void gas_random_jet			( gentity_t *self );
242 extern void poll_converter			( gentity_t *self );
243 extern void spawn_rack_goods		( gentity_t *self );
244 extern void NoghriGasCloudThink		( gentity_t *self );
245 
246 extern void G_PortalifyEntities		( gentity_t *ent );
247 extern void misc_weapon_shooter_aim	( gentity_t *self );
248 extern void misc_weapon_shooter_fire( gentity_t *self );
249 
250 extern void beacon_think			( gentity_t *self );
251 
252 
253 //	void		(*clThink)(centity_s *cent);	//Think func for equivalent centity
254 typedef enum
255 {
256 	clThinkF_NULL = 0,
257 	//
258 	clThinkF_CG_DLightThink,
259 	clThinkF_CG_MatrixEffect,
260 	clThinkF_CG_Limb,
261 
262 } clThinkFunc_t;
263 
264 // CEntity THINK functions...
265 //
266 extern void CG_DLightThink ( centity_t *cent );
267 extern void CG_MatrixEffect ( centity_t *cent );
268 extern void CG_Limb ( centity_t *cent );
269 
270 //	void		(*reached)(gentity_t *self);	// movers call this when hitting endpoint
271 typedef enum
272 {
273 	reachedF_NULL = 0,
274 	//
275 	reachedF_Reached_BinaryMover,
276 	reachedF_Reached_Train,
277 	reachedF_moverCallback,
278 	reachedF_moveAndRotateCallback
279 
280 } reachedFunc_t;
281 
282 // REACHED functions...
283 //
284 extern void Reached_BinaryMover	( gentity_t *ent );
285 extern void Reached_Train		( gentity_t *ent );
286 extern void moverCallback		( gentity_t *ent );
287 extern void moveAndRotateCallback( gentity_t *ent );
288 
289 
290 //	void		(*blocked)(gentity_t *self, gentity_t *other);
291 typedef enum
292 {
293 	blockedF_NULL = 0,
294 	//
295 	blockedF_Blocked_Door,
296 	blockedF_Blocked_Mover
297 
298 } blockedFunc_t;
299 
300 // BLOCKED functions...
301 //
302 extern void Blocked_Door		(gentity_t *self, gentity_t *other);
303 extern void Blocked_Mover		(gentity_t *self, gentity_t *other);
304 
305 
306 
307 //	void		(*touch)(gentity_t *self, gentity_t *other, trace_t *trace);
308 typedef enum
309 {
310 	touchF_NULL = 0,
311 	//
312 	touchF_Touch_Item,
313 	touchF_teleporter_touch,
314 	touchF_charge_stick,
315 	touchF_Touch_DoorTrigger,
316 	touchF_Touch_PlatCenterTrigger,
317 	touchF_Touch_Plat,
318 	touchF_Touch_Button,
319 	touchF_Touch_Multi,
320 	touchF_trigger_push_touch,
321 	touchF_trigger_teleporter_touch,
322 	touchF_hurt_touch,
323 	touchF_NPC_Touch,
324 	touchF_touch_ammo_crystal_tigger,
325 	touchF_funcBBrushTouch,
326 	touchF_touchLaserTrap,
327 	touchF_prox_mine_stick,
328 	touchF_func_rotating_touch,
329 	touchF_TouchTieBomb,
330 } touchFunc_t;
331 
332 // TOUCH functions...
333 //
334 extern void Touch_Item				(gentity_t *self, gentity_t *other, trace_t *trace);
335 extern void teleporter_touch		(gentity_t *self, gentity_t *other, trace_t *trace);
336 extern void charge_stick			(gentity_t *self, gentity_t *other, trace_t *trace);
337 extern void Touch_DoorTrigger		(gentity_t *self, gentity_t *other, trace_t *trace);
338 extern void Touch_PlatCenterTrigger	(gentity_t *self, gentity_t *other, trace_t *trace);
339 extern void Touch_Plat				(gentity_t *self, gentity_t *other, trace_t *trace);
340 extern void Touch_Button			(gentity_t *self, gentity_t *other, trace_t *trace);
341 extern void Touch_Multi				(gentity_t *self, gentity_t *other, trace_t *trace);
342 extern void trigger_push_touch		(gentity_t *self, gentity_t *other, trace_t *trace);
343 extern void trigger_teleporter_touch(gentity_t *self, gentity_t *other, trace_t *trace);
344 extern void hurt_touch				(gentity_t *self, gentity_t *other, trace_t *trace);
345 extern void NPC_Touch				(gentity_t *self, gentity_t *other, trace_t *trace);
346 extern void touch_ammo_crystal_tigger	( gentity_t *self, gentity_t *other, trace_t *trace );
347 extern void funcBBrushTouch			( gentity_t *ent, gentity_t *other, trace_t *trace );
348 extern void touchLaserTrap	( gentity_t *ent, gentity_t *other, trace_t *trace );
349 extern void prox_mine_stick( gentity_t *self, gentity_t *other, trace_t *trace );
350 extern void func_rotating_touch				(gentity_t *self, gentity_t *other, trace_t *trace);
351 extern void TouchTieBomb( gentity_t *self, gentity_t *other, trace_t *trace );
352 extern void TieFighterUse( gentity_t *self, gentity_t *other, gentity_t *activator );
353 
354 //	void		(*use)(gentity_t *self, gentity_t *other, gentity_t *activator);
355 typedef enum
356 {
357 	useF_NULL = 0,
358 	//
359 	useF_funcBBrushUse,
360 	useF_misc_model_use,
361 	useF_Use_Item,
362 	useF_Use_Shooter,
363 	useF_GoExplodeDeath,
364 	useF_Use_BinaryMover,
365 	useF_use_wall,
366 	useF_Use_Target_Give,
367 	useF_Use_Target_Delay,
368 	useF_Use_Target_Score,
369 	useF_Use_Target_Print,
370 	useF_Use_Target_Speaker,
371 	useF_target_laser_use,
372 	useF_target_relay_use,
373 	useF_target_kill_use,
374 	useF_target_counter_use,
375 	useF_target_random_use,
376 	useF_target_scriptrunner_use,
377 	useF_target_gravity_change_use,
378 	useF_target_friction_change_use,
379 	useF_target_teleporter_use,
380 	useF_Use_Multi,
381 	useF_Use_target_push,
382 	useF_hurt_use,
383 	useF_func_timer_use,
384 	useF_trigger_entdist_use,
385 	useF_func_usable_use,
386 	useF_target_activate_use,
387 	useF_target_deactivate_use,
388 	useF_NPC_Use,
389 	useF_NPC_Spawn,
390 	useF_misc_dlight_use,
391 	useF_health_use,
392 	useF_ammo_use,
393 	useF_mega_ammo_use,
394 	useF_target_level_change_use,
395 	useF_target_change_parm_use,
396 	useF_crew_beam_in_use,
397 	useF_turret_base_use,
398 	useF_laser_arm_use,
399 	useF_func_static_use,
400 	useF_target_play_music_use,
401 	useF_misc_model_useup,
402 	useF_misc_portal_use,
403 	useF_target_autosave_use,
404 	useF_switch_models,
405 	useF_misc_replicator_item_spawn,
406 	useF_misc_replicator_item_remove,
407 	useF_target_secret_use,
408 	useF_func_bobbing_use,
409 	useF_func_rotating_use,
410 	useF_fx_runner_use,
411 	useF_funcGlassUse,
412 	useF_TrainUse,
413 	useF_misc_trip_mine_activate,
414 	useF_emplaced_gun_use,
415 	useF_shield_power_converter_use,
416 	useF_ammo_power_converter_use,
417 	useF_bomb_planted_use,
418 	useF_beacon_use,
419 	useF_security_panel_use,
420 	useF_ion_cannon_use,
421 	useF_camera_use,
422 	useF_fx_explosion_trail_use,
423 	useF_fx_target_beam_use,
424 	useF_sentry_use,
425 	useF_spotlight_use,
426 	useF_misc_atst_use,
427 	useF_panel_turret_use,
428 	useF_welder_use,
429 	useF_jabba_cam_use,
430 	useF_misc_use,
431 	useF_pas_use,
432 	useF_item_spawn_use,
433 	useF_NPC_VehicleSpawnUse,
434 	useF_misc_weapon_shooter_use,
435 	useF_eweb_use,
436 	useF_TieFighterUse,
437 } useFunc_t;
438 
439 // USE functions...
440 //
441 extern void funcBBrushUse			( gentity_t *self, gentity_t *other, gentity_t *activator);
442 extern void misc_model_use			( gentity_t *self, gentity_t *other, gentity_t *activator);
443 extern void Use_Item				( gentity_t *self, gentity_t *other, gentity_t *activator);
444 extern void Use_Shooter				( gentity_t *self, gentity_t *other, gentity_t *activator);
445 extern void GoExplodeDeath			( gentity_t *self, gentity_t *other, gentity_t *activator);
446 extern void Use_BinaryMover			( gentity_t *self, gentity_t *other, gentity_t *activator);
447 extern void use_wall				( gentity_t *self, gentity_t *other, gentity_t *activator);
448 extern void Use_Target_Give			( gentity_t *self, gentity_t *other, gentity_t *activator);
449 extern void Use_Target_Delay		( gentity_t *self, gentity_t *other, gentity_t *activator);
450 extern void Use_Target_Score		( gentity_t *self, gentity_t *other, gentity_t *activator);
451 extern void Use_Target_Print		( gentity_t *self, gentity_t *other, gentity_t *activator);
452 extern void Use_Target_Speaker		( gentity_t *self, gentity_t *other, gentity_t *activator);
453 extern void target_laser_use		( gentity_t *self, gentity_t *other, gentity_t *activator);
454 extern void target_relay_use		( gentity_t *self, gentity_t *other, gentity_t *activator);
455 extern void target_kill_use			( gentity_t *self, gentity_t *other, gentity_t *activator);
456 extern void target_counter_use		( gentity_t *self, gentity_t *other, gentity_t *activator);
457 extern void target_random_use		( gentity_t *self, gentity_t *other, gentity_t *activator);
458 extern void target_scriptrunner_use	( gentity_t *self, gentity_t *other, gentity_t *activator);
459 extern void target_gravity_change_use	( gentity_t *self, gentity_t *other, gentity_t *activator);
460 extern void target_friction_change_use	( gentity_t *self, gentity_t *other, gentity_t *activator);
461 extern void target_teleporter_use	( gentity_t *self, gentity_t *other, gentity_t *activator);
462 extern void Use_Multi				( gentity_t *self, gentity_t *other, gentity_t *activator);
463 extern void Use_target_push			( gentity_t *self, gentity_t *other, gentity_t *activator);
464 extern void hurt_use				( gentity_t *self, gentity_t *other, gentity_t *activator);
465 extern void func_timer_use			( gentity_t *self, gentity_t *other, gentity_t *activator);
466 extern void trigger_entdist_use		( gentity_t *self, gentity_t *other, gentity_t *activator);
467 extern void func_usable_use			( gentity_t *self, gentity_t *other, gentity_t *activator);
468 extern void target_activate_use		( gentity_t *self, gentity_t *other, gentity_t *activator);
469 extern void	target_deactivate_use	( gentity_t *self, gentity_t *other, gentity_t *activator);
470 extern void NPC_Use					( gentity_t *self, gentity_t *other, gentity_t *activator);
471 extern void NPC_Spawn				( gentity_t *self, gentity_t *other, gentity_t *activator);
472 extern void transporter_use			( gentity_t *self, gentity_t *other, gentity_t *activator);
473 extern void teleporter_use			( gentity_t *self, gentity_t *other, gentity_t *activator);
474 extern void misc_dlight_use			( gentity_t *ent, gentity_t *other, gentity_t *activator );
475 extern void health_use				( gentity_t *self, gentity_t *other, gentity_t *activator );
476 extern void ammo_use				( gentity_t *self, gentity_t *other, gentity_t *activator );
477 extern void mega_ammo_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
478 extern void target_level_change_use	( gentity_t *self, gentity_t *other, gentity_t *activator );
479 extern void target_change_parm_use	( gentity_t *self, gentity_t *other, gentity_t *activator );
480 extern void turret_base_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
481 extern void laser_arm_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
482 extern void func_static_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
483 extern void target_play_music_use	( gentity_t *self, gentity_t *other, gentity_t *activator );
484 extern void misc_model_useup		( gentity_t *self, gentity_t *other, gentity_t *activator );
485 extern void misc_portal_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
486 extern void target_autosave_use 	( gentity_t *self, gentity_t *other, gentity_t *activator );
487 extern void switch_models			( gentity_t *self, gentity_t *other, gentity_t *activator );
488 extern void misc_replicator_item_spawn ( gentity_t *self, gentity_t *other, gentity_t *activator );
489 extern void misc_replicator_item_remove ( gentity_t *self, gentity_t *other, gentity_t *activator );
490 extern void target_secret_use		( gentity_t *self, gentity_t *other, gentity_t *activator );
491 extern void func_bobbing_use		( gentity_t *self, gentity_t *other, gentity_t *activator );
492 extern void func_rotating_use		( gentity_t *self, gentity_t *other, gentity_t *activator );
493 extern void fx_runner_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
494 extern void funcGlassUse			( gentity_t *self, gentity_t *other, gentity_t *activator );
495 extern void TrainUse				( gentity_t *ent, gentity_t *other, gentity_t *activator );
496 extern void misc_trip_mine_activate	( gentity_t *self, gentity_t *other, gentity_t *activator );
497 extern void emplaced_gun_use		( gentity_t *self, gentity_t *other, gentity_t *activator );
498 extern void shield_power_converter_use( gentity_t *self, gentity_t *other, gentity_t *activator );
499 extern void ammo_power_converter_use( gentity_t *self, gentity_t *other, gentity_t *activator );
500 extern void bomb_planted_use		( gentity_t *self, gentity_t *other, gentity_t *activator );
501 extern void beacon_use				( gentity_t *self, gentity_t *other, gentity_t *activator );
502 extern void security_panel_use		( gentity_t *self, gentity_t *other, gentity_t *activator );
503 extern void ion_cannon_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
504 extern void camera_use				( gentity_t *self, gentity_t *other, gentity_t *activator );
505 extern void fx_explosion_trail_use	( gentity_t *self, gentity_t *other, gentity_t *activator );
506 extern void fx_target_beam_use		( gentity_t *self, gentity_t *other, gentity_t *activator );
507 extern void sentry_use				( gentity_t *self, gentity_t *other, gentity_t *activator );
508 extern void spotlight_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
509 extern void misc_atst_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
510 extern void panel_turret_use		( gentity_t *self, gentity_t *other, gentity_t *activator );
511 extern void welder_use				( gentity_t *self, gentity_t *other, gentity_t *activator );
512 extern void jabba_cam_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
513 extern void misc_use				( gentity_t *self, gentity_t *other, gentity_t *activator );
514 extern void pas_use					( gentity_t *self, gentity_t *other, gentity_t *activator );
515 extern void item_spawn_use			( gentity_t *self, gentity_t *other, gentity_t *activator );
516 extern void NPC_VehicleSpawnUse		( gentity_t *self, gentity_t *other, gentity_t *activator );
517 extern void misc_weapon_shooter_use	( gentity_t *self, gentity_t *other, gentity_t *activator );
518 extern void eweb_use				( gentity_t *self, gentity_t *other, gentity_t *activator );
519 
520 //	void		(*pain)(gentity_t *self, gentity_t *attacker, int damage,int mod,int hitLoc);
521 typedef enum
522 {
523 	painF_NULL = 0,
524 	//
525 	painF_funcBBrushPain,
526 	painF_misc_model_breakable_pain,
527 	painF_NPC_Pain,
528 	painF_station_pain,
529 	painF_func_usable_pain,
530 	painF_NPC_ATST_Pain,
531 	painF_NPC_ST_Pain,
532 	painF_NPC_Jedi_Pain,
533 	painF_NPC_Droid_Pain,
534 	painF_NPC_Probe_Pain,
535 	painF_NPC_MineMonster_Pain,
536 	painF_NPC_Howler_Pain,
537 	painF_NPC_Rancor_Pain,
538 	painF_NPC_Wampa_Pain,
539 	painF_NPC_SandCreature_Pain,
540 	painF_NPC_Seeker_Pain,
541 	painF_NPC_Remote_Pain,
542 	painF_emplaced_gun_pain,
543 	painF_NPC_Mark1_Pain,
544 	painF_NPC_GM_Pain,
545 	painF_NPC_Sentry_Pain,
546 	painF_NPC_Mark2_Pain,
547 	painF_PlayerPain,
548 	painF_GasBurst,
549 	painF_CrystalCratePain,
550 	painF_TurretPain,
551 	painF_eweb_pain,
552 } painFunc_t;
553 
554 // PAIN functions...
555 //
556 extern void funcBBrushPain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
557 extern void misc_model_breakable_pain	(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
558 extern void NPC_Pain					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
559 extern void station_pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
560 extern void func_usable_pain			(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
561 extern void NPC_ATST_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
562 extern void NPC_ST_Pain					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
563 extern void NPC_Jedi_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
564 extern void NPC_Droid_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
565 extern void NPC_Probe_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
566 extern void NPC_MineMonster_Pain		(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
567 extern void NPC_Howler_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
568 extern void NPC_Rancor_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
569 extern void NPC_Wampa_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
570 extern void NPC_SandCreature_Pain		(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
571 extern void NPC_Seeker_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
572 extern void NPC_Remote_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
573 extern void emplaced_gun_pain			(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
574 extern void NPC_Mark1_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
575 extern void NPC_Sentry_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
576 extern void NPC_Mark2_Pain				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
577 extern void PlayerPain					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
578 extern void GasBurst					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod, int hitLoc=HL_NONE );
579 extern void CrystalCratePain			(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod, int hitLoc=HL_NONE);
580 extern void TurretPain					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod, int hitLoc=HL_NONE );
581 extern void eweb_pain					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
582 
583 //	void		(*die)(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod);
584 typedef enum
585 {
586 	dieF_NULL = 0,
587 	//
588 	dieF_funcBBrushDie,
589 	dieF_misc_model_breakable_die,
590 	dieF_misc_model_cargo_die,
591 	dieF_func_train_die,
592 	dieF_player_die,
593 	dieF_ExplodeDeath_Wait,
594 	dieF_ExplodeDeath,
595 	dieF_func_usable_die,
596 	dieF_turret_die,
597 	dieF_funcGlassDie,
598 //	dieF_laserTrapDelayedExplode,
599 	dieF_emplaced_gun_die,
600 	dieF_WP_ExplosiveDie,
601 	dieF_ion_cannon_die,
602 	dieF_maglock_die,
603 	dieF_camera_die,
604 	dieF_Mark1_die,
605 	dieF_Interrogator_die,
606 	dieF_misc_atst_die,
607 	dieF_misc_panel_turret_die,
608 	dieF_thermal_die,
609 	dieF_eweb_die,
610 } dieFunc_t;
611 
612 // DIE functions...
613 //
614 extern void funcBBrushDie				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
615 extern void misc_model_breakable_die	(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
616 extern void misc_model_cargo_die		(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
617 extern void func_train_die				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
618 extern void player_die					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
619 extern void ExplodeDeath_Wait			(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
620 extern void ExplodeDeath				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
621 extern void func_usable_die				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
622 extern void turret_die					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
623 extern void funcGlassDie				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
624 extern void laserTrapDelayedExplode		(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
625 extern void emplaced_gun_die			(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
626 extern void WP_ExplosiveDie				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
627 extern void ion_cannon_die				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
628 extern void maglock_die					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
629 extern void camera_die					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
630 extern void Mark1_die					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
631 extern void Interrogator_die			(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
632 extern void misc_atst_die				(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
633 extern void misc_panel_turret_die		(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
634 extern void thermal_die					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
635 extern void eweb_die					(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
636 
637 void GEntity_ThinkFunc(gentity_t *self);
638 void CEntity_ThinkFunc(centity_s *cent);	//Think func for equivalent centity
639 void GEntity_ReachedFunc(gentity_t *self);	// movers call this when hitting endpoint
640 void GEntity_BlockedFunc(gentity_t *self, gentity_t *other);
641 void GEntity_TouchFunc(gentity_t *self, gentity_t *other, trace_t *trace);
642 void GEntity_UseFunc(gentity_t *self, gentity_t *other, gentity_t *activator);
643 void GEntity_PainFunc(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc=HL_NONE);
644 void GEntity_DieFunc(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags=0,int hitLoc=HL_NONE);
645 
646 // external functions that I now refer to...
647 
648 
649 #endif	// #ifndef G_FUNCTIONS
650 
651 /////////////////// eof ///////////////////
652 
653