From ce2615c6584e24e4be353e563c64230261c3d677 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 20 Oct 2017 17:46:15 -0400 Subject: [PATCH 1/7] bugsandrunes --- code/game/gamemodes/cult/cult_items.dm | 44 ++- code/game/gamemodes/cult/cult_objectives.dm | 40 +-- code/game/gamemodes/cult/ritual.dm | 2 +- code/game/gamemodes/cult/runes.dm | 293 +++++++++++--------- icons/mob/suit.dmi | Bin 447992 -> 450351 bytes icons/obj/clothing/suits.dmi | Bin 138531 -> 139328 bytes 6 files changed, 226 insertions(+), 153 deletions(-) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 876748838ae..8ae169e6fce 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -117,10 +117,10 @@ armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) /obj/item/clothing/suit/space/cult - name = "cult armour" + name = "cult armor" icon_state = "cult_armour" item_state = "cult_armour" - desc = "A bulky suit of armour, bristling with spikes. It looks space proof." + desc = "A bulky suit of armor, bristling with spikes. It looks space proof." w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank) slowdown = 1 @@ -334,3 +334,43 @@ else to_chat(C, "The veil cannot be torn here!") + + +/obj/item/weapon/melee/cultblade/ghost + name = "eldritch sword" + force = 15 + flags = NODROP + +/obj/item/weapon/melee/cultblade/ghost/dropped(mob/living/carbon/human/user) + ..() + qdel(src) + +/obj/item/clothing/head/culthood/alt/ghost + flags = NODROP + +/obj/item/clothing/head/culthood/alt/ghost/dropped(mob/living/carbon/human/user) + ..() + qdel(src) + +/obj/item/clothing/suit/cultrobes/alt/ghost + flags = NODROP + +/obj/item/clothing/suit/cultrobes/alt/ghost/dropped(mob/living/carbon/human/user) + ..() + qdel(src) + +/obj/item/clothing/shoes/cult/ghost + flags = NODROP + +/obj/item/clothing/shoes/cult/ghost/dropped(mob/living/carbon/human/user) + ..() + qdel(src) + +/datum/outfit/ghost_cultist + name = "Cultist Ghost" + + uniform = /obj/item/clothing/under/color/black + suit = /obj/item/clothing/suit/cultrobes/alt/ghost + shoes = /obj/item/clothing/shoes/cult/ghost + head = /obj/item/clothing/head/culthood/alt/ghost + r_hand = /obj/item/weapon/melee/cultblade/ghost \ No newline at end of file diff --git a/code/game/gamemodes/cult/cult_objectives.dm b/code/game/gamemodes/cult/cult_objectives.dm index 69b6de0c73e..d489387ad76 100644 --- a/code/game/gamemodes/cult/cult_objectives.dm +++ b/code/game/gamemodes/cult/cult_objectives.dm @@ -21,10 +21,10 @@ if("convert") explanation = "We must increase our influence before we can summon [ticker.mode.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions." if("bloodspill") - spilltarget = 70 + rand(0,player_list.len * 3) + spilltarget = 100 + rand(0,player_list.len * 3) explanation = "We must prepare this place for [ticker.mode.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles." if("sacrifice") - explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for his blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." + explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for their blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." for(var/datum/mind/cult_mind in cult) to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]") @@ -47,7 +47,7 @@ message_admins("Picking a new Cult objective.") var/new_objective = "eldergod" //the idea here is that if the cult performs well, the should get more objectives before they can summon Nar-Sie. - if(cult.len >= 4)//if there are less than 4 remaining cultists, they get a free pass to the summon objective. + if(cult.len >= 4) //if there are less than 4 remaining cultists, they get a free pass to the summon objective. if(current_objective <= prenarsie_objectives) var/list/unconvertables = get_unconvertables() if(unconvertables.len <= (cult.len * 2))//if cultists are getting radically outnumbered, they get a free pass to the summon objective. @@ -81,12 +81,13 @@ spilltarget = 100 + rand(0,player_list.len * 3) explanation = "We must prepare this place for [ticker.mode.cultdat.entity_title1]'s coming. Spread blood and gibs over [spilltarget] of the Station's floor tiles." if("sacrifice") - explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for his blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." + explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for their blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." for(var/datum/mind/cult_mind in cult) - to_chat(cult_mind.current, "You and your acolytes have completed your task, but this place requires yet more preparation!") - to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]") - cult_mind.memory += "Objective #[current_objective]: [explanation]
" + if(cult_mind) + to_chat(cult_mind.current, "You and your acolytes have completed your task, but this place requires yet more preparation!") + to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]") + cult_mind.memory += "Objective #[current_objective]: [explanation]
" message_admins("New Cult Objective: [new_objective]") log_admin("New Cult Objective: [new_objective]") @@ -95,12 +96,13 @@ /datum/game_mode/cult/proc/gtfo_phase()//YOU HAD ONE JOB var/explanation - objectives +="survive" + objectives += "survive" explanation = "Our knowledge must live on. Make sure at least [acolytes_needed] acolytes escape on the shuttle to spread their work on an another station." for(var/datum/mind/cult_mind in cult) - to_chat(cult_mind.current, "You and your acolytes suddenly feel the urge to do your best, but survive!") - to_chat(cult_mind.current, "Objective Survive: [explanation]") - cult_mind.memory += "Objective Survive: [explanation]
" + if(cult_mind) + to_chat(cult_mind.current, "You and your acolytes suddenly feel the urge to do your best, but survive!") + to_chat(cult_mind.current, "Objective Survive: [explanation]") + cult_mind.memory += "Objective Survive: [explanation]
" /datum/game_mode/cult/proc/second_phase() @@ -115,9 +117,10 @@ explanation = "Bring the Slaughter via the rune 'Bring forth the slaughter'. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin." for(var/datum/mind/cult_mind in cult) - to_chat(cult_mind.current, "You and your acolytes have succeeded in preparing the station for the ultimate ritual!") - to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]") - cult_mind.memory += "Objective #[current_objective]: [explanation]
" + if(cult_mind) + to_chat(cult_mind.current, "You and your acolytes have succeeded in preparing the station for the ultimate ritual!") + to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]") + cult_mind.memory += "Objective #[current_objective]: [explanation]
" /datum/game_mode/cult/proc/third_phase() current_objective++ @@ -132,15 +135,16 @@ switch(last_objective) if("harvest") - explanation = "[ticker.mode.cultdat.entity_title1] hungers for his first meal of this never-ending day. Offer him [harvest_target] humans in sacrifice." + explanation = "[ticker.mode.cultdat.entity_title1] hungers for their first meal of this never-ending day. Offer them [harvest_target] humans in sacrifice." if("hijack") - explanation = "[ticker.mode.cultdat.entity_name] wishes for his troops to start the assault on Centcom immediately. Hijack the escape shuttle and don't let a single non-cultist board it." + explanation = "[ticker.mode.cultdat.entity_name] wishes for their troops to start the assault on Centcom immediately. Hijack the escape shuttle and don't let a single non-cultist board it." if("massacre") explanation = "[ticker.mode.cultdat.entity_name] wants to watch you as you massacre the remaining humans on the station (until less than [massacre_target] humans are left alive)." for(var/datum/mind/cult_mind in cult) - to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]") - cult_mind.memory += "Objective #[current_objective]: [explanation]
" + if(cult_mind) + to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]") + cult_mind.memory += "Objective #[current_objective]: [explanation]
" message_admins("Last Cult Objective: [last_objective]") log_admin("Last Cult Objective: [last_objective]") diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 55d2a51de61..358291d8c42 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -293,7 +293,7 @@ var/mob/living/carbon/human/H = user var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot") var/obj/item/organ/external/affecting = H.get_organ(ran_zone(dam_zone)) - user.visible_message("[user] cuts open their \The [affecting] and begins writing in their own blood!", "You slice open your [affecting] and begin drawing a sigil of [ticker.mode.cultdat.entity_title3].") + user.visible_message("[user] cuts open their [affecting] and begins writing in their own blood!", "You slice open your [affecting] and begin drawing a sigil of [ticker.mode.cultdat.entity_title3].") user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE , affecting) if(!do_after(user, initial(rune_to_scribe.scribe_delay)-scribereduct, target = get_turf(user))) for(var/V in shields) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 892a5e7a204..2af8936176f 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -36,6 +36,8 @@ To draw a rune, use an arcane tome. var/req_keyword = 0 //If the rune requires a keyword - go figure amirite var/keyword //The actual keyword for the rune + var/invoke_damage = 0 //how much damage invokers take when invoking it + /obj/effect/rune/New(loc, set_keyword) ..() @@ -118,6 +120,8 @@ structure_check() searches for nearby cultist structures required for the invoca //This proc determines if the rune can be invoked at the time. If there are multiple required cultists, it will find all nearby cultists. var/list/invokers = list() //people eligible to invoke the rune var/list/chanters = list() //people who will actually chant the rune when passed to invoke() + if(invisibility == 0) + return if(user) chanters |= user invokers |= user @@ -146,11 +150,14 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/proc/invoke(var/list/invokers) //This proc contains the effects of the rune as well as things that happen afterwards. If you want it to spawn an object and then delete itself, have both here. - if(invocation) - for(var/M in invokers) - var/mob/living/L = M + for(var/M in invokers) + var/mob/living/L = M + if(invocation) L.say(invocation) L.changeNext_move(CLICK_CD_MELEE)//THIS IS WHY WE CAN'T HAVE NICE THINGS + if(invoke_damage) + L.apply_damage(invoke_damage, BRUTE) + to_chat(L, "[src] saps your strength!") do_invoke_glow() /obj/effect/rune/proc/burn_invokers(var/list/mobstoburn) @@ -181,13 +188,13 @@ structure_check() searches for nearby cultist structures required for the invoca cultist_name = "malformed rune" cultist_desc = "a senseless rune written in gibberish. No good can come from invoking this." invocation = "Ra'sha yoka!" + invoke_damage = 30 /obj/effect/rune/malformed/invoke(var/list/invokers) ..() for(var/M in invokers) var/mob/living/L = M - to_chat(M, "You feel your life force draining. [ticker.mode.cultdat.entity_title3] is displeased.") - L.apply_damage(30, BRUTE) + to_chat(L, "You feel your life force draining. [ticker.mode.cultdat.entity_title3] is displeased.") qdel(src) /mob/proc/null_rod_check() //The null rod, if equipped, will protect the holder from the effects of most runes @@ -252,6 +259,7 @@ var/list/teleport_runes = list() icon_state = "2" req_keyword = 1 var/listkey + invoke_damage = 6 //but theres some checks for z-level /obj/effect/rune/teleport/New(loc, set_keyword) ..() @@ -316,6 +324,12 @@ var/list/teleport_runes = list() to_chat(user, "You[moveuserlater ? "r vision blurs, and you suddenly appear somewhere else":" send everything above the rune away"].") if(moveuserlater) user.forceMove(get_turf(actual_selected_rune)) + var/mob/living/carbon/human/H = user + if(user.z != T.z) + H.bleed(5) + user.apply_damage(5, BRUTE) + else + H.bleed(rand(5,10)) else fail_invoke() @@ -323,140 +337,131 @@ var/list/teleport_runes = list() //Rite of Enlightenment: Converts a normal crewmember to the cult. Faster for every cultist nearby. /obj/effect/rune/convert cultist_name = "Rite of Enlightenment" - cultist_desc = "converts a normal crewmember on top of it to the cult. Does not work on mindshielded crew." + cultist_desc = "offers a noncultist above it to Nar-Sie, either converting them or sacrificing them." invocation = "Mah'weyh pleggh at e'ntrath!" icon_state = "3" - req_cultists = 2 + + req_cultists = 1 + allow_excess_invokers = TRUE + rune_in_use = FALSE /obj/effect/rune/convert/do_invoke_glow() return /obj/effect/rune/convert/invoke(var/list/invokers) - var/list/convertees = list() var/turf/T = get_turf(src) - for(var/mob/living/M in T.contents) - if(!iscultist(M) && !ismindshielded(M) && ishuman(M)) - convertees.Add(M) - if(!convertees.len) - fail_invoke() - log_game("Convert rune failed - no eligible convertees") - return - var/mob/living/new_cultist = pick(convertees) - if(!is_convertable_to_cult(new_cultist.mind) || new_cultist.null_rod_check()) - for(var/M in invokers) - to_chat(M, "Something is shielding [new_cultist]'s mind!") - if(is_sacrifice_target(new_cultist.mind)) - to_chat(M, "\"I desire this one for myself. SACRIFICE THEM!\"") - fail_invoke() - log_game("Convert rune failed - convertee could not be converted") - return - ..() - - new_cultist.visible_message("[new_cultist] writhes in pain as the markings below them glow a bloody red!", \ - "AAAAAAAAAAAAAA-") - ticker.mode.add_cultist(new_cultist.mind, 1) - new /obj/item/weapon/tome(get_turf(src)) - new_cultist.mind.special_role = "Cultist" - to_chat(new_cultist, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ - and something evil takes root.") - to_chat(new_cultist, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve [ticker.mode.cultdat.entity_title3] above all else. Bring it back.\ - ") - -//Rite of Tribute: Sacrifices a crew member to Nar-Sie. Places them into a soul shard if they're in their body. -/obj/effect/rune/sacrifice - cultist_name = "Rite of Tribute" - cultist_desc = "sacrifices a crew member to your god. May place them into a soul shard if their spirit remains in their body." - icon_state = "3" - allow_excess_invokers = 1 - invocation = "Barhah hra zar'garis!" - rune_in_use = 0 - -/obj/effect/rune/sacrifice/New() - ..() - cultist_desc = "sacrifices a crew member to [ticker.mode.cultdat.entity_title3]. May place them into a soul shard if their spirit remains in their body." - -/obj/effect/rune/sacrifice/invoke(var/list/invokers) if(rune_in_use) return - rune_in_use = 1 - var/mob/living/user = invokers[1] //the first invoker is always the user - var/turf/T = get_turf(src) - var/list/possible_targets = list() - for(var/mob/living/M in T.contents) - if(M.mind) - if(M.mind in sacrificed) - continue - if(!iscultist(M)) - possible_targets.Add(M) - var/mob/offering - if(possible_targets.len > 1) //If there's more than one target, allow choice - offering = input(user, "Choose an offering to sacrifice.", "Unholy Tribute") as null|anything in possible_targets - if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated()) - return - else if(possible_targets.len) //Otherwise, if there's a target at all, pick the only one - offering = possible_targets[possible_targets.len] - if(!offering) - rune_in_use = 0 - return - if(((ishuman(offering) || isrobot(offering)) && offering.stat != DEAD) || is_sacrifice_target(offering.mind)) //Requires three people to sacrifice living targets - if(invokers.len < 3) - for(var/M in invokers) - to_chat(M, "[offering] is too greatly linked to the world! You need three acolytes!") - fail_invoke() - log_game("Sacrifice rune failed - not enough acolytes and target is living") - rune_in_use = 0 - return - visible_message("[src] pulses blood red!") - color = rgb(126, 23, 23) - ..() - sac(invokers, offering) - color = initial(color) + var/list/myriad_targets = list() -/obj/effect/rune/sacrifice/proc/sac(var/list/invokers, mob/living/T) + for(var/mob/living/M in T) + if(!iscultist(M)) + myriad_targets |= M + if(!myriad_targets.len) + fail_invoke() + log_game("Offer rune failed - no eligible targets") + return + rune_in_use = TRUE + visible_message("[src] pulses blood red!") + var/mob/living/L = pick(myriad_targets) + + + var/is_convertable = is_convertable_to_cult(L) + if(L.stat != DEAD && is_convertable) + do_convert(L, invokers) + else + invocation = "Barhah hra zar'garis!" + ..() + do_sacrifice(L, invokers) + + rune_in_use = FALSE + +/obj/effect/rune/convert/proc/do_convert(mob/living/convertee, list/invokers) + if(invokers.len < 2) + for(var/M in invokers) + to_chat(M, "You need more invokers to convert [convertee]!") + log_game("Offer rune failed - tried conversion with one invoker") + return 0 + if(convertee.null_rod_check()) + for(var/M in invokers) + to_chat(M, "Something is shielding [convertee]'s mind!") + log_game("Offer rune failed - convertee had null rod") + return 0 + var/brutedamage = convertee.getBruteLoss() + var/burndamage = convertee.getFireLoss() + if(brutedamage || burndamage) + convertee.adjustBruteLoss(-(brutedamage * 0.75)) + convertee.adjustFireLoss(-(burndamage * 0.75)) + convertee.visible_message("[convertee] writhes in pain \ + [brutedamage || burndamage ? "even as their wounds heal and close" : "as the markings below them glow a bloody red"]!", \ + "AAAAAAAAAAAAAA-") + ticker.mode.add_cultist(convertee.mind, 1) + new /obj/item/weapon/tome(get_turf(src)) + convertee.mind.special_role = "Cultist" + to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ + and something evil takes root.") + to_chat(convertee, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\ + ") + return 1 + +/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers) var/sacrifice_fulfilled var/datum/game_mode/cult/cult_mode = ticker.mode - if(T) - if(istype(T, /mob/living/simple_animal/pet/corgi)) - for(var/M in invokers) - var/mob/living/L = M - to_chat(L, "\"Even I have standards, such as they are!\"") - if(L.reagents) - L.reagents.add_reagent("hell_water", 2) - if(T.mind) - sacrificed.Add(T.mind) - if(is_sacrifice_target(T.mind)) - sacrifice_fulfilled = 1 - new /obj/effect/overlay/temp/cult/sac(loc) - if(ticker && ticker.mode && ticker.mode.name == "cult") - cult_mode.harvested++ + if((((ishuman(sacrificial) || isrobot(sacrificial)) && sacrificial.stat != DEAD) || is_sacrifice_target(sacrificial.mind)) && invokers.len < 3) for(var/M in invokers) - if(sacrifice_fulfilled) - to_chat(M, "\"Yes! This is the one I desire! You have done well.\"") - cult_mode.additional_phase() - else - if(ishuman(T) || isrobot(T)) - to_chat(M, "\"I accept this sacrifice.\"") - else - to_chat(M, "\"I accept this meager sacrifice.\"") - if(T.mind) - var/obj/item/device/soulstone/stone = new /obj/item/device/soulstone(get_turf(src)) - stone.invisibility = INVISIBILITY_MAXIMUM //so it's not picked up during transfer_soul() - if(!stone.transfer_soul("VICTIM", T, usr)) //If it cannot be added - qdel(stone) - if(stone) - stone.invisibility = 0 - if(!T) - rune_in_use = 0 - return - if(isrobot(T)) - playsound(T, 'sound/effects/EMPulse.ogg', 100, 1) - T.dust() //To prevent the MMI from remaining + to_chat(M, "[sacrificial] is too greatly linked to the world! You need three acolytes!") + log_game("Offer rune failed - not enough acolytes and target is living or sac target") + return FALSE + + if(istype(sacrificial, /mob/living/carbon/human/golem)) + for(var/M in invokers) + var/mob/living/L = M + to_chat(L, "\"This creature has no soul!\"") + return FALSE + if(istype(sacrificial, /mob/living/simple_animal/pet/corgi)) + for(var/M in invokers) + var/mob/living/L = M + to_chat(L, "\"Even I have standards, such as they are!\"") + if(L.reagents) + L.reagents.add_reagent("hell_water", 2) + return FALSE + if(sacrificial.mind) + sacrificed.Add(sacrificial.mind) + if(is_sacrifice_target(sacrificial.mind)) + sacrifice_fulfilled = 1 + + new /obj/effect/overlay/temp/cult/sac(loc) + if(ticker && ticker.mode && ticker.mode.name == "cult") + + cult_mode.harvested++ + + for(var/M in invokers) + if(sacrifice_fulfilled) + to_chat(M, "\"Yes! This is the one I desire! You have done well.\"") + cult_mode.additional_phase() else - playsound(T, 'sound/magic/Disintegrate.ogg', 100, 1) - T.gib() - rune_in_use = 0 + if(ishuman(sacrificial) || isrobot(sacrificial)) + to_chat(M, "\"I accept this sacrifice.\"") + else + to_chat(M, "\"I accept this meager sacrifice.\"") + + var/obj/item/device/soulstone/stone = new /obj/item/device/soulstone(get_turf(src)) + if(sacrificial.mind) + stone.invisibility = INVISIBILITY_MAXIMUM //so it's not picked up during transfer_soul() + stone.transfer_soul("FORCE", sacrificial, usr) + stone.invisibility = 0 + + if(sacrificial) + if(isrobot(sacrificial)) + playsound(sacrificial, 'sound/magic/disable_tech.ogg', 100, 1) + sacrificial.dust() //To prevent the MMI from remaining + else + playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, 1) + sacrificial.gib() + return TRUE + //Ritual of Dimensional Rending: Calls forth the avatar of Nar-Sie upon the station. /obj/effect/rune/narsie @@ -804,6 +809,7 @@ var/list/teleport_runes = list() cultist_desc = "when invoked, makes an invisible wall to block passage. Can be invoked again to reverse this." invocation = "Khari'd! Eske'te tannin!" icon_state = "1" + invoke_damage = 2 /obj/effect/rune/wall/examine(mob/user) ..() @@ -829,6 +835,8 @@ var/list/teleport_runes = list() req_cultists = 2 allow_excess_invokers = 1 icon_state = "5" + invoke_damage = 5 + var/summontime = 0 /obj/effect/rune/summon/invoke(var/list/invokers) var/mob/living/user = invokers[1] @@ -854,13 +862,24 @@ var/list/teleport_runes = list() fail_invoke() log_game("Summon Cultist rune failed - target in away mission") return - cultist_to_summon.visible_message("[cultist_to_summon] suddenly disappears in a flash of red light!", \ - "Overwhelming vertigo consumes you as you are hurled through the air!") + if((cultist_to_summon.reagents.has_reagent("holywater") || cultist_to_summon.restrained()) && invokers < 3) + to_chat(user, "The summoning of [cultist_to_summon] is being blocked somehow! You need 3 chanters to counter it!") + fail_invoke() + new /obj/effect/overlay/temp/cult/sparks(get_turf(cultist_to_summon)) //observer warning + log_game("Summon Cultist rune failed - holywater in target") + return + ..() - visible_message("A foggy shape materializes atop [src] and solidifes into [cultist_to_summon]!") - user.apply_damage(10, BRUTE, "head") - cultist_to_summon.forceMove(get_turf(src)) - qdel(src) + if(cultist_to_summon.reagents.has_reagent("holywater") || cultist_to_summon.restrained()) + summontime = 20 + + if(do_after(user, summontime, target = loc)) + cultist_to_summon.visible_message("[cultist_to_summon] suddenly disappears in a flash of red light!", \ + "Overwhelming vertigo consumes you as you are hurled through the air!") + visible_message("A foggy shape materializes atop [src] and solidifies into [cultist_to_summon]!") + + cultist_to_summon.forceMove(get_turf(src)) + qdel(src) //Rite of Boiling Blood: Deals extremely high amounts of damage to non-cultists nearby /obj/effect/rune/blood_boil @@ -870,6 +889,7 @@ var/list/teleport_runes = list() icon_state = "4" construct_invoke = 0 req_cultists = 3 + invoke_damage = 15 /obj/effect/rune/blood_boil/do_invoke_glow() return @@ -887,10 +907,6 @@ var/list/teleport_runes = list() to_chat(C, "Your blood boils in your veins!") C.take_overall_damage(45,45) C.Stun(7) - for(var/M in invokers) - var/mob/living/L = M - L.apply_damage(15, BRUTE, pick("l_arm", "r_arm")) - to_chat(L,"[src] saps your strength!") qdel(src) explosion(T, -1, 0, 1, 5) @@ -940,6 +956,9 @@ var/list/teleport_runes = list() construct_invoke = 0 color = rgb(200, 0, 0) var/list/summoned_guys = list() + var/ghost_limit = 5 + var/ghosts = 0 + invoke_damage = 10 /obj/effect/rune/manifest/New(loc) ..() @@ -948,6 +967,11 @@ var/list/teleport_runes = list() notify_ghosts("Manifest rune created in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src) /obj/effect/rune/manifest/can_invoke(mob/living/user) + if(ghosts >= ghost_limit) + to_chat(user, "You are sustaining too many ghosts to summon more!") + fail_invoke() + log_game("Manifest rune failed - too many summoned ghosts") + return list() if(!(user in get_turf(src))) to_chat(user,"You must be standing on [src]!") fail_invoke() @@ -974,8 +998,11 @@ var/list/teleport_runes = list() var/mob/living/carbon/human/new_human = new(get_turf(src)) new_human.real_name = ghost_to_spawn.real_name new_human.alpha = 150 //Makes them translucent + new_human.equipOutfit(/datum/outfit/ghost_cultist) //give them armor new_human.color = "grey" //heh..cult greytide...litterly... ..() + + playsound(src, 'sound/misc/exit_blood.ogg', 50, 1) visible_message("A cloud of red mist forms above [src], and from within steps... a man.") to_chat(user, "Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...") var/obj/machinery/shield/N = new(get_turf(src)) @@ -987,6 +1014,7 @@ var/list/teleport_runes = list() new_human.key = ghost_to_spawn.key ticker.mode.add_cultist(new_human.mind, 0) summoned_guys |= new_human + ghosts++ to_chat(new_human, "You are a servant of [ticker.mode.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.mode.cultdat.entity_name], and you are to serve them at all costs.") while(user in get_turf(src)) @@ -1002,6 +1030,7 @@ var/list/teleport_runes = list() for(var/obj/I in new_human) new_human.unEquip(I) summoned_guys -= new_human + ghosts-- new_human.dust() /obj/effect/rune/manifest/Destroy() diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 8edfd1eb0ea124fbb4bcaf17a756d6efa3ca753c..59de4e9054b8ebf657e8af79e16e9a14b0c831fb 100644 GIT binary patch delta 10676 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 delta 8299 zcmbt(2UHX7y6zx?q9Xo+6lsErAYH16fYPK3N)sUn(gX=br89_t(nX|(CaCl-(g`R% zR1pGFBE19%A+&^$+`;|-``mr*T4$|$@3%6^%-7#{p6@MBN}D+M3OV0iqFFA#JbIjC zoHx*5hcL6Nj1*}i+Sml&+x1D=voDTnseObp*O-q3bAg(N%LX&>s|m1=sr7 z_T(;2N(!XERe5*%W0#F}FzdIHH}dZ7bT1R0=V70_JAB!Ree|Re^+4)$l!BErPQgNT zUEj|9*@lOxTo%hnUmM%R=89dKdDj> zEw5wm2x&auckiix!hi;uaD|Vc515f_EF@Do59c{X$ebinR|imca)&esjLD8i!#_V% zNN?{y-6(RInnc-l0Jh9y&z(EhzWWk`(^OZd>+as#1;r1r{U7I%HS+>b_x2<4JsA$s zVM(=o$<96v@wR7j)dP^2Sce_O$Z4E-qLGvZWx-v7I+jkQ9QeiQ3Pdk}&bG5gBCfSv zjv8Voq%WlC+E6KtMw{^Q>SMrN^Xp7iGBSC^`L`|%1huz+I=r)+R|HhXn{NKtg#Q{Y z+IB5$y{GKUHRFTe{8sx_v(vttezkg6WaJmZ!u`v0&a>0(8BLXEW7qsRgNmQy@FFf{>2z;WiQowxSJ1Hi{Wc{#Xm%};0_?QYByrD@<12QJ)QSBEN| zh277gVAl693h{lBtF{@!Ux_9_^I3mDN9I_V{w@!IqXe&q=LyB!09+I(m!QSDOA|yv zgScZr6pki{*xydZjN;Hx{q&8pztD6qZzL9f6RqE(e-Gx~g;U<7c%$iPFfXGW;jV3* z`{_;^2bJB46@=l0W^LZz+?W>M=br+JnirY3L1JB+eezAJvL(I$FfDl!{23d` zsix;XL9#o*LL1TxSj|6&K#FIHT7<=CrR_wV1gHhjdl^25nnkwm=}dE%s@q2WuN z{P%`X7nD=j7y&tk(+n`=_yultK=X>_%w5XX?<9^!YYnRNpLbU;{HFBcmXA_3CX^)mM_t;^(7he!pZp+z6aJeh|Y&^~3l# z=P4^FMAUjNW`Fs@VpWRnL_)uwi+$>s&PuLe_7`YN<}d>TK{GQpX*CvY%4F}{sCV&i zQfF#t*B9Y|2U65A1URcKcBpv#Qp_4VC+GJRc;fE?;nHuo-JG(rGlAft7UX1Q!!*5I zG$CD`r@GfdN)Rp(AtSOb8IIbhF|r~p=@kO6ciNPT__Byt~qK|Iz<&C7-tm}oY0nc z{CU{JbQA9KFaoO+urz7n#FbPiX-6w-^tN?y=Nz z1)=?n&>gF7>x%2Y>KLEgR$nX&?t4oy1(gQPnYj%NcY zSQ^!jt)(H5!?SQsI{WmNq z{C@ZZ;-VbYK%Z1)ps#>=W@2Q>HC}fvBKyL}Q)U?s*RJEGl-N)4e>|mP$a1igpJ!_; z|Mj`>+3=%cZ8kOUe;}t@5%6iFtD(P}0jLr}{EFF{t}Su8$tvp9)kG8_h1!`F%)5?F z*lehr7q4K0rBGLUloPbUX$W*51W#lSI*y>JOG|>;gMuvTEiJU-{0Z82ew~FcHku>v zTsnK4{?!{ben4Q6H(X6ZULLxC38DE}(TmUJif%8KKbl(;dyv)DY)omESLb~kP#6ly zfl?_&eWnn7h%5;8qoc|5KB-bBEOfTEwr@0Yyq|Tv_&5YQb+m6l(7YoMf0u=>-0Tz( zwSa&ycIFg4WFHSf8#CM|ortiCyjhj1L8lW3`+g?jHYO-ASS- zOAb;wd3ZDg*>4N7+(z|H-pT9hZHGfW3JPo86}|+7e1D{t{Z~;9pTz9t zF&m75%!l)cQ|LtC$?ee80b15v=k0Tj>|9(Ssdvk>Twi`Mf1CYv3_|6o_r{kf57SFS z$@W)GDGMBB03kD)7PqRx_W+VO?*c5it$j~h4a^Cw1To5gW3YUckgi`(C_h^gB$0z1_QCwb%x z`@JQRlr|igZHOKi_?N2wEP-d@AowF88*XEik_^`)9-kl5o$tmd(z04p zDkVX%9Fw0dcs%qr5R^-yT&c;iRRXZQEv>9)AUr`9u-tw5OX3_NJOE~FtPa5iXtsEG z#Mt;ljGT9y6TEy1SmA|#8$qLW5Ojt1j$+lT6O7<^r?K+LdnxPT5CuFsN)ii`>5;PT zMduDVb)3Kb=(6H+MN_g8t&v{dhA-H#6lpnjkd`HIKV)Cv^p^mEkBFYC?*SK$Qr*Tj ztNVjwVEyFDX>E#@N-OMqxm8k`p2rzzraqaFZyYv?=SCb<3bYQe`KPM8o+)3+(*iz= z4y;P?O+L;)2u%}s_?5hNxUv-JRTBsD$4LZI*c{suv8%|faO}{m-nA>>8##*oP0xkq zS^R~#JJ5HQL*E?C_S$4WL%7-zZ3)-3>i&>t@wH#iM(Ox4XNZFPr{oFSJs57+ML5{# za6|kCXlyJ>bnsQZBn1whI{KEN`slF~nl)N8*AAsTgv}(@qoT?2T_59+0VX*CiIv0` z`Z6KegI&Txke!N%03+V&3K-tM{~qt-P?yR4uIuAq)Da1%KUz@z@b>+GihwN8-vWQ6 z7E>K=tk001DWu~aHlHQOR!M&LK4n#E3UBajygM7usgkn3c+}Wf^0C7DPD+`nb2oia zK>lt*>iWT|zg?475?yzr1|xKE7jx^tOlBy~Sr|s!SOu)975~x}s`8LTv&_1$BqJoj zLT52*c0PP|4jRZ|^U(6Tp{kyKTINci{st?}l*U2k2R>}?yyWnI^@kK>WH7c{$qbsy zSx75kZ#OW&9;b%KW1%75ig{_Uux=uAEX>3(ZI;I)**OBl%RlewO-7z0B>5@V>t2r- zOXLUL0}J-Ax6IADLXEyo}6d zxYB3vT=@zV)qH?lq_MGayWRZ!ywQ_+n-Zb+*`JbfwiFZe1Io@PN(Ig#X?Zk}cs1&L zLBT)rTZylb1AnG~6hsqSiAi6pb`}4_8i}SIX1X_g(StgwjxI&C)|0_mgdYQ~YuP7A z`z-Gl0{4W7{z@SUW##0_ymLmPdNq9mt!JMBZ#rh%-#yPAbKqz{dG8I=X`5S1vddE%zK-e}(KjKDJ>{09tLEv(}XK%lof!Z5>$}OlqiiDmxa$rgFQlNArRgWk>XQ zGBV9~41&7(^!A>=HCepNvqV!@$M%_YSlckE-=84vZ<$jbKHm0&{Y~gy6ZuLQ7>v?J zWeG+=E7iQ$Hcxd+G7|ckQWE>O7}OPB1EDue!W(E(<%H^K0wG?Kz|fhF3}CoM$P6H| zv9e|t7NR`NVKCkmESAO$MhysHE_Bz>)Ra_Ecw(Nd$ZcmgOB}bC(%}C~hgs}wxY^W3 z+pIfEME#1L!icJ>Dwr6S#@W*^&PyDJQG39hd1Z$_F5Bf&2}Q-I)YS99i0JX2O1zrA z=d~i;n)6UB26@i*O)oyyNNBI+W<5XrO^k=lD%PdD3rfoe5B@%`DCP1kF)0b_*Z<4D z^6GTfCx*h1SM97vgD8*Oc5oKCqYgWt-)U{_?s6iTEsN8*E0SLLTUjfC)JmGQ_7!5g z4`Gv_F5`)>e|f8+sd307Gi7h_7B3d|ki~FKp+J0P#s5>AM$aye=l;SB55IxTzz&nTY$mK*K9q zmBcVKh*^7hpc_c`$`y^Jj)Jb;{r%M20b%Gu>U$#lbv{$d&gIS?jHT-wl^|Mb!Q(gN zyz4YPJPfG?i-b-jEiJ7hb%7I_mRe2;)!L>x@T9-i>w7dv4hIIPKcO6J+DV(o+pS6Y zep>DD`@CP03OT650E);bMLkKKXGYnIyVhzUZg`crPc@Jm8XCBAa&q>_`BKo7_r|FK zMgb}?s|=@+i-13APAH!UZf*D_cECxw%6&Q%Iy#cXe@)v&M?>&R;v|9Gv{1e8sLD)io%H$sc!s3v$a zifd5H;q*$u!iVZowiW+Ij=M?v4im?I>Q&hD&DWawe`;8UGf5CPfC z4^SZ5gb%Q9HEQ**8`FT3Puv5rNO7wq54feffOo8I@YQLcfZm7f5`8Y-+4*?&9z= zwRv2|)UJ7R&2`6eUyJ2rhVd4jq@m_>IBnSh|) zxCyk+Qr4^ez?1eQtzA>$U&qqU7=UEeO#Pa@>yG`6bLdtP1C%GVr%^IZVpt*Wsp7k2 z0-Ms_{TIUwJ<3QT)pf4IoivNo+)uWiyCMxG- zGxC90i~6-G#_U<_G8@;HhJ3s15G-=IUD*1%w0@@FjQ7jrgq1|4p^+m22kUZ{h!>!Y zvrS?tu~zfq5Q66Z8L|^asV(l!KgCfNg{u?g|EFY|M=_fH^T5xqH5zpJ-%syC{-2t_ z|6$liK@9B$e*SD{gEl5Ik>|)?hb2x}o;LBH{k^$!R@OTF-%pnw{a-hM(BS`Rn2^WJ zt<)DX&Vbu`_$-~iqLmnGw`f>t48Q(SVNA>`)w?9622bv_bt{~@Kf%>6zA`mTX>eHk zr~uywizkQb^?eV%H(fL*P*EH9rkiK}?#DzxekEKv)E&srPr7#XIOU7iFE7^UYLzUS z^mG{Tc09zQ$)R|mv{=<)ku6a{uRgU3YJ!}{+p&t9kGaQm&|;^734=mQWIjUwz24(#zti%?^kZ& z$6;k~^+tBFc_lq$E!o-GRRRKT*45QT5v~|yJp07(eAG*AyzCLJf`S4tSBk%U9_|_) zN;HU?ebB=Tq{7TfX_^OfG!02BX~CVm5OH9LG&X;B5M@GRK7Qk)#n-9u~L$7AuZ{&%bh-+(GzqqwwR!iQ{ zmqK%Ah-T19hp9Xi&ta&a8QXpUZBgu@eCD=nbhOUk@NnqR_*UY{wh?DkqUd)xxNk9Afq*x0IP_;cFQ%z?8M_8q#EOb*f)Phb(by*koUS!A zz+DrQuvlfvXw7=gYY^jknL6B$agq))Eq*|!ZU_Ku;#LhSw$1b+fADT8T;j`QMmS48 z$=1i&Tb&!YRnF|40{|y(YpLD3FRwHzv9!9>ZhRE^VGV<1>w5gdu_@KE#*HWP2qTn@ zjUqwutHGE~1s$il?eU#88sNT3pXyUR#wX5C&K#G{DhJ(#pxZ;H6BzgkkDc8P{cPF$ z0QXf}aXY7jFSTsJHqP1a=#`EO`t>Q)Z965P`Nt<6JY^q83rtyT#x-rX)OzL>7QXuI zBq&_^_8oYTO%JGCI0Jo}6Gbh`>`<&OkYb%jids^kLj-I`p8q%xLa_47!}_EhY&C#` z8)x;z-5aCob|l{nWmCc!Io)=K2;NY$kc`wkZrhgzfTFG*%(K6{xX#0K3$B_JKL~|b zx1tACCkhJcj7$Z^#561{I5PrCPG733KGf8VCe+z1VA~?uXaFdQ%+F`g)6+AndScu+ zR;wTLXt=;w!_t#5tf&EVH~yA9+aXUwm|)y5GP<;#2V?LJ_fI;3ofk<-)Y(wgX@g2rBsYrVy0ev9Zq z3?>%)0H>l&J5p@%`sGWSB8%$Nk*uPJtO^wGj!Y4sLuBwwF;SEII^}hM=9irXlOpo~ zVf}Q4&~ev##_GuzoJ!;kRlrv&FFX6l_VzXqBvS}i_wy|LVxQcpoUTs`d<9*`f>kaA zy{^l6?Rd6Z;EC&41s(8KKi9G!)<7w(UsqUAjwHxA2R>>vv9yeKlaI>C-~m(&445Ex zrl7F!lN|NX4op5rTYB$Jzs7f7jAf_t1nxbWfNFkVdBG*KmwR6L8TE$^-hWNIje00f zT!`_J=L%zg?c-9y81m-O{=Qk#dHjIUtUhDPYGP257t-_%yc;Wnu{y*ZLBzmuI#mr? z{A8PH#h2BI=o<h*iBEB+7F z*A;(7vZ7J7o6whtbZq`?B(xAahCo_cT5_M}RtQmjeVQi7y{@E0-}k8sn0Zj=j1~i$ z7kUxpUO21OUsb3o^RjRF*D>ebCnoAE@VH9w5`O$JLhm&F%h{5yd48lhsnUJz?*GA@ zG}+OMWZ_;P1O82&L?z8d{x{|%dQn*4FH#2p4rcX6Ng&DBsnS}C8w-JW8qOI95j35h z)H}VBPY+1jP_85Ixp3;l$&>Cw6#^l=er$k*gan`h|K^k$W+oE0ivf8fvaKiUp6~gr zmD)ceGwsJXT6}f6rO2b{;E?O?18FU|<$}KwZ}6=~KBPa<18AN{B^_FAx|6IBc_#D( zOf7~WYn2C@Y19h8bJCSc5C$_1Fz+s$kA`e(AGvbu>r>9JPse4Kzi`&o*GCWOB#N}$ zz%@uMdsNp3oSG=nR68uvoIQCo&KaTCr4>a!G2|8$luyVOe~L!^VP6h;pLYK9$VACD z+YR4F-`Qbo==oU7L5TG!0I!CHy^bb8G==NCbSebe*LN-j2L~U4Xhv^E9_Yiuvcz1{ zddiG1L7N7c!OMr~bvO#N8WD6`UGDf1@+&KuU#c|6kzTY|pMl^|la24PFA0F~(SdNQ z-DHzG-CGJS;Kas=4z{oWYh_$mFG4P-yj*hebw%xE-hO3}SLR}1EYCn6A&5HBW7FlLvzZ!GhNXYg*cn)N=pATlwdLFsyY*3Qlj%K8Co zX^dKqo}i#$&}The*{C)f$R=hyt6w&&^_c&Ng0kai5V&jjs8{*Sad!0eV#p#OWS@Qm zKkFf)P^qb@AAfeYJ-ipy5y*8&kd`M?G@0~jtRi+RsvFJ$1U9&F^g|qnX`<4j~NI0Dgo@xqb;^Sb9 zv6hxU(tnCG7?O!JRrz(SNE?)QbovG*yybK>KvZX;7d`WMrhFnVF-@tqZQgsUApTFZ@hwM>Ihy&MC~o)HKPx0gJ^#@UnAK zN>}vp_`#E|FDN3CCOunTU(Y!?Iaz~i+UF`wLX`$?3(tP>(G3j+Lt} z{&CZPEkmzQROAQF*LB|=g(yy0uYa=B72|c~=1y=Z38A;odUSZWs%By`+|z)|Yqb}% zkMX%U>&Xc+hDr7L(gi_LOcQa{d&3SjOYQRX(m9x0bD8J_bv81NB%8=&rtaq3XRHZ+ zy#R@$=I$Dh!p1bIf8IV{t{S+A+Z=2AmKr#e z-!La`Po504x1;IPeHb{3hW`A-Z+lTyG;s+4*<#E^9 zhW+(=vx>*z?kNb~+wa2>+l1|hy+q-NBP!sU6xI162*jsGL2=QuD$4Rut~+VVi9ExG zbgOcejk|O7FxILfuIxzu38?u~89xsPtw}#UIRHhE%$54-X$Q%@^Xq+DNdfq_#R}AU zlCBPJpEL=tv%fJl2;Ld3lAIF;)eYU&C$2+O`=O)q3jA948@*S>8rgRD?p02M8DeYKL?*1`V^xf#DS diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 92b77524bc49b1db3acd8aaa596be6f0e9ced448..95d9b07dd0d2f5a38a101131eadbb92b2d5a7908 100644 GIT binary patch delta 26051 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 W!yTxRw2xrmM@2zHzDU+A@c#i}_R>KB From 008f84f1e3052d2ac753cd35b40bf67c69a2fcb5 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 20 Oct 2017 17:54:46 -0400 Subject: [PATCH 2/7] I missed this heh --- code/game/gamemodes/cult/runes.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 2af8936176f..22a154f6a7a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -388,6 +388,11 @@ var/list/teleport_runes = list() to_chat(M, "Something is shielding [convertee]'s mind!") log_game("Offer rune failed - convertee had null rod") return 0 + if(istype(convertee, /mob/living/carbon/human/golem)) + for(var/M in invokers) + var/mob/living/L = M + to_chat(L, "\"This creature has no soul!\"") + return 0 var/brutedamage = convertee.getBruteLoss() var/burndamage = convertee.getFireLoss() if(brutedamage || burndamage) From 0817e6de2ce0847c91f4e355e32b608bad04f41b Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 20 Oct 2017 19:37:35 -0400 Subject: [PATCH 3/7] needed to change this --- code/game/gamemodes/cult/ritual.dm | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 358291d8c42..6935b10c14d 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -100,14 +100,10 @@ text += "Teleport
This rune is unique in that it requires a keyword before the scribing can begin. When invoked, it will find any other Teleport runes; \ If any are found, the user can choose which rune to send to. Upon activation, the rune teleports everything above it to the selected rune.

