Argh
This commit is contained in:
@@ -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, "<span class='notice'>[victim] is wearing a garlic clove around their neck! You cant drink from them while it is on them!</span>")
|
||||
to_chat(src, "<span class='notice'>[target] is wearing a garlic clove around their neck! You cant drink from them while it is on them!</span>")
|
||||
return FALSE
|
||||
if(check_blood)
|
||||
if(target.reagents.has_reagent(/datum/reagent/consumable/garlic))
|
||||
to_chat(target, "<span class='warning'>[H] tries to bite you, but recoils in disgust!</span>")
|
||||
to_chat(owner, "<span class='warning'>[victim] reeks of garlic! you can't bring yourself to drain such tainted blood.</span>")
|
||||
to_chat(target, "<span class='warning'>[src] tries to bite you, but recoils in disgust!</span>")
|
||||
to_chat(src, "<span class='warning'>[target] reeks of garlic! you can't bring yourself to drain such tainted blood.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -341,10 +341,10 @@
|
||||
// Assign True Reputation
|
||||
if(vamplevel == 4)
|
||||
SelectReputation(am_fledgling = FALSE, forced = TRUE)
|
||||
to_chat(owner.current, "<span class='notice'>You are now a rank [vamplevel] Bloodsucker. Your strength, health, feed rate, regen rate, and maximum blood have all increased!</span>")
|
||||
to_chat(owner.current, "<span class='notice'>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!</span>")
|
||||
to_chat(owner.current, "<span class='notice'>Your existing powers have all ranked up as well!</span>")
|
||||
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 = "<div align='center' valign='bottom' style='position:relative; top:0px; left:6px'><font color='[valuecolor]'>[value]</font></div>"
|
||||
|
||||
/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
|
||||
|
||||
@@ -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))
|
||||
. += {"<span class='cult'>This is the vassal rack, which allows you to thrall crewmembers into loyal minions in your service.</span>"}
|
||||
. += {"<span class='cult'>You need to first secure the vassal rack by clicking on it while it is in your lair.</span>"}
|
||||
. += {"<span class='cult'>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.</span>"}
|
||||
. += {"<span class='cult'>Make sure that the victim is handcuffed, or else they can simply run away or resist, as the process is not instant.</span>"}
|
||||
. += {"<span class='cult'>To convert the victim, simply click on the vassal rack itself. Sharp weapons work faster than other tools.</span>"}
|
||||
. += {"<span class='cult'> You have only the power for [B.vamplevel - B.count_vassals(user.mind)] vassals</span>"}
|
||||
/* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
|
||||
. += {"<span class='cult'>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, "<span class='danger'>You don't have a lair. Claim a coffin to make that location your lair.</span>")
|
||||
if(bloodsuckerdatum.lair != get_area(src))
|
||||
to_chat(user, "<span class='danger'>You may only activate this structure in your lair: [bloodsuckerdatum.lair].</span>")
|
||||
if(B.lair != get_area(src))
|
||||
to_chat(user, "<span class='danger'>You may only activate this structure in your lair: [B.lair].</span>")
|
||||
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, "<span class='notice'>You don't have enough blood to initiate the Dark Communion with [target].</span>")
|
||||
return
|
||||
if(B.count_vassals(user.mind) > B.vamplevel)
|
||||
to_chat(user, "<span class='notice'>Your power is yet too weak to bring more vassals under your control....</span>")
|
||||
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, "<span class='notice'>You don't have enough blood to initiate the Dark Communion with [target], you need [convert_cost - user.blood_volume] units more!</span>")
|
||||
if(user.blood_volume < CONVERT_COST)
|
||||
to_chat(user, "<span class='notice'>You don't have enough blood to initiate the Dark Communion with [target], you need [CONVERT_COST - user.blood_volume] units more!</span>")
|
||||
useLock = FALSE
|
||||
return
|
||||
bloodsuckerdatum.AddBloodVolume(-convert_cost)
|
||||
target.add_mob_blood(user)
|
||||
B.AddBloodVolume(-CONVERT_COST)
|
||||
target.add_mob_blood(user, "<span class='danger'>Youve used [CONVERT_COST] amount of blood to gain a new vassal!</span>")
|
||||
to_chat(user, )
|
||||
user.visible_message("<span class='notice'>[user] marks a bloody smear on [target]'s forehead and puts a wrist up to [target.p_their()] mouth!</span>", \
|
||||
"<span class='notice'>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.</span>")
|
||||
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, "<span class='danger'><i>The ritual has been interrupted!</i></span>")
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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, "<span class='danger'>You can't get the scent of garlic out of your nose! You can barely think...</span>")
|
||||
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, "<span class='warning'>You cant get the smell of garlic out of your nose! You cant think straight because of it!</span>")
|
||||
M.Jitter(15)
|
||||
return
|
||||
if(prob(min(15, current_cycle)))
|
||||
M.visible_message("<span class='danger'>Something you ate is burning your stomach!</span>", /
|
||||
"<span class='warning'>[M] clutches their stomach and falls to the ground!</span>"
|
||||
)
|
||||
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, "<span class='warning'>You feel like your veins are boiling!</span>")
|
||||
M.emote("scream")
|
||||
M.adjustFireLoss(5)
|
||||
return
|
||||
if(prob(min(5, current_cycle)))
|
||||
to_chat(M, "<span class='danger'>You are trying to purge the contaminants from your blood!</span>")
|
||||
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, "<span class='warning'>You cant get the smell of garlic out of your nose! You cant think straight because of it!</span>")
|
||||
M.Jitter(15)
|
||||
if(prob(min(15, current_cycle)))
|
||||
M.visible_message("<span class='danger'>Something you ate is burning your stomach!</span>", "<span class='warning'>[M] clutches their stomach and falls to the ground!</span>")
|
||||
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, "<span class='warning'>You feel like your veins are boiling!</span>")
|
||||
M.emote("scream")
|
||||
M.adjustFireLoss(5)
|
||||
|
||||
/datum/reagent/consumable/sprinkles
|
||||
name = "Sprinkles"
|
||||
value = 3
|
||||
|
||||
@@ -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, "<span class='notice'>Using your superior ninja reflexes, you take the hat off before tipping.</span>")
|
||||
|
||||
Reference in New Issue
Block a user