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

Go to the source code of this file.

Functions

void soldier_idle (edict_t *self)
 
void soldier_cock (edict_t *self)
 
void soldier_stand (edict_t *self)
 
void soldier_walk1_random (edict_t *self)
 
void soldier_walk (edict_t *self)
 
void soldier_run (edict_t *self)
 
void soldier_pain (edict_t *self, edict_t *other, float kick, int damage)
 
void soldier_fire (edict_t *self, int flash_number)
 
void soldier_fire1 (edict_t *self)
 
void soldier_attack1_refire1 (edict_t *self)
 
void soldier_attack1_refire2 (edict_t *self)
 
void soldier_fire2 (edict_t *self)
 
void soldier_attack2_refire1 (edict_t *self)
 
void soldier_attack2_refire2 (edict_t *self)
 
void soldier_duck_down (edict_t *self)
 
void soldier_duck_up (edict_t *self)
 
void soldier_fire3 (edict_t *self)
 
void soldier_attack3_refire (edict_t *self)
 
void soldier_fire4 (edict_t *self)
 
void soldier_fire8 (edict_t *self)
 
void soldier_attack6_refire (edict_t *self)
 
void soldier_attack (edict_t *self)
 
void soldier_sight (edict_t *self, edict_t *other)
 
void soldier_duck_hold (edict_t *self)
 
void soldier_dodge (edict_t *self, edict_t *attacker, float eta)
 
void soldier_fire6 (edict_t *self)
 
void soldier_fire7 (edict_t *self)
 
void soldier_dead (edict_t *self)
 
void soldier_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
 
void SP_monster_soldier_x (edict_t *self)
 
void SP_monster_soldier_light (edict_t *self)
 
void SP_monster_soldier (edict_t *self)
 
void SP_monster_soldier_ss (edict_t *self)
 

Variables

static int sound_idle
 
static int sound_sight1
 
static int sound_sight2
 
static int sound_pain_light
 
static int sound_pain
 
static int sound_pain_ss
 
static int sound_death_light
 
static int sound_death
 
static int sound_death_ss
 
static int sound_cock
 
mframe_t soldier_frames_stand1 []
 
mmove_t soldier_move_stand1 = {FRAME_stand101, FRAME_stand130, soldier_frames_stand1, soldier_stand}
 
mframe_t soldier_frames_stand3 []
 
mmove_t soldier_move_stand3 = {FRAME_stand301, FRAME_stand339, soldier_frames_stand3, soldier_stand}
 
mframe_t soldier_frames_walk1 []
 
mmove_t soldier_move_walk1 = {FRAME_walk101, FRAME_walk133, soldier_frames_walk1, NULL}
 
mframe_t soldier_frames_walk2 []
 
mmove_t soldier_move_walk2 = {FRAME_walk209, FRAME_walk218, soldier_frames_walk2, NULL}
 
mframe_t soldier_frames_start_run []
 
mmove_t soldier_move_start_run = {FRAME_run01, FRAME_run02, soldier_frames_start_run, soldier_run}
 
mframe_t soldier_frames_run []
 
mmove_t soldier_move_run = {FRAME_run03, FRAME_run08, soldier_frames_run, NULL}
 
mframe_t soldier_frames_pain1 []
 
mmove_t soldier_move_pain1 = {FRAME_pain101, FRAME_pain105, soldier_frames_pain1, soldier_run}
 
mframe_t soldier_frames_pain2 []
 
mmove_t soldier_move_pain2 = {FRAME_pain201, FRAME_pain207, soldier_frames_pain2, soldier_run}
 
mframe_t soldier_frames_pain3 []
 
mmove_t soldier_move_pain3 = {FRAME_pain301, FRAME_pain318, soldier_frames_pain3, soldier_run}
 
mframe_t soldier_frames_pain4 []
 
mmove_t soldier_move_pain4 = {FRAME_pain401, FRAME_pain417, soldier_frames_pain4, soldier_run}
 
static int blaster_flash [] = {MZ2_SOLDIER_BLASTER_1, MZ2_SOLDIER_BLASTER_2, MZ2_SOLDIER_BLASTER_3, MZ2_SOLDIER_BLASTER_4, MZ2_SOLDIER_BLASTER_5, MZ2_SOLDIER_BLASTER_6, MZ2_SOLDIER_BLASTER_7, MZ2_SOLDIER_BLASTER_8}
 
static int shotgun_flash [] = {MZ2_SOLDIER_SHOTGUN_1, MZ2_SOLDIER_SHOTGUN_2, MZ2_SOLDIER_SHOTGUN_3, MZ2_SOLDIER_SHOTGUN_4, MZ2_SOLDIER_SHOTGUN_5, MZ2_SOLDIER_SHOTGUN_6, MZ2_SOLDIER_SHOTGUN_7, MZ2_SOLDIER_SHOTGUN_8}
 
static int machinegun_flash [] = {MZ2_SOLDIER_MACHINEGUN_1, MZ2_SOLDIER_MACHINEGUN_2, MZ2_SOLDIER_MACHINEGUN_3, MZ2_SOLDIER_MACHINEGUN_4, MZ2_SOLDIER_MACHINEGUN_5, MZ2_SOLDIER_MACHINEGUN_6, MZ2_SOLDIER_MACHINEGUN_7, MZ2_SOLDIER_MACHINEGUN_8}
 
mframe_t soldier_frames_attack1 []
 
mmove_t soldier_move_attack1 = {FRAME_attak101, FRAME_attak112, soldier_frames_attack1, soldier_run}
 
mframe_t soldier_frames_attack2 []
 
mmove_t soldier_move_attack2 = {FRAME_attak201, FRAME_attak218, soldier_frames_attack2, soldier_run}
 
mframe_t soldier_frames_attack3 []
 
mmove_t soldier_move_attack3 = {FRAME_attak301, FRAME_attak309, soldier_frames_attack3, soldier_run}
 
mframe_t soldier_frames_attack4 []
 
mmove_t soldier_move_attack4 = {FRAME_attak401, FRAME_attak406, soldier_frames_attack4, soldier_run}
 
