Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm
Original file line number Diff line number Diff line change
Expand Up @@ -106,15 +106,15 @@
if(bloodsucker_minds.current)
switch(danger_level)
if(1)
bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_3.ogg', 50 + danger_level, 1)
bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_3.ogg', 50 + danger_level, TRUE)
if(2)
bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_5.ogg', 50 + danger_level, 1)
bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_5.ogg', 50 + danger_level, TRUE)
if(3)
bloodsucker_minds.current.playsound_local(null, 'sound/effects/alert.ogg', 75, 1)
bloodsucker_minds.current.playsound_local(null, 'sound/effects/alert.ogg', 75, TRUE)
if(4)
bloodsucker_minds.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, 1)
bloodsucker_minds.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, TRUE)
if(5)
bloodsucker_minds.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, 1)
bloodsucker_minds.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, TRUE)
if(vassalwarn != "")
for(var/datum/mind/vassal_minds as anything in get_antag_minds(/datum/antagonist/vassal))
if(!istype(vassal_minds))
Expand All @@ -136,7 +136,7 @@
var/datum/antagonist/bloodsucker/bloodsuckerdatum = bloodsucker_minds.has_antag_datum(/datum/antagonist/bloodsucker)
if(!istype(bloodsuckerdatum))
continue
if(istype(bloodsucker_minds.current.loc, /obj/structure))
if(isstructure(bloodsucker_minds.current.loc))
if(istype(bloodsucker_minds.current.loc, /obj/structure/closet/crate/coffin)) // Coffins offer the BEST protection
SEND_SIGNAL(bloodsucker_minds.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/coffinsleep)
continue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@
var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(/datum/antagonist/bloodsucker)
if(bloodsuckerdatum)
. += ""
. += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER + (bloodsuckerdatum.humanity_lost * 10)]"
. += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT + (bloodsuckerdatum.humanity_lost * 10)]"
. += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER + bloodsuckerdatum.humanity_lost * 10]"
. += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT + bloodsuckerdatum.humanity_lost * 10]"
. += "Blood Drank: [bloodsuckerdatum.total_blood_drank]"
if(bloodsuckerdatum.current_task)
. += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]"
Expand Down
3 changes: 2 additions & 1 deletion code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,8 @@
if(bloodsucker)
if(ishuman(bloodsucker))
var/mob/living/carbon/human/user = bloodsucker
if(user.blood_volume < 560)
var/datum/antagonist/bloodsucker/bloodsuckerdatum = src.mind.has_antag_datum(/datum/antagonist/bloodsucker)
if(user.blood_volume < FRENZY_THRESHOLD_EXIT + bloodsuckerdatum.humanity_lost * 10)
user.blood_volume += 10
adjustFireLoss(2.5)
updatehealth() //3 minutes to die
Expand Down
2 changes: 0 additions & 2 deletions code/modules/antagonists/bloodsuckers/bloodsuckers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
var/humanity_lost = 0
///Have we been broken the Masquerade?
var/broke_masquerade = FALSE
///Blood required to enter Frenzy
var/frenzy_threshold = FRENZY_THRESHOLD_ENTER
///If we are currently in a Frenzy
var/frenzied = FALSE
///If we have a task assigned
Expand Down
25 changes: 13 additions & 12 deletions code/modules/antagonists/bloodsuckers/powers/gohome.dm
Original file line number Diff line number Diff line change
Expand Up @@ -57,31 +57,32 @@
if(GOHOME_FLICKER_TWO)
INVOKE_ASYNC(src, .proc/flicker_lights, 4, 60)
if(GOHOME_TELEPORT)
do_mob(user, user, 1 SECONDS, TRUE)
INVOKE_ASYNC(src, .proc/teleport_to_coffin, user)
teleporting_stage++

/datum/action/bloodsucker/gohome/ContinueActive(mob/living/user, mob/living/target)
. = ..()
if(!.)
return FALSE
if(!isturf(owner.loc))
if(!isturf(user.loc))
return FALSE
if(!bloodsuckerdatum_power.coffin)
to_chat(owner, span_warning("Your coffin has been destroyed! You no longer have a destination."))
to_chat(user, span_warning("Your coffin has been destroyed! You no longer have a destination."))
return FALSE
return TRUE

/datum/action/bloodsucker/gohome/proc/flicker_lights(flicker_range, beat_volume)
for(var/obj/machinery/light/nearby_lights in view(flicker_range, get_turf(owner)))
nearby_lights.flicker(5)
playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', beat_volume, 1)
playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', beat_volume, TRUE)

