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

Go to the source code of this file.

Functions

void BossExplode (edict_t *self)
 
qboolean infront (edict_t *self, edict_t *other)
 
void boss2_search (edict_t *self)
 
void boss2_run (edict_t *self)
 
void boss2_stand (edict_t *self)
 
void boss2_dead (edict_t *self)
 
void boss2_attack (edict_t *self)
 
void boss2_attack_mg (edict_t *self)
 
void boss2_reattack_mg (edict_t *self)
 
void boss2_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
 
void Boss2Rocket (edict_t *self)
 
void boss2_firebullet_right (edict_t *self)
 
void boss2_firebullet_left (edict_t *self)
 
void Boss2MachineGun (edict_t *self)
 
void boss2_walk (edict_t *self)
 
void boss2_pain (edict_t *self, edict_t *other, float kick, int damage)
 
qboolean Boss2_CheckAttack (edict_t *self)
 
void SP_monster_boss2 (edict_t *self)
 

Variables

static int sound_pain1
 
static int sound_pain2
 
static int sound_pain3
 
static int sound_death
 
static int sound_search1
 
mframe_t boss2_frames_stand []
 
mmove_t boss2_move_stand = {FRAME_stand30, FRAME_stand50, boss2_frames_stand, NULL}
 
mframe_t boss2_frames_fidget []
 
mmove_t boss2_move_fidget = {FRAME_stand1, FRAME_stand30, boss2_frames_fidget, NULL}
 
mframe_t boss2_frames_walk []
 
mmove_t boss2_move_walk = {FRAME_walk1, FRAME_walk20, boss2_frames_walk, NULL}
 
mframe_t boss2_frames_run []
 
mmove_t boss2_move_run = {FRAME_walk1, FRAME_walk20, boss2_frames_run, NULL}
 
mframe_t boss2_frames_attack_pre_mg []
 
mmove_t boss2_move_attack_pre_mg = {FRAME_attack1, FRAME_attack9, boss2_frames_attack_pre_mg, NULL}
 
mframe_t boss2_frames_attack_mg []
 
mmove_t boss2_move_attack_mg = {FRAME_attack10, FRAME_attack15, boss2_frames_attack_mg, NULL}
 
mframe_t boss2_frames_attack_post_mg []
 
mmove_t boss2_move_attack_post_mg = {FRAME_attack16, FRAME_attack19, boss2_frames_attack_post_mg, boss2_run}
 
mframe_t boss2_frames_attack_rocket []
 
mmove_t boss2_move_attack_rocket = {FRAME_attack20, FRAME_attack40, boss2_frames_attack_rocket, boss2_run}
 
mframe_t boss2_frames_pain_heavy []
 
mmove_t boss2_move_pain_heavy = {FRAME_pain2, FRAME_pain19, boss2_frames_pain_heavy, boss2_run}
 
mframe_t boss2_frames_pain_light []
 
mmove_t boss2_move_pain_light = {FRAME_pain20, FRAME_pain23, boss2_frames_pain_light, boss2_run}
 
mframe_t boss2_frames_death []
 
mmove_t boss2_move_death = {FRAME_death2, FRAME_death50, boss2_frames_death, boss2_dead}
 

Function Documentation

◆ boss2_attack()

void boss2_attack ( edict_t *  self)

Definition at line 419 of file m_boss2.c.

420 {
421  vec3_t vec;
422  float range;
423 
424  VectorSubtract(self->enemy->s.origin, self->s.origin, vec);
425  range = VectorLength(vec);
426 
427  if (range <= 125) {
428  self->monsterinfo.currentmove = &boss2_move_attack_pre_mg;
429  } else {
430  if (random() <= 0.6)
431  self->monsterinfo.currentmove = &boss2_move_attack_pre_mg;
432  else
433  self->monsterinfo.currentmove = &boss2_move_attack_rocket;
434  }
435 }

Referenced by SP_monster_boss2().

◆ boss2_attack_mg()

void boss2_attack_mg ( edict_t *  self)

Definition at line 437 of file m_boss2.c.

438 {
439  self->monsterinfo.currentmove = &boss2_move_attack_mg;
440 }

◆ Boss2_CheckAttack()

qboolean Boss2_CheckAttack ( edict_t *  self)

