Quake II RTX doxygen  1.0 dev
m_hover.c
Go to the documentation of this file.
1 /*
2 Copyright (C) 1997-2001 Id Software, Inc.
3 
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13 
14 You should have received a copy of the GNU General Public License along
15 with this program; if not, write to the Free Software Foundation, Inc.,
16 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 */
18 /*
19 ==============================================================================
20 
21 hover
22 
23 ==============================================================================
24 */
25 
26 #include "g_local.h"
27 #include "m_hover.h"
28 
29 qboolean visible(edict_t *self, edict_t *other);
30 
31 
32 static int sound_pain1;
33 static int sound_pain2;
34 static int sound_death1;
35 static int sound_death2;
36 static int sound_sight;
37 static int sound_search1;
38 static int sound_search2;
39 
40 
41 void hover_sight(edict_t *self, edict_t *other)
42 {
43  gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
44 }
45 
46 void hover_search(edict_t *self)
47 {
48  if (random() < 0.5)
49  gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NORM, 0);
50  else
51  gi.sound(self, CHAN_VOICE, sound_search2, 1, ATTN_NORM, 0);
52 }
53 
54 
55 void hover_run(edict_t *self);
56 void hover_stand(edict_t *self);
57 void hover_dead(edict_t *self);
58 void hover_attack(edict_t *self);
59 void hover_reattack(edict_t *self);
60 void hover_fire_blaster(edict_t *self);
61 void hover_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
62 
64  { ai_stand, 0, NULL },
65  { ai_stand, 0, NULL },
66  { ai_stand, 0, NULL },
67  { ai_stand, 0, NULL },
68  { ai_stand, 0, NULL },
69  { ai_stand, 0, NULL },
70  { ai_stand, 0, NULL },
71  { ai_stand, 0, NULL },
72  { ai_stand, 0, NULL },
73  { ai_stand, 0, NULL },
74  { ai_stand, 0, NULL },
75  { ai_stand, 0, NULL },
76  { ai_stand, 0, NULL },
77  { ai_stand, 0, NULL },
78  { ai_stand, 0, NULL },
79  { ai_stand, 0, NULL },
80  { ai_stand, 0, NULL },
81  { ai_stand, 0, NULL },
82  { ai_stand, 0, NULL },
83  { ai_stand, 0, NULL },
84  { ai_stand, 0, NULL },
85  { ai_stand, 0, NULL },
86  { ai_stand, 0, NULL },
87  { ai_stand, 0, NULL },
88  { ai_stand, 0, NULL },
89  { ai_stand, 0, NULL },
90  { ai_stand, 0, NULL },
91  { ai_stand, 0, NULL },
92  { ai_stand, 0, NULL },
93  { ai_stand, 0, NULL }
94 };
96 
98  { ai_move, 0, NULL },
99  { ai_move, 0, NULL },
100  { ai_move, 0, NULL },
101  { ai_move, 0, NULL },
102  { ai_move, 0, NULL },
103  { ai_move, 0, NULL },
104  { ai_move, 0, NULL },
105  { ai_move, 0, NULL },
106  { ai_move, 0, NULL }
107 };
109 
111  { ai_move, 0, NULL },
112  { ai_move, 0, NULL },
113  { ai_move, 0, NULL },
114  { ai_move, 0, NULL },
115  { ai_move, 0, NULL },
116  { ai_move, 0, NULL },
117  { ai_move, 0, NULL },
118  { ai_move, 0, NULL }
119 };
121 
123  { ai_move, 0, NULL },
124  { ai_move, -2, NULL },
125  { ai_move, 5, NULL },
126  { ai_move, -1, NULL },
127  { ai_move, 1, NULL },
128  { ai_move, 0, NULL },
129  { ai_move, 0, NULL },
130  { ai_move, -1, NULL },
131  { ai_move, -1, NULL },
132  { ai_move, -1, NULL },
133  { ai_move, 0, NULL },
134  { ai_move, 2, NULL },
135  { ai_move, 2, NULL },
136  { ai_move, 1, NULL },
137  { ai_move, 1, NULL },
138  { ai_move, -6, NULL },
139  { ai_move, -9, NULL },
140  { ai_move, 1, NULL },
141  { ai_move, 0, NULL },
142  { ai_move, 2, NULL },
143  { ai_move, 2, NULL },
144  { ai_move, 1, NULL },
145  { ai_move, 1, NULL },
146  { ai_move, 1, NULL },
147  { ai_move, 2, NULL },
148  { ai_move, 0, NULL },
149  { ai_move, 2, NULL },
150  { ai_move, 3, NULL },
151  { ai_move, 2, NULL },
152  { ai_move, 0, NULL }
153 };
155 
157  { ai_move, 0, NULL },
158  { ai_move, 0, NULL },
159  { ai_move, 0, NULL },
160  { ai_move, 0, NULL },
161  { ai_move, 0, NULL },
162  { ai_move, 0, NULL },
163  { ai_move, 0, NULL },
164  { ai_move, 0, NULL },
165  { ai_move, 0, NULL }
166 };
168 
170  { ai_move, 0, NULL },
171  { ai_move, 0, NULL },
172  { ai_move, 0, NULL },
173  { ai_move, 0, NULL },
174  { ai_move, 0, NULL },
175  { ai_move, 0, NULL },
176  { ai_move, 0, NULL },
177  { ai_move, 0, NULL },
178  { ai_move, 0, NULL },
179  { ai_move, 0, NULL },
180  { ai_move, 0, NULL },
181  { ai_move, 0, NULL }
182 };
184 
186  { ai_move, 0, NULL },
187  { ai_move, 0, NULL },
188  { ai_move, 2, NULL },
189  { ai_move, -8, NULL },
190  { ai_move, -4, NULL },
191  { ai_move, -6, NULL },
192  { ai_move, -4, NULL },
193  { ai_move, -3, NULL },
194  { ai_move, 1, NULL },
195  { ai_move, 0, NULL },
196  { ai_move, 0, NULL },
197  { ai_move, 0, NULL },
198  { ai_move, 3, NULL },
199  { ai_move, 1, NULL },
200  { ai_move, 0, NULL },
201  { ai_move, 2, NULL },
202  { ai_move, 3, NULL },
203  { ai_move, 2, NULL },
204  { ai_move, 7, NULL },
205  { ai_move, 1, NULL },
206  { ai_move, 0, NULL },
207  { ai_move, 0, NULL },
208  { ai_move, 2, NULL },
209  { ai_move, 0, NULL },
210  { ai_move, 0, NULL },
211  { ai_move, 5, NULL },
212  { ai_move, 3, NULL },
213  { ai_move, 4, NULL }
214 };
216 
218  { ai_move, 0, NULL }
219 };
221 
223  { ai_move, 0, NULL },
224  { ai_move, 0, NULL },
225  { ai_move, 0, NULL },
226  { ai_move, 0, NULL },
227  { ai_move, 0, NULL },
228  { ai_move, 0, NULL },
229  { ai_move, 0, NULL },
230  { ai_move, 0, NULL },
231  { ai_move, 0, NULL },
232  { ai_move, 0, NULL },
233  { ai_move, 0, NULL },
234  { ai_move, 0, NULL },
235  { ai_move, 0, NULL },
236  { ai_move, 0, NULL },
237  { ai_move, 0, NULL },
238  { ai_move, 0, NULL },
239  { ai_move, 0, NULL },
240  { ai_move, 0, NULL },
241  { ai_move, 0, NULL },
242  { ai_move, 0, NULL },
243  { ai_move, 0, NULL },
244  { ai_move, 0, NULL },
245  { ai_move, 0, NULL },
246  { ai_move, 0, NULL },
247  { ai_move, 0, NULL },
248  { ai_move, 0, NULL },
249  { ai_move, 0, NULL },
250  { ai_move, 0, NULL },
251  { ai_move, 0, NULL },
252  { ai_move, 0, NULL },
253  { ai_move, 0, NULL },
254  { ai_move, 0, NULL },
255  { ai_move, 0, NULL },
256  { ai_move, 0, NULL },
257  { ai_move, 0, NULL }
258 };
260 
262  { ai_walk, 4, NULL },
263  { ai_walk, 4, NULL },
264  { ai_walk, 4, NULL },
265  { ai_walk, 4, NULL },
266  { ai_walk, 4, NULL },
267  { ai_walk, 4, NULL },
268  { ai_walk, 4, NULL },
269  { ai_walk, 4, NULL },
270  { ai_walk, 4, NULL },
271  { ai_walk, 4, NULL },
272  { ai_walk, 4, NULL },
273  { ai_walk, 4, NULL },
274  { ai_walk, 4, NULL },
275  { ai_walk, 4, NULL },
276  { ai_walk, 4, NULL },
277  { ai_walk, 4, NULL },
278  { ai_walk, 4, NULL },
279  { ai_walk, 4, NULL },
280  { ai_walk, 4, NULL },
281  { ai_walk, 4, NULL },
282  { ai_walk, 4, NULL },
283  { ai_walk, 4, NULL },
284  { ai_walk, 4, NULL },
285  { ai_walk, 4, NULL },
286  { ai_walk, 4, NULL },
287  { ai_walk, 4, NULL },
288  { ai_walk, 4, NULL },
289  { ai_walk, 4, NULL },
290  { ai_walk, 4, NULL },
291  { ai_walk, 4, NULL },
292  { ai_walk, 4, NULL },
293  { ai_walk, 4, NULL },
294  { ai_walk, 4, NULL },
295  { ai_walk, 4, NULL },
296  { ai_walk, 4, NULL }
297 };
299 
301  { ai_run, 10, NULL },
302  { ai_run, 10, NULL },
303  { ai_run, 10, NULL },
304  { ai_run, 10, NULL },
305  { ai_run, 10, NULL },
306  { ai_run, 10, NULL },
307  { ai_run, 10, NULL },
308  { ai_run, 10, NULL },
309  { ai_run, 10, NULL },
310  { ai_run, 10, NULL },
311  { ai_run, 10, NULL },
312  { ai_run, 10, NULL },
313  { ai_run, 10, NULL },
314  { ai_run, 10, NULL },
315  { ai_run, 10, NULL },
316  { ai_run, 10, NULL },
317  { ai_run, 10, NULL },
318  { ai_run, 10, NULL },
319  { ai_run, 10, NULL },
320  { ai_run, 10, NULL },
321  { ai_run, 10, NULL },
322  { ai_run, 10, NULL },
323  { ai_run, 10, NULL },
324  { ai_run, 10, NULL },
325  { ai_run, 10, NULL },
326  { ai_run, 10, NULL },
327  { ai_run, 10, NULL },
328  { ai_run, 10, NULL },
329  { ai_run, 10, NULL },
330  { ai_run, 10, NULL },
331  { ai_run, 10, NULL },
332  { ai_run, 10, NULL },
333  { ai_run, 10, NULL },
334  { ai_run, 10, NULL },
335  { ai_run, 10, NULL }
336 };
338 
340  { ai_move, 0, NULL },
341  { ai_move, 0, NULL },
342  { ai_move, 0, NULL },
343  { ai_move, 0, NULL },
344  { ai_move, 0, NULL },
345  { ai_move, 0, NULL },
346  { ai_move, -10, NULL },
347  { ai_move, 3, NULL },
348  { ai_move, 5, NULL },
349  { ai_move, 4, NULL },
350  { ai_move, 7, NULL }
351 };
353 
355  { ai_move, 0, NULL },
356  { ai_move, 0, NULL },
357  { ai_move, 0, NULL },
358  { ai_move, 0, NULL },
359  { ai_move, 0, NULL },
360  { ai_move, 0, NULL },
361  { ai_move, 0, NULL },
362  { ai_move, 0, NULL },
363  { ai_move, 0, NULL },
364  { ai_move, 0, NULL },
365  { ai_move, 0, NULL },
366  { ai_move, 0, NULL },
367  { ai_move, 0, NULL },
368  { ai_move, 0, NULL },
369  { ai_move, 0, NULL },
370  { ai_move, 0, NULL },
371  { ai_move, 0, NULL },
372  { ai_move, 0, NULL },
373  { ai_move, 0, NULL },
374  { ai_move, 0, NULL },
375  { ai_move, 0, NULL },
376  { ai_move, 0, NULL },
377  { ai_move, 0, NULL },
378  { ai_move, 0, NULL }
379 };
381 
383  { ai_charge, 1, NULL },
384  { ai_charge, 1, NULL },
385  { ai_charge, 1, NULL }
386 };
388 
390  { ai_charge, -10, hover_fire_blaster },
391  { ai_charge, -10, hover_fire_blaster },
392  { ai_charge, 0, hover_reattack },
393 };
395 
396 
398  { ai_charge, 1, NULL },
399  { ai_charge, 1, NULL }
400 };
402 
403 void hover_reattack(edict_t *self)
404 {
405  if (self->enemy->health > 0)
406  if (visible(self, self->enemy))
407  if (random() <= 0.6) {
408  self->monsterinfo.currentmove = &hover_move_attack1;
409  return;
410  }
411  self->monsterinfo.currentmove = &hover_move_end_attack;
412 }
413 
414 
415 void hover_fire_blaster(edict_t *self)
416 {
417  vec3_t start;
418  vec3_t forward, right;
419  vec3_t end;
420  vec3_t dir;
421  int effect;
422 
423  if (self->s.frame == FRAME_attak104)
424  effect = EF_HYPERBLASTER;
425  else
426  effect = 0;
427 
428  AngleVectors(self->s.angles, forward, right, NULL);
429  G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_HOVER_BLASTER_1], forward, right, start);
430 
431  VectorCopy(self->enemy->s.origin, end);
432  end[2] += self->enemy->viewheight;
433  VectorSubtract(end, start, dir);
434 
435  monster_fire_blaster(self, start, dir, 1, 1000, MZ2_HOVER_BLASTER_1, effect);
436 }
437 
438 
439 void hover_stand(edict_t *self)
440 {
441  self->monsterinfo.currentmove = &hover_move_stand;
442 }
443 
444 void hover_run(edict_t *self)
445 {
446  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
447  self->monsterinfo.currentmove = &hover_move_stand;
448  else
449  self->monsterinfo.currentmove = &hover_move_run;
450 }
451 
452 void hover_walk(edict_t *self)
453 {
454  self->monsterinfo.currentmove = &hover_move_walk;
455 }
456 
457 void hover_start_attack(edict_t *self)
458 {
459  self->monsterinfo.currentmove = &hover_move_start_attack;
460 }
461 
462 void hover_attack(edict_t *self)
463 {
464  self->monsterinfo.currentmove = &hover_move_attack1;
465 }
466 
467 
468 void hover_pain(edict_t *self, edict_t *other, float kick, int damage)
469 {
470  if (self->health < (self->max_health / 2))
471  self->s.skinnum = 1;
472 
473  if (level.time < self->pain_debounce_time)
474  return;
475 
476  self->pain_debounce_time = level.time + 3;
477 
478  if (skill->value == 3)
479  return; // no pain anims in nightmare
480 
481  if (damage <= 25) {
482  if (random() < 0.5) {
483  gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
484  self->monsterinfo.currentmove = &hover_move_pain3;
485  } else {
486  gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
487  self->monsterinfo.currentmove = &hover_move_pain2;
488  }
489  } else {
490  gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
491  self->monsterinfo.currentmove = &hover_move_pain1;
492  }
493 }
494 
495 void hover_deadthink(edict_t *self)
496 {
497  if (!self->groundentity && level.time < self->timestamp) {
498  self->nextthink = level.time + FRAMETIME;
499  return;
500  }
501  BecomeExplosion1(self);
502 }
503 
504 void hover_dead(edict_t *self)
505 {
506  VectorSet(self->mins, -16, -16, -24);
507  VectorSet(self->maxs, 16, 16, -8);
508  self->movetype = MOVETYPE_TOSS;
509  self->think = hover_deadthink;
510  self->nextthink = level.time + FRAMETIME;
511  self->timestamp = level.time + 15;
512  gi.linkentity(self);
513 }
514 
515 void hover_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
516 {
517  int n;
518 
519 // check for gib
520  if (self->health <= self->gib_health) {
521  gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0);
522  for (n = 0; n < 2; n++)
523  ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
524  for (n = 0; n < 2; n++)
525  ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
526  ThrowHead(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
527  self->deadflag = DEAD_DEAD;
528  return;
529  }
530 
531  if (self->deadflag == DEAD_DEAD)
532  return;
533 
534 // regular death
535  if (random() < 0.5)
536  gi.sound(self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0);
537  else
538  gi.sound(self, CHAN_VOICE, sound_death2, 1, ATTN_NORM, 0);
539  self->deadflag = DEAD_DEAD;
540  self->takedamage = DAMAGE_YES;
541  self->monsterinfo.currentmove = &hover_move_death1;
542 }
543 
544 /*QUAKED monster_hover (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
545 */
546 void SP_monster_hover(edict_t *self)
547 {
548  if (deathmatch->value) {
549  G_FreeEdict(self);
550  return;
551  }
552 
553  sound_pain1 = gi.soundindex("hover/hovpain1.wav");
554  sound_pain2 = gi.soundindex("hover/hovpain2.wav");
555  sound_death1 = gi.soundindex("hover/hovdeth1.wav");
556  sound_death2 = gi.soundindex("hover/hovdeth2.wav");
557  sound_sight = gi.soundindex("hover/hovsght1.wav");
558  sound_search1 = gi.soundindex("hover/hovsrch1.wav");
559  sound_search2 = gi.soundindex("hover/hovsrch2.wav");
560 
561  gi.soundindex("hover/hovatck1.wav");
562 
563  self->s.sound = gi.soundindex("hover/hovidle1.wav");
564 
565  self->movetype = MOVETYPE_STEP;
566  self->solid = SOLID_BBOX;
567  self->s.modelindex = gi.modelindex("models/monsters/hover/tris.md2");
568  VectorSet(self->mins, -24, -24, -24);
569  VectorSet(self->maxs, 24, 24, 32);
570 
571  self->health = 240;
572  self->gib_health = -100;
573  self->mass = 150;
574 
575  self->pain = hover_pain;
576  self->die = hover_die;
577 
578  self->monsterinfo.stand = hover_stand;
579  self->monsterinfo.walk = hover_walk;
580  self->monsterinfo.run = hover_run;
581 // self->monsterinfo.dodge = hover_dodge;
582  self->monsterinfo.attack = hover_start_attack;
583  self->monsterinfo.sight = hover_sight;
584  self->monsterinfo.search = hover_search;
585 
586  gi.linkentity(self);
587 
588  self->monsterinfo.currentmove = &hover_move_stand;
589  self->monsterinfo.scale = MODEL_SCALE;
590 
591  flymonster_start(self);
592 }
gi
game_import_t gi
Definition: g_main.c:23
deathmatch
cvar_t * deathmatch
Definition: g_main.c:33
hover_die
void hover_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_hover.c:515
hover_fire_blaster
void hover_fire_blaster(edict_t *self)
Definition: m_hover.c:415
G_ProjectSource
void G_ProjectSource(const vec3_t point, const vec3_t distance, const vec3_t forward, const vec3_t right, vec3_t result)
Definition: g_utils.c:23
FRAME_backwd24
#define FRAME_backwd24
Definition: m_hover.h:218
hover_frames_pain3
mframe_t hover_frames_pain3[]
Definition: m_hover.c:156
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:112
FRAME_pain301
#define FRAME_pain301
Definition: m_actor.h:102
ThrowGib
void ThrowGib(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:130
hover_sight
void hover_sight(edict_t *self, edict_t *other)
Definition: m_hover.c:41
hover_move_death1
mmove_t hover_move_death1
Definition: m_hover.c:352
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:175
hover_move_forward
mmove_t hover_move_forward
Definition: m_hover.c:259
hover_move_pain3
mmove_t hover_move_pain3
Definition: m_hover.c:167
FRAME_pain309
#define FRAME_pain309
Definition: m_boss31.h:117
hover_frames_pain1
mframe_t hover_frames_pain1[]
Definition: m_hover.c:185
FRAMETIME
#define FRAMETIME
Definition: g_local.h:75
hover_move_attack1
mmove_t hover_move_attack1
Definition: m_hover.c:394
hover_move_backward
mmove_t hover_move_backward
Definition: m_hover.c:380
FRAME_backwd01
#define FRAME_backwd01
Definition: m_hover.h:195
FRAME_takeof30
#define FRAME_takeof30
Definition: m_hover.h:133
FRAME_stand01
#define FRAME_stand01
Definition: m_boss31.h:134
sound_death1
static int sound_death1
Definition: m_hover.c:34
hover_move_start_attack
mmove_t hover_move_start_attack
Definition: m_hover.c:387
FRAME_death101
#define FRAME_death101
Definition: m_actor.h:26
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:126
hover_frames_stop2
mframe_t hover_frames_stop2[]
Definition: m_hover.c:110
sound_pain1
static int sound_pain1
Definition: m_hover.c:32
FRAME_takeof01
#define FRAME_takeof01
Definition: m_hover.h:104
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:504
SP_monster_hover
void SP_monster_hover(edict_t *self)
Definition: m_hover.c:546
BecomeExplosion1
void BecomeExplosion1(edict_t *self)
Definition: g_misc.c:297
FRAME_pain212
#define FRAME_pain212
Definition: m_hover.h:174
hover_move_stand
mmove_t hover_move_stand
Definition: m_hover.c:95
DAMAGE_YES
@ DAMAGE_YES
Definition: g_local.h:88
hover_frames_pain2
mframe_t hover_frames_pain2[]
Definition: m_hover.c:169
hover_stand
void hover_stand(edict_t *self)
Definition: m_hover.c:439
hover_frames_run
mframe_t hover_frames_run[]
Definition: m_hover.c:300
other
@ other
Definition: ogg.c:63
FRAME_stop208
#define FRAME_stop208
Definition: m_hover.h:103
FRAME_pain101
#define FRAME_pain101
Definition: m_actor.h:96
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:192
m_hover.h
FRAME_attak107
#define FRAME_attak107
Definition: m_boss31.h:28
FRAME_stop201
#define FRAME_stop201
Definition: m_hover.h:96
FRAME_stop109
#define FRAME_stop109
Definition: m_hover.h:95
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:421
FRAME_attak106
#define FRAME_attak106
Definition: m_boss31.h:27
hover_dead
void hover_dead(edict_t *self)
Definition: m_hover.c:504
hover_move_stop1
mmove_t hover_move_stop1
Definition: m_hover.c:108
FRAME_stand30
#define FRAME_stand30
Definition: m_boss2.h:22
hover_move_takeoff
mmove_t hover_move_takeoff
Definition: m_hover.c:154
hover_frames_takeoff
mframe_t hover_frames_takeoff[]
Definition: m_hover.c:122
FRAME_attak104
#define FRAME_attak104
Definition: m_boss31.h:25
forward
static vec3_t forward
Definition: p_view.c:27
hover_move_run
mmove_t hover_move_run
Definition: m_hover.c:337
hover_frames_forward
mframe_t hover_frames_forward[]
Definition: m_hover.c:222
FRAME_land01
#define FRAME_land01
Definition: m_hover.h:134
mframe_t
Definition: g_local.h:394
FRAME_attak103
#define FRAME_attak103
Definition: m_boss31.h:24
mmove_t
Definition: g_local.h:400
hover_frames_end_attack
mframe_t hover_frames_end_attack[]
Definition: m_hover.c:397
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:148
random
#define random()
Definition: g_local.h:504
hover_frames_backward
mframe_t hover_frames_backward[]
Definition: m_hover.c:354
AngleVectors
void AngleVectors(vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition: shared.c:23
FRAME_forwrd01
#define FRAME_forwrd01
Definition: m_hover.h:52
hover_move_stop2
mmove_t hover_move_stop2
Definition: m_hover.c:120
hover_attack
void hover_attack(edict_t *self)
Definition: m_hover.c:462
sound_search1
static int sound_search1
Definition: m_hover.c:37
hover_run
void hover_run(edict_t *self)
Definition: m_hover.c:444
hover_pain
void hover_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_hover.c:468
hover_frames_land
mframe_t hover_frames_land[]
Definition: m_hover.c:217
hover_move_pain1
mmove_t hover_move_pain1
Definition: m_hover.c:215
FRAME_forwrd35
#define FRAME_forwrd35
Definition: m_hover.h:86
skill
cvar_t * skill
Definition: g_main.c:36
hover_frames_walk
mframe_t hover_frames_walk[]
Definition: m_hover.c:261
hover_move_pain2
mmove_t hover_move_pain2
Definition: m_hover.c:183
hover_reattack
void hover_reattack(edict_t *self)
Definition: m_hover.c:403
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:86
sound_search2
static int sound_search2
Definition: m_hover.c:38
level_locals_t::time
float time
Definition: g_local.h:299
monster_fire_blaster
void monster_fire_blaster(edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect)
Definition: g_monster.c:49
FRAME_attak108
#define FRAME_attak108
Definition: m_boss31.h:29
hover_walk
void hover_walk(edict_t *self)
Definition: m_hover.c:452
visible
qboolean visible(edict_t *self, edict_t *other)
Definition: g_ai.c:268
hover_frames_start_attack
mframe_t hover_frames_start_attack[]
Definition: m_hover.c:382
hover_frames_stand
mframe_t hover_frames_stand[]
Definition: m_hover.c:63
hover_deadthink
void hover_deadthink(edict_t *self)
Definition: m_hover.c:495
right
static vec3_t right
Definition: p_view.c:27
ai_run
void ai_run(edict_t *self, float dist)
Definition: g_ai.c:821
hover_move_end_attack
mmove_t hover_move_end_attack
Definition: m_hover.c:401
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:122
level
level_locals_t level
Definition: g_main.c:22
hover_move_land
mmove_t hover_move_land
Definition: m_hover.c:220
sound_pain2
static int sound_pain2
Definition: m_hover.c:33
monster_flash_offset
const vec3_t monster_flash_offset[256]
Definition: m_flash.c:25
hover_start_attack
void hover_start_attack(edict_t *self)
Definition: m_hover.c:457
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:175
FRAME_pain201
#define FRAME_pain201
Definition: m_actor.h:99
FRAME_death111
#define FRAME_death111
Definition: m_brain.h:155
hover_frames_death1
mframe_t hover_frames_death1[]
Definition: m_hover.c:339
FRAME_pain128
#define FRAME_pain128
Definition: m_hover.h:162
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:194
hover_move_walk
mmove_t hover_move_walk
Definition: m_hover.c:298
hover_frames_stop1
mframe_t hover_frames_stop1[]
Definition: m_hover.c:97
FRAME_stop101
#define FRAME_stop101
Definition: m_hover.h:87
sound_sight
static int sound_sight
Definition: m_hover.c:36
hover_search
void hover_search(edict_t *self)
Definition: m_hover.c:46
sound_death2
static int sound_death2
Definition: m_hover.c:35
hover_frames_attack1
mframe_t hover_frames_attack1[]
Definition: m_hover.c:389
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:100
FRAME_attak101
#define FRAME_attak101
Definition: m_boss31.h:22
g_local.h
flymonster_start
void flymonster_start(edict_t *self)
Definition: g_monster.c:653