diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 4550693fa35..b899b6e5ba7 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -132,6 +132,25 @@ duration = 8 randomdir = 0 +/obj/effect/overlay/temp/gib_animation + icon = 'icons/mob/mob.dmi' + duration = 15 + randomdir = 0 + +/obj/effect/overlay/temp/gib_animation/New(loc, gib_icon) + icon_state = gib_icon + ..() + +/obj/effect/overlay/temp/gib_animation/animal + icon = 'icons/mob/animal.dmi' + +/obj/effect/overlay/temp/dust_animation + icon = 'icons/mob/mob.dmi' + duration = 15 + +/obj/effect/overlay/temp/dust_animation/New(loc, dust_icon) + icon_state = dust_icon + ..() /obj/effect/overlay/palmtree_r name = "Palm tree" diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index b766085e2b9..00da8edcade 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -48,7 +48,7 @@ message_admins("[key_name(user)] suicided with [src.name] at ([x],[y],[z])") sleep(10) explode(get_turf(user)) - user.gib(no_brain = 1) + user.gib(1, 1) /obj/item/weapon/c4/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/code/game/objects/items/weapons/implants/implant_explosive.dm b/code/game/objects/items/weapons/implants/implant_explosive.dm index b27f147292c..e3562f526c1 100644 --- a/code/game/objects/items/weapons/implants/implant_explosive.dm +++ b/code/game/objects/items/weapons/implants/implant_explosive.dm @@ -40,7 +40,7 @@ if(delay <= 7) explosion(src,heavy,medium,weak,weak, flame_range = weak) if(imp_in) - imp_in.gib(no_brain = 1) + imp_in.gib(1) qdel(src) return timed_explosion() @@ -72,7 +72,7 @@ sleep(delay/4) explosion(src,heavy,medium,weak,weak, flame_range = weak) if(imp_in) - imp_in.gib(no_brain = 1) + imp_in.gib(1) qdel(src) /obj/item/weapon/implant/explosive/macro diff --git a/code/modules/admin/verbs/bluespacearty.dm b/code/modules/admin/verbs/bluespacearty.dm index 30b2130f543..165ec9072ec 100644 --- a/code/modules/admin/verbs/bluespacearty.dm +++ b/code/modules/admin/verbs/bluespacearty.dm @@ -28,7 +28,7 @@ message_admins("[target.name] has been hit by Bluespace Artillery fired by [usr]") if(target.health <= 1) - target.gib(no_brain = 1) + target.gib(1, 1) else target.adjustBruteLoss(min(99,(target.health - 1))) target.Stun(20) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index b8824da0bbd..9ed79ee998b 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -599,7 +599,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(confirm == "Yes") M.gib() else - M.gib(no_brain = 1) + M.gib(1) feedback_add_details("admin_verb","GIB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_gib_self() @@ -611,7 +611,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if (istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere return else - mob.gib(no_brain = 1) + mob.gib(1, 1) log_admin("[key_name(usr)] used gibself.") message_admins("[key_name_admin(usr)] used gibself.") diff --git a/code/modules/mob/dead/death.dm b/code/modules/mob/dead/death.dm index bd968c6b708..7c827e55ffe 100644 --- a/code/modules/mob/dead/death.dm +++ b/code/modules/mob/dead/death.dm @@ -1,5 +1,5 @@ /mob/dead/dust() //ghosts can't be vaporised. return -/mob/dead/gib(animation = 1) //ghosts can't be gibbed. +/mob/dead/gib() //ghosts can't be gibbed. return diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm index 131ba6e65e0..f5c2e9b4a02 100644 --- a/code/modules/mob/living/carbon/alien/death.dm +++ b/code/modules/mob/living/carbon/alien/death.dm @@ -1,17 +1,11 @@ /mob/living/carbon/alien/spawn_gibs() xgibs(loc, viruses) -/mob/living/carbon/alien/gib_animation(animate) - ..(animate, "gibbed-a") +/mob/living/carbon/alien/gib_animation() + new /obj/effect/overlay/temp/gib_animation(loc, "gibbed-a") /mob/living/carbon/alien/spawn_dust() new /obj/effect/decal/remains/xeno(loc) -/mob/living/carbon/alien/spawn_dust() - new /obj/effect/decal/remains/xeno(loc) - -/mob/living/carbon/alien/dust_animation(animate) - ..(animate, "dust-a") - -/mob/living/carbon/alien/dust(var/animation = 1) - ..() \ No newline at end of file +/mob/living/carbon/alien/dust_animation() + new /obj/effect/overlay/temp/dust_animation(loc, "dust-a") diff --git a/code/modules/mob/living/carbon/alien/humanoid/death.dm b/code/modules/mob/living/carbon/alien/humanoid/death.dm index bd236e1a8af..987c626f8dc 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/death.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/death.dm @@ -9,9 +9,9 @@ visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...") update_canmove() update_icons() - status_flags |=CANPUSH + status_flags |= CANPUSH - return ..(gibbed) + return ..() //When the alien queen dies, all others must pay the price for letting her die. /mob/living/carbon/alien/humanoid/royal/queen/death(gibbed) diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm index b9672dbe833..cf5df7b526a 100644 --- a/code/modules/mob/living/carbon/brain/death.dm +++ b/code/modules/mob/living/carbon/brain/death.dm @@ -11,7 +11,7 @@ return ..() -/mob/living/carbon/brain/gib(animation = 0) +/mob/living/carbon/brain/gib() if(container) qdel(container)//Gets rid of the MMI if there is one if(loc) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 260f981cf55..e579143f70a 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -55,23 +55,6 @@ stomach_contents.Remove(A) src.gib() -/mob/living/carbon/gib(animation = 1, var/no_brain = 0) - death(1) - for(var/obj/item/organ/internal/I in internal_organs) - if(no_brain && istype(I, /obj/item/organ/internal/brain)) - continue - if(I) - I.Remove(src) - I.loc = get_turf(src) - I.throw_at_fast(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5) - - for(var/mob/M in src) - if(M in stomach_contents) - stomach_contents.Remove(M) - M.loc = loc - visible_message("[M] bursts out of [src]!") - . = ..() - /mob/living/carbon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, override = 0, tesla_shock = 0) shock_damage *= siemens_coeff diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index 127aafc8f77..17b01a33957 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -4,3 +4,20 @@ med_hud_set_health() med_hud_set_status() ..() + +/mob/living/carbon/gib(no_brain, no_organs) + for(var/mob/M in src) + if(M in stomach_contents) + stomach_contents.Remove(M) + M.loc = loc + visible_message("[M] bursts out of [src]!") + ..() + +/mob/living/carbon/spill_organs(no_brain) + for(var/obj/item/organ/internal/I in internal_organs) + if(no_brain && istype(I, /obj/item/organ/internal/brain)) + continue + if(I) + I.Remove(src) + I.loc = get_turf(src) + I.throw_at_fast(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 33ac914b274..3b8bb513a9e 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -1,11 +1,8 @@ -/mob/living/carbon/human/gib_animation(animate) - ..(animate, "gibbed-h") +/mob/living/carbon/human/gib_animation() + new /obj/effect/overlay/temp/gib_animation(loc, "gibbed-h") -/mob/living/carbon/human/dust_animation(animate) - ..(animate, "dust-h") - -/mob/living/carbon/human/dust(animation = 1) - ..() +/mob/living/carbon/human/dust_animation() + new /obj/effect/overlay/temp/dust_animation(loc, "dust-h") /mob/living/carbon/human/spawn_gibs() hgibs(loc, viruses, dna) diff --git a/code/modules/mob/living/carbon/monkey/death.dm b/code/modules/mob/living/carbon/monkey/death.dm index 7884e7064b5..5a1f10e92df 100644 --- a/code/modules/mob/living/carbon/monkey/death.dm +++ b/code/modules/mob/living/carbon/monkey/death.dm @@ -1,11 +1,8 @@ -/mob/living/carbon/monkey/gib_animation(animate) - ..(animate, "gibbed-m") +/mob/living/carbon/monkey/gib_animation() + new /obj/effect/overlay/temp/gib_animation(loc, "gibbed-m") -/mob/living/carbon/monkey/dust_animation(animate) - ..(animate, "dust-m") - -/mob/living/carbon/monkey/dust(var/animation = 1) - ..() +/mob/living/carbon/monkey/dust_animation() + new /obj/effect/overlay/temp/dust_animation(loc, "dust-m") /mob/living/carbon/monkey/death(gibbed) if(stat == DEAD) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 18d6cc56f2b..9597532f385 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -1,4 +1,4 @@ -/mob/living/gib(animation = 1) +/mob/living/gib(no_brain, no_organs) var/prev_lying = lying if(stat != DEAD) death(1) @@ -6,34 +6,39 @@ if(buckled) buckled.unbuckle_mob(src,force=1) //to update alien nest overlay, forced because we don't exist anymore - var/atom/movable/overlay/animate = setup_animation(animation, prev_lying) - if(animate) - gib_animation(animate) - + if(!prev_lying) + gib_animation() + if(!no_organs) + spill_organs(no_brain) spawn_gibs() + qdel(src) - end_animation(animate) // Will qdel(src) +/mob/living/proc/gib_animation() + return /mob/living/proc/spawn_gibs() gibs(loc, viruses) -/mob/living/proc/gib_animation(animate, flick_name = "gibbed") - flick(flick_name, animate) +/mob/living/proc/spill_organs(no_brain) + return -/mob/living/dust(animation = 0) + +/mob/living/dust() death(1) - var/atom/movable/overlay/animate = setup_animation(animation, 0) - if(animate) - dust_animation(animate) + if(buckled) + buckled.unbuckle_mob(src,force=1) + + dust_animation() spawn_dust() - end_animation(animate) + qdel(src) + +/mob/living/proc/dust_animation() + return /mob/living/proc/spawn_dust() new /obj/effect/decal/cleanable/ash(loc) -/mob/living/proc/dust_animation(animate, flick_name = "") - flick(flick_name, animate) /mob/living/death(gibbed) unset_machine() @@ -57,29 +62,3 @@ update_damage_hud() update_health_hud() update_canmove() - - -/mob/living/proc/setup_animation(animation, prev_lying) - var/atom/movable/overlay/animate = null - notransform = 1 - canmove = 0 - icon = null - invisibility = 101 - alpha = 0 - - if(!prev_lying && animation) - animate = new(loc) - animate.icon_state = "blank" - animate.icon = 'icons/mob/mob.dmi' - animate.master = src - return animate - -/mob/living/proc/end_animation(animate) - if(!animate) - qdel(src) - else - spawn(15) - if(animate) - qdel(animate) - if(src) - qdel(src) diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 4c01e8724d5..02fb54012b1 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -1,9 +1,6 @@ /mob/living/silicon/spawn_gibs() robogibs(loc, viruses) -/mob/living/silicon/gib(animation = 0) // Please don't remove this thinking this proc does nothing, it is changing the default value for animation. - ..() - /mob/living/silicon/spawn_dust() new /obj/effect/decal/remains/robot(loc) diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index e586bbd8b0e..571176ae586 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -1,13 +1,12 @@ -/mob/living/silicon/robot/gib(animation = 1) - ..() /mob/living/silicon/robot/spawn_gibs() robogibs(loc, viruses) -/mob/living/silicon/robot/gib_animation(animate) - ..(animate, "gibbed-r") +/mob/living/silicon/robot/gib_animation() + new /obj/effect/overlay/temp/gib_animation(loc, "gibbed-r") -/mob/living/silicon/robot/dust(animation = 1) + +/mob/living/silicon/robot/dust() if(mmi) qdel(mmi) ..() @@ -15,8 +14,8 @@ /mob/living/silicon/robot/spawn_dust() new /obj/effect/decal/remains/robot(loc) -/mob/living/silicon/robot/dust_animation(animate) - ..(animate, "dust-r") +/mob/living/silicon/robot/dust_animation() + new /obj/effect/overlay/temp/dust_animation(loc, "dust-r") /mob/living/silicon/robot/death(gibbed) if(stat == DEAD) diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 52425659a45..42aad52c0e4 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -133,8 +133,8 @@ // Turn to dust when gibbed -/mob/living/simple_animal/hostile/statue/gib(animation = 0) - dust(animation) +/mob/living/simple_animal/hostile/statue/gib() + dust() // Stop attacking clientless mobs diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 02de34f15cd..662781f3005 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -251,15 +251,17 @@ else if(bodytemperature > maxbodytemp) adjustBruteLoss(3) -/mob/living/simple_animal/gib(animation = 0) - if(icon_gib) - flick(icon_gib, src) +/mob/living/simple_animal/gib() if(butcher_results) for(var/path in butcher_results) for(var/i = 1; i <= butcher_results[path];i++) new path(src.loc) ..() +/mob/living/simple_animal/gib_animation() + if(icon_gib) + new /obj/effect/overlay/temp/gib_animation/animal(loc, icon_gib) + /mob/living/simple_animal/blob_act() adjustBruteLoss(20) @@ -417,10 +419,11 @@ if(loot.len) for(var/i in loot) new i(loc) - if(deathmessage && !gibbed) - visible_message("[deathmessage]") - else if(!del_on_death) - visible_message("\the [src] stops moving...") + if(!gibbed) + if(deathmessage) + visible_message("[deathmessage]") + else if(!del_on_death) + visible_message("\the [src] stops moving...") if(del_on_death) ghostize() qdel(src)