51 void boss2_die(edict_t *
self, edict_t *inflictor, edict_t *attacker,
int damage, vec3_t point);
64 VectorCopy(self->enemy->s.origin, vec);
65 vec[2] +=
self->enemy->viewheight;
66 VectorSubtract(vec, start, dir);
72 VectorCopy(self->enemy->s.origin, vec);
73 vec[2] +=
self->enemy->viewheight;
74 VectorSubtract(vec, start, dir);
80 VectorCopy(self->enemy->s.origin, vec);
81 vec[2] +=
self->enemy->viewheight;
82 VectorSubtract(vec, start, dir);
88 VectorCopy(self->enemy->s.origin, vec);
89 vec[2] +=
self->enemy->viewheight;
90 VectorSubtract(vec, start, dir);
103 VectorMA(self->enemy->s.origin, -0.2, self->enemy->velocity, target);
104 target[2] +=
self->enemy->viewheight;
105 VectorSubtract(target, start,
forward);
119 VectorMA(self->enemy->s.origin, -0.2, self->enemy->velocity, target);
121 target[2] +=
self->enemy->viewheight;
122 VectorSubtract(target, start,
forward);
424 VectorSubtract(self->enemy->s.origin, self->s.origin, vec);
425 range = VectorLength(vec);
444 if (
infront(
self, self->enemy))
456 if (self->health < (self->max_health / 2))
459 if (
level.
time < self->pain_debounce_time)
462 self->pain_debounce_time =
level.
time + 3;
467 }
else if (damage < 30) {
478 VectorSet(self->mins, -56, -56, 0);
479 VectorSet(self->maxs, 56, 56, 80);
481 self->svflags |= SVF_DEADMONSTER;
486 void boss2_die(edict_t *
self, edict_t *inflictor, edict_t *attacker,
int damage, vec3_t point)
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++)
502 for (n = 0; n < 4; n++)
527 if (self->enemy->health > 0) {
529 VectorCopy(self->s.origin, spot1);
530 spot1[2] +=
self->viewheight;
531 VectorCopy(self->enemy->s.origin, spot2);
532 spot2[2] +=
self->enemy->viewheight;
534 tr =
gi.trace(spot1, NULL, NULL, spot2,
self, CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_SLIME | CONTENTS_LAVA);
537 if (tr.ent != self->enemy)
542 VectorSubtract(self->enemy->s.origin, self->s.origin, temp);
550 if (self->monsterinfo.melee)
551 self->monsterinfo.attack_state =
AS_MELEE;
558 if (!self->monsterinfo.attack)
561 if (
level.
time < self->monsterinfo.attack_finished)
585 if (self->flags &
FL_FLY) {
612 self->s.sound =
gi.soundindex(
"bosshovr/bhvengn1.wav");
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);
621 self->gib_health = -200;