icculus quake2 doxygen  1.0 dev
m_supertank.c File Reference
#include "g_local.h"
#include "m_supertank.h"

Go to the source code of this file.

Functions

qboolean visible (edict_t *self, edict_t *other)
 
void BossExplode (edict_t *self)
 
void TreadSound (edict_t *self)
 
void supertank_search (edict_t *self)
 
void supertank_dead (edict_t *self)
 
void supertankRocket (edict_t *self)
 
void supertankMachineGun (edict_t *self)
 
void supertank_reattack1 (edict_t *self)
 
void supertank_stand (edict_t *self)
 
void supertank_forward (edict_t *self)
 
void supertank_walk (edict_t *self)
 
void supertank_run (edict_t *self)
 
void supertank_pain (edict_t *self, edict_t *other, float kick, int damage)
 
void supertank_attack (edict_t *self)
 
void supertank_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
 
void SP_monster_supertank (edict_t *self)
 

Variables

static int sound_pain1
 
static int sound_pain2
 
static int sound_pain3
 
static int sound_death
 
static int sound_search1
 
static int sound_search2
 
static int tread_sound
 
mframe_t supertank_frames_stand []
 
mmove_t supertank_move_stand = {FRAME_stand_1, FRAME_stand_60, supertank_frames_stand, NULL}
 
mframe_t supertank_frames_run []
 
mmove_t supertank_move_run = {FRAME_forwrd_1, FRAME_forwrd_18, supertank_frames_run, NULL}
 
mframe_t supertank_frames_forward []
 
mmove_t supertank_move_forward = {FRAME_forwrd_1, FRAME_forwrd_18, supertank_frames_forward, NULL}
 
mframe_t supertank_frames_turn_right []
 
mmove_t supertank_move_turn_right = {FRAME_right_1, FRAME_right_18, supertank_frames_turn_right, supertank_run}
 
mframe_t supertank_frames_turn_left []
 
mmove_t supertank_move_turn_left = {FRAME_left_1, FRAME_left_18, supertank_frames_turn_left, supertank_run}
 
mframe_t supertank_frames_pain3 []
 
mmove_t supertank_move_pain3 = {FRAME_pain3_9, FRAME_pain3_12, supertank_frames_pain3, supertank_run}
 
mframe_t supertank_frames_pain2 []
 
mmove_t supertank_move_pain2 = {FRAME_pain2_5, FRAME_pain2_8, supertank_frames_pain2, supertank_run}
 
mframe_t supertank_frames_pain1 []
 
mmove_t supertank_move_pain1 = {FRAME_pain1_1, FRAME_pain1_4, supertank_frames_pain1, supertank_run}
 
mframe_t supertank_frames_death1 []
 
mmove_t supertank_move_death = {FRAME_death_1, FRAME_death_24, supertank_frames_death1, supertank_dead}
 
mframe_t supertank_frames_backward []
 
mmove_t supertank_move_backward = {FRAME_backwd_1, FRAME_backwd_18, supertank_frames_backward, NULL}
 
mframe_t supertank_frames_attack4 []
 
mmove_t supertank_move_attack4 = {FRAME_attak4_1, FRAME_attak4_6, supertank_frames_attack4, supertank_run}
 
mframe_t supertank_frames_attack3 []
 
mmove_t supertank_move_attack3 = {FRAME_attak3_1, FRAME_attak3_27, supertank_frames_attack3, supertank_run}
 
mframe_t supertank_frames_attack2 []
 
mmove_t supertank_move_attack2 = {FRAME_attak2_1, FRAME_attak2_27, supertank_frames_attack2, supertank_run}
 
mframe_t supertank_frames_attack1 []
 
mmove_t supertank_move_attack1 = {FRAME_attak1_1, FRAME_attak1_6, supertank_frames_attack1, supertank_reattack1}
 
mframe_t supertank_frames_end_attack1 []
 
mmove_t supertank_move_end_attack1 = {FRAME_attak1_7, FRAME_attak1_20, supertank_frames_end_attack1, supertank_run}
 

Function Documentation

◆ 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 }

◆ SP_monster_supertank()

void SP_monster_supertank ( edict_t self)

Definition at line 672 of file m_supertank.c.

