diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 4193e813fa..50966b797c 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1566,16 +1566,16 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
//Checks to see if either the victim has a garlic necklace or garlic in their blood
/proc/sucking_checks(var/mob/living/carbon/target, check_neck, check_blood)
- //Byppass this if the target isnt carbon.
- if(!iscarbon)
+ //Bypass this if the target isnt carbon.
+ if(!iscarbon(target))
return TRUE
if(check_neck)
if(istype(target.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace))
- to_chat(owner, "[victim] is wearing a garlic clove around their neck! You cant drink from them while it is on them!")
+ to_chat(src, "[target] is wearing a garlic clove around their neck! You cant drink from them while it is on them!")
return FALSE
if(check_blood)
if(target.reagents.has_reagent(/datum/reagent/consumable/garlic))
- to_chat(target, "[H] tries to bite you, but recoils in disgust!")
- to_chat(owner, "[victim] reeks of garlic! you can't bring yourself to drain such tainted blood.")
+ to_chat(target, "[src] tries to bite you, but recoils in disgust!")
+ to_chat(src, "[target] reeks of garlic! you can't bring yourself to drain such tainted blood.")
return FALSE
return TRUE
diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm
index 0796fc3c4c..6315ea525b 100644
--- a/code/game/gamemodes/bloodsucker/bloodsucker.dm
+++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm
@@ -248,11 +248,11 @@
// WHEN YOU DELETE THE ABOVE: Remove the 3 second timer on converting the vassal too.
return FALSE
-/datum/game_mode/proc/make_vassal(/mob/living/target, /datum/mind/creator)
+/datum/game_mode/proc/make_vassal(var/mob/living/target, var/datum/mind/creator)
if(!can_make_vassal(target, creator))
return FALSE
// Make Vassal
- var/datum/antagonist/vassal/V = new (target.mind)
+ var/datum/antagonist/vassal/V = new(target.mind)
var/datum/antagonist/bloodsucker/B = creator.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
V.master = B
target.mind.add_antag_datum(V, V.master.get_team())
@@ -265,12 +265,6 @@
/datum/game_mode/proc/remove_vassal(datum/mind/vassal)
vassal.remove_antag_datum(ANTAG_DATUM_VASSAL)
-
-/datum/game_mode/proc/count_vassals(datum/mind/master)
- var/datum/antagonist/bloodsucker/B = master.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
- var/vassal_amount
- len(B.vassals)
- return vassal_amount
\ No newline at end of file
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
index 4101d55df1..11d94975b3 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
@@ -82,15 +82,16 @@
/datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1)
// NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor!
//It is called from your coffin on close (by you only)
- if(poweron_masquerade == TRUE || owner.current.AmStaked() || owner?.reagents?.has_reagent(/datum/reagent/consumable/garlic)
+ if(poweron_masquerade == TRUE || owner.current.AmStaked() || owner.current.reagents?.has_reagent(/datum/reagent/consumable/garlic))
return FALSE
owner.current.adjustStaminaLoss(-1.5 + (regenRate * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
owner.current.adjustCloneLoss(-0.1 * (regenRate * 2) * mult, 0)
owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0)
// No Bleeding
- if(ishuman(owner.current) && bleed_rate => 0) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete.
+ if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete.
var/mob/living/carbon/human/H = owner.current
- H.bleed_rate =- 1
+ if(H.bleed_rate > 0) //Only heal bleeding if we are actually bleeding
+ H.bleed_rate =- 0.5 + regenRate * mult
if(iscarbon(owner.current)) // Damage Heal: Do I have damage to ANY bodypart?
var/mob/living/carbon/C = owner.current
var/costMult = 1 // Coffin makes it cheaper
diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
index 19a7a2889e..28aef3b6d4 100644
--- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
+++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
@@ -341,10 +341,10 @@
// 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, health, feed rate, regen rate, and maximum blood have all increased!")
+ to_chat(owner.current, "You are now a rank [vamplevel] Bloodsucker. Your strength, health, feed rate, regen rate, can have up to [vamplevel - count_vassals()] vassals, and maximum blood have all increased!")
to_chat(owner.current, "Your existing powers have all ranked up as well!")
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.
+ owner.current.playsound_local(null, 'sound/effects/pope_entry.ogg', 25, TRUE, pressure_affected = FALSE)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -768,3 +768,8 @@
/obj/screen/bloodsucker/sunlight_counter/update_counter(value, valuecolor)
..()
maptext = "
[value]
"
+
+/datum/antagonist/bloodsucker/proc/count_vassals(datum/mind/master)
+ var/datum/antagonist/bloodsucker/B = master.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ var/vassal_amount = B.vassals.len
+ return vassal_amount
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
index ec7c7e9ba8..3b1698c287 100644
--- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
@@ -115,13 +115,15 @@
qdel(src)
/obj/structure/bloodsucker/vassalrack/examine(mob/user)
+ var/datum/antagonist/bloodsucker/B = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
. = ..()
- if(isbloodsucker(user) || isobserver(user))
+ if(B || isobserver(user))
. += {"This is the vassal rack, which allows you to thrall crewmembers into loyal minions in your service."}
. += {"You need to first secure the vassal rack by clicking on it while it is in your lair."}
. += {"Simply click and hold on a victim, and then drag their sprite on the vassal rack. Alt click on the vassal rack to unbuckle them."}
. += {"Make sure that the victim is handcuffed, or else they can simply run away or resist, as the process is not instant."}
. += {"To convert the victim, simply click on the vassal rack itself. Sharp weapons work faster than other tools."}
+ . += {" You have only the power for [B.vamplevel - B.count_vassals(user.mind)] vassals"}
/* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
. += {"This is the vassal rack, which allows your master to thrall crewmembers into his minions.\n
Aid your master in bringing their victims here and keeping them secure.\n
@@ -222,15 +224,15 @@
// Go away. Torturing.
if(useLock)
return
- var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ var/datum/antagonist/bloodsucker/B = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
// CHECK ONE: Am I claiming this? Is it in the right place?
- if(istype(bloodsuckerdatum) && !owner)
- if(!bloodsuckerdatum.lair)
+ if(istype(B) && !owner)
+ if(!B.lair)
to_chat(user, "You don't have a lair. Claim a coffin to make that location your lair.")
- if(bloodsuckerdatum.lair != get_area(src))
- to_chat(user, "You may only activate this structure in your lair: [bloodsuckerdatum.lair].")
+ if(B.lair != get_area(src))
+ to_chat(user, "You may only activate this structure in your lair: [B.lair].")
return
- 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"))
+ 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
@@ -241,27 +243,31 @@
return
// CHECK TWO: Am I a non-bloodsucker?
var/mob/living/carbon/C = pick(buckled_mobs)
- if(!istype(bloodsuckerdatum))
+ if(!istype(B))
// Try to release this guy
user_unbuckle_mob(C, user)
return
// Bloodsucker Owner! Let the boy go.
if(C.mind)
- var/datum/antagonist/vassal/vassaldatum = C.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
- if(istype(vassaldatum) && vassaldatum.master == bloodsuckerdatum || C.stat >= DEAD)
+ var/datum/antagonist/vassal/V = C.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ if(istype(V) && V.master == B || C.stat >= DEAD)
unbuckle_mob(C)
useLock = FALSE // Failsafe
return
// Just torture the boy
torture_victim(user, C)
+#define CONVERT_COST 150
+
/obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target)
- var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ var/datum/antagonist/bloodsucker/B = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
// Check Bloodmob/living/M, force = FALSE, check_loc = TRUE
- var/convert_cost = 200
- if(user.blood_volume < convert_cost + 5)
+ if(user.blood_volume < CONVERT_COST + 5)
to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].")
return
+ if(B.count_vassals(user.mind) > B.vamplevel)
+ to_chat(user, "Your power is yet too weak to bring more vassals under your control....")
+ return
// Prep...
useLock = TRUE
// Step One: Tick Down Conversion from 3 to 0
@@ -302,12 +308,13 @@
useLock = FALSE
return
// Check: Blood
- if(user.blood_volume < convert_cost)
- to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target], you need [convert_cost - user.blood_volume] units more!")
+ if(user.blood_volume < CONVERT_COST)
+ to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target], you need [CONVERT_COST - user.blood_volume] units more!")
useLock = FALSE
return
- bloodsuckerdatum.AddBloodVolume(-convert_cost)
- target.add_mob_blood(user)
+ B.AddBloodVolume(-CONVERT_COST)
+ target.add_mob_blood(user, "Youve used [CONVERT_COST] amount of blood to gain a new vassal!")
+ to_chat(user, )
user.visible_message("[user] marks a bloody smear on [target]'s forehead and puts a wrist up to [target.p_their()] mouth!", \
"You paint a bloody marking across [target]'s forehead, place your wrist to [target.p_their()] mouth, and subject [target.p_them()] to the Dark Communion.")
if(!do_mob(user, src, 50))
@@ -315,7 +322,7 @@
useLock = FALSE
return
// Convert to Vassal!
- if(bloodsuckerdatum && bloodsuckerdatum.attempt_turn_vassal(target))
+ if(B && B.attempt_turn_vassal(target))
//remove_loyalties(target) // In case of Mindshield, or appropriate Antag (Traitor, Internal, etc)
//if (!target.buckled)
// to_chat(user, "The ritual has been interrupted!")
@@ -329,6 +336,7 @@
//remove_victim(target) // Remove on CLICK ONLY!
useLock = FALSE
+#undef CONVERT_COST
/obj/structure/bloodsucker/vassalrack/proc/do_torture(mob/living/user, mob/living/target, mult = 1)
var/torture_time = 15 // Fifteen seconds if you aren't using anything. Shorter with weapons and such.
var/torture_dmg_brute = 2
diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm
index 9866e306c6..bab49e9f83 100644
--- a/code/modules/food_and_drinks/food/snacks_bread.dm
+++ b/code/modules/food_and_drinks/food/snacks_bread.dm
@@ -185,8 +185,8 @@
icon = 'icons/obj/food/burgerbread.dmi'
icon_state = "garlicbread"
item_state = "garlicbread"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/vitamin = 2)
- list_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/vitamin = 4, /datum/reagent/consumable/garlic = 2)
+ bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 2)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin= 4, /datum/reagent/consumable/garlic = 2)
bitesize = 3
tastes = list("bread" = 1, "garlic" = 1, "butter" = 1)
foodtype = GRAIN
diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm
index 65304c5460..c0bc3232b7 100644
--- a/code/modules/mining/equipment/regenerative_core.dm
+++ b/code/modules/mining/equipment/regenerative_core.dm
@@ -72,7 +72,7 @@
if(proximity_flag)
apply_healing_core(target, user)
-/obj/item/organ/regenerative_core/apply_healing_core(atom/target, mob/user)
+/obj/item/organ/regenerative_core/proc/apply_healing_core(atom/target, mob/user)
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(inert)
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 9218df1ad1..1c4810dd34 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -425,7 +425,7 @@
/datum/reagent/consumable/garlic //NOTE: having garlic in your blood stops vampires from biting you.
name = "Garlic Juice"
- id = "garlic"
+ //id = "garlic"
description = "Crushed garlic. Chefs love it, but it can make you smell bad."
color = "#FEFEFE"
taste_description = "garlic"
@@ -435,37 +435,9 @@
if(isvampire(M)) //incapacitating but not lethal. Unfortunately, vampires cannot vomit.
if(prob(min(25, current_cycle)))
to_chat(M, "You can't get the scent of garlic out of your nose! You can barely think...")
- M.Paralyze(10)
+ M.Stun(10)
M.Jitter(10)
return
- else if(isbloodsucker(M))
- var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
- switch(method)
- if(INGEST)
- if(prob(min(30, current_cycle)))
- to_chat(M, "You cant get the smell of garlic out of your nose! You cant think straight because of it!")
- M.Jitter(15)
- return
- if(prob(min(15, current_cycle)))
- M.visible_message("Something you ate is burning your stomach!", /
- "[M] clutches their stomach and falls to the ground!"
- )
- M.Knockdown(20)
- M.emote("scream")
- return
- if(prob(min(5, current_cycle)))
- M.vomit()
- return
- if(INJECT)
- if(prob(min(20, current_cycle)))
- to_chat(M, "You feel like your veins are boiling!")
- M.emote("scream")
- M.adjustFireLoss(5)
- return
- if(prob(min(5, current_cycle)))
- to_chat(M, "You are trying to purge the contaminants from your blood!")
- M.vomit()
- return
else if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -475,6 +447,26 @@
. = 1
..()
+/datum/reagent/consumable/condensedcapsaicin/reaction_mob(mob/living/M, method, reac_volume)
+ if(isbloodsucker(M))
+ switch(method)
+ if(INGEST)
+ if(prob(min(30, current_cycle)))
+ to_chat(M, "You cant get the smell of garlic out of your nose! You cant think straight because of it!")
+ M.Jitter(15)
+ if(prob(min(15, current_cycle)))
+ M.visible_message("Something you ate is burning your stomach!", "[M] clutches their stomach and falls to the ground!")
+ M.Knockdown(20)
+ M.emote("scream")
+ if(prob(min(5, current_cycle)) && iscarbon(M))
+ var/mob/living/carbon/C
+ C.vomit()
+ if(INJECT)
+ if(prob(min(20, current_cycle)))
+ to_chat(M, "You feel like your veins are boiling!")
+ M.emote("scream")
+ M.adjustFireLoss(5)
+
/datum/reagent/consumable/sprinkles
name = "Sprinkles"
value = 3
diff --git a/modular_citadel/code/modules/reagents/objects/clothes.dm b/modular_citadel/code/modules/reagents/objects/clothes.dm
index 457f1dfb39..34af39bbe0 100644
--- a/modular_citadel/code/modules/reagents/objects/clothes.dm
+++ b/modular_citadel/code/modules/reagents/objects/clothes.dm
@@ -25,7 +25,7 @@
/obj/item/clothing/head/hattip/MouseDrop(atom/over_object)
//You sure do love tipping your hat.
- if(user)
+ if(usr)
var/mob/living/carbon/C = usr
if(is_ninja(C))
to_chat(C, "Using your superior ninja reflexes, you take the hat off before tipping.")