diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index fcbdbdbcc38..35c9e3be621 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -373,6 +373,9 @@
///from base of mob/living/set_buckled(): (new_buckled)
#define COMSIG_LIVING_SET_BUCKLED "living_set_buckled"
+///Sent when bloodcrawl ends in mob/living/phasein(): (phasein_decal)
+#define COMSIG_LIVING_AFTERPHASEIN "living_phasein"
+
///sent from borg recharge stations: (amount, repairs)
#define COMSIG_PROCESS_BORGCHARGER_OCCUPANT "living_charge"
///sent when a mob/login() finishes: (client)
@@ -598,6 +601,7 @@
///sent to targets during the process_hit proc of projectiles
#define COMSIG_PELLET_CLOUD_INIT "pellet_cloud_init"
+
// /obj/mecha signals
///sent from mecha action buttons to the mecha they're linked to
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index 0c5b97fb28d..1adb5840915 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -249,7 +249,6 @@
/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, kind = "", datum/mind/user)
var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter(T)
var/mob/living/simple_animal/hostile/imp/slaughter/S = new demon_type(holder)
- S.holder = holder
S.key = C.key
S.mind.assigned_role = S.name
S.mind.special_role = S.name
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index 4242346abfd..68b992f6e7d 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -39,13 +39,15 @@
/// How much our wound_bonus hitstreak bonus caps at (peak demonry)
var/wound_bonus_hitstreak_max = 12
-/mob/living/simple_animal/hostile/imp/slaughter/Initialize()
+/mob/living/simple_animal/hostile/imp/slaughter/Initialize(mapload, obj/effect/dummy/phased_mob/slaughter/bloodpool)//Bloodpool is the blood pool we spawn in
..()
ADD_TRAIT(src, TRAIT_BLOODCRAWL_EAT, "innate")
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
AddSpell(bloodspell)
if(istype(loc, /obj/effect/dummy/phased_mob/slaughter))
bloodspell.phased = TRUE
+ if(bloodpool)
+ bloodpool.RegisterSignal(src, list(COMSIG_LIVING_AFTERPHASEIN,COMSIG_PARENT_QDELETING), /obj/effect/dummy/phased_mob/slaughter/.proc/deleteself)
/mob/living/simple_animal/hostile/imp/slaughter/CtrlShiftClickOn(atom/A)
if(!isliving(A))
diff --git a/code/modules/antagonists/slaughter/slaughterevent.dm b/code/modules/antagonists/slaughter/slaughterevent.dm
index 6e74cfcd59f..aeda14e67fd 100644
--- a/code/modules/antagonists/slaughter/slaughterevent.dm
+++ b/code/modules/antagonists/slaughter/slaughterevent.dm
@@ -33,7 +33,6 @@
var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter((pick(spawn_locs)))
var/mob/living/simple_animal/hostile/imp/slaughter/S = new (holder)
- S.holder = holder
player_mind.transfer_to(S)
player_mind.assigned_role = "Slaughter Demon"
player_mind.special_role = "Slaughter Demon"
diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm
index 8232f71e8c2..9d61a9039e0 100644
--- a/code/modules/mob/living/bloodcrawl.dm
+++ b/code/modules/mob/living/bloodcrawl.dm
@@ -20,6 +20,11 @@
/obj/effect/dummy/phased_mob/slaughter/singularity_act()
return
+/obj/effect/dummy/phased_mob/slaughter/proc/deleteself(mob/living/source, obj/effect/decal/cleanable/phase_in_decal)
+ SIGNAL_HANDLER
+ qdel(src)
+
+
/mob/living/proc/phaseout(obj/effect/decal/cleanable/B)
if(iscarbon(src))
var/mob/living/carbon/C = src
@@ -117,6 +122,7 @@
victim.visible_message("[target] violently expels [victim]!")
victim.exit_blood_effect(target)
found_bloodpool = TRUE
+ break
if(!found_bloodpool)
// Fuck it, just eject them, thanks to some split second cleaning
@@ -168,6 +174,7 @@
return
forceMove(B.loc)
client.eye = src
+ SEND_SIGNAL(src, COMSIG_LIVING_AFTERPHASEIN, B)
visible_message("[src] rises out of the pool of blood!")
exit_blood_effect(B)
if(iscarbon(src))
@@ -175,5 +182,4 @@
for(var/obj/item/bloodcrawl/BC in C)
BC.flags_1 = null
qdel(BC)
- QDEL_NULL(holder)
return TRUE
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 59966571324..42ddfe20aa2 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -56,10 +56,9 @@
var/tod = null /// Time of death
- var/on_fire = 0 ///The "Are we on fire?" var
+ var/on_fire = FALSE ///The "Are we on fire?" var
var/fire_stacks = 0 ///Tracks how many stacks of fire we have on, max is usually 20
- var/holder = null //The holder for blood crawling
var/ventcrawler = 0 //0 No vent crawling, 1 vent crawling in the nude, 2 vent crawling always
var/limb_destroyer = 0 //1 Sets AI behavior that allows mobs to target and dismember limbs with their basic attack.