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)