vkQuake2 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 432 of file m_boss2.c.

433 {
434  vec3_t vec;
435  float range;
436 
437  VectorSubtract (self->enemy->s.origin, self->s.origin, vec);
438  range = VectorLength (vec);
439 
440  if (range <= 125)
441  {
442  self->monsterinfo.currentmove = &boss2_move_attack_pre_mg;
443  }
444  else
445  {
446  if (random() <= 0.6)
447  self->monsterinfo.currentmove = &boss2_move_attack_pre_mg;
448  else
449  self->monsterinfo.currentmove = &boss2_move_attack_rocket;
450  }
451 }

Referenced by SP_monster_boss2().

◆ boss2_attack_mg()

void boss2_attack_mg ( edict_t self)

Definition at line 453 of file m_boss2.c.

454 {
455  self->monsterinfo.currentmove = &boss2_move_attack_mg;
456 }

◆ Boss2_CheckAttack()

qboolean Boss2_CheckAttack ( edict_t self)

Definition at line 540 of file m_boss2.c.

541 {
542  vec3_t spot1, spot2;
543  vec3_t temp;
544  float chance;
545  trace_t tr;
547  int enemy_range;
548  float enemy_yaw;
549 
550  if (self->enemy->health > 0)
551  {
552  // see if any entities are in the way of the shot
553  VectorCopy (self->s.origin, spot1);
554  spot1[2] += self->viewheight;
555  VectorCopy (self->enemy->s.origin, spot2);
556  spot2[2] += self->enemy->viewheight;
557 
559 
560  // do we have a clear shot?
561  if (tr.ent != self->enemy)
562  return false;
563  }
564 
565  enemy_infront = infront(self, self->enemy);
566  enemy_range = range(self, self->enemy);
567  VectorSubtract (self->enemy->s.origin, self->s.origin, temp);
568  enemy_yaw = vectoyaw(temp);
569 
570  self->ideal_yaw = enemy_yaw;
571 
572 
573  // melee attack
574  if (enemy_range == RANGE_MELEE)
575  {
576  if (self->monsterinfo.melee)
577  self->monsterinfo.attack_state = AS_MELEE;
578  else
579  self->monsterinfo.attack_state = AS_MISSILE;
580  return true;
581  }
582 
583 // missile attack
584  if (!self->monsterinfo.attack)
585  return false;
586 
587  if (level.time < self->monsterinfo.attack_finished)
588  return false;
589 
590  if (enemy_range == RANGE_FAR)
591  return false;
592 
593  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
594  {
595  chance = 0.4;
596  }
597  else if (enemy_range == RANGE_MELEE)
598  {
599  chance = 0.8;
600  }
601  else if (enemy_range == RANGE_NEAR)
602  {
603  chance = 0.8;
604  }
605  else if (enemy_range == RANGE_MID)
606  {
607  chance = 0.8;
608  }
609  else
610  {
611  return false;
612  }
613 
614  if (random () < chance)
615  {
616  self->monsterinfo.attack_state = AS_MISSILE;
617  self->monsterinfo.attack_finished = level.time + 2*random();
618  return true;
619  }
620 
621  if (self->flags & FL_FLY)
622  {
623  if (random() < 0.3)
624  self->monsterinfo.attack_state = AS_SLIDING;
625  else
626  self->monsterinfo.attack_state = AS_STRAIGHT;
627  }
628 
629  return false;
630 }

Referenced by SP_monster_boss2().

◆ boss2_dead()

void boss2_dead ( edict_t self)

Definition at line 497 of file m_boss2.c.

498 {
499  VectorSet (self->mins, -56, -56, 0);
500  VectorSet (self->maxs, 56, 56, 80);
501  self->movetype = MOVETYPE_TOSS;
502  self->svflags |= SVF_DEADMONSTER;
503  self->nextthink = 0;
504  gi.linkentity (self);
505 }

◆ boss2_die()

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

Definition at line 507 of file m_boss2.c.

508 {
509  gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NONE, 0);
510  self->deadflag = DEAD_DEAD;
511  self->takedamage = DAMAGE_NO;
512  self->count = 0;
513  self->monsterinfo.currentmove = &boss2_move_death;
514 #if 0
515  int n;
516 
517  self->s.sound = 0;
518  // check for gib
519  if (self->health <= self->gib_health)
520  {
521  gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
522  for (n= 0; n < 2; n++)
523  ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
524  for (n= 0; n < 4; n++)
525  ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
526  ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
527  self->deadflag = DEAD_DEAD;
528  return;
529  }
530 
531  if (self->deadflag == DEAD_DEAD)
532  return;
533 
534  self->deadflag = DEAD_DEAD;
535  self->takedamage = DAMAGE_YES;
536  self->monsterinfo.currentmove = &boss2_move_death;
537 #endif
538 }