/datum/action/bloodsucker/gohome/proc/teleport_to_coffin(mob/living/carbon/user)
var/drop_item = FALSE
var/turf/current_turf = get_turf(owner)
var/turf/current_turf = get_turf(user)
// If we aren't in the dark, anyone watching us will cause us to drop out stuff
if(current_turf && current_turf.lighting_object && current_turf.get_lumcount() >= 0.2)
for(var/mob/living/watchers in viewers(world.view, get_turf(owner)) - owner)
for(var/mob/living/watchers in viewers(world.view, get_turf(user)) - user)
if(!watchers.client)
continue
if(watchers.has_unlimited_silicon_privilege)
Expand All @@ -99,10 +100,10 @@
var/obj/item/legcuffs = user.legcuffed
user.dropItemToGround(legcuffs)
if(drop_item)
for(var/obj/item/literally_everything in owner)
owner.dropItemToGround(literally_everything, TRUE)
for(var/obj/item/literally_everything in user)
user.dropItemToGround(literally_everything, TRUE)

playsound(current_turf, 'sound/magic/summon_karp.ogg', 60, 1)
playsound(current_turf, 'sound/magic/summon_karp.ogg', 60, TRUE)
var/datum/effect_system/steam_spread/bloodsucker/puff = new /datum/effect_system/steam_spread/bloodsucker()
puff.set_up(3, 0, current_turf)
puff.start()
Expand All @@ -112,13 +113,13 @@
new new_mob(current_turf)
/// TELEPORT: Move to Coffin & Close it!
user.set_resting(TRUE, TRUE, FALSE)
do_teleport(owner, bloodsuckerdatum_power.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM)
do_teleport(user, bloodsuckerdatum_power.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM)
user.Stun(3 SECONDS, TRUE)
// Puts me inside.
if(!bloodsuckerdatum_power.coffin.insert(owner))
if(!bloodsuckerdatum_power.coffin.close(user))
// CLOSE LID: If fail, force me in.
bloodsuckerdatum_power.coffin.close(owner)
playsound(bloodsuckerdatum_power.coffin.loc, bloodsuckerdatum_power.coffin.close_sound, 15, 1, -3)
bloodsuckerdatum_power.coffin.insert(user)
playsound(bloodsuckerdatum_power.coffin.loc, bloodsuckerdatum_power.coffin.close_sound, 15, TRUE, -3)

DeactivatePower()

Expand Down
16 changes: 8 additions & 8 deletions code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@
if(!istype(closet))
return FALSE
closet.visible_message(
span_warning("closet] tears apart as [user] bashes it open from within!"),
span_warning("closet] tears apart as you bash it open from within!"),
span_warning("[closet] tears apart as [user] bashes it open from within!"),
span_warning("[closet] tears apart as you bash it open from within!"),
)
to_chat(user, span_warning("We bash [closet] wide open!"))
addtimer(CALLBACK(src, .proc/break_closet, user, closet), 1)
Expand Down Expand Up @@ -80,7 +80,7 @@

// Did we end up using our ability? If so, play the sound effect and return TRUE
if(used)
playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, 1, -1)
playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, TRUE, -1)
return used

// This is its own proc because its done twice, to repeat code copypaste.
Expand All @@ -96,7 +96,7 @@
return FALSE
var/mob/pulled_mob = owner.pulledby
var/pull_power = pulled_mob.grab_state
playsound(get_turf(pulled_mob), 'sound/effects/woodhit.ogg', 75, 1, -1)
playsound(get_turf(pulled_mob), 'sound/effects/woodhit.ogg', 75, TRUE, -1)
// Knock Down (if Living)
if(isliving(pulled_mob))
var/mob/living/hit_target = pulled_mob
Expand Down Expand Up @@ -133,7 +133,7 @@
target.Knockdown(min(5, rand(10, 10 * powerlevel)))
// Attack!
to_chat(owner, span_warning("You punch [target]!"))
playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1)
playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, TRUE, -1)
user.do_attack_animation(target, ATTACK_EFFECT_SMASH)
var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(target.zone_selected))
target.apply_damage(hitStrength, BRUTE, affecting)
Expand All @@ -153,19 +153,19 @@
return FALSE
target_closet.visible_message(span_danger("[target_closet] breaks open as [user] bashes it!"))
addtimer(CALLBACK(src, .proc/break_closet, user, target_closet), 1)
playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, 1, -1)
playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, TRUE, -1)
// Target Type: Door
else if(istype(target_atom, /obj/machinery/door) && level_current >= 4)
var/obj/machinery/door/target_airlock = target_atom
playsound(get_turf(user), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1)
playsound(get_turf(user), 'sound/machines/airlock_alien_prying.ogg', 40, TRUE, -1)
to_chat(owner, span_warning("You prepare to tear open [target_airlock]..."))
if(!do_mob(user, target_airlock, 2.5 SECONDS))
return FALSE
if(target_airlock.Adjacent(user))
target_airlock.visible_message(span_danger("[target_airlock] breaks open as [user] bashes it!"))
user.Stun(10)
user.do_attack_animation(target_airlock, ATTACK_EFFECT_SMASH)
playsound(get_turf(target_airlock), 'sound/effects/bang.ogg', 30, 1, -1)
playsound(get_turf(target_airlock), 'sound/effects/bang.ogg', 30, TRUE, -1)
target_airlock.open(2) // open(2) is like a crowbar or jaws of life.

