diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index 8ca13d3eb2d..d4122be4293 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -903,25 +903,25 @@ name = "Fire Ants!" desc = span_warning("JESUS FUCKING CHRIST IT BURNS! CLICK TO GET THOSE THINGS OFF!") -/datum/status_effect/stagger - id = "stagger" +/datum/status_effect/rebuked + id = "rebuked" status_type = STATUS_EFFECT_REFRESH duration = 30 SECONDS tick_interval = 1 SECONDS alert_type = null -/datum/status_effect/stagger/on_apply() - owner.next_move_modifier *= 1.5 +/datum/status_effect/rebuked/on_apply() + owner.next_move_modifier *= 2 if(ishostile(owner)) var/mob/living/simple_animal/hostile/simple_owner = owner simple_owner.ranged_cooldown_time *= 2.5 return TRUE -/datum/status_effect/stagger/on_remove() +/datum/status_effect/rebuked/on_remove() . = ..() if(QDELETED(owner)) return - owner.next_move_modifier /= 1.5 + owner.next_move_modifier *= 0.5 if(ishostile(owner)) var/mob/living/simple_animal/hostile/simple_owner = owner simple_owner.ranged_cooldown_time /= 2.5 diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 240c6220395..9f18b2d9b06 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -801,11 +801,12 @@ icon_state = "godeye" inhand_icon_state = null vision_flags = SEE_TURFS + clothing_traits = list(TRAIT_MADNESS_IMMUNE) // Blue, light blue color_cutoffs = list(15, 30, 40) resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF custom_materials = null - var/datum/action/cooldown/scan/scan_ability + var/datum/action/cooldown/spell/pointed/scan/scan_ability /obj/item/clothing/glasses/godeye/Initialize(mapload) . = ..() @@ -836,49 +837,60 @@ victim.emote("scream") victim.flash_act() -/datum/action/cooldown/scan +/datum/action/cooldown/spell/pointed/scan name = "Scan" - desc = "Scan an enemy, to get their location and stagger them, increasing their time between attacks." + desc = "Scan an enemy, to get their location and rebuke them, increasing their time between attacks." background_icon_state = "bg_clock" overlay_icon_state = "bg_clock_border" button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "scan" + school = SCHOOL_HOLY + cooldown_time = 35 SECONDS + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC + antimagic_flags = MAGIC_RESISTANCE_MIND //Even god cannot penetrate the tin foil hat - click_to_activate = TRUE - cooldown_time = 45 SECONDS ranged_mousepointer = 'icons/effects/mouse_pointers/scan_target.dmi' -/datum/action/cooldown/scan/IsAvailable(feedback = FALSE) - return ..() && isliving(owner) - -/datum/action/cooldown/scan/Activate(atom/scanned) - StartCooldown(15 SECONDS) - - if(owner.stat != CONSCIOUS) +/datum/action/cooldown/spell/pointed/scan/is_valid_target(atom/cast_on) + if(!isliving(cast_on)) + owner.balloon_alert(owner, "not a valid target!") return FALSE - if(!isliving(scanned) || scanned == owner) - owner.balloon_alert(owner, "invalid scanned!") + var/mob/living/living_cast_on = cast_on + if(living_cast_on.stat == DEAD) + owner.balloon_alert(owner, "target is dead!") return FALSE + return TRUE + +/datum/action/cooldown/spell/pointed/scan/cast(mob/living/cast_on) + . = ..() + + if(cast_on.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0)) + to_chat(owner, span_warning("As we apply our dissecting vision, we are abruptly cut short. \ + They have some kind of enigmatic mental defense. It seems we've been foiled.")) + return + + if(cast_on == owner) + to_chat(owner, span_warning("The last time a god stared too closely into their own reflection, they became transfixed for all of time. Do not let us become like them.")) + return + var/mob/living/living_owner = owner - var/mob/living/living_scanned = scanned - living_scanned.apply_status_effect(/datum/status_effect/stagger) + var/mob/living/living_scanned = cast_on + living_scanned.apply_status_effect(/datum/status_effect/rebuked) var/datum/status_effect/agent_pinpointer/scan_pinpointer = living_owner.apply_status_effect(/datum/status_effect/agent_pinpointer/scan) scan_pinpointer.scan_target = living_scanned - living_scanned.set_jitter_if_lower(100 SECONDS) - to_chat(living_scanned, span_warning("You've been staggered!")) - living_scanned.add_filter("scan", 2, list("type" = "outline", "color" = COLOR_YELLOW, "size" = 1)) + to_chat(living_scanned, span_warning("You briefly see a flash of [living_owner]'s face before being knocked off-balance by an unseen force!")) + living_scanned.add_filter("scan", 2, list("type" = "outline", "color" = COLOR_RED, "size" = 1)) addtimer(CALLBACK(living_scanned, TYPE_PROC_REF(/datum, remove_filter), "scan"), 30 SECONDS) + healthscan(living_owner, living_scanned, 1, TRUE) + owner.playsound_local(get_turf(owner), 'sound/magic/smoke.ogg', 50, TRUE) owner.balloon_alert(owner, "[living_scanned] scanned") addtimer(CALLBACK(src, PROC_REF(send_cooldown_end_message), cooldown_time)) - StartCooldown() - return TRUE - -/datum/action/cooldown/scan/proc/send_cooldown_end_message() +/datum/action/cooldown/spell/pointed/scan/proc/send_cooldown_end_message() owner?.balloon_alert(owner, "scan recharged") /datum/status_effect/agent_pinpointer/scan diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_trophy.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_trophy.dm index c018795b20b..4647aab260a 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_trophy.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_trophy.dm @@ -1,4 +1,4 @@ -/// Lobstrosity crusher trophy. Staggers targets, increasing their click cooldown. +/// Lobstrosity crusher trophy. Rebukes targets, increasing their click cooldown. /obj/item/crusher_trophy/lobster_claw name = "lobster claw" icon_state = "lobster_claw" @@ -7,7 +7,7 @@ bonus_value = 1 /obj/item/crusher_trophy/lobster_claw/effect_desc() - return "mark detonation to briefly stagger the target for [bonus_value] seconds" + return "mark detonation to briefly rebuke the target for [bonus_value] seconds" /obj/item/crusher_trophy/lobster_claw/on_mark_detonation(mob/living/target, mob/living/user) - target.apply_status_effect(/datum/status_effect/stagger, bonus_value SECONDS) + target.apply_status_effect(/datum/status_effect/rebuked, bonus_value SECONDS) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index 1096784b43f..0ca55781f9f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -186,7 +186,7 @@ /// Sets/adds the next time the megafauna can use a melee or ranged attack, in deciseconds. It is a list to allow using named args. Use the ignore_staggered var if youre setting the cooldown to ranged_cooldown_time. /mob/living/simple_animal/hostile/megafauna/proc/update_cooldowns(list/cooldown_updates, ignore_staggered = FALSE) - if(!ignore_staggered && has_status_effect(/datum/status_effect/stagger)) + if(!ignore_staggered && has_status_effect(/datum/status_effect/rebuked)) for(var/update in cooldown_updates) cooldown_updates[update] *= 2 if(cooldown_updates[COOLDOWN_UPDATE_SET_MELEE])