Quake II RTX doxygen  1.0 dev
m_mutant.c File Reference
#include "g_local.h"
#include "m_mutant.h"

Go to the source code of this file.

Functions

void mutant_step (edict_t *self)
 
void mutant_sight (edict_t *self, edict_t *other)
 
void mutant_search (edict_t *self)
 
void mutant_swing (edict_t *self)
 
void mutant_stand (edict_t *self)
 
void mutant_idle_loop (edict_t *self)
 
void mutant_idle (edict_t *self)
 
void mutant_walk (edict_t *self)
 
void mutant_walk_loop (edict_t *self)
 
void mutant_run (edict_t *self)
 
void mutant_hit_left (edict_t *self)
 
void mutant_hit_right (edict_t *self)
 
void mutant_check_refire (edict_t *self)
 
void mutant_melee (edict_t *self)
 
void mutant_jump_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)
 
void mutant_jump_takeoff (edict_t *self)
 
void mutant_check_landing (edict_t *self)
 
void mutant_jump (edict_t *self)
 
qboolean mutant_check_melee (edict_t *self)
 
qboolean mutant_check_jump (edict_t *self)
 
qboolean mutant_checkattack (edict_t *self)
 
void mutant_pain (edict_t *self, edict_t *other, float kick, int damage)
 
void mutant_dead (edict_t *self)
 
void mutant_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
 
void SP_monster_mutant (edict_t *self)
 

Variables

static int sound_swing
 
static int sound_hit
 
static int sound_hit2
 
static int sound_death
 
static int sound_idle
 
static int sound_pain1
 
static int sound_pain2
 
static int sound_sight
 
static int sound_search
 
static int sound_step1
 
static int sound_step2
 
static int sound_step3
 
static int sound_thud
 
mframe_t mutant_frames_stand []
 
mmove_t mutant_move_stand = {FRAME_stand101, FRAME_stand151, mutant_frames_stand, NULL}
 
mframe_t mutant_frames_idle []
 
mmove_t mutant_move_idle = {FRAME_stand152, FRAME_stand164, mutant_frames_idle, mutant_stand}
 
mframe_t mutant_frames_walk []
 
mmove_t mutant_move_walk = {FRAME_walk05, FRAME_walk16, mutant_frames_walk, NULL}
 
mframe_t mutant_frames_start_walk []
 
mmove_t mutant_move_start_walk = {FRAME_walk01, FRAME_walk04, mutant_frames_start_walk, mutant_walk_loop}
 
mframe_t mutant_frames_run []
 
mmove_t mutant_move_run = {FRAME_run03, FRAME_run08, mutant_frames_run, NULL}
 
mframe_t mutant_frames_attack []
 
mmove_t mutant_move_attack = {FRAME_attack09, FRAME_attack15, mutant_frames_attack, mutant_run}
 
mframe_t mutant_frames_jump []
 
mmove_t mutant_move_jump = {FRAME_attack01, FRAME_attack08, mutant_frames_jump, mutant_run}
 
mframe_t mutant_frames_pain1 []
 
mmove_t mutant_move_pain1 = {FRAME_pain101, FRAME_pain105, mutant_frames_pain1, mutant_run}
 
mframe_t mutant_frames_pain2 []
 
mmove_t mutant_move_pain2 = {FRAME_pain201, FRAME_pain206, mutant_frames_pain2, mutant_run}
 
mframe_t mutant_frames_pain3 []
 
mmove_t mutant_move_pain3 = {FRAME_pain301, FRAME_pain311, mutant_frames_pain3, mutant_run}
 
mframe_t mutant_frames_death1 []
 
mmove_t mutant_move_death1 = {FRAME_death101, FRAME_death109, mutant_frames_death1, mutant_dead}
 
mframe_t mutant_frames_death2 []
 
mmove_t mutant_move_death2 = {FRAME_death201, FRAME_death210, mutant_frames_death2, mutant_dead}
 

Function Documentation

◆ mutant_check_jump()

qboolean mutant_check_jump ( edict_t *  self)