/datum/action/bloodsucker/targeted/brawn/CheckValidTarget(atom/target_atom)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
to_chat(owner.current, span_warning("You hit the maximum amount of lost Humanity, you are far from Human."))
return
humanity_lost += value
to_chat(owner.current, span_warning("You feel as if you lost some of your humanity, you will now enter Frenzy at [FRENZY_THRESHOLD_ENTER + (humanity_lost * 10)] Blood."))
to_chat(owner.current, span_warning("You feel as if you lost some of your humanity, you will now enter Frenzy at [FRENZY_THRESHOLD_ENTER + humanity_lost * 10] Blood."))

/// mult: SILENT feed is 1/3 the amount
/datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1, power_level)
Expand Down Expand Up @@ -236,7 +236,7 @@
// BLOOD_VOLUME_GOOD: [336] - Pale
// handled in bloodsucker_integration.dm
// BLOOD_VOLUME_EXIT: [560] - Exit Frenzy (If in one) This is high because we want enough to kill the poor soul they feed off of.
if(owner.current.blood_volume >= FRENZY_THRESHOLD_EXIT && frenzied)
if(owner.current.blood_volume >= (FRENZY_THRESHOLD_EXIT + humanity_lost * 10) && frenzied)
owner.current.remove_status_effect(STATUS_EFFECT_FRENZY)
// BLOOD_VOLUME_BAD: [224] - Jitter
if(owner.current.blood_volume < BLOOD_VOLUME_BAD(owner.current) && prob(0.5) && !HAS_TRAIT(owner.current, TRAIT_NODEATH) && !HAS_TRAIT(owner.current, TRAIT_MASQUERADE))
Expand All @@ -246,7 +246,7 @@
owner.current.blur_eyes(8 - 8 * (owner.current.blood_volume / BLOOD_VOLUME_BAD(owner.current)))

// The more blood, the better the Regeneration, get too low blood, and you enter Frenzy.
if(owner.current.blood_volume < (FRENZY_THRESHOLD_ENTER + (humanity_lost * 10)) && !frenzied)
if(owner.current.blood_volume < (FRENZY_THRESHOLD_ENTER + humanity_lost * 10) && !frenzied)
if(!iscarbon(owner.current))
return
if(owner.current.stat == DEAD)
Expand Down Expand Up @@ -276,18 +276,18 @@
owner.current.apply_status_effect(STATUS_EFFECT_FRENZY)
return
if(2 to INFINITY)
AddBloodVolume(560 - user.blood_volume) //so it doesn't happen multiple times and refills your blood when you get out again
AddBloodVolume(FRENZY_THRESHOLD_EXIT + humanity_lost * 10 - user.blood_volume) //so it doesn't happen multiple times and refills your blood when you get out again
if(!do_mob(user, user, 2 SECONDS, TRUE))
return
playsound(user.loc, 'sound/weapons/slash.ogg', 25, 1)
playsound(user.loc, 'sound/weapons/slash.ogg', 25, TRUE)
to_chat(user, span_warning("<i><b>You skin rips and tears.</b></i>"))
if(!do_mob(user, user, 1 SECONDS, TRUE))
return
playsound(user.loc, 'sound/weapons/slashmiss.ogg', 25, 1)
playsound(user.loc, 'sound/weapons/slashmiss.ogg', 25, TRUE)
to_chat(user, span_warning("<i><b>You heart pumps blackened blood into your veins as your skin turns into fur.</b></i>"))
if(!do_mob(user, user, 1 SECONDS, TRUE))
return
playsound(user.loc, 'sound/weapons/slice.ogg', 25, 1)
playsound(user.loc, 'sound/weapons/slice.ogg', 25, TRUE)
to_chat(user, span_boldnotice("<i><b><FONT size = 3>YOU HAVE AWOKEN.</b></i>"))
var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww
if(!ww || ww.stat == DEAD)
Expand Down