From 10de2370cf4348fe66657d5d56b6073ffe91b1f5 Mon Sep 17 00:00:00 2001 From: skoglol <33292112+kriskog@users.noreply.github.com> Date: Tue, 10 Dec 2019 08:44:28 +0100 Subject: [PATCH] New disarm intent suicide (#47902) About The Pull Request Adds a new disarm intent suicide. Fixes the intent logic, it will now run different suicides for disarm and grab. Added some ghostize that I overlooked last time. https://streamable.com/ifx25 Why It's Good For The Game Fixes, silly new content Changelog cl Skoglol fix: All human intent suicides now work properly add: New disarm intent suicide /cl --- code/modules/client/verbs/suicide.dm | 18 ++++++++++++++---- .../mob/living/carbon/human/suicides.dm | 17 +++++++++++++++++ sound/effects/cartoon_pop.ogg | Bin 0 -> 6452 bytes sound/effects/license.txt | 3 +++ tgstation.dme | 1 + 5 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/suicides.dm create mode 100644 sound/effects/cartoon_pop.ogg diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index 58b11cddfbc..2fbb591e889 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -75,20 +75,23 @@ adjustOxyLoss(max(200 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(FALSE) + ghostize(FALSE) // Disallows reentering body and disassociates mind return var/suicide_message if(a_intent == INTENT_DISARM) + if(prob(25)) + disarm_suicide() // Snowflake suicide for a tired joke. + return //above proc handles logging and death suicide_message = pick("[src] is attempting to push [p_their()] own head off [p_their()] shoulders! It looks like [p_theyre()] trying to commit suicide.", \ - "[src] is pushing [p_their()] thumbs into [p_their()] eye sockets! It looks like [p_theyre()] trying to commit suicide.", \ - "[src] is ripping [p_their()] own arms off! It looks like [p_theyre()] trying to commit suicide.")//heheh get it? - if(a_intent == INTENT_GRAB) + "[src] is pushing [p_their()] thumbs into [p_their()] eye sockets! It looks like [p_theyre()] trying to commit suicide.") + else if(a_intent == INTENT_GRAB) suicide_message = pick("[src] is attempting to pull [p_their()] own head off! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is aggressively grabbing [p_their()] own neck! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is pulling [p_their()] eyes out of their sockets! It looks like [p_theyre()] trying to commit suicide.") - if(a_intent == INTENT_HELP) + else if(a_intent == INTENT_HELP) suicide_message = pick("[src] is hugging [p_them()]self to death! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is high-fiving [p_them()]self to death! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is getting too high on life! It looks like [p_theyre()] trying to commit suicide.") @@ -121,6 +124,7 @@ suicide_log() death(FALSE) + ghostize(FALSE) // Disallows reentering body and disassociates mind /mob/living/carbon/monkey/verb/suicide() set hidden = 1 @@ -138,6 +142,7 @@ adjustOxyLoss(max(200- getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(FALSE) + ghostize(FALSE) // Disallows reentering body and disassociates mind /mob/living/silicon/ai/verb/suicide() set hidden = 1 @@ -156,6 +161,7 @@ //put em at -175 adjustOxyLoss(max(maxHealth * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(FALSE) + ghostize(FALSE) // Disallows reentering body and disassociates mind /mob/living/silicon/robot/verb/suicide() set hidden = 1 @@ -174,6 +180,7 @@ //put em at -175 adjustOxyLoss(max(maxHealth * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(FALSE) + ghostize(FALSE) // Disallows reentering body and disassociates mind /mob/living/silicon/pai/verb/suicide() set hidden = 1 @@ -186,6 +193,7 @@ suicide_log() death(FALSE) + ghostize(FALSE) // Disallows reentering body and disassociates mind else to_chat(src, "Aborting suicide attempt.") @@ -207,6 +215,7 @@ //put em at -175 adjustOxyLoss(max(200 - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(FALSE) + ghostize(FALSE) // Disallows reentering body and disassociates mind /mob/living/simple_animal/verb/suicide() set hidden = 1 @@ -223,6 +232,7 @@ suicide_log() death(FALSE) + ghostize(FALSE) // Disallows reentering body and disassociates mind /mob/living/proc/suicide_log() log_message("committed suicide as [src.type]", LOG_ATTACK) diff --git a/code/modules/mob/living/carbon/human/suicides.dm b/code/modules/mob/living/carbon/human/suicides.dm new file mode 100644 index 00000000000..bde239a36d4 --- /dev/null +++ b/code/modules/mob/living/carbon/human/suicides.dm @@ -0,0 +1,17 @@ +/mob/living/carbon/human/proc/delayed_suicide() + suicide_log() + adjustBruteLoss(max(200 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) + death(FALSE) + ghostize(FALSE) // Disallows reentering body and disassociates mind + +/mob/living/carbon/human/proc/disarm_suicide() + var/suicide_message = "[src] is ripping [p_their()] own arms off! It looks like [p_theyre()] trying to commit suicide." //heheh get it? + visible_message("[suicide_message]", "[suicide_message]") + + var/timer = 15 + for(var/obj/item/bodypart/thing in bodyparts) + if(thing.body_part == ARM_LEFT || thing.body_part == ARM_RIGHT) + addtimer(CALLBACK(thing, /obj/item/bodypart/.proc/dismember), timer) + addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/cartoon_pop.ogg', 70), timer) + timer += 15 + addtimer(CALLBACK(src, /mob/living/carbon/human/.proc/delayed_suicide, FALSE), timer-10) diff --git a/sound/effects/cartoon_pop.ogg b/sound/effects/cartoon_pop.ogg new file mode 100644 index 0000000000000000000000000000000000000000..aca8c7ade4eae1570522ca0f0dc77c2eeccd2155 GIT binary patch literal 6452 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