Definition at line 518 of file m_boss2.c.

519 {
520  vec3_t spot1, spot2;
521  vec3_t temp;
522  float chance;
523  trace_t tr;
524  int enemy_range;
525  float enemy_yaw;
526 
527  if (self->enemy->health > 0) {
528  // see if any entities are in the way of the shot
529  VectorCopy(self->s.origin, spot1);
530  spot1[2] += self->viewheight;
531  VectorCopy(self->enemy->s.origin, spot2);
532  spot2[2] += self->enemy->viewheight;
533 
534  tr = gi.trace(spot1, NULL, NULL, spot2, self, CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_SLIME | CONTENTS_LAVA);
535 
536  // do we have a clear shot?
537  if (tr.ent != self->enemy)
538  return qfalse;
539  }
540 
541  enemy_range = range(self, self->enemy);
542  VectorSubtract(self->enemy->s.origin, self->s.origin, temp);
543  enemy_yaw = vectoyaw(temp);
544 
545  self->ideal_yaw = enemy_yaw;
546 
547 
548  // melee attack
549  if (enemy_range == RANGE_MELEE) {
550  if (self->monsterinfo.melee)
551  self->monsterinfo.attack_state = AS_MELEE;
552  else
553  self->monsterinfo.attack_state = AS_MISSILE;
554  return qtrue;
555  }
556 
557 // missile attack
558  if (!self->monsterinfo.attack)
559  return qfalse;
560 
561  if (level.time < self->monsterinfo.attack_finished)
562  return qfalse;
563 
564  if (enemy_range == RANGE_FAR)
565  return qfalse;
566 
567  if (self->monsterinfo.aiflags & AI_STAND_GROUND) {
568  chance = 0.4;
569  } else if (enemy_range == RANGE_MELEE) {
570  chance = 0.8;
571  } else if (enemy_range == RANGE_NEAR) {
572  chance = 0.8;
573  } else if (enemy_range == RANGE_MID) {
574  chance = 0.8;
575  } else {
576  return qfalse;
577  }
578 
579  if (random() < chance) {
580  self->monsterinfo.attack_state = AS_MISSILE;
581  self->monsterinfo.attack_finished = level.time + 2 * random();
582  return qtrue;
583  }
584 
585  if (self->flags & FL_FLY) {
586  if (random() < 0.3)
587  self->monsterinfo.attack_state = AS_SLIDING;
588  else
589  self->monsterinfo.attack_state = AS_STRAIGHT;
590  }
591 
592  return qfalse;
593 }

Referenced by SP_monster_boss2().

◆ boss2_dead()

void boss2_dead ( edict_t *  self)

Definition at line 476 of file m_boss2.c.

477 {
478  VectorSet(self->mins, -56, -56, 0);
479  VectorSet(self->maxs, 56, 56, 80);
480  self->movetype = MOVETYPE_TOSS;
481  self->svflags |= SVF_DEADMONSTER;
482  self->nextthink = 0;
483  gi.linkentity(self);
484 }

◆ boss2_die()

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

Definition at line 486 of file m_boss2.c.

487 {
488  gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NONE, 0);
489  self->deadflag = DEAD_DEAD;
490  self->takedamage = DAMAGE_NO;
491  self->count = 0;
492  self->monsterinfo.currentmove = &boss2_move_death;
493 #if 0
494  int n;
495 
496  self->s.sound = 0;
497  // check for gib
498  if (self->health <= self->gib_health) {
499  gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0);
500  for (n = 0; n < 2; n++)
501  ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
502  for (n = 0; n < 4; n++)
503  ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
504  ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
505  self->deadflag = DEAD_DEAD;
506  return;
507  }
508 
509  if (self->deadflag == DEAD_DEAD)
510  return;
511 
512  self->deadflag = DEAD_DEAD;
513  self->takedamage = DAMAGE_YES;
514  self->monsterinfo.currentmove = &boss2_move_death;
515 #endif
516 }

Referenced by SP_monster_boss2().

◆ boss2_firebullet_left()

void boss2_firebullet_left ( edict_t *  self)

Definition at line 111 of file m_boss2.c.

