diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm
index 371f38238a1..19d4c287427 100644
--- a/code/datums/diseases/gbs.dm
+++ b/code/datums/diseases/gbs.dm
@@ -34,7 +34,7 @@
if(5)
to_chat(affected_mob, "Your body feels as if it's trying to rip itself open...")
if(prob(50))
- affected_mob.gib()
+ affected_mob.delayed_gib()
else
return
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index a5897666916..003b5c3d4fe 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -96,3 +96,9 @@
// u no we dead
return TRUE
+
+/mob/living/proc/delayed_gib()
+ visible_message("[src] starts convulsing violently!", "You feel as if your body is tearing itself apart!")
+ Weaken(15)
+ do_jitter_animation(1000, -1)
+ addtimer(CALLBACK(src, .proc/gib), rand(20, 100))
\ No newline at end of file
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 3c5fb59aea8..3de38568a4a 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -786,11 +786,11 @@
..()
floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement.
-/mob/living/proc/do_jitter_animation(jitteriness)
+/mob/living/proc/do_jitter_animation(jitteriness, loop_amount = 6)
var/amplitude = min(4, (jitteriness/100) + 1)
var/pixel_x_diff = rand(-amplitude, amplitude)
var/pixel_y_diff = rand(-amplitude/3, amplitude/3)
- animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff , time = 2, loop = 6)
+ animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff , time = 2, loop = loop_amount)
animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y) , time = 2)
floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement.
diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index df32715c846..7d711cbadb1 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -685,8 +685,7 @@
if(method == INGEST)
if(M.stat == DEAD)
if(M.getBruteLoss()+M.getFireLoss()+M.getCloneLoss() >= 150)
- M.visible_message("[M]'s body starts convulsing!")
- M.gib()
+ M.delayed_gib()
return
var/mob/dead/observer/ghost = M.get_ghost()
if(ghost)
diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm
index 510f3ca1368..7ba6ed01667 100644
--- a/code/modules/reagents/chemistry/reagents/toxins.dm
+++ b/code/modules/reagents/chemistry/reagents/toxins.dm
@@ -506,19 +506,11 @@
M.fakevomit()
update_flags |= M.adjustToxLoss(2, FALSE)
update_flags |= M.adjustBruteLoss(2, FALSE)
+ if(volume > 40 && prob(4))
+ M.delayed_gib()
+ return
return ..() | update_flags
-/datum/reagent/venom/overdose_process(mob/living/M)
- var/update_flags = STATUS_UPDATE_NONE
- if(volume >= 40)
- if(prob(4))
- M.visible_message("[M] starts convulsing violently!", "You feel as if your body is tearing itself apart!")
- update_flags |= M.Weaken(15, FALSE)
- M.AdjustJitter(1000)
- spawn(rand(20, 100))
- M.gib()
- return list(0, update_flags)
-
/datum/reagent/neurotoxin2
name = "Neurotoxin"
id = "neurotoxin2"