vkQuake2 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
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 flyer
24 
25 ==============================================================================
26 */
27 
28 #include "g_local.h"
29 #include "m_flyer.h"
30 
31 qboolean visible (edict_t *self, edict_t *other);
32 
33 static int nextmove; // Used for start/stop frames
34 
35 static int sound_sight;
36 static int sound_idle;
37 static int sound_pain1;
38 static int sound_pain2;
39 static int sound_slash;
40 static int sound_sproing;
41 static int sound_die;
42 
43 
44 void flyer_check_melee(edict_t *self);
45 void flyer_loop_melee (edict_t *self);
46 void flyer_melee (edict_t *self);
47 void flyer_setstart (edict_t *self);
48 void flyer_stand (edict_t *self);
49 void flyer_nextmove (edict_t *self);
50 
51 
52 void flyer_sight (edict_t *self, edict_t *other)
53 {
54  gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
55 }
56 
57 void flyer_idle (edict_t *self)
58 {
59  gi.sound (self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0);
60 }
61 
63 {
64  gi.sound (self, CHAN_VOICE, sound_sproing, 1, ATTN_NORM, 0);
65 }
66 
67 
69 {
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  ai_stand, 0, NULL,
113  ai_stand, 0, NULL,
114  ai_stand, 0, NULL
115 };
117 
118 
120 {
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  ai_walk, 5, NULL,
163  ai_walk, 5, NULL,
164  ai_walk, 5, NULL,
165  ai_walk, 5, NULL
166 };
168 
170 {
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  ai_run, 10, NULL,
212  ai_run, 10, NULL,
213  ai_run, 10, NULL,
214  ai_run, 10, NULL,
215  ai_run, 10, NULL
216 };
218 
219 void flyer_run (edict_t *self)
220 {
221  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
222  self->monsterinfo.currentmove = &flyer_move_stand;
223  else
224  self->monsterinfo.currentmove = &flyer_move_run;
225 }
226 
227 void flyer_walk (edict_t *self)
228 {
229  self->monsterinfo.currentmove = &flyer_move_walk;
230 }
231 
232 void flyer_stand (edict_t *self)
233 {
234  self->monsterinfo.currentmove = &flyer_move_stand;
235 }
236 
238 {
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,
245 };
247 
249 {
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,
257 };
259 
260 void flyer_stop (edict_t *self)
261 {
262  self->monsterinfo.currentmove = &flyer_move_stop;
263 }
264 
265 void flyer_start (edict_t *self)
266 {
267  self->monsterinfo.currentmove = &flyer_move_start;
268 }
269 
270 
272 {
273  ai_move, 0, NULL,
274  ai_move, 0, NULL,
275  ai_move, 0, NULL,
276  ai_move, 0, NULL,
277  ai_move, 0, NULL,
278  ai_move, 0, NULL,
279  ai_move, 0, NULL,
280  ai_move, 0, NULL,
281  ai_move, 0, NULL
282 };
284 
286 {
287  ai_move, 0, NULL,
288  ai_move, 0, NULL,
289  ai_move, 0, NULL,
290  ai_move, 0, NULL,
291  ai_move, 0, NULL,
292  ai_move, 0, NULL,
293  ai_move, 0, NULL,
294  ai_move, 0, NULL,
295  ai_move, 0, NULL
296 };
298 
300 {
301  ai_move, 0, NULL,
302  ai_move, 0, NULL,
303  ai_move, 0, NULL,
304  ai_move, 0, NULL
305 };
307 
309 {
310  ai_move, 0, NULL,
311  ai_move, 0, NULL,
312  ai_move, 0, NULL,
313  ai_move, 0, NULL
314 };
316 
318 {
319  ai_move, 0, NULL,
320  ai_move, 0, NULL,
321  ai_move, 0, NULL,
322  ai_move, 0, NULL,
323  ai_move, 0, NULL,
324  ai_move, 0, NULL,
325  ai_move, 0, NULL,
326  ai_move, 0, NULL,
327  ai_move, 0, NULL
328 };
330 
332 {
333  ai_move, 0, NULL,
334  ai_move, 0, NULL,
335  ai_move, 0, NULL, // Hold this frame
336  ai_move, 0, NULL,
337  ai_move, 0, NULL,
338  ai_move, 0, NULL
339 };
341 
343 {
344  ai_move, 0, NULL,
345  ai_move, 0, NULL,
346  ai_move, 0, NULL,
347  ai_move, 0, NULL,
348  ai_move, 0, NULL,
349  ai_move, 0, NULL,
350  ai_move, 0, NULL
351 };
353 
355 {
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 };
365 
366 
367 void flyer_fire (edict_t *self, int flash_number)
368 {
369  vec3_t start;
371  vec3_t end;
372  vec3_t dir;
373  int effect;
374 
375  if ((self->s.frame == FRAME_attak204) || (self->s.frame == FRAME_attak207) || (self->s.frame == FRAME_attak210))
376  effect = EF_HYPERBLASTER;
377  else
378  effect = 0;
379  AngleVectors (self->s.angles, forward, right, NULL);
380  G_ProjectSource (self->s.origin, monster_flash_offset[flash_number], forward, right, start);
381 
382  VectorCopy (self->enemy->s.origin, end);
383  end[2] += self->enemy->viewheight;
384  VectorSubtract (end, start, dir);
385 
386  monster_fire_blaster (self, start, dir, 1, 1000, flash_number, effect);
387 }
388 
390 {
392 }
393 
395 {
397 }
398 
399 
401 {
402  ai_charge, 0, NULL,
403  ai_charge, 0, NULL,
404  ai_charge, 0, NULL,
405  ai_charge, -10, flyer_fireleft, // left gun
406  ai_charge, -10, flyer_fireright, // right gun
407  ai_charge, -10, flyer_fireleft, // left gun
408  ai_charge, -10, flyer_fireright, // right gun
409  ai_charge, -10, flyer_fireleft, // left gun
410  ai_charge, -10, flyer_fireright, // right gun
411  ai_charge, -10, flyer_fireleft, // left gun
412  ai_charge, -10, flyer_fireright, // right gun
413  ai_charge, 0, NULL,
414  ai_charge, 0, NULL,
415  ai_charge, 0, NULL,
416  ai_charge, 0, NULL,
417  ai_charge, 0, NULL,
418  ai_charge, 0, NULL
419 };
421 
422 
424 {
425  vec3_t aim;
426 
427  VectorSet (aim, MELEE_DISTANCE, self->mins[0], 0);
428  fire_hit (self, aim, 5, 0);
429  gi.sound (self, CHAN_WEAPON, sound_slash, 1, ATTN_NORM, 0);
430 }
431 
433 {
434  vec3_t aim;
435 
436  VectorSet (aim, MELEE_DISTANCE, self->maxs[0], 0);
437  fire_hit (self, aim, 5, 0);
438  gi.sound (self, CHAN_WEAPON, sound_slash, 1, ATTN_NORM, 0);
439 }
440 
442 {
444  ai_charge, 0, NULL,
445  ai_charge, 0, NULL,
446  ai_charge, 0, NULL,
447  ai_charge, 0, NULL,
448  ai_charge, 0, NULL
449 };
451 
453 {
454  ai_charge, 0, NULL,
455  ai_charge, 0, NULL,
456  ai_charge, 0, NULL
457 };
459 
460 
462 {
463  ai_charge, 0, NULL, // Loop Start
464  ai_charge, 0, NULL,
465  ai_charge, 0, flyer_slash_left, // Left Wing Strike
466  ai_charge, 0, NULL,
467  ai_charge, 0, NULL,
468  ai_charge, 0, NULL,
469  ai_charge, 0, NULL,
470  ai_charge, 0, flyer_slash_right, // Right Wing Strike
471  ai_charge, 0, NULL,
472  ai_charge, 0, NULL,
473  ai_charge, 0, NULL,
474  ai_charge, 0, NULL // Loop Ends
475 
476 };
478 
480 {
481 /* if (random() <= 0.5)
482  self->monsterinfo.currentmove = &flyer_move_attack1;
483  else */
484  self->monsterinfo.currentmove = &flyer_move_loop_melee;
485 }
486 
487 
488 
489 void flyer_attack (edict_t *self)
490 {
491 /* if (random() <= 0.5)
492  self->monsterinfo.currentmove = &flyer_move_attack1;
493  else */
494  self->monsterinfo.currentmove = &flyer_move_attack2;
495 }
496 
498 {
500  self->monsterinfo.currentmove = &flyer_move_start;
501 }
502 
504 {
505  if (nextmove == ACTION_attack1)
506  self->monsterinfo.currentmove = &flyer_move_start_melee;
507  else if (nextmove == ACTION_attack2)
508  self->monsterinfo.currentmove = &flyer_move_attack2;
509  else if (nextmove == ACTION_run)
510  self->monsterinfo.currentmove = &flyer_move_run;
511 }
512 
513 void flyer_melee (edict_t *self)
514 {
515 // flyer.nextmove = ACTION_attack1;
516 // self->monsterinfo.currentmove = &flyer_move_stop;
517  self->monsterinfo.currentmove = &flyer_move_start_melee;
518 }
519 
521 {
522  if (range (self, self->enemy) == RANGE_MELEE)
523  if (random() <= 0.8)
524  self->monsterinfo.currentmove = &flyer_move_loop_melee;
525  else
526  self->monsterinfo.currentmove = &flyer_move_end_melee;
527  else
528  self->monsterinfo.currentmove = &flyer_move_end_melee;
529 }
530 
531 void flyer_pain (edict_t *self, edict_t *other, float kick, int damage)
532 {
533  int n;
534 
535  if (self->health < (self->max_health / 2))
536  self->s.skinnum = 1;
537 
538  if (level.time < self->pain_debounce_time)
539  return;
540 
541  self->pain_debounce_time = level.time + 3;
542  if (skill->value == 3)
543  return; // no pain anims in nightmare
544 
545  n = rand() % 3;
546  if (n == 0)
547  {
548  gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
549  self->monsterinfo.currentmove = &flyer_move_pain1;
550  }
551  else if (n == 1)
552  {
553  gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
554  self->monsterinfo.currentmove = &flyer_move_pain2;
555  }
556  else
557  {
558  gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
559  self->monsterinfo.currentmove = &flyer_move_pain3;
560  }
561 }
562 
563 
564 void flyer_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
565 {
566  gi.sound (self, CHAN_VOICE, sound_die, 1, ATTN_NORM, 0);
567  BecomeExplosion1(self);
568 }
569 
570 
571 /*QUAKED monster_flyer (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  // fix a map bug in jail5.bsp
582  if (!Q_stricmp(level.mapname, "jail5") && (self->s.origin[2] == -104))
583  {
584  self->targetname = self->target;
585  self->target = NULL;
586  }
587 
588  sound_sight = gi.soundindex ("flyer/flysght1.wav");
589  sound_idle = gi.soundindex ("flyer/flysrch1.wav");
590  sound_pain1 = gi.soundindex ("flyer/flypain1.wav");
591  sound_pain2 = gi.soundindex ("flyer/flypain2.wav");
592  sound_slash = gi.soundindex ("flyer/flyatck2.wav");
593  sound_sproing = gi.soundindex ("flyer/flyatck1.wav");
594  sound_die = gi.soundindex ("flyer/flydeth1.wav");
595 
596  gi.soundindex ("flyer/flyatck3.wav");
597 
598  self->s.modelindex = gi.modelindex ("models/monsters/flyer/tris.md2");
599  VectorSet (self->mins, -16, -16, -24);
600  VectorSet (self->maxs, 16, 16, 32);
601  self->movetype = MOVETYPE_STEP;
602  self->solid = SOLID_BBOX;
603 
604  self->s.sound = gi.soundindex ("flyer/flyidle1.wav");
605 
606  self->health = 50;
607  self->mass = 50;
608 
609  self->pain = flyer_pain;
610  self->die = flyer_die;
611 
612  self->monsterinfo.stand = flyer_stand;
613  self->monsterinfo.walk = flyer_walk;
614  self->monsterinfo.run = flyer_run;
615  self->monsterinfo.attack = flyer_attack;
616  self->monsterinfo.melee = flyer_melee;
617  self->monsterinfo.sight = flyer_sight;
618  self->monsterinfo.idle = flyer_idle;
619 
620  gi.linkentity (self);
621 
622  self->monsterinfo.currentmove = &flyer_move_stand;
623  self->monsterinfo.scale = MODEL_SCALE;
624 
625  flymonster_start (self);
626 }
flyer_frames_attack2
mframe_t flyer_frames_attack2[]
Definition: m_flyer.c:400
gi
game_import_t gi
Definition: g_main.c:25
flyer_loop_melee
void flyer_loop_melee(edict_t *self)
Definition: m_flyer.c:479
flyer_sight
void flyer_sight(edict_t *self, edict_t *other)
Definition: m_flyer.c:52
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
flyer_frames_start_melee
mframe_t flyer_frames_start_melee[]
Definition: m_flyer.c:441
flyer_frames_rollleft
mframe_t flyer_frames_rollleft[]
Definition: m_flyer.c:285
FRAME_pain301
#define FRAME_pain301
Definition: m_actor.h:104
flyer_frames_stand
mframe_t flyer_frames_stand[]
Definition: m_flyer.c:68
m_flyer.h
flyer_move_defense
mmove_t flyer_move_defense
Definition: m_flyer.c:340
flyer_frames_walk
mframe_t flyer_frames_walk[]
Definition: m_flyer.c:119
MELEE_DISTANCE
#define MELEE_DISTANCE
Definition: g_local.h:82
VectorSubtract
#define VectorSubtract(a, b, c)
Definition: q_shared.h:163
FRAME_attak119
#define FRAME_attak119
Definition: m_chick.h:42
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:194
SOLID_BBOX
@ SOLID_BBOX
Definition: game.h:37
sound_die
static int sound_die
Definition: m_flyer.c:41
flyer_stand
void flyer_stand(edict_t *self)
Definition: m_flyer.c:232
FRAME_pain109
#define FRAME_pain109
Definition: m_brain.h:120
FRAME_attak204
#define FRAME_attak204
Definition: m_boss31.h:45
flyer_frames_bankright
mframe_t flyer_frames_bankright[]
Definition: m_flyer.c:342
FRAME_stand01
#define FRAME_stand01
Definition: m_boss31.h:136
flyer_setstart
void flyer_setstart(edict_t *self)
Definition: m_flyer.c:497
flyer_start
void flyer_start(edict_t *self)
Definition: m_flyer.c:265
FRAME_attak118
#define FRAME_attak118
Definition: m_boss31.h:41
FRAME_pain304
#define FRAME_pain304
Definition: m_boss31.h:114
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:129
qboolean
qboolean
Definition: q_shared.h:63
flyer_frames_pain3
mframe_t flyer_frames_pain3[]
Definition: m_flyer.c:299
FRAME_bankl07
#define FRAME_bankl07
Definition: m_flyer.h:132
sound_sproing
static int sound_sproing
Definition: m_flyer.c:40
flyer_frames_rollright
mframe_t flyer_frames_rollright[]
Definition: m_flyer.c:271
flyer_move_pain3
mmove_t flyer_move_pain3
Definition: m_flyer.c:306
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:506
BecomeExplosion1
void BecomeExplosion1(edict_t *self)
Definition: g_misc.c:314
flyer_frames_loop_melee
mframe_t flyer_frames_loop_melee[]
Definition: m_flyer.c:461
game_import_t::sound
void(* sound)(edict_t *ent, int channel, int soundindex, float volume, float attenuation, float timeofs)
Definition: game.h:109
ATTN_IDLE
#define ATTN_IDLE
Definition: q_shared.h:996
FRAME_stop07
#define FRAME_stop07
Definition: m_flyer.h:42
FRAME_attak207
#define FRAME_attak207
Definition: m_boss31.h:48
flyer_check_melee
void flyer_check_melee(edict_t *self)
Definition: m_flyer.c:520
range
GLsizei range
Definition: qgl_win.c:121
fire_hit
qboolean fire_hit(edict_t *self, vec3_t aim, int damage, int kick)
Definition: g_weapon.c:63
FRAME_defens01
#define FRAME_defens01
Definition: m_brain.h:178
FRAME_stand45
#define FRAME_stand45
Definition: m_boss2.h:39
flyer_stop
void flyer_stop(edict_t *self)
Definition: m_flyer.c:260
flyer_fireleft
void flyer_fireleft(edict_t *self)
Definition: m_flyer.c:389
ATTN_NORM
#define ATTN_NORM
Definition: q_shared.h:995
FRAME_pain101
#define FRAME_pain101
Definition: m_actor.h:98
flyer_move_stand
mmove_t flyer_move_stand
Definition: m_flyer.c:116
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:196
sound_pain1
static int sound_pain1
Definition: m_flyer.c:37
flyer_slash_left
void flyer_slash_left(edict_t *self)
Definition: m_flyer.c:423
flyer_pain
void flyer_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_flyer.c:531
FRAME_attak201
#define FRAME_attak201
Definition: m_boss31.h:42
FRAME_attak107
#define FRAME_attak107
Definition: m_boss31.h:30
AngleVectors
void AngleVectors(vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition: q_shared.c:93
flyer_move_bankright
mmove_t flyer_move_bankright
Definition: m_flyer.c:352
monster_flash_offset
vec3_t monster_flash_offset[]
Definition: m_flash.c:27
CHAN_VOICE
#define CHAN_VOICE
Definition: q_shared.h:985
flyer_move_pain2
mmove_t flyer_move_pain2
Definition: m_flyer.c:315
edict_s
Definition: g_local.h:968
FRAME_start01
#define FRAME_start01
Definition: m_flyer.h:30
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:452
FRAME_attak106
#define FRAME_attak106
Definition: m_boss31.h:29
sound_idle
static int sound_idle
Definition: m_flyer.c:36
FRAME_pain204
#define FRAME_pain204
Definition: m_brain.h:136
sound_sight
static int sound_sight
Definition: m_flyer.c:35
game_import_t::soundindex
int(* soundindex)(char *name)
Definition: game.h:122
forward
static vec3_t forward
Definition: p_view.c:29
flyer_frames_defense
mframe_t flyer_frames_defense[]
Definition: m_flyer.c:331
ACTION_attack1
#define ACTION_attack1
Definition: m_flyer.h:25
ACTION_run
#define ACTION_run
Definition: m_flyer.h:27
game_import_t::modelindex
int(* modelindex)(char *name)
Definition: game.h:121
FRAME_rollf01
#define FRAME_rollf01
Definition: m_flyer.h:140
mframe_t
Definition: g_local.h:403
mmove_t
Definition: g_local.h:410
flyer_move_run
mmove_t flyer_move_run
Definition: m_flyer.c:217
cvar_s::value
float value
Definition: q_shared.h:331
SP_monster_flyer
void SP_monster_flyer(edict_t *self)
Definition: m_flyer.c:573
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:163
random
#define random()
Definition: g_local.h:515
flyer_move_rollright
mmove_t flyer_move_rollright
Definition: m_flyer.c:283
NULL
#define NULL
Definition: q_shared.h:67
flyer_melee
void flyer_melee(edict_t *self)
Definition: m_flyer.c:513
flyer_slash_right
void flyer_slash_right(edict_t *self)
Definition: m_flyer.c:432
flyer_walk
void flyer_walk(edict_t *self)
Definition: m_flyer.c:227
FRAME_bankl01
#define FRAME_bankl01
Definition: m_flyer.h:126
FRAME_attak210
#define FRAME_attak210
Definition: m_boss31.h:51
Q_stricmp
int Q_stricmp(char *s1, char *s2)
Definition: q_shared.c:1180
flyer_move_pain1
mmove_t flyer_move_pain1
Definition: m_flyer.c:329
skill
cvar_t * skill
Definition: g_main.c:38
visible
qboolean visible(edict_t *self, edict_t *other)
Definition: g_ai.c:287
FRAME_start06
#define FRAME_start06
Definition: m_flyer.h:35
FRAME_stop01
#define FRAME_stop01
Definition: m_flyer.h:36
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:92
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
flyer_idle
void flyer_idle(edict_t *self)
Definition: m_flyer.c:57
flyer_frames_stop
mframe_t flyer_frames_stop[]
Definition: m_flyer.c:248
FRAME_bankr07
#define FRAME_bankr07
Definition: m_flyer.h:139
flyer_move_start_melee
mmove_t flyer_move_start_melee
Definition: m_flyer.c:450
VectorCopy
#define VectorCopy(a, b)
Definition: q_shared.h:165
flyer_move_loop_melee
mmove_t flyer_move_loop_melee
Definition: m_flyer.c:477
FRAME_rollr09
#define FRAME_rollr09
Definition: m_flyer.h:157
FRAME_bankr01
#define FRAME_bankr01
Definition: m_flyer.h:133
RANGE_MELEE
#define RANGE_MELEE
Definition: g_local.h:119
CHAN_WEAPON
#define CHAN_WEAPON
Definition: q_shared.h:984
flyer_move_start
mmove_t flyer_move_start
Definition: m_flyer.c:246
flyer_move_walk
mmove_t flyer_move_walk
Definition: m_flyer.c:167
level
GLint level
Definition: qgl_win.c:116
nextmove
static int nextmove
Definition: m_flyer.c:33
ai_run
void ai_run(edict_t *self, float dist)
Definition: g_ai.c:914
FRAME_rollr01
#define FRAME_rollr01
Definition: m_flyer.h:149
flyer_die
void flyer_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_flyer.c:564
flyer_pop_blades
void flyer_pop_blades(edict_t *self)
Definition: m_flyer.c:62
flyer_fireright
void flyer_fireright(edict_t *self)
Definition: m_flyer.c:394
flyer_fire
void flyer_fire(edict_t *self, int flash_number)
Definition: m_flyer.c:367
FRAME_rollf09
#define FRAME_rollf09
Definition: m_flyer.h:148
flyer_attack
void flyer_attack(edict_t *self)
Definition: m_flyer.c:489
flyer_move_bankleft
mmove_t flyer_move_bankleft
Definition: m_flyer.c:364
flyer_move_rollleft
mmove_t flyer_move_rollleft
Definition: m_flyer.c:297
FRAME_attak121
#define FRAME_attak121
Definition: m_chick.h:44
FRAME_pain201
#define FRAME_pain201
Definition: m_actor.h:101
flyer_frames_run
mframe_t flyer_frames_run[]
Definition: m_flyer.c:169
FRAME_attak217
#define FRAME_attak217
Definition: m_brain.h:111
sound_slash
static int sound_slash
Definition: m_flyer.c:39
VectorSet
#define VectorSet(v, x, y, z)
Definition: q_shared.h:168
flyer_frames_end_melee
mframe_t flyer_frames_end_melee[]
Definition: m_flyer.c:452
flyer_frames_bankleft
mframe_t flyer_frames_bankleft[]
Definition: m_flyer.c:354
right
GLdouble right
Definition: qgl_win.c:159
flyer_move_end_melee
mmove_t flyer_move_end_melee
Definition: m_flyer.c:458
MZ2_FLYER_BLASTER_1
#define MZ2_FLYER_BLASTER_1
Definition: q_shared.h:732
sound_pain2
static int sound_pain2
Definition: m_flyer.c:38
game_import_t::linkentity
void(* linkentity)(edict_t *ent)
Definition: game.h:138
flyer_frames_pain2
mframe_t flyer_frames_pain2[]
Definition: m_flyer.c:308
flyer_run
void flyer_run(edict_t *self)
Definition: m_flyer.c:219
ACTION_attack2
#define ACTION_attack2
Definition: m_flyer.h:26
EF_HYPERBLASTER
#define EF_HYPERBLASTER
Definition: q_shared.h:567
vec3_t
vec_t vec3_t[3]
Definition: q_shared.h:134
flyer_move_attack2
mmove_t flyer_move_attack2
Definition: m_flyer.c:420
FRAME_defens06
#define FRAME_defens06
Definition: m_brain.h:183
flyer_nextmove
void flyer_nextmove(edict_t *self)
Definition: m_flyer.c:503
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:106
flyer_frames_start
mframe_t flyer_frames_start[]
Definition: m_flyer.c:237
FRAME_attak101
#define FRAME_attak101
Definition: m_boss31.h:24
MZ2_FLYER_BLASTER_2
#define MZ2_FLYER_BLASTER_2
Definition: q_shared.h:733
g_local.h
flymonster_start
void flymonster_start(edict_t *self)
Definition: g_monster.c:715
flyer_move_stop
mmove_t flyer_move_stop
Definition: m_flyer.c:258
flyer_frames_pain1
mframe_t flyer_frames_pain1[]
Definition: m_flyer.c:317