diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 0bcd91ca12a..77b9aff0d68 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -665,7 +665,7 @@ C.update_canmove() C.remove_changeling_powers() - C.emote("deathgasp") + C.emote("deathgasp", message = TRUE) C.tod = worldtime2text() var/time_to_take = rand(800, 1200) to_chat(C, "This will take [round((time_to_take/10))] seconds.") diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 87b6dccbde3..e046277b825 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -355,7 +355,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return if(src.health < 0 && stat != DEAD) //crit people - succumb() + succumb_proc(0) ghostize(1) else if(stat == DEAD) ghostize(1) diff --git a/code/modules/mob/living/carbon/alien/humanoid/death.dm b/code/modules/mob/living/carbon/alien/humanoid/death.dm index 5ad3f3d142c..5b10367cec3 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/death.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/death.dm @@ -4,7 +4,7 @@ if(healths) healths.icon_state = "health6" if(!gibbed) - emote("deathgasp") + emote("deathgasp", message = TRUE) stat = DEAD if(!gibbed) diff --git a/code/modules/mob/living/carbon/alien/larva/death.dm b/code/modules/mob/living/carbon/alien/larva/death.dm index bae28e7fa97..d7192342155 100644 --- a/code/modules/mob/living/carbon/alien/larva/death.dm +++ b/code/modules/mob/living/carbon/alien/larva/death.dm @@ -4,7 +4,7 @@ if(healths) healths.icon_state = "health6" if(!gibbed) - emote("deathgasp") + emote("deathgasp", message = TRUE) stat = DEAD icon_state = "larva_dead" diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 3b768e443bd..703ff5b1b21 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -103,8 +103,6 @@ H.mind.kills += "[name] ([ckey])" if(!gibbed) - emote("deathgasp") //Let the world KNOW WE ARE DEAD - update_canmove() stat = DEAD tod = worldtime2text() //Weasellos time of death patch diff --git a/code/modules/mob/living/carbon/monkey/death.dm b/code/modules/mob/living/carbon/monkey/death.dm index e9c58a6bd34..d9137180d13 100644 --- a/code/modules/mob/living/carbon/monkey/death.dm +++ b/code/modules/mob/living/carbon/monkey/death.dm @@ -31,7 +31,7 @@ if(healths) healths.icon_state = "health5" if(!gibbed) - emote("deathgasp") + emote("deathgasp", message = TRUE) stat = DEAD update_canmove() diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 79639dcb582..8a15e845412 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -56,10 +56,19 @@ stat_allowed = UNCONSCIOUS mob_type_blacklist_typelist = list(/mob/living/carbon/brain) // Everyone can deathgasp -/datum/emote/living/deathgasp/run_emote(mob/user, params) +/datum/emote/living/deathgasp/run_emote(mob/living/user, params) + if(/datum/dna/gene/disability/elvis in user.active_genes) + user.emote("fart", ignore_status = 1) + message = "has left the building..." + if(!issilent(user) && (M_HARDCORE in user.mutations)) + message = "whispers with their final breath, 'i told u i was hardcore..'" . = ..() if(. && isalienadult(user)) playsound(user.loc, 'sound/voice/hiss6.ogg', 80, 1, 1) + if (. && user.stat == UNCONSCIOUS && !params) + user.succumb_proc(0, 1) + message = initial(message) + /datum/emote/living/carbon/drool key = "drool" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index fce3bf821f9..c1570b148f3 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -178,10 +178,15 @@ /mob/living/verb/succumb() set hidden = 1 + succumb_proc(0) + +/mob/living/proc/succumb_proc(var/gibbed = 0, var/from_deathgasp = FALSE) if (src.health < 0 && stat != DEAD) src.attack_log += "[src] has succumbed to death with [health] points of health!" src.apply_damage(maxHealth + src.health, OXY) - death(0) + if (!from_deathgasp) + emote("deathgasp", message = TRUE) + death(gibbed) to_chat(src, "You have given up life and succumbed to death.") diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 9c692069a8b..9029735efb1 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -117,14 +117,14 @@ var/list/department_radio_keys = list( say_testing(src, "ur ded kid") say_dead(message) return + if(check_emote(message)) + say_testing(src, "Emoted") + return if (stat) // Unconcious. if(message_mode == MODE_WHISPER) //Lets us say our last words. say_testing(src, "message mode was whisper.") whisper(copytext(message, 3)) return - if(check_emote(message)) - say_testing(src, "Emoted") - return if(!can_speak_basic(message)) say_testing(src, "we aren't able to talk") return @@ -484,9 +484,6 @@ var/list/department_radio_keys = list( to_chat(usr, "Speech is currently admin-disabled.") return - if(isUnconscious()) - return - var/datum/speech/speech = create_speech(message) speech.language = parse_language(speech.message) speech.mode = SPEECH_MODE_WHISPER @@ -553,7 +550,7 @@ var/list/department_radio_keys = list( watcher.show_message(rendered, 2) if (said_last_words) // dying words - succumb(1) + succumb_proc(0) returnToPool(speech) diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 42163ba9521..d3758b821aa 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -2,7 +2,7 @@ if(stat == DEAD) return if(!gibbed) - emote("deathgasp") + emote("deathgasp", message = TRUE) playsound(src, 'sound/machines/WXP_shutdown.ogg', 75, FALSE) stat = DEAD update_icon() diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index ef2a06c9c7a..d11859795b6 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -37,7 +37,7 @@ if(stat == DEAD) return if(!gibbed) - emote("deathgasp") + emote("deathgasp", message = TRUE) stat = DEAD update_canmove() if(!gibbed) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index aed9cbf0d14..a304c84ec51 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -324,7 +324,7 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t return "[emote], [text]" return "says, [text]"; -/mob/living/simple_animal/emote(var/act, var/type, var/desc, var/auto) +/mob/living/simple_animal/emote(var/act, var/type, var/desc, var/auto, var/message = null) if(timestopped) return //under effects of time magick if(stat) @@ -512,7 +512,7 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t return if(!gibbed) - emote("deathgasp") + emote("deathgasp", message = TRUE) health = 0 // so /mob/living/simple_animal/Life() doesn't magically revive them living_mob_list -= src