diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 709a4daeba..f71620d562 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -177,6 +177,12 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache) #define BLOOD_STATE_NOT_BLOODY "no blood whatsoever" #define BLOOD_AMOUNT_PER_DECAL 20 +//Blood Decal Colors +#define BLOOD_COLOR_HUMAN "#C80000" +#define BLOOD_COLOR_XENO "#94a83c" +#define BLOOD_COLOR_OIL "#000000" +#define BLOOD_COLOR_SYNTHETIC "#0b0730" + //suit sensors: sensor_mode defines #define SENSOR_OFF 0 diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index ca2a8ccaff..aa9a4757c8 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -1,31 +1,21 @@ // Note: BYOND is object oriented. There is no reason for this to be copy/pasted blood code. -/obj/effect/decal/cleanable/xenoblood +/obj/effect/decal/cleanable/blood/xenoblood name = "xeno blood" desc = "It's green and acidic. It looks like... blood?" icon = 'icons/effects/blood.dmi' - icon_state = "xfloor1" - random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") - bloodiness = BLOOD_AMOUNT_PER_DECAL blood_state = BLOOD_STATE_XENO + color = BLOOD_COLOR_XENO -/obj/effect/decal/cleanable/xenoblood/Initialize() +/obj/effect/decal/cleanable/blood/xenoblood/Initialize() . = ..() add_blood_DNA(list("UNKNOWN DNA" = "X*")) -/obj/effect/decal/cleanable/xenoblood/xsplatter - random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5") - -/obj/effect/decal/cleanable/xenoblood/xgibs +/obj/effect/decal/cleanable/blood/xenoblood/gibs name = "xeno gibs" desc = "Gnarly..." - icon = 'icons/effects/blood.dmi' - icon_state = "xgib1" - layer = LOW_OBJ_LAYER - random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") - mergeable_decal = FALSE -/obj/effect/decal/cleanable/xenoblood/xgibs/proc/streak(list/directions) +/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++) @@ -35,37 +25,36 @@ if(!step_to(src, get_step(src, direction), 0)) break -/obj/effect/decal/cleanable/xenoblood/xgibs/ex_act() +/obj/effect/decal/cleanable/blood/xenoblood/xgibs/ex_act() return -/obj/effect/decal/cleanable/xenoblood/xgibs/up +/obj/effect/decal/cleanable/blood/xenoblood/gibs/up random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1") -/obj/effect/decal/cleanable/xenoblood/xgibs/down +/obj/effect/decal/cleanable/blood/xenoblood/gibs/down random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibdown1","xgibdown1","xgibdown1") -/obj/effect/decal/cleanable/xenoblood/xgibs/body +/obj/effect/decal/cleanable/blood/xenoblood/gibs/body random_icon_states = list("xgibhead", "xgibtorso") -/obj/effect/decal/cleanable/xenoblood/xgibs/torso +/obj/effect/decal/cleanable/blood/xenoblood/gibs/torso random_icon_states = list("xgibtorso") -/obj/effect/decal/cleanable/xenoblood/xgibs/limb +/obj/effect/decal/cleanable/blood/xenoblood/gibs/limb random_icon_states = list("xgibleg", "xgibarm") -/obj/effect/decal/cleanable/xenoblood/xgibs/core +/obj/effect/decal/cleanable/blood/xenoblood/gibs/core random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3") -/obj/effect/decal/cleanable/xenoblood/xgibs/larva +/obj/effect/decal/cleanable/blood/xenoblood/gibs/larva random_icon_states = list("xgiblarva1", "xgiblarva2") -/obj/effect/decal/cleanable/xenoblood/xgibs/larva/body +/obj/effect/decal/cleanable/blood/xenoblood/gibs/larva/body random_icon_states = list("xgiblarvahead", "xgiblarvatorso") -/obj/effect/decal/cleanable/blood/xtracks - icon_state = "xtracks" - random_icon_states = null +/obj/effect/decal/cleanable/blood/xenoblood/tracks + color = BLOOD_COLOR_XENO -/obj/effect/decal/cleanable/blood/xtracks/Initialize() +/obj/effect/decal/cleanable/blood/xenoblood/tracks/Initialize() . = ..() add_blood_DNA(list("Unknown DNA" = "X*")) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index f1a1655fb4..6996e107ba 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -3,8 +3,9 @@ desc = "It's red and gooey. Perhaps it's the chef's cooking?" icon = 'icons/effects/blood.dmi' icon_state = "floor1" - random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") + random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") blood_state = BLOOD_STATE_HUMAN + color = BLOOD_COLOR_HUMAN bloodiness = BLOOD_AMOUNT_PER_DECAL /obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C) @@ -50,6 +51,7 @@ layer = LOW_OBJ_LAYER random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") mergeable_decal = FALSE + var/fleshcolor = "#FFFFFF" /obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases) . = ..() @@ -58,6 +60,20 @@ /obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target) 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()]]" + 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) + + icon = blood + overlays.Cut() + overlays += giblets + /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) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 71a12e9ff4..325683df6e 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -231,16 +231,16 @@ return var/static/list/bloodtypes_safe = list( - "A-" = list("A-", "O-"), - "A+" = list("A-", "A+", "O-", "O+"), - "B-" = list("B-", "O-"), - "B+" = list("B-", "B+", "O-", "O+"), - "AB-" = list("A-", "B-", "O-", "AB-"), - "AB+" = list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+"), - "O-" = list("O-"), - "O+" = list("O-", "O+"), - "L" = list("L"), - "U" = list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+", "L", "U") + "A-" = list("A-", "O-", "SY"), + "A+" = list("A-", "A+", "O-", "O+", "SY"), + "B-" = list("B-", "O-", "SY"), + "B+" = list("B-", "B+", "O-", "O+", "SY"), + "AB-" = list("A-", "B-", "O-", "AB-", "SY"), + "AB+" = list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+", "SY"), + "O-" = list("O-","SY"), + "O+" = list("O-", "O+","SY"), + "L" = list("L","SY"), + "U" = list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+", "L", "U","SY") ) var/safe = bloodtypes_safe[bloodtype] diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 15a2ef1cba..a4a0bed102 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1,5 +1,5 @@ /datum/reagent/blood - data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"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,"blood_color"=color, "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 @@ -88,6 +88,13 @@ if(data["blood_DNA"]) B.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) +/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) + name = "Synthetic Blood" + id = "syntheticblood" + color = "#0b0730" // rgb: 11, 7, 48 + + /datum/reagent/liquidgibs name = "Liquid gibs" id = "liquidgibs" diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 31e893aa3a..95e3be1849 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -10,7 +10,7 @@ /obj/item/reagent_containers/blood/Initialize() . = ..() if(blood_type != null) - reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) + reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_colour"=color, "blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) update_icon() /obj/item/reagent_containers/blood/on_reagent_change(changetype) @@ -45,7 +45,7 @@ /obj/item/reagent_containers/blood/random/Initialize() icon_state = "bloodpack" - blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-", "L") + blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-", "L", "SY") return ..() /obj/item/reagent_containers/blood/APlus @@ -72,6 +72,9 @@ /obj/item/reagent_containers/blood/universal blood_type = "U" +/obj/item/reagent_containers/blood/synthetics + blood_type = "SY" + /obj/item/reagent_containers/blood/attackby(obj/item/I, mob/user, params) if (istype(I, /obj/item/pen) || istype(I, /obj/item/toy/crayon)) if(!user.is_literate()) diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index dce76f58b5..49000e246e 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ diff --git a/icons/effects/footprints.dmi b/icons/effects/footprints.dmi index a98344abe4..61658e5ea7 100644 Binary files a/icons/effects/footprints.dmi and b/icons/effects/footprints.dmi differ diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index ae77fbcfc0..4a18c0d9b4 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -230,3 +230,11 @@ required_reagents = list("anaphro" = 5, "acetone" = 1) required_temp = 300 mix_message = "The mixture thickens and heats up slighty..." + +//Mutation toxin stuff +/datum/reagent/mutationtoxin/mammal + name = "Mammilan Mutation Toxin" + id = "mammalmutationtoxin" + color = "#5EFF3B" //RGB: 94, 255, 59 + race = /datum/species/mammal + mutationtext = "The pain subsides. You feel... like a single furry." \ No newline at end of file