112 {
113  vec3_t forward, right, target;
114  vec3_t start;
115 
116  AngleVectors(self->s.angles, forward, right, NULL);
117  G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_MACHINEGUN_L1], forward, right, start);
118 
119  VectorMA(self->enemy->s.origin, -0.2, self->enemy->velocity, target);
120 
121  target[2] += self->enemy->viewheight;
122  VectorSubtract(target, start, forward);
124 
125  monster_fire_bullet(self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, MZ2_BOSS2_MACHINEGUN_L1);
126 }

Referenced by Boss2MachineGun().

◆ boss2_firebullet_right()

void boss2_firebullet_right ( edict_t *  self)

Definition at line 95 of file m_boss2.c.

96 {
97  vec3_t forward, right, target;
98  vec3_t start;
99 
100  AngleVectors(self->s.angles, forward, right, NULL);
101  G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_MACHINEGUN_R1], forward, right, start);
102 
103  VectorMA(self->enemy->s.origin, -0.2, self->enemy->velocity, target);
104  target[2] += self->enemy->viewheight;
105  VectorSubtract(target, start, forward);
107 
108  monster_fire_bullet(self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, MZ2_BOSS2_MACHINEGUN_R1);
109 }

Referenced by Boss2MachineGun().

◆ boss2_pain()

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

Definition at line 454 of file m_boss2.c.

455 {
456  if (self->health < (self->max_health / 2))
457  self->s.skinnum = 1;
458 
459  if (level.time < self->pain_debounce_time)
460  return;
461 
462  self->pain_debounce_time = level.time + 3;
463 // American wanted these at no attenuation
464  if (damage < 10) {
465  gi.sound(self, CHAN_VOICE, sound_pain3, 1, ATTN_NONE, 0);
466  self->monsterinfo.currentmove = &boss2_move_pain_light;
467  } else if (damage < 30) {
468  gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NONE, 0);
469  self->monsterinfo.currentmove = &boss2_move_pain_light;
470  } else {
471  gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NONE, 0);
472  self->monsterinfo.currentmove = &boss2_move_pain_heavy;
473  }
474 }

Referenced by SP_monster_boss2().

◆ boss2_reattack_mg()

void boss2_reattack_mg ( edict_t *  self)

Definition at line 442 of file m_boss2.c.

443 {
444  if (infront(self, self->enemy))
445  if (random() <= 0.7)
446  self->monsterinfo.currentmove = &boss2_move_attack_mg;
447  else
448  self->monsterinfo.currentmove = &boss2_move_attack_post_mg;
449  else
450  self->monsterinfo.currentmove = &boss2_move_attack_post_mg;
451 }

◆ boss2_run()

void boss2_run ( edict_t *  self)

Definition at line 406 of file m_boss2.c.

407 {
408  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
409  self->monsterinfo.currentmove = &boss2_move_stand;
410  else
411  self->monsterinfo.currentmove = &boss2_move_run;
412 }

Referenced by SP_monster_boss2().

◆ boss2_search()

void boss2_search ( edict_t *  self)

Definition at line 39 of file m_boss2.c.

40 {
41  if (random() < 0.5)
42  gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NONE, 0);
43 }

Referenced by SP_monster_boss2().

◆ boss2_stand()

void boss2_stand ( edict_t *  self)

Definition at line 401 of file m_boss2.c.

402 {
403  self->monsterinfo.currentmove = &boss2_move_stand;
404 }

Referenced by SP_monster_boss2().

◆ boss2_walk()

void boss2_walk ( edict_t *  self)

Definition at line 414 of file m_boss2.c.

415 {
416  self->monsterinfo.currentmove = &boss2_move_walk;
417 }

Referenced by SP_monster_boss2().

◆ Boss2MachineGun()

void Boss2MachineGun ( edict_t *  self)

Definition at line 128 of file m_boss2.c.

129 {
130  /* vec3_t forward, right;
131  vec3_t start;
132  vec3_t dir;
133  vec3_t vec;
134  int flash_number;
135 
136  AngleVectors (self->s.angles, forward, right, NULL);
137 
138  flash_number = MZ2_BOSS2_MACHINEGUN_1 + (self->s.frame - FRAME_attack10);
139  G_ProjectSource (self->s.origin, monster_flash_offset[flash_number], forward, right, start);
140 
141  VectorCopy (self->enemy->s.origin, vec);
142  vec[2] += self->enemy->viewheight;
143  VectorSubtract (vec, start, dir);
144  VectorNormalize (dir);
145  monster_fire_bullet (self, start, dir, 3, 4, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, flash_number);
146  */
147  boss2_firebullet_left(self);
149 }

