Quake II RTX 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 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 }

◆ SP_monster_supertank()

void SP_monster_supertank ( edict_t *  self)

Definition at line 646 of file m_supertank.c.

647 {
648  if (deathmatch->value) {
649  G_FreeEdict(self);
650  return;
651  }
652 
653  sound_pain1 = gi.soundindex("bosstank/btkpain1.wav");
654  sound_pain2 = gi.soundindex("bosstank/btkpain2.wav");
655  sound_pain3 = gi.soundindex("bosstank/btkpain3.wav");
656  sound_death = gi.soundindex("bosstank/btkdeth1.wav");
657  sound_search1 = gi.soundindex("bosstank/btkunqv1.wav");
658  sound_search2 = gi.soundindex("bosstank/btkunqv2.wav");
659 
660 // self->s.sound = gi.soundindex ("bosstank/btkengn1.wav");
661  tread_sound = gi.soundindex("bosstank/btkengn1.wav");
662 
663  self->movetype = MOVETYPE_STEP;
664  self->solid = SOLID_BBOX;
665  self->s.modelindex = gi.modelindex("models/monsters/boss1/tris.md2");
666  VectorSet(self->mins, -64, -64, 0);
667  VectorSet(self->maxs, 64, 64, 112);
668 
669  self->health = 1500;
670  self->gib_health = -500;
671  self->mass = 800;
672 
673  self->pain = supertank_pain;
674  self->die = supertank_die;
675  self->monsterinfo.stand = supertank_stand;
676  self->monsterinfo.walk = supertank_walk;
677  self->monsterinfo.run = supertank_run;
678  self->monsterinfo.dodge = NULL;
679  self->monsterinfo.attack = supertank_attack;
680  self->monsterinfo.search = supertank_search;
681  self->monsterinfo.melee = NULL;
682  self->monsterinfo.sight = NULL;
683 
684  gi.linkentity(self);
685 
686  self->monsterinfo.currentmove = &supertank_move_stand;
687  self->monsterinfo.scale = MODEL_SCALE;
688 
689  walkmonster_start(self);
690 }

◆ supertank_attack()

void supertank_attack ( edict_t *  self)

Definition at line 528 of file m_supertank.c.

529 {
530  vec3_t vec;
531  float range;
532  //float r;
533 
534  VectorSubtract(self->enemy->s.origin, self->s.origin, vec);
535  range = VectorLength(vec);
536 
537  //r = random();
538 
539  // Attack 1 == Chaingun
540  // Attack 2 == Rocket Launcher
541 
542  if (range <= 160) {
543  self->monsterinfo.currentmove = &supertank_move_attack1;
544  } else {
545  // fire rockets more often at distance
546  if (random() < 0.3)
547  self->monsterinfo.currentmove = &supertank_move_attack1;
548  else
549  self->monsterinfo.currentmove = &supertank_move_attack2;
550  }
551 }

Referenced by SP_monster_supertank().

◆ supertank_dead()

void supertank_dead ( edict_t *  self)

Definition at line 558 of file m_supertank.c.

559 {
560  VectorSet(self->mins, -60, -60, 0);
561  VectorSet(self->maxs, 60, 60, 72);
562  self->movetype = MOVETYPE_TOSS;
563  self->svflags |= SVF_DEADMONSTER;
564  self->nextthink = 0;
565  gi.linkentity(self);
566 }

◆ supertank_die()

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

Definition at line 631 of file m_supertank.c.

632 {
633  gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
634  self->deadflag = DEAD_DEAD;
635  self->takedamage = DAMAGE_NO;
636  self->count = 0;
637  self->monsterinfo.currentmove = &supertank_move_death;
638 }

Referenced by SP_monster_supertank().

◆ supertank_forward()

void supertank_forward ( edict_t *  self)

Definition at line 185 of file m_supertank.c.

186 {
187  self->monsterinfo.currentmove = &supertank_move_forward;
188 }

◆ supertank_pain()

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

Definition at line 435 of file m_supertank.c.

