diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index 175e8ad31e..e8eb95aa7b 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -1,47 +1,190 @@
-/datum/round_event_control/slaughter
- name = "Spawn Slaughter Demon"
- typepath = /datum/round_event/ghost_role/slaughter
- weight = 1 //Very rare
- max_occurrences = 1
- earliest_start = 36000 //1 hour
- min_players = 20
+//////////////////The Monster
+
+/mob/living/simple_animal/slaughter
+ name = "slaughter demon"
+ real_name = "slaughter demon"
+ desc = "A large, menacing creature covered in armored black scales."
+ speak_emote = list("gurgles")
+ emote_hear = list("wails","screeches")
+ response_help = "thinks better of touching"
+ response_disarm = "flails at"
+ response_harm = "punches"
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "daemon"
+ icon_living = "daemon"
+ speed = 1
+ a_intent = INTENT_HARM
+ stop_automated_movement = 1
+ status_flags = CANPUSH
+ attack_sound = 'sound/magic/demon_attack1.ogg'
+ var/feast_sound = 'sound/magic/demon_consume.ogg'
+ death_sound = 'sound/magic/demon_dies.ogg'
+ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
+ minbodytemp = 0
+ maxbodytemp = INFINITY
+ faction = list("slaughter")
+ attacktext = "wildly tears into"
+ maxHealth = 200
+ health = 200
+ healable = 0
+ environment_smash = ENVIRONMENT_SMASH_STRUCTURES
+ obj_damage = 50
+ melee_damage_lower = 30
+ melee_damage_upper = 30
+ see_in_dark = 8
+ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
+ var/boost = 0
+ bloodcrawl = BLOODCRAWL_EAT
+ var/playstyle_string = "You are a slaughter demon, 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. "
+
+ loot = list(/obj/effect/decal/cleanable/blood, \
+ /obj/effect/decal/cleanable/blood/innards, \
+ /obj/item/organ/heart/demon)
+ del_on_death = 1
+ deathmessage = "screams in anger as it collapses into a puddle of viscera!"
+
+/mob/living/simple_animal/slaughter/Initialize()
+ ..()
+ var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
+ AddSpell(bloodspell)
+ if(istype(loc, /obj/effect/dummy/slaughter))
+ bloodspell.phased = 1
+
+/mob/living/simple_animal/slaughter/Life()
+ ..()
+ if(boost[user] raises [src] to their mouth and tears into it with their teeth!", \
+ "An unnatural hunger consumes you. You raise [src] your mouth and devour it!")
+ playsound(user, 'sound/magic/demon_consume.ogg', 50, 1)
+ for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list)
+ if(knownspell.type == /obj/effect/proc_holder/spell/bloodcrawl)
+ to_chat(user, "...and you don't feel any different.")
+ qdel(src)
+ return
+ 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.temporarilyRemoveItemFromInventory(src, TRUE)
+ src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E
- var/mob/dead/selected = pick_n_take(candidates)
+/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0)
+ ..()
+ if(M.mind)
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/bloodcrawl(null))
- var/datum/mind/player_mind = new /datum/mind(selected.key)
- player_mind.active = 1
+/obj/item/organ/heart/demon/Remove(mob/living/carbon/M, special = 0)
+ ..()
+ if(M.mind)
+ M.mind.RemoveSpell(/obj/effect/proc_holder/spell/bloodcrawl)
- var/list/spawn_locs = list()
- for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
- if(isturf(L.loc))
- spawn_locs += L.loc
+/obj/item/organ/heart/demon/Stop()
+ return 0 // Always beating.
- if(!spawn_locs)
- message_admins("No valid spawn locations found, aborting...")
- return MAP_ERROR
+/mob/living/simple_animal/slaughter/laughter
+ // The laughter demon! It's everyone's best friend! It just wants to hug
+ // them so much, it wants to hug everyone at once!
+ name = "laughter demon"
+ real_name = "laughter demon"
+ desc = "A large, adorable creature covered in armor with pink bows."
+ speak_emote = list("giggles","titters","chuckles")
+ emote_hear = list("guffaws","laughs")
+ response_help = "hugs"
+ attacktext = "wildly tickles"
- var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter((pick(spawn_locs)))
- var/mob/living/simple_animal/slaughter/S = new (holder)
- S.holder = holder
- player_mind.transfer_to(S)
- player_mind.assigned_role = "Slaughter Demon"
- player_mind.special_role = "Slaughter Demon"
- player_mind.add_antag_datum(/datum/antagonist/slaughter)
- to_chat(S, S.playstyle_string)
- to_chat(S, "You are currently not currently in the same plane of existence as the station. Blood Crawl near a blood pool to manifest.")
- SEND_SOUND(S, 'sound/magic/demon_dies.ogg')
- message_admins("[key_name_admin(S)] has been made into a slaughter demon by an event.")
- log_game("[key_name(S)] was spawned as a slaughter demon by an event.")
- spawned_mobs += S
- return SUCCESSFUL_SPAWN
+ attack_sound = 'sound/items/bikehorn.ogg'
+ feast_sound = 'sound/spookoween/scary_horn2.ogg'
+ death_sound = 'sound/misc/sadtrombone.ogg'
+
+ icon_state = "bowmon"
+ icon_living = "bowmon"
+ deathmessage = "fades out, as all of its friends are released from its \
+ 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 = "You are a laughter \
+ demon, a wonderful creature from another realm. You have a single \
+ desire: To hug and tickle.
\
+ 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 hug them 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.
\
+ What makes you a little sad is that people seem to die when you tickle \
+ them; but don't worry! When you die, everyone you hugged will be \
+ released and fully healed, because in the end it's just a jape, \
+ sibling!"
+
+/mob/living/simple_animal/slaughter/laughter/Destroy()
+ release_friends()
+ . = ..()
+
+/mob/living/simple_animal/slaughter/laughter/ex_act(severity)
+ switch(severity)
+ if(1)
+ death()
+ if(2)
+ adjustBruteLoss(60)
+ if(3)
+ 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, "You leave [src]'s warm embrace, and feel ready to take on the world.")
+
+/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.")