Quake II RTX doxygen  1.0 dev
m_float.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 floater
22 
23 ==============================================================================
24 */
25 
26 #include "g_local.h"
27 #include "m_float.h"
28 
29 
30 static int sound_attack2;
31 static int sound_attack3;
32 static int sound_death1;
33 static int sound_idle;
34 static int sound_pain1;
35 static int sound_pain2;
36 static int sound_sight;
37 
38 
39 void floater_sight(edict_t *self, edict_t *other)
40 {
41  gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
42 }
43 
44 void floater_idle(edict_t *self)
45 {
46  gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0);
47 }
48 
49 
50 //void floater_stand1 (edict_t *self);
51 void floater_dead(edict_t *self);
52 void floater_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
53 void floater_run(edict_t *self);
54 void floater_wham(edict_t *self);
55 void floater_zap(edict_t *self);
56 
57 
58 void floater_fire_blaster(edict_t *self)
59 {
60  vec3_t start;
61  vec3_t forward, right;
62  vec3_t end;
63  vec3_t dir;
64  int effect;
65 
66  if ((self->s.frame == FRAME_attak104) || (self->s.frame == FRAME_attak107))
67  effect = EF_HYPERBLASTER;
68  else
69  effect = 0;
70  AngleVectors(self->s.angles, forward, right, NULL);
71  G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_FLOAT_BLASTER_1], forward, right, start);
72 
73  VectorCopy(self->enemy->s.origin, end);
74  end[2] += self->enemy->viewheight;
75  VectorSubtract(end, start, dir);
76 
77  monster_fire_blaster(self, start, dir, 1, 1000, MZ2_FLOAT_BLASTER_1, effect);
78 }
79 
80 
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  { ai_stand, 0, NULL },
116  { ai_stand, 0, NULL },
117  { ai_stand, 0, NULL },
118  { ai_stand, 0, NULL },
119  { ai_stand, 0, NULL },
120  { ai_stand, 0, NULL },
121  { ai_stand, 0, NULL },
122  { ai_stand, 0, NULL },
123  { ai_stand, 0, NULL },
124  { ai_stand, 0, NULL },
125  { ai_stand, 0, NULL },
126  { ai_stand, 0, NULL },
127  { ai_stand, 0, NULL },
128  { ai_stand, 0, NULL },
129  { ai_stand, 0, NULL },
130  { ai_stand, 0, NULL },
131  { ai_stand, 0, NULL },
132  { ai_stand, 0, NULL },
133  { ai_stand, 0, NULL }
134 };
136 
138  { ai_stand, 0, NULL },
139  { ai_stand, 0, NULL },
140  { ai_stand, 0, NULL },
141  { ai_stand, 0, NULL },
142  { ai_stand, 0, NULL },
143  { ai_stand, 0, NULL },
144  { ai_stand, 0, NULL },
145  { ai_stand, 0, NULL },
146  { ai_stand, 0, NULL },
147  { ai_stand, 0, NULL },
148  { ai_stand, 0, NULL },
149  { ai_stand, 0, NULL },
150  { ai_stand, 0, NULL },
151  { ai_stand, 0, NULL },
152  { ai_stand, 0, NULL },
153  { ai_stand, 0, NULL },
154  { ai_stand, 0, NULL },
155  { ai_stand, 0, NULL },
156  { ai_stand, 0, NULL },
157  { ai_stand, 0, NULL },
158  { ai_stand, 0, NULL },
159  { ai_stand, 0, NULL },
160  { ai_stand, 0, NULL },
161  { ai_stand, 0, NULL },
162  { ai_stand, 0, NULL },
163  { ai_stand, 0, NULL },
164  { ai_stand, 0, NULL },
165  { ai_stand, 0, NULL },
166  { ai_stand, 0, NULL },
167  { ai_stand, 0, NULL },
168  { ai_stand, 0, NULL },
169  { ai_stand, 0, NULL },
170  { ai_stand, 0, NULL },
171  { ai_stand, 0, NULL },
172  { ai_stand, 0, NULL },
173  { ai_stand, 0, NULL },
174  { ai_stand, 0, NULL },
175  { ai_stand, 0, NULL },
176  { ai_stand, 0, NULL },
177  { ai_stand, 0, NULL },
178  { ai_stand, 0, NULL },
179  { ai_stand, 0, NULL },
180  { ai_stand, 0, NULL },
181  { ai_stand, 0, NULL },
182  { ai_stand, 0, NULL },
183  { ai_stand, 0, NULL },
184  { ai_stand, 0, NULL },
185  { ai_stand, 0, NULL },
186  { ai_stand, 0, NULL },
187  { ai_stand, 0, NULL },
188  { ai_stand, 0, NULL },
189  { ai_stand, 0, NULL }
190 };
192 
193 void floater_stand(edict_t *self)
194 {
195  if (random() <= 0.5)
196  self->monsterinfo.currentmove = &floater_move_stand1;
197  else
198  self->monsterinfo.currentmove = &floater_move_stand2;
199 }
200 
202  { ai_move, 0, NULL },
203  { ai_move, 0, NULL },
204  { ai_move, 0, NULL },
205  { ai_move, 0, NULL },
206  { ai_move, 0, NULL },
207  { ai_move, 0, NULL },
208  { ai_move, 0, NULL },
209  { ai_move, 0, NULL },
210  { ai_move, 0, NULL },
211  { ai_move, 0, NULL },
212  { ai_move, 0, NULL },
213  { ai_move, 0, NULL },
214  { ai_move, 0, NULL },
215  { ai_move, 0, NULL },
216  { ai_move, 0, NULL },
217  { ai_move, 0, NULL },
218  { ai_move, 0, NULL },
219  { ai_move, 0, NULL },
220  { ai_move, 0, NULL },
221  { ai_move, 0, NULL },
222  { ai_move, 0, NULL },
223  { ai_move, 0, NULL },
224  { ai_move, 0, NULL },
225  { ai_move, 0, NULL },
226  { ai_move, 0, NULL },
227  { ai_move, 0, NULL },
228  { ai_move, 0, NULL },
229  { ai_move, 0, NULL },
230  { ai_move, 0, NULL },
231  { ai_move, 0, NULL }
232 };
234 
236  { ai_charge, 0, NULL }, // Blaster attack
237  { ai_charge, 0, NULL },
238  { ai_charge, 0, NULL },
239  { ai_charge, 0, floater_fire_blaster }, // BOOM (0, -25.8, 32.5) -- LOOP Starts
246  { ai_charge, 0, NULL },
247  { ai_charge, 0, NULL },
248  { ai_charge, 0, NULL },
249  { ai_charge, 0, NULL } // -- LOOP Ends
250 };
252 
254  { ai_charge, 0, NULL }, // Claws
255  { ai_charge, 0, NULL },
256  { ai_charge, 0, NULL },
257  { ai_charge, 0, NULL },
258  { ai_charge, 0, NULL },
259  { ai_charge, 0, NULL },
260  { ai_charge, 0, NULL },
261  { ai_charge, 0, NULL },
262  { ai_charge, 0, NULL },
263  { ai_charge, 0, NULL },
264  { ai_charge, 0, NULL },
265  { ai_charge, 0, floater_wham }, // WHAM (0, -45, 29.6) -- LOOP Starts
266  { ai_charge, 0, NULL },
267  { ai_charge, 0, NULL },
268  { ai_charge, 0, NULL },
269  { ai_charge, 0, NULL },
270  { ai_charge, 0, NULL },
271  { ai_charge, 0, NULL },
272  { ai_charge, 0, NULL }, // -- LOOP Ends
273  { ai_charge, 0, NULL },
274  { ai_charge, 0, NULL },
275  { ai_charge, 0, NULL },
276  { ai_charge, 0, NULL },
277  { ai_charge, 0, NULL },
278  { ai_charge, 0, NULL }
279 };
281 
283  { ai_charge, 0, NULL },
284  { ai_charge, 0, NULL },
285  { ai_charge, 0, NULL },
286  { ai_charge, 0, NULL },
287  { ai_charge, 0, NULL },
288  { ai_charge, 0, NULL },
289  { ai_charge, 0, NULL },
290  { ai_charge, 0, NULL },
291  { ai_charge, 0, floater_zap }, // -- LOOP Starts
292  { ai_charge, 0, NULL },
293  { ai_charge, 0, NULL },
294  { ai_charge, 0, NULL },
295  { ai_charge, 0, NULL },
296  { ai_charge, 0, NULL },
297  { ai_charge, 0, NULL },
298  { ai_charge, 0, NULL },
299  { ai_charge, 0, NULL },
300  { ai_charge, 0, NULL },
301  { ai_charge, 0, NULL },
302  { ai_charge, 0, NULL },
303  { ai_charge, 0, NULL },
304  { ai_charge, 0, NULL },
305  { ai_charge, 0, NULL },
306  { ai_charge, 0, NULL },
307  { ai_charge, 0, NULL },
308  { ai_charge, 0, NULL },
309  { ai_charge, 0, NULL },
310  { ai_charge, 0, NULL },
311  { ai_charge, 0, NULL }, // -- LOOP Ends
312  { ai_charge, 0, NULL },
313  { ai_charge, 0, NULL },
314  { ai_charge, 0, NULL },
315  { ai_charge, 0, NULL },
316  { ai_charge, 0, NULL }
317 };
319 
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  { ai_move, 0, NULL },
329  { ai_move, 0, NULL },
330  { ai_move, 0, NULL },
331  { ai_move, 0, NULL },
332  { ai_move, 0, NULL },
333  { ai_move, 0, NULL }
334 };
336 
338  { ai_move, 0, NULL },
339  { ai_move, 0, NULL },
340  { ai_move, 0, NULL },
341  { ai_move, 0, NULL },
342  { ai_move, 0, NULL },
343  { ai_move, 0, NULL },
344  { ai_move, 0, NULL }
345 };
347 
349  { ai_move, 0, NULL },
350  { ai_move, 0, NULL },
351  { ai_move, 0, NULL },
352  { ai_move, 0, NULL },
353  { ai_move, 0, NULL },
354  { ai_move, 0, NULL },
355  { ai_move, 0, NULL },
356  { ai_move, 0, NULL }
357 };
359 
361  { ai_move, 0, NULL },
362  { ai_move, 0, NULL },
363  { ai_move, 0, NULL },
364  { ai_move, 0, NULL },
365  { ai_move, 0, NULL },
366  { ai_move, 0, NULL },
367  { ai_move, 0, NULL },
368  { ai_move, 0, NULL },
369  { ai_move, 0, NULL },
370  { ai_move, 0, NULL },
371  { ai_move, 0, NULL },
372  { ai_move, 0, NULL }
373 };
375 
377  { ai_walk, 5, NULL },
378  { ai_walk, 5, NULL },
379  { ai_walk, 5, NULL },
380  { ai_walk, 5, NULL },
381  { ai_walk, 5, NULL },
382  { ai_walk, 5, NULL },
383  { ai_walk, 5, NULL },
384  { ai_walk, 5, NULL },
385  { ai_walk, 5, NULL },
386  { ai_walk, 5, NULL },
387  { ai_walk, 5, NULL },
388  { ai_walk, 5, NULL },
389  { ai_walk, 5, NULL },
390  { ai_walk, 5, NULL },
391  { ai_walk, 5, NULL },
392  { ai_walk, 5, NULL },
393  { ai_walk, 5, NULL },
394  { ai_walk, 5, NULL },
395  { ai_walk, 5, NULL },
396  { ai_walk, 5, NULL },
397  { ai_walk, 5, NULL },
398  { ai_walk, 5, NULL },
399  { ai_walk, 5, NULL },
400  { ai_walk, 5, NULL },
401  { ai_walk, 5, NULL },
402  { ai_walk, 5, NULL },
403  { ai_walk, 5, NULL },
404  { ai_walk, 5, NULL },
405  { ai_walk, 5, NULL },
406  { ai_walk, 5, NULL },
407  { ai_walk, 5, NULL },
408  { ai_walk, 5, NULL },
409  { ai_walk, 5, NULL },
410  { ai_walk, 5, NULL },
411  { ai_walk, 5, NULL },
412  { ai_walk, 5, NULL },
413  { ai_walk, 5, NULL },
414  { ai_walk, 5, NULL },
415  { ai_walk, 5, NULL },
416  { ai_walk, 5, NULL },
417  { ai_walk, 5, NULL },
418  { ai_walk, 5, NULL },
419  { ai_walk, 5, NULL },
420  { ai_walk, 5, NULL },
421  { ai_walk, 5, NULL },
422  { ai_walk, 5, NULL },
423  { ai_walk, 5, NULL },
424  { ai_walk, 5, NULL },
425  { ai_walk, 5, NULL },
426  { ai_walk, 5, NULL },
427  { ai_walk, 5, NULL },
428  { ai_walk, 5, NULL }
429 };
431 
433  { ai_run, 13, NULL },
434  { ai_run, 13, NULL },
435  { ai_run, 13, NULL },
436  { ai_run, 13, NULL },
437  { ai_run, 13, NULL },
438  { ai_run, 13, NULL },
439  { ai_run, 13, NULL },
440  { ai_run, 13, NULL },
441  { ai_run, 13, NULL },
442  { ai_run, 13, NULL },
443  { ai_run, 13, NULL },
444  { ai_run, 13, NULL },
445  { ai_run, 13, NULL },
446  { ai_run, 13, NULL },
447  { ai_run, 13, NULL },
448  { ai_run, 13, NULL },
449  { ai_run, 13, NULL },
450  { ai_run, 13, NULL },
451  { ai_run, 13, NULL },
452  { ai_run, 13, NULL },
453  { ai_run, 13, NULL },
454  { ai_run, 13, NULL },
455  { ai_run, 13, NULL },
456  { ai_run, 13, NULL },
457  { ai_run, 13, NULL },
458  { ai_run, 13, NULL },
459  { ai_run, 13, NULL },
460  { ai_run, 13, NULL },
461  { ai_run, 13, NULL },
462  { ai_run, 13, NULL },
463  { ai_run, 13, NULL },
464  { ai_run, 13, NULL },
465  { ai_run, 13, NULL },
466  { ai_run, 13, NULL },
467  { ai_run, 13, NULL },
468  { ai_run, 13, NULL },
469  { ai_run, 13, NULL },
470  { ai_run, 13, NULL },
471  { ai_run, 13, NULL },
472  { ai_run, 13, NULL },
473  { ai_run, 13, NULL },
474  { ai_run, 13, NULL },
475  { ai_run, 13, NULL },
476  { ai_run, 13, NULL },
477  { ai_run, 13, NULL },
478  { ai_run, 13, NULL },
479  { ai_run, 13, NULL },
480  { ai_run, 13, NULL },
481  { ai_run, 13, NULL },
482  { ai_run, 13, NULL },
483  { ai_run, 13, NULL },
484  { ai_run, 13, NULL }
485 };
487 
488 void floater_run(edict_t *self)
489 {
490  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
491  self->monsterinfo.currentmove = &floater_move_stand1;
492  else
493  self->monsterinfo.currentmove = &floater_move_run;
494 }
495 
496 void floater_walk(edict_t *self)
497 {
498  self->monsterinfo.currentmove = &floater_move_walk;
499 }
500 
501 void floater_wham(edict_t *self)
502 {
503  static vec3_t aim = {MELEE_DISTANCE, 0, 0};
504  gi.sound(self, CHAN_WEAPON, sound_attack3, 1, ATTN_NORM, 0);
505  fire_hit(self, aim, 5 + rand() % 6, -50);
506 }
507 
508 void floater_zap(edict_t *self)
509 {
510  vec3_t forward, right;
511  vec3_t origin;
512  vec3_t dir;
513  vec3_t offset;
514 
515  VectorSubtract(self->enemy->s.origin, self->s.origin, dir);
516 
517  AngleVectors(self->s.angles, forward, right, NULL);
518  //FIXME use a flash and replace these two lines with the commented one
519  VectorSet(offset, 18.5, -0.9, 10);
520  G_ProjectSource(self->s.origin, offset, forward, right, origin);
521 // G_ProjectSource (self->s.origin, monster_flash_offset[flash_number], forward, right, origin);
522 
523  gi.sound(self, CHAN_WEAPON, sound_attack2, 1, ATTN_NORM, 0);
524 
525  //FIXME use the flash, Luke
526  gi.WriteByte(svc_temp_entity);
527  gi.WriteByte(TE_SPLASH);
528  gi.WriteByte(32);
529  gi.WritePosition(origin);
530  gi.WriteDir(dir);
531  gi.WriteByte(1); //sparks
532  gi.multicast(origin, MULTICAST_PVS);
533 
534  T_Damage(self->enemy, self, self, dir, self->enemy->s.origin, vec3_origin, 5 + rand() % 6, -10, DAMAGE_ENERGY, MOD_UNKNOWN);
535 }
536 
537 void floater_attack(edict_t *self)
538 {
539  self->monsterinfo.currentmove = &floater_move_attack1;
540 }
541 
542 
543 void floater_melee(edict_t *self)
544 {
545  if (random() < 0.5)
546  self->monsterinfo.currentmove = &floater_move_attack3;
547  else
548  self->monsterinfo.currentmove = &floater_move_attack2;
549 }
550 
551 
552 void floater_pain(edict_t *self, edict_t *other, float kick, int damage)
553 {
554  int n;
555 
556  if (self->health < (self->max_health / 2))
557  self->s.skinnum = 1;
558 
559  if (level.time < self->pain_debounce_time)
560  return;
561 
562  self->pain_debounce_time = level.time + 3;
563  if (skill->value == 3)
564  return; // no pain anims in nightmare
565 
566  n = (rand() + 1) % 3;
567  if (n == 0) {
568  gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
569  self->monsterinfo.currentmove = &floater_move_pain1;
570  } else {
571  gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
572  self->monsterinfo.currentmove = &floater_move_pain2;
573  }
574 }
575 
576 void floater_dead(edict_t *self)
577 {
578  VectorSet(self->mins, -16, -16, -24);
579  VectorSet(self->maxs, 16, 16, -8);
580  self->movetype = MOVETYPE_TOSS;
581  self->svflags |= SVF_DEADMONSTER;
582  self->nextthink = 0;
583  gi.linkentity(self);
584 }
585 
586 void floater_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
587 {
588  gi.sound(self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0);
589  BecomeExplosion1(self);
590 }
591 
592 /*QUAKED monster_floater (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
593 */
594 void SP_monster_floater(edict_t *self)
595 {
596  if (deathmatch->value) {
597  G_FreeEdict(self);
598  return;
599  }
600 
601  sound_attack2 = gi.soundindex("floater/fltatck2.wav");
602  sound_attack3 = gi.soundindex("floater/fltatck3.wav");
603  sound_death1 = gi.soundindex("floater/fltdeth1.wav");
604  sound_idle = gi.soundindex("floater/fltidle1.wav");
605  sound_pain1 = gi.soundindex("floater/fltpain1.wav");
606  sound_pain2 = gi.soundindex("floater/fltpain2.wav");
607  sound_sight = gi.soundindex("floater/fltsght1.wav");
608 
609  gi.soundindex("floater/fltatck1.wav");
610 
611  self->s.sound = gi.soundindex("floater/fltsrch1.wav");
612 
613  self->movetype = MOVETYPE_STEP;
614  self->solid = SOLID_BBOX;
615  self->s.modelindex = gi.modelindex("models/monsters/float/tris.md2");
616  VectorSet(self->mins, -24, -24, -24);
617  VectorSet(self->maxs, 24, 24, 32);
618 
619  self->health = 200;
620  self->gib_health = -80;
621  self->mass = 300;
622 
623  self->pain = floater_pain;
624  self->die = floater_die;
625 
626  self->monsterinfo.stand = floater_stand;
627  self->monsterinfo.walk = floater_walk;
628  self->monsterinfo.run = floater_run;
629 // self->monsterinfo.dodge = floater_dodge;
630  self->monsterinfo.attack = floater_attack;
631  self->monsterinfo.melee = floater_melee;
632  self->monsterinfo.sight = floater_sight;
633  self->monsterinfo.idle = floater_idle;
634 
635  gi.linkentity(self);
636 
637  if (random() <= 0.5)
638  self->monsterinfo.currentmove = &floater_move_stand1;
639  else
640  self->monsterinfo.currentmove = &floater_move_stand2;
641 
642  self->monsterinfo.scale = MODEL_SCALE;
643 
644  flymonster_start(self);
645 }
gi
game_import_t gi
Definition: g_main.c:23
deathmatch
cvar_t * deathmatch
Definition: g_main.c:33
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
sound_pain1
static int sound_pain1
Definition: m_float.c:34
MELEE_DISTANCE
#define MELEE_DISTANCE
Definition: g_local.h:82
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:175
floater_frames_pain1
mframe_t floater_frames_pain1[]
Definition: m_float.c:337
sound_death1
static int sound_death1
Definition: m_float.c:32
FRAME_stand101
#define FRAME_stand101
Definition: m_actor.h:150
floater_move_stand2
mmove_t floater_move_stand2
Definition: m_float.c:191
FRAME_attak114
#define FRAME_attak114
Definition: m_boss31.h:35
floater_stand
void floater_stand(edict_t *self)
Definition: m_float.c:193
floater_frames_activate
mframe_t floater_frames_activate[]
Definition: m_float.c:201
floater_frames_attack2
mframe_t floater_frames_attack2[]
Definition: m_float.c:253
sound_attack3
static int sound_attack3
Definition: m_float.c:31
FRAME_stand201
#define FRAME_stand201
Definition: m_actor.h:190
floater_walk
void floater_walk(edict_t *self)
Definition: m_float.c:496
DAMAGE_ENERGY
#define DAMAGE_ENERGY
Definition: g_local.h:649
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:126
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:504
BecomeExplosion1
void BecomeExplosion1(edict_t *self)
Definition: g_misc.c:297
floater_move_activate
mmove_t floater_move_activate
Definition: m_float.c:233
floater_idle
void floater_idle(edict_t *self)
Definition: m_float.c:44
floater_move_run
mmove_t floater_move_run
Definition: m_float.c:486
fire_hit
qboolean fire_hit(edict_t *self, vec3_t aim, int damage, int kick)
Definition: g_weapon.c:59
T_Damage
void T_Damage(edict_t *targ, edict_t *inflictor, edict_t *attacker, vec3_t dir, vec3_t point, vec3_t normal, int damage, int knockback, int dflags, int mod)
Definition: g_combat.c:358
other
@ other
Definition: ogg.c:63
FRAME_pain101
#define FRAME_pain101
Definition: m_actor.h:96
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:192
floater_move_attack3
mmove_t floater_move_attack3
Definition: m_float.c:318
floater_wham
void floater_wham(edict_t *self)
Definition: m_float.c:501
SP_monster_floater
void SP_monster_floater(edict_t *self)
Definition: m_float.c:594
floater_frames_attack1
mframe_t floater_frames_attack1[]
Definition: m_float.c:235
FRAME_death01
#define FRAME_death01
Definition: m_boss31.h:53
FRAME_attak201
#define FRAME_attak201
Definition: m_boss31.h:40
FRAME_attak107
#define FRAME_attak107
Definition: m_boss31.h:28
floater_move_pain1
mmove_t floater_move_pain1
Definition: m_float.c:346
sound_idle
static int sound_idle
Definition: m_float.c:33
vec3_origin
vec3_t vec3_origin
Definition: shared.c:21
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:421
floater_attack
void floater_attack(edict_t *self)
Definition: m_float.c:537
floater_run
void floater_run(edict_t *self)
Definition: m_float.c:488
FRAME_attak104
#define FRAME_attak104
Definition: m_boss31.h:25
forward
static vec3_t forward
Definition: p_view.c:27
svc_temp_entity
#define svc_temp_entity
Definition: g_local.h:38
FRAME_pain312
#define FRAME_pain312
Definition: m_boss31.h:120
FRAME_attak301
#define FRAME_attak301
Definition: m_boss32.h:223
mframe_t
Definition: g_local.h:394
mmove_t
Definition: g_local.h:400
sound_sight
static int sound_sight
Definition: m_float.c:36
floater_move_attack1
mmove_t floater_move_attack1
Definition: m_float.c:251
FRAME_attak334
#define FRAME_attak334
Definition: m_float.h:125
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:148
origin
static vec3_t origin
Definition: mesh.c:27
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
floater_frames_death
mframe_t floater_frames_death[]
Definition: m_float.c:320
floater_pain
void floater_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_float.c:552
floater_frames_pain2
mframe_t floater_frames_pain2[]
Definition: m_float.c:348
floater_frames_pain3
mframe_t floater_frames_pain3[]
Definition: m_float.c:360
FRAME_pain107
#define FRAME_pain107
Definition: m_brain.h:116
floater_sight
void floater_sight(edict_t *self, edict_t *other)
Definition: m_float.c:39
floater_move_pain2
mmove_t floater_move_pain2
Definition: m_float.c:358
skill
cvar_t * skill
Definition: g_main.c:36
FRAME_death13
#define FRAME_death13
Definition: m_berserk.h:257
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
FRAME_actvat31
#define FRAME_actvat31
Definition: m_float.h:52
floater_frames_stand2
mframe_t floater_frames_stand2[]
Definition: m_float.c:137
floater_frames_attack3
mframe_t floater_frames_attack3[]
Definition: m_float.c:282
floater_move_pain3
mmove_t floater_move_pain3
Definition: m_float.c:374
FRAME_attak225
#define FRAME_attak225
Definition: m_float.h:91
floater_dead
void floater_dead(edict_t *self)
Definition: m_float.c:576
floater_move_death
mmove_t floater_move_death
Definition: m_float.c:335
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_pain208
#define FRAME_pain208
Definition: m_brain.h:138
level
level_locals_t level
Definition: g_main.c:22
floater_frames_run
mframe_t floater_frames_run[]
Definition: m_float.c:432
MOD_UNKNOWN
#define MOD_UNKNOWN
Definition: g_local.h:457
monster_flash_offset
const vec3_t monster_flash_offset[256]
Definition: m_flash.c:25
FRAME_pain201
#define FRAME_pain201
Definition: m_actor.h:99
sound_pain2
static int sound_pain2
Definition: m_float.c:35
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:194
floater_frames_stand1
mframe_t floater_frames_stand1[]
Definition: m_float.c:81
floater_melee
void floater_melee(edict_t *self)
Definition: m_float.c:543
floater_move_attack2
mmove_t floater_move_attack2
Definition: m_float.c:280
floater_frames_walk
mframe_t floater_frames_walk[]
Definition: m_float.c:376
floater_die
void floater_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_float.c:586
floater_fire_blaster
void floater_fire_blaster(edict_t *self)
Definition: m_float.c:58
FRAME_stand152
#define FRAME_stand152
Definition: m_float.h:217
m_float.h
floater_move_stand1
mmove_t floater_move_stand1
Definition: m_float.c:135
floater_zap
void floater_zap(edict_t *self)
Definition: m_float.c:508
sound_attack2
static int sound_attack2
Definition: m_float.c:30
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:100
floater_move_walk
mmove_t floater_move_walk
Definition: m_float.c:430
FRAME_attak101
#define FRAME_attak101
Definition: m_boss31.h:22
FRAME_stand252
#define FRAME_stand252
Definition: m_boss32.h:487
g_local.h
flymonster_start
void flymonster_start(edict_t *self)
Definition: g_monster.c:653
FRAME_actvat01
#define FRAME_actvat01
Definition: m_float.h:22