diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm
index 8f2cfc88a03..5a104fbfb53 100644
--- a/code/modules/mob/living/bloodcrawl.dm
+++ b/code/modules/mob/living/bloodcrawl.dm
@@ -3,6 +3,20 @@
#define BLOODCRAWL_EAT 2
/mob/living/proc/phaseout(var/obj/effect/decal/cleanable/B)
+
+ if(iscarbon(src))
+ var/mob/living/carbon/C = src
+ if(C.l_hand || C.r_hand)
+ C << "You may not hold items while blood crawling!"
+ return 0
+ var/obj/item/weapon/bloodcrawl/B1 = new(C)
+ var/obj/item/weapon/bloodcrawl/B2 = new(C)
+ B1.icon_state = "bloodhand_left"
+ B2.icon_state = "bloodhand_right"
+ C.put_in_hands(B1)
+ C.put_in_hands(B2)
+ C.regenerate_icons()
+
var/mob/living/kidnapped = null
var/turf/mobloc = get_turf(src.loc)
var/turf/bloodloc = get_turf(B.loc)
@@ -29,10 +43,11 @@
if(istype(src.pulling, /mob/living/))
var/mob/living/victim = src.pulling
if(victim.stat == CONSCIOUS)
- src.visible_message("[victim] kicks free of \the [src] at the last second!")
+ src.visible_message("[victim] kicks free of [B] just before entering it!")
else
victim.loc = holder///holder
- src.visible_message("\The [src] drags [victim] into [B]!")
+ victim.emote("scream")
+ src.visible_message("[src] drags [victim] into [B]!")
kidnapped = victim
flick("jaunt",animation)
src.loc = holder
@@ -44,32 +59,44 @@
sleep(6)
if (animation)
qdel(animation)
- playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
- sleep(30)
- playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
- sleep(30)
- playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
- sleep(30)
- src << "You devour [kidnapped]. Your health is fully restored."
- src.adjustBruteLoss(-1000)
- src.adjustFireLoss(-1000)
- src.adjustOxyLoss(-1000)
- src.adjustToxLoss(-1000)
- kidnapped.ghostize()
- qdel(kidnapped)
- if (istype(src, /mob/living/simple_animal/slaughter)) //rason, do not want humans to get this
+ for(var/i = 3; i > 0; i--)
+ playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
+ sleep(30)
+ if (kidnapped)
+ src << "You devour [kidnapped]. Your health is fully restored."
+ src.adjustBruteLoss(-1000)
+ src.adjustFireLoss(-1000)
+ src.adjustOxyLoss(-1000)
+ src.adjustToxLoss(-1000)
- var/mob/living/simple_animal/slaughter/demon = src
- demon.devoured++
+ if (istype(src, /mob/living/simple_animal/slaughter)) //rason, do not want humans to get this
+
+ var/mob/living/simple_animal/slaughter/demon = src
+ demon.devoured++
+ kidnapped << "You feel teeth sink into your flesh, and the--"
+ kidnapped.adjustBruteLoss(1000)
+ kidnapped.forceMove(src)
+ demon.consumed_mobs.Add(kidnapped)
+ else
+ kidnapped.ghostize()
+ qdel(kidnapped)
+ else
+ src << "You happily devour... nothing? Your meal vanished at some point!"
else
sleep(6)
if (animation)
qdel(animation)
src.notransform = 0
+/obj/item/weapon/bloodcrawl
+ name = "blood crawl"
+ desc = "You are unable to hold anything while in this form."
+ icon = 'icons/effects/blood.dmi'
+ flags = NODROP
+
/mob/living/proc/phasein(var/obj/effect/decal/cleanable/B)
if(src.notransform)
- src << "Finish eating first!"
+ src << "Finish eating first!"
else
var/atom/movable/overlay/animation = new /atom/movable/overlay( B.loc )
animation.name = "odd blood"
@@ -80,19 +107,34 @@
animation.layer = 5
animation.master = B.loc
animation.dir = src.dir
- flick("jauntup",animation)
- src.loc = B.loc
+ B.visible_message("[B] starts to bubble...")
+ if(!do_after(src, 20, target = B))
+ return
+ if(!B)
+ return
+ src.forceMove(B)
src.client.eye = src
- if (prob(25))
+ if (prob(25) && istype(src, /mob/living/simple_animal/slaughter))
var/list/voice = list('sound/hallucinations/behind_you1.ogg','sound/hallucinations/im_here1.ogg','sound/hallucinations/turn_around1.ogg','sound/hallucinations/i_see_you1.ogg')
playsound(get_turf(src), pick(voice),50, 1, -1)
src.visible_message("\The [src] rises out of \the [B]!")
playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1)
+ flick("jauntup",animation)
qdel(src.holder)
src.holder = null
- sleep(6)
+ if(iscarbon(src))
+ var/mob/living/carbon/C = src
+ for(var/obj/item/weapon/bloodcrawl/BC in C)
+ C.flags = null
+ C.unEquip(BC)
+ qdel(BC)
+ var/oldcolor = src.color
+ src.color = B.color
+ sleep(6)//wait for animation to finish
if(animation)
qdel(animation)
+ spawn(30)
+ src.color = oldcolor
/obj/effect/decal/cleanable/blood/CtrlClick(mob/living/user)
..()
diff --git a/code/modules/mob/living/simple_animal/slaughter/slaughter.dm b/code/modules/mob/living/simple_animal/slaughter/slaughter.dm
index a54b0e0e1e2..c1ad9d79f67 100644
--- a/code/modules/mob/living/simple_animal/slaughter/slaughter.dm
+++ b/code/modules/mob/living/simple_animal/slaughter/slaughter.dm
@@ -1,9 +1,9 @@
//////////////////The Monster
/mob/living/simple_animal/slaughter
- name = "Slaughter Demon"
- real_name = "Slaughter Demon"
- desc = "You should run."
+ name = "slaughter demon"
+ real_name = "slaughter demon"
+ desc = "A large, menacing creature covered in armored black scales. You should run."
speak = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")
speak_emote = list("gurgles")
emote_hear = list("wails","screeches")
@@ -43,6 +43,7 @@
var/devoured = 0
+ var/list/consumed_mobs = list()
var/list/nearby_mortals = list()
var/cooldown = 0
@@ -61,6 +62,7 @@
src.mind.current.verbs += /mob/living/simple_animal/slaughter/proc/slaughterWhisper
src << src.playstyle_string
src << "You are not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest."
+ src << 'sound/misc/demon_dies.ogg'
if(!(vialspawned))
var/datum/objective/slaughter/objective = new
var/datum/objective/demonFluff/fluffObjective = new
@@ -83,12 +85,19 @@
/mob/living/simple_animal/slaughter/Die()
..()
+ var/obj/effect/decal/cleanable/blood/innards = new (get_turf(src))
+ innards.icon = 'icons/obj/surgery.dmi'
+ innards.icon_state = "innards"
+ innards.name = "pile of viscera"
+ innards.desc = "A repulsive pile of guts and gore."
new /obj/effect/decal/cleanable/blood (src.loc)
new /obj/effect/gibspawner/generic(get_turf(src))
new /obj/effect/gibspawner/generic(get_turf(src))
+ new /obj/item/weapon/demonheart(src.loc)
playsound(get_turf(src),'sound/misc/demon_dies.ogg', 200, 1)
- new /obj/item/weapon/demonheart (src.loc)
- visible_message("The [src] screams in anger as its form collapes into a pool of viscera.")
+ visible_message("[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.")
+ for(var/mob/living/M in consumed_mobs)
+ M.forceMove(get_turf(src))
ghostize()
qdel(src)
@@ -97,7 +106,7 @@
/mob/living/simple_animal/slaughter/phasein()
..()
speed = 0
- boost = world.time + 30
+ boost = world.time + 60
////////////////////The Powers
@@ -128,23 +137,28 @@
//////////The Loot
+//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
/obj/item/weapon/demonheart
- name = "demon's heart"
- desc = "It's still faintly beating with rage"
+ name = "demon heart"
+ desc = "Still it beats furiously, emanating an aura of utter hate."
icon = 'icons/obj/surgery.dmi'
- icon_state = "heart-on"
+ icon_state = "demon_heart"
origin_tech = "combat=5;biotech=8"
/obj/item/weapon/demonheart/attack_self(mob/living/user)
- visible_message("[user] feasts upon the [src].")
+ user.visible_message("[user] raises [src] to their mouth and tears into it with their teeth!", \
+ "An unnatural hunger consumes you. You raise [src] to your mouth and devour it!")
+ playsound(user, 'sound/misc/Demon_consume.ogg', 50, 1)
if(user.bloodcrawl == 0)
- user << "You absorb some of the demon's power!"
+ user.visible_message("[user]'s eyes flare a deep crimson!", \
+ "You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!")
user.bloodcrawl = BLOODCRAWL
else if(user.bloodcrawl == 1)
- user << "You absorb some of the demon's power!"
user << "You feel diffr- CONSUME THEM! "
user.bloodcrawl = BLOODCRAWL_EAT
+ else
+ user <<"...and you don't feel any different."
qdel(src)
diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi
index c32e3c508a4..1c971f8d3f4 100644
Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 9688bbdccc5..011fb04b816 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