Definition at line 391 of file m_mutant.c.

392 {
393  vec3_t v;
394  float distance;
395 
396  if (self->absmin[2] > (self->enemy->absmin[2] + 0.75 * self->enemy->size[2]))
397  return qfalse;
398 
399  if (self->absmax[2] < (self->enemy->absmin[2] + 0.25 * self->enemy->size[2]))
400  return qfalse;
401 
402  v[0] = self->s.origin[0] - self->enemy->s.origin[0];
403  v[1] = self->s.origin[1] - self->enemy->s.origin[1];
404  v[2] = 0;
405  distance = VectorLength(v);
406 
407  if (distance < 100)
408  return qfalse;
409  if (distance > 100) {
410  if (random() < 0.9)
411  return qfalse;
412  }
413 
414  return qtrue;
415 }

Referenced by mutant_checkattack().

◆ mutant_check_landing()

void mutant_check_landing ( edict_t *  self)

Definition at line 347 of file m_mutant.c.

348 {
349  if (self->groundentity) {
350  gi.sound(self, CHAN_WEAPON, sound_thud, 1, ATTN_NORM, 0);
351  self->monsterinfo.attack_finished = 0;
352  self->monsterinfo.aiflags &= ~AI_DUCKED;
353  return;
354  }
355 
356  if (level.time > self->monsterinfo.attack_finished)
357  self->monsterinfo.nextframe = FRAME_attack02;
358  else
359  self->monsterinfo.nextframe = FRAME_attack05;
360 }

◆ mutant_check_melee()

qboolean mutant_check_melee ( edict_t *  self)

Definition at line 384 of file m_mutant.c.

385 {
386  if (range(self, self->enemy) == RANGE_MELEE)
387  return qtrue;
388  return qfalse;
389 }

Referenced by mutant_checkattack().

◆ mutant_check_refire()

void mutant_check_refire ( edict_t *  self)

Definition at line 270 of file m_mutant.c.