673 {
674  if (deathmatch->value)
675  {
676  G_FreeEdict (self);
677  return;
678  }
679 
680  sound_pain1 = gi.soundindex ("bosstank/btkpain1.wav");
681  sound_pain2 = gi.soundindex ("bosstank/btkpain2.wav");
682  sound_pain3 = gi.soundindex ("bosstank/btkpain3.wav");
683  sound_death = gi.soundindex ("bosstank/btkdeth1.wav");
684  sound_search1 = gi.soundindex ("bosstank/btkunqv1.wav");
685  sound_search2 = gi.soundindex ("bosstank/btkunqv2.wav");
686 
687 // self->s.sound = gi.soundindex ("bosstank/btkengn1.wav");
688  tread_sound = gi.soundindex ("bosstank/btkengn1.wav");
689 
690  self->movetype = MOVETYPE_STEP;
691  self->solid = SOLID_BBOX;
692  self->s.modelindex = gi.modelindex ("models/monsters/boss1/tris.md2");
693  VectorSet (self->mins, -64, -64, 0);
694  VectorSet (self->maxs, 64, 64, 112);
695 
696  self->health = 1500;
697  self->gib_health = -500;
698  self->mass = 800;
699 
700  self->pain = supertank_pain;
701  self->die = supertank_die;
702  self->monsterinfo.stand = supertank_stand;
703  self->monsterinfo.walk = supertank_walk;
704  self->monsterinfo.run = supertank_run;
705  self->monsterinfo.dodge = NULL;
706  self->monsterinfo.attack = supertank_attack;
707  self->monsterinfo.search = supertank_search;
708  self->monsterinfo.melee = NULL;
709  self->monsterinfo.sight = NULL;
710 
711  gi.linkentity (self);
712 
713  self->monsterinfo.currentmove = &supertank_move_stand;
714  self->monsterinfo.scale = MODEL_SCALE;
715 
716  walkmonster_start(self);
717 }

◆ supertank_attack()

void supertank_attack ( edict_t self)

Definition at line 551 of file m_supertank.c.

552 {
553  vec3_t vec;
554  float range;
555  //float r;
556 
557  VectorSubtract (self->enemy->s.origin, self->s.origin, vec);
558  range = VectorLength (vec);
559 
560  //r = random();
561 
562  // Attack 1 == Chaingun
563  // Attack 2 == Rocket Launcher
564 
565  if (range <= 160)
566  {
567  self->monsterinfo.currentmove = &supertank_move_attack1;
568  }
569  else
570  { // fire rockets more often at distance
571  if (random() < 0.3)
572  self->monsterinfo.currentmove = &supertank_move_attack1;
573  else
574  self->monsterinfo.currentmove = &supertank_move_attack2;
575  }
576 }

Referenced by SP_monster_supertank().

◆ supertank_dead()

void supertank_dead ( edict_t self)

Definition at line 583 of file m_supertank.c.

584 {
585  VectorSet (self->mins, -60, -60, 0);
586  VectorSet (self->maxs, 60, 60, 72);
587  self->movetype = MOVETYPE_TOSS;
588  self->svflags |= SVF_DEADMONSTER;
589  self->nextthink = 0;
590  gi.linkentity (self);
591 }

◆ supertank_die()

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

Definition at line 657 of file m_supertank.c.

658 {
659  gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
660  self->deadflag = DEAD_DEAD;
661  self->takedamage = DAMAGE_NO;
662  self->count = 0;
663  self->monsterinfo.currentmove = &supertank_move_death;
664 }

Referenced by SP_monster_supertank().

◆ supertank_forward()

void supertank_forward ( edict_t self)

Definition at line 190 of file m_supertank.c.

191 {
192  self->monsterinfo.currentmove = &supertank_move_forward;
193 }

◆ supertank_pain()

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

Definition at line 452 of file m_supertank.c.

453 {
454 
455  if (self->health < (self->max_health / 2))
456  self->s.skinnum = 1;
457 
458  if (level.time < self->pain_debounce_time)
459  return;
460 
461  // Lessen the chance of him going into his pain frames
462  if (damage <=25)
463  if (random()<0.2)
464  return;
465 
466  // Don't go into pain if he's firing his rockets
467  if (skill->value >= 2)
468  if ( (self->s.frame >= FRAME_attak2_1) && (self->s.frame <= FRAME_attak2_14) )
469  return;
470 
471  self->pain_debounce_time = level.time + 3;
472 
473  if (skill->value == 3)
474  return; // no pain anims in nightmare
475 
476  if (damage <= 10)
477  {
478  gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM,0);
479  self->monsterinfo.currentmove = &supertank_move_pain1;
480  }
481  else if (damage <= 25)
482  {
483  gi.sound (self, CHAN_VOICE, sound_pain3, 1, ATTN_NORM,0);
484  self->monsterinfo.currentmove = &supertank_move_pain2;
485  }
486  else
487  {
488  gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM,0);
489  self->monsterinfo.currentmove = &supertank_move_pain3;
490  }
491 }

