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.")