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