diff --git a/src/g_spawn.c b/src/g_spawn.c index 94593c6..2ee32a7 100644 --- a/src/g_spawn.c +++ b/src/g_spawn.c @@ -127,6 +127,7 @@ void SP_monster_mutant(edict_t *self); void SP_monster_supertank(edict_t *self); void SP_monster_boss2(edict_t *self); void SP_monster_jorg(edict_t *self); +void SP_monster_makron(edict_t *self); void SP_monster_boss3_stand(edict_t *self); void SP_monster_commander_body(edict_t *self); @@ -284,6 +285,7 @@ spawn_t spawns[] = { {"monster_supertank", SP_monster_supertank}, {"monster_boss2", SP_monster_boss2}, {"monster_boss3_stand", SP_monster_boss3_stand}, + {"monster_makron", SP_monster_makron}, {"monster_jorg", SP_monster_jorg}, {"monster_commander_body", SP_monster_commander_body}, diff --git a/src/monster/boss3/boss32.c b/src/monster/boss3/boss32.c index a6961ee..38214c9 100644 --- a/src/monster/boss3/boss32.c +++ b/src/monster/boss3/boss32.c @@ -799,15 +799,29 @@ makron_torso_think(edict_t *self) return; } - if (++self->s.frame < 365) + if (self->owner && self->owner->inuse && self->owner->deadflag != DEAD_DEAD) { - self->nextthink = level.time + FRAMETIME; + G_FreeEdict(self); + return; + } + + if (self->owner && (self->owner->monsterinfo.aiflags & AI_RESURRECTING)) + { + self->s.effects |= EF_COLOR_SHELL; + self->s.renderfx |= RF_SHELL_RED; } else { - self->s.frame = 346; - self->nextthink = level.time + FRAMETIME; + self->s.effects &= ~EF_COLOR_SHELL; + self->s.renderfx &= ~RF_SHELL_RED; } + + if (++self->s.frame >= FRAME_death320) + { + self->s.frame = FRAME_death301; + } + + self->nextthink = level.time + FRAMETIME; } void @@ -822,7 +836,7 @@ makron_torso(edict_t *ent) ent->solid = SOLID_NOT; VectorSet(ent->mins, -8, -8, 0); VectorSet(ent->maxs, 8, 8, 8); - ent->s.frame = 346; + ent->s.frame = FRAME_death301; ent->s.modelindex = gi.modelindex("models/monsters/boss3/rider/tris.md2"); ent->think = makron_torso_think; ent->nextthink = level.time + 2 * FRAMETIME; @@ -895,6 +909,7 @@ makron_die(edict_t *self, edict_t *inflictor /* update */, edict_t *attacker /* VectorCopy(self->s.origin, tempent->s.origin); VectorCopy(self->s.angles, tempent->s.angles); tempent->s.origin[1] -= 84; + tempent->owner = self; makron_torso(tempent); self->monsterinfo.currentmove = &makron_move_death2; @@ -1126,6 +1141,7 @@ MakronToss(edict_t *self) } ent = G_Spawn(); + ent->classname = "monster_makron"; ent->nextthink = level.time + 0.8; ent->think = MakronSpawn; ent->target = self->target;