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)