vkQuake2 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
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (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.
12 
13 See the GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 
19 */
20 /*
21 ==============================================================================
22 
23 hover
24 
25 ==============================================================================
26 */
27 
28 #include "g_local.h"
29 #include "m_hover.h"
30 
31 qboolean visible (edict_t *self, edict_t *other);
32 
33 
34 static int sound_pain1;
35 static int sound_pain2;
36 static int sound_death1;
37 static int sound_death2;
38 static int sound_sight;
39 static int sound_search1;
40 static int sound_search2;
41 
42 
43 void hover_sight (edict_t *self, edict_t *other)
44 {
45  gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
46 }
47 
48 void hover_search (edict_t *self)
49 {
50  if (random() < 0.5)
51  gi.sound (self, CHAN_VOICE, sound_search1, 1, ATTN_NORM, 0);
52  else
53  gi.sound (self, CHAN_VOICE, sound_search2, 1, ATTN_NORM, 0);
54 }
55 
56 
57 void hover_run (edict_t *self);
58 void hover_stand (edict_t *self);
59 void hover_dead (edict_t *self);
60 void hover_attack (edict_t *self);
61 void hover_reattack (edict_t *self);
62 void hover_fire_blaster (edict_t *self);
63 void hover_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
64 
66 {
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  ai_stand, 0, NULL,
95  ai_stand, 0, NULL,
96  ai_stand, 0, NULL
97 };
99 
101 {
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  ai_move, 0, NULL,
108  ai_move, 0, NULL,
109  ai_move, 0, NULL,
110  ai_move, 0, NULL
111 };
113 
115 {
116  ai_move, 0, NULL,
117  ai_move, 0, NULL,
118  ai_move, 0, NULL,
119  ai_move, 0, NULL,
120  ai_move, 0, NULL,
121  ai_move, 0, NULL,
122  ai_move, 0, NULL,
123  ai_move, 0, NULL
124 };
126 
128 {
129  ai_move, 0, NULL,
130  ai_move, -2, NULL,
131  ai_move, 5, NULL,
132  ai_move, -1, NULL,
133  ai_move, 1, NULL,
134  ai_move, 0, NULL,
135  ai_move, 0, NULL,
136  ai_move, -1, NULL,
137  ai_move, -1, NULL,
138  ai_move, -1, NULL,
139  ai_move, 0, NULL,
140  ai_move, 2, NULL,
141  ai_move, 2, NULL,
142  ai_move, 1, NULL,
143  ai_move, 1, NULL,
144  ai_move, -6, NULL,
145  ai_move, -9, NULL,
146  ai_move, 1, NULL,
147  ai_move, 0, NULL,
148  ai_move, 2, NULL,
149  ai_move, 2, NULL,
150  ai_move, 1, NULL,
151  ai_move, 1, NULL,
152  ai_move, 1, NULL,
153  ai_move, 2, NULL,
154  ai_move, 0, NULL,
155  ai_move, 2, NULL,
156  ai_move, 3, NULL,
157  ai_move, 2, NULL,
158  ai_move, 0, NULL
159 };
161 
163 {
164  ai_move, 0, NULL,
165  ai_move, 0, NULL,
166  ai_move, 0, NULL,
167  ai_move, 0, NULL,
168  ai_move, 0, NULL,
169  ai_move, 0, NULL,
170  ai_move, 0, NULL,
171  ai_move, 0, NULL,
172  ai_move, 0, NULL
173 };
175 
177 {
178  ai_move, 0, NULL,
179  ai_move, 0, NULL,
180  ai_move, 0, NULL,
181  ai_move, 0, NULL,
182  ai_move, 0, NULL,
183  ai_move, 0, NULL,
184  ai_move, 0, NULL,
185  ai_move, 0, NULL,
186  ai_move, 0, NULL,
187  ai_move, 0, NULL,
188  ai_move, 0, NULL,
189  ai_move, 0, NULL
190 };
192 
194 {
195  ai_move, 0, NULL,
196  ai_move, 0, NULL,
197  ai_move, 2, NULL,
198  ai_move, -8, NULL,
199  ai_move, -4, NULL,
200  ai_move, -6, NULL,
201  ai_move, -4, NULL,
202  ai_move, -3, NULL,
203  ai_move, 1, NULL,
204  ai_move, 0, NULL,
205  ai_move, 0, NULL,
206  ai_move, 0, NULL,
207  ai_move, 3, NULL,
208  ai_move, 1, NULL,
209  ai_move, 0, NULL,
210  ai_move, 2, NULL,
211  ai_move, 3, NULL,
212  ai_move, 2, NULL,
213  ai_move, 7, NULL,
214  ai_move, 1, NULL,
215  ai_move, 0, NULL,
216  ai_move, 0, NULL,
217  ai_move, 2, NULL,
218  ai_move, 0, NULL,
219  ai_move, 0, NULL,
220  ai_move, 5, NULL,
221  ai_move, 3, NULL,
222  ai_move, 4, NULL
223 };
225 
227 {
228  ai_move, 0, NULL
229 };
231 
233 {
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  ai_move, 0, NULL,
259  ai_move, 0, NULL,
260  ai_move, 0, NULL,
261  ai_move, 0, NULL,
262  ai_move, 0, NULL,
263  ai_move, 0, NULL,
264  ai_move, 0, NULL,
265  ai_move, 0, NULL,
266  ai_move, 0, NULL,
267  ai_move, 0, NULL,
268  ai_move, 0, NULL
269 };
271 
273 {
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  ai_walk, 4, NULL,
298  ai_walk, 4, NULL,
299  ai_walk, 4, NULL,
300  ai_walk, 4, NULL,
301  ai_walk, 4, NULL,
302  ai_walk, 4, NULL,
303  ai_walk, 4, NULL,
304  ai_walk, 4, NULL,
305  ai_walk, 4, NULL,
306  ai_walk, 4, NULL,
307  ai_walk, 4, NULL,
308  ai_walk, 4, NULL
309 };
311 
313 {
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  ai_run, 10, NULL,
337  ai_run, 10, NULL,
338  ai_run, 10, NULL,
339  ai_run, 10, NULL,
340  ai_run, 10, NULL,
341  ai_run, 10, NULL,
342  ai_run, 10, NULL,
343  ai_run, 10, NULL,
344  ai_run, 10, NULL,
345  ai_run, 10, NULL,
346  ai_run, 10, NULL,
347  ai_run, 10, NULL,
348  ai_run, 10, NULL
349 };
351 
353 {
354  ai_move, 0, NULL,
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, -10,NULL,
361  ai_move, 3, NULL,
362  ai_move, 5, NULL,
363  ai_move, 4, NULL,
364  ai_move, 7, NULL
365 };
367 
369 {
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  ai_move, 0, NULL,
380  ai_move, 0, NULL,
381  ai_move, 0, NULL,
382  ai_move, 0, NULL,
383  ai_move, 0, NULL,
384  ai_move, 0, NULL,
385  ai_move, 0, NULL,
386  ai_move, 0, NULL,
387  ai_move, 0, NULL,
388  ai_move, 0, NULL,
389  ai_move, 0, NULL,
390  ai_move, 0, NULL,
391  ai_move, 0, NULL,
392  ai_move, 0, NULL,
393  ai_move, 0, NULL
394 };
396 
398 {
399  ai_charge, 1, NULL,
400  ai_charge, 1, NULL,
401  ai_charge, 1, NULL
402 };
404 
406 {
410 };
412 
413 
415 {
416  ai_charge, 1, NULL,
417  ai_charge, 1, NULL
418 };
420 
422 {
423  if (self->enemy->health > 0 )
424  if (visible (self, self->enemy) )
425  if (random() <= 0.6)
426  {
427  self->monsterinfo.currentmove = &hover_move_attack1;
428  return;
429  }
430  self->monsterinfo.currentmove = &hover_move_end_attack;
431 }
432 
433 
435 {
436  vec3_t start;
438  vec3_t end;
439  vec3_t dir;
440  int effect;
441 
442  if (self->s.frame == FRAME_attak104)
443  effect = EF_HYPERBLASTER;
444  else
445  effect = 0;
446 
447  AngleVectors (self->s.angles, forward, right, NULL);
449 
450  VectorCopy (self->enemy->s.origin, end);
451  end[2] += self->enemy->viewheight;
452  VectorSubtract (end, start, dir);
453 
454  monster_fire_blaster (self, start, dir, 1, 1000, MZ2_HOVER_BLASTER_1, effect);
455 }
456 
457 
458 void hover_stand (edict_t *self)
459 {
460  self->monsterinfo.currentmove = &hover_move_stand;
461 }
462 
463 void hover_run (edict_t *self)
464 {
465  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
466  self->monsterinfo.currentmove = &hover_move_stand;
467  else
468  self->monsterinfo.currentmove = &hover_move_run;
469 }
470 
471 void hover_walk (edict_t *self)
472 {
473  self->monsterinfo.currentmove = &hover_move_walk;
474 }
475 
477 {
478  self->monsterinfo.currentmove = &hover_move_start_attack;
479 }
480 
482 {
483  self->monsterinfo.currentmove = &hover_move_attack1;
484 }
485 
486 
487 void hover_pain (edict_t *self, edict_t *other, float kick, int damage)
488 {
489  if (self->health < (self->max_health / 2))
490  self->s.skinnum = 1;
491 
492  if (level.time < self->pain_debounce_time)
493  return;
494 
495  self->pain_debounce_time = level.time + 3;
496 
497  if (skill->value == 3)
498  return; // no pain anims in nightmare
499 
500  if (damage <= 25)
501  {
502  if (random() < 0.5)
503  {
504  gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
505  self->monsterinfo.currentmove = &hover_move_pain3;
506  }
507  else
508  {
509  gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
510  self->monsterinfo.currentmove = &hover_move_pain2;
511  }
512  }
513  else
514  {
515  gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
516  self->monsterinfo.currentmove = &hover_move_pain1;
517  }
518 }
519 
521 {
522  if (!self->groundentity && level.time < self->timestamp)
523  {
524  self->nextthink = level.time + FRAMETIME;
525  return;
526  }
527  BecomeExplosion1(self);
528 }
529 
530 void hover_dead (edict_t *self)
531 {
532  VectorSet (self->mins, -16, -16, -24);
533  VectorSet (self->maxs, 16, 16, -8);
534  self->movetype = MOVETYPE_TOSS;
535  self->think = hover_deadthink;
536  self->nextthink = level.time + FRAMETIME;
537  self->timestamp = level.time + 15;
538  gi.linkentity (self);
539 }
540 
541 void hover_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
542 {
543  int n;
544 
545 // check for gib
546  if (self->health <= self->gib_health)
547  {
548  gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
549  for (n= 0; n < 2; n++)
550  ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
551  for (n= 0; n < 2; n++)
552  ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
553  ThrowHead (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
554  self->deadflag = DEAD_DEAD;
555  return;
556  }
557 
558  if (self->deadflag == DEAD_DEAD)
559  return;
560 
561 // regular death
562  if (random() < 0.5)
563  gi.sound (self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0);
564  else
565  gi.sound (self, CHAN_VOICE, sound_death2, 1, ATTN_NORM, 0);
566  self->deadflag = DEAD_DEAD;
567  self->takedamage = DAMAGE_YES;
568  self->monsterinfo.currentmove = &hover_move_death1;
569 }
570 
571 /*QUAKED monster_hover (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
572 */
574 {
575  if (deathmatch->value)
576  {
577  G_FreeEdict (self);
578  return;
579  }
580 
581  sound_pain1 = gi.soundindex ("hover/hovpain1.wav");
582  sound_pain2 = gi.soundindex ("hover/hovpain2.wav");
583  sound_death1 = gi.soundindex ("hover/hovdeth1.wav");
584  sound_death2 = gi.soundindex ("hover/hovdeth2.wav");
585  sound_sight = gi.soundindex ("hover/hovsght1.wav");
586  sound_search1 = gi.soundindex ("hover/hovsrch1.wav");
587  sound_search2 = gi.soundindex ("hover/hovsrch2.wav");
588 
589  gi.soundindex ("hover/hovatck1.wav");
590 
591  self->s.sound = gi.soundindex ("hover/hovidle1.wav");
592 
593  self->movetype = MOVETYPE_STEP;
594  self->solid = SOLID_BBOX;
595  self->s.modelindex = gi.modelindex("models/monsters/hover/tris.md2");
596  VectorSet (self->mins, -24, -24, -24);
597  VectorSet (self->maxs, 24, 24, 32);
598 
599  self->health = 240;
600  self->gib_health = -100;
601  self->mass = 150;
602 
603  self->pain = hover_pain;
604  self->die = hover_die;
605 
606  self->monsterinfo.stand = hover_stand;
607  self->monsterinfo.walk = hover_walk;
608  self->monsterinfo.run = hover_run;
609 // self->monsterinfo.dodge = hover_dodge;
610  self->monsterinfo.attack = hover_start_attack;
611  self->monsterinfo.sight = hover_sight;
612  self->monsterinfo.search = hover_search;
613 
614  gi.linkentity (self);
615 
616  self->monsterinfo.currentmove = &hover_move_stand;
617  self->monsterinfo.scale = MODEL_SCALE;
618 
619  flymonster_start (self);
620 }
gi
game_import_t gi
Definition: g_main.c:25
G_ProjectSource
void G_ProjectSource(vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result)
Definition: g_utils.c:25
deathmatch
cvar_t * deathmatch
Definition: g_main.c:35
hover_die
void hover_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_hover.c:541
hover_fire_blaster
void hover_fire_blaster(edict_t *self)
Definition: m_hover.c:434
FRAME_backwd24
#define FRAME_backwd24
Definition: m_hover.h:220
hover_frames_pain3
mframe_t hover_frames_pain3[]
Definition: m_hover.c:162
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:115
FRAME_pain301
#define FRAME_pain301
Definition: m_actor.h:104
ThrowGib
void ThrowGib(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:135
VectorSubtract
#define VectorSubtract(a, b, c)
Definition: q_shared.h:163
hover_sight
void hover_sight(edict_t *self, edict_t *other)
Definition: m_hover.c:43
hover_move_death1
mmove_t hover_move_death1
Definition: m_hover.c:366
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:194
hover_move_forward
mmove_t hover_move_forward
Definition: m_hover.c:270
SOLID_BBOX
@ SOLID_BBOX
Definition: game.h:37
hover_move_pain3
mmove_t hover_move_pain3
Definition: m_hover.c:174
FRAME_pain309
#define FRAME_pain309
Definition: m_boss31.h:119
hover_frames_pain1
mframe_t hover_frames_pain1[]
Definition: m_hover.c:193
FRAMETIME
#define FRAMETIME
Definition: g_local.h:75
hover_move_attack1
mmove_t hover_move_attack1
Definition: m_hover.c:411
hover_move_backward
mmove_t hover_move_backward
Definition: m_hover.c:395
FRAME_backwd01
#define FRAME_backwd01
Definition: m_hover.h:197
FRAME_takeof30
#define FRAME_takeof30
Definition: m_hover.h:135
FRAME_stand01
#define FRAME_stand01
Definition: m_boss31.h:136
sound_death1
static int sound_death1
Definition: m_hover.c:36
hover_move_start_attack
mmove_t hover_move_start_attack
Definition: m_hover.c:403
FRAME_death101
#define FRAME_death101
Definition: m_actor.h:28
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:129
qboolean
qboolean
Definition: q_shared.h:63
hover_frames_stop2
mframe_t hover_frames_stop2[]
Definition: m_hover.c:114
sound_pain1
static int sound_pain1
Definition: m_hover.c:34
FRAME_takeof01
#define FRAME_takeof01
Definition: m_hover.h:106
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:506
SP_monster_hover
void SP_monster_hover(edict_t *self)
Definition: m_hover.c:573
BecomeExplosion1
void BecomeExplosion1(edict_t *self)
Definition: g_misc.c:314
FRAME_pain212
#define FRAME_pain212
Definition: m_hover.h:176
hover_move_stand
mmove_t hover_move_stand
Definition: m_hover.c:98
DAMAGE_YES
@ DAMAGE_YES
Definition: g_local.h:89
game_import_t::sound
void(* sound)(edict_t *ent, int channel, int soundindex, float volume, float attenuation, float timeofs)
Definition: game.h:109
hover_frames_pain2
mframe_t hover_frames_pain2[]
Definition: m_hover.c:176
hover_stand
void hover_stand(edict_t *self)
Definition: m_hover.c:458
hover_frames_run
mframe_t hover_frames_run[]
Definition: m_hover.c:312
ATTN_NORM
#define ATTN_NORM
Definition: q_shared.h:995
MZ2_HOVER_BLASTER_1
#define MZ2_HOVER_BLASTER_1
Definition: q_shared.h:739
FRAME_stop208
#define FRAME_stop208
Definition: m_hover.h:105
FRAME_pain101
#define FRAME_pain101
Definition: m_actor.h:98
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:196
m_hover.h
FRAME_attak107
#define FRAME_attak107
Definition: m_boss31.h:30
FRAME_stop201
#define FRAME_stop201
Definition: m_hover.h:98
AngleVectors
void AngleVectors(vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition: q_shared.c:93
monster_flash_offset
vec3_t monster_flash_offset[]
Definition: m_flash.c:27
CHAN_VOICE
#define CHAN_VOICE
Definition: q_shared.h:985
edict_s
Definition: g_local.h:968
FRAME_stop109
#define FRAME_stop109
Definition: m_hover.h:97
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:452
FRAME_attak106
#define FRAME_attak106
Definition: m_boss31.h:29
hover_dead
void hover_dead(edict_t *self)
Definition: m_hover.c:530
hover_move_stop1
mmove_t hover_move_stop1
Definition: m_hover.c:112
FRAME_stand30
#define FRAME_stand30
Definition: m_boss2.h:24
hover_move_takeoff
mmove_t hover_move_takeoff
Definition: m_hover.c:160
hover_frames_takeoff
mframe_t hover_frames_takeoff[]
Definition: m_hover.c:127
FRAME_attak104
#define FRAME_attak104
Definition: m_boss31.h:27
game_import_t::soundindex
int(* soundindex)(char *name)
Definition: game.h:122
forward
static vec3_t forward
Definition: p_view.c:29
hover_move_run
mmove_t hover_move_run
Definition: m_hover.c:350
hover_frames_forward
mframe_t hover_frames_forward[]
Definition: m_hover.c:232
FRAME_land01
#define FRAME_land01
Definition: m_hover.h:136
game_import_t::modelindex
int(* modelindex)(char *name)
Definition: game.h:121
mframe_t
Definition: g_local.h:403
FRAME_attak103
#define FRAME_attak103
Definition: m_boss31.h:26
mmove_t
Definition: g_local.h:410
hover_frames_end_attack
mframe_t hover_frames_end_attack[]
Definition: m_hover.c:414
cvar_s::value
float value
Definition: q_shared.h:331
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:163
random
#define random()
Definition: g_local.h:515
hover_frames_backward
mframe_t hover_frames_backward[]
Definition: m_hover.c:368
FRAME_forwrd01
#define FRAME_forwrd01
Definition: m_hover.h:54
hover_move_stop2
mmove_t hover_move_stop2
Definition: m_hover.c:125
NULL
#define NULL
Definition: q_shared.h:67
hover_attack
void hover_attack(edict_t *self)
Definition: m_hover.c:481
sound_search1
static int sound_search1
Definition: m_hover.c:39
hover_run
void hover_run(edict_t *self)
Definition: m_hover.c:463
hover_pain
void hover_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_hover.c:487
hover_frames_land
mframe_t hover_frames_land[]
Definition: m_hover.c:226
hover_move_pain1
mmove_t hover_move_pain1
Definition: m_hover.c:224
FRAME_forwrd35
#define FRAME_forwrd35
Definition: m_hover.h:88
skill
cvar_t * skill
Definition: g_main.c:38
hover_frames_walk
mframe_t hover_frames_walk[]
Definition: m_hover.c:272
hover_move_pain2
mmove_t hover_move_pain2
Definition: m_hover.c:191
hover_reattack
void hover_reattack(edict_t *self)
Definition: m_hover.c:421
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:92
sound_search2
static int sound_search2
Definition: m_hover.c:40
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:51
FRAME_attak108
#define FRAME_attak108
Definition: m_boss31.h:31
hover_walk
void hover_walk(edict_t *self)
Definition: m_hover.c:471
VectorCopy
#define VectorCopy(a, b)
Definition: q_shared.h:165
visible
qboolean visible(edict_t *self, edict_t *other)
Definition: g_ai.c:287
hover_frames_start_attack
mframe_t hover_frames_start_attack[]
Definition: m_hover.c:397
hover_frames_stand
mframe_t hover_frames_stand[]
Definition: m_hover.c:65
level
GLint level
Definition: qgl_win.c:116
hover_deadthink
void hover_deadthink(edict_t *self)
Definition: m_hover.c:520
ai_run
void ai_run(edict_t *self, float dist)
Definition: g_ai.c:914
hover_move_end_attack
mmove_t hover_move_end_attack
Definition: m_hover.c:419
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:125
hover_move_land
mmove_t hover_move_land
Definition: m_hover.c:230
sound_pain2
static int sound_pain2
Definition: m_hover.c:35
hover_start_attack
void hover_start_attack(edict_t *self)
Definition: m_hover.c:476
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:183
FRAME_pain201
#define FRAME_pain201
Definition: m_actor.h:101
FRAME_death111
#define FRAME_death111
Definition: m_brain.h:157
hover_frames_death1
mframe_t hover_frames_death1[]
Definition: m_hover.c:352
FRAME_pain128
#define FRAME_pain128
Definition: m_hover.h:164
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:198
VectorSet
#define VectorSet(v, x, y, z)
Definition: q_shared.h:168
hover_move_walk
mmove_t hover_move_walk
Definition: m_hover.c:310
right
GLdouble right
Definition: qgl_win.c:159
hover_frames_stop1
mframe_t hover_frames_stop1[]
Definition: m_hover.c:100
FRAME_stop101
#define FRAME_stop101
Definition: m_hover.h:89
game_import_t::linkentity
void(* linkentity)(edict_t *ent)
Definition: game.h:138
sound_sight
static int sound_sight
Definition: m_hover.c:38
hover_search
void hover_search(edict_t *self)
Definition: m_hover.c:48
EF_HYPERBLASTER
#define EF_HYPERBLASTER
Definition: q_shared.h:567
sound_death2
static int sound_death2
Definition: m_hover.c:37
vec3_t
vec_t vec3_t[3]
Definition: q_shared.h:134
hover_frames_attack1
mframe_t hover_frames_attack1[]
Definition: m_hover.c:405
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:106
FRAME_attak101
#define FRAME_attak101
Definition: m_boss31.h:24
g_local.h
flymonster_start
void flymonster_start(edict_t *self)
Definition: g_monster.c:715