diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index e8eb95aa7b..175e8ad31e 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -1,190 +1,47 @@
-//////////////////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
+/datum/round_event/ghost_role/slaughter/spawn_role()
+ var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN)
+ if(!candidates.len)
+ return NOT_ENOUGH_PLAYERS
-/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/mob/dead/selected = pick_n_take(candidates)
-/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/datum/mind/player_mind = new /datum/mind(selected.key)
+ player_mind.active = 1
-/obj/item/organ/heart/demon/Stop()
- return 0 // Always beating.
+ var/list/spawn_locs = list()
+ for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
+ if(isturf(L.loc))
+ spawn_locs += L.loc
-/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"
+ if(!spawn_locs)
+ message_admins("No valid spawn locations found, aborting...")
+ return MAP_ERROR
- 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.")
+ 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