271 {
272  if (!self->enemy || !self->enemy->inuse || self->enemy->health <= 0)
273  return;
274 
275  if (((skill->value == 3) && (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
276  self->monsterinfo.nextframe = FRAME_attack09;
277 }

◆ mutant_checkattack()

qboolean mutant_checkattack ( edict_t *  self)

Definition at line 417 of file m_mutant.c.

418 {
419  if (!self->enemy || self->enemy->health <= 0)
420  return qfalse;
421 
422  if (mutant_check_melee(self)) {
423  self->monsterinfo.attack_state = AS_MELEE;
424  return qtrue;
425  }
426 
427  if (mutant_check_jump(self)) {
428  self->monsterinfo.attack_state = AS_MISSILE;
429  // FIXME play a jump sound here
430  return qtrue;
431  }
432 
433  return qfalse;
434 }

Referenced by SP_monster_mutant().

◆ mutant_dead()

void mutant_dead ( edict_t *  self)

Definition at line 508 of file m_mutant.c.

509 {
510  VectorSet(self->mins, -16, -16, -24);
511  VectorSet(self->maxs, 16, 16, -8);
512  self->movetype = MOVETYPE_TOSS;
513  self->svflags |= SVF_DEADMONSTER;
514  gi.linkentity(self);
515 
516  M_FlyCheck(self);
517 }

◆ mutant_die()

void mutant_die ( edict_t *  self,
edict_t *  inflictor,
edict_t *  attacker,
int  damage,
vec3_t  point 
)

Definition at line 546 of file m_mutant.c.

547 {
548  int n;
549 
550  if (self->health <= self->gib_health) {
551  gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0);
552  for (n = 0; n < 2; n++)
553  ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
554  for (n = 0; n < 4; n++)
555  ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
556  ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
557  self->deadflag = DEAD_DEAD;
558  return;
559  }
560 
561  if (self->deadflag == DEAD_DEAD)
562  return;
563 
564  gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
565  self->deadflag = DEAD_DEAD;
566  self->takedamage = DAMAGE_YES;
567  self->s.skinnum = 1;
568 
569  if (random() < 0.5)
570  self->monsterinfo.currentmove = &mutant_move_death1;
571  else
572  self->monsterinfo.currentmove = &mutant_move_death2;
573 }

Referenced by SP_monster_mutant().

◆ mutant_hit_left()

void mutant_hit_left ( edict_t *  self)

Definition at line 248 of file m_mutant.c.

249 {
250  vec3_t aim;
251 
252  VectorSet(aim, MELEE_DISTANCE, self->mins[0], 8);
253  if (fire_hit(self, aim, (10 + (rand() % 5)), 100))
254  gi.sound(self, CHAN_WEAPON, sound_hit, 1, ATTN_NORM, 0);
255  else
256  gi.sound(self, CHAN_WEAPON, sound_swing, 1, ATTN_NORM, 0);
257 }

◆ mutant_hit_right()

void mutant_hit_right ( edict_t *  self)

Definition at line 259 of file m_mutant.c.

260 {
261  vec3_t aim;
262 
263  VectorSet(aim, MELEE_DISTANCE, self->maxs[0], 8);
264  if (fire_hit(self, aim, (10 + (rand() % 5)), 100))
265  gi.sound(self, CHAN_WEAPON, sound_hit2, 1, ATTN_NORM, 0);
266  else
267  gi.sound(self, CHAN_WEAPON, sound_swing, 1, ATTN_NORM, 0);
268 }

◆ mutant_idle()

void mutant_idle ( edict_t *  self)

Definition at line 173 of file m_mutant.c.

174 {
175  self->monsterinfo.currentmove = &mutant_move_idle;
176  gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0);
177 }

Referenced by SP_monster_mutant().

◆ mutant_idle_loop()

void mutant_idle_loop ( edict_t *  self)

Definition at line 150 of file m_mutant.c.

151 {
152  if (random() < 0.75)
153  self->monsterinfo.nextframe = FRAME_stand155;
154 }

◆ mutant_jump()

void mutant_jump ( edict_t *  self)

Definition at line 374 of file m_mutant.c.

375 {
376  self->monsterinfo.currentmove = &mutant_move_jump;
377 }

Referenced by SP_monster_mutant().

◆ mutant_jump_takeoff()

void mutant_jump_takeoff ( edict_t *  self)

Definition at line 332 of file m_mutant.c.

333 {
334  vec3_t forward;
335 
336  gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
337  AngleVectors(self->s.angles, forward, NULL, NULL);
338  self->s.origin[2] += 1;
339  VectorScale(forward, 600, self->velocity);
340  self->velocity[2] = 250;
341  self->groundentity = NULL;
342  self->monsterinfo.aiflags |= AI_DUCKED;
343  self->monsterinfo.attack_finished = level.time + 3;
344  self->touch = mutant_jump_touch;
345 }

◆ mutant_jump_touch()

void mutant_jump_touch ( edict_t *  self,
edict_t *  other,
cplane_t *  plane,
csurface_t *  surf 
)

Definition at line 300 of file m_mutant.c.

301 {
302  if (self->health <= 0) {
303  self->touch = NULL;
304  return;
305  }
306 
307  if (other->takedamage) {
308  if (VectorLength(self->velocity) > 400) {
309  vec3_t point;
310  vec3_t normal;
311  int damage;
312 
313  VectorCopy(self->velocity, normal);
314  VectorNormalize(normal);
315  VectorMA(self->s.origin, self->maxs[0], normal, point);
316  damage = 40 + 10 * random();
317  T_Damage(other, self, self, self->velocity, point, normal, damage, damage, 0, MOD_UNKNOWN);
318  }
319  }
320 
321  if (!M_CheckBottom(self)) {
322  if (self->groundentity) {
323  self->monsterinfo.nextframe = FRAME_attack02;
324  self->touch = NULL;
325  }
326  return;
327  }
328 
329  self->touch = NULL;
330 }

Referenced by mutant_jump_takeoff().

◆ mutant_melee()

void mutant_melee ( edict_t *  self)

Definition at line 290 of file m_mutant.c.

291 {
292  self->monsterinfo.currentmove = &mutant_move_attack;
293 }

Referenced by SP_monster_mutant().

◆ mutant_pain()

void mutant_pain ( edict_t *  self,
edict_t *  other,
float  kick,
int  damage 
)

Definition at line 475 of file m_mutant.c.

476 {
477  float r;
478 
479  if (self->health < (self->max_health / 2))
480  self->s.skinnum = 1;
481 
482  if (level.time < self->pain_debounce_time)
483  return;
484 
485  self->pain_debounce_time = level.time + 3;
486 
487  if (skill->value == 3)
488  return; // no pain anims in nightmare
489 
490  r = random();
491  if (r < 0.33) {
492  gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
493  self->monsterinfo.currentmove = &mutant_move_pain1;
494  } else if (r < 0.66) {
495  gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
496  self->monsterinfo.currentmove = &mutant_move_pain2;
497  } else {
498  gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
499  self->monsterinfo.currentmove = &mutant_move_pain3;
500  }
501 }

Referenced by SP_monster_mutant().

◆ mutant_run()

void mutant_run ( edict_t *  self)

Definition at line 235 of file m_mutant.c.

236 {
237  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
238  self->monsterinfo.currentmove = &mutant_move_stand;
239  else
240  self->monsterinfo.currentmove = &mutant_move_run;
241 }

Referenced by SP_monster_mutant().

◆ mutant_search()

void mutant_search ( edict_t *  self)

Definition at line 65 of file m_mutant.c.

66 {
67  gi.sound(self, CHAN_VOICE, sound_search, 1, ATTN_NORM, 0);
68 }

Referenced by SP_monster_mutant().

◆ mutant_sight()

void mutant_sight ( edict_t *  self,
edict_t *  other 
)

Definition at line 60 of file m_mutant.c.

61 {
62  gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
63 }

Referenced by SP_monster_mutant().

◆ mutant_stand()

void mutant_stand ( edict_t *  self)

Definition at line 140 of file m_mutant.c.

141 {
142  self->monsterinfo.currentmove = &mutant_move_stand;
143 }

Referenced by SP_monster_mutant().

◆ mutant_step()

void mutant_step ( edict_t *  self)

Definition at line 48 of file m_mutant.c.

49 {
50  int n;
51  n = (rand() + 1) % 3;
52  if (n == 0)
53  gi.sound(self, CHAN_VOICE, sound_step1, 1, ATTN_NORM, 0);
54  else if (n == 1)
55  gi.sound(self, CHAN_VOICE, sound_step2, 1, ATTN_NORM, 0);
56  else
57  gi.sound(self, CHAN_VOICE, sound_step3, 1, ATTN_NORM, 0);
58 }

◆ mutant_swing()

void mutant_swing ( edict_t *  self)

Definition at line 70 of file m_mutant.c.

71 {
72  gi.sound(self, CHAN_VOICE, sound_swing, 1, ATTN_NORM, 0);
73 }

◆ mutant_walk()

void mutant_walk ( edict_t *  self)

Definition at line 215 of file m_mutant.c.

216 {
217  self->monsterinfo.currentmove = &mutant_move_start_walk;
218 }

Referenced by SP_monster_mutant().

◆ mutant_walk_loop()

void mutant_walk_loop ( edict_t *  self)

Definition at line 202 of file m_mutant.c.

203 {
204  self->monsterinfo.currentmove = &mutant_move_walk;
205 }

◆ SP_monster_mutant()

void SP_monster_mutant ( edict_t *  self)

Definition at line 582 of file m_mutant.c.

583 {
584  if (deathmatch->value) {
585  G_FreeEdict(self);
586  return;
587  }
588 
589  sound_swing = gi.soundindex("mutant/mutatck1.wav");
590  sound_hit = gi.soundindex("mutant/mutatck2.wav");
591  sound_hit2 = gi.soundindex("mutant/mutatck3.wav");
592  sound_death = gi.soundindex("mutant/mutdeth1.wav");
593  sound_idle = gi.soundindex("mutant/mutidle1.wav");
594  sound_pain1 = gi.soundindex("mutant/mutpain1.wav");
595  sound_pain2 = gi.soundindex("mutant/mutpain2.wav");
596  sound_sight = gi.soundindex("mutant/mutsght1.wav");
597  sound_search = gi.soundindex("mutant/mutsrch1.wav");
598  sound_step1 = gi.soundindex("mutant/step1.wav");
599  sound_step2 = gi.soundindex("mutant/step2.wav");
600  sound_step3 = gi.soundindex("mutant/step3.wav");
601  sound_thud = gi.soundindex("mutant/thud1.wav");
602 
603  self->movetype = MOVETYPE_STEP;
604  self->solid = SOLID_BBOX;
605  self->s.modelindex = gi.modelindex("models/monsters/mutant/tris.md2");
606  VectorSet(self->mins, -32, -32, -24);
607  VectorSet(self->maxs, 32, 32, 48);
608 
609  self->health = 300;
610  self->gib_health = -120;
611  self->mass = 300;
612 
613  self->pain = mutant_pain;
614  self->die = mutant_die;
615 
616  self->monsterinfo.stand = mutant_stand;
617  self->monsterinfo.walk = mutant_walk;
618  self->monsterinfo.run = mutant_run;
619  self->monsterinfo.dodge = NULL;
620  self->monsterinfo.attack = mutant_jump;
621  self->monsterinfo.melee = mutant_melee;
622  self->monsterinfo.sight = mutant_sight;
623  self->monsterinfo.search = mutant_search;
624  self->monsterinfo.idle = mutant_idle;
625  self->monsterinfo.checkattack = mutant_checkattack;
626 
627  gi.linkentity(self);
628 
629  self->monsterinfo.currentmove = &mutant_move_stand;
630 
631  self->monsterinfo.scale = MODEL_SCALE;
632  walkmonster_start(self);
633 }

Variable Documentation

◆ mutant_frames_attack

mframe_t mutant_frames_attack[]
Initial value:
= {
{ ai_charge, 0, NULL },
{ ai_charge, 0, NULL },
{ ai_charge, 0, NULL },
{ ai_charge, 0, NULL },
}

Definition at line 279 of file m_mutant.c.

◆ mutant_frames_death1

mframe_t mutant_frames_death1[]
Initial value:
= {
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL }
}

