diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 426d23b4ab..36e363df25 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -317,7 +317,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event /obj/effect/meteor/meaty/xeno/ram_turf(turf/T) if(!isspaceturf(T)) - new /obj/effect/decal/cleanable/xenoblood(T) + new /obj/effect/decal/cleanable/blood/xenoblood(T) //Station buster Tunguska /obj/effect/meteor/tunguska diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index aa9a4757c8..6dee6b5e7b 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -3,7 +3,6 @@ /obj/effect/decal/cleanable/blood/xenoblood name = "xeno blood" desc = "It's green and acidic. It looks like... blood?" - icon = 'icons/effects/blood.dmi' blood_state = BLOOD_STATE_XENO color = BLOOD_COLOR_XENO @@ -15,19 +14,16 @@ name = "xeno gibs" desc = "Gnarly..." -/obj/effect/decal/cleanable/blood/xenoblood/xgibs/proc/streak(list/directions) +/obj/effect/decal/cleanable/blood/xenoblood/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) - new /obj/effect/decal/cleanable/xenoblood/xsplatter(loc) + new /obj/effect/decal/cleanable/blood/splatter(loc) if(!step_to(src, get_step(src, direction), 0)) break -/obj/effect/decal/cleanable/blood/xenoblood/xgibs/ex_act() - return - /obj/effect/decal/cleanable/blood/xenoblood/gibs/up random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1") diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 6996e107ba..2c4575f247 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -46,12 +46,11 @@ /obj/effect/decal/cleanable/blood/gibs name = "gibs" desc = "They look bloody and gruesome." - icon = 'icons/effects/blood.dmi' icon_state = "gibbl5" layer = LOW_OBJ_LAYER random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") mergeable_decal = FALSE - var/fleshcolor = "#FFFFFF" + var/fleshcolor /obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases) . = ..() @@ -61,18 +60,21 @@ return /obj/effect/decal/cleanable/blood/gibs/update_icon() - var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) - if(!fleshcolor || fleshcolor == "rainbow") - fleshcolor = "#[skintone2hex[random_skin_tone()]]" + var/generic_skin = random_skin_tone() + var/ethnicity = "#[skintone2hex(generic_skin)]" + + var/image/giblets = image(icon, "[icon_state]_flesh", dir) + if(!fleshcolor) + fleshcolor = ethnicity giblets.color = fleshcolor - var/icon/blood = new(base_icon,"[icon_state]",dir) - if(basecolor == "rainbow") basecolor = "#[skintone2hex[random_skin_tone()]]" - blood.Blend(basecolor,ICON_MULTIPLY) + for(var/datum/reagent/blood/B in reagents) + var/image/blood/goop = image(icon,"[icon_state]",dir) + goop.Blend(B.color,ICON_MULTIPLY) - icon = blood + icon = goop overlays.Cut() - overlays += giblets + add_overlay(giblets) /obj/effect/decal/cleanable/blood/gibs/Crossed(mob/living/L) if(istype(L) && has_gravity(loc)) diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index e99a2fcbc6..bc62ae95c0 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -5,6 +5,8 @@ var/list/gibtypes = list() //typepaths of the gib decals to spawn var/list/gibamounts = list() //amount to spawn for each gib decal type we'll spawn. var/list/gibdirections = list() //of lists of possible directions to spread each gib decal type towards. + var/fleshcolor + var/bloodcolor /obj/effect/gibspawner/Initialize(mapload, datum/dna/MobDNA, list/datum/disease/diseases) . = ..() @@ -13,6 +15,9 @@ to_chat(world, "Gib list length mismatch!") return + if(fleshcolor) src.fleshcolor = fleshcolor + if(bloodcolor) src.bloodcolor = bloodcolor + var/obj/effect/decal/cleanable/blood/gibs/gib = null if(sparks) @@ -25,13 +30,24 @@ for(var/j = 1, j<= gibamounts[i], j++) var/gibType = gibtypes[i] gib = new gibType(loc, diseases) + if(iscarbon(loc)) var/mob/living/carbon/digester = loc digester.stomach_contents += gib if(MobDNA) + var/list/blood_dna = MobDNA.get_blood_dna_list() + gib.add_blood_DNA(blood_dna) - else if(istype(src, /obj/effect/gibspawner/generic)) // Probably a monkey + // Apply human species colouration to masks. + if(fleshcolor) + gib.fleshcolor = fleshcolor + if(bloodcolor) + gib.color = bloodcolor + + gib.update_icon() + + if(istype(src, /obj/effect/gibspawner/generic)) // Probably a monkey gib.add_blood_DNA(list("Non-human DNA" = "A+")) var/list/directions = gibdirections[i] if(isturf(loc)) @@ -72,7 +88,7 @@ /obj/effect/gibspawner/xeno - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up, /obj/effect/decal/cleanable/xenoblood/xgibs/down, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/body, /obj/effect/decal/cleanable/xenoblood/xgibs/limb, /obj/effect/decal/cleanable/xenoblood/xgibs/core) + gibtypes = list(/obj/effect/decal/cleanable/blood/xenoblood/gibs/up, /obj/effect/decal/cleanable/blood/xenoblood/gibs/down, /obj/effect/decal/cleanable/blood/xenoblood/gibs, /obj/effect/decal/cleanable/blood/xenoblood/gibs, /obj/effect/decal/cleanable/blood/xenoblood/gibs/body, /obj/effect/decal/cleanable/blood/xenoblood/gibs/limb, /obj/effect/decal/cleanable/blood/xenoblood/gibs/core) gibamounts = list(1,1,1,1,1,1,1) /obj/effect/gibspawner/xeno/Initialize() @@ -82,7 +98,7 @@ /obj/effect/gibspawner/xenobodypartless //only the gibs that don't look like actual full bodyparts (except torso). - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/torso) + gibtypes = list(/obj/effect/decal/cleanable/blood/xenoblood/gibs, /obj/effect/decal/cleanable/blood/xenoblood/gibs/core, /obj/effect/decal/cleanable/blood/xenoblood/gibs, /obj/effect/decal/cleanable/blood/xenoblood/gibs/core, /obj/effect/decal/cleanable/blood/xenoblood/gibs, /obj/effect/decal/cleanable/blood/xenoblood/gibs/torso) gibamounts = list(1, 1, 1, 1, 1, 1) @@ -92,7 +108,7 @@ . = ..() /obj/effect/gibspawner/larva - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body) + gibtypes = list(/obj/effect/decal/cleanable/blood/xenoblood/gibs/larva, /obj/effect/decal/cleanable/blood/xenoblood/gibs/larva, /obj/effect/decal/cleanable/blood/xenoblood/gibs/larva/body, /obj/effect/decal/cleanable/blood/xenoblood/gibs/larva/body) gibamounts = list(1, 1, 1, 1) /obj/effect/gibspawner/larva/Initialize() @@ -101,7 +117,7 @@ . = ..() /obj/effect/gibspawner/larvabodypartless - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva) + gibtypes = list(/obj/effect/decal/cleanable/blood/xenoblood/gibs/larva, /obj/effect/decal/cleanable/blood/xenoblood/gibs/larva, /obj/effect/decal/cleanable/blood/xenoblood/gibs/larva) gibamounts = list(1, 1, 1) /obj/effect/gibspawner/larvabodypartless/Initialize() diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 325683df6e..e62e9160aa 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -190,6 +190,7 @@ if(!suiciding) blood_data["cloneable"] = 1 blood_data["blood_type"] = copytext(dna.blood_type,1,0) + blood_data["bloodcolor"] = blood_id.color blood_data["gender"] = gender blood_data["real_name"] = real_name blood_data["features"] = dna.features @@ -289,7 +290,7 @@ /mob/living/carbon/alien/add_splatter_floor(turf/T, small_drip) if(!T) T = get_turf(src) - var/obj/effect/decal/cleanable/xenoblood/B = locate() in T.contents + var/obj/effect/decal/cleanable/blood/xenoblood/B = locate() in T.contents if(!B) B = new(T) B.add_blood_DNA(list("UNKNOWN DNA" = "X*")) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 2a5fdeaa33..3fec41ad58 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -144,7 +144,7 @@ playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) //Makes the mob have the color of the blood pool it came out of var/newcolor = rgb(149, 10, 10) - if(istype(B, /obj/effect/decal/cleanable/xenoblood)) + if(istype(B, /obj/effect/decal/cleanable/blood/xenoblood)) newcolor = rgb(43, 186, 0) add_atom_colour(newcolor, TEMPORARY_COLOUR_PRIORITY) // but only for a few seconds diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 10fddfcb20..5ebfaf663b 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -20,7 +20,7 @@ var/heat_protection = 0.5 var/leaping = 0 - gib_type = /obj/effect/decal/cleanable/xenoblood/xgibs + gib_type = /obj/effect/decal/cleanable/blood/xenoblood/gibs unique_name = 1 var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?") diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index bc8dd0c3ab..d576ebddbf 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -155,7 +155,7 @@ else shuffle = TRUE //Shuffle the list the next time we scan so we dont both go the same way. path = list() - + if(!path || path.len == 0) //No path, need a new one //Try to produce a path to the target, and ignore airlocks to which it has access. path = get_path_to(src, target.loc, /turf/proc/Distance_cardinal, 0, 30, id=access_card) @@ -191,7 +191,7 @@ ) if(blood) - target_types += /obj/effect/decal/cleanable/xenoblood + target_types += /obj/effect/decal/cleanable/blood/xenoblood target_types += /obj/effect/decal/cleanable/blood target_types += /obj/effect/decal/cleanable/trail_holder diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm index c2d0a214b4..c4ef1253f7 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm @@ -39,7 +39,7 @@ animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck = 45, /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen = 55) - wanted_objects = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/gibs/) + wanted_objects = list(/obj/effect/decal/cleanable/blood/xenoblood/gibs, /obj/effect/decal/cleanable/blood/gibs/) var/obj/item/udder/gutlunch/udder = null /mob/living/simple_animal/hostile/asteroid/gutlunch/Initialize() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index a4a0bed102..ec7cd265f1 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1,8 +1,8 @@ /datum/reagent/blood - data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_color"=color, "blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + 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) name = "Blood" id = "blood" - color = "#C80000" // rgb: 200, 0, 0 + color = BLOOD_COLOR_HUMAN // rgb: 200, 0, 0 metabolization_rate = 5 //fast rate so it disappears fast. taste_description = "iron" taste_mult = 1.3 @@ -87,13 +87,19 @@ B = new(T) if(data["blood_DNA"]) B.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) + B.color = data["bloodcolor"] /datum/reagent/blood/synthetics - data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_color"=color, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + 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) name = "Synthetic Blood" id = "syntheticblood" - color = "#0b0730" // rgb: 11, 7, 48 + color = BLOOD_COLOR_SYNTHETIC // rgb: 11, 7, 48 +/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" + id = "xenoblood" + color = BLOOD_COLOR_XENO // greenish yellow ooze /datum/reagent/liquidgibs name = "Liquid gibs"