From 317d2a3431ce513d75011175e4ca2ab826409fc2 Mon Sep 17 00:00:00 2001 From: Ava Date: Mon, 13 Mar 2023 05:12:34 -0400 Subject: [PATCH] Polishing and consistency --- code/game/gamemodes/cult/arcane_tome.dm | 2 ++ code/game/gamemodes/cult/cultify/mob.dm | 2 +- code/game/gamemodes/cult/runes/_rune.dm | 17 +++++++++-------- code/game/gamemodes/cult/runes/sacrifice.dm | 2 +- code/game/gamemodes/cult/runes/tear_reality.dm | 3 +++ code/game/gamemodes/cult/runes/teleport.dm | 2 +- code/game/gamemodes/cult/talismans/_talisman.dm | 2 ++ code/game/gamemodes/cult/talismans/armor.dm | 2 +- code/game/gamemodes/cult/talismans/teleport.dm | 2 +- code/game/gamemodes/objective.dm | 3 +-- code/modules/antagonist/station/cultist.dm | 15 +++++++++------ 11 files changed, 31 insertions(+), 21 deletions(-) diff --git a/code/game/gamemodes/cult/arcane_tome.dm b/code/game/gamemodes/cult/arcane_tome.dm index 8c4e2d1aaf1..7efb8f291de 100644 --- a/code/game/gamemodes/cult/arcane_tome.dm +++ b/code/game/gamemodes/cult/arcane_tome.dm @@ -90,6 +90,8 @@ return . = ..() +/// Causes `user` to attempt to create a rune of type `rune_type`, using their blood (or equivalent) as the medium. +/// Inflicts a small amount of damage to the hands and creates blood decals in the process that remain if interrupted. /obj/item/arcane_tome/proc/scribe_rune(mob/living/user, obj/effect/rune_type) if (locate(/obj/effect/rune) in get_turf(user)) to_chat(user, SPAN_WARNING("You can only fit one rune on any given space.")) diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm index fa263e8c855..1ce8db1b241 100644 --- a/code/game/gamemodes/cult/cultify/mob.dm +++ b/code/game/gamemodes/cult/cultify/mob.dm @@ -28,7 +28,7 @@ G.invisibility = 0 to_chat(G, "You feel relieved as what's left of your soul finally escapes its prison of flesh.") - cult.harvested += G.mind + LAZYADD(cult.harvested, G.mind) else dust() diff --git a/code/game/gamemodes/cult/runes/_rune.dm b/code/game/gamemodes/cult/runes/_rune.dm index 17f1a4cfffb..f3cf31bf644 100644 --- a/code/game/gamemodes/cult/runes/_rune.dm +++ b/code/game/gamemodes/cult/runes/_rune.dm @@ -78,23 +78,24 @@ /** * Checks if a given mob can participate as an invoker for this rune. * - * By default, a mob must be a human, a cultist, and able to speak. + * By default, a mob must be a human or construct, a cultist, and able to speak. * Arguments: * * `invoker` - The mob being checked as a possible contributor * * `silent` - If non-true, shows an error message to the mob being checked. Defaults to `TRUE` */ /obj/effect/rune/proc/can_contribute(mob/living/invoker, silent = TRUE) var/fail_message - if (!ishuman(invoker)) - return - var/mob/living/carbon/human/H = invoker - if (!iscultist(H)) + if (!iscultist(invoker)) fail_message = "You can't mouth the arcane scratchings without fumbling over them." - else if (H.is_muzzled() || H.silent || (H.sdisabilities & MUTE)) - fail_message = "You can't speak the words of \the [src]." + if (ishuman(invoker)) + var/mob/living/carbon/human/H = invoker + if (H.is_muzzled() || H.silent || (H.sdisabilities & MUTE)) + fail_message = "You can't speak the words of \the [src]." + else if (!istype(invoker, /mob/living/simple_mob/construct)) + fail_message = "Your mind cannot comprehend the words of \the [src]." if (fail_message) if (!silent) - to_chat(H, SPAN_WARNING(fail_message)) + to_chat(invoker, SPAN_WARNING(fail_message)) return return TRUE diff --git a/code/game/gamemodes/cult/runes/sacrifice.dm b/code/game/gamemodes/cult/runes/sacrifice.dm index f8770f2c80e..619a6171aff 100644 --- a/code/game/gamemodes/cult/runes/sacrifice.dm +++ b/code/game/gamemodes/cult/runes/sacrifice.dm @@ -62,7 +62,7 @@ if (sacrificing.mind && cult.sacrifice_target == sacrificing.mind) for (var/mob/living/C in invokers) to_chat(C, SPAN_OCCULT("The Geometer of Blood is sated. Your objective is now complete.")) - cult.sacrificed += sacrificing + LAZYADD(cult.sacrificed, sacrificing) else for (var/mob/living/C in invokers) to_chat(C, SPAN_OCCULT("The Geometer of Blood feasts on your sacrifice. You have pleased It.")) diff --git a/code/game/gamemodes/cult/runes/tear_reality.dm b/code/game/gamemodes/cult/runes/tear_reality.dm index e2629c70f69..acdddb94939 100644 --- a/code/game/gamemodes/cult/runes/tear_reality.dm +++ b/code/game/gamemodes/cult/runes/tear_reality.dm @@ -10,6 +10,9 @@ if (narsie_cometh) to_chat(invoker, SPAN_WARNING("The Geometer has already been called forth.")) return + else if (!cult.allow_narsie) + to_chat(invoker, SPAN_WARNING("The Geometer does not wish the veil destroyed here this day.")) + return return TRUE /obj/effect/rune/tear_reality/invoke(list/invokers) diff --git a/code/game/gamemodes/cult/runes/teleport.dm b/code/game/gamemodes/cult/runes/teleport.dm index ad2376b9248..34f8e38367f 100644 --- a/code/game/gamemodes/cult/runes/teleport.dm +++ b/code/game/gamemodes/cult/runes/teleport.dm @@ -9,7 +9,7 @@ /obj/effect/rune/teleport/examine(mob/user, infix, suffix) . = ..() if (iscultist(user) || isobserver(user)) - . += SPAN_DANGER("This rune has a key word of \"[key_word]\".") + . += SPAN_DANGER("This rune's key word is \"[key_word]\".") /obj/effect/rune/teleport/after_scribe(mob/living/author) var/word = input(author, "Choose a key word for this rune.", rune_name) as null|anything in cult.english_words diff --git a/code/game/gamemodes/cult/talismans/_talisman.dm b/code/game/gamemodes/cult/talismans/_talisman.dm index 5bb939dde1f..bb3fa93a1d3 100644 --- a/code/game/gamemodes/cult/talismans/_talisman.dm +++ b/code/game/gamemodes/cult/talismans/_talisman.dm @@ -35,6 +35,8 @@ return return ..() +/// The per-type proc for the talisman actually doing something on activation. This is what you want to override. +/// Some talismans (like Stun) have their own logic and thus ignore this proc. /obj/item/paper/talisman/proc/invoke(mob/living/user) return diff --git a/code/game/gamemodes/cult/talismans/armor.dm b/code/game/gamemodes/cult/talismans/armor.dm index 4469597f453..c4da785c059 100644 --- a/code/game/gamemodes/cult/talismans/armor.dm +++ b/code/game/gamemodes/cult/talismans/armor.dm @@ -12,5 +12,5 @@ var/datum/gender/G = gender_datums[user.get_visible_gender()] user.visible_message( SPAN_DANGER("\The [src] expands to briefly envelop \the [user]'s body before [G.he] tears through it in a gushing spurt of black sludge."), - SPAN_DANGER("The talisman expands to wrap you tightly, and you allow it to shroud you with tainted magmellite before you tear through the un-paper.") + SPAN_NOTICE("The talisman expands to wrap you tightly, and you allow it to shroud you with tainted magmellite before you tear through the un-paper.") ) diff --git a/code/game/gamemodes/cult/talismans/teleport.dm b/code/game/gamemodes/cult/talismans/teleport.dm index c4ddec61a70..e583b5d3955 100644 --- a/code/game/gamemodes/cult/talismans/teleport.dm +++ b/code/game/gamemodes/cult/talismans/teleport.dm @@ -8,7 +8,7 @@ /obj/item/paper/talisman/teleport/examine(mob/user) . = ..() if (iscultist(user) || isobserver(user)) - . += SPAN_OCCULT("Its key word is \"[key_word]\".") + . += SPAN_DANGER("This talisman's key word is \"[key_word]\".") /obj/item/paper/talisman/teleport/invoke(mob/living/user) var/list/runes diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index eb57f1d71ad..127f0156db9 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -861,7 +861,7 @@ var/global/list/all_objectives = list() if(target) explanation_text = "Sacrifice [target.name], the [target.assigned_role]. You will need the sacrifice rune (Hell blood join) and three acolytes to do so." /datum/objective/cult/sacrifice/check_completion() - return (target && cult && !cult.sacrificed.Find(target)) + return (target && cult && LAZYFIND(cult.sacrificed, target)) /datum/objective/rev/find_target() ..() @@ -896,4 +896,3 @@ var/global/list/all_objectives = list() rval = 2 return 0 return rval - diff --git a/code/modules/antagonist/station/cultist.dm b/code/modules/antagonist/station/cultist.dm index 3060b3826c5..279cfaf3b22 100644 --- a/code/modules/antagonist/station/cultist.dm +++ b/code/modules/antagonist/station/cultist.dm @@ -31,10 +31,16 @@ var/global/datum/antagonist/cultist/cult initial_spawn_target = 6 antaghud_indicator = "hudcultist" - var/allow_narsie = 1 + /// Whether or not the Tear Reality rune can be used. + var/allow_narsie = TRUE + /// The mind datum of the mob that this cult must sacrifice to fulfill their objective. var/datum/mind/sacrifice_target - var/list/sacrificed = list() - var/list/harvested = list() + /// A list of all mobs that this cult has sacrificed. Uses lazylist macros. + var/list/sacrificed + /// A list of all non-cultists that have been killed by Nar-Sie (in the rare event that an admin spawns it or something.) Uses lazylist macros. + var/list/harvested + /// A list of all runes in the game world. Uses lazylist macros. + var/list/all_runes /** * So here's how the cult vocabulary works: @@ -48,9 +54,6 @@ var/global/datum/antagonist/cultist/cult var/list/english_words = list(CULT_WORD_BLOOD, CULT_WORD_DESTROY, CULT_WORD_HELL, CULT_WORD_HIDE, CULT_WORD_JOIN, CULT_WORD_OTHER, CULT_WORD_SELF, CULT_WORD_SEE, CULT_WORD_TECHNOLOGY, CULT_WORD_TRAVEL) var/list/cult_words = list(CULT_WORD_BALAQ, CULT_WORD_CERTUM, CULT_WORD_EGO, CULT_WORD_GEERI, CULT_WORD_IRE, CULT_WORD_KARAZET, CULT_WORD_JATKAA, CULT_WORD_MGAR, CULT_WORD_NAHLIZET, CULT_WORD_VERI) - /// A list of all runes in the game world. - var/list/all_runes - /datum/antagonist/cultist/New() ..() cult = src