" - text += "Rite of Enlightenment
This rune is critical to the success of the cult. It will allow you to convert normal crew members into cultists. \ - To do this, simply place the crew member upon the rune and invoke it. This rune requires two invokers to use. If the target to be converted is mindshielded or a certain assignment, they will \ - be unable to be converted. People [ticker.mode.cultdat.entity_title3] wishes sacrificed will also be ineligible for conversion, and anyone with a shielding presence like the null rod will not be converted.
\ - Successful conversions will produce a tome for the new cultist.

" - - text += "Rite of Tribute
This rune is necessary to achieve your goals. Simply place any dead creature upon the rune and invoke it (this will not \ - target cultists!). If this creature has a mind, a soulstone will be created and the creature's soul transported to it. Sacrificing the dead can be done alone, but sacrificing living crew or your cult's target will require 3 cultists. \ - Soulstones used on construct shells will move that soul into a powerful construct of your choice.

" + text += "Rite of Enlightenment
This rune is necessary to achieve your goals. Placing a noncultist above it will convert them if it can and sacrifice them otherwise. \ + It requires two invokers to convert a target and three to sacrifice a living target or the sacrifice target.
\ + Successful conversions will produce a tome for the new cultist, in addition to healing them.
\ + Successful sacrifices will please the [ticker.mode.cultdat.entity_title3], can complete your objective if it sacrificed the sacrifice target, and will attempt to place the target into a soulstone.

