diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index 429e6d39fe..04476dae60 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -113,7 +113,7 @@ GLOBAL_LIST_INIT(paw_taurs, list( )) GLOBAL_LIST_INIT(blood_id_types, list( - "blood" = /datum/reagent/blood/human, + "blood" = /datum/reagent/blood, "syntheticblood" = /datum/reagent/blood/synthetics, "xenoblood" = /datum/reagent/blood/xenomorph, "oilblood" = /datum/reagent/blood/oil, diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 9060e7622e..5f52ae85ee 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -319,23 +319,29 @@ //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) - if(get_blood_id() != bluhduh) + var/datum/reagent/blood/B = bluhduh + if(get_blood_id() != B) 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) - if(get_blood_id() != bluhduh) + 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]") return var/list/blood_dna = list() if(dna) - blood_dna = get_blood_data(bluhduh) + blood_dna = get_blood_data(B) else blood_dna["UNKNOWN DNA"] = "X*" 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. @@ -380,12 +386,12 @@ /atom/proc/blood_DNA_to_color() var/list/colors = list()//first we make a list of all bloodtypes present - GET_COMPONENT(D, /datum/component/forensics) - for(var/bloop in D.blood_DNA) - if(colors[D.blood_DNA[bloop]]) - colors[D.blood_DNA[bloop]]++ + var/list/blood = return_blood_DNA() + for(var/bloop in blood) + if(colors[blood[bloop]]) + colors[blood[bloop]]++ else - colors[D.blood_DNA[bloop]] = 1 + colors[blood[bloop]] = 1 var/final_rgb = "#940000" diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index c42671509f..45e0b52dc8 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -26,13 +26,22 @@ random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") 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 var/direction = pick(directions) for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++) sleep(2) if(i > 0) - new /obj/effect/decal/cleanable/blood/xenoblood/xsplatter(loc) + var/list/datum/disease/diseases + GET_COMPONENT(infective, /datum/component/infective) + if(infective) + diseases = infective.diseases + var/obj/effect/decal/cleanable/blood/xenoblood/xsplatter/splat = new /obj/effect/decal/cleanable/blood/xenoblood/xsplatter(loc, diseases) + splat.color = color if(!step_to(src, get_step(src, direction), 0)) break @@ -63,10 +72,10 @@ /obj/effect/decal/cleanable/blood/xenoblood/xgibs/larva/body random_icon_states = list("xgiblarvahead", "xgiblarvatorso") -/obj/effect/decal/cleanable/blood/blood/xtracks +/obj/effect/decal/cleanable/blood/xenoblood/xtracks icon_state = "xtracks" random_icon_states = null -/obj/effect/decal/cleanable/blood/blood/xtracks/Initialize() +/obj/effect/decal/cleanable/blood/xenoblood/xtracks/Initialize() . = ..() - add_blood_DNA(list("donor"= "UNKNOWN DNA","bloodcolor" = BLOOD_COLOR_XENO, "blood_type"= "X*")) \ No newline at end of file + add_blood_DNA(list("UNKNOWN DNA" = "X*")) \ 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 cc98d882f8..08d215a37a 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -7,29 +7,29 @@ blood_state = BLOOD_STATE_BLOOD color = BLOOD_COLOR_HUMAN bloodiness = BLOOD_AMOUNT_PER_DECAL - -/obj/effect/decal/cleanable/blood/Initialize(mapload) - . = ..() - AddComponent(/datum/component/forensics) - update_icon() + var/bloodmeme = "" + var/data = "" /obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C) + if(!data) + C.data = add_blood_DNA(return_blood_DNA()) + if (bloodiness) + if (C.bloodiness < MAX_SHOE_BLOODINESS) + C.bloodiness += bloodiness + if(!bloodmeme) + C.bloodmeme = add_blood_DNA(return_blood_DNA()) update_icon() - ..() + return ..() -/obj/effect/decal/cleanable/blood/add_blood_DNA(list/blood_dna) - return TRUE +//obj/effect/decal/cleanable/blood/add_blood_DNA(list/blood_dna) +// return TRUE /obj/effect/decal/cleanable/blood/transfer_mob_blood_dna() . = ..() update_icon() /obj/effect/decal/cleanable/blood/update_icon() - 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"]) - color = bloodtype_to_color(R.data["blood_type"]) //Color the blood with our dna stuff + color = blood_DNA_to_color() /obj/effect/decal/cleanable/blood/old name = "dried blood" @@ -40,7 +40,7 @@ /obj/effect/decal/cleanable/blood/old/Initialize(mapload, list/datum/disease/diseases) . = ..() icon_state += "-old" //This IS necessary because the parent /blood type uses icon randomization. - add_blood_DNA(list("blood_type"= "A+", "bloodcolor" = color)) + add_blood_DNA(list("blood_type"= "A+")) /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") @@ -84,20 +84,22 @@ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") mergeable_decal = FALSE var/gib_overlay = FALSE - var/fleshcolor /obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases) . = ..() if(gib_overlay) - var/generic_skin = random_skin_tone() - var/ethnicity = "#[skintone2hex(generic_skin)]" var/image/gibz = image(icon, icon_state + "-overlay", layer = LOW_OBJ_LAYER-0.1) - if(!fleshcolor) - gibz.color = ethnicity - else - gibz.color = fleshcolor add_overlay(gibz) - reagents.add_reagent("liquidgibs", 5) + 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 @@ -117,7 +119,9 @@ GET_COMPONENT(infective, /datum/component/infective) if(infective) diseases = infective.diseases - new /obj/effect/decal/cleanable/blood/splatter(loc, 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 @@ -167,6 +171,54 @@ /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 @@ -186,9 +238,16 @@ var/mob/living/carbon/human/H = O var/obj/item/clothing/shoes/S = H.shoes if(S) - color = bloodtype_to_color(S.last_bloodtype) + if(S.last_bloodtype) + color = bloodtype_to_color(S.last_bloodtype) + else + color = bloodtype_to_color(bloodmeme) else - color = bloodtype_to_color(H.last_bloodtype) + if(H.last_bloodtype) + color = bloodtype_to_color(H.last_bloodtype) + else + color = bloodtype_to_color(bloodmeme) + if(S && S.bloody_shoes[blood_state]) S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0) @@ -208,9 +267,15 @@ var/mob/living/carbon/human/H = O var/obj/item/clothing/shoes/S = H.shoes if(S) - color = bloodtype_to_color(S.last_bloodtype) + if(S.last_bloodtype) + color = bloodtype_to_color(S.last_bloodtype) + else + color = bloodtype_to_color(bloodmeme) else - color = bloodtype_to_color(H.last_bloodtype) + if(H.last_bloodtype) + color = bloodtype_to_color(H.last_bloodtype) + else + color = bloodtype_to_color(bloodmeme) if(S && S.bloody_shoes[blood_state]) S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0) @@ -233,11 +298,13 @@ var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[print_state]-[Ddir]"] if(!bloodstep_overlay) GLOB.bloody_footprints_cache["entered-[print_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[print_state]1", dir = Ddir) + bloodstep_overlay.color = bloodtype_to_color(bloodmeme) add_overlay(bloodstep_overlay) if(exited_dirs & Ddir) var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[print_state]-[Ddir]"] if(!bloodstep_overlay) GLOB.bloody_footprints_cache["exited-[print_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[print_state]2", dir = Ddir) + bloodstep_overlay.color = bloodtype_to_color(bloodmeme) add_overlay(bloodstep_overlay) alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index 484e0438e2..4db00a1cc5 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -11,6 +11,10 @@ bloodiness = BLOOD_AMOUNT_PER_DECAL mergeable_decal = FALSE +/obj/effect/decal/cleanable/robot_debris/Initialize(mapload, list/datum/disease/diseases) + . = ..() + reagents.add_reagent("liquidoilgibs", 5) + /obj/effect/decal/cleanable/robot_debris/proc/streak(list/directions) set waitfor = 0 var/direction = pick(directions) diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 04130bc40b..76b445cfdc 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -3,6 +3,7 @@ var/sparks = 0 //whether sparks spread var/virusProb = 20 //the chance for viruses to spread on the gibs var/gib_mob_type //generate a fake mob to transfer DNA from if we weren't passed a mob. + var/gib_mob_species //We'll want to nip-pick their species for blood type stuff var/sound_to_play = 'sound/effects/blobattack.ogg' var/sound_vol = 60 var/list/gibtypes = list() //typepaths of the gib decals to spawn @@ -36,6 +37,10 @@ dna_to_add = source_mob.get_blood_dna_list() //ez pz else if(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) + if(ishuman(temp_mob)) + 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) else @@ -80,6 +85,7 @@ 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) gibamounts = list(1, 1, 1, 1, 1, 1, 1) gib_mob_type = /mob/living/carbon/human + gib_mob_species = /datum/species/human sound_vol = 50 /obj/effect/gibspawner/human/Initialize() @@ -97,6 +103,31 @@ 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/lizard + gib_mob_type = /mob/living/carbon/human + gib_mob_species = /datum/species/lizard + +/obj/effect/gibspawner/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/xeno @@ -104,6 +135,10 @@ 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()) @@ -153,4 +188,17 @@ 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 ..() \ No newline at end of file + 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) + 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 8062fef935..e07fe8b6ea 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -229,13 +229,16 @@ if(!(has_trait(TRAIT_NOCLONE))) return "blood" -/mob/living/carbon/human/get_blood_id() - if(dna.species.exotic_blood) - return dna.species.exotic_blood - else if((NOBLOOD in dna.species.species_traits) || (has_trait(TRAIT_NOCLONE))) - return null - else - 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 // 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/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 24abcc2474..bfb9ffec25 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -5,10 +5,26 @@ new /obj/effect/temp_visual/dust_animation(loc, "dust-h") /mob/living/carbon/human/spawn_gibs(with_bodyparts) - if(with_bodyparts) - new /obj/effect/gibspawner/human(drop_location(), dna, get_static_viruses()) + if(isjellyperson(src)) + if(with_bodyparts) + new /obj/effect/gibspawner/slimeperson(drop_location(), dna, get_static_viruses()) + else + new /obj/effect/gibspawner/slimeperson/bodypartless(drop_location(), dna, get_static_viruses()) + + if(isipcperson(src)) + new /obj/effect/gibspawner/ipc(drop_location(), dna, get_static_viruses()) + + if(isxenoperson(src)) + if(with_bodyparts) + new /obj/effect/gibspawner/xeno(drop_location(), dna, get_static_viruses()) + else + new /obj/effect/gibspawner/xeno/bodypartless(drop_location(), dna, get_static_viruses()) + else - new /obj/effect/gibspawner/human/bodypartless(drop_location(), dna, get_static_viruses()) + if(with_bodyparts) + new /obj/effect/gibspawner/human(drop_location(), dna, get_static_viruses()) + else + new /obj/effect/gibspawner/human/bodypartless(drop_location(), dna, get_static_viruses()) /mob/living/carbon/human/spawn_dust(just_ash = FALSE) if(just_ash) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 53d45d7666..cfc2b75453 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -66,7 +66,6 @@ FP.blood_state = S.blood_state FP.entered_dirs |= dir FP.bloodiness = S.bloody_shoes[S.blood_state] - FP.color = bloodtype_to_color(S.last_bloodtype) FP.update_icon() update_inv_shoes() //End bloody footprints @@ -109,7 +108,6 @@ FP.blood_state = blood_state FP.entered_dirs |= dir FP.bloodiness = blood_smear - BLOOD_LOSS_IN_SPREAD - FP.color = bloodtype_to_color(last_bloodtype) FP.update_icon() else //we're on the floor, smear some stuff around @@ -129,7 +127,6 @@ FP.blood_state = blood_state FP.entered_dirs |= dir FP.bloodiness = blood_smear - BLOOD_LOSS_IN_SPREAD - FP.color = bloodtype_to_color(last_bloodtype) FP.update_icon() diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index da06d81609..5c8c082d47 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -4,7 +4,7 @@ id = "jelly" default_color = "00FF90" say_mod = "chirps" - species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD) + species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR) mutant_bodyparts = list("mam_tail", "mam_ears", "mam_snouts", "taur") //CIT CHANGE default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_snouts" = "None", "taur" = "None") //CIT CHANGE inherent_traits = list(TRAIT_TOXINLOVER) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 6f5cdbfc6c..92c9c1e104 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -100,11 +100,16 @@ var/obj/effect/decal/cleanable/blood/B = locate() in T //find some blood here if(!B) B = new(T) - if(data) - B.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) - B.color = data["bloodcolor"] - -/datum/reagent/blood/human + if(!B.reagents) + B.reagents.add_reagent("blood", reac_volume) + for(var/datum/reagent/R in B.reagents.reagent_list) + // Get blood data from the blood reagent. + if(istype(R, /datum/reagent/blood)) + if(R.data["blood_type"]) + B.bloodmeme = R.data["blood_type"] + if(istype(R, /datum/reagent/liquidgibs)) + if(R.data["blood_type"]) + B.bloodmeme = R.data["blood_type"] /datum/reagent/blood/synthetics data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SYNTHETIC, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) @@ -113,6 +118,11 @@ taste_description = "oily" color = BLOOD_COLOR_SYNTHETIC // rgb: 11, 7, 48 +/datum/reagent/blood/synthetics/reaction_turf(turf/T, reac_volume) + var/obj/effect/decal/cleanable/blood/B = locate() in T //find some blood here + B.reagents.add_reagent("syntheticblood", reac_volume) + . = ..() + /datum/reagent/blood/xenomorph data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_XENO, "blood_type"="X*","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) name = "Xenomorph Blood" @@ -121,6 +131,11 @@ color = BLOOD_COLOR_XENO // greenish yellow ooze shot_glass_icon_state = "shotglassgreen" +/datum/reagent/blood/xenomorph/reaction_turf(turf/T, reac_volume) + var/obj/effect/decal/cleanable/blood/B = locate() in T //find some blood here + B.reagents.add_reagent("xenoblood", reac_volume) + . = ..() + /datum/reagent/blood/oil data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_OIL, "blood_type"="HF","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) name = "Hydraulic Blood" @@ -128,6 +143,11 @@ taste_description = "burnt oil" color = BLOOD_COLOR_OIL // dark, y'know, expected batman colors. +/datum/reagent/blood/oil/reaction_turf(turf/T, reac_volume) + var/obj/effect/decal/cleanable/blood/B = locate() in T //find some blood here + B.reagents.add_reagent("oilblood", reac_volume) + . = ..() + /datum/reagent/blood/jellyblood data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SLIME, "blood_type"="GEL","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) name = "Slime Jelly Blood" @@ -137,6 +157,21 @@ taste_description = "slime" taste_mult = 1.3 +/datum/reagent/blood/jellyblood/on_new(list/data) + .=..() + if(ishuman(src)) + var/mob/living/carbon/human/H = src + var/datum/species/slimecolor = H.dna.species + if("mcolor" in slimecolor.default_features) + color = H.dna.features["mcolor"] + else + color = bloodtype_to_color(data["blood_type"]) + +/datum/reagent/blood/jellyblood/reaction_turf(turf/T, reac_volume) + var/obj/effect/decal/cleanable/blood/B = locate() in T //find some blood here + B.reagents.add_reagent("jellyblood", reac_volume) + . = ..() + /datum/reagent/blood/jellyblood/on_mob_life(mob/living/carbon/M) if(prob(10)) to_chat(M, "Your insides are burning!") @@ -150,10 +185,42 @@ /datum/reagent/liquidgibs name = "Liquid gibs" id = "liquidgibs" - color = "#FF9966" + color = BLOOD_COLOR_HUMAN description = "You don't even want to think about what's in here." taste_description = "gross iron" shot_glass_icon_state = "shotglassred" + data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + +/datum/reagent/liquidgibs/xeno + name = "Liquid xeno gibs" + id = "liquidxenogibs" + color = BLOOD_COLOR_XENO + taste_description = "blended heresy" + shot_glass_icon_state = "shotglassgreen" + data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_XENO, "blood_type"="X*","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + +/datum/reagent/liquidgibs/slime + name = "Slime sludge" + id = "liquidslimegibs" + color = BLOOD_COLOR_SLIME + taste_description = "slime" + shot_glass_icon_state = "shotglassgreen" + data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SLIME, "blood_type"="GEL","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + +/datum/reagent/liquidgibs/synth + name = "Synthetic sludge" + id = "liquidsyntheticgibs" + color = BLOOD_COLOR_SYNTHETIC + taste_description = "jellied plastic" + data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SYNTHETIC, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + +/datum/reagent/liquidgibs/oil + name = "Hydraulic sludge" + id = "liquidoilgibs" + color = BLOOD_COLOR_OIL + taste_description = "chunky burnt oil" + data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_OIL, "blood_type"="HF","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + /datum/reagent/vaccine //data must contain virus type