diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm
index c34ab872b53..a0a7bf8f21c 100644
--- a/code/game/gamemodes/cult/blood_magic.dm
+++ b/code/game/gamemodes/cult/blood_magic.dm
@@ -180,6 +180,8 @@
..()
/datum/action/innate/cult/blood_spell/emp/Activate()
+ if(owner.holy_check())
+ return
owner.visible_message("[owner]'s body flashes a bright blue!", \
"You speak the cursed words, channeling an electromagnetic pulse from your body.")
owner.emp_act(2)
@@ -281,6 +283,8 @@
if(ranged_ability_user.incapacitated() || !iscultist(user))
user.ranged_ability.remove_ranged_ability(user)
return
+ if(user.holy_check())
+ return
var/turf/T = get_turf(ranged_ability_user)
if(!isturf(T))
return FALSE
@@ -307,6 +311,8 @@
var/revealing = FALSE //if it reveals or not
/datum/action/innate/cult/blood_spell/veiling/Activate()
+ if(owner.holy_check())
+ return
if(!revealing) // Hiding stuff
owner.visible_message("Thin grey dust falls from [owner]'s hand!", \
"You invoke the veiling spell, hiding nearby runes and cult structures.")
@@ -389,13 +395,9 @@
..()
/obj/item/melee/blood_magic/attack_self(mob/living/user)
- if(user.holy_check())
- return
afterattack(user, user, TRUE)
/obj/item/melee/blood_magic/attack(mob/living/M, mob/living/carbon/user)
- if(user.holy_check())
- return
if(!iscarbon(user) || !iscultist(user))
uses = 0
qdel(src)
@@ -431,6 +433,8 @@
var/mob/living/L = target
if(iscultist(target))
return
+ if(user.holy_check())
+ return
user.visible_message("[user] holds up [user.p_their()] hand, which explodes in a flash of red light!", \
"You attempt to stun [L] with the spell!")
@@ -467,6 +471,8 @@
invocation = "Sas'so c'arta forbici!"
/obj/item/melee/blood_magic/teleport/afterattack(atom/target, mob/living/carbon/user, proximity)
+ if(user.holy_check())
+ return
var/list/potential_runes = list()
var/list/teleportnames = list()
var/list/duplicaterunecount = list()
@@ -527,6 +533,8 @@
color = "#000000" // black
/obj/item/melee/blood_magic/shackles/afterattack(atom/target, mob/living/carbon/user, proximity)
+ if(user.holy_check())
+ return
if(iscarbon(target) && proximity)
var/mob/living/carbon/C = target
if(C.canBeHandcuffed() || C.get_arm_ignore())
@@ -585,6 +593,8 @@
Airlocks into brittle runed airlocks after a delay (harm intent)"}
/obj/item/melee/blood_magic/construction/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
+ if(user.holy_check())
+ return
if(proximity_flag)
if(channeling)
to_chat(user, "You are already invoking twisted construction!")
@@ -639,6 +649,8 @@
color = "#33cc33" // green
/obj/item/melee/blood_magic/armor/afterattack(atom/target, mob/living/carbon/user, proximity)
+ if(user.holy_check())
+ return
if(iscarbon(target) && proximity)
uses--
var/mob/living/carbon/C = target
@@ -662,6 +674,8 @@
has_source = FALSE //special, only availible for a blood cost.
/obj/item/melee/blood_magic/empower/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
+ if(user.holy_check())
+ return
if(proximity_flag)
//Shielded suit
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 74c69140831..a0dcdd96035 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -520,6 +520,10 @@
/obj/item/shield/mirror/IsReflect()
if(prob(reflect_chance))
+ if(istype(loc, /mob))
+ var/mob/user = loc
+ if(user.holy_check())
+ return FALSE
return TRUE
return FALSE
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index b2b4dfa534e..3f81bd6a029 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -58,6 +58,8 @@
/obj/structure/cult/functional/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user))
+ if(user.holy_check())
+ return
anchored = !anchored
to_chat(user, "You [anchored ? "":"un"]secure [src] [anchored ? "to":"from"] the floor.")
if(!anchored)
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 2317c71d72f..3f5ac5315d0 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -380,7 +380,7 @@ GLOBAL_LIST_INIT(cult_recipes, list ( \
if(!iscultist(user))
to_chat(user, "Only one with forbidden knowledge could hope to work this metal...")
return
- if(user.holy_check())
+ if(usr.holy_check())
return
if(!is_level_reachable(user.z))
to_chat(user, "The energies of this place interfere with the metal shaping!")
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index b57c3435132..7f0d25aa6e6 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -16,7 +16,7 @@
var/to_transfer = 0
var/max_amount = 50 //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount
var/merge_type = null // This path and its children should merge with this stack, defaults to src.type
- var/recipe_width = 400 //Width of the recipe popup
+ var/recipe_width = 400 //Width of the recipe popup
var/recipe_height = 400 //Height of the recipe popup
/obj/item/stack/New(loc, new_amount, merge = TRUE)
@@ -186,9 +186,15 @@
to_chat(usr, "\The [R.title] must be constructed on the floor!")
return FALSE
- if(R.no_cult_structure && (locate(/obj/structure/cult) in usr.drop_location()))
- to_chat(usr, "There is a structure here!")
- return FALSE
+ if(R.no_cult_structure)
+ if(usr.holy_check())
+ return
+ if(!is_level_reachable(usr.z))
+ to_chat(usr, "The energies of this place interfere with the metal shaping!")
+ return
+ if(locate(/obj/structure/cult) in usr.drop_location())
+ to_chat(usr, "There is a structure here!")
+ return FALSE
if(R.time)
to_chat(usr, "Building [R.title] ...")
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 55c74e1a6ef..01158a76775 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1464,6 +1464,9 @@ GLOBAL_LIST_INIT(holy_areas, typecacheof(list(
if(!is_type_in_typecache(loc.loc, GLOB.holy_areas))
return FALSE
+ if(!mind)
+ return FALSE
+
//Allows fullpower vampires to bypass holy areas
var/datum/vampire/vampire = mind.vampire
if(vampire && vampire.get_ability(/datum/vampire_passive/full))