Definition at line 519 of file m_mutant.c.

◆ mutant_frames_death2

mframe_t mutant_frames_death2[]
Initial value:
= {
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL }
}

Definition at line 532 of file m_mutant.c.

◆ mutant_frames_idle

mframe_t mutant_frames_idle[]
Initial value:
= {
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL },
{ ai_stand, 0, NULL }
}

Definition at line 156 of file m_mutant.c.

◆ mutant_frames_jump

mframe_t mutant_frames_jump[]
Initial value:
= {
{ ai_charge, 0, NULL },
{ ai_charge, 17, NULL },
{ ai_charge, 15, NULL },
{ ai_charge, 0, NULL },
{ ai_charge, 3, NULL },
{ ai_charge, 0, NULL }
}

Definition at line 362 of file m_mutant.c.

◆ mutant_frames_pain1

mframe_t mutant_frames_pain1[]
Initial value:
= {
{ ai_move, 4, NULL },
{ ai_move, -3, NULL },
{ ai_move, -8, NULL },
{ ai_move, 2, NULL },
{ ai_move, 5, NULL }
}

Definition at line 441 of file m_mutant.c.

◆ mutant_frames_pain2

mframe_t mutant_frames_pain2[]
Initial value:
= {
{ ai_move, -24, NULL },
{ ai_move, 11, NULL },
{ ai_move, 5, NULL },
{ ai_move, -2, NULL },
{ ai_move, 6, NULL },
{ ai_move, 4, NULL }
}

