diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm
index ae9879ca8c3..9d6e3959963 100644
--- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm
+++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm
@@ -96,7 +96,7 @@
new /obj/effect/decal/cleanable/blood(loc)
new /obj/effect/gibspawner/generic(get_turf(src))
new /obj/effect/gibspawner/generic(get_turf(src))
- new /obj/item/organ/internal/heart/demonheart(loc)
+ new /obj/item/organ/internal/heart/demon(loc)
playsound(get_turf(src),'sound/misc/demon_dies.ogg', 200, 1)
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)
@@ -141,7 +141,7 @@
//////////The Loot
//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
-/obj/item/organ/internal/heart/demonheart
+/obj/item/organ/internal/heart/demon
name = "demon heart"
desc = "Still it beats furiously, emanating an aura of utter hate."
icon = 'icons/obj/surgery.dmi'
@@ -151,7 +151,10 @@
/obj/item/organ/internal/heart/demon/update_icon()
return //always beating visually
-/obj/item/organ/internal/heart/demonheart/attack_self(mob/living/user)
+/obj/item/organ/internal/heart/demon/prepare_eat()
+ return // Just so people don't accidentally waste it
+
+/obj/item/organ/internal/heart/demon/attack_self(mob/living/user)
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)
@@ -178,12 +181,15 @@
if(M.mind)
M.mind.AddSpell(new /obj/effect/proc_holder/spell/bloodcrawl(null))
-/obj/item/organ/internal/heart/demonheart/remove(mob/living/carbon/M, special = 0)
+/obj/item/organ/internal/heart/demon/remove(mob/living/carbon/M, special = 0)
..()
if(M.mind)
M.bloodcrawl = 0
M.mind.remove_spell(/obj/effect/proc_holder/spell/bloodcrawl)
+/obj/item/organ/internal/heart/demon/Stop()
+ return 0 // Always beating.
+
//Objectives and helpers.
//Objective info, Based on Reverent mini Atang
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 4b0e945722c..c789e5178ab 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -242,7 +242,7 @@ REAGENT SCANNER
user.show_message("\red Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl")
else
user.show_message("\blue Blood Level Normal: [blood_percent]% [blood_volume]cl")
- if(H.heart_attack)
+ if(H.heart_attack && H.stat != DEAD)
user.show_message("Subject suffering from heart attack: Apply defibrillator immediately.")
user.show_message("\blue Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.")
var/implant_detect
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index 48b97ed4c88..bf0f4926e08 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -122,31 +122,64 @@
// Brain is defined in brain_item.dm.
+
/obj/item/organ/internal/heart
name = "heart"
icon_state = "heart-on"
organ_tag = "heart"
parent_organ = "chest"
+ slot = "heart"
+ origin_tech = "biotech=3"
+ var/beating = 1
dead_icon = "heart-off"
- vital = 1
- var/beating = 0
+ var/icon_base = "heart"
/obj/item/organ/internal/heart/update_icon()
if(beating)
- icon_state = "heart-on"
+ icon_state = "[icon_base]-on"
else
- icon_state = "heart-off"
-
-/obj/item/organ/internal/heart/insert(mob/living/carbon/M, special = 0)
- ..()
- beating = 1
- update_icon()
+ icon_state = "[icon_base]-off"
/obj/item/organ/internal/heart/remove(mob/living/carbon/M, special = 0)
..()
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.stat == DEAD || H.heart_attack)
+ Stop()
+ return
+ if(!special)
+ H.heart_attack = 1
+
spawn(120)
- beating = 0
- update_icon()
+ if(!owner)
+ Stop()
+
+/obj/item/organ/internal/heart/attack_self(mob/user)
+ ..()
+ if(!beating)
+ Restart()
+ spawn(80)
+ if(!owner)
+ Stop()
+
+
+/obj/item/organ/internal/heart/insert(mob/living/carbon/M, special = 0)
+ ..()
+ if(ishuman(M) && beating)
+ var/mob/living/carbon/human/H = M
+ if(H.heart_attack)
+ H.heart_attack = 0
+ return
+
+/obj/item/organ/internal/heart/proc/Stop()
+ beating = 0
+ update_icon()
+ return 1
+
+/obj/item/organ/internal/heart/proc/Restart()
+ beating = 1
+ update_icon()
+ return 1
/obj/item/organ/internal/heart/prepare_eat()
var/obj/S = ..()