436 {
437 
438  if (self->health < (self->max_health / 2))
439  self->s.skinnum = 1;
440 
441  if (level.time < self->pain_debounce_time)
442  return;
443 
444  // Lessen the chance of him going into his pain frames
445  if (damage <= 25)
446  if (random() < 0.2)
447  return;
448 
449  // Don't go into pain if he's firing his rockets
450  if (skill->value >= 2)
451  if ((self->s.frame >= FRAME_attak2_1) && (self->s.frame <= FRAME_attak2_14))
452  return;
453 
454  self->pain_debounce_time = level.time + 3;
455 
456  if (skill->value == 3)
457  return; // no pain anims in nightmare
458 
459  if (damage <= 10) {
460  gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
461  self->monsterinfo.currentmove = &supertank_move_pain1;
462  } else if (damage <= 25) {
463  gi.sound(self, CHAN_VOICE, sound_pain3, 1, ATTN_NORM, 0);
464  self->monsterinfo.currentmove = &supertank_move_pain2;
465  } else {
466  gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
467  self->monsterinfo.currentmove = &supertank_move_pain3;
468  }
469 }

Referenced by SP_monster_supertank().

◆ supertank_reattack1()

void supertank_reattack1 ( edict_t *  self)

Definition at line 424 of file m_supertank.c.

425 {
426  if (visible(self, self->enemy))
427  if (random() < 0.9)
428  self->monsterinfo.currentmove = &supertank_move_attack1;
429  else
430  self->monsterinfo.currentmove = &supertank_move_end_attack1;
431  else
432  self->monsterinfo.currentmove = &supertank_move_end_attack1;
433 }

◆ supertank_run()

void supertank_run ( edict_t *  self)

Definition at line 195 of file m_supertank.c.

196 {
197  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
198  self->monsterinfo.currentmove = &supertank_move_stand;
199  else
200  self->monsterinfo.currentmove = &supertank_move_run;
201 }

Referenced by SP_monster_supertank().

◆ supertank_search()

void supertank_search ( edict_t *  self)

Definition at line 47 of file m_supertank.c.

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

Referenced by SP_monster_supertank().

◆ supertank_stand()

void supertank_stand ( edict_t *  self)

Definition at line 130 of file m_supertank.c.

131 {
132  self->monsterinfo.currentmove = &supertank_move_stand;
133 }

Referenced by SP_monster_supertank().

◆ supertank_walk()

void supertank_walk ( edict_t *  self)

Definition at line 190 of file m_supertank.c.

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

Referenced by SP_monster_supertank().

◆ supertankMachineGun()

void supertankMachineGun ( edict_t *  self)

Definition at line 498 of file m_supertank.c.

499 {
500  vec3_t dir;
501  vec3_t vec;
502  vec3_t start;
503  vec3_t forward, right;
504  int flash_number;
505 
506  flash_number = MZ2_SUPERTANK_MACHINEGUN_1 + (self->s.frame - FRAME_attak1_1);
507 
508  //FIXME!!!
509  dir[0] = 0;
510  dir[1] = self->s.angles[1];
511  dir[2] = 0;
512 
513  AngleVectors(dir, forward, right, NULL);
514  G_ProjectSource(self->s.origin, monster_flash_offset[flash_number], forward, right, start);
515 
516  if (self->enemy) {
517  VectorCopy(self->enemy->s.origin, vec);
518  VectorMA(vec, 0, self->enemy->velocity, vec);
519  vec[2] += self->enemy->viewheight;
520  VectorSubtract(vec, start, forward);
522  }
523 
524  monster_fire_bullet(self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, flash_number);
525 }

◆ supertankRocket()

void supertankRocket ( edict_t *  self)

Definition at line 472 of file m_supertank.c.

473 {
474  vec3_t forward, right;
475  vec3_t start;
476  vec3_t dir;
477  vec3_t vec;
478  int flash_number;
479 
480  if (self->s.frame == FRAME_attak2_8)
481  flash_number = MZ2_SUPERTANK_ROCKET_1;
482  else if (self->s.frame == FRAME_attak2_11)
483  flash_number = MZ2_SUPERTANK_ROCKET_2;
484  else // (self->s.frame == FRAME_attak2_14)
485  flash_number = MZ2_SUPERTANK_ROCKET_3;
486 
487  AngleVectors(self->s.angles, forward, right, NULL);
488  G_ProjectSource(self->s.origin, monster_flash_offset[flash_number], forward, right, start);
489 
490  VectorCopy(self->enemy->s.origin, vec);
491  vec[2] += self->enemy->viewheight;
492  VectorSubtract(vec, start, dir);
493  VectorNormalize(dir);
494 
495  monster_fire_rocket(self, start, dir, 50, 500, flash_number);
496 }

