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