mframe_t soldier_frames_attack6 []
 
mmove_t soldier_move_attack6 = {FRAME_runs01, FRAME_runs14, soldier_frames_attack6, soldier_run}
 
mframe_t soldier_frames_duck []
 
mmove_t soldier_move_duck = {FRAME_duck01, FRAME_duck05, soldier_frames_duck, soldier_run}
 
mframe_t soldier_frames_death1 []
 
mmove_t soldier_move_death1 = {FRAME_death101, FRAME_death136, soldier_frames_death1, soldier_dead}
 
mframe_t soldier_frames_death2 []
 
mmove_t soldier_move_death2 = {FRAME_death201, FRAME_death235, soldier_frames_death2, soldier_dead}
 
mframe_t soldier_frames_death3 []
 
mmove_t soldier_move_death3 = {FRAME_death301, FRAME_death345, soldier_frames_death3, soldier_dead}
 
mframe_t soldier_frames_death4 []
 
mmove_t soldier_move_death4 = {FRAME_death401, FRAME_death453, soldier_frames_death4, soldier_dead}
 
mframe_t soldier_frames_death5 []
 
mmove_t soldier_move_death5 = {FRAME_death501, FRAME_death524, soldier_frames_death5, soldier_dead}
 
mframe_t soldier_frames_death6 []
 
mmove_t soldier_move_death6 = {FRAME_death601, FRAME_death610, soldier_frames_death6, soldier_dead}
 

Function Documentation

◆ soldier_attack()

void soldier_attack ( edict_t *  self)

Definition at line 739 of file m_soldier.c.

740 {
741  if (self->s.skinnum < 4) {
742  if (random() < 0.5)
743  self->monsterinfo.currentmove = &soldier_move_attack1;
744  else
745  self->monsterinfo.currentmove = &soldier_move_attack2;
746  } else {
747  self->monsterinfo.currentmove = &soldier_move_attack4;
748  }
749 }

Referenced by SP_monster_soldier_x().

◆ soldier_attack1_refire1()

void soldier_attack1_refire1 ( edict_t *  self)

Definition at line 506 of file m_soldier.c.