◆ TreadSound()

void TreadSound ( edict_t *  self)

Definition at line 42 of file m_supertank.c.

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

◆ visible()

qboolean visible ( edict_t *  self,
edict_t *  other 
)

Definition at line 268 of file g_ai.c.

269 {
270  vec3_t spot1;
271  vec3_t spot2;
272  trace_t trace;
273 
274  VectorCopy(self->s.origin, spot1);
275  spot1[2] += self->viewheight;
276  VectorCopy(other->s.origin, spot2);
277  spot2[2] += other->viewheight;
278  trace = gi.trace(spot1, vec3_origin, vec3_origin, spot2, self, MASK_OPAQUE);
279 
280  if (trace.fraction == 1.0)
281  return qtrue;
282  return qfalse;
283 }

Referenced by ai_checkattack(), ClientBeginServerFrame(), FindTarget(), get_sunlight(), 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 34 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_die().

◆ sound_pain1

int sound_pain1
static

Definition at line 31 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_pain().

◆ sound_pain2

int sound_pain2
static

Definition at line 32 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_pain().

◆ sound_pain3

int sound_pain3
static

Definition at line 33 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_pain().

◆ sound_search1

int sound_search1
static

Definition at line 35 of file m_supertank.c.

Referenced by SP_monster_supertank(), and supertank_search().

◆ sound_search2

int sound_search2
static

Definition at line 36 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 363 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 332 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 322 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 300 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 272 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 405 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 163 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 264 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 256 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 248 of file m_supertank.c.

◆ supertank_frames_run

