From 9ee9f79fdcb4b25e39a3e4b03f01095c5b77a878 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sat, 25 Jan 2020 23:52:33 -0700 Subject: [PATCH 01/15] checks --- code/game/gamemodes/clock_cult/clock_cult.dm | 7 +++++-- code/game/gamemodes/cult/cult.dm | 7 +++++-- code/modules/antagonists/clockcult/clockcult.dm | 4 ++++ code/modules/antagonists/cult/cult.dm | 3 +++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index a76e8234ba..dcf5779f97 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -45,8 +45,11 @@ Credit where due: // PROCS // /////////// -/proc/is_servant_of_ratvar(mob/M) - return istype(M) && !isobserver(M) && M.mind && M.mind.has_antag_datum(/datum/antagonist/clockcult) +/proc/is_servant_of_ratvar(mob/M, require_full_power = FALSE) + if(!istype(M) || isobserver(M)) + return FALSE + var/datum/antagonist/clockcult/D = M?.mind?.has_antag_datum(/datum/antagonist/clockcult) + return D && (!require_full_power || !D.neutered) /proc/is_eligible_servant(mob/M) if(!istype(M)) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 497cc2f1c3..1b295bcc50 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -3,8 +3,11 @@ /datum/game_mode var/list/datum/mind/cult = list() -/proc/iscultist(mob/living/M) - return istype(M) && M.mind && M.mind.has_antag_datum(/datum/antagonist/cult) +/proc/iscultist(mob/living/M, require_full_power = FALSE) + if(!istype(M)) + return FALSE + var/datum/antagonist/cult/D = M?.mind?.has_antag_datum(/datum/antagonist/cult) + return D && (!require_full_power || !D.neutered) /datum/team/cult/proc/is_sacrifice_target(datum/mind/mind) for(var/datum/objective/sacrifice/sac_objective in objectives) diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm index d68e9b594d..7462620287 100644 --- a/code/modules/antagonists/clockcult/clockcult.dm +++ b/code/modules/antagonists/clockcult/clockcult.dm @@ -8,11 +8,15 @@ var/datum/action/innate/hierophant/hierophant_network = new() var/datum/team/clockcult/clock_team var/make_team = TRUE //This should be only false for tutorial scarabs + var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact /datum/antagonist/clockcult/silent silent = TRUE show_in_antagpanel = FALSE //internal +/datum/antagonist/clockcult/neutered + neutered = TRUE + /datum/antagonist/clockcult/Destroy() qdel(hierophant_network) return ..() diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index df2383f892..4dbdf6a7d5 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -12,7 +12,10 @@ var/ignore_implant = FALSE var/give_equipment = FALSE var/datum/team/cult/cult_team + var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact +/datum/antagonist/cult/neutered + neutered = TRUE /datum/antagonist/cult/get_team() return cult_team From c3b916fb4dacb9dcd9080ebd94f4a1dadca43658 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 00:00:42 -0700 Subject: [PATCH 02/15] clockcult limits --- .../clockcult/clock_effects/clock_sigils.dm | 10 ++++++++-- code/modules/antagonists/clockcult/clock_scripture.dm | 10 ++++++++-- .../clockcult/clock_scriptures/scripture_drivers.dm | 3 ++- .../clockcult/clock_scriptures/scripture_scripts.dm | 5 ++++- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm index eb7f83735d..c9f8a53aab 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm @@ -278,9 +278,15 @@ sigil_name = "Vitality Matrix" var/revive_cost = 150 var/sigil_active = FALSE + var/min_drain_health = -INFINITY + var/can_dust = TRUE var/animation_number = 3 //each cycle increments this by 1, at 4 it produces an animation and resets var/static/list/damage_heal_order = list(CLONE, TOX, BURN, BRUTE, OXY) //we heal damage in this order +/obj/effect/clockwork/sigil/vitality/neutered + min_drain_health = 20 + can_dust = FALSE + /obj/effect/clockwork/sigil/vitality/examine(mob/user) . = ..() if(is_servant_of_ratvar(user) || isobserver(user)) @@ -305,7 +311,7 @@ animation_number++ if(!is_servant_of_ratvar(L)) var/vitality_drained = 0 - if(L.stat == DEAD && !consumed_vitality) + if(L.stat == DEAD && !consumed_vitality && can_dust) consumed_vitality = TRUE //Prevent the target from being consumed multiple times vitality_drained = L.maxHealth var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) @@ -317,7 +323,7 @@ if(!L.dropItemToGround(W)) qdel(W) L.dust() - else + else if(L.health > min_drain_health) if(!GLOB.ratvar_awakens && L.stat == CONSCIOUS) vitality_drained = L.adjustToxLoss(1, forced = TRUE) else diff --git a/code/modules/antagonists/clockcult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm index 753de786dc..d2ee044e28 100644 --- a/code/modules/antagonists/clockcult/clock_scripture.dm +++ b/code/modules/antagonists/clockcult/clock_scripture.dm @@ -30,6 +30,7 @@ Applications: 8 servants, 3 caches, and 100 CV var/primary_component var/important = FALSE //important scripture will be italicized in the slab's interface var/sort_priority = 1 //what position the scripture should have in a list of scripture. Should be based off of component costs/reqs, but you can't initial() lists. + var/require_full_power = FALSE //requires the user to be a full, non neutered servant of ratvar //messages for offstation scripture recital, courtesy ratvar's generals(and neovgre) var/static/list/neovgre_penalty = list("Go to the station.", "Useless.", "Don't waste time.", "Pathetic.", "Wasteful.") @@ -77,6 +78,8 @@ Applications: 8 servants, 3 caches, and 100 CV /datum/clockwork_scripture/proc/can_recite() //If the words can be spoken if(!invoker || !slab || invoker.get_active_held_item() != slab) return FALSE + if(!is_servant_of_ratvar(invoker, require_full_power)) + return FALSE if(!invoker.can_speak_vocal()) to_chat(invoker, "You are unable to speak the words of the scripture!") return FALSE @@ -236,18 +239,21 @@ Applications: 8 servants, 3 caches, and 100 CV return FALSE return TRUE +/datum/clockwork_scripture/create_object/proc/get_spawn_path(mob/user) + return object_path + /datum/clockwork_scripture/create_object/scripture_effects() if(creator_message && observer_message) invoker.visible_message(observer_message, creator_message) else if(creator_message) to_chat(invoker, creator_message) - var/obj/O = new object_path (get_turf(invoker)) + var/to_spawn = get_spawn_path(invoker) + var/obj/O = new to_spawn(get_turf(invoker)) O.ratvar_act() //update the new object so it gets buffed if ratvar is alive if(isitem(O) && put_object_in_hands) invoker.put_in_hands(O) return TRUE - //Used specifically to create construct shells. /datum/clockwork_scripture/create_object/construct put_object_in_hands = FALSE diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm index 4ab481cfe2..6751f94588 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm @@ -88,7 +88,7 @@ sort_priority = 4 quickbind = TRUE quickbind_desc = "Creates a Sigil of Submission, which will convert non-Servants that remain on it." - + requires_full_power = TRUE //Kindle: Charges the slab with blazing energy. It can be released to stun and silence a target. /datum/clockwork_scripture/ranged_ability/kindle @@ -211,6 +211,7 @@ quickbind = TRUE quickbind_desc = "Returns you to Reebe." var/client_color + requires_full_power = TRUE /datum/clockwork_scripture/abscond/check_special_requirements() if(is_reebe(invoker.z)) diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm index 4e1a5b42cb..fb32eda309 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm @@ -50,7 +50,6 @@ return FALSE return ..() - //Vitality Matrix: Creates a sigil which will drain health from nonservants and can use that health to heal or even revive servants. /datum/clockwork_scripture/create_object/vitality_matrix descname = "Trap, Damage to Healing" @@ -77,6 +76,10 @@ return FALSE return ..() +/datum/clockwork_Scripture/create_object/vitality_matrix/get_spawn_path(mob/user) + if(!is_servant_of_ratvar(user, TRUE)) + return /obj/effect/clockwork/sigil/vitality/neutered + return ..() //Judicial Visor: Creates a judicial visor, which can smite an area. /datum/clockwork_scripture/create_object/judicial_visor From 4c69c73983e0f61e4d86e787e9bd5bada5015284 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 00:09:40 -0700 Subject: [PATCH 03/15] cult stuff --- .../modules/antagonists/clockcult/clock_scripture.dm | 1 + code/modules/antagonists/cult/ritual.dm | 3 +++ code/modules/antagonists/cult/runes.dm | 4 ++++ .../antagonists/wizard/equipment/soulstone.dm | 12 ++++++------ 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/code/modules/antagonists/clockcult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm index d2ee044e28..98b0fff084 100644 --- a/code/modules/antagonists/clockcult/clock_scripture.dm +++ b/code/modules/antagonists/clockcult/clock_scripture.dm @@ -79,6 +79,7 @@ Applications: 8 servants, 3 caches, and 100 CV if(!invoker || !slab || invoker.get_active_held_item() != slab) return FALSE if(!is_servant_of_ratvar(invoker, require_full_power)) + to_chat(invoker, "You aren't strongly connected enough to Ratvar to invoke this!") return FALSE if(!invoker.can_speak_vocal()) to_chat(invoker, "You are unable to speak the words of the scripture!") diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm index ba2a96289d..6d4c8cd4b9 100644 --- a/code/modules/antagonists/cult/ritual.dm +++ b/code/modules/antagonists/cult/ritual.dm @@ -59,6 +59,9 @@ This file contains the cult dagger and rune list code rune_to_scribe = GLOB.rune_types[entered_rune_name] if(!rune_to_scribe) return + if(!iscultist(user, initial(rune_to_scribe.requires_full_power))) + to_chat(user, "You aren't strongly connected enough to Nar'sie to do draw this.") + return if(initial(rune_to_scribe.req_keyword)) chosen_keyword = stripped_input(user, "Enter a keyword for the new rune.", "Words of Power") if(!chosen_keyword) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 7948b30035..be5dae2c81 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -32,6 +32,7 @@ Runes can either be invoked by one's self or with many different cultists. Each var/scribe_delay = 40 //how long the rune takes to create var/scribe_damage = 0.1 //how much damage you take doing it + var/requires_full_power = FALSE //requires full power to draw or invoke var/invoke_damage = 0 //how much damage invokers take when invoking it var/construct_invoke = TRUE //if constructs can invoke it @@ -185,6 +186,7 @@ structure_check() searches for nearby cultist structures required for the invoca color = RUNE_COLOR_OFFER req_cultists = 1 rune_in_use = FALSE + requires_full_power = TRUE /obj/effect/rune/convert/do_invoke_glow() return @@ -458,6 +460,7 @@ structure_check() searches for nearby cultist structures required for the invoca pixel_y = -32 scribe_delay = 500 //how long the rune takes to create scribe_damage = 40.1 //how much damage you take doing it + requires_full_power = TRUE var/used = FALSE /obj/effect/rune/narsie/Initialize(mapload, set_keyword) @@ -942,6 +945,7 @@ structure_check() searches for nearby cultist structures required for the invoca color = RUNE_COLOR_DARKRED req_cultists = 3 scribe_delay = 100 + requires_full_power = TRUE /obj/effect/rune/apocalypse/invoke(var/list/invokers) if(rune_in_use) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 962c2b2da4..114a7e41cd 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -31,12 +31,12 @@ /obj/item/soulstone/pickup(mob/living/user) ..() - if(!iscultist(user) && !iswizard(user) && !usability) + if(!iscultist(user, TRUE) && !iswizard(user) && !usability) to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.") /obj/item/soulstone/examine(mob/user) . = ..() - if(usability || iscultist(user) || iswizard(user) || isobserver(user)) + if(usability || iscultist(user, TRUE) || iswizard(user) || isobserver(user)) if (old_shard) . += "A soulstone, used to capture a soul, either from dead humans or from freed shades." else @@ -53,7 +53,7 @@ //////////////////////////////Capturing//////////////////////////////////////////////////////// /obj/item/soulstone/attack(mob/living/carbon/human/M, mob/living/user) - if(!iscultist(user) && !iswizard(user) && !usability) + if(!iscultist(user, TRUE) && !iswizard(user) && !usability) user.Unconscious(100) to_chat(user, "Your body is wracked with debilitating pain!") return @@ -74,7 +74,7 @@ /obj/item/soulstone/attack_self(mob/living/user) if(!in_range(src, user)) return - if(!iscultist(user) && !iswizard(user) && !usability) + if(!iscultist(user, TRUE) && !iswizard(user) && !usability) user.Unconscious(100) to_chat(user, "Your body is wracked with debilitating pain!") return @@ -103,7 +103,7 @@ /obj/structure/constructshell/examine(mob/user) . = ..() - if(iscultist(user) || iswizard(user) || user.stat == DEAD) + if(iscultist(user, TRUE) || iswizard(user) || user.stat == DEAD) . += "A construct shell, used to house bound souls from a soulstone." . += "Placing a soulstone with a soul into this shell allows you to produce your choice of the following:" . += "An Artificer, which can produce more shells and soulstones, as well as fortifications." @@ -113,7 +113,7 @@ /obj/structure/constructshell/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/soulstone)) var/obj/item/soulstone/SS = O - if(!iscultist(user) && !iswizard(user) && !SS.usability) + if(!iscultist(user, TRUE) && !iswizard(user) && !SS.usability) to_chat(user, "An overwhelming feeling of dread comes over you as you attempt to place the soulstone into the shell. It would be wise to be rid of this quickly.") user.Dizzy(30) return From 01152d6d0f368068f8698dd8df6c249f4d95d6dd Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 00:41:58 -0700 Subject: [PATCH 04/15] traitor items --- code/game/gamemodes/clock_cult/clock_cult.dm | 7 +++--- .../clockcult/clock_items/clockwork_slab.dm | 24 +++++++++++++++++++ code/modules/antagonists/cult/cult_items.dm | 24 +++++++++++++++++++ 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index dcf5779f97..2f395cc149 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -73,12 +73,14 @@ Credit where due: return TRUE return FALSE -/proc/add_servant_of_ratvar(mob/L, silent = FALSE, create_team = TRUE) +/proc/add_servant_of_ratvar(mob/L, silent = FALSE, create_team = TRUE, neutered = FALSE) if(!L || !L.mind) return var/update_type = /datum/antagonist/clockcult if(silent) update_type = /datum/antagonist/clockcult/silent + if(neutered) //prioritizes + update_type = /datum/antagonist/clockcult/neutered var/datum/antagonist/clockcult/C = new update_type(L.mind) C.make_team = create_team C.show_in_roundend = create_team //tutorial scarabs begone @@ -108,9 +110,6 @@ Credit where due: L.playsound_local(get_turf(L), 'sound/ambience/antag/clockcultalr.ogg', 40, TRUE, frequency = 100000, pressure_affected = FALSE) flash_color(L, flash_color = list("#BE8700", "#BE8700", "#BE8700", rgb(0,0,0)), flash_time = 5) - - - /proc/remove_servant_of_ratvar(mob/L, silent = FALSE) if(!L || !L.mind) return diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index b12c72b4af..b1539c0ad9 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -36,6 +36,30 @@ speed_multiplier = 0 no_cost = TRUE +/obj/item/clockwork/slab/traitor + var/spent = FALSE + +/obj/item/clockwork/slab/traitor/attack_self(mob/living/user) + if(!is_servant_of_ratvar(user) && !spent) + to_chat(user, "You press your hand onto [src], golden tendrils of light latching onto you. Was this the best of ideas?") + if(add_servant_of_ratvar(user, FALSE, FALSE, TRUE)) + spent = TRUE + else + var/has_mindshield = locate(/obj/item/implant/mindshield) in user + var/str = "It looks like your mind is protected. You can probably refund this with your uplink." + if(has_midnshield) + str = "It looks like your mind is shielded, offering you a choice." + to_chat(user, "[src] pulses, the tendrils wrapping around your head. [str]") + if(alert(user, "Would you like to attempt to force the shielding influence from your mind? This will destroy your mindshield implant.", "Destroy mindshield?", "Yes", "No") == "Yes") + if(spent || !user.CanReach(src) || user.incapacitated() || user.IsKnockdown() || user.IsStun()) + return + qdel(has_mindshield) + if(add_servant_of_ratvar(user, FALSE, FALSE, TRUE)) + spent = TRUE + else + to_chat(user, "[src] falls dark. It appears you weren't worthy.") + return ..() + //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clockwork/slab/debug/attack_hand(mob/living/user) if(!is_servant_of_ratvar(user)) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index f14aeede9a..f63c99a9ed 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -6,6 +6,30 @@ throw_range = 5 w_class = WEIGHT_CLASS_SMALL +/obj/item/tome/traitor + var/spent = FALSE + +/obj/item/tome/traitor/attack_self(mob/living/user) + if(!iscultist(user) && !spent) + to_chat(user, "You press your hand onto [src], sinister tendrils of corrupted magic swirling around you. Was this the best of ideas?") + if(user.mind.add_antag_datum(/datum/antagonist/cult/neutered)) + spent = TRUE + else + var/has_mindshield = locate(/obj/item/implant/mindshield) in user + var/str = "It looks like your mind is protected. You can probably refund this with your uplink." + if(has_midnshield) + str = "It looks like your mind is shielded, offering you a choice." + to_chat(user, "[src] pulses, the tendrils wrapping around your head. [str]") + if(alert(user, "Would you like to attempt to force the shielding influence from your mind? This will destroy your mindshield implant.", "Destroy mindshield?", "Yes", "No") == "Yes") + if(spent || !user.CanReach(src) || user.incapacitated() || user.IsKnockdown() || user.IsStun()) + return + qdel(has_mindshield) + if(user.mind.add_antag_datum(/datum/antagonist/cult/neutered)) + spent = TRUE + else + to_chat(user, "[src] falls dark. It appears you weren't worthy.") + return ..() + /obj/item/melee/cultblade/dagger name = "ritual dagger" desc = "A strange dagger said to be used by sinister groups for \"preparing\" a corpse before sacrificing it to their dark gods." From 7e88d05b1d224d2ac907a8d49f056f7db8647c4c Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 00:50:26 -0700 Subject: [PATCH 05/15] items --- .../clockcult/clock_items/clockwork_slab.dm | 5 ++++- .../antagonists/clockcult/clock_scripture.dm | 4 ++-- .../clock_scriptures/scripture_scripts.dm | 2 +- code/modules/antagonists/cult/cult_items.dm | 5 ++++- code/modules/uplink/uplink_items/uplink_roles.dm | 16 ++++++++++++++++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index b1539c0ad9..f0e9ee4944 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -39,6 +39,9 @@ /obj/item/clockwork/slab/traitor var/spent = FALSE +/obj/item/clockwork/slab/traitor/check_uplink_validity() + return !spent + /obj/item/clockwork/slab/traitor/attack_self(mob/living/user) if(!is_servant_of_ratvar(user) && !spent) to_chat(user, "You press your hand onto [src], golden tendrils of light latching onto you. Was this the best of ideas?") @@ -47,7 +50,7 @@ else var/has_mindshield = locate(/obj/item/implant/mindshield) in user var/str = "It looks like your mind is protected. You can probably refund this with your uplink." - if(has_midnshield) + if(has_mindshield) str = "It looks like your mind is shielded, offering you a choice." to_chat(user, "[src] pulses, the tendrils wrapping around your head. [str]") if(alert(user, "Would you like to attempt to force the shielding influence from your mind? This will destroy your mindshield implant.", "Destroy mindshield?", "Yes", "No") == "Yes") diff --git a/code/modules/antagonists/clockcult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm index 98b0fff084..16d251fe92 100644 --- a/code/modules/antagonists/clockcult/clock_scripture.dm +++ b/code/modules/antagonists/clockcult/clock_scripture.dm @@ -30,7 +30,7 @@ Applications: 8 servants, 3 caches, and 100 CV var/primary_component var/important = FALSE //important scripture will be italicized in the slab's interface var/sort_priority = 1 //what position the scripture should have in a list of scripture. Should be based off of component costs/reqs, but you can't initial() lists. - var/require_full_power = FALSE //requires the user to be a full, non neutered servant of ratvar + var/requires_full_power = FALSE //requires the user to be a full, non neutered servant of ratvar //messages for offstation scripture recital, courtesy ratvar's generals(and neovgre) var/static/list/neovgre_penalty = list("Go to the station.", "Useless.", "Don't waste time.", "Pathetic.", "Wasteful.") @@ -78,7 +78,7 @@ Applications: 8 servants, 3 caches, and 100 CV /datum/clockwork_scripture/proc/can_recite() //If the words can be spoken if(!invoker || !slab || invoker.get_active_held_item() != slab) return FALSE - if(!is_servant_of_ratvar(invoker, require_full_power)) + if(!is_servant_of_ratvar(invoker, requires_full_power)) to_chat(invoker, "You aren't strongly connected enough to Ratvar to invoke this!") return FALSE if(!invoker.can_speak_vocal()) diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm index fb32eda309..d6296aeaa0 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm @@ -76,7 +76,7 @@ return FALSE return ..() -/datum/clockwork_Scripture/create_object/vitality_matrix/get_spawn_path(mob/user) +/datum/clockwork_scripture/create_object/vitality_matrix/get_spawn_path(mob/user) if(!is_servant_of_ratvar(user, TRUE)) return /obj/effect/clockwork/sigil/vitality/neutered return ..() diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index f63c99a9ed..47762e366c 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -9,6 +9,9 @@ /obj/item/tome/traitor var/spent = FALSE +/obj/item/tome/traitor/check_uplink_validity() + return !spent + /obj/item/tome/traitor/attack_self(mob/living/user) if(!iscultist(user) && !spent) to_chat(user, "You press your hand onto [src], sinister tendrils of corrupted magic swirling around you. Was this the best of ideas?") @@ -17,7 +20,7 @@ else var/has_mindshield = locate(/obj/item/implant/mindshield) in user var/str = "It looks like your mind is protected. You can probably refund this with your uplink." - if(has_midnshield) + if(has_mindshield) str = "It looks like your mind is shielded, offering you a choice." to_chat(user, "[src] pulses, the tendrils wrapping around your head. [str]") if(alert(user, "Would you like to attempt to force the shielding influence from your mind? This will destroy your mindshield implant.", "Destroy mindshield?", "Yes", "No") == "Yes") diff --git a/code/modules/uplink/uplink_items/uplink_roles.dm b/code/modules/uplink/uplink_items/uplink_roles.dm index 89d3c25700..cf5f708093 100644 --- a/code/modules/uplink/uplink_items/uplink_roles.dm +++ b/code/modules/uplink/uplink_items/uplink_roles.dm @@ -92,6 +92,22 @@ restricted_roles = list("Chaplain") surplus = 5 //Very low chance to get it in a surplus crate even without being the chaplain +/datum/uplink_item/role_restricted/his_grace + name = "Clockwork Slab" + desc = "A reverse engineered clockwork slab. Is this really a good idea?." + item = /obj/item/clockwork/slab/traitor + cost = 20 + refundable = TRUE + restricted_roles = list("Chaplain") + +/datum/uplink_item/role_restricted/his_grace + name = "Arcane Tome" + desc = "A replica of a Nar'sian tome. This is probably a bad idea.." + item = /obj/item/tome/traitor + cost = 20 + refundable = TRUE + restricted_roles = list("Chaplain") + /datum/uplink_item/role_restricted/explosive_hot_potato name = "Exploding Hot Potato" desc = "A potato rigged with explosives. On activation, a special mechanism is activated that prevents it from being dropped. \ From fc5eb82a6b7e2786aa14ec23418b7728d3c9a685 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 00:56:38 -0700 Subject: [PATCH 06/15] limit summon ghost --- code/modules/antagonists/cult/runes.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index be5dae2c81..2da4b4d155 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -815,6 +815,7 @@ structure_check() searches for nearby cultist structures required for the invoca invoke_damage = 10 construct_invoke = FALSE color = RUNE_COLOR_DARKRED + requires_full_power = TRUE var/mob/living/affecting = null var/ghost_limit = 3 var/ghosts = 0 From c49da64f075fee16239c7571823c0216a3a688b2 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 13:24:51 -0700 Subject: [PATCH 07/15] <3 google --- code/modules/antagonists/cult/blood_magic.dm | 10 ++++++++-- code/modules/antagonists/cult/cult_items.dm | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 794010d9c0..95e6c50750 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -570,7 +570,9 @@ var/turf/T = get_turf(target) if(istype(target, /obj/item/stack/sheet/metal)) var/obj/item/stack/sheet/candidate = target - if(candidate.use(50)) + if(!iscultist(user, TRUE)) + to_chat(user, "You are not strongly connected enough to Nar'sie to use make constructs...") + else if(candidate.use(50)) uses-- to_chat(user, "A dark cloud emanates from your hand and swirls around the metal, twisting it into a construct shell!") new /obj/structure/constructshell(T) @@ -593,7 +595,9 @@ SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) else if(istype(target,/mob/living/silicon/robot)) var/mob/living/silicon/robot/candidate = target - if(candidate.mmi) + if(!iscultist(user, TRUE)) + to_chat(user, "You are not strongly connected enough to Nar'sie to use make constructs...") + else if(candidate.mmi) user.visible_message("A dark cloud emanates from [user]'s hand and swirls around [candidate]!") playsound(T, 'sound/machines/airlock_alien_prying.ogg', 80, 1) var/prev_color = candidate.color @@ -812,6 +816,8 @@ if("Blood Beam (500)") if(uses < 500) to_chat(user, "You need 500 charges to perform this rite.") + else if(!iscultist(user, TRUE)) + to_chat(user, "You are not strongly connected to Nar'sie enough to use something of this power.") else var/obj/rite = new /obj/item/blood_beam() uses -= 500 diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 47762e366c..5d7cb86ca4 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -524,7 +524,7 @@ var/static/curselimit = 0 /obj/item/shuttle_curse/attack_self(mob/living/user) - if(!iscultist(user)) + if(!iscultist(user, TRUE)) user.dropItemToGround(src, TRUE) user.Knockdown(100) to_chat(user, "A powerful force shoves you away from [src]!") From f5b60b52bf1671ecce97c097b9d61ba633c18398 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 13:51:10 -0700 Subject: [PATCH 08/15] fuck woops --- code/modules/uplink/uplink_items/uplink_roles.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/uplink/uplink_items/uplink_roles.dm b/code/modules/uplink/uplink_items/uplink_roles.dm index cf5f708093..2e3665cd29 100644 --- a/code/modules/uplink/uplink_items/uplink_roles.dm +++ b/code/modules/uplink/uplink_items/uplink_roles.dm @@ -92,7 +92,7 @@ restricted_roles = list("Chaplain") surplus = 5 //Very low chance to get it in a surplus crate even without being the chaplain -/datum/uplink_item/role_restricted/his_grace +/datum/uplink_item/role_restricted/clockwork_slab name = "Clockwork Slab" desc = "A reverse engineered clockwork slab. Is this really a good idea?." item = /obj/item/clockwork/slab/traitor @@ -100,7 +100,7 @@ refundable = TRUE restricted_roles = list("Chaplain") -/datum/uplink_item/role_restricted/his_grace +/datum/uplink_item/role_restricted/arcane_tome name = "Arcane Tome" desc = "A replica of a Nar'sian tome. This is probably a bad idea.." item = /obj/item/tome/traitor From 7471f59bc3cb83b383eb4dccc8c04be98647885a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 13:56:04 -0700 Subject: [PATCH 09/15] ignore eligibility checks --- code/game/gamemodes/clock_cult/clock_cult.dm | 3 ++- .../clockcult/clock_items/clockwork_slab.dm | 16 ++-------------- code/modules/antagonists/clockcult/clockcult.dm | 3 ++- code/modules/antagonists/cult/cult.dm | 6 +++++- code/modules/antagonists/cult/cult_items.dm | 16 ++-------------- 5 files changed, 13 insertions(+), 31 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 2f395cc149..be05a0a9bf 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -73,7 +73,7 @@ Credit where due: return TRUE return FALSE -/proc/add_servant_of_ratvar(mob/L, silent = FALSE, create_team = TRUE, neutered = FALSE) +/proc/add_servant_of_ratvar(mob/L, silent = FALSE, create_team = TRUE, neutered = FALSE, ignore_eligibility = FALSE) if(!L || !L.mind) return var/update_type = /datum/antagonist/clockcult @@ -84,6 +84,7 @@ Credit where due: var/datum/antagonist/clockcult/C = new update_type(L.mind) C.make_team = create_team C.show_in_roundend = create_team //tutorial scarabs begone + C.ignore_eligibility_check = ignore_eligibility if(iscyborg(L)) var/mob/living/silicon/robot/R = L diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index f0e9ee4944..f10d9daba9 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -45,22 +45,10 @@ /obj/item/clockwork/slab/traitor/attack_self(mob/living/user) if(!is_servant_of_ratvar(user) && !spent) to_chat(user, "You press your hand onto [src], golden tendrils of light latching onto you. Was this the best of ideas?") - if(add_servant_of_ratvar(user, FALSE, FALSE, TRUE)) + if(add_servant_of_ratvar(user, FALSE, FALSE, TRUE, TRUE)) spent = TRUE else - var/has_mindshield = locate(/obj/item/implant/mindshield) in user - var/str = "It looks like your mind is protected. You can probably refund this with your uplink." - if(has_mindshield) - str = "It looks like your mind is shielded, offering you a choice." - to_chat(user, "[src] pulses, the tendrils wrapping around your head. [str]") - if(alert(user, "Would you like to attempt to force the shielding influence from your mind? This will destroy your mindshield implant.", "Destroy mindshield?", "Yes", "No") == "Yes") - if(spent || !user.CanReach(src) || user.incapacitated() || user.IsKnockdown() || user.IsStun()) - return - qdel(has_mindshield) - if(add_servant_of_ratvar(user, FALSE, FALSE, TRUE)) - spent = TRUE - else - to_chat(user, "[src] falls dark. It appears you weren't worthy.") + to_chat(user, "[src] falls dark. It appears you weren't worthy.") return ..() //ATTACK HAND IGNORING PARENT RETURN VALUE diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm index 7462620287..ef52975da3 100644 --- a/code/modules/antagonists/clockcult/clockcult.dm +++ b/code/modules/antagonists/clockcult/clockcult.dm @@ -9,6 +9,7 @@ var/datum/team/clockcult/clock_team var/make_team = TRUE //This should be only false for tutorial scarabs var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact + var/ignore_eligibility_check = FALSE /datum/antagonist/clockcult/silent silent = TRUE @@ -41,7 +42,7 @@ /datum/antagonist/clockcult/can_be_owned(datum/mind/new_owner) . = ..() - if(.) + if(. && !ignore_eligibility_check) . = is_eligible_servant(new_owner.current) /datum/antagonist/clockcult/greet() diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 4dbdf6a7d5..ce60045817 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -13,10 +13,14 @@ var/give_equipment = FALSE var/datum/team/cult/cult_team var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact + var/ignore_eligibility_checks = FALSE /datum/antagonist/cult/neutered neutered = TRUE +/datum/antagonist/cult/neutered/traitor + ignore_eligibility_checks = TRUE + /datum/antagonist/cult/get_team() return cult_team @@ -46,7 +50,7 @@ /datum/antagonist/cult/can_be_owned(datum/mind/new_owner) . = ..() - if(. && !ignore_implant) + if(. && !ignore_implant && !ignore_eligibility_checks) . = is_convertable_to_cult(new_owner.current,cult_team) /datum/antagonist/cult/greet() diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 5d7cb86ca4..c4fd2a657b 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -15,22 +15,10 @@ /obj/item/tome/traitor/attack_self(mob/living/user) if(!iscultist(user) && !spent) to_chat(user, "You press your hand onto [src], sinister tendrils of corrupted magic swirling around you. Was this the best of ideas?") - if(user.mind.add_antag_datum(/datum/antagonist/cult/neutered)) + if(user.mind.add_antag_datum(/datum/antagonist/cult/neutered/traitor)) spent = TRUE else - var/has_mindshield = locate(/obj/item/implant/mindshield) in user - var/str = "It looks like your mind is protected. You can probably refund this with your uplink." - if(has_mindshield) - str = "It looks like your mind is shielded, offering you a choice." - to_chat(user, "[src] pulses, the tendrils wrapping around your head. [str]") - if(alert(user, "Would you like to attempt to force the shielding influence from your mind? This will destroy your mindshield implant.", "Destroy mindshield?", "Yes", "No") == "Yes") - if(spent || !user.CanReach(src) || user.incapacitated() || user.IsKnockdown() || user.IsStun()) - return - qdel(has_mindshield) - if(user.mind.add_antag_datum(/datum/antagonist/cult/neutered)) - spent = TRUE - else - to_chat(user, "[src] falls dark. It appears you weren't worthy.") + to_chat(user, "[src] falls dark. It appears you weren't worthy.") return ..() /obj/item/melee/cultblade/dagger From 8f26325822347f599d85167ab5a225d607301144 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 21:05:51 -0700 Subject: [PATCH 10/15] more stuff --- code/game/gamemodes/clock_cult/clock_cult.dm | 11 +++++------ code/game/gamemodes/cult/cult.dm | 4 ++-- .../clockcult/clock_items/clockwork_slab.dm | 2 +- code/modules/antagonists/clockcult/clockcult.dm | 5 +++++ code/modules/antagonists/cult/cult.dm | 2 ++ .../reagents/chemistry/reagents/other_reagents.dm | 4 ++-- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index be05a0a9bf..8201d6472a 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -45,11 +45,11 @@ Credit where due: // PROCS // /////////// -/proc/is_servant_of_ratvar(mob/M, require_full_power = FALSE) +/proc/is_servant_of_ratvar(mob/M, require_full_power = FALSE, holy_water_check = FALSE) if(!istype(M) || isobserver(M)) return FALSE var/datum/antagonist/clockcult/D = M?.mind?.has_antag_datum(/datum/antagonist/clockcult) - return D && (!require_full_power || !D.neutered) + return D && (!require_full_power || !D.neutered) && (!holy_water_check || !D.ignore_holy_water) /proc/is_eligible_servant(mob/M) if(!istype(M)) @@ -73,18 +73,17 @@ Credit where due: return TRUE return FALSE -/proc/add_servant_of_ratvar(mob/L, silent = FALSE, create_team = TRUE, neutered = FALSE, ignore_eligibility = FALSE) +/proc/add_servant_of_ratvar(mob/L, silent = FALSE, create_team = TRUE, override_type) if(!L || !L.mind) return var/update_type = /datum/antagonist/clockcult if(silent) update_type = /datum/antagonist/clockcult/silent - if(neutered) //prioritizes - update_type = /datum/antagonist/clockcult/neutered + if(override_type) //prioritizes + update_type = override_type var/datum/antagonist/clockcult/C = new update_type(L.mind) C.make_team = create_team C.show_in_roundend = create_team //tutorial scarabs begone - C.ignore_eligibility_check = ignore_eligibility if(iscyborg(L)) var/mob/living/silicon/robot/R = L diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 1b295bcc50..6329f5ad18 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -3,11 +3,11 @@ /datum/game_mode var/list/datum/mind/cult = list() -/proc/iscultist(mob/living/M, require_full_power = FALSE) +/proc/iscultist(mob/living/M, require_full_power = FALSE, holy_water_check = FALSE) if(!istype(M)) return FALSE var/datum/antagonist/cult/D = M?.mind?.has_antag_datum(/datum/antagonist/cult) - return D && (!require_full_power || !D.neutered) + return D && (!require_full_power || !D.neutered) && (!holy_water_check || !D.ignore_holy_water) /datum/team/cult/proc/is_sacrifice_target(datum/mind/mind) for(var/datum/objective/sacrifice/sac_objective in objectives) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index f10d9daba9..8e3b7f10de 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -45,7 +45,7 @@ /obj/item/clockwork/slab/traitor/attack_self(mob/living/user) if(!is_servant_of_ratvar(user) && !spent) to_chat(user, "You press your hand onto [src], golden tendrils of light latching onto you. Was this the best of ideas?") - if(add_servant_of_ratvar(user, FALSE, FALSE, TRUE, TRUE)) + if(add_servant_of_ratvar(user, FALSE, FALSE, /datum/antagonist/clockcult/neutered/traitor)) spent = TRUE else to_chat(user, "[src] falls dark. It appears you weren't worthy.") diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm index ef52975da3..64637d0635 100644 --- a/code/modules/antagonists/clockcult/clockcult.dm +++ b/code/modules/antagonists/clockcult/clockcult.dm @@ -10,6 +10,7 @@ var/make_team = TRUE //This should be only false for tutorial scarabs var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact var/ignore_eligibility_check = FALSE + var/ignore_holy_water = FALSE /datum/antagonist/clockcult/silent silent = TRUE @@ -18,6 +19,10 @@ /datum/antagonist/clockcult/neutered neutered = TRUE +/datum/antagonist/clockcult/neutered/traitor + ignore_eligibility_check = TRUE + ignore_holy_water = TRUE + /datum/antagonist/clockcult/Destroy() qdel(hierophant_network) return ..() diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index ce60045817..195a37aec5 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -14,12 +14,14 @@ var/datum/team/cult/cult_team var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact var/ignore_eligibility_checks = FALSE + var/ignore_holy_water = FALSE /datum/antagonist/cult/neutered neutered = TRUE /datum/antagonist/cult/neutered/traitor ignore_eligibility_checks = TRUE + ignore_holy_water = TRUE /datum/antagonist/cult/get_team() return cult_team diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index ccc966e7e4..8e28365d7d 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -341,7 +341,7 @@ data = 1 data++ M.jitteriness = min(M.jitteriness+4,10) - if(iscultist(M)) + if(iscultist(M, FALSE, TRUE)) for(var/datum/action/innate/cult/blood_magic/BM in M.actions) if(!BM.holy_dispel) BM.holy_dispel = TRUE @@ -370,7 +370,7 @@ if("emote") M.visible_message("[M] [pick("whimpers quietly", "shivers as though cold", "glances around in paranoia")].") if(data >= 60) // 30 units, 135 seconds - if(iscultist(M) || is_servant_of_ratvar(M)) + if(iscultist(M, FALSE, TRUE) || is_servant_of_ratvar(M, FALSE, TRUE)) if(iscultist(M)) SSticker.mode.remove_cultist(M.mind, FALSE, TRUE) else if(is_servant_of_ratvar(M)) From e5a8c7801eed9435608f58214d323fc16fabfc27 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Jan 2020 21:26:54 -0700 Subject: [PATCH 11/15] tweak --- .../antagonists/clockcult/clock_items/clockwork_slab.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index 8e3b7f10de..6e7d830db6 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -47,6 +47,9 @@ to_chat(user, "You press your hand onto [src], golden tendrils of light latching onto you. Was this the best of ideas?") if(add_servant_of_ratvar(user, FALSE, FALSE, /datum/antagonist/clockcult/neutered/traitor)) spent = TRUE + // Add some (5 KW) power so they don't suffer for 100 ticks + GLOB.clockwork_power += 5000 + // This intentionally does not use adjust_clockwork_power. else to_chat(user, "[src] falls dark. It appears you weren't worthy.") return ..() From a43f9ec7be659659689c335f08055d81fdb0c101 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 10 Mar 2020 19:57:30 -0700 Subject: [PATCH 12/15] refactor time fuck you --- code/modules/antagonists/clockcult/clockcult.dm | 4 +++- code/modules/antagonists/cult/cult.dm | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm index 8ef8d2e11c..a6840f3d85 100644 --- a/code/modules/antagonists/clockcult/clockcult.dm +++ b/code/modules/antagonists/clockcult/clockcult.dm @@ -5,7 +5,7 @@ antagpanel_category = "Clockcult" job_rank = ROLE_SERVANT_OF_RATVAR antag_moodlet = /datum/mood_event/cult - var/datum/action/innate/hierophant/hierophant_network = new() + var/datum/action/innate/hierophant/hierophant_network = new var/datum/team/clockcult/clock_team var/make_team = TRUE //This should be only false for tutorial scarabs var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact @@ -22,6 +22,8 @@ /datum/antagonist/clockcult/neutered/traitor ignore_eligibility_check = TRUE ignore_holy_water = TRUE + show_in_roundend = FALSE + make_team = FALSE /datum/antagonist/clockcult/Destroy() qdel(hierophant_network) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 5ae1ea0711..2eb89a66e9 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -10,8 +10,9 @@ var/datum/action/innate/cult/blood_magic/magic = new job_rank = ROLE_CULTIST var/ignore_implant = FALSE + var/make_team = TRUE var/give_equipment = FALSE - var/datum/team/cult/cult_team + var/datum/team/cult/_cult_team var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact var/ignore_eligibility_checks = FALSE var/ignore_holy_water = FALSE @@ -22,12 +23,14 @@ /datum/antagonist/cult/neutered/traitor ignore_eligibility_checks = TRUE ignore_holy_water = TRUE + show_in_roundend = FALSE + make_team = FALSE /datum/antagonist/cult/get_team() return cult_team /datum/antagonist/cult/create_team(datum/team/cult/new_team) - if(!new_team) + if(!new_team && make_team) //todo remove this and allow admin buttons to create more than one cult for(var/datum/antagonist/cult/H in GLOB.antagonists) if(!H.owner) @@ -38,7 +41,7 @@ cult_team = new /datum/team/cult cult_team.setup_objectives() return - if(!istype(new_team)) + if(make_team && !istype(new_team)) stack_trace("Wrong team type passed to [type] initialization.") cult_team = new_team From 18471be4ce24f79831764a4548ea5a554d0aca93 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 10 Mar 2020 20:11:18 -0700 Subject: [PATCH 13/15] cult team --- code/_onclick/hud/alert.dm | 2 +- code/game/gamemodes/cult/cult.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 2 +- code/modules/antagonists/cult/cult.dm | 8 ++++---- code/modules/antagonists/cult/cult_comms.dm | 20 +++++++++++++++---- code/modules/antagonists/cult/ritual.dm | 4 ++-- code/modules/antagonists/cult/runes.dm | 6 ++++++ .../antagonists/wizard/equipment/soulstone.dm | 2 +- .../mob/living/simple_animal/constructs.dm | 3 +++ code/modules/power/singularity/narsie.dm | 3 ++- 10 files changed, 37 insertions(+), 15 deletions(-) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index bdc6ea2980..7c116cc606 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -334,7 +334,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." return var/datum/antagonist/cult/antag = mob_viewer.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!antag) + if(!antag?.cult_team) return var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 6329f5ad18..8ec4123201 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -96,7 +96,7 @@ add_cultist(cult_mind, 0, equip=TRUE) if(!main_cult) var/datum/antagonist/cult/C = cult_mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(C && C.cult_team) + if(C?.cult_team) main_cult = C.cult_team ..() diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 774a978886..46ecb130f5 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -439,7 +439,7 @@ "A feeling of warmth washes over you, rays of holy light surround your body and protect you from the flash of light!") else // cult doesn't stun any longer when halos are out, instead it does burn damage + knockback! var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(user_antag.cult_team.cult_ascendent) + if(user_antag.cult_team?.cult_ascendent) if(!iscultist(L)) L.adjustFireLoss(20) if(L.move_resist < MOVE_FORCE_STRONG) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 2eb89a66e9..18c39c05b4 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -12,7 +12,7 @@ var/ignore_implant = FALSE var/make_team = TRUE var/give_equipment = FALSE - var/datum/team/cult/_cult_team + var/datum/team/cult/cult_team var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact var/ignore_eligibility_checks = FALSE var/ignore_holy_water = FALSE @@ -122,7 +122,7 @@ if(ishuman(current)) magic.Grant(current) current.throw_alert("bloodsense", /obj/screen/alert/bloodsense) - if(cult_team.cult_risen) + if(cult_team?.cult_risen) cult_team.rise(current) if(cult_team.cult_ascendent) cult_team.ascend(current) @@ -155,7 +155,7 @@ owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just reverted to [owner.current.p_their()] old faith!", null, null, null, owner.current) to_chat(owner.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant.") owner.current.log_message("has renounced the cult of Nar'Sie!", LOG_ATTACK, color="#960000") - if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client) + if(cult_team?.blood_target && cult_team.blood_target_image && owner.current.client) owner.current.client.images -= cult_team.blood_target_image . = ..() @@ -217,7 +217,7 @@ throwing.Grant(current) current.update_action_buttons_icon() current.apply_status_effect(/datum/status_effect/cult_master) - if(cult_team.cult_risen) + if(cult_team?.cult_risen) cult_team.rise(current) if(cult_team.cult_ascendent) cult_team.ascend(current) diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 761412e9f8..da03b6dc1c 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -74,7 +74,7 @@ /datum/action/innate/cult/mastervote/IsAvailable() var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!C || C.cult_team.cult_vote_called || !ishuman(owner)) + if(!C?.cult_team || C.cult_team.cult_vote_called || !ishuman(owner)) return FALSE return ..() @@ -82,6 +82,9 @@ var/choice = alert(owner, "The mantle of leadership is heavy. Success in this role requires an expert level of communication and experience. Are you sure?",, "Yes", "No") if(choice == "Yes" && IsAvailable()) var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) + if(!C.cult_team) + to_chat(owner, "Do you not alreaady lead yourself?") + returns pollCultists(owner,C.cult_team) /proc/pollCultists(var/mob/living/Nominee,datum/team/cult/team) //Cult Master Poll @@ -151,6 +154,9 @@ var/datum/antagonist/cult/antag = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) if(!antag) return + if(!antag.cult_team) + to_chat(owner, "You have no team. You are alone.") + return for(var/i in 1 to 4) chant(i) var/list/destinations = list() @@ -261,7 +267,10 @@ return FALSE var/datum/antagonist/cult/C = caller.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - + if(!C.cult_team) + to_chat(ranged_ability_user, "What is the point of marking a target for yourself?") + remove_ranged_ability() + return if(target in view(7, get_turf(ranged_ability_user))) if(C.cult_team.blood_target) to_chat(ranged_ability_user, "The cult has already designated a target!") @@ -330,8 +339,11 @@ /datum/action/innate/cult/ghostmark/Activate() var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) + if(!C.cult_team) + to_chat(owmer, "You are alone. You do not have a team.") + return if(C.cult_team.blood_target) - if(cooldown>world.time) + if(cooldown > world.time) reset_blood_target(C.cult_team) to_chat(owner, "You have cleared the cult's blood target!") deltimer(C.cult_team.blood_target_reset_timer) @@ -339,7 +351,7 @@ else to_chat(owner, "The cult has already designated a target!") return - if(cooldown>world.time) + if(cooldown > world.time) to_chat(owner, "You aren't ready to place another blood mark yet!") return target = owner.orbiting?.parent || get_turf(owner) diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm index 769f2827dc..40804ccc24 100644 --- a/code/modules/antagonists/cult/ritual.dm +++ b/code/modules/antagonists/cult/ritual.dm @@ -87,8 +87,8 @@ This file contains the cult dagger and rune list code to_chat(user, "Only one ritual site remains - it must be reserved for the final summoning!") return if(ispath(rune_to_scribe, /obj/effect/rune/narsie)) - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - var/datum/objective/sacrifice/sac_objective = locate() in user_antag.cult_team.objectives + var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team?.objectives + var/datum/objective/sacrifice/sac_objective = locate() in user_antag.cult_team?.objectives if(!summon_objective) to_chat(user, "Nar'Sie does not wish to be summoned!") return diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index f4f2dd2103..43ca43d04c 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -485,6 +485,9 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() return var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) + if(!user_antag.cult_team) + to_chat(user, "You can't seem to make the arcane links to your fellows that you'd need to use this.") + return var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives var/area/place = get_area(src) if(!(place in summon_objective.summon_spots)) @@ -955,6 +958,9 @@ structure_check() searches for nearby cultist structures required for the invoca var/area/place = get_area(src) var/mob/living/user = invokers[1] var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) + if(!user_antag.cult_team) + to_chat(user, "You can't seem to make the arcane links to your fellows that you'd need to use this.") + return var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives if(summon_objective.summon_spots.len <= 1) to_chat(user, "Only one ritual site remains - it must be reserved for the final summoning!") diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 59b9aa33d5..d7f1046cd7 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -145,7 +145,7 @@ if("VICTIM") var/mob/living/carbon/human/T = target var/datum/antagonist/cult/C = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(C && C.cult_team.is_sacrifice_target(T.mind)) + if(C && C.cult_team?.is_sacrifice_target(T.mind)) if(iscultist(user)) to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"") else diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 708c9ea2cd..6bcaea9b4a 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -389,6 +389,9 @@ var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult) if(!C) return + if(!C.cult_team) + to_chat(the_construct, "You are alone, and have no team.") + return var/datum/objective/eldergod/summon_objective = locate() in C.cult_team.objectives if(summon_objective.check_completion()) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index a073997b9d..c471047682 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -51,7 +51,8 @@ for(var/datum/antagonist/cult/C in GLOB.antagonists) if(!C.owner) continue - all_cults |= C.cult_team + if(C.cult_team) + all_cults |= C.cult_team for(var/datum/team/cult/T in all_cults) deltimer(T.blood_target_reset_timer) T.blood_target = src From 3071dec0d6bcd7daf63f37f11747e6b38e152087 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 10 Mar 2020 20:14:31 -0700 Subject: [PATCH 14/15] probably needs a testmerge --- code/modules/antagonists/cult/cult_comms.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index da03b6dc1c..8021443217 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -84,7 +84,7 @@ var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) if(!C.cult_team) to_chat(owner, "Do you not alreaady lead yourself?") - returns + return pollCultists(owner,C.cult_team) /proc/pollCultists(var/mob/living/Nominee,datum/team/cult/team) //Cult Master Poll @@ -340,7 +340,7 @@ /datum/action/innate/cult/ghostmark/Activate() var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) if(!C.cult_team) - to_chat(owmer, "You are alone. You do not have a team.") + to_chat(owner, "You are alone. You do not have a team.") return if(C.cult_team.blood_target) if(cooldown > world.time) From b69b19eb534bfa4c324cf8d65a6aba7ca696d240 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 29 Mar 2020 20:59:52 -0700 Subject: [PATCH 15/15] runtimes --- code/modules/antagonists/cult/cult.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 84ca13e345..023794182a 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -47,7 +47,7 @@ cult_team = new_team /datum/antagonist/cult/proc/add_objectives() - objectives |= cult_team.objectives + objectives |= cult_team?.objectives /datum/antagonist/cult/Destroy() QDEL_NULL(communion) @@ -74,7 +74,7 @@ SSticker.mode.update_cult_icons_added(owner) current.log_message("has been converted to the cult of Nar'Sie!", LOG_ATTACK, color="#960000") - if(cult_team.blood_target && cult_team.blood_target_image && current.client) + if(cult_team?.blood_target && cult_team.blood_target_image && current.client) current.client.images += cult_team.blood_target_image @@ -117,7 +117,7 @@ current = mob_override current.faction |= "cult" current.grant_language(/datum/language/narsie) - if(!cult_team.cult_master) + if(!cult_team?.cult_master) vote.Grant(current) communion.Grant(current) if(ishuman(current))