From cf9cf8c9acd575746121fff49e8c396b911a7c9e Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Tue, 3 Feb 2026 18:10:32 +0200
Subject: [PATCH 1/4] Update vamp_bite.dm
---
.../modules/blood_drinking/code/vamp_bite.dm | 133 +++++++++---------
1 file changed, 70 insertions(+), 63 deletions(-)
diff --git a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
index cd5f9f969533..0eb34919547c 100644
--- a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
+++ b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
@@ -4,70 +4,77 @@
if(!COOLDOWN_FINISHED(src, drinkblood_use_cd) || !COOLDOWN_FINISHED(src, drinkblood_click_cd))
return
COOLDOWN_START(src, drinkblood_click_cd, 1 SECONDS)
- if(grab_state > GRAB_PASSIVE)
- if(ishuman(pulling))
- var/mob/living/carbon/human/PB = pulling
- if(isghoul(src))
- if(!iskindred(PB))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("You're not desperate enough to try that."))
- return
- if(!isghoul(src) && !iskindred(src))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("You're not desperate enough to try that."))
- return
- if(PB.stat == DEAD && !HAS_TRAIT(src, TRAIT_GULLET))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("Your Beast requires life, not the tepid swill of corpses."))
- return
- if(PB.blood_volume <= 50 && (!iskindred(pulling) || !iskindred(src)))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
- return
- if(PB.bloodpool <= 0 && (!iskindred(pulling) || !iskindred(src)))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
- return
- if(iskindred(src))
- PB.emote("groan")
- if(isghoul(src))
- PB.emote("scream")
- PB.add_bite_animation()
- if(isliving(pulling))
- if(!iskindred(src))
+ if(grab_state == GRAB_PASSIVE)
+ return
+
+ if(isliving(pulling))
+ if(!iskindred(src))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("You're not desperate enough to try that."))
+ return
+ var/mob/living/LV = pulling
+ if(LV.blood_volume <= 50 && (!iskindred(pulling) || !iskindred(src)))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
+ if(LV.bloodpool <= 0 && (!iskindred(pulling) || !iskindred(src)))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
+ return
+ if(LV.stat == DEAD && !HAS_TRAIT(src, TRAIT_GULLET))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src,span_warning("Your Beast requires life, not the tepid swill of corpses."))
+ return
+ var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
+ if(!skipface)
+ if(iskindred(src) && HAS_TRAIT(src, TRAIT_NEEDS_BLOOD))
+ var/datum/splat/vampire/kindred/kindred_species = iskindred(src)
+ var/stat_to_roll = kindred_species.enlightenment ? STAT_INSTINCT : STAT_SELF_CONTROL
+ var/frenzy_check = SSroll.storyteller_roll(st_get_stat(stat_to_roll), 6, src)
+ if(frenzy_check != ROLL_SUCCESS)
+ to_chat(src, span_userdanger("The taste of blood sends you into a frenzy as you feed!"))
+ // DARKPACK TODO: frenzy, please put the call here
+ else
+ to_chat(src, span_green("The taste of fresh blood while hungry almost drives you into frenzy!"))
+
+ if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER))
+ playsound(src, 'modular_darkpack/modules/blood_drinking/sounds/drinkblood1.ogg', 50, TRUE)
+ LV.visible_message(span_warning(span_bold("[src] bites [LV]'s neck!")), span_warning(span_bold("[src] bites your neck!")))
+ if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER))
+ SEND_SIGNAL(src, COMSIG_MASQUERADE_VIOLATION)
+ else
+ playsound(src, 'modular_darkpack/modules/blood_drinking/sounds/kiss.ogg', 50, TRUE)
+ LV.visible_message(span_italics(span_bold("[src] kisses [LV]!")), span_userlove(span_bold("[src] kisses you!")))
+ drinksomeblood(LV, TRUE)
+
+ if(ishuman(pulling))
+ var/mob/living/carbon/human/PB = pulling
+ if(isghoul(src))
+ if(!iskindred(PB))
SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
to_chat(src, span_warning("You're not desperate enough to try that."))
return
- var/mob/living/LV = pulling
- if(LV.blood_volume <= 50 && (!iskindred(pulling) || !iskindred(src)))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
- if(LV.bloodpool <= 0 && (!iskindred(pulling) || !iskindred(src)))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
- return
- if(LV.stat == DEAD && !HAS_TRAIT(src, TRAIT_GULLET))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src,span_warning("Your Beast requires life, not the tepid swill of corpses."))
- return
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if(!skipface)
- if(iskindred(src) && HAS_TRAIT(src, TRAIT_NEEDS_BLOOD))
- var/datum/splat/vampire/kindred/kindred_species = iskindred(src)
- var/stat_to_roll = kindred_species.enlightenment ? STAT_INSTINCT : STAT_SELF_CONTROL
- var/frenzy_check = SSroll.storyteller_roll(st_get_stat(stat_to_roll), 6, src)
- if(frenzy_check != ROLL_SUCCESS)
- to_chat(src, span_userdanger("The taste of blood sends you into a frenzy as you feed!"))
- // DARKPACK TODO: frenzy, please put the call here
- else
- to_chat(src, span_green("The taste of fresh blood while hungry almost drives you into frenzy!"))
+ if(!isghoul(src) && !iskindred(src))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("You're not desperate enough to try that."))
+ return
+ if(PB.stat == DEAD && !HAS_TRAIT(src, TRAIT_GULLET))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("Your Beast requires life, not the tepid swill of corpses."))
+ return
+ if(PB.blood_volume <= 50 && (!iskindred(pulling) || !iskindred(src)))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
+ return
+ if(PB.bloodpool <= 0 && (!iskindred(pulling) || !iskindred(src)))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
+ return
+ if(iskindred(src))
+ PB.emote("groan")
+ if(isghoul(src))
+ PB.emote("scream")
+ PB.add_bite_animation()
- if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER))
- playsound(src, 'modular_darkpack/modules/blood_drinking/sounds/drinkblood1.ogg', 50, TRUE)
- LV.visible_message(span_warning(span_bold("[src] bites [LV]'s neck!")), span_warning(span_bold("[src] bites your neck!")))
- if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER))
- SEND_SIGNAL(src, COMSIG_MASQUERADE_VIOLATION)
- else
- playsound(src, 'modular_darkpack/modules/blood_drinking/sounds/kiss.ogg', 50, TRUE)
- LV.visible_message(span_italics(span_bold("[src] kisses [LV]!")), span_userlove(span_bold("[src] kisses you!")))
- drinksomeblood(LV, TRUE)
+/mob/living/carbon/human/proc/perform_bite_consequences(var/mob/living/carbon/human/target)
+ if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER))
+ SEND_SIGNAL(src, COMSIG_MASQUERADE_VIOLATION)
From 703112a7b19ded04782c92c43e7c5d78fea6b8db Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Tue, 3 Feb 2026 18:15:30 +0200
Subject: [PATCH 2/4] Update vamp_bite.dm
---
.../modules/blood_drinking/code/vamp_bite.dm | 59 ++++++++++---------
1 file changed, 30 insertions(+), 29 deletions(-)
diff --git a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
index 0eb34919547c..b84664cf89ce 100644
--- a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
+++ b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
@@ -7,6 +7,35 @@
if(grab_state == GRAB_PASSIVE)
return
+ if(ishuman(pulling))
+ var/mob/living/carbon/human/PB = pulling
+ if(isghoul(src))
+ if(!iskindred(PB))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("You're not desperate enough to try that."))
+ return
+ if(!isghoul(src) && !iskindred(src))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("You're not desperate enough to try that."))
+ return
+ if(PB.stat == DEAD && !HAS_TRAIT(src, TRAIT_GULLET))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("Your Beast requires life, not the tepid swill of corpses."))
+ return
+ if(PB.blood_volume <= 50 && (!iskindred(pulling) || !iskindred(src)))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
+ return
+ if(PB.bloodpool <= 0 && (!iskindred(pulling) || !iskindred(src)))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
+ to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
+ return
+ if(iskindred(src))
+ PB.emote("groan")
+ if(isghoul(src))
+ PB.emote("scream")
+ PB.add_bite_animation()
+
if(isliving(pulling))
if(!iskindred(src))
SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
@@ -46,35 +75,7 @@
LV.visible_message(span_italics(span_bold("[src] kisses [LV]!")), span_userlove(span_bold("[src] kisses you!")))
drinksomeblood(LV, TRUE)
- if(ishuman(pulling))
- var/mob/living/carbon/human/PB = pulling
- if(isghoul(src))
- if(!iskindred(PB))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("You're not desperate enough to try that."))
- return
- if(!isghoul(src) && !iskindred(src))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("You're not desperate enough to try that."))
- return
- if(PB.stat == DEAD && !HAS_TRAIT(src, TRAIT_GULLET))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("Your Beast requires life, not the tepid swill of corpses."))
- return
- if(PB.blood_volume <= 50 && (!iskindred(pulling) || !iskindred(src)))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
- return
- if(PB.bloodpool <= 0 && (!iskindred(pulling) || !iskindred(src)))
- SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', 0, 0, 75))
- to_chat(src, span_warning("This vessel is empty. You'll have to find another."))
- return
- if(iskindred(src))
- PB.emote("groan")
- if(isghoul(src))
- PB.emote("scream")
- PB.add_bite_animation()
-/mob/living/carbon/human/proc/perform_bite_consequences(var/mob/living/carbon/human/target)
+/mob/living/carbon/human/proc/perform_bite_consequences(mob/living/carbon/human/target)
if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER))
SEND_SIGNAL(src, COMSIG_MASQUERADE_VIOLATION)
From eef6db2ae85f4511f87e019cacaf410935470485 Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Tue, 3 Feb 2026 18:47:48 +0200
Subject: [PATCH 3/4] aaaa
---
.../blood_drinking/code/bite_helper_procs.dm | 16 +++--
.../blood_drinking/code/drinksomeblood.dm | 63 +++++++++----------
.../modules/blood_drinking/code/vamp_bite.dm | 9 ++-
3 files changed, 45 insertions(+), 43 deletions(-)
diff --git a/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm b/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm
index af88af18c100..83bef0bd87ab 100644
--- a/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm
+++ b/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm
@@ -24,21 +24,21 @@
update_blood_hud()
//runs a bite animation for biting people and biting people and biting p
-/mob/living/carbon/human/proc/add_bite_animation()
+/mob/living/proc/add_bite_animation()
remove_overlay(HALO_LAYER)
var/mutable_appearance/bite_overlay = mutable_appearance('modular_darkpack/modules/deprecated/icons/icons.dmi', "bite", -HALO_LAYER)
overlays_standing[HALO_LAYER] = bite_overlay
apply_overlay(HALO_LAYER)
addtimer(CALLBACK(src, PROC_REF(clear_bite_animation_overlay)), 1.5 SECONDS)
-/mob/living/carbon/human/proc/clear_bite_animation_overlay()
+/mob/living/proc/clear_bite_animation_overlay()
if(src)
remove_overlay(HALO_LAYER)
//Here is where you handle any circumstantial modifiers to bloodpool gains
//VTR has a lot of these.
-/mob/living/carbon/human/proc/calculate_drink_modifier(var/mob/living/mob)
+/mob/living/proc/calculate_drink_modifier(mob/living/drunk_mob)
var/drink_mod = 1
if(HAS_TRAIT(src, TRAIT_HUNGRY))
drink_mod *= 0.5
@@ -46,18 +46,16 @@
return drink_mod
//Removes the circular suck bar that displays the amount of blood a victim has left.
-/mob/living/carbon/human/proc/remove_drinking_overlay()
+/mob/living/proc/remove_drinking_overlay()
stop_sound_channel(CHANNEL_BLOOD)
COOLDOWN_RESET(src, drinkblood_use_cd)
- if(client)
- client.images -= suckbar
+ client?.images -= suckbar
qdel(suckbar)
return
//Updates the circular suck bar that displays the amount of blood a victim has left.
-/mob/living/carbon/human/proc/update_drinking_overlay(var/mob/living/mob)
- if(client)
- client.images -= suckbar
+/mob/living/proc/update_drinking_overlay(mob/living/mob)
+ client?.images -= suckbar
qdel(suckbar)
suckbar_loc = mob
suckbar = image('modular_darkpack/modules/blood_drinking/icons/bloodcounter.dmi', suckbar_loc, "[round(14*(mob.bloodpool/mob.maxbloodpool))]", HUD_PLANE)
diff --git a/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm b/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm
index 894985d9eee0..3fa7cb832706 100644
--- a/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm
+++ b/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm
@@ -1,87 +1,84 @@
-/mob/living/carbon/human/proc/drinksomeblood(var/mob/living/mob, first_drink = FALSE)
+/mob/living/carbon/human/proc/drinksomeblood(mob/living/victim, first_drink = FALSE)
COOLDOWN_START(src, drinkblood_use_cd, 3 SECONDS)
- update_drinking_overlay(mob)
+ update_drinking_overlay(victim)
if(HAS_TRAIT(src, TRAIT_BLOODY_SUCKER))
src.emote("moan")
Immobilize(30, TRUE)
- if(isnpc(mob))
- var/mob/living/carbon/human/npc/NPC = mob
+ if(isnpc(victim))
+ var/mob/living/carbon/human/npc/NPC = victim
NPC.danger_source = null
- mob.Stun(40) //NPCs don't get to resist
+ victim.Stun(40) //NPCs don't get to resist
- if(mob.blood_volume <= BLOOD_VOLUME_BAD)
+ if(victim.blood_volume <= BLOOD_VOLUME_BAD)
to_chat(src, span_warning("Your victim's heart beats only weakly. Death comes for them."))
//Check if we can drink this person to death
- if(mob.bloodpool <= 0 && !check_can_drink_dry(mob))
- remove_drinking_overlay(mob)
+ if(victim.bloodpool <= 0 && !check_can_drink_dry(victim))
+ remove_drinking_overlay(victim)
return
- if(mob.bloodpool <= 1 && mob.maxbloodpool > 1)
+ if(victim.bloodpool <= 1 && victim.maxbloodpool > 1)
to_chat(src, span_warning("You feel small amount of BLOOD in your victim."))
if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER))
SEND_SIGNAL(src, COMSIG_MASQUERADE_VIOLATION)
- if(!do_after(src, 3 SECONDS, target = mob, timed_action_flags = NONE, progress = FALSE))
- remove_drinking_overlay(mob)
- if(!(SEND_SIGNAL(mob, COMSIG_MOB_VAMPIRE_SUCKED, mob) & COMPONENT_RESIST_VAMPIRE_KISS))
- mob.apply_status_effect(/datum/status_effect/kissed)
+ if(!do_after(src, 3 SECONDS, target = victim, timed_action_flags = NONE, progress = FALSE))
+ remove_drinking_overlay(victim)
+ if(!(SEND_SIGNAL(victim, COMSIG_MOB_VAMPIRE_SUCKED, victim) & COMPONENT_RESIST_VAMPIRE_KISS))
+ victim.apply_status_effect(/datum/status_effect/kissed)
return
- mob.adjust_blood_pool(-1)
- suckbar.icon_state = "[round(14*(mob.bloodpool/mob.maxbloodpool))]"
-
- if(ishuman(mob))
- var/mob/living/carbon/human/H = mob
+ victim.adjust_blood_pool(-1)
+ suckbar.icon_state = "[round(14*(victim.bloodpool/victim.maxbloodpool))]"
+ if(ishuman(victim))
+ var/mob/living/carbon/human/H = victim
drunked_of |= "[H.dna.real_name]"
- if(!iskindred(mob))
+ if(!iskindred(victim))
H.blood_volume = max(H.blood_volume-50, 150)
if(H.reagents)
- if(length(H.reagents.reagent_list))
- if(prob(50))
- H.reagents.trans_to(src, min(10, H.reagents.total_volume), transferred_by = mob, methods = INGEST)
+ H.reagents.trans_to(src, min(10, H.reagents.total_volume), transferred_by = victim, methods = INGEST)
if(HAS_TRAIT(src, TRAIT_PAINFUL_VAMPIRE_KISS))
- mob.adjust_brute_loss(20, TRUE)
+ victim.adjust_brute_loss(20, TRUE)
//Ventrue can suck on normal people, but not homeless people and animals.
//BLOOD_QUALITY_LOV - 1, BLOOD_QUALITY_NORMAL - 2, BLOOD_QUALITY_HIGH - 3. Blue blood gives +1 to suction
- if(HAS_TRAIT(src, TRAIT_FEEDING_RESTRICTION) && mob.bloodquality < BLOOD_QUALITY_NORMAL)
+ if(HAS_TRAIT(src, TRAIT_FEEDING_RESTRICTION) && victim.bloodquality < BLOOD_QUALITY_NORMAL)
to_chat(src, span_warning("You are too privileged to drink that awful BLOOD. Go get something better."))
visible_message(span_danger("[src] throws up!"), span_userdanger("You throw up!"))
playsound(get_turf(src), 'modular_darkpack/modules/deprecated/sounds/vomit.ogg', 75, TRUE)
if(isturf(loc))
add_splatter_floor(loc)
- remove_drinking_overlay(mob)
+ remove_drinking_overlay(victim)
return
- if(iskindred(mob))
- to_chat(src, span_userdanger("[mob]'s blood tastes HEAVENLY..."))
+ if(iskindred(victim))
+ to_chat(src, span_userdanger("[victim]'s blood tastes HEAVENLY..."))
adjust_brute_loss(-25, TRUE)
adjust_fire_loss(-25, TRUE)
else
to_chat(src, span_warning("You sip some BLOOD from your victim. It feels good."))
- var/drink_mod = calculate_drink_modifier(mob)
+ var/drink_mod = calculate_drink_modifier(victim)
if(drink_mod)
- adjust_blood_pool(drink_mod*max(1, mob.bloodquality-1))
+ adjust_blood_pool(drink_mod*max(1, victim.bloodquality-1))
adjust_brute_loss(-10, TRUE)
adjust_fire_loss(-10, TRUE)
update_damage_overlays()
update_health_hud()
- if(mob.bloodpool <= 0)
- handle_drink_dry(mob)
- remove_drinking_overlay(mob)
+ if(victim.bloodpool <= 0)
+ handle_drink_dry(victim)
+ remove_drinking_overlay(victim)
return
if(grab_state >= GRAB_PASSIVE)
stop_sound_channel(CHANNEL_BLOOD)
- drinksomeblood(mob)
+ drinksomeblood(victim)
diff --git a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
index b84664cf89ce..d3d963aaa80b 100644
--- a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
+++ b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
@@ -7,6 +7,12 @@
if(grab_state == GRAB_PASSIVE)
return
+ if(!perform_bite_checks())
+ return
+
+ var/mob/living/victim = pulling
+ victim.add_bite_animation()
+
if(ishuman(pulling))
var/mob/living/carbon/human/PB = pulling
if(isghoul(src))
@@ -34,7 +40,6 @@
PB.emote("groan")
if(isghoul(src))
PB.emote("scream")
- PB.add_bite_animation()
if(isliving(pulling))
if(!iskindred(src))
@@ -75,6 +80,8 @@
LV.visible_message(span_italics(span_bold("[src] kisses [LV]!")), span_userlove(span_bold("[src] kisses you!")))
drinksomeblood(LV, TRUE)
+/mob/living/carbon/human/proc/perform_bite_checks()
+ return TRUE
/mob/living/carbon/human/proc/perform_bite_consequences(mob/living/carbon/human/target)
if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER))
From b2239853910c0df5d871c5ba1bda062549b7698e Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Sun, 15 Feb 2026 00:55:03 +0200
Subject: [PATCH 4/4] Update bite_helper_procs.dm
---
.../modules/blood_drinking/code/bite_helper_procs.dm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm b/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm
index ce873d801e11..342545a73f1f 100644
--- a/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm
+++ b/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm
@@ -29,14 +29,14 @@
adjust_blood_pool(amount, updating_health, on_spawn)
//runs a bite animation for biting people and biting people and biting p
-/mob/living/proc/add_bite_animation()
+/mob/living/carbon/human/proc/add_bite_animation()
remove_overlay(HALO_LAYER)
var/mutable_appearance/bite_overlay = mutable_appearance('modular_darkpack/modules/deprecated/icons/icons.dmi', "bite", -HALO_LAYER)
overlays_standing[HALO_LAYER] = bite_overlay
apply_overlay(HALO_LAYER)
addtimer(CALLBACK(src, PROC_REF(clear_bite_animation_overlay)), 1.5 SECONDS)
-/mob/living/proc/clear_bite_animation_overlay()
+/mob/living/carbon/human/proc/clear_bite_animation_overlay()
if(src)
remove_overlay(HALO_LAYER)
@@ -51,7 +51,7 @@
return drink_mod
//Removes the circular suck bar that displays the amount of blood a victim has left.
-/mob/living/proc/remove_drinking_overlay()
+/mob/living/carbon/human/proc/remove_drinking_overlay()
stop_sound_channel(CHANNEL_BLOOD)
COOLDOWN_RESET(src, drinkblood_use_cd)
if(client)