diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index ffb2d73306b..72e1d483ad3 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -1,10 +1,17 @@
/mob/living/carbon/human/gib()
+ if(species)
+ species.gib(src)
+ return
+
death(1)
monkeyizing = 1
canmove = 0
icon = null
invisibility = 101
+ default_gib()
+//This will get called often at first until custom gibbing events get made up for each species.
+/mob/living/carbon/human/proc/default_gib()
for(var/datum/organ/external/E in src.organs)
if(istype(E, /datum/organ/external/chest) || istype(E, /datum/organ/external/groin)) //Really bad stuff happens when either get removed
continue
@@ -19,7 +26,8 @@
anim(target = src, a_icon = 'icons/mob/mob.dmi', flick_anim = "gibbed-h", sleeptime = 15)
hgibs(loc, virus2, dna, species.flesh_color, species.blood_color, gib_radius)
- qdel(src)
+ qdel(src)
+
/mob/living/carbon/human/dust(var/drop_everything = FALSE)
death(1)
diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm
index d47f8794d8b..63629b1e1a8 100644
--- a/code/modules/mob/living/carbon/species.dm
+++ b/code/modules/mob/living/carbon/species.dm
@@ -157,6 +157,13 @@ var/global/list/whitelisted_species = list("Human")
myhuman = null
..()
+/datum/species/proc/gib(var/mob/living/carbon/human/H)
+ H.death(1)
+ H.monkeyizing = 1
+ H.canmove = 0
+ H.icon = null
+ H.invisibility = 101
+
/datum/species/proc/handle_speech(var/datum/speech/speech, mob/living/carbon/human/H)
if(H.dna)
if(length(speech.message) >= 2)
@@ -298,6 +305,10 @@ var/global/list/whitelisted_species = list("Human")
anatomy_flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT | HAS_SWEAT_GLANDS
+/datum/species/human/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/manifested
name = "Manifested"
icobase = 'icons/mob/human_races/r_manifested.dmi'
@@ -344,6 +355,9 @@ var/global/list/whitelisted_species = list("Human")
/datum/species/manifested/can_artifact_revive()
return 0
+/datum/species/manifested/gib(mob/living/carbon/human/H)
+ handle_death(H)
+
/datum/species/unathi
name = "Unathi"
icobase = 'icons/mob/human_races/r_lizard.dmi'
@@ -377,6 +391,9 @@ var/global/list/whitelisted_species = list("Human")
speech.message = replacetext(speech.message, "s", "s-s") //not using stutter("s") because it likes adding more s's.
speech.message = replacetext(speech.message, "s-ss-s", "ss-ss") //asshole shows up as ass-sshole
+/datum/species/unathi/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
/datum/species/skellington // /vg/
name = "Skellington"
@@ -418,6 +435,19 @@ var/global/list/whitelisted_species = list("Human")
/datum/species/skellington/can_artifact_revive()
return 0
+/datum/species/skellington/gib(mob/living/carbon/human/H)
+ ..()
+ var/datum/organ/external/head_organ = H.get_organ(LIMB_HEAD)
+ if(head_organ.status & ORGAN_DESTROYED)
+ new /obj/effect/decal/remains/human/noskull(H.loc)
+ else
+ new /obj/effect/decal/remains/human(H.loc)
+ head_organ.droplimb(1,1)
+
+ H.drop_all()
+ qdel(src)
+
+
/datum/species/skellington/skelevox // Science never goes too far, it's the public that's too conservative
name = "Skeletal Vox"
icobase = 'icons/mob/human_races/vox/r_voxboney.dmi'
@@ -565,6 +595,10 @@ var/global/list/whitelisted_species = list("Human")
speech.message = speech_filter.FilterSpeech(speech.message)
return ..()
+/datum/species/tajaran/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/grey // /vg/
name = "Grey"
icobase = 'icons/mob/human_races/r_grey.dmi'
@@ -612,6 +646,10 @@ var/global/list/whitelisted_species = list("Human")
You are particularly allergic to water, which acts like acid to you, but the inverse is so for acid, so you're fun at parties.
\
You're not as good in a fist fight as a regular baseline human, but you make up for this by bullying them from afar by talking directly into peoples minds."
+/datum/species/grey/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/muton // /vg/
name = "Muton"
icobase = 'icons/mob/human_races/r_muton.dmi'
@@ -650,6 +688,10 @@ var/global/list/whitelisted_species = list("Human")
move_speed_mod = 1
+/datum/species/muton/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/skrell
name = "Skrell"
icobase = 'icons/mob/human_races/r_skrell.dmi'
@@ -666,7 +708,10 @@ var/global/list/whitelisted_species = list("Human")
head_icons = 'icons/mob/species/skrell/head.dmi'
wear_suit_icons = 'icons/mob/species/skrell/suit.dmi'
-
+/datum/species/skrell/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/vox
name = "Vox"
icobase = 'icons/mob/human_races/vox/r_vox.dmi'
@@ -871,6 +916,10 @@ var/global/list/whitelisted_species = list("Human")
icobase = 'icons/mob/human_races/vox/r_vox.dmi'
deform = 'icons/mob/human_races/vox/r_def_vox.dmi'
+/datum/species/vox/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/diona
name = "Diona"
icobase = 'icons/mob/human_races/r_plant.dmi'
@@ -909,6 +958,10 @@ var/global/list/whitelisted_species = list("Human")
You do not need to breathe, do not feel pain, you are incredibly resistant to cold and low pressure, and have no blood to bleed.
\
However, as you are a plant, you are incredibly susceptible to burn damage, which is something you can not regenerate normally."
+/datum/species/diona/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/golem
name = "Golem"
icobase = 'icons/mob/human_races/r_golem.dmi'
@@ -983,6 +1036,9 @@ var/list/has_died_as_golem = list()
/datum/species/golem/can_artifact_revive()
return 0
+/datum/species/golem/gib(mob/living/carbon/human/H)
+ handle_death()
+
/mob/living/adamantine_dust //serves as the corpse of adamantine golems
name = "adamantine dust"
desc = "The remains of an adamantine golem."
@@ -1059,7 +1115,10 @@ var/list/has_died_as_golem = list()
/datum/species/grue/makeName()
return "grue"
-
+/datum/species/grue/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/ghoul
name = "Ghoul"
icobase = 'icons/mob/human_races/r_ghoul.dmi'
@@ -1077,6 +1136,10 @@ var/list/has_died_as_golem = list()
primitive = /mob/living/carbon/monkey //Just to keep them SoC friendly.
+/datum/species/ghoul/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/slime
name = "Slime"
icobase = 'icons/mob/human_races/r_slime.dmi'
@@ -1124,6 +1187,10 @@ var/list/has_died_as_golem = list()
S.slime_person = H
H.forceMove(S)
+/datum/species/slime/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/mob/living/slime_pile //serves as the corpse of slime people
name = "puddle of slime"
desc = "The remains of a slime person."
@@ -1241,6 +1308,10 @@ var/list/has_died_as_golem = list()
However, you lack a mouth with which to talk. Instead you can remotely talk into somebodies mind should you examine them, or they talk to you.
\
You also have access to the Sporemind, which allows you to communicate with others on the Sporemind through :~"
+/datum/species/mushroom/gib(mob/living/carbon/human/H)
+ ..()
+ H.default_gib()
+
/datum/species/lich
name = "Undead"
icobase = 'icons/mob/human_races/r_lich.dmi'
@@ -1265,3 +1336,15 @@ var/list/has_died_as_golem = list()
A more refined version of the skellington, you're not as brittle, but not quite as fast.
\
You have no skin, no blood, and only a brain to guide you.
\
You can not eat normally, as your necrotic state permits you to only eat raw flesh. As you lack skin, you can not be injected via syringe."
+
+/datum/species/lich/gib(mob/living/carbon/human/H)
+ ..()
+ var/datum/organ/external/head_organ = H.get_organ(LIMB_HEAD)
+ if(head_organ.status & ORGAN_DESTROYED)
+ new /obj/effect/decal/remains/human/noskull(H.loc)
+ else
+ new /obj/effect/decal/remains/human(H.loc)
+ head_organ.droplimb(1,1)
+
+ H.drop_all()
+ qdel(src)