diff --git a/src/k_objects.h b/src/k_objects.h index 45a487c5a..cc80d2555 100644 --- a/src/k_objects.h +++ b/src/k_objects.h @@ -10,6 +10,8 @@ void Obj_HyudoroCollide(mobj_t *special, mobj_t *toucher); /* Shrink */ void Obj_PohbeeThinker(mobj_t *pohbee); +void Obj_PohbeeRemoved(mobj_t *pohbee); +void Obj_ShrinkGunRemoved(mobj_t *gun); boolean Obj_ShrinkLaserCollide(mobj_t *gun, mobj_t *victim); void Obj_CreateShrinkPohbees(player_t *owner); diff --git a/src/objects/shrink.c b/src/objects/shrink.c index bc99420be..a37c93ac3 100644 --- a/src/objects/shrink.c +++ b/src/objects/shrink.c @@ -429,25 +429,35 @@ void Obj_PohbeeThinker(mobj_t *pohbee) } } -/* void Obj_PohbeeRemoved(mobj_t *pohbee) +{ + mobj_t *gun = pohbee_guns(pohbee); + + while (gun != NULL && P_MobjWasRemoved(gun) == false) + { + mobj_t *nextGun = pohbee_guns(gun); + P_RemoveMobj(gun); + gun = nextGun; + } +} + +void Obj_ShrinkGunRemoved(mobj_t *gun) { mobj_t *chain = NULL; - if (pohbee_guns(pohbee) != NULL) + if (gun_laser(gun) != NULL && P_MobjWasRemoved(gun_laser(gun)) == false) { - P_RemoveMobj(pohbee_laser(pohbee)); + P_RemoveMobj(gun_laser(gun)); } - chain = pohbee_chain(pohbee); - while (chain != NULL) + chain = gun_chains(gun); + while (chain != NULL && P_MobjWasRemoved(chain) == false) { - mobj_t *temp = chain; - chain = pohbee_chain(temp); - P_RemoveMobj(temp); + mobj_t *nextChain = gun_chains(chain); + P_RemoveMobj(chain); + chain = nextChain; } } -*/ boolean Obj_ShrinkLaserCollide(mobj_t *gun, mobj_t *victim) { diff --git a/src/p_mobj.c b/src/p_mobj.c index a86d1af4e..0505d6bda 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -10656,6 +10656,16 @@ void P_RemoveMobj(mobj_t *mobj) P_SetTarget(&mobj->player->followmobj, NULL); } + if (mobj->type == MT_SHRINK_POHBEE) + { + Obj_PohbeeRemoved(mobj); + } + + if (mobj->type == MT_SHRINK_GUN) + { + Obj_ShrinkGunRemoved(mobj); + } + mobj->health = 0; // Just because // unlink from sector and block lists