" text += "Rite of Resurrection
This rune requires two corpses. To perform the ritual, place the corpse you wish to revive onto \ the rune and the offering body adjacent to it. When the rune is invoked, the body to be sacrificed will turn to dust, the life force flowing into the revival target. Assuming the target is not moved \ From d2d801122f74a84882baacb4076989f1ebd794d7 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 22 Oct 2017 11:21:55 -0400 Subject: [PATCH 4/7] revert the sac change.. Cause i swear you peopl --- code/game/gamemodes/cult/ritual.dm | 13 +- code/game/gamemodes/cult/runes.dm | 222 +++++++++--------- .../mob/living/simple_animal/constructs.dm | 2 +- 3 files changed, 124 insertions(+), 113 deletions(-) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 6935b10c14d..72535d9d1e5 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -100,10 +100,15 @@ text += "Teleport
This rune is unique in that it requires a keyword before the scribing can begin. When invoked, it will find any other Teleport runes; \ If any are found, the user can choose which rune to send to. Upon activation, the rune teleports everything above it to the selected rune.

" - text += "Rite of Enlightenment
This rune is necessary to achieve your goals. Placing a noncultist above it will convert them if it can and sacrifice them otherwise. \ - It requires two invokers to convert a target and three to sacrifice a living target or the sacrifice target.
\ - Successful conversions will produce a tome for the new cultist, in addition to healing them.
\ - Successful sacrifices will please the [ticker.mode.cultdat.entity_title3], can complete your objective if it sacrificed the sacrifice target, and will attempt to place the target into a soulstone.

