vkQuake2 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 406 of file m_mutant.c.

407 {
408  vec3_t v;
409  float distance;
410 
411  if (self->absmin[2] > (self->enemy->absmin[2] + 0.75 * self->enemy->size[2]))
412  return false;
413 
414  if (self->absmax[2] < (self->enemy->absmin[2] + 0.25 * self->enemy->size[2]))
415  return false;
416 
417  v[0] = self->s.origin[0] - self->enemy->s.origin[0];
418  v[1] = self->s.origin[1] - self->enemy->s.origin[1];
419  v[2] = 0;
420  distance = VectorLength(v);
421 
422  if (distance < 100)
423  return false;
424  if (distance > 100)
425  {
426  if (random() < 0.9)
427  return false;
428  }
429 
430  return true;
431 }

Referenced by mutant_checkattack().

◆ mutant_check_landing()

void mutant_check_landing ( edict_t self)

Definition at line 360 of file m_mutant.c.

361 {
362  if (self->groundentity)
363  {
364  gi.sound (self, CHAN_WEAPON, sound_thud, 1, ATTN_NORM, 0);
365  self->monsterinfo.attack_finished = 0;
366  self->monsterinfo.aiflags &= ~AI_DUCKED;
367  return;
368  }
369 
370  if (level.time > self->monsterinfo.attack_finished)
371  self->monsterinfo.nextframe = FRAME_attack02;
372  else
373  self->monsterinfo.nextframe = FRAME_attack05;
374 }

◆ mutant_check_melee()

qboolean mutant_check_melee ( edict_t self)

Definition at line 399 of file m_mutant.c.

400 {
401  if (range (self, self->enemy) == RANGE_MELEE)
402  return true;
403  return false;
404 }

Referenced by mutant_checkattack().

◆ mutant_check_refire()

void mutant_check_refire ( edict_t self)

Definition at line 277 of file m_mutant.c.

