diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 104646170d..c7ee4e93f8 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -500,53 +500,6 @@ ++i return L -/proc/pollCultists(var/mob/living/Nominee) // Cult Master Poll - if(world.time < CULT_POLL_WAIT) - to_chat(Nominee, "It would be premature to select a leader while everyone is still settling in, try again in [round((CULT_POLL_WAIT-world.time)/10)] seconds.") - return - for(var/datum/mind/B in SSticker.mode.cult) - if(B.current) - B.current.verbs -= /mob/living/proc/cult_master - if(!B.current.incapacitated()) - B.current << 'sound/hallucinations/im_here1.ogg' - to_chat(B.current, "Acolyte [Nominee] has asserted that they are worthy of leading the cult. A vote will be called shortly.") - sleep(250) - var/list/asked_cultists = list() - for(var/datum/mind/B in SSticker.mode.cult) - if(B.current && B.current != Nominee && !B.current.incapacitated()) - B.current << 'sound/magic/exit_blood.ogg' - asked_cultists += B.current - var/list/yes_voters = pollCandidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 1200, group = asked_cultists) - sleep(300) - if(QDELETED(Nominee) || Nominee.incapacitated()) - for(var/datum/mind/B in SSticker.mode.cult) - if(B.current) - B.current.verbs += /mob/living/proc/cult_master - if(!B.current.incapacitated()) - to_chat(B.current,"[Nominee] has died in the process of attempting to win the cult's support!") - return FALSE - if(!Nominee.mind) - for(var/datum/mind/B in SSticker.mode.cult) - if(B.current) - B.current.verbs += /mob/living/proc/cult_master - if(!B.current.incapacitated()) - to_chat(B.current,"[Nominee] has gone insane and catatonic in the process of attempting to win the cult's support!") - return FALSE - if(LAZYLEN(yes_voters) <= LAZYLEN(asked_cultists) * 0.5) - for(var/datum/mind/B in SSticker.mode.cult) - if(B.current) - B.current.verbs += /mob/living/proc/cult_master - if(!B.current.incapacitated()) - to_chat(B.current, "[Nominee] could not win the cult's support and shall continue to serve as an acolyte.") - return FALSE - SSticker.mode.remove_cultist(Nominee.mind, FALSE) - Nominee.mind.add_antag_datum(ANTAG_DATUM_CULT_MASTER) - GLOB.cult_mastered = TRUE - for(var/datum/mind/B in SSticker.mode.cult) - if(!B.current.incapacitated()) - to_chat(B.current,"[Nominee] has won the cult's support and is now their master. Follow [Nominee.p_their()] orders to the best of your ability!") - return TRUE - /proc/poll_helper(var/mob/living/M) /proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character @@ -599,4 +552,4 @@ return hex2num(copytext(hexa, 4, 6)) /proc/GetBluePart(const/hexa) - return hex2num(copytext(hexa, 6, 8)) + return hex2num(copytext(hexa, 6, 8)) \ No newline at end of file diff --git a/code/_globalvars/game_modes.dm b/code/_globalvars/game_modes.dm index 299113795d..7747a6fb93 100644 --- a/code/_globalvars/game_modes.dm +++ b/code/_globalvars/game_modes.dm @@ -9,6 +9,7 @@ GLOBAL_VAR_INIT(blood_target, null) // Cult Master's target or Construct's Maste GLOBAL_DATUM(blood_target_image, /image) GLOBAL_DATUM(sac_mind, /datum/mind) GLOBAL_VAR_INIT(sac_image, null) +GLOBAL_VAR_INIT(cult_vote_called, FALSE) GLOBAL_VAR_INIT(cult_mastered, FALSE) GLOBAL_VAR_INIT(reckoning_complete, FALSE) GLOBAL_VAR_INIT(sac_complete, FALSE) \ No newline at end of file diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 7cbd997db6..00e6729a6f 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -290,27 +290,28 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." if(Cviewer) if(Cviewer.seeking && Cviewer.master) blood_target = Cviewer.master - if(!blood_target && !GLOB.sac_complete) - if(icon_state == "runed_sense0") - return - animate(src, transform = null, time = 1, loop = 0) - angle = 0 - cut_overlays() - icon_state = "runed_sense0" - desc = "Nar-Sie demands that [GLOB.sac_mind] be sacrificed before the summoning ritual can begin." - add_overlay(GLOB.sac_image) - return - if(!blood_target && GLOB.sac_complete) - if(icon_state == "runed_sense1") - return - animate(src, transform = null, time = 1, loop = 0) - angle = 0 - cut_overlays() - icon_state = "runed_sense1" - desc = "The sacrifice is complete, prepare to summon Nar-Sie!" - add_overlay(narnar) - return if(!blood_target) + if(!GLOB.sac_complete) + if(icon_state == "runed_sense0") + return + animate(src, transform = null, time = 1, loop = 0) + angle = 0 + cut_overlays() + icon_state = "runed_sense0" + desc = "Nar-Sie demands that [GLOB.sac_mind] be sacrificed before the summoning ritual can begin." + add_overlay(GLOB.sac_image) + else + if(SSticker.mode.eldergod) + desc = "The sacrifice is complete, prepare to summon Nar-Sie!" + else + desc = "The summoning is complete, glory to Nar-Sie!" + if(icon_state == "runed_sense1") + return + animate(src, transform = null, time = 1, loop = 0) + angle = 0 + cut_overlays() + icon_state = "runed_sense1" + add_overlay(narnar) return var/turf/P = get_turf(blood_target) var/turf/Q = get_turf(mob_viewer) @@ -703,4 +704,3 @@ so as to remain in compliance with the most up-to-date laws." severity = 0 master = null screen_loc = "" - diff --git a/code/datums/antagonists/datum_cult.dm b/code/datums/antagonists/datum_cult.dm index 346c88e6b1..ef11dd8b16 100644 --- a/code/datums/antagonists/datum_cult.dm +++ b/code/datums/antagonists/datum_cult.dm @@ -1,8 +1,10 @@ /datum/antagonist/cult - var/datum/action/innate/cultcomm/communion = new + var/datum/action/innate/cult/comm/communion = new + var/datum/action/innate/cult/mastervote/vote = new /datum/antagonist/cult/Destroy() QDEL_NULL(communion) + QDEL_NULL(vote) return ..() /datum/antagonist/cult/proc/add_objectives() @@ -79,7 +81,7 @@ current.grant_language(/datum/language/narsie) current.verbs += /mob/living/proc/cult_help if(!GLOB.cult_mastered) - current.verbs += /mob/living/proc/cult_master + vote.Grant(current) communion.Grant(current) current.throw_alert("bloodsense", /obj/screen/alert/bloodsense) @@ -91,10 +93,8 @@ current.faction -= "cult" current.remove_language(/datum/language/narsie) current.verbs -= /mob/living/proc/cult_help + vote.Remove(current) communion.Remove(current) - owner.current.verbs -= /mob/living/proc/cult_master - for(var/datum/action/innate/cultmast/H in owner.current.actions) - qdel(H) current.clear_alert("bloodsense") /datum/antagonist/cult/on_removal() @@ -110,8 +110,8 @@ . = ..() /datum/antagonist/cult/master - var/datum/action/innate/cultmast/finalreck/reckoning = new - var/datum/action/innate/cultmast/cultmark/bloodmark = new + var/datum/action/innate/cult/master/finalreck/reckoning = new + var/datum/action/innate/cult/master/cultmark/bloodmark = new /datum/antagonist/cult/master/Destroy() QDEL_NULL(reckoning) @@ -147,4 +147,4 @@ reckoning.Remove(current) bloodmark.Remove(current) current.update_action_buttons_icon() - current.remove_status_effect(/datum/status_effect/cult_master) + current.remove_status_effect(/datum/status_effect/cult_master) \ No newline at end of file diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 6b44109c9c..9b0f4a91e6 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -169,7 +169,7 @@ opentime = 0 /datum/browser/alert/proc/wait() - while (opentime && selectedbutton <= 0 && (!timeout || opentime+timeout >= world.time)) + while (opentime && selectedbutton <= 0 && (!timeout || opentime+timeout > world.time)) stoplag() /datum/browser/alert/Topic(href,href_list) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 3b30d3e44a..28c22d695a 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -152,12 +152,12 @@ cult_mind.current.Paralyse(5) return 1 -/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, show_message = 1, stun) +/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, silent, stun) if(cult_mind.current) var/datum/antagonist/cult/cult_datum = cult_mind.has_antag_datum(ANTAG_DATUM_CULT) if(!cult_datum) return FALSE - cult_datum.silent = show_message + cult_datum.silent = silent cult_datum.on_removal() if(stun) cult_mind.current.Paralyse(5) @@ -187,7 +187,7 @@ if(cult_objectives.Find("eldergod")) cult_fail += eldergod //1 by default, 0 if the elder god has been summoned at least once if(cult_objectives.Find("sacrifice")) - if(GLOB.sac_mind && GLOB.sac_complete) //if the target has been GLOB.sacrificed, ignore this step. otherwise, add 1 to cult_fail + if(GLOB.sac_mind && !GLOB.sac_complete) //if the target has been GLOB.sacrificed, ignore this step. otherwise, add 1 to cult_fail cult_fail++ return cult_fail //if any objectives aren't met, failure @@ -295,4 +295,4 @@ SSblackbox.add_details("cult_objective","cult_narsie|FAIL") SSticker.news_report = CULT_FAILURE text += "
Objective #[obj_count]: [explanation]" - to_chat(world, text) + to_chat(world, text) \ No newline at end of file diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm index ffaaf46b80..781714c716 100644 --- a/code/game/gamemodes/cult/cult_comms.dm +++ b/code/game/gamemodes/cult/cult_comms.dm @@ -1,19 +1,21 @@ // Contains cult communion, guide, and cult master abilities #define MARK_COOLDOWN -/datum/action/innate/cultcomm - name = "Communion" - button_icon_state = "cult_comms" +/datum/action/innate/cult background_icon_state = "bg_demon" buttontooltipstyle = "cult" check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_CONSCIOUS -/datum/action/innate/cultcomm/IsAvailable() +/datum/action/innate/cult/IsAvailable() if(!iscultist(owner)) - return 0 + return FALSE return ..() -/datum/action/innate/cultcomm/Activate() +/datum/action/innate/cult/comm + name = "Communion" + button_icon_state = "cult_comms" + +/datum/action/innate/cult/comm/Activate() var/input = stripped_input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") if(!input || !IsAvailable()) return @@ -84,22 +86,82 @@ set name = "Assert Leadership" pollCultists(src) // This proc handles the distribution of cult master actions -/datum/action/innate/cultmast - background_icon_state = "bg_demon" - buttontooltipstyle = "cult" - check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_CONSCIOUS +/datum/action/innate/cult/mastervote + name = "Assert Leadership" + button_icon_state = "cultvote" -/datum/action/innate/cultmast/IsAvailable() +/datum/action/innate/cult/mastervote/IsAvailable() + if(GLOB.cult_vote_called) + return FALSE + return ..() + +/datum/action/innate/cult/mastervote/Activate() + pollCultists(owner) + +/proc/pollCultists(var/mob/living/Nominee) //Cult Master Poll + if(world.time < CULT_POLL_WAIT) + to_chat(Nominee, "It would be premature to select a leader while everyone is still settling in, try again in [round((CULT_POLL_WAIT-world.time)/10)] seconds.") + return + GLOB.cult_vote_called = TRUE //somebody's trying to be a master, make sure we don't let anyone else try + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + B.current.update_action_buttons_icon() + if(!B.current.incapacitated()) + B.current << 'sound/hallucinations/im_here1.ogg' + to_chat(B.current, "Acolyte [Nominee] has asserted that they are worthy of leading the cult. A vote will be called shortly.") + sleep(100) + var/list/asked_cultists = list() + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current && B.current != Nominee && !B.current.incapacitated()) + B.current << 'sound/magic/exit_blood.ogg' + asked_cultists += B.current + var/list/yes_voters = pollCandidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 300, group = asked_cultists) + if(QDELETED(Nominee) || Nominee.incapacitated()) + GLOB.cult_vote_called = FALSE + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + B.current.update_action_buttons_icon() + if(!B.current.incapacitated()) + to_chat(B.current,"[Nominee] has died in the process of attempting to win the cult's support!") + return FALSE + if(!Nominee.mind) + GLOB.cult_vote_called = FALSE + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + B.current.update_action_buttons_icon() + if(!B.current.incapacitated()) + to_chat(B.current,"[Nominee] has gone catatonic in the process of attempting to win the cult's support!") + return FALSE + if(LAZYLEN(yes_voters) <= LAZYLEN(asked_cultists) * 0.5) + GLOB.cult_vote_called = FALSE + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + B.current.update_action_buttons_icon() + if(!B.current.incapacitated()) + to_chat(B.current, "[Nominee] could not win the cult's support and shall continue to serve as an acolyte.") + return FALSE + GLOB.cult_mastered = TRUE + SSticker.mode.remove_cultist(Nominee.mind, FALSE) + Nominee.mind.add_antag_datum(ANTAG_DATUM_CULT_MASTER) + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + for(var/datum/action/innate/cult/mastervote/vote in B.current.actions) + vote.Remove(B.current) + if(!B.current.incapacitated()) + to_chat(B.current,"[Nominee] has won the cult's support and is now their master. Follow [Nominee.p_their()] orders to the best of your ability!") + return TRUE + +/datum/action/innate/cult/master/IsAvailable() if(!owner.mind || !owner.mind.has_antag_datum(ANTAG_DATUM_CULT_MASTER)) return 0 return ..() -/datum/action/innate/cultmast/finalreck +/datum/action/innate/cult/master/finalreck name = "Final Reckoning" desc = "A single-use spell that brings the entire cult to the master's location." button_icon_state = "sintouch" -/datum/action/innate/cultmast/finalreck/Activate() +/datum/action/innate/cult/master/finalreck/Activate() for(var/i in 1 to 4) chant(i) var/list/destinations = list() @@ -126,8 +188,11 @@ if(4) playsound(mobloc, 'sound/magic/exit_blood.ogg', 100, 1) if(B.current != owner) - B.current.setDir(SOUTH) var/turf/final = pick(destinations) + if(istype(B.current.loc, /obj/item/device/soulstone)) + var/obj/item/device/soulstone/S = B.current.loc + S.release_shades(owner) + B.current.setDir(SOUTH) new /obj/effect/overlay/temp/cult/blood(final) addtimer(CALLBACK(B.current, /mob/.proc/reckon, final), 10) else @@ -139,7 +204,7 @@ new /obj/effect/overlay/temp/cult/blood/out(get_turf(src)) forceMove(final) -/datum/action/innate/cultmast/finalreck/proc/chant(chant_number) +/datum/action/innate/cult/master/finalreck/proc/chant(chant_number) switch(chant_number) if(1) owner.say("C'arta forbici!", language = /datum/language/common) @@ -153,7 +218,7 @@ owner.say("N'ath reth sh'yro eth d'rekkathnor!!!", language = /datum/language/common) playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 100, 1) -/datum/action/innate/cultmast/cultmark +/datum/action/innate/cult/master/cultmark name = "Mark Target" desc = "Marks a target for the cult." button_icon_state = "cult_mark" @@ -161,32 +226,32 @@ var/cooldown = 0 var/base_cooldown = 1200 -/datum/action/innate/cultmast/cultmark/New() +/datum/action/innate/cult/master/cultmark/New() CM = new() CM.attached_action = src ..() -/datum/action/innate/cultmast/cultmark/IsAvailable() +/datum/action/innate/cult/master/cultmark/IsAvailable() if(!owner.mind || !owner.mind.has_antag_datum(ANTAG_DATUM_CULT_MASTER)) - return 0 + return FALSE if(cooldown > world.time) if(!CM.active) owner << "You need to wait [round((cooldown - world.time) * 0.1)] seconds before you can mark another target!" - return 0 + return FALSE return ..() -/datum/action/innate/cultmast/cultmark/Destroy() +/datum/action/innate/cult/master/cultmark/Destroy() QDEL_NULL(CM) return ..() -/datum/action/innate/cultmast/cultmark/Activate() +/datum/action/innate/cult/master/cultmark/Activate() CM.toggle(owner) //the important bit return TRUE /obj/effect/proc_holder/cultmark active = FALSE ranged_mousepointer = 'icons/effects/cult_target.dmi' - var/datum/action/innate/cultmast/cultmark/attached_action + var/datum/action/innate/cult/master/cultmark/attached_action /obj/effect/proc_holder/cultmark/Destroy() attached_action = null diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index fca7d1ac1c..8c01d361c0 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -29,13 +29,13 @@ To draw a rune, use an arcane tome. var/invocation = "Aiy ele-mayo!" //This is said by cultists when the rune is invoked. var/req_cultists = 1 //The amount of cultists required around the rune to invoke it. If only 1, any cultist can invoke it. var/req_cultists_text //if we have a description override for required cultists to invoke - var/rune_in_use = 0 // Used for some runes, this is for when you want a rune to not be usable when in use. + var/rune_in_use = FALSE // Used for some runes, this is for when you want a rune to not be usable when in use. var/scribe_delay = 50 //how long the rune takes to create var/scribe_damage = 0.1 //how much damage you take doing it - var/allow_excess_invokers = 0 //if we allow excess invokers when being invoked - var/construct_invoke = 1 //if constructs can invoke it + var/allow_excess_invokers = FALSE //if we allow excess invokers when being invoked + var/construct_invoke = TRUE //if constructs can invoke it var/req_keyword = 0 //If the rune requires a keyword - go figure amirite var/keyword //The actual keyword for the rune @@ -148,7 +148,8 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/proc/fail_invoke() //This proc contains the effects of a rune if it is not invoked correctly, through either invalid wording or not enough cultists. By default, it's just a basic fizzle. - visible_message("The markings pulse with a small flash of red light, then fall dark.") + visible_message("The markings pulse with a \ + small flash of red light, then fall dark.") var/oldcolor = color color = rgb(255, 0, 0) animate(src, color = oldcolor, time = 5) @@ -228,14 +229,12 @@ structure_check() searches for nearby cultist structures required for the invoca var/obj/item/weapon/paper/paper_to_imbue = papers_on_rune[1] ..() visible_message("Dark power begins to channel into the paper!") - rune_in_use = 1 - if(!do_after(user, initial(talisman_type.creation_time), target = paper_to_imbue)) - rune_in_use = 0 - return - new talisman_type(get_turf(src)) - visible_message("[src] glows with power, and bloody images form themselves on [paper_to_imbue].") - qdel(paper_to_imbue) - rune_in_use = 0 + rune_in_use = TRUE + if(do_after(user, initial(talisman_type.creation_time), target = paper_to_imbue)) + new talisman_type(get_turf(src)) + visible_message("[src] glows with power, and bloody images form themselves on [paper_to_imbue].") + qdel(paper_to_imbue) + rune_in_use = FALSE /obj/effect/rune/imbue/proc/checkpapers() . = list() @@ -249,7 +248,7 @@ structure_check() searches for nearby cultist structures required for the invoca invocation = "Sas'so c'arta forbici!" icon_state = "2" color = "#551A8B" - req_keyword = 1 + req_keyword = TRUE var/listkey /obj/effect/rune/teleport/Initialize(mapload, set_keyword) @@ -296,23 +295,22 @@ structure_check() searches for nearby cultist structures required for the invoca to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.") fail_invoke() return - var/movedsomething = 0 - var/moveuserlater = 0 + var/movedsomething = FALSE + var/moveuserlater = FALSE for(var/atom/movable/A in T) if(A == user) - moveuserlater = 1 - movedsomething = 1 + moveuserlater = TRUE + movedsomething = TRUE continue if(!A.anchored) - movedsomething = 1 + movedsomething = TRUE A.forceMove(target) if(movedsomething) ..() - visible_message("There is a sharp crack of inrushing air, and everything above the rune disappears!", null, "You hear a sharp crack.") + visible_message("There is a sharp crack of inrushing air, and everything above the rune disappears!") to_chat(user, "You[moveuserlater ? "r vision blurs, and you suddenly appear somewhere else":" send everything above the rune away"].") if(moveuserlater) user.forceMove(target) - target.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.") else fail_invoke() @@ -326,7 +324,7 @@ structure_check() searches for nearby cultist structures required for the invoca icon_state = "3" color = "#FFFFFF" req_cultists = 1 - allow_excess_invokers = 1 + allow_excess_invokers = TRUE rune_in_use = FALSE /obj/effect/rune/convert/do_invoke_glow() @@ -450,8 +448,7 @@ structure_check() searches for nearby cultist structures required for the invoca pixel_y = -32 scribe_delay = 450 //how long the rune takes to create scribe_damage = 40.1 //how much damage you take doing it - var/used - var/ignore_gamemode = TRUE + var/used = FALSE /obj/effect/rune/narsie/Initialize(mapload, set_keyword) . = ..() @@ -470,33 +467,20 @@ structure_check() searches for nearby cultist structures required for the invoca if(z != ZLEVEL_STATION) return - var/datum/game_mode/cult/cult_mode - - if(SSticker.mode.name == "cult") - cult_mode = SSticker.mode - - if(!cult_mode && !ignore_gamemode) - for(var/M in invokers) - to_chat(M, "Nar-Sie does not respond!") - fail_invoke() - log_game("Summon Nar-Sie rune failed - gametype is not cult") - return - if(locate(/obj/singularity/narsie) in GLOB.poi_list) for(var/M in invokers) to_chat(M, "Nar-Sie is already on this plane!") log_game("Summon Nar-Sie rune failed - already summoned") return //BEGIN THE SUMMONING - used = 1 + used = TRUE ..() send_to_playing_players('sound/effects/dimensional_rend.ogg') var/turf/T = get_turf(src) sleep(40) if(src) color = "#FF0000" - if(cult_mode) - cult_mode.eldergod = 0 + SSticker.mode.eldergod = FALSE new /obj/singularity/narsie/large(T) //Causes Nar-Sie to spawn even if the rune has been removed /obj/effect/rune/narsie/attackby(obj/I, mob/user, params) //Since the narsie rune takes a long time to make, add logging to removal. @@ -514,7 +498,7 @@ structure_check() searches for nearby cultist structures required for the invoca //Rite of Resurrection: Requires the corpse of a cultist and that there have been less revives than the number of people GLOB.sacrificed /obj/effect/rune/raise_dead - cultist_name = "Raise Dead" + cultist_name = "Resurrect Cultist" cultist_desc = "requires the corpse of a cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be revived." invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" //Depends on the name of the user - see below icon_state = "1" @@ -960,4 +944,4 @@ structure_check() searches for nearby cultist structures required for the invoca "Your link to the world fades. Your form breaks apart.") for(var/obj/I in new_human) new_human.dropItemToGround(I) - new_human.dust() + new_human.dust() \ No newline at end of file diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 09412a79ac..d3aeef178c 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -69,6 +69,9 @@ user.Paralyse(5) to_chat(user, "Your body is wracked with debilitating pain!") return + release_shades(user) + +/obj/item/device/soulstone/proc/release_shades(mob/user) for(var/mob/living/simple_animal/shade/A in src) A.status_flags &= ~GODMODE A.canmove = 1 diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 988ae8bdc8..36bf21cf76 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