From 72a98ddd67b91d3d0deb4891595d1837c0d65902 Mon Sep 17 00:00:00 2001 From: Farie82 Date: Fri, 17 Dec 2021 10:46:39 +0100 Subject: [PATCH] Makes blob spores/blobbers and mice GC properly (#17237) --- code/game/gamemodes/blob/blobs/factory.dm | 4 +--- code/game/gamemodes/blob/overmind.dm | 9 +++++++++ code/game/gamemodes/blob/powers.dm | 4 +--- code/modules/mob/living/simple_animal/friendly/mouse.dm | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index 54139ca4a35..8f5930fb2d2 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -24,6 +24,4 @@ spore_delay = world.time + 100 // 10 seconds var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src) if(overmind) - BS.color = overmind.blob_reagent_datum?.complementary_color - BS.overmind = overmind - overmind.blob_mobs.Add(BS) + overmind.add_mob_to_overmind(BS) diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 02022121209..b3c19cd2896 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -77,6 +77,15 @@ blob_talk(message) +/mob/camera/blob/proc/add_mob_to_overmind(mob/living/simple_animal/hostile/blob/B) + B.color = blob_reagent_datum?.complementary_color + B.overmind = src + blob_mobs += B + RegisterSignal(B, COMSIG_PARENT_QDELETING, .proc/on_blob_mob_death) + +/mob/camera/blob/proc/on_blob_mob_death(mob/living/simple_animal/hostile/blob/B) + blob_mobs -= B + /mob/camera/blob/proc/blob_talk(message) log_say("(BLOB) [message]", src) diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index f02e7169124..730441f95aa 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -231,9 +231,7 @@ var/mob/living/simple_animal/hostile/blob/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blob/blobbernaut (get_turf(B)) if(blobber) qdel(B) - blobber.color = blob_reagent_datum.complementary_color - blobber.overmind = src - blob_mobs.Add(blobber) + add_mob_to_overmind(blobber) blobber.AIStatus = AI_OFF blobber.LoseTarget() spawn() diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 60ae380461a..1643b09a3dc 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -212,9 +212,9 @@ var/datum/mind/blobmind = mind var/client/C = client if(istype(blobmind) && istype(C)) - blobmind.special_role = SPECIAL_ROLE_BLOB var/obj/structure/blob/core/core = new(T, C, 3) core.lateblobtimer() + qdel(blobmind) // Delete the old mind. THe blob will make a new one else new /obj/structure/blob/core(T) // Ghosts will be prompted to control it. if(ismob(loc)) // in case some taj/etc ate the mouse.