diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index bf1947250a1..5267e29a608 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -124,6 +124,7 @@ #define STATUS_EFFECT_DROWSINESS /datum/status_effect/transient/drowsiness #define STATUS_EFFECT_DRUNKENNESS /datum/status_effect/transient/drunkenness #define STATUS_EFFECT_SILENCED /datum/status_effect/transient/silence +#define STATUS_EFFECT_ABSSILENCED /datum/status_effect/transient/silence/absolute #define STATUS_EFFECT_JITTER /datum/status_effect/transient/jittery #define STATUS_EFFECT_CULT_SLUR /datum/status_effect/transient/cult_slurring #define STATUS_EFFECT_STAMMER /datum/status_effect/transient/stammering diff --git a/code/datums/emote.dm b/code/datums/emote.dm index d2d443954e2..0ee5a322992 100644 --- a/code/datums/emote.dm +++ b/code/datums/emote.dm @@ -593,6 +593,10 @@ return FALSE if((emote_type & EMOTE_MOUTH) && !can_vocalize_emotes(user)) return FALSE + if(isliving(user)) + var/mob/living/liveuser = user + if(liveuser.has_status_effect(STATUS_EFFECT_ABSSILENCED)) + return FALSE return TRUE /datum/emote/proc/remove_ending_punctuation(msg) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index bfa26243a99..4304987d455 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -674,6 +674,9 @@ . = ..() REMOVE_TRAIT(owner, TRAIT_MUTE, id) +/datum/status_effect/transient/silence/absolute // this one will mute all emote sounds including gasps + id = "abssilenced" + /datum/status_effect/transient/jittery id = "jittering" diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index f176a6e4e41..8f214cb2925 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -153,7 +153,7 @@ return - strangling.Silence(6 SECONDS) // Non-improvised effects + strangling.AbsoluteSilence(6 SECONDS) // Non-improvised effects strangling.apply_damage(4, OXY, "head") diff --git a/code/modules/mob/living/living_status_procs.dm b/code/modules/mob/living/living_status_procs.dm index e1f04dfc1b8..0133b128f4e 100644 --- a/code/modules/mob/living/living_status_procs.dm +++ b/code/modules/mob/living/living_status_procs.dm @@ -416,6 +416,15 @@ STATUS EFFECTS /mob/living/proc/SetSilence(amount) SET_STATUS_EFFECT_STRENGTH(STATUS_EFFECT_SILENCED, amount) +/mob/living/proc/AmountAbsoluteSilenced() + RETURN_STATUS_EFFECT_STRENGTH(STATUS_EFFECT_ABSSILENCED) + +/mob/living/proc/AbsoluteSilence(amount) + SetAbsoluteSilence(max(amount, AmountAbsoluteSilenced())) + +/mob/living/proc/SetAbsoluteSilence(amount) + SET_STATUS_EFFECT_STRENGTH(STATUS_EFFECT_ABSSILENCED, amount) + /mob/living/proc/AdjustSilence(amount, bound_lower = 0, bound_upper = INFINITY) SetSilence(directional_bounded_sum(AmountSilenced(), amount, bound_lower, bound_upper))