From 35607d76da7d1c2a37a4756b4898c7ad4520dd83 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 15 Mar 2016 13:15:09 -0400 Subject: [PATCH] Heart Tweaks --- .../miniantags/slaughter/slaughter.dm | 14 +++-- code/game/objects/items/devices/scanners.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 55 +++++++++++++++---- 3 files changed, 55 insertions(+), 16 deletions(-) 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 = ..()