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)