278 {
279  if (!self->enemy || !self->enemy->inuse || self->enemy->health <= 0)
280  return;
281 
282  if ( ((skill->value == 3) && (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE) )
283  self->monsterinfo.nextframe = FRAME_attack09;
284 }

◆ mutant_checkattack()

qboolean mutant_checkattack ( edict_t self)

Definition at line 433 of file m_mutant.c.

434 {
435  if (!self->enemy || self->enemy->health <= 0)
436  return false;
437 
438  if (mutant_check_melee(self))
439  {
440  self->monsterinfo.attack_state = AS_MELEE;
441  return true;
442  }
443 
444  if (mutant_check_jump(self))
445  {
446  self->monsterinfo.attack_state = AS_MISSILE;
447  // FIXME play a jump sound here
448  return true;
449  }
450 
451  return false;
452 }

Referenced by SP_monster_mutant().

◆ mutant_dead()

void mutant_dead ( edict_t self)

Definition at line 534 of file m_mutant.c.

535 {
536  VectorSet (self->mins, -16, -16, -24);
537  VectorSet (self->maxs, 16, 16, -8);
538  self->movetype = MOVETYPE_TOSS;
539  self->svflags |= SVF_DEADMONSTER;
540  gi.linkentity (self);
541 
542  M_FlyCheck (self);
543 }

◆ mutant_die()

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

Definition at line 574 of file m_mutant.c.

575 {
576  int n;
577 
578  if (self->health <= self->gib_health)
579  {
580  gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
581  for (n= 0; n < 2; n++)
582  ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
583  for (n= 0; n < 4; n++)
584  ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
585  ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
586  self->deadflag = DEAD_DEAD;
587  return;
588  }
589 
590  if (self->deadflag == DEAD_DEAD)
591  return;
592 
593  gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
594  self->deadflag = DEAD_DEAD;
595  self->takedamage = DAMAGE_YES;
596  self->s.skinnum = 1;
597 
598  if (random() < 0.5)
599  self->monsterinfo.currentmove = &mutant_move_death1;
600  else
601  self->monsterinfo.currentmove = &mutant_move_death2;
602 }

Referenced by SP_monster_mutant().

◆ mutant_hit_left()

void mutant_hit_left ( edict_t self)

Definition at line 255 of file m_mutant.c.

256 {
257  vec3_t aim;
258 
259  VectorSet (aim, MELEE_DISTANCE, self->mins[0], 8);
260  if (fire_hit (self, aim, (10 + (rand() %5)), 100))
261  gi.sound (self, CHAN_WEAPON, sound_hit, 1, ATTN_NORM, 0);
262  else
263  gi.sound (self, CHAN_WEAPON, sound_swing, 1, ATTN_NORM, 0);
264 }

◆ mutant_hit_right()

void mutant_hit_right ( edict_t self)

Definition at line 266 of file m_mutant.c.

267 {
268  vec3_t aim;
269 
270  VectorSet (aim, MELEE_DISTANCE, self->maxs[0], 8);
271  if (fire_hit (self, aim, (10 + (rand() %5)), 100))
272  gi.sound (self, CHAN_WEAPON, sound_hit2, 1, ATTN_NORM, 0);
273  else
274  gi.sound (self, CHAN_WEAPON, sound_swing, 1, ATTN_NORM, 0);
275 }

◆ mutant_idle()

void mutant_idle ( edict_t self)

Definition at line 177 of file m_mutant.c.

178 {
179  self->monsterinfo.currentmove = &mutant_move_idle;
180  gi.sound (self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0);
181 }

Referenced by SP_monster_mutant().

◆ mutant_idle_loop()

void mutant_idle_loop ( edict_t self)

Definition at line 153 of file m_mutant.c.

154 {
155  if (random() < 0.75)
156  self->monsterinfo.nextframe = FRAME_stand155;
157 }

◆ mutant_jump()

void mutant_jump ( edict_t self)

Definition at line 389 of file m_mutant.c.

390 {
391  self->monsterinfo.currentmove = &mutant_move_jump;
392 }

Referenced by SP_monster_mutant().

◆ mutant_jump_takeoff()

void mutant_jump_takeoff ( edict_t self)

Definition at line 345 of file m_mutant.c.

346 {
347  vec3_t forward;
348 
349  gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
350  AngleVectors (self->s.angles, forward, NULL, NULL);
351  self->s.origin[2] += 1;
352  VectorScale (forward, 600, self->velocity);
353  self->velocity[2] = 250;
354  self->groundentity = NULL;
355  self->monsterinfo.aiflags |= AI_DUCKED;
356  self->monsterinfo.attack_finished = level.time + 3;
357  self->touch = mutant_jump_touch;
358 }

◆ mutant_jump_touch()

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

Definition at line 308 of file m_mutant.c.

309 {
310  if (self->health <= 0)
311  {
312  self->touch = NULL;
313  return;
314  }
315 
316  if (other->takedamage)
317  {
318  if (VectorLength(self->velocity) > 400)
319  {
320  vec3_t point;
321  vec3_t normal;
322  int damage;
323 
324  VectorCopy (self->velocity, normal);
325  VectorNormalize(normal);
326  VectorMA (self->s.origin, self->maxs[0], normal, point);
327  damage = 40 + 10 * random();
328  T_Damage (other, self, self, self->velocity, point, normal, damage, damage, 0, MOD_UNKNOWN);
329  }
330  }
331 
332  if (!M_CheckBottom (self))
333  {
334  if (self->groundentity)
335  {
336  self->monsterinfo.nextframe = FRAME_attack02;
337  self->touch = NULL;
338  }
339  return;
340  }
341 
342  self->touch = NULL;
343 }

Referenced by mutant_jump_takeoff().

◆ mutant_melee()

void mutant_melee ( edict_t self)

Definition at line 298 of file m_mutant.c.

299 {
300  self->monsterinfo.currentmove = &mutant_move_attack;
301 }

Referenced by SP_monster_mutant().

◆ mutant_pain()

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

Definition at line 496 of file m_mutant.c.

497 {
498  float r;
499 
500  if (self->health < (self->max_health / 2))
501  self->s.skinnum = 1;
502 
503  if (level.time < self->pain_debounce_time)
504  return;
505 
506  self->pain_debounce_time = level.time + 3;
507 
508  if (skill->value == 3)
509  return; // no pain anims in nightmare
510 
511  r = random();
512  if (r < 0.33)
513  {
514  gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
515  self->monsterinfo.currentmove = &mutant_move_pain1;
516  }
517  else if (r < 0.66)
518  {
519  gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
520  self->monsterinfo.currentmove = &mutant_move_pain2;
521  }
522  else
523  {
524  gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
525  self->monsterinfo.currentmove = &mutant_move_pain3;
526  }
527 }

Referenced by SP_monster_mutant().

◆ mutant_run()

void mutant_run ( edict_t self)

Definition at line 242 of file m_mutant.c.

243 {
244  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
245  self->monsterinfo.currentmove = &mutant_move_stand;
246  else
247  self->monsterinfo.currentmove = &mutant_move_run;
248 }

Referenced by SP_monster_mutant().

◆ mutant_search()

void mutant_search ( edict_t self)

Definition at line 67 of file m_mutant.c.

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

Referenced by SP_monster_mutant().

◆ mutant_sight()

void mutant_sight ( edict_t self,
edict_t other 
)

Definition at line 62 of file m_mutant.c.

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

Referenced by SP_monster_mutant().

◆ mutant_stand()

void mutant_stand ( edict_t self)

Definition at line 143 of file m_mutant.c.

144 {
145  self->monsterinfo.currentmove = &mutant_move_stand;
146 }

Referenced by SP_monster_mutant().

◆ mutant_step()

void mutant_step ( edict_t self)

Definition at line 50 of file m_mutant.c.

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

◆ mutant_swing()

void mutant_swing ( edict_t self)

Definition at line 72 of file m_mutant.c.

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

◆ mutant_walk()

void mutant_walk ( edict_t self)

Definition at line 221 of file m_mutant.c.

222 {
223  self->monsterinfo.currentmove = &mutant_move_start_walk;
224 }

Referenced by SP_monster_mutant().

◆ mutant_walk_loop()

void mutant_walk_loop ( edict_t self)

Definition at line 207 of file m_mutant.c.

208 {
209  self->monsterinfo.currentmove = &mutant_move_walk;
210 }

◆ SP_monster_mutant()

void SP_monster_mutant ( edict_t self)

Definition at line 611 of file m_mutant.c.

612 {
613  if (deathmatch->value)
614  {
615  G_FreeEdict (self);
616  return;
617  }
618 
619  sound_swing = gi.soundindex ("mutant/mutatck1.wav");
620  sound_hit = gi.soundindex ("mutant/mutatck2.wav");
621  sound_hit2 = gi.soundindex ("mutant/mutatck3.wav");
622  sound_death = gi.soundindex ("mutant/mutdeth1.wav");
623  sound_idle = gi.soundindex ("mutant/mutidle1.wav");
624  sound_pain1 = gi.soundindex ("mutant/mutpain1.wav");
625  sound_pain2 = gi.soundindex ("mutant/mutpain2.wav");
626  sound_sight = gi.soundindex ("mutant/mutsght1.wav");
627  sound_search = gi.soundindex ("mutant/mutsrch1.wav");
628  sound_step1 = gi.soundindex ("mutant/step1.wav");
629  sound_step2 = gi.soundindex ("mutant/step2.wav");
630  sound_step3 = gi.soundindex ("mutant/step3.wav");
631  sound_thud = gi.soundindex ("mutant/thud1.wav");
632 
633  self->movetype = MOVETYPE_STEP;
634  self->solid = SOLID_BBOX;
635  self->s.modelindex = gi.modelindex ("models/monsters/mutant/tris.md2");
636  VectorSet (self->mins, -32, -32, -24);
637  VectorSet (self->maxs, 32, 32, 48);
638 
639  self->health = 300;
640  self->gib_health = -120;
641  self->mass = 300;
642 
643  self->pain = mutant_pain;
644  self->die = mutant_die;
645 
646  self->monsterinfo.stand = mutant_stand;
647  self->monsterinfo.walk = mutant_walk;
648  self->monsterinfo.run = mutant_run;
649  self->monsterinfo.dodge = NULL;
650  self->monsterinfo.attack = mutant_jump;
651  self->monsterinfo.melee = mutant_melee;
652  self->monsterinfo.sight = mutant_sight;
653  self->monsterinfo.search = mutant_search;
654  self->monsterinfo.idle = mutant_idle;
655  self->monsterinfo.checkattack = mutant_checkattack;
656 
657  gi.linkentity (self);
658 
659  self->monsterinfo.currentmove = &mutant_move_stand;
660 
661  self->monsterinfo.scale = MODEL_SCALE;
662  walkmonster_start (self);
663 }

Variable Documentation

◆ mutant_frames_attack

mframe_t mutant_frames_attack[]
Initial value:

Definition at line 286 of file m_mutant.c.

◆ mutant_frames_death1

mframe_t mutant_frames_death1[]
Initial value:
=
{
}

Definition at line 545 of file m_mutant.c.

◆ mutant_frames_death2

mframe_t mutant_frames_death2[]
Initial value:
=
{
}

Definition at line 559 of file m_mutant.c.

◆ mutant_frames_idle

mframe_t mutant_frames_idle[]
Initial value:

Definition at line 159 of file m_mutant.c.

◆ mutant_frames_jump

mframe_t mutant_frames_jump[]
Initial value:

Definition at line 376 of file m_mutant.c.

◆ mutant_frames_pain1

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

Definition at line 459 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, -2, NULL,
}