507 {
508  if (self->s.skinnum > 1)
509  return;
510 
511  if (self->enemy->health <= 0)
512  return;
513 
514  if (((skill->value == 3) && (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
515  self->monsterinfo.nextframe = FRAME_attak102;
516  else
517  self->monsterinfo.nextframe = FRAME_attak110;
518 }

◆ soldier_attack1_refire2()

void soldier_attack1_refire2 ( edict_t *  self)

Definition at line 520 of file m_soldier.c.

521 {
522  if (self->s.skinnum < 2)
523  return;
524 
525  if (self->enemy->health <= 0)
526  return;
527 
528  if (((skill->value == 3) && (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
529  self->monsterinfo.nextframe = FRAME_attak102;
530 }

◆ soldier_attack2_refire1()

void soldier_attack2_refire1 ( edict_t *  self)

Definition at line 555 of file m_soldier.c.

556 {
557  if (self->s.skinnum > 1)
558  return;
559 
560  if (self->enemy->health <= 0)
561  return;
562 
563  if (((skill->value == 3) && (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
564  self->monsterinfo.nextframe = FRAME_attak204;
565  else
566  self->monsterinfo.nextframe = FRAME_attak216;
567 }

◆ soldier_attack2_refire2()

void soldier_attack2_refire2 ( edict_t *  self)

Definition at line 569 of file m_soldier.c.

570 {
571  if (self->s.skinnum < 2)
572  return;
573 
574  if (self->enemy->health <= 0)
575  return;
576 
577  if (((skill->value == 3) && (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
578  self->monsterinfo.nextframe = FRAME_attak204;
579 }

◆ soldier_attack3_refire()

void soldier_attack3_refire ( edict_t *  self)

Definition at line 630 of file m_soldier.c.

631 {
632  if ((level.time + 0.4) < self->monsterinfo.pausetime)
633  self->monsterinfo.nextframe = FRAME_attak303;
634 }

◆ soldier_attack6_refire()

void soldier_attack6_refire ( edict_t *  self)

Definition at line 709 of file m_soldier.c.

710 {
711  if (self->enemy->health <= 0)
712  return;
713 
714  if (range(self, self->enemy) < RANGE_MID)
715  return;
716 
717  if (skill->value == 3)
718  self->monsterinfo.nextframe = FRAME_runs03;
719 }

◆ soldier_cock()

void soldier_cock ( edict_t *  self)

Definition at line 48 of file m_soldier.c.

49 {
50  if (self->s.frame == FRAME_stand322)
51  gi.sound(self, CHAN_WEAPON, sound_cock, 1, ATTN_IDLE, 0);
52  else
53  gi.sound(self, CHAN_WEAPON, sound_cock, 1, ATTN_NORM, 0);
54 }

◆ soldier_dead()

void soldier_dead ( edict_t *  self)

Definition at line 843 of file m_soldier.c.

844 {
845  VectorSet(self->mins, -16, -16, -24);
846  VectorSet(self->maxs, 16, 16, -8);
847  self->movetype = MOVETYPE_TOSS;
848  self->svflags |= SVF_DEADMONSTER;
849  self->nextthink = 0;
850  gi.linkentity(self);
851 }

◆ soldier_die()

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

Definition at line 1097 of file m_soldier.c.

1098 {
1099  int n;
1100 
1101 // check for gib
1102  if (self->health <= self->gib_health) {
1103  gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0);
1104  for (n = 0; n < 3; n++)
1105  ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
1106  ThrowGib(self, "models/objects/gibs/chest/tris.md2", damage, GIB_ORGANIC);
1107  ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
1108  self->deadflag = DEAD_DEAD;
1109  return;
1110  }
1111 
1112  if (self->deadflag == DEAD_DEAD)
1113  return;
1114 
1115 // regular death
1116  self->deadflag = DEAD_DEAD;
1117  self->takedamage = DAMAGE_YES;
1118  self->s.skinnum |= 1;
1119 
1120  if (self->s.skinnum == 1)
1121  gi.sound(self, CHAN_VOICE, sound_death_light, 1, ATTN_NORM, 0);
1122  else if (self->s.skinnum == 3)
1123  gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
1124  else // (self->s.skinnum == 5)
1125  gi.sound(self, CHAN_VOICE, sound_death_ss, 1, ATTN_NORM, 0);
1126 
1127  if (fabs((self->s.origin[2] + self->viewheight) - point[2]) <= 4) {
1128  // head shot
1129  self->monsterinfo.currentmove = &soldier_move_death3;
1130  return;
1131  }
1132 
1133  n = rand() % 5;
1134  if (n == 0)
1135  self->monsterinfo.currentmove = &soldier_move_death1;
1136  else if (n == 1)
1137  self->monsterinfo.currentmove = &soldier_move_death2;
1138  else if (n == 2)
1139  self->monsterinfo.currentmove = &soldier_move_death4;
1140  else if (n == 3)
1141  self->monsterinfo.currentmove = &soldier_move_death5;
1142  else
1143  self->monsterinfo.currentmove = &soldier_move_death6;
1144 }

Referenced by SP_monster_soldier_x().

◆ soldier_dodge()

void soldier_dodge ( edict_t *  self,
edict_t *  attacker,
float  eta 
)

Definition at line 790 of file m_soldier.c.

791 {
792  float r;
793 
794  r = random();
795  if (r > 0.25)
796  return;
797 
798  if (!self->enemy)
799  self->enemy = attacker;
800 
801  if (skill->value == 0) {
802  self->monsterinfo.currentmove = &soldier_move_duck;
803  return;
804  }
805 
806  self->monsterinfo.pausetime = level.time + eta + 0.3;
807  r = random();
808 
809  if (skill->value == 1) {
810  if (r > 0.33)
811  self->monsterinfo.currentmove = &soldier_move_duck;
812  else
813  self->monsterinfo.currentmove = &soldier_move_attack3;
814  return;
815  }
816 
817  if (skill->value >= 2) {
818  if (r > 0.66)
819  self->monsterinfo.currentmove = &soldier_move_duck;
820  else
821  self->monsterinfo.currentmove = &soldier_move_attack3;
822  return;
823  }
824 
825  self->monsterinfo.currentmove = &soldier_move_attack3;
826 }

Referenced by SP_monster_soldier_x().

◆ soldier_duck_down()

void soldier_duck_down ( edict_t *  self)

Definition at line 605 of file m_soldier.c.

606 {
607  if (self->monsterinfo.aiflags & AI_DUCKED)
608  return;
609  self->monsterinfo.aiflags |= AI_DUCKED;
610  self->maxs[2] -= 32;
611  self->takedamage = DAMAGE_YES;
612  self->monsterinfo.pausetime = level.time + 1;
613  gi.linkentity(self);
614 }

Referenced by soldier_fire3().

◆ soldier_duck_hold()

void soldier_duck_hold ( edict_t *  self)

Definition at line 773 of file m_soldier.c.

774 {
775  if (level.time >= self->monsterinfo.pausetime)
776  self->monsterinfo.aiflags &= ~AI_HOLD_FRAME;
777  else
778  self->monsterinfo.aiflags |= AI_HOLD_FRAME;
779 }

◆ soldier_duck_up()

void soldier_duck_up ( edict_t *  self)

Definition at line 616 of file m_soldier.c.

617 {
618  self->monsterinfo.aiflags &= ~AI_DUCKED;
619  self->maxs[2] += 32;
620  self->takedamage = DAMAGE_AIM;
621  gi.linkentity(self);
622 }

◆ soldier_fire()

void soldier_fire ( edict_t *  self,
int  flash_number 
)

Definition at line 443 of file m_soldier.c.

444 {
445  vec3_t start;
446  vec3_t forward, right, up;
447  vec3_t aim;
448  vec3_t dir;
449  vec3_t end;
450  float r, u;
451  int flash_index;
452 
453  if (self->s.skinnum < 2)
454  flash_index = blaster_flash[flash_number];
455  else if (self->s.skinnum < 4)
456  flash_index = shotgun_flash[flash_number];
457  else
458  flash_index = machinegun_flash[flash_number];
459 
460  AngleVectors(self->s.angles, forward, right, NULL);
461  G_ProjectSource(self->s.origin, monster_flash_offset[flash_index], forward, right, start);
462 
463  if (flash_number == 5 || flash_number == 6) {
464  VectorCopy(forward, aim);
465  } else {
466  VectorCopy(self->enemy->s.origin, end);
467  end[2] += self->enemy->viewheight;
468  VectorSubtract(end, start, aim);
469  vectoangles(aim, dir);
470  AngleVectors(dir, forward, right, up);
471 
472  r = crandom() * 1000;
473  u = crandom() * 500;
474  VectorMA(start, 8192, forward, end);
475  VectorMA(end, r, right, end);
476  VectorMA(end, u, up, end);
477 
478  VectorSubtract(end, start, aim);
479  VectorNormalize(aim);
480  }
481 
482  if (self->s.skinnum <= 1) {
483  monster_fire_blaster(self, start, aim, 5, 600, flash_index, EF_BLASTER);
484  } else if (self->s.skinnum <= 3) {
486  } else {
487  if (!(self->monsterinfo.aiflags & AI_HOLD_FRAME))
488  self->monsterinfo.pausetime = level.time + (3 + rand() % 8) * FRAMETIME;
489 
490  monster_fire_bullet(self, start, aim, 2, 4, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, flash_index);
491 
492  if (level.time >= self->monsterinfo.pausetime)
493  self->monsterinfo.aiflags &= ~AI_HOLD_FRAME;
494  else
495  self->monsterinfo.aiflags |= AI_HOLD_FRAME;
496  }
497 }

Referenced by soldier_fire1(), soldier_fire2(), soldier_fire3(), soldier_fire4(), soldier_fire6(), soldier_fire7(), and soldier_fire8().

◆ soldier_fire1()

void soldier_fire1 ( edict_t *  self)

Definition at line 501 of file m_soldier.c.

502 {
503  soldier_fire(self, 0);
504 }

◆ soldier_fire2()

void soldier_fire2 ( edict_t *  self)

Definition at line 550 of file m_soldier.c.

551 {
552  soldier_fire(self, 1);
553 }

◆ soldier_fire3()

void soldier_fire3 ( edict_t *  self)

Definition at line 624 of file m_soldier.c.

625 {
626  soldier_duck_down(self);
627  soldier_fire(self, 2);
628 }

◆ soldier_fire4()

void soldier_fire4 ( edict_t *  self)

Definition at line 651 of file m_soldier.c.

652 {
653  soldier_fire(self, 3);
654 //
655 // if (self->enemy->health <= 0)
656 // return;
657 //
658 // if ( ((skill->value == 3) && (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE) )
659 // self->monsterinfo.nextframe = FRAME_attak402;
660 }

◆ soldier_fire6()

void soldier_fire6 ( edict_t *  self)

Definition at line 833 of file m_soldier.c.

834 {
835  soldier_fire(self, 5);
836 }

◆ soldier_fire7()

void soldier_fire7 ( edict_t *  self)

Definition at line 838 of file m_soldier.c.

839 {
840  soldier_fire(self, 6);
841 }

◆ soldier_fire8()

void soldier_fire8 ( edict_t *  self)

Definition at line 704 of file m_soldier.c.

705 {
706  soldier_fire(self, 7);
707 }

◆ soldier_idle()

void soldier_idle ( edict_t *  self)

Definition at line 42 of file m_soldier.c.

43 {
44  if (random() > 0.8)
45  gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0);
46 }

◆ soldier_pain()

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

Definition at line 392 of file m_soldier.c.

393 {
394  float r;
395  int n;
396 
397  if (self->health < (self->max_health / 2))
398  self->s.skinnum |= 1;
399 
400  if (level.time < self->pain_debounce_time) {
401  if ((self->velocity[2] > 100) && ((self->monsterinfo.currentmove == &soldier_move_pain1) || (self->monsterinfo.currentmove == &soldier_move_pain2) || (self->monsterinfo.currentmove == &soldier_move_pain3)))
402  self->monsterinfo.currentmove = &soldier_move_pain4;
403  return;
404  }
405 
406  self->pain_debounce_time = level.time + 3;
407 
408  n = self->s.skinnum | 1;
409  if (n == 1)
410  gi.sound(self, CHAN_VOICE, sound_pain_light, 1, ATTN_NORM, 0);
411  else if (n == 3)
412  gi.sound(self, CHAN_VOICE, sound_pain, 1, ATTN_NORM, 0);
413  else
414  gi.sound(self, CHAN_VOICE, sound_pain_ss, 1, ATTN_NORM, 0);
415 
416  if (self->velocity[2] > 100) {
417  self->monsterinfo.currentmove = &soldier_move_pain4;
418  return;
419  }
420 
421  if (skill->value == 3)
422  return; // no pain anims in nightmare
423 
424  r = random();
425 
426  if (r < 0.33)
427  self->monsterinfo.currentmove = &soldier_move_pain1;
428  else if (r < 0.66)
429  self->monsterinfo.currentmove = &soldier_move_pain2;
430  else
431  self->monsterinfo.currentmove = &soldier_move_pain3;
432 }

Referenced by SP_monster_soldier_x().

◆ soldier_run()

void soldier_run ( edict_t *  self)

Definition at line 307 of file m_soldier.c.

308 {
309  if (self->monsterinfo.aiflags & AI_STAND_GROUND) {
310  self->monsterinfo.currentmove = &soldier_move_stand1;
311  return;
312  }
313 
314  if (self->monsterinfo.currentmove == &soldier_move_walk1 ||
315  self->monsterinfo.currentmove == &soldier_move_walk2 ||
316  self->monsterinfo.currentmove == &soldier_move_start_run) {
317  self->monsterinfo.currentmove = &soldier_move_run;
318  } else {
319  self->monsterinfo.currentmove = &soldier_move_start_run;
320  }
321 }

Referenced by SP_monster_soldier_x().

◆ soldier_sight()

void soldier_sight ( edict_t *  self,
edict_t *  other 
)

Definition at line 756 of file m_soldier.c.

757 {
758  if (random() < 0.5)
759  gi.sound(self, CHAN_VOICE, sound_sight1, 1, ATTN_NORM, 0);
760  else
761  gi.sound(self, CHAN_VOICE, sound_sight2, 1, ATTN_NORM, 0);
762 
763  if ((skill->value > 0) && (range(self, self->enemy) >= RANGE_MID)) {
764  if (random() > 0.5)
765  self->monsterinfo.currentmove = &soldier_move_attack6;
766  }
767 }

Referenced by SP_monster_soldier_x().

◆ soldier_stand()

void soldier_stand ( edict_t *  self)

Definition at line 206 of file m_soldier.c.

207 {
208  if ((self->monsterinfo.currentmove == &soldier_move_stand3) || (random() < 0.8))
209  self->monsterinfo.currentmove = &soldier_move_stand1;
210  else
211  self->monsterinfo.currentmove = &soldier_move_stand3;
212 }

Referenced by SP_monster_soldier_x().

◆ soldier_walk()

void soldier_walk ( edict_t *  self)

Definition at line 276 of file m_soldier.c.

277 {
278  if (random() < 0.5)
279  self->monsterinfo.currentmove = &soldier_move_walk1;
280  else
281  self->monsterinfo.currentmove = &soldier_move_walk2;
282 }

Referenced by SP_monster_soldier_x().

◆ soldier_walk1_random()

void soldier_walk1_random ( edict_t *  self)

Definition at line 219 of file m_soldier.c.

220 {
221  if (random() > 0.1)
222  self->monsterinfo.nextframe = FRAME_walk101;
223 }

◆ SP_monster_soldier()

void SP_monster_soldier ( edict_t *  self)

Definition at line 1211 of file m_soldier.c.

1212 {
1213  if (deathmatch->value) {
1214  G_FreeEdict(self);
1215  return;
1216  }
1217 
1218  SP_monster_soldier_x(self);
1219 
1220  sound_pain = gi.soundindex("soldier/solpain1.wav");
1221  sound_death = gi.soundindex("soldier/soldeth1.wav");
1222  gi.soundindex("soldier/solatck1.wav");
1223 
1224  self->s.skinnum = 2;
1225  self->health = 30;
1226  self->gib_health = -30;
1227 }

◆ SP_monster_soldier_light()

void SP_monster_soldier_light ( edict_t *  self)

Definition at line 1189 of file m_soldier.c.

1190 {
1191  if (deathmatch->value) {
1192  G_FreeEdict(self);
1193  return;
1194  }
1195 
1196  SP_monster_soldier_x(self);
1197 
1198  sound_pain_light = gi.soundindex("soldier/solpain2.wav");
1199  sound_death_light = gi.soundindex("soldier/soldeth2.wav");
1200  gi.modelindex("models/objects/laser/tris.md2");
1201  gi.soundindex("misc/lasfly.wav");
1202  gi.soundindex("soldier/solatck2.wav");
1203 
1204  self->s.skinnum = 0;
1205  self->health = 20;
1206  self->gib_health = -30;
1207 }

◆ SP_monster_soldier_ss()

void SP_monster_soldier_ss ( edict_t *  self)

Definition at line 1231 of file m_soldier.c.

1232 {
1233  if (deathmatch->value) {
1234  G_FreeEdict(self);
1235  return;
1236  }
1237 
1238  SP_monster_soldier_x(self);
1239 
1240  sound_pain_ss = gi.soundindex("soldier/solpain3.wav");
1241  sound_death_ss = gi.soundindex("soldier/soldeth3.wav");
1242  gi.soundindex("soldier/solatck3.wav");
1243 
1244  self->s.skinnum = 4;
1245  self->health = 40;
1246  self->gib_health = -30;
1247 }

◆ SP_monster_soldier_x()

void SP_monster_soldier_x ( edict_t *  self)

Definition at line 1151 of file m_soldier.c.

1152 {
1153 
1154  self->s.modelindex = gi.modelindex("models/monsters/soldier/tris.md2");
1155  self->monsterinfo.scale = MODEL_SCALE;
1156  VectorSet(self->mins, -16, -16, -24);
1157  VectorSet(self->maxs, 16, 16, 32);
1158  self->movetype = MOVETYPE_STEP;
1159  self->solid = SOLID_BBOX;
1160 
1161  sound_idle = gi.soundindex("soldier/solidle1.wav");
1162  sound_sight1 = gi.soundindex("soldier/solsght1.wav");
1163  sound_sight2 = gi.soundindex("soldier/solsrch1.wav");
1164  sound_cock = gi.soundindex("infantry/infatck3.wav");
1165 
1166  self->mass = 100;
1167 
1168  self->pain = soldier_pain;
1169  self->die = soldier_die;
1170 
1171  self->monsterinfo.stand = soldier_stand;
1172  self->monsterinfo.walk = soldier_walk;
1173  self->monsterinfo.run = soldier_run;
1174  self->monsterinfo.dodge = soldier_dodge;
1175  self->monsterinfo.attack = soldier_attack;
1176  self->monsterinfo.melee = NULL;
1177  self->monsterinfo.sight = soldier_sight;
1178 
1179  gi.linkentity(self);
1180 
1181  self->monsterinfo.stand(self);
1182 
1183  walkmonster_start(self);
1184 }

Referenced by SP_monster_soldier(), SP_monster_soldier_light(), and SP_monster_soldier_ss().

Variable Documentation

◆ blaster_flash

int blaster_flash[] = {MZ2_SOLDIER_BLASTER_1, MZ2_SOLDIER_BLASTER_2, MZ2_SOLDIER_BLASTER_3, MZ2_SOLDIER_BLASTER_4, MZ2_SOLDIER_BLASTER_5, MZ2_SOLDIER_BLASTER_6, MZ2_SOLDIER_BLASTER_7, MZ2_SOLDIER_BLASTER_8}
static

Definition at line 439 of file m_soldier.c.

Referenced by soldier_fire().

◆ machinegun_flash

int machinegun_flash[] = {MZ2_SOLDIER_MACHINEGUN_1, MZ2_SOLDIER_MACHINEGUN_2, MZ2_SOLDIER_MACHINEGUN_3, MZ2_SOLDIER_MACHINEGUN_4, MZ2_SOLDIER_MACHINEGUN_5, MZ2_SOLDIER_MACHINEGUN_6, MZ2_SOLDIER_MACHINEGUN_7, MZ2_SOLDIER_MACHINEGUN_8}
static

Definition at line 441 of file m_soldier.c.

Referenced by soldier_fire().

◆ shotgun_flash

int shotgun_flash[] = {MZ2_SOLDIER_SHOTGUN_1, MZ2_SOLDIER_SHOTGUN_2, MZ2_SOLDIER_SHOTGUN_3, MZ2_SOLDIER_SHOTGUN_4, MZ2_SOLDIER_SHOTGUN_5, MZ2_SOLDIER_SHOTGUN_6, MZ2_SOLDIER_SHOTGUN_7, MZ2_SOLDIER_SHOTGUN_8}
static

Definition at line 440 of file m_soldier.c.

Referenced by soldier_fire().

◆ soldier_frames_attack1

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

Definition at line 532 of file m_soldier.c.

◆ soldier_frames_attack2

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

Definition at line 581 of file m_soldier.c.

◆ soldier_frames_attack3

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

Definition at line 636 of file m_soldier.c.

◆ soldier_frames_attack4

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

Definition at line 662 of file m_soldier.c.

◆ soldier_frames_attack6

mframe_t soldier_frames_attack6[]
Initial value:
= {
{ ai_charge, 10, NULL },
{ ai_charge, 4, NULL },
{ ai_charge, 12, NULL },
{ ai_charge, 13, NULL },
{ ai_charge, 18, NULL },
{ ai_charge, 15, NULL },
{ ai_charge, 14, NULL },
{ ai_charge, 11, NULL },
{ ai_charge, 8, NULL },
{ ai_charge, 11, NULL },
{ ai_charge, 12, NULL },
{ ai_charge, 12, NULL },
}

Definition at line 721 of file m_soldier.c.

◆ soldier_frames_death1

mframe_t soldier_frames_death1[]

Definition at line 853 of file m_soldier.c.

◆ soldier_frames_death2

mframe_t soldier_frames_death2[]

Definition at line 896 of file m_soldier.c.

◆ soldier_frames_death3

mframe_t soldier_frames_death3[]

Definition at line 938 of file m_soldier.c.

◆ soldier_frames_death4

mframe_t soldier_frames_death4[]

Definition at line 991 of file m_soldier.c.

◆ soldier_frames_death5

mframe_t soldier_frames_death5[]
Initial value:
= {
{ ai_move, -5, NULL },
{ ai_move, -5, NULL },
{ ai_move, -5, 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 },
{ 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 },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL }
}

Definition at line 1053 of file m_soldier.c.

◆ soldier_frames_death6

mframe_t soldier_frames_death6[]
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 1083 of file m_soldier.c.

◆ soldier_frames_duck

mframe_t soldier_frames_duck[]
Initial value:
= {
{ ai_move, 1, NULL },
{ ai_move, 5, NULL }
}

Definition at line 781 of file m_soldier.c.

◆ soldier_frames_pain1

mframe_t soldier_frames_pain1[]
Initial value:
= {
{ ai_move, -3, NULL },
{ ai_move, 4, NULL },
{ ai_move, 1, NULL },
{ ai_move, 1, NULL },
{ ai_move, 0, NULL }
}

Definition at line 328 of file m_soldier.c.

◆ soldier_frames_pain2

mframe_t soldier_frames_pain2[]
Initial value:
= {
{ ai_move, -13, NULL },
{ ai_move, -1, NULL },
{ ai_move, 2, NULL },
{ ai_move, 4, NULL },
{ ai_move, 2, NULL },
{ ai_move, 3, NULL },
{ ai_move, 2, NULL }
}

Definition at line 337 of file m_soldier.c.

◆ soldier_frames_pain3

mframe_t soldier_frames_pain3[]
Initial value:
= {
{ ai_move, -8, NULL },
{ ai_move, 10, NULL },
{ ai_move, -4, NULL },
{ ai_move, -1, NULL },
{ ai_move, -3, NULL },
{ ai_move, 0, NULL },
{ ai_move, 3, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 1, NULL },
{ ai_move, 0, NULL },
{ ai_move, 1, NULL },
{ ai_move, 2, NULL },
{ ai_move, 4, NULL },
{ ai_move, 3, NULL },
{ ai_move, 2, NULL }
}

Definition at line 348 of file m_soldier.c.

◆ soldier_frames_pain4

mframe_t soldier_frames_pain4[]
Initial value:
= {
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, 0, NULL },
{ ai_move, -10, NULL },
{ ai_move, -6, NULL },
{ ai_move, 8, NULL },
{ ai_move, 4, NULL },
{ ai_move, 1, NULL },
{ ai_move, 0, NULL },
{ ai_move, 2, NULL },
{ ai_move, 5, NULL },
{ ai_move, 2, NULL },
{ ai_move, -1, NULL },
{ ai_move, -1, NULL },
{ ai_move, 3, NULL },
{ ai_move, 2, NULL },
{ ai_move, 0, NULL }
}

Definition at line 370 of file m_soldier.c.

◆ soldier_frames_run

mframe_t soldier_frames_run[]
Initial value:
= {
{ ai_run, 10, NULL },
{ ai_run, 11, NULL },
{ ai_run, 11, NULL },
{ ai_run, 16, NULL },
{ ai_run, 10, NULL },
{ ai_run, 15, NULL }
}

Definition at line 297 of file m_soldier.c.

◆ soldier_frames_stand1

mframe_t soldier_frames_stand1[]

Definition at line 61 of file m_soldier.c.

◆ soldier_frames_stand3

mframe_t soldier_frames_stand3[]

Definition at line 97 of file m_soldier.c.

◆ soldier_frames_start_run

mframe_t soldier_frames_start_run[]
Initial value:
= {
{ ai_run, 7, NULL },
{ ai_run, 5, NULL }
}

Definition at line 291 of file m_soldier.c.

◆ soldier_frames_walk1

mframe_t soldier_frames_walk1[]

Definition at line 225 of file m_soldier.c.

◆ soldier_frames_walk2

mframe_t soldier_frames_walk2[]
Initial value:
= {
{ ai_walk, 4, NULL },
{ ai_walk, 4, NULL },
{ ai_walk, 9, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 5, NULL },
{ ai_walk, 1, NULL },
{ ai_walk, 3, NULL },
{ ai_walk, 7, NULL },
{ ai_walk, 6, NULL },
{ ai_walk, 7, NULL }
}

Definition at line 262 of file m_soldier.c.

◆ soldier_move_attack1

Definition at line 546 of file m_soldier.c.

Referenced by soldier_attack().

◆ soldier_move_attack2

Definition at line 601 of file m_soldier.c.

Referenced by soldier_attack().

◆ soldier_move_attack3

Definition at line 647 of file m_soldier.c.

Referenced by soldier_dodge().

◆ soldier_move_attack4

Definition at line 670 of file m_soldier.c.

Referenced by soldier_attack().

◆ soldier_move_attack6

Definition at line 737 of file m_soldier.c.

Referenced by soldier_sight().

◆ soldier_move_death1

Definition at line 894 of file m_soldier.c.

Referenced by soldier_die().

◆ soldier_move_death2

Definition at line 936 of file m_soldier.c.

Referenced by soldier_die().

◆ soldier_move_death3

Definition at line 989 of file m_soldier.c.

Referenced by soldier_die().

◆ soldier_move_death4

Definition at line 1051 of file m_soldier.c.

Referenced by soldier_die().

◆ soldier_move_death5

Definition at line 1081 of file m_soldier.c.

Referenced by soldier_die().

◆ soldier_move_death6

Definition at line 1095 of file m_soldier.c.

Referenced by soldier_die().

◆ soldier_move_duck

Definition at line 788 of file m_soldier.c.

Referenced by soldier_dodge().

◆ soldier_move_pain1

Definition at line 335 of file m_soldier.c.

Referenced by soldier_pain().

◆ soldier_move_pain2

Definition at line 346 of file m_soldier.c.

Referenced by soldier_pain().

◆ soldier_move_pain3

Definition at line 368 of file m_soldier.c.

Referenced by soldier_pain().

◆ soldier_move_pain4

Definition at line 389 of file m_soldier.c.

Referenced by soldier_pain().

◆ soldier_move_run

mmove_t soldier_move_run = {FRAME_run03, FRAME_run08, soldier_frames_run, NULL}

Definition at line 305 of file m_soldier.c.

Referenced by soldier_run().

◆ soldier_move_stand1

Definition at line 95 of file m_soldier.c.

Referenced by soldier_run(), and soldier_stand().

◆ soldier_move_stand3

Definition at line 141 of file m_soldier.c.

Referenced by soldier_stand().

◆ soldier_move_start_run

Definition at line 295 of file m_soldier.c.

Referenced by soldier_run().

◆ soldier_move_walk1

mmove_t soldier_move_walk1 = {FRAME_walk101, FRAME_walk133, soldier_frames_walk1, NULL}

Definition at line 260 of file m_soldier.c.

Referenced by soldier_run(), and soldier_walk().

◆ soldier_move_walk2

mmove_t soldier_move_walk2 = {FRAME_walk209, FRAME_walk218, soldier_frames_walk2, NULL}

Definition at line 274 of file m_soldier.c.

Referenced by soldier_run(), and soldier_walk().

◆ sound_cock

int sound_cock
static

Definition at line 39 of file m_soldier.c.

Referenced by soldier_cock(), and SP_monster_soldier_x().

◆ sound_death

int sound_death
static

Definition at line 37 of file m_soldier.c.

Referenced by soldier_die(), and SP_monster_soldier().

◆ sound_death_light

int sound_death_light
static

Definition at line 36 of file m_soldier.c.

Referenced by soldier_die(), and SP_monster_soldier_light().

◆ sound_death_ss

int sound_death_ss
static

Definition at line 38 of file m_soldier.c.

Referenced by soldier_die(), and SP_monster_soldier_ss().

◆ sound_idle

int sound_idle
static

Definition at line 30 of file m_soldier.c.

Referenced by soldier_idle(), and SP_monster_soldier_x().

◆ sound_pain

int sound_pain
static

Definition at line 34 of file m_soldier.c.

Referenced by soldier_pain(), and SP_monster_soldier().

◆ sound_pain_light

int sound_pain_light
static

Definition at line 33 of file m_soldier.c.

Referenced by soldier_pain(), and SP_monster_soldier_light().

◆ sound_pain_ss

int sound_pain_ss
static

Definition at line 35 of file m_soldier.c.

Referenced by soldier_pain(), and SP_monster_soldier_ss().

◆ sound_sight1

int sound_sight1
static

Definition at line 31 of file m_soldier.c.

Referenced by soldier_sight(), and SP_monster_soldier_x().

◆ sound_sight2

int sound_sight2
static

Definition at line 32 of file m_soldier.c.

Referenced by soldier_sight(), and SP_monster_soldier_x().

soldier_move_pain4
mmove_t soldier_move_pain4
Definition: m_soldier.c:389
gi
game_import_t gi
Definition: g_main.c:23
soldier_move_pain2
mmove_t soldier_move_pain2
Definition: m_soldier.c:346
sound_cock
static int sound_cock
Definition: m_soldier.c:39
sound_sight2
static int sound_sight2
Definition: m_soldier.c:32
deathmatch
cvar_t * deathmatch
Definition: g_main.c:33
soldier_move_attack4
mmove_t soldier_move_attack4
Definition: m_soldier.c:670
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
soldier_fire2
void soldier_fire2(edict_t *self)
Definition: m_soldier.c:550
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:112
soldier_duck_down
void soldier_duck_down(edict_t *self)
Definition: m_soldier.c:605
shotgun_flash
static int shotgun_flash[]
Definition: m_soldier.c:440
blaster_flash
static int blaster_flash[]
Definition: m_soldier.c:439
DEFAULT_BULLET_HSPREAD
#define DEFAULT_BULLET_HSPREAD
Definition: g_local.h:654
ThrowGib
void ThrowGib(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:130
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:175
FRAME_attak102
#define FRAME_attak102
Definition: m_boss31.h:23
soldier_move_pain1
mmove_t soldier_move_pain1
Definition: m_soldier.c:335
soldier_die
void soldier_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_soldier.c:1097
soldier_attack3_refire
void soldier_attack3_refire(edict_t *self)
Definition: m_soldier.c:630
FRAMETIME
#define FRAMETIME
Definition: g_local.h:75
soldier_move_pain3
mmove_t soldier_move_pain3
Definition: m_soldier.c:368
sound_death
static int sound_death
Definition: m_soldier.c:37
FRAME_attak204
#define FRAME_attak204
Definition: m_boss31.h:43
machinegun_flash
static int machinegun_flash[]
Definition: m_soldier.c:441
soldier_attack2_refire2
void soldier_attack2_refire2(edict_t *self)
Definition: m_soldier.c:569
SP_monster_soldier_x
void SP_monster_soldier_x(edict_t *self)
Definition: m_soldier.c:1151
soldier_move_death2
mmove_t soldier_move_death2
Definition: m_soldier.c:936
sound_pain_ss
static int sound_pain_ss
Definition: m_soldier.c:35
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:126
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:504
sound_death_ss
static int sound_death_ss
Definition: m_soldier.c:38
DAMAGE_YES
@ DAMAGE_YES
Definition: g_local.h:88
DEFAULT_SHOTGUN_COUNT
#define DEFAULT_SHOTGUN_COUNT
Definition: g_local.h:659
soldier_fire4
void soldier_fire4(edict_t *self)
Definition: m_soldier.c:651
FRAME_attak216
#define FRAME_attak216
Definition: m_brain.h:108
soldier_move_death3
mmove_t soldier_move_death3
Definition: m_soldier.c:989
soldier_sight
void soldier_sight(edict_t *self, edict_t *other)
Definition: m_soldier.c:756
walkmonster_start
void walkmonster_start(edict_t *self)
Definition: g_monster.c:630
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:192
soldier_attack6_refire
void soldier_attack6_refire(edict_t *self)
Definition: m_soldier.c:709
soldier_move_attack3
mmove_t soldier_move_attack3
Definition: m_soldier.c:647
soldier_move_walk1
mmove_t soldier_move_walk1
Definition: m_soldier.c:260
soldier_pain
void soldier_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_soldier.c:392
soldier_move_attack2
mmove_t soldier_move_attack2
Definition: m_soldier.c:601
vectoangles
void vectoangles(vec3_t vec, vec3_t angles)
Definition: g_utils.c:330
DEFAULT_BULLET_VSPREAD
#define DEFAULT_BULLET_VSPREAD
Definition: g_local.h:655
soldier_cock
void soldier_cock(edict_t *self)
Definition: m_soldier.c:48
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:421
FRAME_attak110
#define FRAME_attak110
Definition: m_boss31.h:31
soldier_move_attack1
mmove_t soldier_move_attack1
Definition: m_soldier.c:546
soldier_move_start_run
mmove_t soldier_move_start_run
Definition: m_soldier.c:295
sound_death_light
static int sound_death_light
Definition: m_soldier.c:36
soldier_move_duck
mmove_t soldier_move_duck
Definition: m_soldier.c:788
forward
static vec3_t forward
Definition: p_view.c:27
crandom
#define crandom()
Definition: g_local.h:505
AI_HOLD_FRAME
#define AI_HOLD_FRAME
Definition: g_local.h:133
soldier_move_death6
mmove_t soldier_move_death6
Definition: m_soldier.c:1095
soldier_fire3
void soldier_fire3(edict_t *self)
Definition: m_soldier.c:624
sound_sight1
static int sound_sight1
Definition: m_soldier.c:31
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
soldier_duck_up
void soldier_duck_up(edict_t *self)
Definition: m_soldier.c:616
soldier_attack2_refire1
void soldier_attack2_refire1(edict_t *self)
Definition: m_soldier.c:555
soldier_stand
void soldier_stand(edict_t *self)
Definition: m_soldier.c:206
monster_fire_bullet
void monster_fire_bullet(edict_t *self, vec3_t start, vec3_t dir, int damage, int kick, int hspread, int vspread, int flashtype)
Definition: g_monster.c:29
soldier_run
void soldier_run(edict_t *self)
Definition: m_soldier.c:307
skill
cvar_t * skill
Definition: g_main.c:36
FRAME_runs03
#define FRAME_runs03
Definition: m_actor.h:128
soldier_move_death1
mmove_t soldier_move_death1
Definition: m_soldier.c:894
soldier_move_run
mmove_t soldier_move_run
Definition: m_soldier.c:305
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:86
soldier_move_stand3
mmove_t soldier_move_stand3
Definition: m_soldier.c:141
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_attak303
#define FRAME_attak303
Definition: m_boss32.h:225
RANGE_MELEE
#define RANGE_MELEE
Definition: g_local.h:116
DAMAGE_AIM
@ DAMAGE_AIM
Definition: g_local.h:89
up
static vec3_t up
Definition: p_view.c:27
DEFAULT_SHOTGUN_HSPREAD
#define DEFAULT_SHOTGUN_HSPREAD
Definition: g_local.h:656
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
soldier_move_attack6
mmove_t soldier_move_attack6
Definition: m_soldier.c:737
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:122
level
level_locals_t level
Definition: g_main.c:22
DEFAULT_SHOTGUN_VSPREAD
#define DEFAULT_SHOTGUN_VSPREAD
Definition: g_local.h:657
RANGE_MID
#define RANGE_MID
Definition: g_local.h:118
soldier_move_death4
mmove_t soldier_move_death4
Definition: m_soldier.c:1051
soldier_attack1_refire1
void soldier_attack1_refire1(edict_t *self)
Definition: m_soldier.c:506
monster_flash_offset
const vec3_t monster_flash_offset[256]
Definition: m_flash.c:25
soldier_attack1_refire2
void soldier_attack1_refire2(edict_t *self)
Definition: m_soldier.c:520
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:175
soldier_fire1
void soldier_fire1(edict_t *self)
Definition: m_soldier.c:501
soldier_fire8
void soldier_fire8(edict_t *self)
Definition: m_soldier.c:704
soldier_attack
void soldier_attack(edict_t *self)
Definition: m_soldier.c:739
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:194
range
int range(edict_t *self, edict_t *other)
Definition: g_ai.c:245
soldier_walk
void soldier_walk(edict_t *self)
Definition: m_soldier.c:276
FRAME_stand322
#define FRAME_stand322
Definition: m_soldier.h:219
soldier_move_death5
mmove_t soldier_move_death5
Definition: m_soldier.c:1081
AI_DUCKED
#define AI_DUCKED
Definition: g_local.h:137
soldier_dodge
void soldier_dodge(edict_t *self, edict_t *attacker, float eta)
Definition: m_soldier.c:790
monster_fire_shotgun
void monster_fire_shotgun(edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int flashtype)
Definition: g_monster.c:39
soldier_fire
void soldier_fire(edict_t *self, int flash_number)
Definition: m_soldier.c:443
soldier_duck_hold
void soldier_duck_hold(edict_t *self)
Definition: m_soldier.c:773
sound_pain_light
static int sound_pain_light
Definition: m_soldier.c:33
sound_idle
static int sound_idle
Definition: m_soldier.c:30
FRAME_walk101
#define FRAME_walk101
Definition: m_brain.h:22
VectorNormalize
vec_t VectorNormalize(vec3_t v)
Definition: shared.c:55
soldier_move_stand1
mmove_t soldier_move_stand1
Definition: m_soldier.c:95
soldier_move_walk2
mmove_t soldier_move_walk2
Definition: m_soldier.c:274
sound_pain
static int sound_pain
Definition: m_soldier.c:34