Referenced by SP_monster_boss2().

◆ boss2_firebullet_left()

void boss2_firebullet_left ( edict_t self)

Definition at line 113 of file m_boss2.c.

114 {
115  vec3_t forward, right, target;
116  vec3_t start;
117 
118  AngleVectors (self->s.angles, forward, right, NULL);
120 
121  VectorMA (self->enemy->s.origin, -0.2, self->enemy->velocity, target);
122 
123  target[2] += self->enemy->viewheight;
124  VectorSubtract (target, start, forward);
126 
128 }

Referenced by Boss2MachineGun().

◆ boss2_firebullet_right()

void boss2_firebullet_right ( edict_t self)

Definition at line 97 of file m_boss2.c.

98 {
99  vec3_t forward, right, target;
100  vec3_t start;
101 
102  AngleVectors (self->s.angles, forward, right, NULL);
104 
105  VectorMA (self->enemy->s.origin, -0.2, self->enemy->velocity, target);
106  target[2] += self->enemy->viewheight;
107  VectorSubtract (target, start, forward);
109 
111 }

Referenced by Boss2MachineGun().

◆ boss2_pain()

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

Definition at line 470 of file m_boss2.c.

471 {
472  if (self->health < (self->max_health / 2))
473  self->s.skinnum = 1;
474 
475  if (level.time < self->pain_debounce_time)
476  return;
477 
478  self->pain_debounce_time = level.time + 3;
479 // American wanted these at no attenuation
480  if (damage < 10)
481  {
482  gi.sound (self, CHAN_VOICE, sound_pain3, 1, ATTN_NONE, 0);
483  self->monsterinfo.currentmove = &boss2_move_pain_light;
484  }
485  else if (damage < 30)
486  {
487  gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NONE, 0);
488  self->monsterinfo.currentmove = &boss2_move_pain_light;
489  }
490  else
491  {
492  gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NONE, 0);
493  self->monsterinfo.currentmove = &boss2_move_pain_heavy;
494  }
495 }

Referenced by SP_monster_boss2().

◆ boss2_reattack_mg()

void boss2_reattack_mg ( edict_t self)

Definition at line 458 of file m_boss2.c.

459 {
460  if ( infront(self, self->enemy) )
461  if (random() <= 0.7)
462  self->monsterinfo.currentmove = &boss2_move_attack_mg;
463  else
464  self->monsterinfo.currentmove = &boss2_move_attack_post_mg;
465  else
466  self->monsterinfo.currentmove = &boss2_move_attack_post_mg;
467 }

◆ boss2_run()

void boss2_run ( edict_t self)

Definition at line 419 of file m_boss2.c.

420 {
421  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
422  self->monsterinfo.currentmove = &boss2_move_stand;
423  else
424  self->monsterinfo.currentmove = &boss2_move_run;
425 }

Referenced by SP_monster_boss2().

◆ boss2_search()

void boss2_search ( edict_t self)

Definition at line 41 of file m_boss2.c.

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

Referenced by SP_monster_boss2().

◆ boss2_stand()

void boss2_stand ( edict_t self)

Definition at line 414 of file m_boss2.c.

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

Referenced by SP_monster_boss2().

◆ boss2_walk()

void boss2_walk ( edict_t self)

Definition at line 427 of file m_boss2.c.

428 {
429  self->monsterinfo.currentmove = &boss2_move_walk;
430 }

Referenced by SP_monster_boss2().

◆ Boss2MachineGun()

void Boss2MachineGun ( edict_t self)

Definition at line 130 of file m_boss2.c.

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

◆ Boss2Rocket()

void Boss2Rocket ( edict_t self)

Definition at line 55 of file m_boss2.c.

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

◆ BossExplode()

void BossExplode ( edict_t self)

Definition at line 594 of file m_supertank.c.