Definition at line 469 of file m_mutant.c.

◆ mutant_frames_pain3

mframe_t mutant_frames_pain3[]
Initial value:
=
{
ai_move, -22,NULL,
}

Definition at line 480 of file m_mutant.c.

◆ mutant_frames_run

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

Definition at line 231 of file m_mutant.c.

◆ mutant_frames_stand

mframe_t mutant_frames_stand[]

Definition at line 82 of file m_mutant.c.

◆ mutant_frames_start_walk

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

Definition at line 212 of file m_mutant.c.

◆ mutant_frames_walk

mframe_t mutant_frames_walk[]
Initial value:
=
{
ai_walk, 10, NULL,
ai_walk, 13, NULL,
ai_walk, 10, NULL,
ai_walk, 16, NULL,
ai_walk, 15, NULL,
}

Definition at line 190 of file m_mutant.c.

◆ mutant_move_attack

Definition at line 296 of file m_mutant.c.

Referenced by mutant_melee().

◆ mutant_move_death1

Definition at line 557 of file m_mutant.c.

Referenced by mutant_die().

◆ mutant_move_death2

Definition at line 572 of file m_mutant.c.

Referenced by mutant_die().

◆ mutant_move_idle

Definition at line 175 of file m_mutant.c.

Referenced by mutant_idle().