Referenced by SP_monster_supertank().

◆ supertank_reattack1()

void supertank_reattack1 ( edict_t self)

Definition at line 441 of file m_supertank.c.

442 {
443  if (visible(self, self->enemy))
444  if (random() < 0.9)
445  self->monsterinfo.currentmove = &supertank_move_attack1;
446  else
447  self->monsterinfo.currentmove = &supertank_move_end_attack1;
448  else
449  self->monsterinfo.currentmove = &supertank_move_end_attack1;
450 }

◆ supertank_run()

void supertank_run ( edict_t self)

Definition at line 200 of file m_supertank.c.

201 {
202  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
203  self->monsterinfo.currentmove = &supertank_move_stand;
204  else
205  self->monsterinfo.currentmove = &supertank_move_run;
206 }

Referenced by SP_monster_supertank().

◆ supertank_search()

void supertank_search ( edict_t self)

Definition at line 49 of file m_supertank.c.

50 {
51  if (random() < 0.5)
52  gi.sound (self, CHAN_VOICE, sound_search1, 1, ATTN_NORM, 0);
53  else
54  gi.sound (self, CHAN_VOICE, sound_search2, 1, ATTN_NORM, 0);
55 }

Referenced by SP_monster_supertank().

◆ supertank_stand()

void supertank_stand ( edict_t self)

Definition at line 133 of file m_supertank.c.

134 {
135  self->monsterinfo.currentmove = &supertank_move_stand;
136 }

Referenced by SP_monster_supertank().

◆ supertank_walk()

void supertank_walk ( edict_t self)

Definition at line 195 of file m_supertank.c.

196 {
197  self->monsterinfo.currentmove = &supertank_move_forward;
198 }

Referenced by SP_monster_supertank().

◆ supertankMachineGun()

void supertankMachineGun ( edict_t self)

Definition at line 520 of file m_supertank.c.

521 {
522  vec3_t dir;
523  vec3_t vec;
524  vec3_t start;
526  int flash_number;
527 
528  flash_number = MZ2_SUPERTANK_MACHINEGUN_1 + (self->s.frame - FRAME_attak1_1);
529 
530  //FIXME!!!
531  dir[0] = 0;
532  dir[1] = self->s.angles[1];
533  dir[2] = 0;
534 
535  AngleVectors (dir, forward, right, NULL);
536  G_ProjectSource (self->s.origin, monster_flash_offset[flash_number], forward, right, start);
537 
538  if (self->enemy)
539  {
540  VectorCopy (self->enemy->s.origin, vec);
541  VectorMA (vec, 0, self->enemy->velocity, vec);
542  vec[2] += self->enemy->viewheight;
543  VectorSubtract (vec, start, forward);
545  }
546 
547  monster_fire_bullet (self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, flash_number);
548 }

◆ supertankRocket()

void supertankRocket ( edict_t self)

Definition at line 494 of file m_supertank.c.

495 {
497  vec3_t start;
498  vec3_t dir;
499  vec3_t vec;
500  int flash_number;
501 
502  if (self->s.frame == FRAME_attak2_8)
503  flash_number = MZ2_SUPERTANK_ROCKET_1;
504  else if (self->s.frame == FRAME_attak2_11)
505  flash_number = MZ2_SUPERTANK_ROCKET_2;
506  else // (self->s.frame == FRAME_attak2_14)
507  flash_number = MZ2_SUPERTANK_ROCKET_3;
508 
509  AngleVectors (self->s.angles, forward, right, NULL);
510  G_ProjectSource (self->s.origin, monster_flash_offset[flash_number], forward, right, start);
511 
512  VectorCopy (self->enemy->s.origin, vec);
513  vec[2] += self->enemy->viewheight;
514  VectorSubtract (vec, start, dir);
515  VectorNormalize (dir);
516 
517  monster_fire_rocket (self, start, dir, 50, 500, flash_number);
518 }

◆ TreadSound()

void TreadSound ( edict_t self)

Definition at line 44 of file m_supertank.c.

45 {
46  gi.sound (self, CHAN_VOICE, tread_sound, 1, ATTN_NORM, 0);
47 }

◆ visible()