" + text += "Rite of Enlightenment
This rune is critical to the success of the cult. It will allow you to convert normal crew members into cultists. \ + To do this, simply place the crew member upon the rune and invoke it. This rune requires two invokers to use. If the target to be converted is mindshielded or a certain assignment, they will \ + be unable to be converted. People [ticker.mode.cultdat.entity_title3] wishes sacrificed will also be ineligible for conversion, and anyone with a shielding presence like the null rod will not be converted.
\ + Successful conversions will produce a tome for the new cultist.

" + + text += "Rite of Tribute
This rune is necessary to achieve your goals. Simply place any dead creature upon the rune and invoke it (this will not \ + target cultists!). If this creature has a mind, a soulstone will be created and the creature's soul transported to it. Sacrificing the dead can be done alone, but sacrificing living crew or your cult's target will require 3 cultists. \ + Soulstones used on construct shells will move that soul into a powerful construct of your choice.

" + text += "Rite of Resurrection
This rune requires two corpses. To perform the ritual, place the corpse you wish to revive onto \ the rune and the offering body adjacent to it. When the rune is invoked, the body to be sacrificed will turn to dust, the life force flowing into the revival target. Assuming the target is not moved \ diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 22a154f6a7a..1b34c209ab0 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -337,135 +337,141 @@ var/list/teleport_runes = list() //Rite of Enlightenment: Converts a normal crewmember to the cult. Faster for every cultist nearby. /obj/effect/rune/convert cultist_name = "Rite of Enlightenment" - cultist_desc = "offers a noncultist above it to Nar-Sie, either converting them or sacrificing them." + cultist_desc = "converts a normal crewmember on top of it to the cult. Does not work on mindshielded crew." invocation = "Mah'weyh pleggh at e'ntrath!" icon_state = "3" - - req_cultists = 1 - allow_excess_invokers = TRUE - rune_in_use = FALSE + req_cultists = 2 /obj/effect/rune/convert/do_invoke_glow() return /obj/effect/rune/convert/invoke(var/list/invokers) + var/list/convertees = list() var/turf/T = get_turf(src) + for(var/mob/living/M in T.contents) + if(!iscultist(M) && !ismindshielded(M) && ishuman(M)) + convertees.Add(M) + if(!convertees.len) + fail_invoke() + log_game("Convert rune failed - no eligible convertees") + return + var/mob/living/new_cultist = pick(convertees) + if(!is_convertable_to_cult(new_cultist.mind) || new_cultist.null_rod_check()) + for(var/M in invokers) + to_chat(M, "Something is shielding [new_cultist]'s mind!") + if(is_sacrifice_target(new_cultist.mind)) + to_chat(M, "\"I desire this one for myself. SACRIFICE THEM!\"") + fail_invoke() + log_game("Convert rune failed - convertee could not be converted") + return + ..() + + new_cultist.visible_message("[new_cultist] writhes in pain as the markings below them glow a bloody red!", \ + "AAAAAAAAAAAAAA-") + ticker.mode.add_cultist(new_cultist.mind, 1) + new /obj/item/weapon/tome(get_turf(src)) + new_cultist.mind.special_role = "Cultist" + to_chat(new_cultist, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ + and something evil takes root.") + to_chat(new_cultist, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve [ticker.mode.cultdat.entity_title3] above all else. Bring it back.\ + ") + +//Rite of Tribute: Sacrifices a crew member to Nar-Sie. Places them into a soul shard if they're in their body. +/obj/effect/rune/sacrifice + cultist_name = "Rite of Tribute" + cultist_desc = "sacrifices a crew member to your god. May place them into a soul shard if their spirit remains in their body." + icon_state = "3" + allow_excess_invokers = 1 + invocation = "Barhah hra zar'garis!" + rune_in_use = 0 + +/obj/effect/rune/sacrifice/New() + ..() + cultist_desc = "sacrifices a crew member to [ticker.mode.cultdat.entity_title3]. May place them into a soul shard if their spirit remains in their body." + +/obj/effect/rune/sacrifice/invoke(var/list/invokers) if(rune_in_use) return - var/list/myriad_targets = list() - - for(var/mob/living/M in T) + rune_in_use = 1 + var/mob/living/user = invokers[1] //the first invoker is always the user + var/turf/T = get_turf(src) + var/list/possible_targets = list() + for(var/mob/living/M in T.contents) + if(M.mind) + if(M.mind in sacrificed) + continue if(!iscultist(M)) - myriad_targets |= M - if(!myriad_targets.len) - fail_invoke() - log_game("Offer rune failed - no eligible targets") + possible_targets.Add(M) + var/mob/offering + if(possible_targets.len > 1) //If there's more than one target, allow choice + offering = input(user, "Choose an offering to sacrifice.", "Unholy Tribute") as null|anything in possible_targets + if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated()) + return + else if(possible_targets.len) //Otherwise, if there's a target at all, pick the only one + offering = possible_targets[possible_targets.len] + if(!offering) + rune_in_use = 0 return - rune_in_use = TRUE + if(((ishuman(offering) || isrobot(offering)) && offering.stat != DEAD) || is_sacrifice_target(offering.mind)) //Requires three people to sacrifice living targets + if(invokers.len < 3) + for(var/M in invokers) + to_chat(M, "[offering] is too greatly linked to the world! You need three acolytes!") + fail_invoke() + log_game("Sacrifice rune failed - not enough acolytes and target is living") + rune_in_use = 0 + return visible_message("[src] pulses blood red!") - var/mob/living/L = pick(myriad_targets) + color = rgb(126, 23, 23) + ..() + sac(invokers, offering) + color = initial(color) - - var/is_convertable = is_convertable_to_cult(L) - if(L.stat != DEAD && is_convertable) - do_convert(L, invokers) - else - invocation = "Barhah hra zar'garis!" - ..() - do_sacrifice(L, invokers) - - rune_in_use = FALSE - -/obj/effect/rune/convert/proc/do_convert(mob/living/convertee, list/invokers) - if(invokers.len < 2) - for(var/M in invokers) - to_chat(M, "You need more invokers to convert [convertee]!") - log_game("Offer rune failed - tried conversion with one invoker") - return 0 - if(convertee.null_rod_check()) - for(var/M in invokers) - to_chat(M, "Something is shielding [convertee]'s mind!") - log_game("Offer rune failed - convertee had null rod") - return 0 - if(istype(convertee, /mob/living/carbon/human/golem)) - for(var/M in invokers) - var/mob/living/L = M - to_chat(L, "\"This creature has no soul!\"") - return 0 - var/brutedamage = convertee.getBruteLoss() - var/burndamage = convertee.getFireLoss() - if(brutedamage || burndamage) - convertee.adjustBruteLoss(-(brutedamage * 0.75)) - convertee.adjustFireLoss(-(burndamage * 0.75)) - convertee.visible_message("[convertee] writhes in pain \ - [brutedamage || burndamage ? "even as their wounds heal and close" : "as the markings below them glow a bloody red"]!", \ - "AAAAAAAAAAAAAA-") - ticker.mode.add_cultist(convertee.mind, 1) - new /obj/item/weapon/tome(get_turf(src)) - convertee.mind.special_role = "Cultist" - to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ - and something evil takes root.") - to_chat(convertee, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\ - ") - return 1 - -/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers) +/obj/effect/rune/sacrifice/proc/sac(var/list/invokers, mob/living/T) var/sacrifice_fulfilled var/datum/game_mode/cult/cult_mode = ticker.mode + if(T) + if(istype(T, /mob/living/simple_animal/pet/corgi)) + for(var/M in invokers) + var/mob/living/L = M + to_chat(L, "\"Even I have standards, such as they are!\"") + if(L.reagents) + L.reagents.add_reagent("hell_water", 2) + if(T.mind) + sacrificed.Add(T.mind) + if(is_sacrifice_target(T.mind)) + sacrifice_fulfilled = 1 + new /obj/effect/overlay/temp/cult/sac(loc) + if(ticker && ticker.mode && ticker.mode.name == "cult") - if((((ishuman(sacrificial) || isrobot(sacrificial)) && sacrificial.stat != DEAD) || is_sacrifice_target(sacrificial.mind)) && invokers.len < 3) + cult_mode.harvested++ for(var/M in invokers) - to_chat(M, "[sacrificial] is too greatly linked to the world! You need three acolytes!") - log_game("Offer rune failed - not enough acolytes and target is living or sac target") - return FALSE - - if(istype(sacrificial, /mob/living/carbon/human/golem)) - for(var/M in invokers) - var/mob/living/L = M - to_chat(L, "\"This creature has no soul!\"") - return FALSE - if(istype(sacrificial, /mob/living/simple_animal/pet/corgi)) - for(var/M in invokers) - var/mob/living/L = M - to_chat(L, "\"Even I have standards, such as they are!\"") - if(L.reagents) - L.reagents.add_reagent("hell_water", 2) - return FALSE - if(sacrificial.mind) - sacrificed.Add(sacrificial.mind) - if(is_sacrifice_target(sacrificial.mind)) - sacrifice_fulfilled = 1 - - new /obj/effect/overlay/temp/cult/sac(loc) - if(ticker && ticker.mode && ticker.mode.name == "cult") - - cult_mode.harvested++ - - for(var/M in invokers) - if(sacrifice_fulfilled) - to_chat(M, "\"Yes! This is the one I desire! You have done well.\"") - cult_mode.additional_phase() - else - if(ishuman(sacrificial) || isrobot(sacrificial)) - to_chat(M, "\"I accept this sacrifice.\"") + if(sacrifice_fulfilled) + to_chat(M, "\"Yes! This is the one I desire! You have done well.\"") + cult_mode.additional_phase() else - to_chat(M, "\"I accept this meager sacrifice.\"") - - var/obj/item/device/soulstone/stone = new /obj/item/device/soulstone(get_turf(src)) - if(sacrificial.mind) - stone.invisibility = INVISIBILITY_MAXIMUM //so it's not picked up during transfer_soul() - stone.transfer_soul("FORCE", sacrificial, usr) - stone.invisibility = 0 - - if(sacrificial) - if(isrobot(sacrificial)) - playsound(sacrificial, 'sound/magic/disable_tech.ogg', 100, 1) - sacrificial.dust() //To prevent the MMI from remaining + if(ishuman(T) || isrobot(T)) + to_chat(M, "\"I accept this sacrifice.\"") + else + to_chat(M, "\"I accept this meager sacrifice.\"") + if(T.mind) + var/obj/item/device/soulstone/stone = new /obj/item/device/soulstone(get_turf(src)) + stone.invisibility = INVISIBILITY_MAXIMUM //so it's not picked up during transfer_soul() + if(!stone.transfer_soul("VICTIM", T, usr)) //If it cannot be added + qdel(stone) + if(stone) + stone.invisibility = 0 + if(!T) + rune_in_use = 0 + return + if(isrobot(T)) + playsound(T, 'sound/effects/EMPulse.ogg', 100, 1) + T.dust() //To prevent the MMI from remaining else - playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, 1) - sacrificial.gib() - return TRUE + playsound(T, 'sound/magic/Disintegrate.ogg', 100, 1) + T.gib() + rune_in_use = 0 + //Ritual of Dimensional Rending: Calls forth the avatar of Nar-Sie upon the station. diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 7c7a31b5ef0..684be31cc85 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -181,7 +181,7 @@ /mob/living/simple_animal/hostile/construct/builder name = "Artificer" real_name = "Artificer" - desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies" + desc = "A bulbous construct dedicated to building and maintaining Cult armies." icon = 'icons/mob/mob.dmi' icon_state = "artificer" icon_living = "artificer" From 0b829b59b5ed1fd90ab9923026cf56c56cbad501 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 23 Jan 2018 16:23:46 -0500 Subject: [PATCH 5/7] gah --- code/game/gamemodes/cult/runes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 3eff3292b8a..8095d418fe6 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -876,7 +876,7 @@ var/list/teleport_runes = list() if((cultist_to_summon.reagents.has_reagent("holywater") || cultist_to_summon.restrained()) && invokers < 3) to_chat(user, "The summoning of [cultist_to_summon] is being blocked somehow! You need 3 chanters to counter it!") fail_invoke() - new /obj/effect/overlay/temp/cult/sparks(get_turf(cultist_to_summon)) //observer warning + new /obj/effect/temp_visual/cult/sparks(get_turf(cultist_to_summon)) //observer warning log_game("Summon Cultist rune failed - holywater in target") return From d666f3d1c6f6605fe071a4ecdcf231f923b7e4f3 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 2 Feb 2018 10:54:45 -0500 Subject: [PATCH 6/7] now that i have status effects --- code/__DEFINES/status_effects.dm | 2 +- code/game/gamemodes/cult/runes.dm | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index b38b2666863..b492e91ece5 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -49,7 +49,7 @@ //#define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath. -//#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes +#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes //#define STATUS_EFFECT_CRUSHERMARK /datum/status_effect/crusher_mark //if struck with a proto-kinetic crusher, takes a ton of damage diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index c58edffcd02..24e6c8c4e25 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -990,6 +990,11 @@ var/list/teleport_runes = list() fail_invoke() log_game("Manifest rune failed - user not standing on rune") return list() + if(user.has_status_effect(STATUS_EFFECT_SUMMONEDGHOST)) + to_chat(user, "Ghosts can't summon more ghosts!") + fail_invoke() + log_game("Manifest rune failed - user is a ghost") + return list() var/list/ghosts_on_rune = list() for(var/mob/dead/observer/O in get_turf(src)) if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !jobban_isbanned(O, ROLE_SYNDICATE)) @@ -1012,6 +1017,7 @@ var/list/teleport_runes = list() new_human.real_name = ghost_to_spawn.real_name new_human.alpha = 150 //Makes them translucent new_human.equipOutfit(/datum/outfit/ghost_cultist) //give them armor + new_human.apply_status_effect(STATUS_EFFECT_SUMMONEDGHOST) //ghosts can't summon more ghosts new_human.color = "grey" //heh..cult greytide...litterly... ..() From e81592572ecf6fa4eb5279270eb176ea682d7613 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Mon, 5 Mar 2018 23:13:32 -0500 Subject: [PATCH 7/7] re does the chcek. --- code/game/gamemodes/cult/runes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 24e6c8c4e25..9b94627d664 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -120,7 +120,7 @@ structure_check() searches for nearby cultist structures required for the invoca //This proc determines if the rune can be invoked at the time. If there are multiple required cultists, it will find all nearby cultists. var/list/invokers = list() //people eligible to invoke the rune var/list/chanters = list() //people who will actually chant the rune when passed to invoke() - if(invisibility == 0) + if(invisibility == INVISIBILITY_OBSERVER)//hidden rune return if(user) chanters |= user