Definition at line 450 of file m_mutant.c.

◆ mutant_frames_pain3

mframe_t mutant_frames_pain3[]
Initial value:
= {
{ ai_move, -22, NULL },
{ ai_move, 3, NULL },
{ ai_move, 3, NULL },
{ ai_move, 2, NULL },
{ ai_move, 1, NULL },
{ ai_move, 1, NULL },
{ ai_move, 6, NULL },
{ ai_move, 3, NULL },
{ ai_move, 2, NULL },
{ ai_move, 0, NULL },
{ ai_move, 1, NULL }
}

Definition at line 460 of file m_mutant.c.

◆ mutant_frames_run

mframe_t mutant_frames_run[]
Initial value:
= {
{ ai_run, 40, NULL },
{ ai_run, 40, mutant_step },
{ ai_run, 24, NULL },
{ ai_run, 17, NULL },
{ ai_run, 10, NULL }
}

Definition at line 225 of file m_mutant.c.

◆ mutant_frames_stand

mframe_t mutant_frames_stand[]

Definition at line 80 of file m_mutant.c.

◆ mutant_frames_start_walk

mframe_t mutant_frames_start_walk[]
Initial value:
= {
{ ai_walk, 5, NULL },
{ ai_walk, 5, NULL },
{ ai_walk, -2, NULL },
{ ai_walk, 1, NULL }
}

