diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index c694f27d64..999fd33a00 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -101,14 +101,16 @@
/datum/status_effect/no_combat_mode/mesmerize/on_creation(mob/living/new_owner, set_duration)
. = ..()
ADD_TRAIT(owner, TRAIT_MUTE, "mesmerize")
+ owner.add_movespeed_modifier("[STATUS_EFFECT_MESMERIZE]_[id]", TRUE, priority = 64, override = TRUE, multiplicative_slowdown = 5, blacklisted_movetypes = FALSE? NONE : CRAWLING)
/datum/status_effect/no_combat_mode/mesmerize/on_remove()
. = ..()
REMOVE_TRAIT(owner, TRAIT_MUTE, "mesmerize")
+ owner.remove_movespeed_modifier("[STATUS_EFFECT_MESMERIZE]_[id]")
/obj/screen/alert/status_effect/mesmerized
name = "Mesmerized"
- desc = "You cant tear your sight from who is in front of you...Their gaze is simply too enthralling.."
+ desc = "You cant tear your sight from who is in front of you... their gaze is simply too enthralling.."
icon = 'icons/mob/actions/bloodsucker.dmi'
icon_state = "power_mez"
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
index dc9d1d46a0..2ee8c3e33f 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
@@ -11,8 +11,8 @@
button_icon_state = "power_mez"
bloodcost = 30
cooldown = 300
- target_range = 1
- power_activates_immediately = FALSE
+ target_range = 3
+ power_activates_immediately = TRUE
message_Trigger = "Whom will you subvert to your will?"
must_be_capacitated = TRUE
bloodsucker_can_buy = TRUE
@@ -41,6 +41,7 @@
if (A == owner)
return FALSE
var/mob/living/carbon/target = A // We already know it's carbon due to CheckValidTarget()
+
// Bloodsucker
if (target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
if (display_error)
@@ -62,7 +63,7 @@
to_chat(owner, "Your victim's eyes are glazed over. They cannot perceive you.")
return FALSE
// Check: Target See Me? (behind wall)
- if (!(owner in view(target_range, get_turf(target))))
+ if (!(target in view(target_range, get_turf(owner))))
// Sub-Check: GET CLOSER
//if (!(owner in range(target_range, get_turf(target)))
// if (display_error)
@@ -70,6 +71,10 @@
if (display_error)
to_chat(owner, "You're too far outside your victim's view.")
return FALSE
+
+ if (target.has_status_effect(STATUS_EFFECT_MESMERIZE)) // ?
+ return TRUE
+
// Check: Facing target?
if (!is_A_facing_B(owner,target)) // in unsorted.dm
if (display_error)
@@ -83,28 +88,29 @@
return TRUE
/datum/action/bloodsucker/targeted/mesmerize/FireTargetedPower(atom/A)
- // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
- var/mob/living/carbon/target = A
- var/mob/living/user = owner
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+ var/mob/living/carbon/target = A
+ var/mob/living/user = owner
- if(istype(target))
- target.Stun(40) //Utterly useless without this, its okay since there are so many checks to go through
- target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 45) //So you cant rotate with combat mode, plus fancy status alert
-
- if(do_mob(user, target, 40, 0, TRUE, extra_checks = CALLBACK(src, .proc/ContinueActive, user, target)))
- PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!
- var/power_time = 90 + level_current * 12
- target.apply_status_effect(STATUS_EFFECT_MESMERIZE, power_time + 80)
- to_chat(user, "[target] is fixed in place by your hypnotic gaze.")
- target.Stun(power_time)
- target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // target.changeNext_move(power_time) // check click.dm
- target.notransform = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze.
- spawn(power_time)
- if(istype(target))
- target.notransform = FALSE
- // They Woke Up! (Notice if within view)
- if(istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) )
- to_chat(user, "[target] has snapped out of their trance.")
+ if(istype(target))
+ PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!
+ var/power_time = 138 + level_current * 12
+ target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 50)
+ user.apply_status_effect(STATUS_EFFECT_MESMERIZE, 50)
+ if(do_mob(user, target, 50, TRUE, TRUE))
+ if (CheckCanTarget(target)) // target just has to be out of view when it is fully charged in order to avoid
+ target.face_atom(user)
+ target.apply_status_effect(STATUS_EFFECT_MESMERIZE, power_time) // pretty much purely cosmetic
+ target.Stun(power_time)
+ to_chat(user, "[target] is fixed in place by your hypnotic gaze.")
+ target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // target.changeNext_move(power_time) // check click.dm
+ target.notransform = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze.
+ spawn(power_time)
+ if(istype(target))
+ target.notransform = FALSE
+ // They Woke Up! (Notice if within view)
+ if(istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) )
+ to_chat(user, "[target] has snapped out of their trance.")
/datum/action/bloodsucker/targeted/mesmerize/ContinueActive(mob/living/user, mob/living/target)