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"