diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index faafe256ed9..bafff6fcb54 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -545,13 +545,14 @@ moving up or down retains their old lying angle return S.duration - world.time return 0 -/mob/living/proc/Stun(amount, ignore_canstun = FALSE) //Can't go below remaining duration +/// Takes a time, whether it ignores stun immunity, and whether it replaces instead of adding to already-existing stuns. +/mob/living/proc/Stun(amount, ignore_canstun = FALSE, superceding = FALSE) //Can't go below remaining duration if(IS_STUN_IMMUNE(src, ignore_canstun)) return if(absorb_stun(amount, ignore_canstun)) return var/datum/status_effect/incapacitating/stun/S = IsStunned() - if(S) + if(S && !superceding) S.duration = max(world.time + amount, S.duration) else if(amount > 0) S = apply_status_effect(STATUS_EFFECT_STUN, amount) diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 4441b70b2dd..8a93ea3b4df 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -145,7 +145,7 @@ var/breathing_tube = affecting.get_organ_slot("breathing_tube") if(state >= GRAB_NECK) - affecting.Stun(3 SECONDS) + affecting.Stun(3 SECONDS,,TRUE) if(isliving(affecting) && !breathing_tube) //It will hamper your breathing, being choked and all. var/mob/living/L = affecting L.adjustOxyLoss(1)