◆ Boss2Rocket()

void Boss2Rocket ( edict_t *  self)

Definition at line 53 of file m_boss2.c.

54 {
55  vec3_t forward, right;
56  vec3_t start;
57  vec3_t dir;
58  vec3_t vec;
59 
60  AngleVectors(self->s.angles, forward, right, NULL);
61 
62 //1
63  G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_1], forward, right, start);
64  VectorCopy(self->enemy->s.origin, vec);
65  vec[2] += self->enemy->viewheight;
66  VectorSubtract(vec, start, dir);
67  VectorNormalize(dir);
68  monster_fire_rocket(self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_1);
69 
70 //2
71  G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_2], forward, right, start);
72  VectorCopy(self->enemy->s.origin, vec);
73  vec[2] += self->enemy->viewheight;
74  VectorSubtract(vec, start, dir);
75  VectorNormalize(dir);
76  monster_fire_rocket(self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_2);
77 
78 //3
79  G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_3], forward, right, start);
80  VectorCopy(self->enemy->s.origin, vec);
81  vec[2] += self->enemy->viewheight;
82  VectorSubtract(vec, start, dir);
83  VectorNormalize(dir);
84  monster_fire_rocket(self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_3);
85 
86 //4
87  G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_4], forward, right, start);
88  VectorCopy(self->enemy->s.origin, vec);
89  vec[2] += self->enemy->viewheight;
90  VectorSubtract(vec, start, dir);
91  VectorNormalize(dir);
92  monster_fire_rocket(self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_4);
93 }

◆ BossExplode()

void BossExplode ( edict_t *  self)

Definition at line 569 of file m_supertank.c.

570 {
571  vec3_t org;
572  int n;
573 
574  self->think = BossExplode;
575  VectorCopy(self->s.origin, org);
576  org[2] += 24 + (rand() & 15);
577  switch (self->count++) {
578  case 0:
579  org[0] -= 24;
580  org[1] -= 24;
581  break;
582  case 1:
583  org[0] += 24;
584  org[1] += 24;
585  break;
586  case 2:
587  org[0] += 24;
588  org[1] -= 24;
589  break;
590  case 3:
591  org[0] -= 24;
592  org[1] += 24;
593  break;
594  case 4:
595  org[0] -= 48;
596  org[1] -= 48;
597  break;
598  case 5:
599  org[0] += 48;
600  org[1] += 48;
601  break;
602  case 6:
603  org[0] -= 48;
604  org[1] += 48;
605  break;
606  case 7:
607  org[0] += 48;
608  org[1] -= 48;
609  break;
610  case 8:
611  self->s.sound = 0;
612  for (n = 0; n < 4; n++)
613  ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", 500, GIB_ORGANIC);
614  for (n = 0; n < 8; n++)
615  ThrowGib(self, "models/objects/gibs/sm_metal/tris.md2", 500, GIB_METALLIC);
616  ThrowGib(self, "models/objects/gibs/chest/tris.md2", 500, GIB_ORGANIC);
617  ThrowHead(self, "models/objects/gibs/gear/tris.md2", 500, GIB_METALLIC);
618  self->deadflag = DEAD_DEAD;
619  return;
620  }
621 
622  gi.WriteByte(svc_temp_entity);
623  gi.WriteByte(TE_EXPLOSION1);
624  gi.WritePosition(org);
625  gi.multicast(self->s.origin, MULTICAST_PVS);
626 
627  self->nextthink = level.time + 0.1;
628 }

◆ infront()

qboolean infront ( edict_t *  self,
edict_t *  other 
)

Definition at line 293 of file g_ai.c.

294 {
295  vec3_t vec;
296  float dot;
297  vec3_t forward;
298 
299  AngleVectors(self->s.angles, forward, NULL, NULL);
300  VectorSubtract(other->s.origin, self->s.origin, vec);
301  VectorNormalize(vec);
302  dot = DotProduct(vec, forward);
303 
304  if (dot > 0.3)
305  return qtrue;
306  return qfalse;
307 }

