diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 66e7af873a3..6cf0868dd45 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -817,3 +817,17 @@ so as to remain in compliance with the most up-to-date laws."
master = null
screen_loc = ""
return ..()
+
+/// Gives the player the option to succumb while in critical condition
+/atom/movable/screen/alert/succumb
+ name = "Succumb"
+ desc = "Shuffle off this mortal coil."
+ icon_state = "succumb"
+
+/atom/movable/screen/alert/succumb/Click()
+ if(!usr || !usr.client)
+ return
+ var/mob/living/living_owner = usr
+ if(!istype(usr))
+ return
+ living_owner.do_succumb(TRUE)
diff --git a/code/modules/mob/living/carbon/human/human_life.dm b/code/modules/mob/living/carbon/human/human_life.dm
index 83fba460563..ab18b3fd2b8 100644
--- a/code/modules/mob/living/carbon/human/human_life.dm
+++ b/code/modules/mob/living/carbon/human/human_life.dm
@@ -662,6 +662,11 @@
healthdoll.overlays -= (cached_overlays - new_overlays)
healthdoll.cached_healthdoll_overlays = new_overlays
+ if(health <= HEALTH_THRESHOLD_CRIT)
+ throw_alert("succumb", /atom/movable/screen/alert/succumb)
+ else
+ clear_alert("succumb")
+
#undef BODYPART_PAIN_REDUCTION
/mob/living/carbon/human/proc/handle_nutrition_alerts() //This is a terrible abuse of the alert system; something like this should be a HUD element
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index 211b99e16a6..e071470af7d 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -87,10 +87,14 @@
var/mob/M = P
if((M.client?.prefs.toggles2 & PREFTOGGLE_2_DEATHMESSAGE) && (isobserver(M) || M.stat == DEAD))
to_chat(M, "[mind.name] has died at [area_name]. (JMP)")
+ if(last_words)
+ to_chat(M, "[p_their(TRUE)] last words were: \"[last_words]\"")
if(SSticker && SSticker.mode)
SSticker.mode.check_win()
+ clear_alert("succumb")
+
// u no we dead
return TRUE
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 2f10c2ce209..4f3933fffb2 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -291,18 +291,30 @@
/mob/living/verb/succumb()
set hidden = TRUE
+ // if you use the verb you better mean it
+ do_succumb(FALSE)
+
+/mob/living/proc/do_succumb(cancel_on_no_words)
+ if(stat == DEAD)
+ to_chat(src, "It's too late, you're already dead!")
+ return
if(health >= HEALTH_THRESHOLD_CRIT)
to_chat(src, "You are unable to succumb to death! This life continues!")
return
var/last_words = tgui_input_text(src, "Do you have any last words?", "Goodnight, Sweet Prince", encode = FALSE)
+ if(isnull(last_words) && cancel_on_no_words)
+ to_chat(src, "You decide you aren't quite ready to die.")
+ return
+
if(stat == DEAD)
// cancel em out if they died while they had the message box up
last_words = null
if(!isnull(last_words))
create_log(MISC_LOG, "gave their final words, [last_words]")
+ src.last_words = last_words // sorry
whisper(last_words)
add_attack_logs(src, src, "[src] has [!isnull(last_words) ? "whispered [p_their()] final words" : "succumbed to death"] with [round(health, 0.1)] points of health!")
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index e58823c3d61..55324a2ef85 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -97,6 +97,9 @@
var/datum/middleClickOverride/middleClickOverride = null
+ /// Famous last words -- if succumbing, what the user's last words were
+ var/last_words
+
/*
Taste Vars
*/
diff --git a/code/modules/mob/living/living_life.dm b/code/modules/mob/living/living_life.dm
index 59b1b5a7c04..f930e555c9e 100644
--- a/code/modules/mob/living/living_life.dm
+++ b/code/modules/mob/living/living_life.dm
@@ -176,3 +176,7 @@
overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity)
else
clear_fullscreen("brute")
+ if(health <= HEALTH_THRESHOLD_CRIT)
+ throw_alert("succumb", /atom/movable/screen/alert/succumb)
+ else
+ clear_alert("succumb")
diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi
index e7f44d0f575..54a953367e2 100644
Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