icculus quake2 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},
244  {ai_move, 0, flyer_nextmove}
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},
256  {ai_move, 0, flyer_nextmove}
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:80
VectorSubtract
#define VectorSubtract(a, b, c)
Definition: q_shared.h:156
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:127
qboolean
qboolean
Definition: q_shared.h:56
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:1020
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:1019
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:194
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:1009
flyer_move_pain2
mmove_t flyer_move_pain2
Definition: m_flyer.c:315
edict_s
Definition: g_local.h:962
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:401
mmove_t
Definition: g_local.h:408
flyer_move_run
mmove_t flyer_move_run
Definition: m_flyer.c:217
cvar_s::value
float value
Definition: q_shared.h:324
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:509
flyer_move_rollright
mmove_t flyer_move_rollright
Definition: m_flyer.c:283
NULL
#define NULL
Definition: q_shared.h:60
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:1192
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:158
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:117
CHAN_WEAPON
#define CHAN_WEAPON
Definition: q_shared.h:1008
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:915
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:161
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:756
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:563
vec3_t
vec_t vec3_t[3]
Definition: q_shared.h:127
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:757
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