Referenced by boss2_reattack_mg(), check_dodge(), FindTarget(), and GL_CullLocalBox().

◆ SP_monster_boss2()

void SP_monster_boss2 ( edict_t *  self)

Definition at line 599 of file m_boss2.c.

600 {
601  if (deathmatch->value) {
602  G_FreeEdict(self);
603  return;
604  }
605 
606  sound_pain1 = gi.soundindex("bosshovr/bhvpain1.wav");
607  sound_pain2 = gi.soundindex("bosshovr/bhvpain2.wav");
608  sound_pain3 = gi.soundindex("bosshovr/bhvpain3.wav");
609  sound_death = gi.soundindex("bosshovr/bhvdeth1.wav");
610  sound_search1 = gi.soundindex("bosshovr/bhvunqv1.wav");
611 
612  self->s.sound = gi.soundindex("bosshovr/bhvengn1.wav");
613 
614  self->movetype = MOVETYPE_STEP;
615  self->solid = SOLID_BBOX;
616  self->s.modelindex = gi.modelindex("models/monsters/boss2/tris.md2");
617  VectorSet(self->mins, -56, -56, 0);
618  VectorSet(self->maxs, 56, 56, 80);
619 
620  self->health = 2000;
621  self->gib_health = -200;
622  self->mass = 1000;
623 
624  self->flags |= FL_IMMUNE_LASER;
625 
626  self->pain = boss2_pain;
627  self->die = boss2_die;
628 
629  self->monsterinfo.stand = boss2_stand;
630  self->monsterinfo.walk = boss2_walk;
631  self->monsterinfo.run = boss2_run;
632  self->monsterinfo.attack = boss2_attack;
633  self->monsterinfo.search = boss2_search;
634  self->monsterinfo.checkattack = Boss2_CheckAttack;
635  gi.linkentity(self);
636 
637  self->monsterinfo.currentmove = &boss2_move_stand;
638  self->monsterinfo.scale = MODEL_SCALE;
639 
640  flymonster_start(self);
641 }

Variable Documentation

◆ boss2_frames_attack_mg

mframe_t boss2_frames_attack_mg[]
Initial value:

Definition at line 275 of file m_boss2.c.

◆ boss2_frames_attack_post_mg

mframe_t boss2_frames_attack_post_mg[]
Initial value:
= {
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL }
}

Definition at line 285 of file m_boss2.c.

◆ boss2_frames_attack_pre_mg

mframe_t boss2_frames_attack_pre_mg[]
Initial value:
= {
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
}

Definition at line 260 of file m_boss2.c.

◆ boss2_frames_attack_rocket

mframe_t boss2_frames_attack_rocket[]
Initial value:
= {
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_move, -20, Boss2Rocket },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL },
{ ai_charge, 1, NULL }
}

Definition at line 293 of file m_boss2.c.

◆ boss2_frames_death

mframe_t boss2_frames_death[]

Definition at line 348 of file m_boss2.c.

◆ boss2_frames_fidget

mframe_t boss2_frames_fidget[]

Definition at line 177 of file m_boss2.c.

◆ boss2_frames_pain_heavy

mframe_t boss2_frames_pain_heavy[]
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 },
{ 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 318 of file m_boss2.c.

◆ boss2_frames_pain_light

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

Definition at line 340 of file m_boss2.c.

◆ boss2_frames_run

mframe_t boss2_frames_run[]
Initial value:
= {
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL },
{ ai_run, 8, NULL }
}

Definition at line 236 of file m_boss2.c.

◆ boss2_frames_stand

mframe_t boss2_frames_stand[]
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 },
{ 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 152 of file m_boss2.c.

◆ boss2_frames_walk

mframe_t boss2_frames_walk[]
Initial value:
= {
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL },
{ ai_walk, 8, NULL }
}

Definition at line 211 of file m_boss2.c.

◆ boss2_move_attack_mg

mmove_t boss2_move_attack_mg = {FRAME_attack10, FRAME_attack15, boss2_frames_attack_mg, NULL}

Definition at line 283 of file m_boss2.c.

Referenced by boss2_attack_mg(), and boss2_reattack_mg().