◆ mutant_move_jump

Definition at line 387 of file m_mutant.c.

Referenced by mutant_jump().

◆ mutant_move_pain1

Definition at line 467 of file m_mutant.c.

Referenced by mutant_pain().

◆ mutant_move_pain2

Definition at line 478 of file m_mutant.c.

Referenced by mutant_pain().

◆ mutant_move_pain3

Definition at line 494 of file m_mutant.c.

Referenced by mutant_pain().

◆ mutant_move_run

Definition at line 240 of file m_mutant.c.

Referenced by mutant_run().

◆ mutant_move_stand

Definition at line 141 of file m_mutant.c.

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

◆ mutant_move_start_walk

Definition at line 219 of file m_mutant.c.

Referenced by mutant_walk().

◆ mutant_move_walk

Definition at line 205 of file m_mutant.c.

Referenced by mutant_walk_loop().

◆ sound_death

int sound_death
static

Definition at line 35 of file m_mutant.c.

Referenced by mutant_die(), and SP_monster_mutant().

◆ sound_hit

int sound_hit
static

Definition at line 33 of file m_mutant.c.

Referenced by mutant_hit_left(), and SP_monster_mutant().

◆ sound_hit2

int sound_hit2
static

Definition at line 34 of file m_mutant.c.

Referenced by mutant_hit_right(), and SP_monster_mutant().

◆ sound_idle

int sound_idle
static

Definition at line 36 of file m_mutant.c.

Referenced by mutant_idle(), and SP_monster_mutant().

◆ sound_pain1

int sound_pain1
static

Definition at line 37 of file m_mutant.c.

Referenced by mutant_pain(), and SP_monster_mutant().

◆ sound_pain2

int sound_pain2
static

Definition at line 38 of file m_mutant.c.

Referenced by mutant_pain(), and SP_monster_mutant().

◆ sound_search

int sound_search
static

Definition at line 40 of file m_mutant.c.

Referenced by mutant_search(), and SP_monster_mutant().

◆ sound_sight

int sound_sight
static

Definition at line 39 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 41 of file m_mutant.c.

Referenced by mutant_step(), and SP_monster_mutant().

◆ sound_step2

int sound_step2
static

Definition at line 42 of file m_mutant.c.

Referenced by mutant_step(), and SP_monster_mutant().

◆ sound_step3

int sound_step3
static

Definition at line 43 of file m_mutant.c.

Referenced by mutant_step(), and SP_monster_mutant().

◆ sound_swing

int sound_swing
static

Definition at line 32 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 44 of file m_mutant.c.

Referenced by mutant_check_landing(), and SP_monster_mutant().

