diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm
index c0f5f80c1f..08f9a628b6 100644
--- a/code/game/gamemodes/bloodsucker/bloodsucker.dm
+++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm
@@ -29,7 +29,8 @@
Bloodsuckers: The crew are cattle, while you are both shepherd and slaughterhouse.\n\
Crew: Put an end to the undead infestation before the station is overcome!"
-
+/datum/game_mode/traitor/bros/generate_report()
+ return "Reports indicate that some of your crew may have toppled statues in the past week, angering the gods and becoming cursed with undeath and a desire for blood. Watch out for crewmembers that seem to shun the light or are found pale and delirious."
// Seems to be run by game ONCE, and finds all potential players to be antag.
/datum/game_mode/bloodsucker/pre_setup()
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
index be557148bd..9eaddad5b5 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
@@ -23,8 +23,8 @@
while (owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src
// Deduct Blood
- if (owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA) && !istype(owner.current.loc, /obj/structure/closet/crate/coffin))
- AddBloodVolume(-0.08) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now)
+ if (owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA))
+ AddBloodVolume(-0.09) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now)
// Heal
if (HandleHealing(1))
@@ -154,7 +154,7 @@
description = "I slept poorly in a makeshift coffin during the day.\n"
mood_change = -3
timeout = 1000
-
+
/datum/mood_event/daylight_2
description = "I have been scorched by the unforgiving rays of the sun.\n"
mood_change = -6
@@ -175,13 +175,10 @@
if (poweron_masquerade == TRUE || owner.current.AmStaked())
return FALSE
- owner.current.adjustStaminaLoss(-5 * (regenRate * 4) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
+ owner.current.adjustStaminaLoss(-2 * (regenRate * 4) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
owner.current.adjustCloneLoss(-1 * (regenRate * 4) * mult, 0)
owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0)
- owner.current.setOxyLoss(0)
- owner.current.setToxLoss(0)
-
// No Bleeding
if (ishuman(owner.current))
var/mob/living/carbon/human/H = owner.current
@@ -364,10 +361,9 @@
/datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin=FALSE)
owner.current.stat = UNCONSCIOUS
owner.current.fakedeath("bloodsucker") // Come after UNCONSCIOUS or else it fails
- //owner.current.update_stat()
- ADD_TRAIT(owner.current, TRAIT_NODEATH,"bloodsucker") // Without this, you'll just keep dying while you recover.
- ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE,"bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
- ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE,"bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
+ ADD_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") // Without this, you'll just keep dying while you recover.
+ ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
+ ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
// Visuals
owner.current.update_sight()
owner.current.reload_fullscreen()
@@ -380,16 +376,12 @@
/datum/antagonist/bloodsucker/proc/Torpor_End()
owner.current.stat = SOFT_CRIT
owner.current.cure_fakedeath("bloodsucker") // Come after SOFT_CRIT or else it fails
- //owner.current.update_stat()
REMOVE_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker")
REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
to_chat(owner, "You have recovered from Torpor.")
-
-
-
/datum/antagonist/proc/AmFinalDeath()
// Standard Antags can be dead OR final death
return owner && (owner.current && owner.current.stat >= DEAD || owner.AmFinalDeath())
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
index a609a502b3..821df92a19 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
@@ -92,10 +92,11 @@
if(!can_be_staked && owner.AmStaked())
if(display_error)
to_chat(owner, "You have a stake in your chest! Your powers are useless.")
+ return FALSE
// Incap?
if(must_be_capacitated)
var/mob/living/L = owner
- if (L.incapacitated(TRUE, TRUE) || L.lying && !can_be_immobilized)
+ if (L.incapacitated(TRUE, TRUE) || L.resting && !can_be_immobilized)
if(display_error)
to_chat(owner, "Not while you're incapacitated!")
return FALSE
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
index 29af94616f..726eb8c452 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
@@ -1,4 +1,4 @@
-#define TIME_BLOODSUCKER_NIGHT 1080 // 12 minutes
+#define TIME_BLOODSUCKER_NIGHT 900 // 15 minutes
#define TIME_BLOODSUCKER_DAY_WARN 90 // 1.5 minutes
#define TIME_BLOODSUCKER_DAY_FINAL_WARN 25 // 25 sec
#define TIME_BLOODSUCKER_DAY 60 // 1.5 minutes // 10 is a second, 600 is a minute.
diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
index 6561c51a6e..8b5c8dff46 100644
--- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
+++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
@@ -79,6 +79,7 @@
vamp_greet += "* Use \",b\" to speak your ancient Bloodsucker language.
"
vamp_greet += "Bloodsucker Tip: Rest in a Coffin to claim it, and that area, as your lair.
"
vamp_greet += "Bloodsucker Tip: Fear the daylight! Solar flares will bombard the station periodically, and only your coffin can guarantee your safety.
"
+ vamp_greet += "Bloodsucker Tip: You wont loose blood if you are unconcious or sleeping. Use this to your advantage to conserve blood.
"
to_chat(owner, vamp_greet)
owner.current.playsound_local(null, 'sound/bloodsucker/BloodsuckerAlert.ogg', 100, FALSE, pressure_affected = FALSE)
@@ -201,7 +202,7 @@
S.brutemod *= 0.5
S.burnmod += 0.2 // <-------------------- Start small, but burn mod increases based on rank!
S.coldmod = 0
- S.stunmod *= 0.5
+ S.stunmod *= 0.25
S.siemens_coeff *= 0.75 //base electrocution coefficient 1
//S.heatmod += 0.5 // Heat shouldn't affect. Only Fire.
//S.punchstunthreshold = 8 //damage at which punches from this race will stun 9
@@ -209,7 +210,6 @@
S.punchdamagehigh += 1 //highest possible punch damage 9
// Clown
if(istype(H) && owner.assigned_role == "Clown")
- //to_chat(H, "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself.")
H.dna.remove_mutation(CLOWNMUT)
to_chat(H, "As a vampiric clown, you are no longer a danger to yourself. Your nature is subdued.")
// Physiology
@@ -217,7 +217,7 @@
// Language
owner.current.grant_language(/datum/language/vampiric)
// Soul
- owner.current.hellbound = TRUE
+ //owner.current.hellbound = TRUE Causes wierd stuff
owner.hasSoul = FALSE // If false, renders the character unable to sell their soul.
owner.isholy = FALSE // is this person a chaplain or admin role allowed to use bibles
// Disabilities
@@ -256,7 +256,7 @@
// Soul
if (owner.soulOwner == owner) // Return soul, if *I* own it.
owner.hasSoul = TRUE
- owner.current.hellbound = FALSE
+//owner.current.hellbound = FALSE
datum/antagonist/bloodsucker/proc/RankUp()
set waitfor = FALSE
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
index 8ec6c72daf..128398a3b0 100644
--- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
@@ -36,7 +36,7 @@
// DONE
to_chat(owner, "You have claimed the [claimed] as your place of immortal rest! Your lair is now [lair].")
to_chat(owner, "You have learned new construction recipes to improve your lair.")
- to_chat(owner, "Bloodsucker Tip: Find new lair recipes in the Structures tab of the Crafting Menu at the bottom of the screen, including the Persuasion Rack for converting crew into Vassals.
")
+ to_chat(owner, "Bloodsucker Tip: Find new lair recipes in the misc tab of the Crafting Menu at the bottom of the screen, including the Persuasion Rack for converting crew into Vassals.
")
RunLair() // Start
return TRUE
@@ -229,7 +229,7 @@
///obj/item/stack/packageWrap = 8,
///obj/item/pipe = 2)
time = 150
- category = CAT_STRUCTURE
+ category = CAT_MISC
always_availible = TRUE
/datum/crafting_recipe/bloodsucker/meatcoffin
@@ -240,7 +240,7 @@
reqs = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5,
/obj/item/restraints/handcuffs/cable = 1)
time = 150
- category = CAT_STRUCTURE
+ category = CAT_MISC
always_availible = TRUE
/datum/crafting_recipe/bloodsucker/metalcoffin
@@ -250,5 +250,5 @@
/obj/item/screwdriver)
reqs = list(/obj/item/stack/sheet/metal = 5)
time = 100
- category = CAT_STRUCTURE
+ category = CAT_MISC
always_availible = TRUE
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
index 08d60caa94..2a4e2b31c6 100644
--- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
@@ -247,12 +247,12 @@
if (bloodsuckerdatum.lair != get_area(src))
to_chat(user, "You may only activate this structure in your lair: [bloodsuckerdatum.lair].")
return
- switch(alert(user,"Do you wish to afix this structure here?","Secure [src]","Yes", "No"))
+ switch(alert(user,"Do you wish to afix this structure here? Be aware you wont be able to unsecure it anymore","Secure [src]","Yes", "No"))
if("Yes")
owner = user
density = FALSE
anchored = TRUE
- return
+ return //No, you cant move this ever again
// No One Home
if (!has_buckled_mobs())
@@ -463,7 +463,6 @@
if (HAS_TRAIT(target, TRAIT_MINDSHIELD))
to_chat(target, "You give in to the will of your torturer. If they are successful, you will no longer be loyal to the station!")
-
/obj/structure/bloodsucker/vassalrack/proc/disloyalty_refuse(mob/living/target)
// FAILSAFE: Still on the rack?
if (!(locate(target) in buckled_mobs))
@@ -525,45 +524,6 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-/datum/crafting_recipe/bloodsucker/vassalrack
- name = "Persuasion Rack"
- //desc = "For converting crewmembers into loyal Vassals."
- result = /obj/structure/bloodsucker/vassalrack
- tools = list(/obj/item/weldingtool,
- ///obj/item/screwdriver,
- /obj/item/wrench
- )
- reqs = list(/obj/item/stack/sheet/mineral/wood = 3,
- /obj/item/stack/sheet/metal = 2,
- /obj/item/restraints/handcuffs/cable = 2,
- ///obj/item/storage/belt = 1
- ///obj/item/stack/sheet/animalhide = 1, // /obj/item/stack/sheet/leather = 1,
- ///obj/item/stack/sheet/plasteel = 5
- )
- //parts = list(/obj/item/storage/belt = 1
- // )
-
- time = 150
- category = CAT_STRUCTURE
- always_availible = FALSE // Disabled til learned
-
-
-/datum/crafting_recipe/bloodsucker/candelabrum
- name = "Candelabrum"
- //desc = "For converting crewmembers into loyal Vassals."
- result = /obj/structure/bloodsucker/candelabrum
- tools = list(/obj/item/weldingtool,
- /obj/item/wrench
- )
- reqs = list(/obj/item/stack/sheet/metal = 3,
- /obj/item/stack/rods = 1,
- /obj/item/candle = 1
- )
- time = 100
- category = CAT_STRUCTURE
- always_availible = FALSE // Disabled til learned
-
-
// OTHER THINGS TO USE: HUMAN BLOOD. /obj/effect/decal/cleanable/blood
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
index b2b91f8929..63f8838882 100644
--- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
@@ -36,8 +36,8 @@
while (!AmFinalDeath() && coffin && lair)
- // WAit 10 Sec and Repeat
- sleep(100)
+ // WAit 1 min and Repeat
+ sleep(60)
// Coffin Moved SOMEHOW?
if (lair != get_area(coffin))
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm
index a09cc1358c..b5c5c2f265 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm
@@ -4,8 +4,8 @@
name = "Brawn"//"Cellular Emporium"
desc = "Snap restraints with ease, or deal terrible damage with your bare hands."
button_icon_state = "power_strength"
- bloodcost = 8
- cooldown = 100
+ bloodcost = 10
+ cooldown = 600
target_range = 1
power_activates_immediately = TRUE
message_Trigger = ""//"Whom will you subvert to your will?"
@@ -75,7 +75,7 @@
"[user] has knocked you down!", null, COMBAT_MESSAGE_RANGE)
target.Knockdown( min(5, rand(10, 10 * powerlevel)) )
// Chance of KO
- if (rand(5 + powerlevel) >= 5 && target.stat <= UNCONSCIOUS)
+ if (rand(3 + powerlevel) >= 5 && target.stat <= UNCONSCIOUS)
target.Unconscious(40)
// Attack!
playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1)
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
index 53db94ef66..c3337eb391 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
@@ -54,7 +54,7 @@
// 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.lying)
+ 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)
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm
index e507b3a14f..4a36431b18 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm
@@ -46,7 +46,6 @@
/datum/action/bloodsucker/targeted/lunge/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
var/mob/living/carbon/target = A
var/turf/T = get_turf(target)
// Clear Vars
@@ -55,26 +54,20 @@
var/do_knockdown = !is_A_facing_B(target,owner) || owner.alpha <= 0 || istype(owner.loc, /obj/structure/closet)
// CAUSES: Target has their back to me, I'm invisible, or I'm in a Closet
// Step One: Heatseek toward Target's Turf
+
walk_towards(owner, T, 0.1, 10) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path.
- var/safety = 10
- while(get_turf(owner) != T && safety > 0 && !(isliving(target) && target.Adjacent(owner)))
- if(owner.incapacitated())
- sleep(1)
- safety --
- // Did I get knocked down?
- if (owner && owner.incapacitated())
- if (user.lying)
- 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)
- break
- // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination)
- if (target.Adjacent(owner))
+ if(get_turf(owner) != T && !(isliving(target) && target.Adjacent(owner)) && owner.incapacitated() && owner.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)
+ // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination)
+ sleep(1)
+ if(target.Adjacent(owner))
// LEVEL 2: If behind target, mute or unconscious!
if (do_knockdown) // && level_current >= 1)
target.Knockdown(15 + 10 * level_current,1)
// Cancel Walk (we were close enough to contact them)
- walk(owner,0)
+ walk(owner, 0)
//target.Paralyze(10,1)
target.grabbedby(owner) // Taken from mutations.dm under changelings
target.grippedby(owner, instant = TRUE) //instant aggro grab
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
index fc396dbeea..bd185958d3 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
@@ -53,7 +53,7 @@
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("heart"))
+ if (!target.getorganslot(ORGAN_SLOT_EYES))
if (display_error)
to_chat(owner, "They have no eyes!")
return FALSE
@@ -77,7 +77,7 @@
to_chat(owner, "You must be facing your victim.")
return FALSE
// Check: Target facing me?
- if (!target.lying && !is_A_facing_B(target,owner))
+ 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
@@ -91,11 +91,13 @@
var/mob/living/carbon/target = A
var/mob/living/user = owner
- if (istype(target))
- ADD_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize")
+ if(istype(target))
+ target.Stun(40) //Utterly useless without this, its okay since there are so many checks to go through
+ target.silent += 40 //Shhhh little lamb
- if (do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))
+ if(do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))
PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!
+ ADD_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize")
var/power_time = 90 + level_current * 15
to_chat(user, "[target] is fixed in place by your hypnotic gaze.")
target.Stun(power_time)
@@ -103,12 +105,12 @@
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))
+ if(istype(target))
target.notransform = FALSE
- REMOVE_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize")
// They Woke Up! (Notice if within view)
- if (istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) )
+ if(istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) )
to_chat(user, "[target] has snapped out of their trance.")
+ REMOVE_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize")
/datum/action/bloodsucker/targeted/mesmerize/ContinueActive(mob/living/user, mob/living/target)
diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm
index f310ae3887..0e14f9f5be 100644
--- a/code/modules/crafting/craft.dm
+++ b/code/modules/crafting/craft.dm
@@ -6,7 +6,6 @@
CAT_WEAPONRY,
CAT_ROBOT,
CAT_MISC,
- CAT_STRUCTURE,
CAT_PRIMAL,
CAT_FOOD,
CAT_CLOTHING)
diff --git a/code/modules/crafting/recipes/recipes_misc.dm b/code/modules/crafting/recipes/recipes_misc.dm
index fdfb959fe6..5a05375933 100644
--- a/code/modules/crafting/recipes/recipes_misc.dm
+++ b/code/modules/crafting/recipes/recipes_misc.dm
@@ -315,3 +315,41 @@
reqs = list(/obj/item/stack/rods = 2,
/obj/item/clothing/under/rank/security = 1)
category = CAT_MISC
+
+ /datum/crafting_recipe/bloodsucker/vassalrack
+ name = "Persuasion Rack"
+ //desc = "For converting crewmembers into loyal Vassals."
+ result = /obj/structure/bloodsucker/vassalrack
+ tools = list(/obj/item/weldingtool,
+ ///obj/item/screwdriver,
+ /obj/item/wrench
+ )
+ reqs = list(/obj/item/stack/sheet/mineral/wood = 3,
+ /obj/item/stack/sheet/metal = 2,
+ /obj/item/restraints/handcuffs/cable = 2,
+ ///obj/item/storage/belt = 1
+ ///obj/item/stack/sheet/animalhide = 1, // /obj/item/stack/sheet/leather = 1,
+ ///obj/item/stack/sheet/plasteel = 5
+ )
+ //parts = list(/obj/item/storage/belt = 1
+ // )
+
+ time = 150
+ category = CAT_MISC
+ always_availible = FALSE // Disabled til learned
+
+
+ /datum/crafting_recipe/bloodsucker/candelabrum
+ name = "Candelabrum"
+ //desc = "For converting crewmembers into loyal Vassals."
+ result = /obj/structure/bloodsucker/candelabrum
+ tools = list(/obj/item/weldingtool,
+ /obj/item/wrench
+ )
+ reqs = list(/obj/item/stack/sheet/metal = 3,
+ /obj/item/stack/rods = 1,
+ /obj/item/candle = 1
+ )
+ time = 100
+ category = CAT_MISC
+ always_availible = FALSE // Disabled til learned
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index 8042cf1f90..d893108bcd 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -76,7 +76,7 @@
return amount
/mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
- if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) // FULPSTATION 5/8/19 - Vamps don't heal naturally.
+ if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) //Vamps don't heal naturally.
return FALSE
if(!forced && (status_flags & GODMODE))
return FALSE
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 7d568ed510..ff182b19ea 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -44,7 +44,7 @@
C.faction |= "slime"
/datum/species/jelly/spec_life(mob/living/carbon/human/H)
- if(H.stat == DEAD) //can't farm slime jelly from a dead slime/jelly person indefinitely
+ if(H.stat == DEAD && HAS_TRAIT(src, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for vampires
return
if(!H.blood_volume)
H.blood_volume += 5
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 5177b55183..8ea155256c 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 32af6fb5d0..9219159405 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -25,7 +25,6 @@
#include "code\__DEFINES\antagonists.dm"
#include "code\__DEFINES\atmospherics.dm"
#include "code\__DEFINES\atom_hud.dm"
-#include "code\__DEFINES\bloodsucker.dm"
#include "code\__DEFINES\bsql.config.dm"
#include "code\__DEFINES\bsql.dm"
#include "code\__DEFINES\callbacks.dm"