◆ boss2_move_attack_post_mg

Definition at line 291 of file m_boss2.c.

Referenced by boss2_reattack_mg().

◆ boss2_move_attack_pre_mg

mmove_t boss2_move_attack_pre_mg = {FRAME_attack1, FRAME_attack9, boss2_frames_attack_pre_mg, NULL}

Definition at line 271 of file m_boss2.c.

Referenced by boss2_attack().

◆ boss2_move_attack_rocket

Definition at line 316 of file m_boss2.c.

Referenced by boss2_attack().

◆ boss2_move_death

Definition at line 399 of file m_boss2.c.

Referenced by boss2_die().

◆ boss2_move_fidget

mmove_t boss2_move_fidget = {FRAME_stand1, FRAME_stand30, boss2_frames_fidget, NULL}

Definition at line 209 of file m_boss2.c.

◆ boss2_move_pain_heavy

Definition at line 338 of file m_boss2.c.

Referenced by boss2_pain().

◆ boss2_move_pain_light

Definition at line 346 of file m_boss2.c.

Referenced by boss2_pain().

◆ boss2_move_run

mmove_t boss2_move_run = {FRAME_walk1, FRAME_walk20, boss2_frames_run, NULL}

Definition at line 258 of file m_boss2.c.

Referenced by boss2_run().

◆ boss2_move_stand

mmove_t boss2_move_stand = {FRAME_stand30, FRAME_stand50, boss2_frames_stand, NULL}

Definition at line 175 of file m_boss2.c.

Referenced by boss2_run(), boss2_stand(), and SP_monster_boss2().

◆ boss2_move_walk

mmove_t boss2_move_walk = {FRAME_walk1, FRAME_walk20, boss2_frames_walk, NULL}

Definition at line 233 of file m_boss2.c.

Referenced by boss2_walk().

◆ sound_death

int sound_death
static

Definition at line 36 of file m_boss2.c.

Referenced by boss2_die(), and SP_monster_boss2().

◆ sound_pain1

int sound_pain1
static

Definition at line 33 of file m_boss2.c.

Referenced by boss2_pain(), and SP_monster_boss2().

◆ sound_pain2

int sound_pain2
static

Definition at line 34 of file m_boss2.c.

Referenced by boss2_pain(), and SP_monster_boss2().

◆ sound_pain3

int sound_pain3
static

Definition at line 35 of file m_boss2.c.

Referenced by boss2_pain(), and SP_monster_boss2().

◆ sound_search1

int sound_search1
static

Definition at line 37 of file m_boss2.c.

Referenced by boss2_search(), and SP_monster_boss2().

