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