Definition at line 207 of file m_mutant.c.

◆ mutant_frames_walk

mframe_t mutant_frames_walk[]
Initial value:
= {
{ ai_walk, 3, NULL },
{ ai_walk, 1, NULL },
{ ai_walk, 5, NULL },
{ ai_walk, 10, NULL },
{ ai_walk, 13, NULL },
{ ai_walk, 10, NULL },
{ ai_walk, 0, NULL },
{ ai_walk, 5, NULL },
{ ai_walk, 6, NULL },
{ ai_walk, 16, NULL },
{ ai_walk, 15, NULL },
{ ai_walk, 6, NULL }
}

Definition at line 186 of file m_mutant.c.

◆ mutant_move_attack

Definition at line 288 of file m_mutant.c.

Referenced by mutant_melee().

◆ mutant_move_death1

Definition at line 530 of file m_mutant.c.

Referenced by mutant_die().

◆ mutant_move_death2

Definition at line 544 of file m_mutant.c.

Referenced by mutant_die().

◆ mutant_move_idle

Definition at line 171 of file m_mutant.c.

Referenced by mutant_idle().

◆ mutant_move_jump

Definition at line 372 of file m_mutant.c.

Referenced by mutant_jump().

◆ mutant_move_pain1

Definition at line 448 of file m_mutant.c.

Referenced by mutant_pain().

◆ mutant_move_pain2

Definition at line 458 of file m_mutant.c.

Referenced by mutant_pain().

◆ mutant_move_pain3

Definition at line 473 of file m_mutant.c.

Referenced by mutant_pain().

◆ mutant_move_run

mmove_t mutant_move_run = {FRAME_run03, FRAME_run08, mutant_frames_run, NULL}

Definition at line 233 of file m_mutant.c.

Referenced by mutant_run().

◆ mutant_move_stand

Definition at line 138 of file m_mutant.c.

Referenced by mutant_run(), mutant_stand(), and SP_monster_mutant().

◆ mutant_move_start_walk

Definition at line 213 of file m_mutant.c.

Referenced by mutant_walk().

◆ mutant_move_walk

mmove_t mutant_move_walk = {FRAME_walk05, FRAME_walk16, mutant_frames_walk, NULL}

Definition at line 200 of file m_mutant.c.

Referenced by mutant_walk_loop().

◆ sound_death

int sound_death
static

Definition at line 33 of file m_mutant.c.

Referenced by mutant_die(), and SP_monster_mutant().

◆ sound_hit

int sound_hit
static

Definition at line 31 of file m_mutant.c.

Referenced by mutant_hit_left(), and SP_monster_mutant().

◆ sound_hit2

