From 53d7192c9c5087ca0a9a6e0905e0c0b2ae52aaf9 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 18 Feb 2020 03:12:57 -0700 Subject: [PATCH 1/4] k --- .../bloodsucker/datum_bloodsucker.dm | 4 +- .../powers/{bs_brawn.dm => brawn.dm} | 0 .../powers/{bs_cloak.dm => cloak.dm} | 0 .../powers/{bs_feed.dm => feed.dm} | 0 .../powers/{bs_fortitude.dm => fortitude.dm} | 0 .../powers/{bs_gohome.dm => go_home.dm} | 14 ++-- .../powers/{bs_haste.dm => haste.dm} | 65 ++++++++++--------- .../powers/{bs_lunge.dm => lunge.dm} | 0 .../{bs_masquerade.dm => masquerade.dm} | 0 .../powers/{bs_mesmerize.dm => mesmerize.dm} | 0 .../powers/{v_recuperate.dm => recuperate.dm} | 0 .../powers/{bs_trespass.dm => trespass.dm} | 0 .../powers/{bs_veil.dm => veil.dm} | 0 tgstation.dme | 24 +++---- 14 files changed, 55 insertions(+), 52 deletions(-) rename code/modules/antagonists/bloodsucker/powers/{bs_brawn.dm => brawn.dm} (100%) rename code/modules/antagonists/bloodsucker/powers/{bs_cloak.dm => cloak.dm} (100%) rename code/modules/antagonists/bloodsucker/powers/{bs_feed.dm => feed.dm} (100%) rename code/modules/antagonists/bloodsucker/powers/{bs_fortitude.dm => fortitude.dm} (100%) rename code/modules/antagonists/bloodsucker/powers/{bs_gohome.dm => go_home.dm} (97%) rename code/modules/antagonists/bloodsucker/powers/{bs_haste.dm => haste.dm} (53%) rename code/modules/antagonists/bloodsucker/powers/{bs_lunge.dm => lunge.dm} (100%) rename code/modules/antagonists/bloodsucker/powers/{bs_masquerade.dm => masquerade.dm} (100%) rename code/modules/antagonists/bloodsucker/powers/{bs_mesmerize.dm => mesmerize.dm} (100%) rename code/modules/antagonists/bloodsucker/powers/{v_recuperate.dm => recuperate.dm} (100%) rename code/modules/antagonists/bloodsucker/powers/{bs_trespass.dm => trespass.dm} (100%) rename code/modules/antagonists/bloodsucker/powers/{bs_veil.dm => veil.dm} (100%) diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index 24e967f00b..5207f7a66d 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -286,10 +286,10 @@ var/mob/living/L = owner.current level_bloodcost = maxBloodVolume * 0.2 //If the blood volume of the bloodsucker is lower than the cost to level up, return and inform the bloodsucker - + //TODO: Make this into a radial, or perhaps a tgui next UI // Purchase Power Prompt - var/list/options = list() + var/list/options = list() for(var/pickedpower in typesof(/datum/action/bloodsucker)) var/datum/action/bloodsucker/power = pickedpower // If I don't own it, and I'm allowed to buy it. diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/brawn.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/bs_brawn.dm rename to code/modules/antagonists/bloodsucker/powers/brawn.dm diff --git a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm b/code/modules/antagonists/bloodsucker/powers/cloak.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/bs_cloak.dm rename to code/modules/antagonists/bloodsucker/powers/cloak.dm diff --git a/code/modules/antagonists/bloodsucker/powers/bs_feed.dm b/code/modules/antagonists/bloodsucker/powers/feed.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/bs_feed.dm rename to code/modules/antagonists/bloodsucker/powers/feed.dm diff --git a/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm b/code/modules/antagonists/bloodsucker/powers/fortitude.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm rename to code/modules/antagonists/bloodsucker/powers/fortitude.dm diff --git a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm b/code/modules/antagonists/bloodsucker/powers/go_home.dm similarity index 97% rename from code/modules/antagonists/bloodsucker/powers/bs_gohome.dm rename to code/modules/antagonists/bloodsucker/powers/go_home.dm index 476f8ae012..87c3d4ab0d 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm +++ b/code/modules/antagonists/bloodsucker/powers/go_home.dm @@ -28,9 +28,9 @@ to_chat(owner, "Your coffin has been destroyed!") return FALSE return TRUE - + /datum/action/bloodsucker/gohome/proc/flicker_lights(var/flicker_range, var/beat_volume) - for(var/obj/machinery/light/L in view(flicker_range, get_turf(owner))) + for(var/obj/machinery/light/L in view(flicker_range, get_turf(owner))) playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', beat_volume, 1) @@ -45,7 +45,7 @@ flicker_lights(4, 40) sleep(50) flicker_lights(4, 60) - for(var/obj/machinery/light/L in view(6, get_turf(owner))) + for(var/obj/machinery/light/L in view(6, get_turf(owner))) L.flicker(5) playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 60, 1) // ( STEP TWO: Lights OFF? ) @@ -56,7 +56,7 @@ if(!owner) return // SEEN?: (effects ONLY if there are witnesses! Otherwise you just POOF) - + var/am_seen = FALSE // Do Effects (seen by anyone) var/drop_item = FALSE // Drop Stuff (seen by non-vamp) if(isturf(owner.loc)) // Only check if I'm not in a Locker or something. @@ -95,12 +95,12 @@ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke puff.set_up(3, 0, get_turf(owner)) puff.start() - + //STEP FIVE: Create animal at prev location var/mob/living/simple_animal/SA = pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse, new SA (owner.loc) // TELEPORT: Move to Coffin & Close it! - do_teleport(owner, bloodsuckerdatum.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) + do_teleport(owner, bloodsuckerdatum.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) user.resting = TRUE user.Stun(30,1) // CLOSE LID: If fail, force me in. @@ -112,4 +112,4 @@ bloodsuckerdatum.coffin.update_icon() // Lock Coffin bloodsuckerdatum.coffin.LockMe(owner) - + diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/haste.dm similarity index 53% rename from code/modules/antagonists/bloodsucker/powers/bs_haste.dm rename to code/modules/antagonists/bloodsucker/powers/haste.dm index a1aaf50499..ba656626cc 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/haste.dm @@ -14,6 +14,9 @@ message_Trigger = ""//"Whom will you subvert to your will?" bloodsucker_can_buy = TRUE must_be_capacitated = TRUE + var/list/hit //current hit, set while power is in use as we can't pass the list as an extra calling argument in registersignal. + /// If set, uses this speed in deciseconds instead of world.tick_lag + var/speed_override /datum/action/bloodsucker/targeted/haste/CheckCanUse(display_error) . = ..() @@ -43,43 +46,43 @@ return TRUE /datum/action/bloodsucker/targeted/haste/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. + // This is a non-async proc to make sure the power is "locked" until this finishes. + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/on_move) var/mob/living/user = owner var/turf/T = isturf(A) ? A : get_turf(A) // Pulled? Not anymore. - owner.pulledby = null - // Step One: Heatseek toward Target's Turf - walk_to(owner, T, 0, 0.01, 20) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path. + user.pulledby?.stop_pulling() + // Go to target turf + // DO NOT USE WALK TO. playsound(get_turf(owner), 'sound/weapons/punchmiss.ogg', 25, 1, -1) - var/safety = 20 - while(get_turf(owner) != T && safety > 0 && !(isliving(target) && target.Adjacent(owner))) - user.canmove = FALSE //Dont move while doing the thing, or itll break - safety -- - // Did I get knocked down? - if(owner && owner.incapacitated(ignore_restraints=TRUE, ignore_grab=TRUE))// owner.incapacitated()) - // We're gonna cancel. But am I on the ground? Spin me! - if(user.resting) - var/send_dir = get_dir(owner, T) - new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) - owner.spin(10) + var/safety = get_dist(user, T) * 3 + 1 + var/consequetive_failures = 0 + var/speed = isnull(speed_override)? world.tick_lag : speed_override + while(--safety && (get_turf(user) != T)) + var/success = step_towards(user, T) //This does not try to go around obstacles. + if(!success) + success = step_to(user, T) //this does + if(!sucecss) + if(++consequetive_failures > 3) //if 3 steps don't work + break //just stop + else + consequetive_failures = 0 + if(user.resting) + user.setDir(turn(user.dir, 90)) //down? spin2win :^) + if(user.incapacitated(ignore_restraints = TRUE, ignore_grab = TRUE)) //actually down? stop. break - // Spin/Stun people we pass. - //var/mob/living/newtarget = locate(/mob/living) in oview(1, owner) - var/list/mob/living/foundtargets = list() - for(var/mob/living/newtarget in oview(1, owner)) - if (newtarget && newtarget != target && !(newtarget in foundtargets))//!newtarget.IsKnockdown()) - if (rand(0, 5) < level_current) - playsound(get_turf(newtarget), "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1) - newtarget.Knockdown(10 + level_current * 5) - if(newtarget.IsStun()) - newtarget.spin(10,1) - if (rand(0,4)) - newtarget.drop_all_held_items() - foundtargets += newtarget - sleep(1) - if(user) - user.update_canmove() //Let the poor guy move again + sleep(speed) + UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) + user.update_canmove() /datum/action/bloodsucker/targeted/haste/DeactivatePower(mob/living/user = owner, mob/living/target) ..() // activate = FALSE user.update_canmove() + +/datum/action/bloodsucker/targeted/haste/proc/on_move() + for(var/mob/living/L in dview(1, get_turf(owner))) + if(hit[AM] && (AM != owner)) + hit[L] = TRUE + playsound(L, "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1) + L.Knockdown(10 + level_current * 5, override_hardstun = 0.1) + L.spin(10, 1) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/bs_lunge.dm rename to code/modules/antagonists/bloodsucker/powers/lunge.dm diff --git a/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm b/code/modules/antagonists/bloodsucker/powers/masquerade.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm rename to code/modules/antagonists/bloodsucker/powers/masquerade.dm diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/mesmerize.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm rename to code/modules/antagonists/bloodsucker/powers/mesmerize.dm diff --git a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm b/code/modules/antagonists/bloodsucker/powers/recuperate.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/v_recuperate.dm rename to code/modules/antagonists/bloodsucker/powers/recuperate.dm diff --git a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm b/code/modules/antagonists/bloodsucker/powers/trespass.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/bs_trespass.dm rename to code/modules/antagonists/bloodsucker/powers/trespass.dm diff --git a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm b/code/modules/antagonists/bloodsucker/powers/veil.dm similarity index 100% rename from code/modules/antagonists/bloodsucker/powers/bs_veil.dm rename to code/modules/antagonists/bloodsucker/powers/veil.dm diff --git a/tgstation.dme b/tgstation.dme index 0b7ad871c3..138d586fc4 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1298,18 +1298,18 @@ #include "code\modules\antagonists\bloodsucker\objects\bloodsucker_coffin.dm" #include "code\modules\antagonists\bloodsucker\objects\bloodsucker_crypt.dm" #include "code\modules\antagonists\bloodsucker\objects\bloodsucker_lair.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_brawn.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_cloak.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_feed.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_fortitude.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_gohome.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_haste.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_lunge.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_masquerade.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_mesmerize.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_trespass.dm" -#include "code\modules\antagonists\bloodsucker\powers\bs_veil.dm" -#include "code\modules\antagonists\bloodsucker\powers\v_recuperate.dm" +#include "code\modules\antagonists\bloodsucker\powers\brawn.dm" +#include "code\modules\antagonists\bloodsucker\powers\cloak.dm" +#include "code\modules\antagonists\bloodsucker\powers\feed.dm" +#include "code\modules\antagonists\bloodsucker\powers\fortitude.dm" +#include "code\modules\antagonists\bloodsucker\powers\go_home.dm" +#include "code\modules\antagonists\bloodsucker\powers\haste.dm" +#include "code\modules\antagonists\bloodsucker\powers\lunge.dm" +#include "code\modules\antagonists\bloodsucker\powers\masquerade.dm" +#include "code\modules\antagonists\bloodsucker\powers\mesmerize.dm" +#include "code\modules\antagonists\bloodsucker\powers\recuperate.dm" +#include "code\modules\antagonists\bloodsucker\powers\trespass.dm" +#include "code\modules\antagonists\bloodsucker\powers\veil.dm" #include "code\modules\antagonists\brainwashing\brainwashing.dm" #include "code\modules\antagonists\brother\brother.dm" #include "code\modules\antagonists\changeling\cellular_emporium.dm" From 1e57463d1b1b42cf0e767ac58f45e9fdc33e1907 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 18 Feb 2020 03:16:47 -0700 Subject: [PATCH 2/4] k --- code/modules/antagonists/bloodsucker/powers/haste.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/powers/haste.dm b/code/modules/antagonists/bloodsucker/powers/haste.dm index ba656626cc..77f8e74efc 100644 --- a/code/modules/antagonists/bloodsucker/powers/haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/haste.dm @@ -62,7 +62,7 @@ var/success = step_towards(user, T) //This does not try to go around obstacles. if(!success) success = step_to(user, T) //this does - if(!sucecss) + if(!success) if(++consequetive_failures > 3) //if 3 steps don't work break //just stop else @@ -81,7 +81,7 @@ /datum/action/bloodsucker/targeted/haste/proc/on_move() for(var/mob/living/L in dview(1, get_turf(owner))) - if(hit[AM] && (AM != owner)) + if(!hit[L] && (L != owner)) hit[L] = TRUE playsound(L, "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1) L.Knockdown(10 + level_current * 5, override_hardstun = 0.1) From ef05410b758835f7986115f04a8b76089eb1fd58 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 18 Feb 2020 03:32:04 -0700 Subject: [PATCH 3/4] k --- code/modules/antagonists/bloodsucker/powers/haste.dm | 2 ++ code/modules/antagonists/bloodsucker/powers/masquerade.dm | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/powers/haste.dm b/code/modules/antagonists/bloodsucker/powers/haste.dm index 77f8e74efc..7a86a6dd3d 100644 --- a/code/modules/antagonists/bloodsucker/powers/haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/haste.dm @@ -47,6 +47,7 @@ /datum/action/bloodsucker/targeted/haste/FireTargetedPower(atom/A) // This is a non-async proc to make sure the power is "locked" until this finishes. + hit = list() RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/on_move) var/mob/living/user = owner var/turf/T = isturf(A) ? A : get_turf(A) @@ -73,6 +74,7 @@ break sleep(speed) UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) + hit = null user.update_canmove() /datum/action/bloodsucker/targeted/haste/DeactivatePower(mob/living/user = owner, mob/living/target) diff --git a/code/modules/antagonists/bloodsucker/powers/masquerade.dm b/code/modules/antagonists/bloodsucker/powers/masquerade.dm index 0435ddccd5..7d41899dc2 100644 --- a/code/modules/antagonists/bloodsucker/powers/masquerade.dm +++ b/code/modules/antagonists/bloodsucker/powers/masquerade.dm @@ -54,8 +54,8 @@ REMOVE_TRAIT(user, TRAIT_VIRUSIMMUNE, "bloodsucker") var/obj/item/organ/heart/vampheart/H = user.getorganslot(ORGAN_SLOT_HEART) var/obj/item/organ/eyes/vassal/bloodsucker/E = user.getorganslot(ORGAN_SLOT_EYES) - E.flash_protect = 0 - + E.flash_protect = 0 + // WE ARE ALIVE! // bloodsuckerdatum.poweron_masquerade = TRUE while(bloodsuckerdatum && ContinueActive(user)) From 3785c94a1b0280fba4f3cfb68127eb369e9d1b8a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 18 Feb 2020 03:57:39 -0700 Subject: [PATCH 4/4] more responsive --- code/modules/antagonists/bloodsucker/powers/haste.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/powers/haste.dm b/code/modules/antagonists/bloodsucker/powers/haste.dm index 7a86a6dd3d..47c93b794e 100644 --- a/code/modules/antagonists/bloodsucker/powers/haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/haste.dm @@ -64,7 +64,7 @@ if(!success) success = step_to(user, T) //this does if(!success) - if(++consequetive_failures > 3) //if 3 steps don't work + if(++consequetive_failures >= 3) //if 3 steps don't work break //just stop else consequetive_failures = 0 @@ -72,7 +72,8 @@ user.setDir(turn(user.dir, 90)) //down? spin2win :^) if(user.incapacitated(ignore_restraints = TRUE, ignore_grab = TRUE)) //actually down? stop. break - sleep(speed) + if(success) //don't sleep if we failed to move. + sleep(speed) UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) hit = null user.update_canmove()