qboolean visible ( edict_t self,
edict_t other 
)

Definition at line 287 of file g_ai.c.

288 {
289  vec3_t spot1;
290  vec3_t spot2;
291  trace_t trace;
292 
293  VectorCopy (self->s.origin, spot1);
294  spot1[2] += self->viewheight;
295  VectorCopy (other->s.origin, spot2);
296  spot2[2] += other->viewheight;
297  trace = gi.trace (spot1, vec3_origin, vec3_origin, spot2, self, MASK_OPAQUE);
298 
299  if (trace.fraction == 1.0)
300  return true;
301  return false;
302 }

Referenced by ai_checkattack(), ClientBeginServerFrame(), FindTarget(), M_ReactToDamage(), PlayerTrail_PickFirst(), supertank_reattack1(), tank_reattack_blaster(), tank_refire_rocket(), and turret_driver_think().

Variable Documentation

◆ sound_death

int sound_death
static

Definition at line 36 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_die().

◆ sound_pain1

int sound_pain1
static

Definition at line 33 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_pain().

◆ sound_pain2

int sound_pain2
static

Definition at line 34 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_pain().

◆ sound_pain3

int sound_pain3
static

Definition at line 35 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_pain().

◆ sound_search1

int sound_search1
static

Definition at line 37 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_search().

◆ sound_search2

int sound_search2
static

Definition at line 38 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_search().

◆ supertank_frames_attack1

mframe_t supertank_frames_attack1[]

◆ supertank_frames_attack2

mframe_t supertank_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_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 377 of file m_supertank.c.

◆ supertank_frames_attack3

mframe_t supertank_frames_attack3[]
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},
{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 345 of file m_supertank.c.

◆ supertank_frames_attack4

mframe_t supertank_frames_attack4[]
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}
}

Definition at line 334 of file m_supertank.c.

◆ supertank_frames_backward

mframe_t supertank_frames_backward[]
Initial value:
=
{
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL}
}

Definition at line 311 of file m_supertank.c.

◆ supertank_frames_death1

mframe_t supertank_frames_death1[]
Initial value:
=
{
{ai_move, 0, NULL},
{ai_move, 0, NULL},
{ai_move, 0, NULL},
{ai_move, 0, NULL},
{ai_move, 0, NULL},
{ai_move, 0, NULL},
{ai_move, 0, NULL},
{ai_move, 0, NULL},
{ai_move, 0, NULL},
{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 282 of file m_supertank.c.

◆ supertank_frames_end_attack1

mframe_t supertank_frames_end_attack1[]
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}
}

Definition at line 421 of file m_supertank.c.

◆ supertank_frames_forward

mframe_t supertank_frames_forward[]
Initial value:
=
{
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL},
{ai_walk, 4, NULL}
}

Definition at line 167 of file m_supertank.c.

◆ supertank_frames_pain1

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

Definition at line 273 of file m_supertank.c.

◆ supertank_frames_pain2

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

Definition at line 264 of file m_supertank.c.

◆ supertank_frames_pain3

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

Definition at line 255 of file m_supertank.c.

◆ supertank_frames_run

mframe_t supertank_frames_run[]
Initial value:
=
{
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL},
{ai_run, 12, NULL}
}

Definition at line 139 of file m_supertank.c.

◆ supertank_frames_stand

mframe_t supertank_frames_stand[]

Definition at line 68 of file m_supertank.c.

◆ supertank_frames_turn_left

mframe_t supertank_frames_turn_left[]
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}
}

Definition at line 231 of file m_supertank.c.

◆ supertank_frames_turn_right

mframe_t supertank_frames_turn_right[]
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}
}

Definition at line 208 of file m_supertank.c.

◆ supertank_move_attack1

◆ supertank_move_attack2

Definition at line 407 of file m_supertank.c.

Referenced by supertank_attack().

◆ supertank_move_attack3

Definition at line 375 of file m_supertank.c.

◆ supertank_move_attack4

Definition at line 343 of file m_supertank.c.

◆ supertank_move_backward

Definition at line 332 of file m_supertank.c.

◆ supertank_move_death

Definition at line 309 of file m_supertank.c.

Referenced by supertank_die().

◆ supertank_move_end_attack1

Definition at line 438 of file m_supertank.c.

Referenced by supertank_reattack1().

◆ supertank_move_forward

Definition at line 188 of file m_supertank.c.

Referenced by supertank_forward(), and supertank_walk().

◆ supertank_move_pain1