int sound_hit2
static

Definition at line 32 of file m_mutant.c.

Referenced by mutant_hit_right(), and SP_monster_mutant().

◆ sound_idle

int sound_idle
static

Definition at line 34 of file m_mutant.c.

Referenced by mutant_idle(), and SP_monster_mutant().

◆ sound_pain1

int sound_pain1
static

Definition at line 35 of file m_mutant.c.

Referenced by mutant_pain(), and SP_monster_mutant().

◆ sound_pain2

int sound_pain2
static

Definition at line 36 of file m_mutant.c.

Referenced by mutant_pain(), and SP_monster_mutant().

◆ sound_search

int sound_search
static

Definition at line 38 of file m_mutant.c.

Referenced by mutant_search(), and SP_monster_mutant().

◆ sound_sight

int sound_sight
static

Definition at line 37 of file m_mutant.c.

Referenced by mutant_jump_takeoff(), mutant_sight(), and SP_monster_mutant().

◆ sound_step1

int sound_step1
static

Definition at line 39 of file m_mutant.c.

Referenced by mutant_step(), and SP_monster_mutant().

◆ sound_step2

int sound_step2
static

Definition at line 40 of file m_mutant.c.

Referenced by mutant_step(), and SP_monster_mutant().

◆ sound_step3

int sound_step3
static

Definition at line 41 of file m_mutant.c.

Referenced by mutant_step(), and SP_monster_mutant().

◆ sound_swing

int sound_swing
static

Definition at line 30 of file m_mutant.c.

Referenced by mutant_hit_left(), mutant_hit_right(), mutant_swing(), and SP_monster_mutant().

◆ sound_thud

int sound_thud
static

Definition at line 42 of file m_mutant.c.

Referenced by mutant_check_landing(), and SP_monster_mutant().

