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))