Quake II RTX doxygen  1.0 dev
m_flyer.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 flyer
22 
23 ==============================================================================
24 */
25 
26 #include "g_local.h"
27 #include "m_flyer.h"
28 
29 qboolean visible(edict_t *self, edict_t *other);
30 
31 static int nextmove; // Used for start/stop frames
32 
33 static int sound_sight;
34 static int sound_idle;
35 static int sound_pain1;
36 static int sound_pain2;
37 static int sound_slash;
38 static int sound_sproing;
39 static int sound_die;
40 
41 
42 void flyer_check_melee(edict_t *self);
43 void flyer_loop_melee(edict_t *self);
44 void flyer_melee(edict_t *self);
45 void flyer_setstart(edict_t *self);
46 void flyer_stand(edict_t *self);
47 void flyer_nextmove(edict_t *self);
48 
49 
50 void flyer_sight(edict_t *self, edict_t *other)
51 {
52  gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
53 }
54 
55 void flyer_idle(edict_t *self)
56 {
57  gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0);
58 }
59 
60 void flyer_pop_blades(edict_t *self)
61 {
62  gi.sound(self, CHAN_VOICE, sound_sproing, 1, ATTN_NORM, 0);
63 }
64 
65 
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  { ai_stand, 0, NULL },
98  { ai_stand, 0, NULL },
99  { ai_stand, 0, NULL },
100  { ai_stand, 0, NULL },
101  { ai_stand, 0, NULL },
102  { ai_stand, 0, NULL },
103  { ai_stand, 0, NULL },
104  { ai_stand, 0, NULL },
105  { ai_stand, 0, NULL },
106  { ai_stand, 0, NULL },
107  { ai_stand, 0, NULL },
108  { ai_stand, 0, NULL },
109  { ai_stand, 0, NULL },
110  { ai_stand, 0, NULL },
111  { ai_stand, 0, NULL }
112 };
114 
115 
117  { ai_walk, 5, NULL },
118  { ai_walk, 5, NULL },
119  { ai_walk, 5, NULL },
120  { ai_walk, 5, NULL },
121  { ai_walk, 5, NULL },
122  { ai_walk, 5, NULL },
123  { ai_walk, 5, NULL },
124  { ai_walk, 5, NULL },
125  { ai_walk, 5, NULL },
126  { ai_walk, 5, NULL },
127  { ai_walk, 5, NULL },
128  { ai_walk, 5, NULL },
129  { ai_walk, 5, NULL },
130  { ai_walk, 5, NULL },
131  { ai_walk, 5, NULL },
132  { ai_walk, 5, NULL },
133  { ai_walk, 5, NULL },
134  { ai_walk, 5, NULL },
135  { ai_walk, 5, NULL },
136  { ai_walk, 5, NULL },
137  { ai_walk, 5, NULL },
138  { ai_walk, 5, NULL },
139  { ai_walk, 5, NULL },
140  { ai_walk, 5, NULL },
141  { ai_walk, 5, NULL },
142  { ai_walk, 5, NULL },
143  { ai_walk, 5, NULL },
144  { ai_walk, 5, NULL },
145  { ai_walk, 5, NULL },
146  { ai_walk, 5, NULL },
147  { ai_walk, 5, NULL },
148  { ai_walk, 5, NULL },
149  { ai_walk, 5, NULL },
150  { ai_walk, 5, NULL },
151  { ai_walk, 5, NULL },
152  { ai_walk, 5, NULL },
153  { ai_walk, 5, NULL },
154  { ai_walk, 5, NULL },
155  { ai_walk, 5, NULL },
156  { ai_walk, 5, NULL },
157  { ai_walk, 5, NULL },
158  { ai_walk, 5, NULL },
159  { ai_walk, 5, NULL },
160  { ai_walk, 5, NULL },
161  { ai_walk, 5, NULL }
162 };
164 
166  { ai_run, 10, NULL },
167  { ai_run, 10, NULL },
168  { ai_run, 10, NULL },
169  { ai_run, 10, NULL },
170  { ai_run, 10, NULL },
171  { ai_run, 10, NULL },
172  { ai_run, 10, NULL },
173  { ai_run, 10, NULL },
174  { ai_run, 10, NULL },
175  { ai_run, 10, NULL },
176  { ai_run, 10, NULL },
177  { ai_run, 10, NULL },
178  { ai_run, 10, NULL },
179  { ai_run, 10, NULL },
180  { ai_run, 10, NULL },
181  { ai_run, 10, NULL },
182  { ai_run, 10, NULL },
183  { ai_run, 10, NULL },
184  { ai_run, 10, NULL },
185  { ai_run, 10, NULL },
186  { ai_run, 10, NULL },
187  { ai_run, 10, NULL },
188  { ai_run, 10, NULL },
189  { ai_run, 10, NULL },
190  { ai_run, 10, NULL },
191  { ai_run, 10, NULL },
192  { ai_run, 10, NULL },
193  { ai_run, 10, NULL },
194  { ai_run, 10, NULL },
195  { ai_run, 10, NULL },
196  { ai_run, 10, NULL },
197  { ai_run, 10, NULL },
198  { ai_run, 10, NULL },
199  { ai_run, 10, NULL },
200  { ai_run, 10, NULL },
201  { ai_run, 10, NULL },
202  { ai_run, 10, NULL },
203  { ai_run, 10, NULL },
204  { ai_run, 10, NULL },
205  { ai_run, 10, NULL },
206  { ai_run, 10, NULL },
207  { ai_run, 10, NULL },
208  { ai_run, 10, NULL },
209  { ai_run, 10, NULL },
210  { ai_run, 10, NULL }
211 };
213 
214 void flyer_run(edict_t *self)
215 {
216  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
217  self->monsterinfo.currentmove = &flyer_move_stand;
218  else
219  self->monsterinfo.currentmove = &flyer_move_run;
220 }
221 
222 void flyer_walk(edict_t *self)
223 {
224  self->monsterinfo.currentmove = &flyer_move_walk;
225 }
226 
227 void flyer_stand(edict_t *self)
228 {
229  self->monsterinfo.currentmove = &flyer_move_stand;
230 }
231 
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, flyer_nextmove }
239 };
241 
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, flyer_nextmove }
250 };
252 
253 void flyer_stop(edict_t *self)
254 {
255  self->monsterinfo.currentmove = &flyer_move_stop;
256 }
257 
258 void flyer_start(edict_t *self)
259 {
260  self->monsterinfo.currentmove = &flyer_move_start;
261 }
262 
263 
265  { ai_move, 0, NULL },
266  { ai_move, 0, NULL },
267  { ai_move, 0, NULL },
268  { ai_move, 0, NULL },
269  { ai_move, 0, NULL },
270  { ai_move, 0, NULL },
271  { ai_move, 0, NULL },
272  { ai_move, 0, NULL },
273  { ai_move, 0, NULL }
274 };
276 
278  { ai_move, 0, NULL },
279  { ai_move, 0, NULL },
280  { ai_move, 0, NULL },
281  { ai_move, 0, NULL },
282  { ai_move, 0, NULL },
283  { ai_move, 0, NULL },
284  { ai_move, 0, NULL },
285  { ai_move, 0, NULL },
286  { ai_move, 0, NULL }
287 };
289 
291  { ai_move, 0, NULL },
292  { ai_move, 0, NULL },
293  { ai_move, 0, NULL },
294  { ai_move, 0, NULL }
295 };
297 
299  { ai_move, 0, NULL },
300  { ai_move, 0, NULL },
301  { ai_move, 0, NULL },
302  { ai_move, 0, NULL }
303 };
305 
307  { ai_move, 0, NULL },
308  { ai_move, 0, NULL },
309  { ai_move, 0, NULL },
310  { ai_move, 0, NULL },
311  { ai_move, 0, NULL },
312  { ai_move, 0, NULL },
313  { ai_move, 0, NULL },
314  { ai_move, 0, NULL },
315  { ai_move, 0, NULL }
316 };
318 
320  { ai_move, 0, NULL },
321  { ai_move, 0, NULL },
322  { ai_move, 0, NULL }, // Hold this frame
323  { ai_move, 0, NULL },
324  { ai_move, 0, NULL },
325  { ai_move, 0, NULL }
326 };
328 
330  { ai_move, 0, NULL },
331  { ai_move, 0, NULL },
332  { ai_move, 0, NULL },
333  { ai_move, 0, NULL },
334  { ai_move, 0, NULL },
335  { ai_move, 0, NULL },
336  { ai_move, 0, NULL }
337 };
339 
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, 0, NULL },
347  { ai_move, 0, NULL }
348 };
350 
351 
352 void flyer_fire(edict_t *self, int flash_number)
353 {
354  vec3_t start;
355  vec3_t forward, right;
356  vec3_t end;
357  vec3_t dir;
358  int effect;
359 
360  if ((self->s.frame == FRAME_attak204) || (self->s.frame == FRAME_attak207) || (self->s.frame == FRAME_attak210))
361  effect = EF_HYPERBLASTER;
362  else
363  effect = 0;
364  AngleVectors(self->s.angles, forward, right, NULL);
365  G_ProjectSource(self->s.origin, monster_flash_offset[flash_number], forward, right, start);
366 
367  VectorCopy(self->enemy->s.origin, end);
368  end[2] += self->enemy->viewheight;
369  VectorSubtract(end, start, dir);
370 
371  monster_fire_blaster(self, start, dir, 1, 1000, flash_number, effect);
372 }
373 
374 void flyer_fireleft(edict_t *self)
375 {
376  flyer_fire(self, MZ2_FLYER_BLASTER_1);
377 }
378 
379 void flyer_fireright(edict_t *self)
380 {
381  flyer_fire(self, MZ2_FLYER_BLASTER_2);
382 }
383 
384 
386  { ai_charge, 0, NULL },
387  { ai_charge, 0, NULL },
388  { ai_charge, 0, NULL },
389  { ai_charge, -10, flyer_fireleft }, // left gun
390  { ai_charge, -10, flyer_fireright }, // right gun
391  { ai_charge, -10, flyer_fireleft }, // left gun
392  { ai_charge, -10, flyer_fireright }, // right gun
393  { ai_charge, -10, flyer_fireleft }, // left gun
394  { ai_charge, -10, flyer_fireright }, // right gun
395  { ai_charge, -10, flyer_fireleft }, // left gun
396  { ai_charge, -10, flyer_fireright }, // right gun
397  { ai_charge, 0, NULL },
398  { ai_charge, 0, NULL },
399  { ai_charge, 0, NULL },
400  { ai_charge, 0, NULL },
401  { ai_charge, 0, NULL },
402  { ai_charge, 0, NULL }
403 };
405 
406 
407 void flyer_slash_left(edict_t *self)
408 {
409  vec3_t aim;
410 
411  VectorSet(aim, MELEE_DISTANCE, self->mins[0], 0);
412  fire_hit(self, aim, 5, 0);
413  gi.sound(self, CHAN_WEAPON, sound_slash, 1, ATTN_NORM, 0);
414 }
415 
416 void flyer_slash_right(edict_t *self)
417 {
418  vec3_t aim;
419 
420  VectorSet(aim, MELEE_DISTANCE, self->maxs[0], 0);
421  fire_hit(self, aim, 5, 0);
422  gi.sound(self, CHAN_WEAPON, sound_slash, 1, ATTN_NORM, 0);
423 }
424 
426  { ai_charge, 0, flyer_pop_blades },
427  { ai_charge, 0, NULL },
428  { ai_charge, 0, NULL },
429  { ai_charge, 0, NULL },
430  { ai_charge, 0, NULL },
431  { ai_charge, 0, NULL }
432 };
434 
436  { ai_charge, 0, NULL },
437  { ai_charge, 0, NULL },
438  { ai_charge, 0, NULL }
439 };
441 
442 
444  { ai_charge, 0, NULL }, // Loop Start
445  { ai_charge, 0, NULL },
446  { ai_charge, 0, flyer_slash_left }, // Left Wing Strike
447  { ai_charge, 0, NULL },
448  { ai_charge, 0, NULL },
449  { ai_charge, 0, NULL },
450  { ai_charge, 0, NULL },
451  { ai_charge, 0, flyer_slash_right }, // Right Wing Strike
452  { ai_charge, 0, NULL },
453  { ai_charge, 0, NULL },
454  { ai_charge, 0, NULL },
455  { ai_charge, 0, NULL } // Loop Ends
456 
457 };
459 
460 void flyer_loop_melee(edict_t *self)
461 {
462  /* if (random() <= 0.5)
463  self->monsterinfo.currentmove = &flyer_move_attack1;
464  else */
465  self->monsterinfo.currentmove = &flyer_move_loop_melee;
466 }
467 
468 
469 
470 void flyer_attack(edict_t *self)
471 {
472  /* if (random() <= 0.5)
473  self->monsterinfo.currentmove = &flyer_move_attack1;
474  else */
475  self->monsterinfo.currentmove = &flyer_move_attack2;
476 }
477 
478 void flyer_setstart(edict_t *self)
479 {
481  self->monsterinfo.currentmove = &flyer_move_start;
482 }
483 
484 void flyer_nextmove(edict_t *self)
485 {
486  if (nextmove == ACTION_attack1)
487  self->monsterinfo.currentmove = &flyer_move_start_melee;
488  else if (nextmove == ACTION_attack2)
489  self->monsterinfo.currentmove = &flyer_move_attack2;
490  else if (nextmove == ACTION_run)
491  self->monsterinfo.currentmove = &flyer_move_run;
492 }
493 
494 void flyer_melee(edict_t *self)
495 {
496 // flyer.nextmove = ACTION_attack1;
497 // self->monsterinfo.currentmove = &flyer_move_stop;
498  self->monsterinfo.currentmove = &flyer_move_start_melee;
499 }
500 
501 void flyer_check_melee(edict_t *self)
502 {
503  if (range(self, self->enemy) == RANGE_MELEE)
504  if (random() <= 0.8)
505  self->monsterinfo.currentmove = &flyer_move_loop_melee;
506  else
507  self->monsterinfo.currentmove = &flyer_move_end_melee;
508  else
509  self->monsterinfo.currentmove = &flyer_move_end_melee;
510 }
511 
512 void flyer_pain(edict_t *self, edict_t *other, float kick, int damage)
513 {
514  int n;
515 
516  if (self->health < (self->max_health / 2))
517  self->s.skinnum = 1;
518 
519  if (level.time < self->pain_debounce_time)
520  return;
521 
522  self->pain_debounce_time = level.time + 3;
523  if (skill->value == 3)
524  return; // no pain anims in nightmare
525 
526  n = rand() % 3;
527  if (n == 0) {
528  gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
529  self->monsterinfo.currentmove = &flyer_move_pain1;
530  } else if (n == 1) {
531  gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
532  self->monsterinfo.currentmove = &flyer_move_pain2;
533  } else {
534  gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
535  self->monsterinfo.currentmove = &flyer_move_pain3;
536  }
537 }
538 
539 
540 void flyer_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
541 {
542  gi.sound(self, CHAN_VOICE, sound_die, 1, ATTN_NORM, 0);
543  BecomeExplosion1(self);
544 }
545 
546 
547 /*QUAKED monster_flyer (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
548 */
549 void SP_monster_flyer(edict_t *self)
550 {
551  if (deathmatch->value) {
552  G_FreeEdict(self);
553  return;
554  }
555 
556  // fix a map bug in jail5.bsp
557  if (!Q_stricmp(level.mapname, "jail5") && (self->s.origin[2] == -104)) {
558  self->targetname = self->target;
559  self->target = NULL;
560  }
561 
562  sound_sight = gi.soundindex("flyer/flysght1.wav");
563  sound_idle = gi.soundindex("flyer/flysrch1.wav");
564  sound_pain1 = gi.soundindex("flyer/flypain1.wav");
565  sound_pain2 = gi.soundindex("flyer/flypain2.wav");
566  sound_slash = gi.soundindex("flyer/flyatck2.wav");
567  sound_sproing = gi.soundindex("flyer/flyatck1.wav");
568  sound_die = gi.soundindex("flyer/flydeth1.wav");
569 
570  gi.soundindex("flyer/flyatck3.wav");
571 
572  self->s.modelindex = gi.modelindex("models/monsters/flyer/tris.md2");
573  VectorSet(self->mins, -16, -16, -24);
574  VectorSet(self->maxs, 16, 16, 32);
575  self->movetype = MOVETYPE_STEP;
576  self->solid = SOLID_BBOX;
577 
578  self->s.sound = gi.soundindex("flyer/flyidle1.wav");
579 
580  self->health = 50;
581  self->mass = 50;
582 
583  self->pain = flyer_pain;
584  self->die = flyer_die;
585 
586  self->monsterinfo.stand = flyer_stand;
587  self->monsterinfo.walk = flyer_walk;
588  self->monsterinfo.run = flyer_run;
589  self->monsterinfo.attack = flyer_attack;
590  self->monsterinfo.melee = flyer_melee;
591  self->monsterinfo.sight = flyer_sight;
592  self->monsterinfo.idle = flyer_idle;
593 
594  gi.linkentity(self);
595 
596  self->monsterinfo.currentmove = &flyer_move_stand;
597  self->monsterinfo.scale = MODEL_SCALE;
598 
599  flymonster_start(self);
600 }
flyer_frames_attack2
mframe_t flyer_frames_attack2[]
Definition: m_flyer.c:385
gi
game_import_t gi
Definition: g_main.c:23
flyer_loop_melee
void flyer_loop_melee(edict_t *self)
Definition: m_flyer.c:460
flyer_sight
void flyer_sight(edict_t *self, edict_t *other)
Definition: m_flyer.c:50
deathmatch
cvar_t * deathmatch
Definition: g_main.c:33
flyer_frames_start_melee
mframe_t flyer_frames_start_melee[]
Definition: m_flyer.c:425
flyer_frames_rollleft
mframe_t flyer_frames_rollleft[]
Definition: m_flyer.c:277
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_pain301
#define FRAME_pain301
Definition: m_actor.h:102
flyer_frames_stand
mframe_t flyer_frames_stand[]
Definition: m_flyer.c:66
m_flyer.h
flyer_move_defense
mmove_t flyer_move_defense
Definition: m_flyer.c:327
flyer_frames_walk
mframe_t flyer_frames_walk[]
Definition: m_flyer.c:116
MELEE_DISTANCE
#define MELEE_DISTANCE
Definition: g_local.h:82
FRAME_attak119
#define FRAME_attak119
Definition: m_chick.h:40
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:175
sound_die
static int sound_die
Definition: m_flyer.c:39
flyer_stand
void flyer_stand(edict_t *self)
Definition: m_flyer.c:227
FRAME_pain109
#define FRAME_pain109
Definition: m_brain.h:118
FRAME_attak204
#define FRAME_attak204
Definition: m_boss31.h:43
flyer_frames_bankright
mframe_t flyer_frames_bankright[]
Definition: m_flyer.c:329
FRAME_stand01
#define FRAME_stand01
Definition: m_boss31.h:134
flyer_setstart
void flyer_setstart(edict_t *self)
Definition: m_flyer.c:478
flyer_start
void flyer_start(edict_t *self)
Definition: m_flyer.c:258
FRAME_attak118
#define FRAME_attak118
Definition: m_boss31.h:39
FRAME_pain304
#define FRAME_pain304
Definition: m_boss31.h:112
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:126
flyer_frames_pain3
mframe_t flyer_frames_pain3[]
Definition: m_flyer.c:290
FRAME_bankl07
#define FRAME_bankl07
Definition: m_flyer.h:130
sound_sproing
static int sound_sproing
Definition: m_flyer.c:38
flyer_frames_rollright
mframe_t flyer_frames_rollright[]
Definition: m_flyer.c:264
flyer_move_pain3
mmove_t flyer_move_pain3
Definition: m_flyer.c:296
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:504
BecomeExplosion1
void BecomeExplosion1(edict_t *self)
Definition: g_misc.c:297
flyer_frames_loop_melee
mframe_t flyer_frames_loop_melee[]
Definition: m_flyer.c:443
FRAME_stop07
#define FRAME_stop07
Definition: m_flyer.h:40
FRAME_attak207
#define FRAME_attak207
Definition: m_boss31.h:46
flyer_check_melee
void flyer_check_melee(edict_t *self)
Definition: m_flyer.c:501
fire_hit
qboolean fire_hit(edict_t *self, vec3_t aim, int damage, int kick)
Definition: g_weapon.c:59
FRAME_defens01
#define FRAME_defens01
Definition: m_brain.h:176
FRAME_stand45
#define FRAME_stand45
Definition: m_boss2.h:37
flyer_stop
void flyer_stop(edict_t *self)
Definition: m_flyer.c:253
flyer_fireleft
void flyer_fireleft(edict_t *self)
Definition: m_flyer.c:374
other
@ other
Definition: ogg.c:63
FRAME_pain101
#define FRAME_pain101
Definition: m_actor.h:96
flyer_move_stand
mmove_t flyer_move_stand
Definition: m_flyer.c:113
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:192
sound_pain1
static int sound_pain1
Definition: m_flyer.c:35
flyer_slash_left
void flyer_slash_left(edict_t *self)
Definition: m_flyer.c:407
flyer_pain
void flyer_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_flyer.c:512
FRAME_attak201
#define FRAME_attak201
Definition: m_boss31.h:40
FRAME_attak107
#define FRAME_attak107
Definition: m_boss31.h:28
flyer_move_bankright
mmove_t flyer_move_bankright
Definition: m_flyer.c:338
flyer_move_pain2
mmove_t flyer_move_pain2
Definition: m_flyer.c:304
FRAME_start01
#define FRAME_start01
Definition: m_flyer.h:28
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:421
FRAME_attak106
#define FRAME_attak106
Definition: m_boss31.h:27
sound_idle
static int sound_idle
Definition: m_flyer.c:34
FRAME_pain204
#define FRAME_pain204
Definition: m_brain.h:134
sound_sight
static int sound_sight
Definition: m_flyer.c:33
forward
static vec3_t forward
Definition: p_view.c:27
flyer_frames_defense
mframe_t flyer_frames_defense[]
Definition: m_flyer.c:319
ACTION_attack1
#define ACTION_attack1
Definition: m_flyer.h:23
ACTION_run
#define ACTION_run
Definition: m_flyer.h:25
FRAME_rollf01
#define FRAME_rollf01
Definition: m_flyer.h:138
mframe_t
Definition: g_local.h:394
mmove_t
Definition: g_local.h:400
flyer_move_run
mmove_t flyer_move_run
Definition: m_flyer.c:212
SP_monster_flyer
void SP_monster_flyer(edict_t *self)
Definition: m_flyer.c:549
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:148
random
#define random()
Definition: g_local.h:504
AngleVectors
void AngleVectors(vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition: shared.c:23
flyer_move_rollright
mmove_t flyer_move_rollright
Definition: m_flyer.c:275
flyer_melee
void flyer_melee(edict_t *self)
Definition: m_flyer.c:494
flyer_slash_right
void flyer_slash_right(edict_t *self)
Definition: m_flyer.c:416
flyer_walk
void flyer_walk(edict_t *self)
Definition: m_flyer.c:222
FRAME_bankl01
#define FRAME_bankl01
Definition: m_flyer.h:124
FRAME_attak210
#define FRAME_attak210
Definition: m_boss31.h:49
flyer_move_pain1
mmove_t flyer_move_pain1
Definition: m_flyer.c:317
skill
cvar_t * skill
Definition: g_main.c:36
visible
qboolean visible(edict_t *self, edict_t *other)
Definition: g_ai.c:268
FRAME_start06
#define FRAME_start06
Definition: m_flyer.h:33
FRAME_stop01
#define FRAME_stop01
Definition: m_flyer.h:34
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:86
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
flyer_idle
void flyer_idle(edict_t *self)
Definition: m_flyer.c:55
flyer_frames_stop
mframe_t flyer_frames_stop[]
Definition: m_flyer.c:242
FRAME_bankr07
#define FRAME_bankr07
Definition: m_flyer.h:137
flyer_move_start_melee
mmove_t flyer_move_start_melee
Definition: m_flyer.c:433
flyer_move_loop_melee
mmove_t flyer_move_loop_melee
Definition: m_flyer.c:458
FRAME_rollr09
#define FRAME_rollr09
Definition: m_flyer.h:155
FRAME_bankr01
#define FRAME_bankr01
Definition: m_flyer.h:131
RANGE_MELEE
#define RANGE_MELEE
Definition: g_local.h:116
flyer_move_start
mmove_t flyer_move_start
Definition: m_flyer.c:240
flyer_move_walk
mmove_t flyer_move_walk
Definition: m_flyer.c:163
nextmove
static int nextmove
Definition: m_flyer.c:31
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
FRAME_rollr01
#define FRAME_rollr01
Definition: m_flyer.h:147
flyer_die
void flyer_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_flyer.c:540
level
level_locals_t level
Definition: g_main.c:22
flyer_pop_blades
void flyer_pop_blades(edict_t *self)
Definition: m_flyer.c:60
flyer_fireright
void flyer_fireright(edict_t *self)
Definition: m_flyer.c:379
flyer_fire
void flyer_fire(edict_t *self, int flash_number)
Definition: m_flyer.c:352
FRAME_rollf09
#define FRAME_rollf09
Definition: m_flyer.h:146
flyer_attack
void flyer_attack(edict_t *self)
Definition: m_flyer.c:470
flyer_move_bankleft
mmove_t flyer_move_bankleft
Definition: m_flyer.c:349
flyer_move_rollleft
mmove_t flyer_move_rollleft
Definition: m_flyer.c:288
monster_flash_offset
const vec3_t monster_flash_offset[256]
Definition: m_flash.c:25
FRAME_attak121
#define FRAME_attak121
Definition: m_chick.h:42
FRAME_pain201
#define FRAME_pain201
Definition: m_actor.h:99
flyer_frames_run
mframe_t flyer_frames_run[]
Definition: m_flyer.c:165
range
int range(edict_t *self, edict_t *other)
Definition: g_ai.c:245
FRAME_attak217
#define FRAME_attak217
Definition: m_brain.h:109
sound_slash
static int sound_slash
Definition: m_flyer.c:37
flyer_frames_end_melee
mframe_t flyer_frames_end_melee[]
Definition: m_flyer.c:435
flyer_frames_bankleft
mframe_t flyer_frames_bankleft[]
Definition: m_flyer.c:340
flyer_move_end_melee
mmove_t flyer_move_end_melee
Definition: m_flyer.c:440
level_locals_t::mapname
char mapname[MAX_QPATH]
Definition: g_local.h:302
sound_pain2
static int sound_pain2
Definition: m_flyer.c:36
flyer_frames_pain2
mframe_t flyer_frames_pain2[]
Definition: m_flyer.c:298
flyer_run
void flyer_run(edict_t *self)
Definition: m_flyer.c:214
ACTION_attack2
#define ACTION_attack2
Definition: m_flyer.h:24
flyer_move_attack2
mmove_t flyer_move_attack2
Definition: m_flyer.c:404
FRAME_defens06
#define FRAME_defens06
Definition: m_brain.h:181
flyer_nextmove
void flyer_nextmove(edict_t *self)
Definition: m_flyer.c:484
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:100
flyer_frames_start
mframe_t flyer_frames_start[]
Definition: m_flyer.c:232
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
flyer_move_stop
mmove_t flyer_move_stop
Definition: m_flyer.c:251
flyer_frames_pain1
mframe_t flyer_frames_pain1[]
Definition: m_flyer.c:306