gi
game_import_t gi
Definition: g_main.c:23
deathmatch
cvar_t * deathmatch
Definition: g_main.c:33
mutant_check_landing
void mutant_check_landing(edict_t *self)
Definition: m_mutant.c:347
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:112
mutant_sight
void mutant_sight(edict_t *self, edict_t *other)
Definition: m_mutant.c:60
ThrowGib
void ThrowGib(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:130
MELEE_DISTANCE
#define MELEE_DISTANCE
Definition: g_local.h:82
FRAME_attack09
#define FRAME_attack09
Definition: m_mutant.h:30
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:175
mutant_run
void mutant_run(edict_t *self)
Definition: m_mutant.c:235
mutant_move_death2
mmove_t mutant_move_death2
Definition: m_mutant.c:544
mutant_pain
void mutant_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_mutant.c:475
sound_step1
static int sound_step1
Definition: m_mutant.c:39
mutant_move_start_walk
mmove_t mutant_move_start_walk
Definition: m_mutant.c:213
sound_search
static int sound_search
Definition: m_mutant.c:38
mutant_hit_left
void mutant_hit_left(edict_t *self)
Definition: m_mutant.c:248
sound_thud
static int sound_thud
Definition: m_mutant.c:42
mutant_jump
void mutant_jump(edict_t *self)
Definition: m_mutant.c:374
sound_sight
static int sound_sight
Definition: m_mutant.c:37
mutant_step
void mutant_step(edict_t *self)
Definition: m_mutant.c:48
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:126
mutant_move_pain2
mmove_t mutant_move_pain2
Definition: m_mutant.c:458
mutant_move_walk
mmove_t mutant_move_walk
Definition: m_mutant.c:200
mutant_move_pain3
mmove_t mutant_move_pain3
Definition: m_mutant.c:473
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:504
mutant_check_melee
qboolean mutant_check_melee(edict_t *self)
Definition: m_mutant.c:384
FRAME_attack05
#define FRAME_attack05
Definition: m_mutant.h:26
DAMAGE_YES
@ DAMAGE_YES
Definition: g_local.h:88
fire_hit
qboolean fire_hit(edict_t *self, vec3_t aim, int damage, int kick)
Definition: g_weapon.c:59
mutant_search
void mutant_search(edict_t *self)
Definition: m_mutant.c:65
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
sound_step2
static int sound_step2
Definition: m_mutant.c:40
walkmonster_start
void walkmonster_start(edict_t *self)
Definition: g_monster.c:630
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:192
mutant_move_idle
mmove_t mutant_move_idle
Definition: m_mutant.c:171
mutant_jump_touch
void mutant_jump_touch(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)
Definition: m_mutant.c:300
mutant_move_run
mmove_t mutant_move_run
Definition: m_mutant.c:233
sound_idle
static int sound_idle
Definition: m_mutant.c:34
mutant_jump_takeoff
void mutant_jump_takeoff(edict_t *self)
Definition: m_mutant.c:332
mutant_move_pain1
mmove_t mutant_move_pain1
Definition: m_mutant.c:448
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:421
mutant_melee
void mutant_melee(edict_t *self)
Definition: m_mutant.c:290
sound_step3
static int sound_step3
Definition: m_mutant.c:41
forward
static vec3_t forward
Definition: p_view.c:27
AS_MISSILE
#define AS_MISSILE
Definition: g_local.h:146
mutant_idle
void mutant_idle(edict_t *self)
Definition: m_mutant.c:173
sound_swing
static int sound_swing
Definition: m_mutant.c:30
mutant_move_death1
mmove_t mutant_move_death1
Definition: m_mutant.c:530
sound_hit2
static int sound_hit2
Definition: m_mutant.c:32
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
M_CheckBottom
qboolean M_CheckBottom(edict_t *ent)
Definition: m_move.c:35
mutant_check_refire
void mutant_check_refire(edict_t *self)
Definition: m_mutant.c:270
mutant_hit_right
void mutant_hit_right(edict_t *self)
Definition: m_mutant.c:259
mutant_walk
void mutant_walk(edict_t *self)
Definition: m_mutant.c:215
sound_hit
static int sound_hit
Definition: m_mutant.c:31
skill
cvar_t * skill
Definition: g_main.c:36
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
RANGE_MELEE
#define RANGE_MELEE
Definition: g_local.h:116
ai_run
void ai_run(edict_t *self, float dist)
Definition: g_ai.c:821
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:122
level
level_locals_t level
Definition: g_main.c:22
FRAME_attack02
#define FRAME_attack02
Definition: m_mutant.h:23
M_FlyCheck
void M_FlyCheck(edict_t *self)
Definition: g_monster.c:121
mutant_stand
void mutant_stand(edict_t *self)
Definition: m_mutant.c:140
MOD_UNKNOWN
#define MOD_UNKNOWN
Definition: g_local.h:457
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:175
sound_pain2
static int sound_pain2
Definition: m_mutant.c:36
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:194
range
int range(edict_t *self, edict_t *other)
Definition: g_ai.c:245
mutant_checkattack
qboolean mutant_checkattack(edict_t *self)
Definition: m_mutant.c:417
mutant_move_jump
mmove_t mutant_move_jump
Definition: m_mutant.c:372
sound_pain1
static int sound_pain1
Definition: m_mutant.c:35
AI_DUCKED
#define AI_DUCKED
Definition: g_local.h:137
mutant_die
void mutant_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_mutant.c:546
sound_death
static int sound_death
Definition: m_mutant.c:33
AS_MELEE
#define AS_MELEE
Definition: g_local.h:145
VectorNormalize
vec_t VectorNormalize(vec3_t v)
Definition: shared.c:55
FRAME_stand155
#define FRAME_stand155
Definition: m_insane.h:176
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:100
mutant_move_stand
mmove_t mutant_move_stand
Definition: m_mutant.c:138
mutant_idle_loop
void mutant_idle_loop(edict_t *self)
Definition: m_mutant.c:150
mutant_check_jump
qboolean mutant_check_jump(edict_t *self)
Definition: m_mutant.c:391
mutant_move_attack
mmove_t mutant_move_attack
Definition: m_mutant.c:288