595 {
596  vec3_t org;
597  int n;
598 
599  self->think = BossExplode;
600  VectorCopy (self->s.origin, org);
601  org[2] += 24 + (rand()&15);
602  switch (self->count++)
603  {
604  case 0:
605  org[0] -= 24;
606  org[1] -= 24;
607  break;
608  case 1:
609  org[0] += 24;
610  org[1] += 24;
611  break;
612  case 2:
613  org[0] += 24;
614  org[1] -= 24;
615  break;
616  case 3:
617  org[0] -= 24;
618  org[1] += 24;
619  break;
620  case 4:
621  org[0] -= 48;
622  org[1] -= 48;
623  break;
624  case 5:
625  org[0] += 48;
626  org[1] += 48;
627  break;
628  case 6:
629  org[0] -= 48;
630  org[1] += 48;
631  break;
632  case 7:
633  org[0] += 48;
634  org[1] -= 48;
635  break;
636  case 8:
637  self->s.sound = 0;
638  for (n= 0; n < 4; n++)
639  ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", 500, GIB_ORGANIC);
640  for (n= 0; n < 8; n++)
641  ThrowGib (self, "models/objects/gibs/sm_metal/tris.md2", 500, GIB_METALLIC);
642  ThrowGib (self, "models/objects/gibs/chest/tris.md2", 500, GIB_ORGANIC);
643  ThrowHead (self, "models/objects/gibs/gear/tris.md2", 500, GIB_METALLIC);
644  self->deadflag = DEAD_DEAD;
645  return;
646  }
647 
650  gi.WritePosition (org);
651  gi.multicast (self->s.origin, MULTICAST_PVS);
652 
653  self->nextthink = level.time + 0.1;
654 }

◆ infront()

qboolean infront ( edict_t self,
edict_t other 
)

Definition at line 312 of file g_ai.c.

313 {
314  vec3_t vec;
315  float dot;
316  vec3_t forward;
317 
318  AngleVectors (self->s.angles, forward, NULL, NULL);
319  VectorSubtract (other->s.origin, self->s.origin, vec);
320  VectorNormalize (vec);
321  dot = DotProduct (vec, forward);
322 
323  if (dot > 0.3)
324  return true;
325  return false;
326 }

Referenced by ai_checkattack(), Boss2_CheckAttack(), boss2_reattack_mg(), check_dodge(), FindTarget(), Jorg_CheckAttack(), and Makron_CheckAttack().

◆ SP_monster_boss2()

void SP_monster_boss2 ( edict_t self)

Definition at line 636 of file m_boss2.c.

637 {
638  if (deathmatch->value)
639  {
640  G_FreeEdict (self);
641  return;
642  }
643 
644  sound_pain1 = gi.soundindex ("bosshovr/bhvpain1.wav");
645  sound_pain2 = gi.soundindex ("bosshovr/bhvpain2.wav");
646  sound_pain3 = gi.soundindex ("bosshovr/bhvpain3.wav");
647  sound_death = gi.soundindex ("bosshovr/bhvdeth1.wav");
648  sound_search1 = gi.soundindex ("bosshovr/bhvunqv1.wav");
649 
650  self->s.sound = gi.soundindex ("bosshovr/bhvengn1.wav");
651 
652  self->movetype = MOVETYPE_STEP;
653  self->solid = SOLID_BBOX;
654  self->s.modelindex = gi.modelindex ("models/monsters/boss2/tris.md2");
655  VectorSet (self->mins, -56, -56, 0);
656  VectorSet (self->maxs, 56, 56, 80);
657 
658  self->health = 2000;
659  self->gib_health = -200;
660  self->mass = 1000;
661 
662  self->flags |= FL_IMMUNE_LASER;
663 
664  self->pain = boss2_pain;
665  self->die = boss2_die;
666 
667  self->monsterinfo.stand = boss2_stand;
668  self->monsterinfo.walk = boss2_walk;
669  self->monsterinfo.run = boss2_run;
670  self->monsterinfo.attack = boss2_attack;
671  self->monsterinfo.search = boss2_search;
672  self->monsterinfo.checkattack = Boss2_CheckAttack;
673  gi.linkentity (self);
674 
675  self->monsterinfo.currentmove = &boss2_move_stand;
676  self->monsterinfo.scale = MODEL_SCALE;
677 
678  flymonster_start (self);
679 }

Variable Documentation

◆ boss2_frames_attack_mg

mframe_t boss2_frames_attack_mg[]

◆ boss2_frames_attack_post_mg