Definition at line 280 of file m_supertank.c.

Referenced by supertank_pain().

◆ supertank_move_pain2

Definition at line 271 of file m_supertank.c.

Referenced by supertank_pain().

◆ supertank_move_pain3

Definition at line 262 of file m_supertank.c.

Referenced by supertank_pain().

◆ supertank_move_run

Definition at line 160 of file m_supertank.c.

Referenced by supertank_run().

◆ supertank_move_stand

Definition at line 131 of file m_supertank.c.

Referenced by SP_monster_supertank(), supertank_run(), and supertank_stand().

◆ supertank_move_turn_left

Definition at line 252 of file m_supertank.c.

◆ supertank_move_turn_right

Definition at line 229 of file m_supertank.c.

◆ tread_sound

int tread_sound
static

Definition at line 40 of file m_supertank.c.

Referenced by SP_monster_supertank(), and TreadSound().

gi
game_import_t gi
Definition: g_main.c:25
supertank_move_stand
mmove_t supertank_move_stand
Definition: m_supertank.c:131
sound_search1
static int sound_search1
Definition: m_supertank.c:37
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:964
deathmatch
cvar_t * deathmatch
Definition: g_main.c:35
MZ2_SUPERTANK_ROCKET_2
#define MZ2_SUPERTANK_ROCKET_2
Definition: q_shared.h:774
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:113
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
trace_t::fraction
float fraction
Definition: q_shared.h:453
DEFAULT_BULLET_HSPREAD
#define DEFAULT_BULLET_HSPREAD
Definition: g_local.h:664
ThrowGib
void ThrowGib(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:135
VectorSubtract
#define VectorSubtract(a, b, c)
Definition: q_shared.h:156
entity_state_s::frame
int frame
Definition: q_shared.h:1178
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:194
TE_EXPLOSION1
@ TE_EXPLOSION1
Definition: q_shared.h:940
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:1067
SOLID_BBOX
@ SOLID_BBOX
Definition: game.h:37
supertank_move_attack1
mmove_t supertank_move_attack1
Definition: m_supertank.c:419
FRAME_attak2_1
#define FRAME_attak2_1
Definition: m_supertank.h:44
entity_state_s::origin
vec3_t origin
Definition: q_shared.h:1173
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:127
trace_t
Definition: q_shared.h:449
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:506
edict_s::max_health
int max_health
Definition: g_local.h:1052
game_import_t::sound
void(* sound)(edict_t *ent, int channel, int soundindex, float volume, float attenuation, float timeofs)
Definition: game.h:109
edict_s::mins
vec3_t mins
Definition: g_local.h:984
range
GLsizei range
Definition: qgl_win.c:121
sound_pain3
static int sound_pain3
Definition: m_supertank.c:35
ATTN_NORM
#define ATTN_NORM
Definition: q_shared.h:1019
supertank_move_run
mmove_t supertank_move_run
Definition: m_supertank.c:160
walkmonster_start
void walkmonster_start(edict_t *self)
Definition: g_monster.c:692
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:194
visible
qboolean visible(edict_t *self, edict_t *other)
Definition: g_ai.c:287
MZ2_SUPERTANK_ROCKET_1
#define MZ2_SUPERTANK_ROCKET_1
Definition: q_shared.h:773
FRAME_attak2_11
#define FRAME_attak2_11
Definition: m_supertank.h:54
supertank_walk
void supertank_walk(edict_t *self)
Definition: m_supertank.c:195
SVF_DEADMONSTER
#define SVF_DEADMONSTER
Definition: game.h:28
AngleVectors
void AngleVectors(vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition: q_shared.c:93
monster_flash_offset
vec3_t monster_flash_offset[]
Definition: m_flash.c:27
CHAN_VOICE
#define CHAN_VOICE
Definition: q_shared.h:1009
DEFAULT_BULLET_VSPREAD
#define DEFAULT_BULLET_VSPREAD
Definition: g_local.h:665
FRAME_attak2_8
#define FRAME_attak2_8
Definition: m_supertank.h:51
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:452
GIB_METALLIC
#define GIB_METALLIC
Definition: g_local.h:124
supertank_stand
void supertank_stand(edict_t *self)
Definition: m_supertank.c:133
supertank_move_forward
mmove_t supertank_move_forward
Definition: m_supertank.c:188
MZ2_SUPERTANK_ROCKET_3
#define MZ2_SUPERTANK_ROCKET_3
Definition: q_shared.h:775
edict_s::viewheight
int viewheight
Definition: g_local.h:1061
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
game_import_t::modelindex
int(* modelindex)(char *name)
Definition: game.h:121
supertank_move_attack2
mmove_t supertank_move_attack2
Definition: m_supertank.c:407
sound_pain1
static int sound_pain1
Definition: m_supertank.c:33
supertank_move_end_attack1
mmove_t supertank_move_end_attack1
Definition: m_supertank.c:438
supertank_run
void supertank_run(edict_t *self)
Definition: m_supertank.c:200
cvar_s::value
float value
Definition: q_shared.h:324
sound_search2
static int sound_search2
Definition: m_supertank.c:38
FRAME_attak2_14
#define FRAME_attak2_14
Definition: m_supertank.h:57
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:163
random
#define random()
Definition: g_local.h:509
DAMAGE_NO
@ DAMAGE_NO
Definition: g_local.h:86
VectorNormalize
vec_t VectorNormalize(vec3_t v)
Definition: q_shared.c:681
NULL
#define NULL
Definition: q_shared.h:60
supertank_move_pain2
mmove_t supertank_move_pain2
Definition: m_supertank.c:271
sound_death
static int sound_death
Definition: m_supertank.c:36
tread_sound
static int tread_sound
Definition: m_supertank.c:40
monsterinfo_t::aiflags
int aiflags
Definition: g_local.h: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
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
skill
cvar_t * skill
Definition: g_main.c:38
MASK_OPAQUE
#define MASK_OPAQUE
Definition: q_shared.h:396
edict_s::velocity
vec3_t velocity
Definition: g_local.h:1024
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:92
svc_temp_entity
@ svc_temp_entity
Definition: qcommon.h:210
BossExplode
void BossExplode(edict_t *self)
Definition: m_supertank.c:594
supertank_move_pain3
mmove_t supertank_move_pain3
Definition: m_supertank.c:262
TreadSound
void TreadSound(edict_t *self)
Definition: m_supertank.c:44
sound_pain2
static int sound_pain2
Definition: m_supertank.c:34
VectorCopy
#define VectorCopy(a, b)
Definition: q_shared.h:158
edict_s::pain_debounce_time
float pain_debounce_time
Definition: g_local.h:1046
edict_s::monsterinfo
monsterinfo_t monsterinfo
Definition: g_local.h:1108
vec3_origin
vec3_t vec3_origin
Definition: q_shared.c:24
game_import_t::WriteByte
void(* WriteByte)(int c)
Definition: game.h:147
level
GLint level
Definition: qgl_win.c:116
supertank_attack
void supertank_attack(edict_t *self)
Definition: m_supertank.c:551
ai_run
void ai_run(edict_t *self, float dist)
Definition: g_ai.c:915
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:123
VectorMA
void VectorMA(vec3_t veca, float scale, vec3_t vecb, vec3_t vecc)
Definition: q_shared.c:719
FRAME_attak1_1
#define FRAME_attak1_1
Definition: m_supertank.h:24
edict_s::maxs
vec3_t maxs
Definition: g_local.h:984
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:183
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:196
VectorSet
#define VectorSet(v, x, y, z)
Definition: q_shared.h:161
supertankMachineGun
void supertankMachineGun(edict_t *self)
Definition: m_supertank.c:520
right
GLdouble right
Definition: qgl_win.c:159
supertank_move_death
mmove_t supertank_move_death
Definition: m_supertank.c:309
MZ2_SUPERTANK_MACHINEGUN_1
#define MZ2_SUPERTANK_MACHINEGUN_1
Definition: q_shared.h:767
edict_s::enemy
edict_t * enemy
Definition: g_local.h:1070
game_import_t::linkentity
void(* linkentity)(edict_t *ent)
Definition: game.h:138
entity_state_s::angles
vec3_t angles
Definition: q_shared.h:1174
MULTICAST_PVS
@ MULTICAST_PVS
Definition: q_shared.h:111
supertank_search
void supertank_search(edict_t *self)
Definition: m_supertank.c:49
vec3_t
vec_t vec3_t[3]
Definition: q_shared.h:127
supertank_pain
void supertank_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_supertank.c:452
supertank_die
void supertank_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_supertank.c:657
supertankRocket
void supertankRocket(edict_t *self)
Definition: m_supertank.c:494
edict_s::health
int health
Definition: g_local.h:1051
supertank_move_pain1
mmove_t supertank_move_pain1
Definition: m_supertank.c:280