diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index bbd5e6e4536..4501bfb5af3 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -94,14 +94,20 @@
// u no we dead
return TRUE
-/mob/living/proc/delayed_gib()
+/mob/living/proc/delayed_gib(inflate_at_end = FALSE)
visible_message("[src] starts convulsing violently!", "You feel as if your body is tearing itself apart!")
Weaken(30 SECONDS)
do_jitter_animation(1000, -1) // jitter until they are gibbed
- addtimer(CALLBACK(src, PROC_REF(gib)), rand(2 SECONDS, 10 SECONDS))
+ addtimer(CALLBACK(src, inflate_at_end ? PROC_REF(quick_explode_gib) : PROC_REF(gib)), rand(2 SECONDS, 10 SECONDS))
-/mob/living/carbon/proc/inflate_gib() // Plays an animation that makes mobs appear to inflate before finally gibbing
- addtimer(CALLBACK(src, PROC_REF(gib), null, null, TRUE, TRUE), 25)
- var/matrix/M = matrix()
+/mob/living/proc/inflate_gib() // Plays an animation that makes mobs appear to inflate before finally gibbing
+ addtimer(CALLBACK(src, PROC_REF(gib), null, null, TRUE, TRUE), 2.5 SECONDS)
+ var/matrix/M = transform
M.Scale(1.8, 1.2)
animate(src, time = 40, transform = M, easing = SINE_EASING)
+
+/mob/living/proc/quick_explode_gib()
+ addtimer(CALLBACK(src, PROC_REF(gib), null, null, TRUE, TRUE), 0.1 SECONDS)
+ var/matrix/M = transform
+ M.Scale(1.8, 1.2)
+ animate(src, time = 1, transform = M, easing = SINE_EASING)
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 751264e9418..5328cd1d8a3 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -172,7 +172,7 @@
if(isliving(target))
var/mob/living/L = target
L.visible_message("[L] explodes!")
- L.gib()
+ L.quick_explode_gib()
/obj/item/projectile/beam/laser/detective
name = "energy revolver shot"
diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index 9e12b907659..b32311317c8 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -784,7 +784,7 @@
if(M.getBruteLoss() + M.getFireLoss() + M.getCloneLoss() >= 150)
if(ischangeling(M))
return
- M.delayed_gib()
+ M.delayed_gib(TRUE)
return
if(!M.ghost_can_reenter())
M.visible_message("[M] twitches slightly, but is otherwise unresponsive!")
diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm
index 29b69f03bb1..96f0fa683b2 100644
--- a/code/modules/reagents/chemistry/reagents/toxins.dm
+++ b/code/modules/reagents/chemistry/reagents/toxins.dm
@@ -35,7 +35,7 @@
/datum/reagent/minttoxin/on_mob_life(mob/living/M)
if(HAS_TRAIT(M, TRAIT_FAT))
- M.gib()
+ M.inflate_gib()
return ..()
/datum/reagent/slimejelly