Datumized vampires (#17166)

Co-authored-by: Farie82 <farie82@users.noreply.github.com>
Co-authored-by: dearmochi <1496804+dearmochi@users.noreply.github.com>
This commit is contained in:
Charlie
2022-01-18 21:16:09 +01:00
committed by GitHub
co-authored by Farie82 dearmochi
parent b2704e06b2
commit a0e5d6df44
33 changed files with 626 additions and 759 deletions
@@ -12,11 +12,11 @@
var/diet_flags = DIET_OMNI | DIET_HERB | DIET_CARN
/datum/reagent/consumable/on_mob_life(mob/living/M)
if(!(M.mind in SSticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
H.adjust_nutrition(nutriment_factor) // For hunger and fatness
var/is_vamp = M.mind?.has_antag_datum(/datum/antagonist/vampire)
if(ishuman(M) && !is_vamp)
var/mob/living/carbon/human/H = M
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
H.adjust_nutrition(nutriment_factor) // For hunger and fatness
return ..()
/datum/reagent/consumable/nutriment // Pure nutriment, universally digestable and thus slightly less effective
@@ -31,13 +31,13 @@
/datum/reagent/consumable/nutriment/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(!(M.mind in SSticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
if(prob(50))
update_flags |= M.adjustBruteLoss(-brute_heal, FALSE)
update_flags |= M.adjustFireLoss(-burn_heal, FALSE)
var/is_vamp = M.mind?.has_antag_datum(/datum/antagonist/vampire)
if(ishuman(M) && !is_vamp)
var/mob/living/carbon/human/H = M
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
if(prob(50))
update_flags |= M.adjustBruteLoss(-brute_heal, FALSE)
update_flags |= M.adjustFireLoss(-burn_heal, FALSE)
return ..() | update_flags
/datum/reagent/consumable/nutriment/on_new(list/supplied_data)
@@ -354,7 +354,8 @@
var/update_flags = STATUS_UPDATE_NONE
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.mind && H.mind.vampire && !H.mind.vampire.get_ability(/datum/vampire_passive/full)) //incapacitating but not lethal.
var/datum/antagonist/vampire/V = H.mind?.has_antag_datum(/datum/antagonist/vampire)
if(V && !V.get_ability(/datum/vampire_passive/full)) //incapacitating but not lethal.
if(prob(min(25, current_cycle)))
to_chat(H, "<span class='danger'>You can't get the scent of garlic out of your nose! You can barely think...</span>")
H.Weaken(1)
@@ -107,7 +107,7 @@
C.reagents.add_reagent("toxin", volume * 0.5)
else
C.blood_volume = min(C.blood_volume + round(volume, 0.1), BLOOD_VOLUME_NORMAL)
if(C.mind?.vampire)
if(C.mind?.has_antag_datum(/datum/antagonist/vampire))
C.set_nutrition(min(NUTRITION_LEVEL_WELL_FED, C.nutrition + 10))
/datum/reagent/blood/on_new(list/data)
@@ -249,7 +249,7 @@
if(current_cycle >= 75 && prob(33)) // 30 units, 150 seconds
M.AdjustConfused(3)
if(isvampirethrall(M))
SSticker.mode.remove_vampire_mind(M.mind)
M.mind.remove_antag_datum(/datum/antagonist/mindslave/thrall)
holder.remove_reagent(id, volume)
M.SetJitter(0)
M.SetStuttering(0)
@@ -262,17 +262,18 @@
M.SetStuttering(0)
M.SetConfused(0)
return
if(ishuman(M) && M.mind && M.mind.vampire && !M.mind.vampire.get_ability(/datum/vampire_passive/full) && prob(80))
var/datum/antagonist/vampire/vamp = M.mind?.has_antag_datum(/datum/antagonist/vampire)
if(ishuman(M) && vamp && !vamp.get_ability(/datum/vampire_passive/full) && prob(80))
var/mob/living/carbon/V = M
if(M.mind.vampire.bloodusable)
if(vamp.bloodusable)
M.Stuttering(1)
M.Jitter(30)
update_flags |= M.adjustStaminaLoss(5, FALSE)
if(prob(20))
M.emote("scream")
M.mind.vampire.adjust_nullification(20, 4)
M.mind.vampire.bloodusable = max(M.mind.vampire.bloodusable - 3,0)
if(M.mind.vampire.bloodusable)
vamp.adjust_nullification(20, 4)
vamp.bloodusable = max(vamp.bloodusable - 3,0)
if(vamp.bloodusable)
V.vomit(0, TRUE, FALSE)
V.adjustBruteLoss(3)
else
@@ -283,7 +284,7 @@
switch(current_cycle)
if(1 to 4)
to_chat(M, "<span class = 'warning'>Something sizzles in your veins!</span>")
M.mind.vampire.adjust_nullification(20, 4)
vamp.adjust_nullification(20, 4)
if(5 to 12)
to_chat(M, "<span class = 'danger'>You feel an intense burning inside of you!</span>")
update_flags |= M.adjustFireLoss(1, FALSE)
@@ -291,7 +292,7 @@
M.Jitter(20)
if(prob(20))
M.emote("scream")
M.mind.vampire.adjust_nullification(20, 4)
vamp.adjust_nullification(20, 4)
if(13 to INFINITY)
M.visible_message("<span class='danger'>[M] suddenly bursts into flames!</span>",
"<span class='danger'>You suddenly ignite in a holy fire!</span>")
@@ -302,14 +303,15 @@
M.Jitter(30)
if(prob(40))
M.emote("scream")
M.mind.vampire.adjust_nullification(20, 4)
vamp.adjust_nullification(20, 4)
return ..() | update_flags
/datum/reagent/holywater/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
// Vampires have their powers weakened by holy water applied to the skin.
if(ishuman(M) && M.mind && M.mind.vampire && !M.mind.vampire.get_ability(/datum/vampire_passive/full))
var/mob/living/carbon/human/H=M
var/datum/antagonist/vampire/V = M.mind?.has_antag_datum(/datum/antagonist/vampire)
if(ishuman(M) && V && !V.get_ability(/datum/vampire_passive/full))
var/mob/living/carbon/human/H = M
if(method == REAGENT_TOUCH)
if(H.wear_mask)
to_chat(H, "<span class='warning'>Your mask protects you from the holy water!</span>")
@@ -319,7 +321,7 @@
return
else
to_chat(M, "<span class='warning'>Something holy interferes with your powers!</span>")
M.mind.vampire.adjust_nullification(5, 2)
V.adjust_nullification(5, 2)
/datum/reagent/holywater/reaction_turf(turf/simulated/T, volume)