diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 8fb14ebf4a4..ed405447c1b 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -3,43 +3,45 @@
var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/blood
- name = "blood"
- desc = "It's thick and gooey. Perhaps it's the chef's cooking?"
- gender = PLURAL
- density = 0
- anchored = 1
- layer = 2
- icon_state = "floor1"
- random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
- var/list/viruses = list()
- blood_DNA = list()
- var/basecolor="#A10808" // Color when wet.
- var/list/datum/disease2/disease/virus2 = list()
- var/amount = 5
+ name = "blood"
+ desc = "It's thick and gooey. Perhaps it's the chef's cooking?"
+ gender = PLURAL
+ density = 0
+ anchored = 1
+ layer = 2
+ icon_state = "floor1"
+ random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
+ var/list/viruses = list()
+ blood_DNA = list()
+ var/basecolor="#A10808" // Color when wet.
+ var/list/datum/disease2/disease/virus2 = list()
+ var/amount = 5
/obj/effect/decal/cleanable/blood/Del()
- for(var/datum/disease/D in viruses)
- D.cure(0)
- ..()
+ for(var/datum/disease/D in viruses)
+ D.cure(0)
+ ..()
/obj/effect/decal/cleanable/blood/New()
- ..()
- if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
- return
- if(istype(src, /obj/effect/decal/cleanable/blood/tracks))
- return // We handle our own drying.
- if(src.type == /obj/effect/decal/cleanable/blood)
- if(src.loc && isturf(src.loc))
- for(var/obj/effect/decal/cleanable/blood/B in src.loc)
- if(B != src)
- if (B.blood_DNA)
- blood_DNA |= B.blood_DNA.Copy()
- del(B)
- spawn(DRYING_TIME * (amount+1))
- dry()
+ ..()
+ if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
+ return
+ if(istype(src, /obj/effect/decal/cleanable/blood/tracks))
+ return // We handle our own drying.
+ if(src.type == /obj/effect/decal/cleanable/blood)
+ if(src.loc && isturf(src.loc))
+ for(var/obj/effect/decal/cleanable/blood/B in src.loc)
+ if(B != src)
+ if (B.blood_DNA)
+ blood_DNA |= B.blood_DNA.Copy()
+ del(B)
+ spawn(DRYING_TIME * (amount+1))
+ dry()
/obj/effect/decal/cleanable/blood/update_icon()
+ if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]"
+
var/cache_key="[basecolor]|[icon_state]"
var/icon/I=null
if(cache_key in splatter_cache)
@@ -91,11 +93,12 @@ var/global/list/image/splatter_cache=list()
return
var/taken = rand(1,amount)
amount -= taken
- user << "You get some blood on your hands."
+ user << "You get some of \the [src] on your hands."
if (!user.blood_DNA)
user.blood_DNA = list()
user.blood_DNA |= blood_DNA.Copy()
user.bloody_hands += taken
+ user.hand_blood_color = basecolor
user.update_inv_gloves(1)
user.verbs += /mob/living/carbon/human/proc/bloody_doodle
@@ -127,33 +130,33 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/blood/writing/examine()
..()
- usr << "It reads: \"[message]\""
+ usr << "It reads: \"[message]\""
/obj/effect/decal/cleanable/blood/gibs
- name = "gibs"
- desc = "They look bloody and gruesome."
- gender = PLURAL
- density = 0
- anchored = 1
- layer = 2
- icon = 'icons/effects/blood.dmi'
- icon_state = "gibbl5"
- random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
+ name = "gibs"
+ desc = "They look bloody and gruesome."
+ gender = PLURAL
+ density = 0
+ anchored = 1
+ layer = 2
+ icon = 'icons/effects/blood.dmi'
+ icon_state = "gibbl5"
+ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
/obj/effect/decal/cleanable/blood/gibs/up
- random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
+ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
/obj/effect/decal/cleanable/blood/gibs/down
- random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1")
+ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1")
/obj/effect/decal/cleanable/blood/gibs/body
- random_icon_states = list("gibhead", "gibtorso")
+ random_icon_states = list("gibhead", "gibtorso")
/obj/effect/decal/cleanable/blood/gibs/limb
- random_icon_states = list("gibleg", "gibarm")
+ random_icon_states = list("gibleg", "gibarm")
/obj/effect/decal/cleanable/blood/gibs/core
- random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
+ random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions)
@@ -174,18 +177,19 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/mucus
- name = "mucus"
- desc = "Disgusting mucus."
- gender = PLURAL
- density = 0
- anchored = 1
- layer = 2
- icon = 'icons/effects/blood.dmi'
- icon_state = "mucus"
- random_icon_states = list("mucus")
- var/list/datum/disease2/disease/virus2 = list()
- var/dry=0 // Keeps the lag down
+ name = "mucus"
+ desc = "Disgusting mucus."
+ gender = PLURAL
+ density = 0
+ anchored = 1
+ layer = 2
+ icon = 'icons/effects/blood.dmi'
+ icon_state = "mucus"
+ random_icon_states = list("mucus")
+
+ var/list/datum/disease2/disease/virus2 = list()
+ var/dry=0 // Keeps the lag down
/obj/effect/decal/cleanable/mucus/New()
- spawn(DRYING_TIME * 2)
- dry=1
+ spawn(DRYING_TIME * 2)
+ dry=1
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 1454b360b58..60014a89e2a 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1326,5 +1326,7 @@ mob/living/carbon/human/yank_out_object()
src << "You ran out of blood to write with!"
var/obj/effect/decal/cleanable/blood/writing/W = new(T)
+ W.basecolor = (hand_blood_color) ? hand_blood_color : "#A10808"
+ W.update_icon()
W.message = message
- W.add_fingerprint(src)
+ W.add_fingerprint(src)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 104e60fff89..4611dda0d82 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -56,3 +56,4 @@
var/xylophone = 0 //For the spoooooooky xylophone cooldown
var/mob/remoteview_target = null
+ var/hand_blood_color
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm
index fa7928a36cf..25531def839 100644
--- a/code/modules/mob/living/carbon/species.dm
+++ b/code/modules/mob/living/carbon/species.dm
@@ -130,6 +130,7 @@
punch_damage = 5
primitive = /mob/living/carbon/monkey/diona
+ blood_color = "rainbow"
warning_low_pressure = 50
hazard_low_pressure = -1
diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi
index 960f4c1e19e..ae5383b690e 100644
Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