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 00000000000..aca8c7ade4e Binary files /dev/null and b/sound/effects/cartoon_pop.ogg differ diff --git a/sound/effects/license.txt b/sound/effects/license.txt index c928a9872f3..27133b26697 100644 --- a/sound/effects/license.txt +++ b/sound/effects/license.txt @@ -1,2 +1,5 @@ hit_punch.ogg and hit_kick.ogg are made by Taira Komori (https://taira-komori.jpn.org/freesounden.html) + +cartoon_pop.ogg by Tobiasz 'unfa' KaroĊ„ +(https://freesound.org/people/unfa/sounds/245645/) diff --git a/tgstation.dme b/tgstation.dme index 78c31cd256e..2c6fd487a0b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2108,6 +2108,7 @@ #include "code\modules\mob\living\carbon\human\say.dm" #include "code\modules\mob\living\carbon\human\species.dm" #include "code\modules\mob\living\carbon\human\status_procs.dm" +#include "code\modules\mob\living\carbon\human\suicides.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" #include "code\modules\mob\living\carbon\human\species_types\abductors.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm"