diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index 39504d384563..954d2ede66b7 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -270,7 +270,6 @@
new /obj/effect/dummy/phased_mob(T, spawned)
spawned.key = C.key
- spawned.generate_antagonist_status()
/obj/item/antag_spawner/slaughter_demon/laughter
name = "vial of tickles"
diff --git a/code/modules/antagonists/wizard/slaughter_antag.dm b/code/modules/antagonists/wizard/slaughter_antag.dm
index c9aea4478c39..484db3d14c86 100644
--- a/code/modules/antagonists/wizard/slaughter_antag.dm
+++ b/code/modules/antagonists/wizard/slaughter_antag.dm
@@ -1,5 +1,6 @@
/datum/antagonist/slaughter
name = "\improper Slaughter Demon"
+ roundend_category = "demons"
show_name_in_check_antagonists = TRUE
ui_name = "AntagInfoDemon"
job_rank = ROLE_ALIEN
@@ -38,6 +39,30 @@
data["explain_attack"] = TRUE
return data
+/datum/antagonist/slaughter/roundend_report()
+ var/list/report = list()
+
+ if(!owner)
+ CRASH("Antagonist datum without owner")
+
+ report += printplayer(owner)
+
+ if(objectives.len)
+ report += printobjectives(objectives)
+
+ var/datum/action/cooldown/spell/jaunt/bloodcrawl/slaughter_demon/consume_ability = locate() in owner.current?.actions
+ if(consume_ability?.consume_count > 0)
+ report += span_greentext("The [name] consumed a total of [consume_ability.consume_count] bodies!")
+ else
+ report += span_redtext("The [name] did not consume anyone! Shame!!")
+
+ if(owner.current?.stat != DEAD)
+ report += "The [name] survived!"
+ else
+ report += "The [name] was vanquished!"
+
+ return report.Join("
")
+
/datum/antagonist/slaughter/laughter
name = "Laughter demon"
objective_verb = "Hug and Tickle"
diff --git a/code/modules/events/ghost_role/slaughter_event.dm b/code/modules/events/ghost_role/slaughter_event.dm
index 48f2955cd705..e9d96d3a349b 100644
--- a/code/modules/events/ghost_role/slaughter_event.dm
+++ b/code/modules/events/ghost_role/slaughter_event.dm
@@ -32,7 +32,6 @@
new /obj/effect/dummy/phased_mob(spawn_location, spawned)
player_mind.transfer_to(spawned)
- spawned.generate_antagonist_status()
message_admins("[ADMIN_LOOKUPFLW(spawned)] has been made into a slaughter demon by an event.")
spawned.log_message("was spawned as a slaughter demon by an event.", LOG_GAME)
diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon.dm b/code/modules/mob/living/basic/space_fauna/demon/demon.dm
index b2956424aa20..3d720db90c9d 100644
--- a/code/modules/mob/living/basic/space_fauna/demon/demon.dm
+++ b/code/modules/mob/living/basic/space_fauna/demon/demon.dm
@@ -60,8 +60,9 @@
return list()
/// Proc that just sets up the demon's antagonism status.
-/mob/living/basic/demon/proc/generate_antagonist_status()
- if(isnull(antag_type))
+/mob/living/basic/demon/mind_initialize()
+ . = ..()
+ if(isnull(antag_type) || mind.has_antag_datum(antag_type))
return // we weren't built for this proc to run
mind.set_assigned_role(SSjob.GetJobType(/datum/job/slaughter_demon))
diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm
index 4d606df4a54e..134883c08864 100644
--- a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm
+++ b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm
@@ -67,7 +67,7 @@
/// Performs the classic slaughter demon bodyslam on the attack_target. Yeets them a screen away.
/mob/living/basic/demon/slaughter/proc/bodyslam(atom/attack_target)
- if(!isliving(attack_target))
+ if(!isliving(attack_target) || attack_target == src)
return
if(!Adjacent(attack_target))
diff --git a/code/modules/spells/spell_types/jaunt/bloodcrawl.dm b/code/modules/spells/spell_types/jaunt/bloodcrawl.dm
index 0afb21953152..e8bf2bdae1b4 100644
--- a/code/modules/spells/spell_types/jaunt/bloodcrawl.dm
+++ b/code/modules/spells/spell_types/jaunt/bloodcrawl.dm
@@ -162,6 +162,8 @@
they will be consumed by you, fully healing you."
/// The sound played when someone's consumed.
var/consume_sound = 'sound/magic/demon_consume.ogg'
+ /// consume count (statistics and stuff)
+ var/consume_count = 0
/datum/action/cooldown/spell/jaunt/bloodcrawl/slaughter_demon/try_enter_jaunt(obj/effect/decal/cleanable/blood, mob/living/jaunter)
// Save this before the actual jaunt
@@ -228,6 +230,7 @@
victim.investigate_log("has been killed by being consumed by a slaugter demon.", INVESTIGATE_DEATHS)
victim.death()
on_victim_consumed(victim, jaunter)
+ consume_count++
/**
* Called when a victim starts to be consumed.