mframe_t supertank_frames_run[]
Initial value:
= {
{ ai_run, 12, TreadSound },
{ 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 136 of file m_supertank.c.

◆ supertank_frames_stand

mframe_t supertank_frames_stand[]

Definition at line 66 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 225 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 203 of file m_supertank.c.

◆ supertank_move_attack1

◆ supertank_move_attack2

Definition at line 392 of file m_supertank.c.

Referenced by supertank_attack().

◆ supertank_move_attack3

Definition at line 361 of file m_supertank.c.

◆ supertank_move_attack4

Definition at line 330 of file m_supertank.c.

◆ supertank_move_backward

mmove_t supertank_move_backward = {FRAME_backwd_1, FRAME_backwd_18, supertank_frames_backward, NULL}

Definition at line 320 of file m_supertank.c.

◆ supertank_move_death

Definition at line 298 of file m_supertank.c.

Referenced by supertank_die().

◆ supertank_move_end_attack1

Definition at line 421 of file m_supertank.c.

Referenced by supertank_reattack1().

◆ supertank_move_forward

mmove_t supertank_move_forward = {FRAME_forwrd_1, FRAME_forwrd_18, supertank_frames_forward, NULL}

Definition at line 183 of file m_supertank.c.

Referenced by supertank_forward(), and supertank_walk().

◆ supertank_move_pain1

Definition at line 270 of file m_supertank.c.

Referenced by supertank_pain().

◆ supertank_move_pain2

Definition at line 262 of file m_supertank.c.

Referenced by supertank_pain().

◆ supertank_move_pain3

Definition at line 254 of file m_supertank.c.

Referenced by supertank_pain().

◆ supertank_move_run

Definition at line 156 of file m_supertank.c.

Referenced by supertank_run().

◆ supertank_move_stand

mmove_t supertank_move_stand = {FRAME_stand_1, FRAME_stand_60, supertank_frames_stand, NULL}

Definition at line 128 of file m_supertank.c.

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

◆ supertank_move_turn_left

Definition at line 245 of file m_supertank.c.

◆ supertank_move_turn_right

Definition at line 223 of file m_supertank.c.

◆ tread_sound

int tread_sound
static

Definition at line 38 of file m_supertank.c.

Referenced by SP_monster_supertank(), and TreadSound().

gi
game_import_t gi
Definition: g_main.c:23
supertank_move_stand
mmove_t supertank_move_stand
Definition: m_supertank.c:128
sound_search1
static int sound_search1
Definition: m_supertank.c:35
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
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
supertank_move_attack1
mmove_t supertank_move_attack1
Definition: m_supertank.c:403
FRAME_attak2_1
#define FRAME_attak2_1
Definition: m_supertank.h:42
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:126
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:504
sound_pain3
static int sound_pain3
Definition: m_supertank.c:33
other
@ other
Definition: ogg.c:63
supertank_move_run
mmove_t supertank_move_run
Definition: m_supertank.c:156
walkmonster_start
void walkmonster_start(edict_t *self)
Definition: g_monster.c:630
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:192
visible
qboolean visible(edict_t *self, edict_t *other)
Definition: g_ai.c:268
FRAME_attak2_11
#define FRAME_attak2_11
Definition: m_supertank.h:52
supertank_walk
void supertank_walk(edict_t *self)
Definition: m_supertank.c:190
vec3_origin
vec3_t vec3_origin
Definition: shared.c:21
DEFAULT_BULLET_VSPREAD
#define DEFAULT_BULLET_VSPREAD
Definition: g_local.h:655
FRAME_attak2_8
#define FRAME_attak2_8
Definition: m_supertank.h:49
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:421
GIB_METALLIC
#define GIB_METALLIC
Definition: g_local.h:123
supertank_stand
void supertank_stand(edict_t *self)
Definition: m_supertank.c:130
supertank_move_forward
mmove_t supertank_move_forward
Definition: m_supertank.c:183
forward
static vec3_t forward
Definition: p_view.c:27
svc_temp_entity
#define svc_temp_entity
Definition: g_local.h:38
supertank_move_attack2
mmove_t supertank_move_attack2
Definition: m_supertank.c:392
sound_pain1
static int sound_pain1
Definition: m_supertank.c:31
supertank_move_end_attack1
mmove_t supertank_move_end_attack1
Definition: m_supertank.c:421
supertank_run
void supertank_run(edict_t *self)
Definition: m_supertank.c:195
sound_search2
static int sound_search2
Definition: m_supertank.c:36
FRAME_attak2_14
#define FRAME_attak2_14
Definition: m_supertank.h:55
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
DAMAGE_NO
@ DAMAGE_NO
Definition: g_local.h:87
supertank_move_pain2
mmove_t supertank_move_pain2
Definition: m_supertank.c:262
sound_death
static int sound_death
Definition: m_supertank.c:34
tread_sound
static int tread_sound
Definition: m_supertank.c:38
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
skill
cvar_t * skill
Definition: g_main.c:36
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
supertank_move_pain3
mmove_t supertank_move_pain3
Definition: m_supertank.c:254
TreadSound
void TreadSound(edict_t *self)
Definition: m_supertank.c:42
sound_pain2
static int sound_pain2
Definition: m_supertank.c:32
right
static vec3_t right
Definition: p_view.c:27
supertank_attack
void supertank_attack(edict_t *self)
Definition: m_supertank.c:528
ai_run
void ai_run(edict_t *self, float dist)
Definition: g_ai.c:821
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:122
level
level_locals_t level
Definition: g_main.c:22
FRAME_attak1_1
#define FRAME_attak1_1
Definition: m_supertank.h:22
monster_flash_offset
const vec3_t monster_flash_offset[256]
Definition: m_flash.c:25
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.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
supertankMachineGun
void supertankMachineGun(edict_t *self)
Definition: m_supertank.c:498
supertank_move_death
mmove_t supertank_move_death
Definition: m_supertank.c:298
supertank_search
void supertank_search(edict_t *self)
Definition: m_supertank.c:47
VectorNormalize
vec_t VectorNormalize(vec3_t v)
Definition: shared.c:55
supertank_pain
void supertank_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_supertank.c:435
supertank_die
void supertank_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_supertank.c:631
supertankRocket
void supertankRocket(edict_t *self)
Definition: m_supertank.c:472
supertank_move_pain1
mmove_t supertank_move_pain1
Definition: m_supertank.c:270