diff --git a/src/g_phys.c b/src/g_phys.c index bae1744..bfaef61 100644 --- a/src/g_phys.c +++ b/src/g_phys.c @@ -1205,6 +1205,7 @@ G_RunEntity(edict_t *ent) { trace_t trace; vec3_t previous_origin; + qboolean saved_origin; if (!ent) { @@ -1214,6 +1215,11 @@ G_RunEntity(edict_t *ent) if (ent->movetype == MOVETYPE_STEP) { VectorCopy(ent->s.origin, previous_origin); + saved_origin = true; + } + else + { + saved_origin = false; } if (ent->prethink) @@ -1249,7 +1255,7 @@ G_RunEntity(edict_t *ent) gi.error("SV_Physics: bad movetype %i", (int)ent->movetype); } - if (ent->movetype == MOVETYPE_STEP) + if (saved_origin) { /* if we moved, check and fix origin if needed */ if (!VectorCompare(ent->s.origin, previous_origin)) 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 ee72dbd..eed6589 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; @@ -1122,6 +1137,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;