Skip to content

Commit

Permalink
Various Slaughter Demon Nerfs (#11679)
Browse files Browse the repository at this point in the history
* bloodcrawl cooldown

* Maybe we shouldn't make them husked

* Reduce bloodcrawl cooldown to 15 seconds

* changes

* this
  • Loading branch information
mystery3525 authored Nov 15, 2024
1 parent 17747c0 commit 9e82fcb
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 46 deletions.
72 changes: 39 additions & 33 deletions code/modules/antagonists/slaughter/slaughter.dm
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@
var/playstyle_string = "<span class='big bold'>You are a slaughter demon,</span><B> a terrible creature from another realm. You have a single desire: To kill. \
You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and disappearing from the station at will. \
Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \
You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. </B>"
You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. \
<span class='warning'>You cannot re-enter the living world until you've rested for five seconds in the sea of blood.</span> \ </B>"

mobchatspan = "cultmobsay"

Expand All @@ -53,13 +54,36 @@
deathmessage = "screams in anger as it collapses into a puddle of viscera!"
discovery_points = 3000

// Keep the people we hug!
var/list/consumed_mobs = list()

var/revive_eject = FALSE

/mob/living/simple_animal/slaughter/Initialize(mapload)
. = ..()
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
AddSpell(bloodspell)
if(istype(loc, /obj/effect/dummy/phased_mob/slaughter))
bloodspell.phased = TRUE

/mob/living/simple_animal/slaughter/Destroy()
var/turf/cur_loc = get_turf(src)
playsound(cur_loc, feast_sound, 50, 1, -1)
for(var/mob/living/stored_mob in consumed_mobs)
stored_mob.forceMove(cur_loc)

if(!revive_eject)
continue
if(!stored_mob.revive(full_heal = TRUE, admin_revive = TRUE))
continue
stored_mob.grab_ghost(force = TRUE)
to_chat(stored_mob, "<span class='clowntext'>You leave [src]'s warm embrace, and feel ready to take on the world.</span>")

consumed_mobs.Cut()
consumed_mobs = null

return ..()

/obj/effect/decal/cleanable/blood/innards
name = "pile of viscera"
desc = "A repulsive pile of guts and gore."
Expand All @@ -73,6 +97,18 @@
add_movespeed_modifier(/datum/movespeed_modifier/slaughter)
addtimer(CALLBACK(src, PROC_REF(remove_movespeed_modifier), /datum/movespeed_modifier/slaughter, TRUE), 6 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)

/mob/living/simple_animal/slaughter/bloodcrawl_swallow(var/mob/living/victim)
if(consumed_mobs)
// Keep their corpse so rescue is possible
consumed_mobs += victim
else
// Be safe and just eject the corpse
victim.forceMove(get_turf(victim))
victim.exit_blood_effect()
victim.visible_message("[victim] falls out of the air, covered in blood, looking highly confused. And dead.")


/mob/living/simple_animal/slaughter/proc/release_friends()

//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
/obj/item/organ/heart/demon
Expand Down Expand Up @@ -136,14 +172,12 @@
prison of hugs."
loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"})

// Keep the people we hug!
var/list/consumed_mobs = list()

playstyle_string = "<span class='big bold'>You are a laughter \
demon,</span><B> a wonderful creature from another realm. You have a single \
desire: <span class='clowntext'>To hug and tickle.</span><BR>\
You may use the \"Blood Crawl\" ability near blood pools to travel \
through them, appearing and disappearing from the station at will. \
<span class='warning'>You cannot re-enter the living world until you've rested for five seconds in the sea of blood.</span> \
Pulling a dead or unconscious mob while you enter a pool will pull \
them in with you, allowing you to hug them and regain your health.<BR> \
You move quickly upon leaving a pool of blood, but the material world \
Expand All @@ -153,9 +187,7 @@
released and fully healed, because in the end it's just a jape, \
sibling!</B>"

/mob/living/simple_animal/slaughter/laughter/Destroy()
release_friends()
. = ..()
revive_eject = TRUE

/mob/living/simple_animal/slaughter/laughter/ex_act(severity)
switch(severity)
Expand All @@ -166,29 +198,3 @@
adjustBruteLoss(60)
if(EXPLODE_LIGHT)
adjustBruteLoss(30)

/mob/living/simple_animal/slaughter/laughter/proc/release_friends()
if(!consumed_mobs)
return

for(var/mob/living/M in consumed_mobs)
if(!M)
continue
var/turf/T = find_safe_turf()
if(!T)
T = get_turf(src)
M.forceMove(T)
if(M.revive(full_heal = TRUE, admin_revive = TRUE))
M.grab_ghost(force = TRUE)
playsound(T, feast_sound, 50, 1, -1)
to_chat(M, "<span class='clowntext'>You leave [src]'s warm embrace, and feel ready to take on the world.</span>")

/mob/living/simple_animal/slaughter/laughter/bloodcrawl_swallow(var/mob/living/victim)
if(consumed_mobs)
// Keep their corpse so rescue is possible
consumed_mobs += victim
else
// Be safe and just eject the corpse
victim.forceMove(get_turf(victim))
victim.exit_blood_effect()
victim.visible_message("[victim] falls out of the air, covered in blood, looking highly confused. And dead.")
5 changes: 2 additions & 3 deletions code/modules/mob/living/bloodcrawl.dm
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
return

// if the thing we're pulling isn't alive
if (!isliving(pullee))
if (!isliving(pullee) || ismegafauna(pullee))
return

var/mob/living/victim = pullee
Expand Down Expand Up @@ -126,8 +126,7 @@
to_chat(src, "<span class='danger'>You devour [victim]. Your health is fully restored.</span>")
src.revive(full_heal = 1)

// No defib possible after laughter
victim.apply_damage(1000, BRUTE)
victim.apply_damage(200, BRUTE)
if(victim.stat != DEAD)
victim.investigate_log("has been killed by being consumed by a slaugter demon.", INVESTIGATE_DEATHS)
victim.death()
Expand Down
27 changes: 17 additions & 10 deletions code/modules/spells/spell_types/bloodcrawl.dm
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
action_icon_state = "bloodcrawl"
action_background_icon_state = "bg_demon"
var/phased = FALSE
COOLDOWN_DECLARE(resurface_cooldown)

/obj/effect/proc_holder/spell/bloodcrawl/choose_targets(mob/user = usr)
for(var/obj/effect/decal/cleanable/target in view(range, get_turf(user)))
Expand All @@ -23,14 +24,20 @@
to_chat(user, "<span class='warning'>There must be a nearby source of blood!</span>")

/obj/effect/proc_holder/spell/bloodcrawl/perform(obj/effect/decal/cleanable/target, recharge = 1, mob/living/user = usr)
if(istype(user))
if(phased)
if(user.phasein(target))
phased = FALSE
else
if(user.phaseout(target))
phased = TRUE
start_recharge()
if(!istype(user))
revert_cast()
to_chat(user, "<span class='warning'>You are unable to blood crawl!</span>")
return
revert_cast()
to_chat(user, "<span class='warning'>You are unable to blood crawl!</span>")

if(phased)
if(!COOLDOWN_FINISHED(src, resurface_cooldown))
to_chat(user, "<span class='warning'>You need to wait until you can resurface!</span>")
return
if(user.phasein(target))
phased = FALSE
else
if(user.phaseout(target))
phased = TRUE
COOLDOWN_START(src, resurface_cooldown, 5 SECONDS)
start_recharge()

0 comments on commit 9e82fcb

Please sign in to comment.