From fa55b253b01f784389030e4b03ff81852d54f8f7 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 16 Nov 2019 13:49:06 -0500 Subject: [PATCH] Constructs/Shades removed from cult on death, and logged as antags if made by wizard/cultist. Shades now properly deleted when construct is created. --- code/game/gamemodes/wizard/soulstone.dm | 70 +++++-------------- .../mob/living/simple_animal/constructs.dm | 4 ++ .../modules/mob/living/simple_animal/shade.dm | 3 + 3 files changed, 26 insertions(+), 51 deletions(-) diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index b3643d3d38a..09a8643802d 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -172,7 +172,7 @@ was_used() attack_self(U) -///////////////////////////Transferring to constructs///////////////////////////////////////////////////// +///////////////////////////Transferring to fs///////////////////////////////////////////////////// /obj/structure/constructshell name = "empty shell" icon = 'icons/obj/wizard.dmi' @@ -263,64 +263,30 @@ switch(construct_class) if("Juggernaut") var/mob/living/simple_animal/hostile/construct/armoured/Z = new /mob/living/simple_animal/hostile/construct/armoured (get_turf(T.loc)) - Z.key = A.key - Z.faction |= "\ref[U]" - Z.mind.store_memory(A.mind.memory) - if(iscultist(U)) - if(SSticker.mode.name == "cult") - SSticker.mode:add_cultist(Z.mind) - else - SSticker.mode.cult+=Z.mind - SSticker.mode.update_cult_icons_added(Z.mind) - if(iswizard(U)) - SSticker.mode.update_wiz_icons_added(Z.mind) - qdel(T) to_chat(Z, "You are a Juggernaut. Though slow, your shell can withstand extreme punishment, create shield walls and even deflect energy weapons, and rip apart enemies and walls alike.") - to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.") - Z.cancel_camera() - qdel(C) + init_construct(Z,A,C,T) if("Wraith") var/mob/living/simple_animal/hostile/construct/wraith/Z = new /mob/living/simple_animal/hostile/construct/wraith (get_turf(T.loc)) - Z.key = A.key - Z.faction |= "\ref[U]" - Z.mind.store_memory(A.mind.memory) - if(iscultist(U)) - if(SSticker.mode.name == "cult") - SSticker.mode:add_cultist(Z.mind) - else - SSticker.mode.cult+=Z.mind - if(iswizard(U)) - SSticker.mode.update_wiz_icons_added(Z.mind) - - qdel(T) to_chat(Z, "You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.") - to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.") - Z.cancel_camera() - qdel(C) + init_construct(Z,A,C,T) if("Artificer") var/mob/living/simple_animal/hostile/construct/builder/Z = new /mob/living/simple_animal/hostile/construct/builder (get_turf(T.loc)) - Z.key = A.key - Z.faction |= "\ref[U]" - Z.mind.store_memory(A.mind.memory) - if(iscultist(U)) - if(SSticker.mode.name == "cult") - SSticker.mode:add_cultist(Z.mind) - else - SSticker.mode.cult+=Z.mind - SSticker.mode.update_cult_icons_added(Z.mind) - if(iswizard(U)) - SSticker.mode.update_wiz_icons_added(Z.mind) - qdel(T) to_chat(Z, "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, use magic missile, repair allied constructs (by clicking on them), and most important of all create new constructs (Use your Artificer spell to summon a new construct shell and Summon Soulstone to create a new soulstone).") - to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.") - Z.cancel_camera() - qdel(C) + init_construct(Z,A,C,T) else to_chat(U, "Creation failed!: The soul stone is empty! Go kill someone!") return +/proc/init_construct(var/mob/living/simple_animal/hostile/construct/wraith/Z, var/mob/living/simple_animal/shade/A, var/obj/item/soulstone/C, var/obj/structure/constructshell/T) + A.mind.transfer_to(Z) + qdel(T) + qdel(A) + to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + Z.cancel_camera() + qdel(C) + /proc/makeNewConstruct(var/mob/living/simple_animal/hostile/construct/ctype, var/mob/target, var/mob/stoner = null, cultoverride = 0) if(jobban_isbanned(target, "cultist") || jobban_isbanned(target, "Syndicate")) return @@ -334,11 +300,11 @@ SSticker.mode.cult+=newstruct.mind SSticker.mode.update_cult_icons_added(newstruct.mind) if(stoner && iswizard(stoner)) - to_chat(newstruct, "You are still bound to serve your creator, follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") + to_chat(newstruct, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") else if(stoner && iscultist(stoner)) - to_chat(newstruct, "You are still bound to serve the cult, follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") + to_chat(newstruct, "You are still bound to serve the cult, follow their orders and help them complete their goals at all costs.") else - to_chat(newstruct, "You are still bound to serve your creator, follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") + to_chat(newstruct, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") newstruct.cancel_camera() /obj/item/soulstone/proc/init_shade(mob/living/T, mob/U, vic = 0) @@ -363,15 +329,17 @@ S.mind.store_memory("Serve [U.real_name], your creator.") if(U && iscultist(U)) SSticker.mode.add_cultist(S.mind, 0) + S.mind.special_role = SPECIAL_ROLE_CULTIST if(U && iswizard(U)) SSticker.mode.update_wiz_icons_added(S.mind) + S.mind.special_role = SPECIAL_ROLE_WIZARD_APPRENTICE S.cancel_camera() name = "soulstone: Shade of [T.real_name]" icon_state = "soulstone2" if(U && iswizard(U)) - to_chat(S, "Your soul has been captured! You are now bound to [U.real_name]'s will. Help [U.p_them()] succeed in their goals at all costs.") + to_chat(S, "Your soul has been captured! You are now bound to [U.real_name]'s will. Help them succeed in their goals at all costs.") else if(U && iscultist(U)) - to_chat(S, "Your soul has been captured! You are now bound to the cult's will. Help [U.p_them()] succeed in their goals at all costs.") + to_chat(S, "Your soul has been captured! You are now bound to the cult's will. Help them succeed in their goals at all costs.") if(vic && U) to_chat(U, "Capture successful!: [T.real_name]'s soul has been ripped from [U.p_their()] body and stored within the soul stone.") if(isrobot(T))//Robots have to dust or else they spill out an empty robot brain, and unequiping them spills robot components that shouldn't spawn. diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 0c003b9e3b8..a51d2dcefc1 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -47,6 +47,10 @@ if(SSticker.cultdat?.theme == "blood") updateglow() +/mob/living/simple_animal/hostile/construct/death(gibbed) + . = ..() + SSticker.mode.remove_cultist(src.mind, FALSE) + /mob/living/simple_animal/hostile/construct/examine(mob/user) . = ..() diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 3f7b76c5af0..948c16314c9 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -28,6 +28,9 @@ del_on_death = 1 deathmessage = "lets out a contented sigh as their form unwinds." +/mob/living/simple_animal/shade/death(gibbed) + . = ..() + SSticker.mode.remove_cultist(src.mind, FALSE) /mob/living/simple_animal/shade/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri if(istype(O, /obj/item/soulstone))