From 6e013d7f8c4fed4c7f0e1a6a9fc3ac2fd3b67c52 Mon Sep 17 00:00:00 2001 From: raspyosu Date: Tue, 18 Feb 2020 23:18:52 -0500 Subject: [PATCH] zzzzzz the rest of the changes to be described in new pr --- .../bloodsucker/powers/bs_cloak.dm | 52 ++++++++++++------- .../bloodsucker/powers/bs_mesmerize.dm | 38 +++++++------- 2 files changed, 51 insertions(+), 39 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm index 9d83c95f05..2281a2cecd 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm @@ -2,40 +2,56 @@ /datum/action/bloodsucker/cloak name = "Cloak of Darkness" - desc = "Blend into the shadows and become invisible to the untrained eye." + desc = "Blend into the shadows and become invisible to the untrained eye. Movement is slowed in brightly lit areas." button_icon_state = "power_cloak" bloodcost = 5 cooldown = 50 bloodsucker_can_buy = TRUE amToggle = TRUE warn_constant_cost = TRUE - var/was_running - - var/light_min = 0.2 // If lum is above this, no good. + var/moveintent_was_run + var/walk_threshold = 0.4 // arbitrary number, to be changed. + var/lum /datum/action/bloodsucker/cloak/CheckCanUse(display_error) . = ..() if(!.) return - // Must be Dark - var/turf/T = owner.loc - if(istype(T) && T.get_lumcount() > light_min) - to_chat(owner, "This area is not dark enough to blend in") - return FALSE + + // must have nobody around to see the cloak + var/watchers = viewers(9,get_turf(owner)) + for(var/mob/living/M in watchers) + if(M != owner) + to_chat(owner, "You may only vanish into the shadows unseen.") + return FALSE + return TRUE /datum/action/bloodsucker/cloak/ActivatePower() var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) var/mob/living/user = owner - was_running = (user.m_intent == MOVE_INTENT_RUN) - if(was_running) - user.toggle_move_intent() - ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness") + while(bloodsuckerdatum && ContinueActive(user)) // Pay Blood Toll (if awake) - owner.alpha = max(20, owner.alpha - min(75, 10 + 5 * level_current)) + owner.alpha = max(35, owner.alpha - min(75, 10 + 5 * level_current)) bloodsuckerdatum.AddBloodVolume(-0.2) - sleep(5) // Check every few ticks that we haven't disabled this power + + moveintent_was_run = (user.m_intent == MOVE_INTENT_RUN) + var/turf/T = get_turf(user) + lum = T.get_lumcount() + + if(istype(owner.loc)) + if(lum > walk_threshold) + if(moveintent_was_run) + user.toggle_move_intent() + ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness") + + if(lum < walk_threshold) + if(!moveintent_was_run) + user.toggle_move_intent() + REMOVE_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness") + + sleep(5) // Check every few ticks /datum/action/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target) if (!..()) @@ -43,15 +59,11 @@ if(user.stat == !CONSCIOUS) // Must be CONSCIOUS to_chat(owner, "Your cloak failed due to you falling unconcious! ") return FALSE - var/turf/T = owner.loc // Must be DARK - if(istype(T) && T.get_lumcount() > light_min) - to_chat(owner, "Your cloak failed due to there being too much light!") - return FALSE return TRUE /datum/action/bloodsucker/cloak/DeactivatePower(mob/living/user = owner, mob/living/target) ..() REMOVE_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness") user.alpha = 255 - if(was_running && user.m_intent != MOVE_INTENT_RUN) + if(!moveintent_was_run) user.toggle_move_intent() diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm index 0e1a9d44b0..796a3afedd 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm @@ -21,14 +21,14 @@ . = ..() if(!.) return - if (!owner.getorganslot(ORGAN_SLOT_EYES)) + if(!owner.getorganslot(ORGAN_SLOT_EYES)) if (display_error) to_chat(owner, "You have no eyes with which to mesmerize.") return FALSE // Check: Eyes covered? var/mob/living/L = owner - if (istype(L) && L.is_eyes_covered() || !isturf(owner.loc)) - if (display_error) + if(istype(L) && L.is_eyes_covered() || !isturf(owner.loc)) + if(display_error) to_chat(owner, "Your eyes are concealed from sight.") return FALSE return TRUE @@ -38,51 +38,51 @@ /datum/action/bloodsucker/targeted/mesmerize/CheckCanTarget(atom/A,display_error) // Check: Self - if (A == owner) + 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(target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) if (display_error) to_chat(owner, "Bloodsuckers are immune to [src].") return FALSE // Dead/Unconscious - if (target.stat > CONSCIOUS) + if(target.stat > CONSCIOUS) if (display_error) to_chat(owner, "Your victim is not [(target.stat == DEAD || HAS_TRAIT(target, TRAIT_FAKEDEATH))?"alive":"conscious"].") return FALSE // Check: Target has eyes? - if (!target.getorganslot(ORGAN_SLOT_EYES)) + if(!target.getorganslot(ORGAN_SLOT_EYES)) if (display_error) to_chat(owner, "They have no eyes!") return FALSE // Check: Target blind? - if (target.eye_blind > 0) + if(target.eye_blind > 0) if (display_error) to_chat(owner, "Your victim's eyes are glazed over. They cannot perceive you.") return FALSE // Check: Target See Me? (behind wall) - if (!(target in view(target_range, get_turf(owner)))) + 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) // to_chat(owner, "You're too far from your victim.") - if (display_error) + 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)) // ? + if(target.has_status_effect(STATUS_EFFECT_MESMERIZE)) // ? return TRUE // Check: Facing target? - if (!is_A_facing_B(owner,target)) // in unsorted.dm + if(!is_A_facing_B(owner,target)) // in unsorted.dm if (display_error) to_chat(owner, "You must be facing your victim.") return FALSE // Check: Target facing me? - if (!target.resting && !is_A_facing_B(target,owner)) - if (display_error) + if(!target.resting && !is_A_facing_B(target,owner)) + if(display_error) to_chat(owner, "Your victim must be facing you to see into your eyes.") return FALSE return TRUE @@ -93,12 +93,12 @@ var/mob/living/user = owner 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.apply_status_effect(STATUS_EFFECT_MESMERIZE, 30) + user.apply_status_effect(STATUS_EFFECT_MESMERIZE, 30) + if(do_mob(user, target, 30, TRUE, TRUE)) // 3 seconds windup + if(CheckCanTarget(target)) // target just has to be out of view when it is fully charged in order to avoid + PowerActivatedSuccessfully() // blood & cooldown only altered if power activated successfully - less "fuck you"-y target.face_atom(user) target.apply_status_effect(STATUS_EFFECT_MESMERIZE, power_time) // pretty much purely cosmetic target.Stun(power_time)