diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 337f3aa79bc..5211b82ea44 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -122,6 +122,10 @@ if(!keyword) return + // Check everything again, in case they moved + if(!can_scribe(user)) + return + // Check if the rune is allowed var/area/A = get_area(src) var/turf/runeturf = get_turf(user) @@ -131,40 +135,43 @@ to_chat(user, "The veil is not weak enough here to summon a cultist, you must be on station!") return + var/old_color = user.color // we'll temporarily redden the user for better feedback to fellow cultists. Store this to revert them back. if(narsie_rune) if(!narsie_rune_check(user, A)) return // don't do shit - else - var/list/summon_areas = gamemode.cult_objs.obj_summon.summon_spots - if(!(A in summon_areas)) // Check again to make sure they didn't move - to_chat(user, "The ritual can only begin where the veil is weak - in [english_list(summon_areas)]!") - return - GLOB.command_announcement.Announce("Figments from an eldritch god are being summoned into the [A.map_name] from an unknown dimension. Disrupt the ritual at all costs, before the station is destroyed! Space law and SOP are suspended. The entire crew must kill cultists on sight.", "Central Command Higher Dimensional Affairs", 'sound/AI/spanomalies.ogg') - for(var/I in spiral_range_turfs(1, user, 1)) - var/turf/T = I - var/obj/machinery/shield/cult/narsie/N = new(T) - shields |= N - - // Check everything again, in case they moved - if(!can_scribe(user)) - return + var/list/summon_areas = gamemode.cult_objs.obj_summon.summon_spots + if(!(A in summon_areas)) // Check again to make sure they didn't move + to_chat(user, "The ritual can only begin where the veil is weak - in [english_list(summon_areas)]!") + return + GLOB.command_announcement.Announce("Figments from an eldritch god are being summoned into the [A.map_name] from an unknown dimension. Disrupt the ritual at all costs, before the station is destroyed! Space law and SOP are suspended. The entire crew must kill cultists on sight.", "Central Command Higher Dimensional Affairs", 'sound/AI/spanomalies.ogg') + for(var/I in spiral_range_turfs(1, user, 1)) + var/turf/T = I + var/obj/machinery/shield/cult/narsie/N = new(T) + shields |= N + user.color = "red" // Draw the rune var/mob/living/carbon/human/H = user - H.cult_self_harm(initial(rune.scribe_damage), TRUE) - if(!do_after(user, initial(rune.scribe_delay) * scribe_multiplier, target = runeturf)) - for(var/V in shields) // Only used for the 'Tear Veil' rune - var/obj/machinery/shield/S = V - if(S && !QDELETED(S)) - qdel(S) + H.cult_self_harm(initial(rune.scribe_damage)) + var/others_message + if(!narsie_rune) + others_message = "[user] cuts [user.p_their()] body and begins writing in [user.p_their()] own blood!" + else + others_message = "[user] cuts [user.p_their()] body and begins writing something particularly ominous in [user.p_their()] own blood!" + user.visible_message(others_message, + "You slice open your body and begin drawing a sigil of [SSticker.cultdat.entity_title3].") + + var/scribe_successful = do_after(user, initial(rune.scribe_delay) * scribe_multiplier, target = runeturf) + for(var/V in shields) // Only used for the 'Tear Veil' rune + var/obj/machinery/shield/S = V + if(S && !QDELETED(S)) + qdel(S) + user.color = old_color + if(!scribe_successful) return user.visible_message("[user] creates a strange circle in [user.p_their()] own blood.", "You finish drawing the arcane markings of [SSticker.cultdat.entity_title3].") - for(var/V in shields) // Only for the 'Tear Veil' rune - var/obj/machinery/shield/S = V - if(S && !QDELETED(S)) - qdel(S) var/obj/effect/rune/R = new rune(runeturf, keyword) if(narsie_rune) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 73ab48a4312..4bec68bc56f 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -74,7 +74,7 @@ return TRUE //Called when drawing cult runes/using cult spells. Deal damage to a random arm/hand, or chest if not there. -/mob/living/carbon/cult_self_harm(damage, rune_message = FALSE) +/mob/living/carbon/cult_self_harm(damage) var/dam_zone = pick("l_arm", "l_hand", "r_arm", "r_hand") var/obj/item/organ/external/affecting = get_organ(dam_zone) if(!affecting) @@ -82,6 +82,3 @@ if(!affecting) //bruh where's your chest return FALSE apply_damage(damage, BRUTE, affecting) - if(rune_message) - visible_message("[src] cuts open [src.p_their()] [affecting.name] and begins writing in [src.p_their()] own blood!", - "You slice open your [affecting.name] and begin drawing a sigil of [SSticker.cultdat.entity_title3].") diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index bc3a7e5a41b..f5a714a3eda 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -358,5 +358,5 @@ M.do_attack_animation(src, ATTACK_EFFECT_DISARM) return TRUE -/mob/living/proc/cult_self_harm(damage, rune_message = FALSE) +/mob/living/proc/cult_self_harm(damage) return FALSE