diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm
index b2f05fd5f8..d25f8779c0 100644
--- a/code/__DEFINES/antagonists.dm
+++ b/code/__DEFINES/antagonists.dm
@@ -40,3 +40,19 @@
#define NOT_DOMINATING -1
#define MAX_LEADERS_GANG 4
#define INITIAL_DOM_ATTEMPTS 3
+
+//Bloodsucker defines
+// Bloodsucker related antag datums
+#define ANTAG_DATUM_BLOODSUCKER /datum/antagonist/bloodsucker
+#define ANTAG_DATUM_VASSAL /datum/antagonist/vassal
+#define ANTAG_DATUM_HUNTER /datum/antagonist/vamphunter
+
+// BLOODSUCKER
+#define BLOODSUCKER_LEVEL_TO_EMBRACE 3
+#define BLOODSUCKER_FRENZY_TIME 25 // How long the vamp stays in frenzy.
+#define BLOODSUCKER_FRENZY_OUT_TIME 300 // How long the vamp goes back into frenzy.
+#define BLOODSUCKER_STARVE_VOLUME 5 // Amount of blood, below which a Vamp is at risk of frenzy.
+
+#define CAT_STRUCTURE "Structures"
+
+#define MARTIALART_HUNTER "hunter-fu"
diff --git a/code/__DEFINES/bloodsucker.dm b/code/__DEFINES/bloodsucker.dm
deleted file mode 100644
index 08b70004cc..0000000000
--- a/code/__DEFINES/bloodsucker.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-// Bloodsucker related antag datums
-#define ANTAG_DATUM_BLOODSUCKER /datum/antagonist/bloodsucker
-#define ANTAG_DATUM_VASSAL /datum/antagonist/vassal
-#define ANTAG_DATUM_HUNTER /datum/antagonist/vamphunter
-
-// BLOODSUCKER
-#define BLOODSUCKER_LEVEL_TO_EMBRACE 3
-#define BLOODSUCKER_FRENZY_TIME 25 // How long the vamp stays in frenzy.
-#define BLOODSUCKER_FRENZY_OUT_TIME 300 // How long the vamp goes back into frenzy.
-#define BLOODSUCKER_STARVE_VOLUME 5 // Amount of blood, below which a Vamp is at risk of frenzy.
-
-#define CAT_STRUCTURE "Structures"
-
-#define MARTIALART_HUNTER "hunter-fu"
diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
index 2dba2f9587..6561c51a6e 100644
--- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
+++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
@@ -262,7 +262,6 @@ datum/antagonist/bloodsucker/proc/RankUp()
set waitfor = FALSE
if (!owner || !owner.current)
return
-
vamplevel_unspent ++
// Spend Rank Immediately?
if (istype(owner.current.loc, /obj/structure/closet/crate/coffin))
@@ -272,7 +271,6 @@ datum/antagonist/bloodsucker/proc/RankUp()
if (vamplevel_unspent >= 2)
to_chat(owner, "Bloodsucker Tip: If you cannot find or steal a coffin to use, they can be built from wooden planks.
")
-
datum/antagonist/bloodsucker/proc/LevelUpPowers()
for(var/datum/action/bloodsucker/power in powers)
power.level_current ++
@@ -281,10 +279,9 @@ datum/antagonist/bloodsucker/proc/SpendRank()
set waitfor = FALSE
if (vamplevel_unspent <= 0 || !owner || !owner.current || !owner.current.client)
return
-
/////////
// Powers
-
+ //TODO: Make this into a radial
// Purchase Power Prompt
var/list/options = list() // Taken from gasmask.dm, for Clown Masks.
for(var/pickedpower in typesof(/datum/action/bloodsucker))
@@ -293,7 +290,6 @@ datum/antagonist/bloodsucker/proc/SpendRank()
if (!(locate(power) in powers) && initial(power.bloodsucker_can_buy))
options[initial(power.name)] = power // TESTING: After working with TGUI, it seems you can use initial() to view the variables inside a path?
options["\[ Not Now \]"] = null
-
// Abort?
if (options.len > 1)
var/choice = input(owner.current, "You have the opportunity to grow more ancient. Select a power to advance your Rank.", "Your Blood Thickens...") in options
@@ -312,12 +308,10 @@ datum/antagonist/bloodsucker/proc/SpendRank()
to_chat(owner.current, "You have learned [initial(P.name)]!")
else
to_chat(owner.current, "You grow more ancient by the night!")
-
/////////
// Advance Powers (including new)
LevelUpPowers()
-
- /////////
+ ////////
// Advance Stats
if (ishuman(owner.current))
var/mob/living/carbon/human/H = owner.current
@@ -332,34 +326,21 @@ datum/antagonist/bloodsucker/proc/SpendRank()
regenRate += 0.05 // Points of brute healed (starts at 0.3)
feedAmount += 2 // Increase how quickly I munch down vics (15)
maxBloodVolume += 50 // Increase my max blood (600)
-
-
/////////
-
vamplevel ++
vamplevel_unspent --
// Assign True Reputation
if (vamplevel == 4)
SelectReputation(am_fledgling=FALSE, forced=TRUE)
-
to_chat(owner.current, "You are now a rank [vamplevel] Bloodsucker. Your strength, resistence, health, feed rate, regen rate, and maximum blood have all increased!")
to_chat(owner.current, "Your existing powers have all ranked up as well!")
to_chat(owner.current, "However, your weakness to fire and sunlight have also increased!")
-
update_hud(TRUE)
-
owner.current.playsound_local(null, 'sound/effects/pope_entry.ogg', 25, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
-
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
//This handles the application of antag huds/special abilities
/datum/antagonist/bloodsucker/apply_innate_effects(mob/living/mob_override)
return
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm
index 4d76b93418..514fa8805a 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm
@@ -17,7 +17,6 @@
must_be_capacitated = TRUE
can_be_immobilized = TRUE
-
/datum/action/bloodsucker/gohome/CheckCanUse(display_error)
. = ..()
if(!.)
@@ -28,52 +27,32 @@
if (display_error)
to_chat(owner, "Your coffin has been destroyed!")
return FALSE
-
return TRUE
-
-
/datum/action/bloodsucker/gohome/ActivatePower()
-
var/mob/living/carbon/user = owner
var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
-
-
// IMPORTANT: Check for lair at every step! It might get destroyed.
-
to_chat(user, "You focus on separating your consciousness from your physical form...")
-
-
// STEP ONE: Flicker Lights
-
- // From statue.dm
for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
L.flicker(5)
playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 20, 1)
-
sleep(50)
-
for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
L.flicker(5)
playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, 1)
-
sleep(50)
-
for(var/obj/machinery/light/L in view(6, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
L.flicker(5)
playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 60, 1)
-
-
// ( STEP TWO: Lights OFF? )
-
// CHECK: Still have Coffin?
if (!istype(bloodsuckerdatum) || !bloodsuckerdatum.coffin)
to_chat(user, "Your coffin has been destroyed! You no longer have a destination.")
return FALSE
-
if (!owner)
return
-
// SEEN?: (effects ONLY if there are witnesses! Otherwise you just POOF)
// NOTE: Stolen directly from statue.dm, thanks guys!
var/am_seen = FALSE // Do Effects (seen by anyone)
@@ -89,7 +68,6 @@
if (!M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
drop_item = TRUE
break
-
// LOSE CUFFS
if(user.handcuffed)
var/obj/O = user.handcuffed
@@ -97,7 +75,6 @@
if(user.legcuffed)
var/obj/O = user.legcuffed
user.dropItemToGround(O)
-
// SEEN!
if (drop_item)
// DROP: Clothes, held items, and cuffs etc
@@ -116,7 +93,6 @@
puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke
puff.set_up(3, 0, get_turf(owner))
puff.start()
-
// TELEPORT: Move to Coffin & Close it!
do_teleport(owner, bloodsuckerdatum.coffin, no_effects=TRUE) // in teleport.dm?
// SLEEP
@@ -134,8 +110,6 @@
bloodsuckerdatum.coffin.update_icon()
// Lock Coffin
bloodsuckerdatum.coffin.LockMe(owner)
-
-
// ( STEP FIVE: Create animal at prev location? )
//var/mob/living/simple_animal/SA = /mob/living/simple_animal/hostile/retaliate/bat // 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)
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
index 8cfed3192a..53db94ef66 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
@@ -14,10 +14,6 @@
message_Trigger = ""//"Whom will you subvert to your will?"
bloodsucker_can_buy = TRUE
must_be_capacitated = TRUE
- //var/datum/martial_art/vamphaste/haste_cqc // Assign this when
-
-
-
/datum/action/bloodsucker/targeted/haste/CheckCanUse(display_error)
. = ..()
@@ -30,11 +26,9 @@
return FALSE
return TRUE
-
/datum/action/bloodsucker/targeted/haste/CheckValidTarget(atom/A)
return isturf(A) || A.loc != owner.loc // Anything will do, if it's not me or my square
-
/datum/action/bloodsucker/targeted/haste/CheckCanTarget(atom/A, display_error)
// DEFAULT CHECKS (Distance)
if (!..())
@@ -44,8 +38,6 @@
// return FALSE
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.
var/mob/living/user = owner
@@ -59,7 +51,6 @@
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!
@@ -68,7 +59,6 @@
new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE)
owner.spin(10)
break
-
// Spin/Stun people we pass.
//var/mob/living/newtarget = locate(/mob/living) in oview(1, owner)
var/list/mob/living/foundtargets = list()
@@ -87,7 +77,6 @@
if (user)
user.update_canmove() //Let the poor guy move again
-
/datum/action/bloodsucker/targeted/haste/DeactivatePower(mob/living/user = owner, mob/living/target)
..() // activate = FALSE
user.update_canmove()
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm
index 7a35d9edfa..6ee17b3014 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm
@@ -30,7 +30,6 @@
// NOTE: Firing off vulgar powers disables your Masquerade!
-
/*/datum/action/bloodsucker/masquerade/CheckCanUse(display_error)
if(!..(display_error))// DEFAULT CHECKS
return FALSE
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm
index 1985f6be13..02fb49a536 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm
@@ -24,8 +24,11 @@
var/prev_hair_color
var/prev_facial_hair_color
var/prev_underwear
+ var/prev_undie_color
var/prev_undershirt
+ var/prev_shirt_color
var/prev_socks
+ var/prev_socks_color
var/prev_disfigured
var/list/prev_features // For lizards and such
@@ -72,13 +75,16 @@
prev_hair_color = H.hair_color
prev_facial_hair_color = H.facial_hair_color
prev_underwear = H.underwear
+ prev_undie_color = H.undie_color
prev_undershirt = H.undershirt
+ prev_shirt_color = H.shirt_color
prev_socks = H.socks
+ prev_socks_color = H.socks_color
//prev_eye_color
prev_disfigured = HAS_TRAIT(H, TRAIT_DISFIGURED) // I was disfigured! //prev_disabilities = H.disabilities
prev_features = H.dna.features
- // Change Appearance
+ // Change Appearance, not randomizing clothes colour, itll just be janky
H.gender = pick(MALE, FEMALE)
H.skin_tone = random_skin_tone()
H.hair_style = random_hair_style(H.gender)
@@ -127,8 +133,11 @@
H.hair_color = prev_hair_color
H.facial_hair_color = prev_facial_hair_color
H.underwear = prev_underwear
+ H.undie_color = prev_undie_color
H.undershirt = prev_undershirt
+ H.shirt_color = prev_shirt_color
H.socks = prev_socks
+ H.socks_color = prev_socks_color
//H.disabilities = prev_disabilities // Restore HUSK, CLUMSY, etc.
if (prev_disfigured)
diff --git a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm
index f2496e63cc..27277b215b 100644
--- a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm
+++ b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm
@@ -1,7 +1,3 @@
-
-
-
-
/datum/action/bloodsucker/vassal/recuperate
name = "Sanguine Recuperation"
desc = "Slowly heal brute damage while active. This process is exhausting, and requires some of your tainted blood."
@@ -9,9 +5,6 @@
amToggle = TRUE
bloodcost = 5
cooldown = 100
-
-
-
// Deal STAMINA damage over time, trickle down blood, and heal wounds.
/datum/action/bloodsucker/vassal/recuperate/CheckCanUse(display_error)