From 7b6a65ce3b6af754fd1f5a39bb18599ef21f9ea2 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Thu, 9 May 2019 08:17:18 -0500 Subject: [PATCH] okay we're starting to pass our blood type to bloodmeme now STILL JUST FUCKING FOOTSTEPS LEFT THO GOD FUCKING DAMNIT --- code/__HELPERS/_cit_helpers.dm | 11 +- code/datums/dna.dm | 8 + code/game/atoms.dm | 27 +-- .../effects/decals/cleanable/aliens.dm | 2 +- .../objects/effects/decals/cleanable/gibs.dm | 158 ++++++++++++++++++ .../effects/decals/cleanable/humans.dm | 157 ++--------------- .../effects/decals/cleanable/robots.dm | 1 + .../objects/effects/spawners/gibspawner.dm | 80 +++++---- code/modules/mob/living/blood.dm | 26 ++- code/modules/mob/living/brain/brain.dm | 13 +- code/modules/mob/living/carbon/human/death.dm | 10 +- .../mob/living/carbon/human/species.dm | 22 ++- .../carbon/human/species_types/jellypeople.dm | 2 +- tgstation.dme | 1 + 14 files changed, 299 insertions(+), 219 deletions(-) create mode 100644 code/game/objects/effects/decals/cleanable/gibs.dm diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index 04476dae60..0dd0bc2953 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -30,8 +30,6 @@ proc/get_racelist(var/mob/user)//This proc returns a list of species that 'user' GLOB.whitelisted_species_list[S.id] = S.type return GLOB.whitelisted_species_list - //blood types -GLOBAL_LIST_INIT(blood_types, list("blood","syntheticblood","xenoblood","oilblood","jellyblood")) //Mammal Species GLOBAL_LIST_EMPTY(mam_body_markings_list) @@ -112,6 +110,15 @@ GLOBAL_LIST_INIT(paw_taurs, list( "Tiger" )) + //blood types +GLOBAL_LIST_INIT(blood_types, list( + "blood", + "syntheticblood", + "xenoblood", + "oilblood", + "jellyblood" + )) + GLOBAL_LIST_INIT(blood_id_types, list( "blood" = /datum/reagent/blood, "syntheticblood" = /datum/reagent/blood/synthetics, diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 938515625d..ce891e9f1e 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -322,6 +322,14 @@ if(!dna.species) var/rando_race = pick(GLOB.roundstart_races) dna.species = new rando_race() + if(isjellyperson(dna.species)) + dna.blood_type = "GEL" + if(isipcperson(dna.species)) + dna.blood_type = "HF" + if(isxenoperson(dna.species)) + dna.blood_type = "X*" + if(islizard(dna.species)) + dna.blood_type = "L" //proc used to update the mob's appearance after its dna UI has been changed /mob/living/carbon/proc/updateappearance(icon_update=1, mutcolor_update=0, mutations_overlay_update=0) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 5f52ae85ee..179f0c6ee4 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -319,29 +319,34 @@ //returns the mob's dna info as a list, to be inserted in an object's blood_DNA list /mob/living/proc/get_blood_dna_list() - to_chat(world, "living's get_blood_dna_list called") - for(var/bluhduh in GLOB.blood_types) - var/datum/reagent/blood/B = bluhduh - if(get_blood_id() != B) - return + if(get_blood_id() != "blood") + return return list("ANIMAL DNA" = "Y-") /mob/living/carbon/get_blood_dna_list() to_chat(world, "carbon's get_blood_dna_list called by [src]") - for(var/bluhduh in GLOB.blood_types) - var/datum/reagent/blood/B = bluhduh - if(get_blood_id() != B) - to_chat(world, "[src] apparently doesn't have a valid blood type of [B]") + var/blood_id = get_blood_id() + to_chat(world, "We got [blood_id] for a return") + for(var/B in GLOB.blood_id_types) + to_chat(world, "checking blood_id_types") + var/list/bluhduh = typecacheof(B) + to_chat(world, "We bluhduh now, let's compare with [blood_id] now") + if(!blood_id in bluhduh) + to_chat(world, "[src] apparently doesn't have a valid blood type of blood, we're returning null due to [bluhduh]") return + to_chat(world, "[src] has an approved type of blood.") var/list/blood_dna = list() + to_chat(world, "blood_dna list made.") if(dna) - blood_dna = get_blood_data(B) + to_chat(world, "[src] has dna, we know the bloodtype to be [dna.blood_type].") + blood_dna[dna.unique_enzymes] = dna.blood_type else + to_chat(world, "[src] doesn't have dna I guess.") blood_dna["UNKNOWN DNA"] = "X*" + to_chat(world, "blood_dna is [blood_dna]") return blood_dna /mob/living/carbon/alien/get_blood_dna_list() - to_chat(world, "alien's get_blood_dna_list called") return list("UNKNOWN DNA" = "X*") //to add a mob's dna info into an object's blood_DNA list. diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index 45e0b52dc8..e4fcbb8dd8 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -27,8 +27,8 @@ mergeable_decal = FALSE /obj/effect/decal/cleanable/blood/xenoblood/xgibs/Initialize(mapload, list/datum/disease/diseases) - . = ..() reagents.add_reagent("liquidxenogibs", 5) + . = ..() /obj/effect/decal/cleanable/blood/xenoblood/xgibs/proc/streak(list/directions) set waitfor = 0 diff --git a/code/game/objects/effects/decals/cleanable/gibs.dm b/code/game/objects/effects/decals/cleanable/gibs.dm new file mode 100644 index 0000000000..855e04942c --- /dev/null +++ b/code/game/objects/effects/decals/cleanable/gibs.dm @@ -0,0 +1,158 @@ +/obj/effect/decal/cleanable/blood/gibs + name = "gibs" + desc = "They look bloody and gruesome." + icon_state = "gibbl5" + layer = LOW_OBJ_LAYER + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") + mergeable_decal = FALSE + var/gib_overlay = FALSE + +/obj/effect/decal/cleanable/blood/gibs/proc/guts() + if(gib_overlay) + var/icon/gibz = new(icon, icon_state + "-overlay") + add_overlay(gibz) + +/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target) + return + +/obj/effect/decal/cleanable/blood/gibs/Crossed(mob/living/L) + if(istype(L) && has_gravity(loc)) + playsound(loc, 'sound/effects/gib_step.ogg', L.has_trait(TRAIT_LIGHT_STEP) ? 20 : 50, 1) + . = ..() + +/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions) + set waitfor = 0 + var/direction = pick(directions) + for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++) + sleep(2) + if(i > 0) + var/list/datum/disease/diseases + GET_COMPONENT(infective, /datum/component/infective) + if(infective) + diseases = infective.diseases + var/obj/effect/decal/cleanable/blood/splatter/splat = new /obj/effect/decal/cleanable/blood/splatter(loc, diseases) + splat.color = color + splat.bloodmeme = bloodmeme + if(!step_to(src, get_step(src, direction), 0)) + break + +/obj/effect/decal/cleanable/blood/gibs/up + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/down + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/body + random_icon_states = list("gibhead", "gibtorso") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/torso + random_icon_states = list("gibtorso") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/limb + random_icon_states = list("gibleg", "gibarm") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/core + random_icon_states = list("gibmid1", "gibmid2", "gibmid3") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/old + name = "old rotting gibs" + desc = "Space Jesus, why didn't anyone clean this up? It smells terrible." + bloodiness = 0 + +/obj/effect/decal/cleanable/blood/gibs/old/Initialize(mapload, list/datum/disease/diseases) + . = ..() + setDir(pick(1,2,4,8)) + icon_state += "-old" + add_blood_DNA(list("Non-human DNA" = "A+")) + +/obj/effect/decal/cleanable/blood/drip + name = "drips of blood" + desc = "It's gooey." + icon_state = "1" + random_icon_states = list("drip1","drip2","drip3","drip4","drip5") + bloodiness = 0 + var/drips = 1 + +/obj/effect/decal/cleanable/blood/drip/can_bloodcrawl_in() + return TRUE + +/obj/effect/decal/cleanable/blood/gibs/human + +/obj/effect/decal/cleanable/blood/gibs/human/Initialize(mapload, list/datum/disease/diseases) + . = ..() + reagents.add_reagent("liquidgibs", 5) + update_icon() + guts() + +/obj/effect/decal/cleanable/blood/gibs/human/up + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/human/down + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/human/body + random_icon_states = list("gibhead", "gibtorso") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/human/torso + random_icon_states = list("gibtorso") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/human/limb + random_icon_states = list("gibleg", "gibarm") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/human/core + random_icon_states = list("gibmid1", "gibmid2", "gibmid3") + gib_overlay = TRUE + +// Slime Gibs +/obj/effect/decal/cleanable/blood/gibs/slime + desc = "They look gooey and gruesome." + +/obj/effect/decal/cleanable/blood/gibs/slime/Initialize(mapload, list/datum/disease/diseases) + . = ..() + reagents.add_reagent("liquidslimegibs", 5) + update_icon() + guts() + +/obj/effect/decal/cleanable/blood/gibs/slime/up + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/slime/down + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/slime/body + random_icon_states = list("gibhead", "gibtorso") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/slime/torso + random_icon_states = list("gibtorso") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/slime/limb + random_icon_states = list("gibleg", "gibarm") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/slime/core + random_icon_states = list("gibmid1", "gibmid2", "gibmid3") + gib_overlay = TRUE + +/obj/effect/decal/cleanable/blood/gibs/synth + desc = "They look sludgy and disgusting." + +/obj/effect/decal/cleanable/blood/gibs/synth/Initialize(mapload, list/datum/disease/diseases) + . = ..() + reagents.add_reagent("liquidsyntheticgibs", 5) + update_icon() + guts() \ No newline at end of file diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 08d215a37a..87b4d00cdf 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -29,7 +29,18 @@ update_icon() /obj/effect/decal/cleanable/blood/update_icon() - color = blood_DNA_to_color() + for(var/datum/reagent/R in reagents.reagent_list) + // Get blood data from the blood reagent. + if(istype(R, /datum/reagent/blood)) + if(R.data["blood_type"]) + bloodmeme = R.data["blood_type"] + color = bloodtype_to_color(R.data["blood_type"]) + else if(istype(R, /datum/reagent/liquidgibs)) + if(R.data["blood_type"]) + bloodmeme = R.data["blood_type"] + color = bloodtype_to_color(R.data["blood_type"]) + else + color = blood_DNA_to_color() /obj/effect/decal/cleanable/blood/old name = "dried blood" @@ -76,150 +87,6 @@ . = ..() update_icon() -/obj/effect/decal/cleanable/blood/gibs - name = "gibs" - desc = "They look bloody and gruesome." - icon_state = "gibbl5" - layer = LOW_OBJ_LAYER - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") - mergeable_decal = FALSE - var/gib_overlay = FALSE - -/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases) - . = ..() - if(gib_overlay) - var/image/gibz = image(icon, icon_state + "-overlay", layer = LOW_OBJ_LAYER-0.1) - add_overlay(gibz) - if(!reagents) - reagents.add_reagent("liquidgibs", 5) - for(var/datum/reagent/R in reagents.reagent_list) - // Get blood data from the blood reagent. - if(istype(R, /datum/reagent/blood)) - if(R.data["blood_type"]) - bloodmeme = R.data["blood_type"] - if(istype(R, /datum/reagent/liquidgibs)) - if(R.data["blood_type"]) - bloodmeme = R.data["blood_type"] - -/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target) - return - -/obj/effect/decal/cleanable/blood/gibs/Crossed(mob/living/L) - if(istype(L) && has_gravity(loc)) - playsound(loc, 'sound/effects/gib_step.ogg', L.has_trait(TRAIT_LIGHT_STEP) ? 20 : 50, 1) - . = ..() - -/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions) - set waitfor = 0 - var/direction = pick(directions) - for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++) - sleep(2) - if(i > 0) - var/list/datum/disease/diseases - GET_COMPONENT(infective, /datum/component/infective) - if(infective) - diseases = infective.diseases - var/obj/effect/decal/cleanable/blood/splatter/splat = new /obj/effect/decal/cleanable/blood/splatter(loc, diseases) - splat.color = color - splat.bloodmeme = bloodmeme - if(!step_to(src, get_step(src, direction), 0)) - break - -/obj/effect/decal/cleanable/blood/gibs/up - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/down - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/body - random_icon_states = list("gibhead", "gibtorso") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/torso - random_icon_states = list("gibtorso") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/limb - random_icon_states = list("gibleg", "gibarm") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/core - random_icon_states = list("gibmid1", "gibmid2", "gibmid3") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/old - name = "old rotting gibs" - desc = "Space Jesus, why didn't anyone clean this up? It smells terrible." - bloodiness = 0 - -/obj/effect/decal/cleanable/blood/gibs/old/Initialize(mapload, list/datum/disease/diseases) - . = ..() - setDir(pick(1,2,4,8)) - icon_state += "-old" - add_blood_DNA(list("Non-human DNA" = "A+")) - -/obj/effect/decal/cleanable/blood/drip - name = "drips of blood" - desc = "It's gooey." - icon_state = "1" - random_icon_states = list("drip1","drip2","drip3","drip4","drip5") - bloodiness = 0 - var/drips = 1 - -/obj/effect/decal/cleanable/blood/drip/can_bloodcrawl_in() - return TRUE - -/obj/effect/decal/cleanable/blood/gibs/slime - desc = "They look gooey and gruesome." - -/obj/effect/decal/cleanable/blood/gibs/slime/Initialize(mapload, list/datum/disease/diseases) - . = ..() - if(gib_overlay) - var/image/gibz = image(icon, icon_state + "-overlay", layer = LOW_OBJ_LAYER-0.1) - add_overlay(gibz) - reagents.add_reagent("liquidslimegibs", 5) - for(var/datum/reagent/R in reagents.reagent_list) - // Get blood data from the blood reagent. - if(istype(R, /datum/reagent/blood)) - if(R.data["blood_type"]) - bloodmeme = R.data["blood_type"] - if(istype(R, /datum/reagent/liquidgibs)) - if(R.data["blood_type"]) - bloodmeme = R.data["blood_type"] - -/obj/effect/decal/cleanable/blood/gibs/slime/up - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/slime/down - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/slime/body - random_icon_states = list("gibhead", "gibtorso") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/slime/torso - random_icon_states = list("gibtorso") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/slime/limb - random_icon_states = list("gibleg", "gibarm") - gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/slime/core - random_icon_states = list("gibmid1", "gibmid2", "gibmid3") - gib_overlay = TRUE -/obj/effect/decal/cleanable/blood/gibs/synth - desc = "They look sludgy and disgusting." - -/obj/effect/decal/cleanable/blood/gibs/synth/Initialize(mapload, list/datum/disease/diseases) - . = ..() - reagents.add_reagent("liquidsyntheticgibs", 5) - - //BLOODY FOOTPRINTS /obj/effect/decal/cleanable/blood/footprints name = "tracks" diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index 4db00a1cc5..02bf51bdd9 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -54,6 +54,7 @@ /obj/effect/decal/cleanable/oil/Initialize() . = ..() reagents.add_reagent("oil", 30) + reagents.add_reagent("liquidoilgibs", 5) /obj/effect/decal/cleanable/oil/streak random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5") diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 76b445cfdc..4aaec7cf3e 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -33,16 +33,36 @@ var/list/dna_to_add //find the dna to pass to the spawned gibs. do note this can be null if the mob doesn't have blood. add_blood_DNA() has built in null handling. + to_chat(world, "Attempting to add DNA to pass to gibs") if(source_mob) + to_chat(world, "We got a source mob, [source_mob]") dna_to_add = source_mob.get_blood_dna_list() //ez pz else if(gib_mob_type) + to_chat(world, "We got a mob type, [gib_mob_type]") var/mob/living/temp_mob = new gib_mob_type(src) //generate a fake mob so that we pull the right type of DNA for the gibs. if(gib_mob_species) + to_chat(world, "We got a mob species too, [gib_mob_species]") if(ishuman(temp_mob)) + to_chat(world, "it's a human type mob for sure") var/mob/living/carbon/human/H = temp_mob H.set_species(gib_mob_species) - dna_to_add = temp_mob.get_blood_dna_list() - qdel(temp_mob) + if(isjellyperson(H)) + H.dna.blood_type = "GEL" + if(isipcperson(H)) + H.dna.blood_type = "HF" + if(isxenoperson(H)) + H.dna.blood_type = "X*" + if(islizard(H)) + H.dna.blood_type = "L" + to_chat(world, "temp_mob is a [H.dna.species]") + dna_to_add = temp_mob.get_blood_dna_list() + qdel(H) + else + dna_to_add = temp_mob.get_blood_dna_list() + qdel(temp_mob) + else + dna_to_add = temp_mob.get_blood_dna_list() + qdel(temp_mob) else dna_to_add = list("Non-human DNA" = random_blood_type()) //else, generate a random bloodtype for it. @@ -57,6 +77,8 @@ digester.stomach_contents += gib gib.add_blood_DNA(dna_to_add) + // color them properly, please. + gib.update_icon() var/list/directions = gibdirections[i] if(isturf(loc)) @@ -82,7 +104,7 @@ /obj/effect/gibspawner/human - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up, /obj/effect/decal/cleanable/blood/gibs/down, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/body, /obj/effect/decal/cleanable/blood/gibs/limb, /obj/effect/decal/cleanable/blood/gibs/core) + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/human/up, /obj/effect/decal/cleanable/blood/gibs/human/down, /obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/body, /obj/effect/decal/cleanable/blood/gibs/human/limb, /obj/effect/decal/cleanable/blood/gibs/human/core) gibamounts = list(1, 1, 1, 1, 1, 1, 1) gib_mob_type = /mob/living/carbon/human gib_mob_species = /datum/species/human @@ -95,7 +117,7 @@ /obj/effect/gibspawner/human/bodypartless //only the gibs that don't look like actual full bodyparts (except torso). - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/torso) + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/core, /obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/core, /obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/torso) gibamounts = list(1, 1, 1, 1, 1, 1) /obj/effect/gibspawner/human/bodypartless/Initialize() @@ -104,58 +126,43 @@ return ..() /obj/effect/gibspawner/human/lizard - gib_mob_type = /mob/living/carbon/human gib_mob_species = /datum/species/lizard -/obj/effect/gibspawner/slimeperson +/obj/effect/gibspawner/human/lizard/bodypartless + +/obj/effect/gibspawner/human/slimeperson gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/slime/up, /obj/effect/decal/cleanable/blood/gibs/slime/down, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/body, /obj/effect/decal/cleanable/blood/gibs/slime/limb, /obj/effect/decal/cleanable/blood/gibs/slime/core) - gibamounts = list(1, 1, 1, 1, 1, 1, 1) - sound_vol = 50 - gib_mob_type = /mob/living/carbon/human + gib_mob_species = /datum/species/jelly -/obj/effect/gibspawner/slimeperson/Initialize() - if(!gibdirections.len) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list()) - return ..() - - -/obj/effect/gibspawner/slimeperson/bodypartless //only the gibs that don't look like actual full bodyparts (except torso). - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/torso) - gibamounts = list(1, 1, 1, 1, 1, 1) - -/obj/effect/gibspawner/slimeperson/bodypartless/Initialize() - if(!gibdirections.len) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) - return ..() - +/obj/effect/gibspawner/human/slimeperson/bodypartless + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/torso) + gibamounts = list(2, 0, 1, 1, 2, 0) /obj/effect/gibspawner/xeno gibtypes = list(/obj/effect/decal/cleanable/blood/xenoblood/xgibs/up, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/down, /obj/effect/decal/cleanable/blood/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/body, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/limb, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/core) gibamounts = list(1, 1, 1, 1, 1, 1, 1) gib_mob_type = /mob/living/carbon/alien -/obj/effect/gibspawner/xeno/xenoperson - gib_mob_type = /mob/living/carbon/human - gib_mob_species = /datum/species/xeno - /obj/effect/gibspawner/xeno/Initialize() if(!gibdirections.len) gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list()) return ..() - /obj/effect/gibspawner/xeno/bodypartless //only the gibs that don't look like actual full bodyparts (except torso). gibtypes = list(/obj/effect/decal/cleanable/blood/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/core, /obj/effect/decal/cleanable/blood/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/core, /obj/effect/decal/cleanable/blood/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/torso) gibamounts = list(1, 1, 1, 1, 1, 1) - /obj/effect/gibspawner/xeno/bodypartless/Initialize() if(!gibdirections.len) gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) return ..() +/obj/effect/gibspawner/xeno/xenoperson + gib_mob_type = /mob/living/carbon/human + gib_mob_species = /datum/species/xeno +/obj/effect/gibspawner/xeno/xenoperson/bodypartless /obj/effect/gibspawner/larva gibtypes = list(/obj/effect/decal/cleanable/blood/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/larva/body, /obj/effect/decal/cleanable/blood/xenoblood/xgibs/larva/body) @@ -176,8 +183,6 @@ gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list()) return ..() - - /obj/effect/gibspawner/robot sparks = 1 gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up, /obj/effect/decal/cleanable/robot_debris/down, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris/limb) @@ -190,15 +195,6 @@ gibamounts[6] = pick(0, 1, 2) return ..() -/obj/effect/gibspawner/ipc - sparks = 1 - gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up, /obj/effect/decal/cleanable/robot_debris/down, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris/limb) - gibamounts = list(1, 1, 1, 1, 1, 1) +/obj/effect/gibspawner/robot/ipc gib_mob_type = /mob/living/carbon/human gib_mob_species = /datum/species/ipc - -/obj/effect/gibspawner/ipc/Initialize() - if(!gibdirections.len) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs) - gibamounts[6] = pick(0, 1, 2) - return ..() diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index e07fe8b6ea..bcc42acc1e 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -230,15 +230,23 @@ return "blood" /mob/living/carbon/get_blood_id() - var/mob/living/carbon/human/H = src - for(var/bluhduh in GLOB.blood_types[H.dna.species.exotic_blood]) - if(!bluhduh) - to_chat(world, "[H] has [H.dna.species.exotic_blood] for blood") - return H.dna.species.exotic_blood - else if((NOBLOOD in H.dna.species.species_traits) || (has_trait(TRAIT_NOCLONE))) - return null - else - return bluhduh + to_chat(world, "carbon's get blood id called") + var/mob/living/carbon/C = src + if(ishuman(C)) + to_chat(world, "[C] is a [dna.species]") + var/mob/living/carbon/human/H = C + if(H.dna.species.exotic_blood) + to_chat(world, "[H] has [H.dna.species.exotic_blood]") + return "[H.dna.species.exotic_blood]" + if(dna.species.exotic_blood) + to_chat(world, "[src] apparently isn't a human. but has exotic blood, [dna.species.exotic_blood].") + return dna.species.exotic_blood + else if((NOBLOOD in dna.species.species_traits) || (has_trait(TRAIT_NOCLONE))) + to_chat(world, "[src] apparently isn't a human. And has no clone or no blood") + return + else + to_chat(world, "[src] apparently isn't a human, doesn't have snowflake blood either or something.") + return "blood" // This is has more potential uses, and is probably faster than the old proc. /proc/get_safe_blood(bloodtype) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 76b416772e..2f1afeac6f 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -9,7 +9,10 @@ /mob/living/brain/Initialize() . = ..() create_dna(src) - stored_dna.initialize_dna(random_blood_type()) + if(stored_dna.blood_type) + stored_dna.initialize_dna(stored_dna.blood_type) + else + stored_dna.initialize_dna(random_blood_type()) if(isturf(loc)) //not spawned in an MMI or brain organ (most likely adminspawned) var/obj/item/organ/brain/OB = new(loc) //we create a new brain organ for it. OB.brainmob = src @@ -20,6 +23,14 @@ if(!stored_dna.species) var/rando_race = pick(GLOB.roundstart_races) stored_dna.species = new rando_race() + if(isjellyperson(stored_dna.species)) + stored_dna.blood_type = "GEL" + if(isipcperson(stored_dna.species)) + stored_dna.blood_type = "HF" + if(isxenoperson(stored_dna.species)) + stored_dna.blood_type = "X*" + if(islizard(stored_dna.species)) + stored_dna.blood_type = "L" /mob/living/brain/Destroy() if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index bfb9ffec25..9c2a082b1f 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -7,18 +7,18 @@ /mob/living/carbon/human/spawn_gibs(with_bodyparts) if(isjellyperson(src)) if(with_bodyparts) - new /obj/effect/gibspawner/slimeperson(drop_location(), dna, get_static_viruses()) + new /obj/effect/gibspawner/human/slimeperson(drop_location(), dna, get_static_viruses()) else - new /obj/effect/gibspawner/slimeperson/bodypartless(drop_location(), dna, get_static_viruses()) + new /obj/effect/gibspawner/human/slimeperson/bodypartless(drop_location(), dna, get_static_viruses()) if(isipcperson(src)) - new /obj/effect/gibspawner/ipc(drop_location(), dna, get_static_viruses()) + new /obj/effect/gibspawner/robot/ipc(drop_location(), dna, get_static_viruses()) if(isxenoperson(src)) if(with_bodyparts) - new /obj/effect/gibspawner/xeno(drop_location(), dna, get_static_viruses()) + new /obj/effect/gibspawner/xeno/xenoperson(drop_location(), dna, get_static_viruses()) else - new /obj/effect/gibspawner/xeno/bodypartless(drop_location(), dna, get_static_viruses()) + new /obj/effect/gibspawner/xeno/xenoperson/bodypartless(drop_location(), dna, get_static_viruses()) else if(with_bodyparts) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index e2e9e5149f..d3eb4bafa0 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -268,7 +268,16 @@ GLOBAL_LIST_EMPTY(roundstart_races) regenerate_organs(C,old_species) if(exotic_bloodtype && C.dna.blood_type != exotic_bloodtype) - C.dna.blood_type = exotic_bloodtype + if(isjellyperson(C)) + C.dna.blood_type = "GEL" + if(isipcperson(C)) + C.dna.blood_type = "HF" + if(isxenoperson(C)) + C.dna.blood_type = "X*" + if(islizard(C)) + C.dna.blood_type = "L" + else + C.dna.blood_type = exotic_bloodtype if(old_species.mutanthands) for(var/obj/item/I in C.held_items) @@ -304,7 +313,16 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) if(C.dna.species.exotic_bloodtype) - C.dna.blood_type = random_blood_type() + if(isjellyperson(C)) + C.dna.blood_type = "GEL" + if(isipcperson(C)) + C.dna.blood_type = "HF" + if(isxenoperson(C)) + C.dna.blood_type = "X*" + if(islizard(C)) + C.dna.blood_type = "L" + else + C.dna.blood_type = random_blood_type() if(DIGITIGRADE in species_traits) C.Digitigrade_Leg_Swap(TRUE) for(var/X in inherent_traits) diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index b4eec5786a..b8f79780aa 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -8,7 +8,7 @@ id = "slimeperson" limbs_id = "slime" default_color = "00FFFF" - species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD) + species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR) inherent_traits = list(TRAIT_TOXINLOVER) mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur") default_features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None") diff --git a/tgstation.dme b/tgstation.dme index fdb11dea5e..7037d50cb7 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -729,6 +729,7 @@ #include "code\game\objects\effects\decals\misc.dm" #include "code\game\objects\effects\decals\remains.dm" #include "code\game\objects\effects\decals\cleanable\aliens.dm" +#include "code\game\objects\effects\decals\cleanable\gibs.dm" #include "code\game\objects\effects\decals\cleanable\humans.dm" #include "code\game\objects\effects\decals\cleanable\misc.dm" #include "code\game\objects\effects\decals\cleanable\robots.dm"