diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 3c2a4f1095a..e0244a59b29 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -551,7 +551,7 @@ else make_new_construct(/mob/living/basic/construct/harvester, target, creator, cultoverride, loc_override) -/proc/make_new_construct(mob/living/basic/construct/ctype, mob/target, mob/stoner = null, cultoverride = FALSE, loc_override = null) +/proc/make_new_construct(mob/living/basic/construct/ctype, mob/target, mob/stoner = null, cultoverride = FALSE, loc_override = null, ghost_activated = FALSE) if(QDELETED(target)) return var/mob/living/basic/construct/newstruct = new ctype(loc_override || get_turf(target)) @@ -565,7 +565,13 @@ var/datum/action/innate/seek_master/seek_master = new seek_master.Grant(newstruct) - if (!target.ckey || isnull(target.mind) || is_banned_from(target.ckey, ROLE_CULTIST)) + if(ghost_activated) + if(isnull(target.mind)) + newstruct.PossessByPlayer(target.ckey) + else + target.mind.transfer_to(newstruct, force_key_move = TRUE) + + else if (!target.ckey || isnull(target.mind) || is_banned_from(target.ckey, ROLE_CULTIST)) to_chat(stoner, span_userdanger("Shell imbuement failed!")) to_chat(stoner, span_warning("The soul has already fled its mortal frame. You attempt to bring it back...")) target = SSpolling.poll_ghosts_for_target( @@ -598,7 +604,7 @@ var/atom/movable/screen/alert/bloodsense/sense_alert if(newstruct.mind && !IS_CULTIST(newstruct) && ((stoner && IS_CULTIST(stoner)) || cultoverride) && SSticker.HasRoundStarted()) newstruct.mind.add_antag_datum(/datum/antagonist/cult/construct) - if(IS_CULTIST(stoner) || cultoverride) + if(cultoverride || (stoner && IS_CULTIST(stoner))) to_chat(newstruct, span_cult_bold("You are still bound to serve the cult[stoner ? " and [stoner]" : ""], follow [stoner?.p_their() || "their"] orders and help [stoner?.p_them() || "them"] complete [stoner?.p_their() || "their"] goals at all costs.")) else if(stoner) to_chat(newstruct, span_boldwarning("You are still bound to serve your creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.")) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 4859bb547ab..8a21b8274ea 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -146,8 +146,11 @@ log_admin("[key_name(usr)] has triggered the Nar'Sie roundender.") start_ending_the_round() -/obj/narsie/attack_ghost(mob/user) - make_new_construct(/mob/living/basic/construct/harvester, user, cultoverride = TRUE, loc_override = loc) +/obj/narsie/attack_ghost(mob/dead/observer/user) + if(is_banned_from(user.ckey, ROLE_CULTIST)) + return + if(tgui_alert(user, "Do you wish to become an occult harvester?", "Become Harvester?", list("Yes", "No"), timeout = 10 SECONDS) == "Yes") + make_new_construct(/mob/living/basic/construct/harvester, user, cultoverride = TRUE, loc_override = loc, ghost_activated = TRUE) /obj/narsie/process() var/datum/component/singularity/singularity_component = singularity.resolve()