mframe_t boss2_frames_attack_post_mg[]
Initial value:

Definition at line 293 of file m_boss2.c.

◆ boss2_frames_attack_pre_mg

mframe_t boss2_frames_attack_pre_mg[]
Initial value:

Definition at line 266 of file m_boss2.c.

◆ boss2_frames_attack_rocket

mframe_t boss2_frames_attack_rocket[]
Initial value:

Definition at line 302 of file m_boss2.c.

◆ boss2_frames_death

mframe_t boss2_frames_death[]

Definition at line 360 of file m_boss2.c.

◆ boss2_frames_fidget

mframe_t boss2_frames_fidget[]

Definition at line 180 of file m_boss2.c.

◆ boss2_frames_pain_heavy

mframe_t boss2_frames_pain_heavy[]
Initial value:

Definition at line 328 of file m_boss2.c.

◆ boss2_frames_pain_light

mframe_t boss2_frames_pain_light[]
Initial value:
=
{
}

Definition at line 351 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,
}

Definition at line 241 of file m_boss2.c.

◆ boss2_frames_stand

mframe_t boss2_frames_stand[]
Initial value:

Definition at line 154 of file m_boss2.c.

◆ boss2_frames_walk

mframe_t boss2_frames_walk[]
Initial value:

Definition at line 215 of file m_boss2.c.

◆ boss2_move_attack_mg

Definition at line 291 of file m_boss2.c.

Referenced by boss2_attack_mg(), and boss2_reattack_mg().

◆ boss2_move_attack_post_mg

Definition at line 300 of file m_boss2.c.

Referenced by boss2_reattack_mg().

◆ boss2_move_attack_pre_mg

Definition at line 278 of file m_boss2.c.

Referenced by boss2_attack().

◆ boss2_move_attack_rocket

Definition at line 326 of file m_boss2.c.

Referenced by boss2_attack().

◆ boss2_move_death

Definition at line 412 of file m_boss2.c.

Referenced by boss2_die().

◆ boss2_move_fidget

Definition at line 213 of file m_boss2.c.

◆ boss2_move_pain_heavy

Definition at line 349 of file m_boss2.c.

Referenced by boss2_pain().

◆ boss2_move_pain_light

Definition at line 358 of file m_boss2.c.

Referenced by boss2_pain().

◆ boss2_move_run

Definition at line 264 of file m_boss2.c.

Referenced by boss2_run().

◆ boss2_move_stand

Definition at line 178 of file m_boss2.c.

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

◆ boss2_move_walk

Definition at line 238 of file m_boss2.c.

Referenced by boss2_walk().

◆ sound_death

int sound_death
static

Definition at line 38 of file m_boss2.c.

Referenced by boss2_die(), and SP_monster_boss2().

◆ sound_pain1

int sound_pain1
static

Definition at line 35 of file m_boss2.c.

Referenced by boss2_pain(), and SP_monster_boss2().

◆ sound_pain2

int sound_pain2
static

Definition at line 36 of file m_boss2.c.

Referenced by boss2_pain(), and SP_monster_boss2().

◆ sound_pain3

int sound_pain3
static

Definition at line 37 of file m_boss2.c.

Referenced by boss2_pain(), and SP_monster_boss2().

◆ sound_search1

int sound_search1
static

Definition at line 39 of file m_boss2.c.

Referenced by boss2_search(), and SP_monster_boss2().