gi
game_import_t gi
Definition: g_main.c:25
edict_s::s
entity_state_t s
Definition: g_local.h:970
edict_s::groundentity
edict_t * groundentity
Definition: g_local.h:1079
deathmatch
cvar_t * deathmatch
Definition: g_main.c:35
mutant_check_landing
void mutant_check_landing(edict_t *self)
Definition: m_mutant.c:360
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:115
mutant_sight
void mutant_sight(edict_t *self, edict_t *other)
Definition: m_mutant.c:62
ThrowGib
void ThrowGib(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:135
edict_s::gib_health
int gib_health
Definition: g_local.h:1059
MELEE_DISTANCE
#define MELEE_DISTANCE
Definition: g_local.h:82
edict_s::absmax
vec3_t absmax
Definition: g_local.h:991
FRAME_attack09
#define FRAME_attack09
Definition: m_mutant.h:32
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:194
mutant_run
void mutant_run(edict_t *self)
Definition: m_mutant.c:242
SOLID_BBOX
@ SOLID_BBOX
Definition: game.h:37
mutant_move_death2
mmove_t mutant_move_death2
Definition: m_mutant.c:572
mutant_pain
void mutant_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_mutant.c:496
sound_step1
static int sound_step1
Definition: m_mutant.c:41
mutant_move_start_walk
mmove_t mutant_move_start_walk
Definition: m_mutant.c:219
v
GLdouble v
Definition: qgl_win.c:143
sound_search
static int sound_search
Definition: m_mutant.c:40
mutant_hit_left
void mutant_hit_left(edict_t *self)
Definition: m_mutant.c:255
entity_state_s::origin
vec3_t origin
Definition: q_shared.h:1149
sound_thud
static int sound_thud
Definition: m_mutant.c:44
mutant_jump
void mutant_jump(edict_t *self)
Definition: m_mutant.c:389
sound_sight
static int sound_sight
Definition: m_mutant.c:39
mutant_step
void mutant_step(edict_t *self)
Definition: m_mutant.c:50
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:129
VectorScale
void VectorScale(vec3_t in, vec_t scale, vec3_t out)
Definition: q_shared.c:782
edict_s::inuse
qboolean inuse
Definition: g_local.h:976
mutant_move_pain2
mmove_t mutant_move_pain2
Definition: m_mutant.c:478
mutant_move_walk
mmove_t mutant_move_walk
Definition: m_mutant.c:205
mutant_move_pain3
mmove_t mutant_move_pain3
Definition: m_mutant.c:494
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:506
edict_s::max_health
int max_health
Definition: g_local.h:1058
mutant_check_melee
qboolean mutant_check_melee(edict_t *self)
Definition: m_mutant.c:399
FRAME_attack05
#define FRAME_attack05
Definition: m_mutant.h:28
DAMAGE_YES
@ DAMAGE_YES
Definition: g_local.h:89
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
edict_s::mins
vec3_t mins
Definition: g_local.h:990
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
mutant_search
void mutant_search(edict_t *self)
Definition: m_mutant.c:67
ATTN_NORM
#define ATTN_NORM
Definition: q_shared.h:995
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:377
sound_step2
static int sound_step2
Definition: m_mutant.c:42
walkmonster_start
void walkmonster_start(edict_t *self)
Definition: g_monster.c:692
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:196
mutant_move_idle
mmove_t mutant_move_idle
Definition: m_mutant.c:175
mutant_jump_touch
void mutant_jump_touch(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)
Definition: m_mutant.c:308
mutant_move_run
mmove_t mutant_move_run
Definition: m_mutant.c:240
SVF_DEADMONSTER
#define SVF_DEADMONSTER
Definition: game.h:28
AngleVectors
void AngleVectors(vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition: q_shared.c:93
sound_idle
static int sound_idle
Definition: m_mutant.c:36
mutant_jump_takeoff
void mutant_jump_takeoff(edict_t *self)
Definition: m_mutant.c:345
CHAN_VOICE
#define CHAN_VOICE
Definition: q_shared.h:985
mutant_move_pain1
mmove_t mutant_move_pain1
Definition: m_mutant.c:467
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:452
r
GLdouble GLdouble r
Definition: qgl_win.c:336
mutant_melee
void mutant_melee(edict_t *self)
Definition: m_mutant.c:298
sound_step3
static int sound_step3
Definition: m_mutant.c:43
game_import_t::soundindex
int(* soundindex)(char *name)
Definition: game.h:122
forward
static vec3_t forward
Definition: p_view.c:29
VectorLength
vec_t VectorLength(vec3_t v)
Definition: q_shared.c:762
AS_MISSILE
#define AS_MISSILE
Definition: g_local.h:149
mutant_idle
void mutant_idle(edict_t *self)
Definition: m_mutant.c:177
game_import_t::modelindex
int(* modelindex)(char *name)
Definition: game.h:121
edict_s::deadflag
int deadflag
Definition: g_local.h:1060
sound_swing
static int sound_swing
Definition: m_mutant.c:32
mutant_move_death1
mmove_t mutant_move_death1
Definition: m_mutant.c:557
sound_hit2
static int sound_hit2
Definition: m_mutant.c:34
cvar_s::value
float value
Definition: q_shared.h:331
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:163
random
#define random()
Definition: g_local.h:515
M_CheckBottom
qboolean M_CheckBottom(edict_t *ent)
Definition: m_move.c:37
VectorNormalize
vec_t VectorNormalize(vec3_t v)
Definition: q_shared.c:681
NULL
#define NULL
Definition: q_shared.h:67
mutant_check_refire
void mutant_check_refire(edict_t *self)
Definition: m_mutant.c:277
mutant_hit_right
void mutant_hit_right(edict_t *self)
Definition: m_mutant.c:266
monsterinfo_t::aiflags
int aiflags
Definition: g_local.h:421
mutant_walk
void mutant_walk(edict_t *self)
Definition: m_mutant.c:221
sound_hit
static int sound_hit
Definition: m_mutant.c:33
skill
cvar_t * skill
Definition: g_main.c:38
edict_s::velocity
vec3_t velocity
Definition: g_local.h:1030
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:92
VectorCopy
#define VectorCopy(a, b)
Definition: q_shared.h:165
edict_s::pain_debounce_time
float pain_debounce_time
Definition: g_local.h:1052
edict_s::monsterinfo
monsterinfo_t monsterinfo
Definition: g_local.h:1114
RANGE_MELEE
#define RANGE_MELEE
Definition: g_local.h:119
CHAN_WEAPON
#define CHAN_WEAPON
Definition: q_shared.h:984
edict_s::takedamage
int takedamage
Definition: g_local.h:1068
level
GLint level
Definition: qgl_win.c:116
ai_run
void ai_run(edict_t *self, float dist)
Definition: g_ai.c:914
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:125
VectorMA
void VectorMA(vec3_t veca, float scale, vec3_t vecb, vec3_t vecc)
Definition: q_shared.c:719
FRAME_attack02
#define FRAME_attack02
Definition: m_mutant.h:25
M_FlyCheck
void M_FlyCheck(edict_t *self)
Definition: g_monster.c:123
mutant_stand
void mutant_stand(edict_t *self)
Definition: m_mutant.c:143
edict_s::maxs
vec3_t maxs
Definition: g_local.h:990
MOD_UNKNOWN
#define MOD_UNKNOWN
Definition: g_local.h:469
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:183
monsterinfo_t::attack_finished
float attack_finished
Definition: g_local.h:437
sound_pain2
static int sound_pain2
Definition: m_mutant.c:38
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:198
VectorSet
#define VectorSet(v, x, y, z)
Definition: q_shared.h:168
mutant_checkattack
qboolean mutant_checkattack(edict_t *self)
Definition: m_mutant.c:433
mutant_move_jump
mmove_t mutant_move_jump
Definition: m_mutant.c:387
sound_pain1
static int sound_pain1
Definition: m_mutant.c:37
edict_s::enemy
edict_t * enemy
Definition: g_local.h:1076
AI_DUCKED
#define AI_DUCKED
Definition: g_local.h:140
game_import_t::linkentity
void(* linkentity)(edict_t *ent)
Definition: game.h:138
edict_s::size
vec3_t size
Definition: g_local.h:991
entity_state_s::angles
vec3_t angles
Definition: q_shared.h:1150
mutant_die
void mutant_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_mutant.c:574
sound_death
static int sound_death
Definition: m_mutant.c:35
AS_MELEE
#define AS_MELEE
Definition: g_local.h:148
vec3_t
vec_t vec3_t[3]
Definition: q_shared.h:134
FRAME_stand155
#define FRAME_stand155
Definition: m_insane.h:178
edict_s::absmin
vec3_t absmin
Definition: g_local.h:991
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:106
mutant_move_stand
mmove_t mutant_move_stand
Definition: m_mutant.c:141
mutant_idle_loop
void mutant_idle_loop(edict_t *self)
Definition: m_mutant.c:153
mutant_check_jump
qboolean mutant_check_jump(edict_t *self)
Definition: m_mutant.c:406
mutant_move_attack
mmove_t mutant_move_attack
Definition: m_mutant.c:296
edict_s::health
int health
Definition: g_local.h:1057