gi
game_import_t gi
Definition: g_main.c:23
RANGE_NEAR
#define RANGE_NEAR
Definition: g_local.h:117
deathmatch
cvar_t * deathmatch
Definition: g_main.c:33
G_ProjectSource
void G_ProjectSource(const vec3_t point, const vec3_t distance, const vec3_t forward, const vec3_t right, vec3_t result)
Definition: g_utils.c:23
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:112
DEFAULT_BULLET_HSPREAD
#define DEFAULT_BULLET_HSPREAD
Definition: g_local.h:654
boss2_firebullet_left
void boss2_firebullet_left(edict_t *self)
Definition: m_boss2.c:111
ThrowGib
void ThrowGib(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:130
boss2_move_attack_pre_mg
mmove_t boss2_move_attack_pre_mg
Definition: m_boss2.c:271
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:175
boss2_reattack_mg
void boss2_reattack_mg(edict_t *self)
Definition: m_boss2.c:442
boss2_move_attack_mg
mmove_t boss2_move_attack_mg
Definition: m_boss2.c:283
boss2_firebullet_right
void boss2_firebullet_right(edict_t *self)
Definition: m_boss2.c:95
boss2_pain
void boss2_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_boss2.c:454
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:126
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:504
DAMAGE_YES
@ DAMAGE_YES
Definition: g_local.h:88
infront
qboolean infront(edict_t *self, edict_t *other)
Definition: g_ai.c:293
vectoyaw
float vectoyaw(vec3_t vec)
Definition: g_utils.c:310
sound_death
static int sound_death
Definition: m_boss2.c:36
other
@ other
Definition: ogg.c:63
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:192
boss2_move_attack_post_mg
mmove_t boss2_move_attack_post_mg
Definition: m_boss2.c:291
sound_pain2
static int sound_pain2
Definition: m_boss2.c:34
boss2_stand
void boss2_stand(edict_t *self)
Definition: m_boss2.c:401
DEFAULT_BULLET_VSPREAD
#define DEFAULT_BULLET_VSPREAD
Definition: g_local.h:655
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:421
GIB_METALLIC
#define GIB_METALLIC
Definition: g_local.h:123
AS_SLIDING
#define AS_SLIDING
Definition: g_local.h:144
forward
static vec3_t forward
Definition: p_view.c:27
svc_temp_entity
#define svc_temp_entity
Definition: g_local.h:38
boss2_walk
void boss2_walk(edict_t *self)
Definition: m_boss2.c:414
AS_MISSILE
#define AS_MISSILE
Definition: g_local.h:146
boss2_attack_mg
void boss2_attack_mg(edict_t *self)
Definition: m_boss2.c:437
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:148
random
#define random()
Definition: g_local.h:504
boss2_move_death
mmove_t boss2_move_death
Definition: m_boss2.c:399
AngleVectors
void AngleVectors(vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition: shared.c:23
DAMAGE_NO
@ DAMAGE_NO
Definition: g_local.h:87
boss2_move_walk
mmove_t boss2_move_walk
Definition: m_boss2.c:233
boss2_run
void boss2_run(edict_t *self)
Definition: m_boss2.c:406
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
monster_fire_rocket
void monster_fire_rocket(edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype)
Definition: g_monster.c:69
boss2_move_attack_rocket
mmove_t boss2_move_attack_rocket
Definition: m_boss2.c:316
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
BossExplode
void BossExplode(edict_t *self)
Definition: m_supertank.c:569
RANGE_MELEE
#define RANGE_MELEE
Definition: g_local.h:116
FL_IMMUNE_LASER
#define FL_IMMUNE_LASER
Definition: g_local.h:61
Boss2Rocket
void Boss2Rocket(edict_t *self)
Definition: m_boss2.c:53
boss2_move_run
mmove_t boss2_move_run
Definition: m_boss2.c:258
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
enemy_range
int enemy_range
Definition: g_ai.c:28
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:122
level
level_locals_t level
Definition: g_main.c:22
RANGE_MID
#define RANGE_MID
Definition: g_local.h:118
Boss2_CheckAttack
qboolean Boss2_CheckAttack(edict_t *self)
Definition: m_boss2.c:518
sound_search1
static int sound_search1
Definition: m_boss2.c:37
FL_FLY
#define FL_FLY
Definition: g_local.h:59
monster_flash_offset
const vec3_t monster_flash_offset[256]
Definition: m_flash.c:25
boss2_attack
void boss2_attack(edict_t *self)
Definition: m_boss2.c:419
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:175
boss2_move_pain_heavy
mmove_t boss2_move_pain_heavy
Definition: m_boss2.c:338
boss2_move_pain_light
mmove_t boss2_move_pain_light
Definition: m_boss2.c:346
boss2_move_stand
mmove_t boss2_move_stand
Definition: m_boss2.c:175
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:194
range
int range(edict_t *self, edict_t *other)
Definition: g_ai.c:245
boss2_search
void boss2_search(edict_t *self)
Definition: m_boss2.c:39
boss2_die
void boss2_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_boss2.c:486
sound_pain3
static int sound_pain3
Definition: m_boss2.c:35
AS_MELEE
#define AS_MELEE
Definition: g_local.h:145
RANGE_FAR
#define RANGE_FAR
Definition: g_local.h:119
VectorNormalize
vec_t VectorNormalize(vec3_t v)
Definition: shared.c:55
enemy_yaw
float enemy_yaw
Definition: g_ai.c:29
Boss2MachineGun
void Boss2MachineGun(edict_t *self)
Definition: m_boss2.c:128
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:100
sound_pain1
static int sound_pain1
Definition: m_boss2.c:33
AS_STRAIGHT
#define AS_STRAIGHT
Definition: g_local.h:143
flymonster_start
void flymonster_start(edict_t *self)
Definition: g_monster.c:653