gi
game_import_t gi
Definition: g_main.c:25
G_ProjectSource
void G_ProjectSource(vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result)
Definition: g_utils.c:25
edict_s::s
entity_state_t s
Definition: g_local.h:970
RANGE_NEAR
#define RANGE_NEAR
Definition: g_local.h:120
deathmatch
cvar_t * deathmatch
Definition: g_main.c:35
CONTENTS_MONSTER
#define CONTENTS_MONSTER
Definition: qfiles.h:359
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:115
MZ2_BOSS2_ROCKET_1
#define MZ2_BOSS2_ROCKET_1
Definition: q_shared.h:758
game_import_t::trace
trace_t(* trace)(vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, edict_t *passent, int contentmask)
Definition: game.h:128
DEFAULT_BULLET_HSPREAD
#define DEFAULT_BULLET_HSPREAD
Definition: g_local.h:670
boss2_firebullet_left
void boss2_firebullet_left(edict_t *self)
Definition: m_boss2.c:113
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
VectorSubtract
#define VectorSubtract(a, b, c)
Definition: q_shared.h:163
boss2_move_attack_pre_mg
mmove_t boss2_move_attack_pre_mg
Definition: m_boss2.c:278
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:194
TE_EXPLOSION1
@ TE_EXPLOSION1
Definition: q_shared.h:916
game_import_t::WritePosition
void(* WritePosition)(vec3_t pos)
Definition: game.h:152
game_import_t::multicast
void(* multicast)(vec3_t origin, multicast_t to)
Definition: game.h:144
edict_s::count
int count
Definition: g_local.h:1073
SOLID_BBOX
@ SOLID_BBOX
Definition: game.h:37
MZ2_BOSS2_MACHINEGUN_R1
#define MZ2_BOSS2_MACHINEGUN_R1
Definition: q_shared.h:817
boss2_reattack_mg
void boss2_reattack_mg(edict_t *self)
Definition: m_boss2.c:458
monsterinfo_t::attack
void(* attack)(edict_t *self)
Definition: g_local.h:431
boss2_move_attack_mg
mmove_t boss2_move_attack_mg
Definition: m_boss2.c:291
MZ2_BOSS2_ROCKET_3
#define MZ2_BOSS2_ROCKET_3
Definition: q_shared.h:760
boss2_firebullet_right
void boss2_firebullet_right(edict_t *self)
Definition: m_boss2.c:97
entity_state_s::origin
vec3_t origin
Definition: q_shared.h:1149
boss2_pain
void boss2_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_boss2.c:470
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:129
qboolean
qboolean
Definition: q_shared.h:63
trace_t
Definition: q_shared.h:453
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:506
edict_s::max_health
int max_health
Definition: g_local.h:1058
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
infront
qboolean infront(edict_t *self, edict_t *other)
Definition: g_ai.c:312
vectoyaw
float vectoyaw(vec3_t vec)
Definition: g_utils.c:333
CONTENTS_SOLID
#define CONTENTS_SOLID
Definition: qfiles.h:333
edict_s::mins
vec3_t mins
Definition: g_local.h:990
range
GLsizei range
Definition: qgl_win.c:121
sound_death
static int sound_death
Definition: m_boss2.c:38
ATTN_NORM
#define ATTN_NORM
Definition: q_shared.h:995
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:196
boss2_move_attack_post_mg
mmove_t boss2_move_attack_post_mg
Definition: m_boss2.c:300
SVF_DEADMONSTER
#define SVF_DEADMONSTER
Definition: game.h:28
ATTN_NONE
#define ATTN_NONE
Definition: q_shared.h:994
AngleVectors
void AngleVectors(vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition: q_shared.c:93
sound_pain2
static int sound_pain2
Definition: m_boss2.c:36
monster_flash_offset
vec3_t monster_flash_offset[]
Definition: m_flash.c:27
CHAN_VOICE
#define CHAN_VOICE
Definition: q_shared.h:985
boss2_stand
void boss2_stand(edict_t *self)
Definition: m_boss2.c:414
DEFAULT_BULLET_VSPREAD
#define DEFAULT_BULLET_VSPREAD
Definition: g_local.h:671
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:452
GIB_METALLIC
#define GIB_METALLIC
Definition: g_local.h:126
AS_SLIDING
#define AS_SLIDING
Definition: g_local.h:147
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
boss2_walk
void boss2_walk(edict_t *self)
Definition: m_boss2.c:427
AS_MISSILE
#define AS_MISSILE
Definition: g_local.h:149
game_import_t::modelindex
int(* modelindex)(char *name)
Definition: game.h:121
edict_s::deadflag
int deadflag
Definition: g_local.h:1060
MZ2_BOSS2_MACHINEGUN_L1
#define MZ2_BOSS2_MACHINEGUN_L1
Definition: q_shared.h:753
boss2_attack_mg
void boss2_attack_mg(edict_t *self)
Definition: m_boss2.c:453
DotProduct
#define DotProduct(x, y)
Definition: q_shared.h:162
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
boss2_move_death
mmove_t boss2_move_death
Definition: m_boss2.c:412
DAMAGE_NO
@ DAMAGE_NO
Definition: g_local.h:88
VectorNormalize
vec_t VectorNormalize(vec3_t v)
Definition: q_shared.c:681
boss2_move_walk
mmove_t boss2_move_walk
Definition: m_boss2.c:238
NULL
#define NULL
Definition: q_shared.h:67
MZ2_BOSS2_ROCKET_2
#define MZ2_BOSS2_ROCKET_2
Definition: q_shared.h:759
monsterinfo_t::aiflags
int aiflags
Definition: g_local.h:421
boss2_run
void boss2_run(edict_t *self)
Definition: m_boss2.c:419
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:31
enemy_infront
qboolean enemy_infront
Definition: g_ai.c:30
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:71
edict_s::velocity
vec3_t velocity
Definition: g_local.h:1030
boss2_move_attack_rocket
mmove_t boss2_move_attack_rocket
Definition: m_boss2.c:326
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:92
CONTENTS_SLIME
#define CONTENTS_SLIME
Definition: qfiles.h:337
svc_temp_entity
@ svc_temp_entity
Definition: qcommon.h:227
BossExplode
void BossExplode(edict_t *self)
Definition: m_supertank.c:594
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
FL_IMMUNE_LASER
#define FL_IMMUNE_LASER
Definition: g_local.h:61
Boss2Rocket
void Boss2Rocket(edict_t *self)
Definition: m_boss2.c:55
boss2_move_run
mmove_t boss2_move_run
Definition: m_boss2.c:264
game_import_t::WriteByte
void(* WriteByte)(int c)
Definition: game.h:147
level
GLint level
Definition: qgl_win.c:116
ai_run
void ai_run(edict_t *self, float dist)
Definition: g_ai.c:914
edict_s::flags
int flags
Definition: g_local.h:1002
enemy_range
int enemy_range
Definition: g_ai.c:31
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
CONTENTS_LAVA
#define CONTENTS_LAVA
Definition: qfiles.h:336
edict_s::maxs
vec3_t maxs
Definition: g_local.h:990
RANGE_MID
#define RANGE_MID
Definition: g_local.h:121
Boss2_CheckAttack
qboolean Boss2_CheckAttack(edict_t *self)
Definition: m_boss2.c:540
sound_search1
static int sound_search1
Definition: m_boss2.c:39
trace_t::ent
struct edict_s * ent
Definition: q_shared.h:462
FL_FLY
#define FL_FLY
Definition: g_local.h:59
boss2_attack
void boss2_attack(edict_t *self)
Definition: m_boss2.c:432
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:183
boss2_move_pain_heavy
mmove_t boss2_move_pain_heavy
Definition: m_boss2.c:349
monsterinfo_t::attack_finished
float attack_finished
Definition: g_local.h:437
boss2_move_pain_light
mmove_t boss2_move_pain_light
Definition: m_boss2.c:358
boss2_move_stand
mmove_t boss2_move_stand
Definition: m_boss2.c:178
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:198
VectorSet
#define VectorSet(v, x, y, z)
Definition: q_shared.h:168
right
GLdouble right
Definition: qgl_win.c:159
monsterinfo_t::melee
void(* melee)(edict_t *self)
Definition: g_local.h:432
boss2_search
void boss2_search(edict_t *self)
Definition: m_boss2.c:41
boss2_die
void boss2_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_boss2.c:507
edict_s::enemy
edict_t * enemy
Definition: g_local.h:1076
game_import_t::linkentity
void(* linkentity)(edict_t *ent)
Definition: game.h:138
sound_pain3
static int sound_pain3
Definition: m_boss2.c:37
entity_state_s::angles
vec3_t angles
Definition: q_shared.h:1150
AS_MELEE
#define AS_MELEE
Definition: g_local.h:148
RANGE_FAR
#define RANGE_FAR
Definition: g_local.h:122
MULTICAST_PVS
@ MULTICAST_PVS
Definition: q_shared.h:118
enemy_yaw
float enemy_yaw
Definition: g_ai.c:32
vec3_t
vec_t vec3_t[3]
Definition: q_shared.h:134
Boss2MachineGun
void Boss2MachineGun(edict_t *self)
Definition: m_boss2.c:130
MZ2_BOSS2_ROCKET_4
#define MZ2_BOSS2_ROCKET_4
Definition: q_shared.h:761
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:106
sound_pain1
static int sound_pain1
Definition: m_boss2.c:35
AS_STRAIGHT
#define AS_STRAIGHT
Definition: g_local.h:146
flymonster_start
void flymonster_start(edict_t *self)
Definition: g_monster.c:715
edict_s::health
int health
Definition: g_local.h:1057