Change humanoid gibbing to use per species gib() act. (#24819)

* Unique gibbing proc for each humanoid species

* remove else add return

* Update species.dm

* Update species.dm

* im not sure what to title this

* remove as mob
This commit is contained in:
Ephememory
2019-11-11 11:20:53 -05:00
committed by Kurfursten
parent df6007eb94
commit 6f745d17fc
2 changed files with 94 additions and 3 deletions

View File

@@ -1,10 +1,17 @@
/mob/living/carbon/human/gib() /mob/living/carbon/human/gib()
if(species)
species.gib(src)
return
death(1) death(1)
monkeyizing = 1 monkeyizing = 1
canmove = 0 canmove = 0
icon = null icon = null
invisibility = 101 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) 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 if(istype(E, /datum/organ/external/chest) || istype(E, /datum/organ/external/groin)) //Really bad stuff happens when either get removed
continue continue
@@ -19,7 +26,8 @@
anim(target = src, a_icon = 'icons/mob/mob.dmi', flick_anim = "gibbed-h", sleeptime = 15) 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) 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) /mob/living/carbon/human/dust(var/drop_everything = FALSE)
death(1) death(1)

View File

@@ -157,6 +157,13 @@ var/global/list/whitelisted_species = list("Human")
myhuman = null 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) /datum/species/proc/handle_speech(var/datum/speech/speech, mob/living/carbon/human/H)
if(H.dna) if(H.dna)
if(length(speech.message) >= 2) 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 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 /datum/species/manifested
name = "Manifested" name = "Manifested"
icobase = 'icons/mob/human_races/r_manifested.dmi' 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() /datum/species/manifested/can_artifact_revive()
return 0 return 0
/datum/species/manifested/gib(mob/living/carbon/human/H)
handle_death(H)
/datum/species/unathi /datum/species/unathi
name = "Unathi" name = "Unathi"
icobase = 'icons/mob/human_races/r_lizard.dmi' 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", "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 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/ /datum/species/skellington // /vg/
name = "Skellington" name = "Skellington"
@@ -418,6 +435,19 @@ var/global/list/whitelisted_species = list("Human")
/datum/species/skellington/can_artifact_revive() /datum/species/skellington/can_artifact_revive()
return 0 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 /datum/species/skellington/skelevox // Science never goes too far, it's the public that's too conservative
name = "Skeletal Vox" name = "Skeletal Vox"
icobase = 'icons/mob/human_races/vox/r_voxboney.dmi' 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) speech.message = speech_filter.FilterSpeech(speech.message)
return ..() return ..()
/datum/species/tajaran/gib(mob/living/carbon/human/H)
..()
H.default_gib()
/datum/species/grey // /vg/ /datum/species/grey // /vg/
name = "Grey" name = "Grey"
icobase = 'icons/mob/human_races/r_grey.dmi' 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.<br>\ 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.<br>\
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." 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/ /datum/species/muton // /vg/
name = "Muton" name = "Muton"
icobase = 'icons/mob/human_races/r_muton.dmi' icobase = 'icons/mob/human_races/r_muton.dmi'
@@ -650,6 +688,10 @@ var/global/list/whitelisted_species = list("Human")
move_speed_mod = 1 move_speed_mod = 1
/datum/species/muton/gib(mob/living/carbon/human/H)
..()
H.default_gib()
/datum/species/skrell /datum/species/skrell
name = "Skrell" name = "Skrell"
icobase = 'icons/mob/human_races/r_skrell.dmi' 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' head_icons = 'icons/mob/species/skrell/head.dmi'
wear_suit_icons = 'icons/mob/species/skrell/suit.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 /datum/species/vox
name = "Vox" name = "Vox"
icobase = 'icons/mob/human_races/vox/r_vox.dmi' 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' icobase = 'icons/mob/human_races/vox/r_vox.dmi'
deform = 'icons/mob/human_races/vox/r_def_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 /datum/species/diona
name = "Diona" name = "Diona"
icobase = 'icons/mob/human_races/r_plant.dmi' 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.<br>\ 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.<br>\
However, as you are a plant, you are incredibly susceptible to burn damage, which is something you can not regenerate normally." 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 /datum/species/golem
name = "Golem" name = "Golem"
icobase = 'icons/mob/human_races/r_golem.dmi' 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() /datum/species/golem/can_artifact_revive()
return 0 return 0
/datum/species/golem/gib(mob/living/carbon/human/H)
handle_death()
/mob/living/adamantine_dust //serves as the corpse of adamantine golems /mob/living/adamantine_dust //serves as the corpse of adamantine golems
name = "adamantine dust" name = "adamantine dust"
desc = "The remains of an adamantine golem." desc = "The remains of an adamantine golem."
@@ -1059,7 +1115,10 @@ var/list/has_died_as_golem = list()
/datum/species/grue/makeName() /datum/species/grue/makeName()
return "grue" return "grue"
/datum/species/grue/gib(mob/living/carbon/human/H)
..()
H.default_gib()
/datum/species/ghoul /datum/species/ghoul
name = "Ghoul" name = "Ghoul"
icobase = 'icons/mob/human_races/r_ghoul.dmi' 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. 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 /datum/species/slime
name = "Slime" name = "Slime"
icobase = 'icons/mob/human_races/r_slime.dmi' icobase = 'icons/mob/human_races/r_slime.dmi'
@@ -1124,6 +1187,10 @@ var/list/has_died_as_golem = list()
S.slime_person = H S.slime_person = H
H.forceMove(S) 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 /mob/living/slime_pile //serves as the corpse of slime people
name = "puddle of slime" name = "puddle of slime"
desc = "The remains of a slime person." 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.<br>\ 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.<br>\
You also have access to the Sporemind, which allows you to communicate with others on the Sporemind through :~" 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 /datum/species/lich
name = "Undead" name = "Undead"
icobase = 'icons/mob/human_races/r_lich.dmi' 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.<br>\ A more refined version of the skellington, you're not as brittle, but not quite as fast.<br>\
You have no skin, no blood, and only a brain to guide you.<br>\ You have no skin, no blood, and only a brain to guide you.<br>\
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." 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)