diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 03056f625f..d6942f1c40 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -75,20 +75,6 @@
return splittext(trim(file2text(filename)),seperator)
return splittext(file2text(filename),seperator)
-// Turns a direction into text
-/proc/num2dir(direction)
- switch (direction)
- if (1.0) return NORTH
- if (2.0) return SOUTH
- if (4.0) return EAST
- if (5.0) return NORTHEAST
- if (6.0) return SOUTHEAST
- if (8.0) return WEST
- if (9.0) return NORTHWEST
- if (10.0) return SOUTHWEST
- else
- world.log << "UNKNOWN DIRECTION: [direction]"
-
//Turns a direction into text
/proc/dir2text(direction)
switch(direction)
diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index 4c93c3a2db..babc012719 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -66,8 +66,46 @@
reagents.expose_temperature(exposed_temperature)
..()
-/obj/effect/decal/cleanable/clean_blood(var/ignore = FALSE)
- if(!ignore)
- qdel(src)
- return
+
+//Add "bloodiness" of this blood's type, to the human's shoes
+//This is on /cleanable because fuck this ancient mess
+/obj/effect/decal/cleanable/Crossed(atom/movable/O)
..()
+ if(ishuman(O))
+ var/mob/living/carbon/human/H = O
+ if(H.shoes && blood_state && bloodiness && (!H.has_trait(TRAIT_LIGHT_STEP) || !H.mind.assigned_role == "Detective"))
+ var/obj/item/clothing/shoes/S = H.shoes
+ var/add_blood = 0
+ if(bloodiness >= BLOOD_GAIN_PER_STEP)
+ add_blood = BLOOD_GAIN_PER_STEP
+ else
+ add_blood = bloodiness
+ bloodiness -= add_blood
+ to_chat(world, "S.blood_state is [S.blood_state], & blood smear state is [S.blood_smear[S.blood_state]]")
+ S.blood_smear[blood_state] = min(MAX_SHOE_BLOODINESS,S.blood_smear[blood_state]+add_blood)
+ if(blood_DNA && blood_DNA.len)
+ S.add_blood(blood_DNA)
+ S.blood_smear = blood_state
+ update_icon()
+ H.update_inv_shoes()
+
+ else if(!H.shoes && blood_state && bloodiness && (!H.has_trait(TRAIT_LIGHT_STEP) || !H.mind.assigned_role == "Detective"))
+ var/add_blood = 0
+ if(bloodiness >= BLOOD_GAIN_PER_STEP)
+ add_blood = BLOOD_GAIN_PER_STEP
+ else
+ add_blood = bloodiness
+ bloodiness -= add_blood
+ to_chat(world, "blood_state is [blood_state], & blood smear state is [H.blood_smear[blood_state]]")
+ H.blood_smear[blood_state] = min(MAX_SHOE_BLOODINESS,H.blood_smear[blood_state]+add_blood)
+ if(blood_DNA && blood_DNA.len)
+ H.add_blood(blood_DNA)
+ H.blood_smear = blood_state
+ update_icon()
+ H.update_inv_shoes()
+
+/obj/effect/decal/cleanable/proc/can_bloodcrawl_in()
+ if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY))
+ return bloodiness
+ else
+ return FALSE
diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm
index 0902eed25b..900f392796 100644
--- a/code/game/objects/effects/decals/cleanable/aliens.dm
+++ b/code/game/objects/effects/decals/cleanable/aliens.dm
@@ -3,24 +3,24 @@
/obj/effect/decal/cleanable/blood/xeno
name = "xeno blood"
desc = "It's green and acidic. It looks like... blood?"
- basecolor = BLOOD_COLOR_XENO
+ color = BLOOD_COLOR_XENO
blood_DNA = list("UNKNOWN DNA" = "X*")
/obj/effect/decal/cleanable/blood/splatter/xeno
- basecolor = BLOOD_COLOR_XENO
+ color = BLOOD_COLOR_XENO
/obj/effect/decal/cleanable/blood/gibs/xeno
name = "xeno gibs"
desc = "Gnarly..."
icon_state = "xgib1"
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6")
- basecolor = BLOOD_COLOR_XENO
+ color = BLOOD_COLOR_XENO
/obj/effect/decal/cleanable/blood/gibs/xeno/Initialize(mapload, list/datum/disease/diseases)
. = ..()
reagents.add_reagent("liquidxenogibs", 5)
-/obj/effect/decal/cleanable/blood/xeno/streak(list/directions)
+/obj/effect/decal/cleanable/blood/gibs/xeno/streak(list/directions)
set waitfor = 0
var/direction = pick(directions)
for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++)
@@ -35,22 +35,22 @@
if(!step_to(src, get_step(src, direction), 0))
break
-/obj/effect/decal/cleanable/blood/gibs/xeno/up
+/obj/effect/decal/cleanable/blood/gibs/xeno/up/xeno
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1")
-/obj/effect/decal/cleanable/blood/gibs/xeno/down
+/obj/effect/decal/cleanable/blood/gibs/xeno/down/xeno
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibdown1","xgibdown1","xgibdown1")
-/obj/effect/decal/cleanable/blood/gibs/xeno/body
+/obj/effect/decal/cleanable/blood/gibs/xeno/body/xeno
random_icon_states = list("xgibhead", "xgibtorso")
-/obj/effect/decal/cleanable/blood/gibs/xeno/torso
+/obj/effect/decal/cleanable/blood/gibs/xeno/torso/xeno
random_icon_states = list("xgibtorso")
-/obj/effect/decal/cleanable/blood/gibs/xeno/limb
+/obj/effect/decal/cleanable/blood/gibs/xeno/limb/xeno
random_icon_states = list("xgibleg", "xgibarm")
-/obj/effect/decal/cleanable/blood/gibs/xeno/core
+/obj/effect/decal/cleanable/blood/gibs/xeno/core/xeno
random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3")
/obj/effect/decal/cleanable/blood/gibs/xeno/larva
@@ -62,7 +62,6 @@
/obj/effect/decal/cleanable/blood/xtracks
icon_state = "tracks"
random_icon_states = null
- basecolor = BLOOD_COLOR_XENO
/obj/effect/decal/cleanable/blood/xtracks/Initialize()
add_blood(list("UNKNOWN DNA" = "X*"))
diff --git a/code/game/objects/effects/decals/cleanable/gibs.dm b/code/game/objects/effects/decals/cleanable/gibs.dm
index 7384b73eb1..48670957cd 100644
--- a/code/game/objects/effects/decals/cleanable/gibs.dm
+++ b/code/game/objects/effects/decals/cleanable/gibs.dm
@@ -1,11 +1,247 @@
-#define BLOOD_SIZE_SMALL 1
-#define BLOOD_SIZE_MEDIUM 2
-#define BLOOD_SIZE_BIG 3
-#define BLOOD_SIZE_NO_MERGE -1
+/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
+ var/slimy_gibs = FALSE
+ var/body_colors
+/obj/effect/decal/cleanable/blood/gibs/proc/guts()
+ if(gib_overlay)
+ var/mutable_appearance/gibz = mutable_appearance(icon, icon_state + "-overlay", color = blood_color, layer = (LOW_OBJ_LAYER + 0.1))
+ var/mutable_appearance/gibz2 = mutable_appearance(icon, icon_state + "c-overlay", color = body_colors, layer = (LOW_OBJ_LAYER + 0.1))
+ if(!slimy_gibs)
+ gibz.appearance_flags = RESET_COLOR
+ add_overlay(gibz)
+ else
+ gibz.appearance_flags = RESET_COLOR
+ add_overlay(gibz)
+ add_overlay(gibz2)
+/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target)
+ return
-#undef BLOOD_SIZE_SMALL
-#undef BLOOD_SIZE_MEDIUM
-#undef BLOOD_SIZE_BIG
-#undef BLOOD_SIZE_NO_MERGE
+/obj/effect/decal/cleanable/blood/gibs/Crossed(mob/living/L)
+ if(istype(L) && has_gravity(loc))
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(H.mind.assigned_role == "Detective") //Gumshoe perks yo
+ playsound(loc, 'sound/effects/gib_step.ogg', 10, 1)
+ else
+ playsound(loc, 'sound/effects/gib_step.ogg', H.has_trait(TRAIT_LIGHT_STEP) ? 20 : 50, 1)
+ else
+ 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.transfer_blood_dna(blood_DNA)
+
+ 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(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)
+ guts()
+ update_icon()
+
+/obj/effect/decal/cleanable/blood/gibs/human/up
+ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
+ gib_overlay = TRUE
+ slimy_gibs = 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
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/human/body
+ random_icon_states = list("gibhead", "gibtorso")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/human/torso
+ random_icon_states = list("gibtorso")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/human/limb
+ random_icon_states = list("gibleg", "gibarm")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/human/core
+ random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
+ gib_overlay = TRUE
+ slimy_gibs = 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
+ slimy_gibs = 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
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/slime/body
+ random_icon_states = list("gibhead", "gibtorso")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/slime/torso
+ random_icon_states = list("gibtorso")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/slime/limb
+ random_icon_states = list("gibleg", "gibarm")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/slime/core
+ random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
+ gib_overlay = TRUE
+ slimy_gibs = 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()
+
+//IPCs
+/obj/effect/decal/cleanable/blood/gibs/ipc
+ desc = "They look sharp yet oozing."
+
+/obj/effect/decal/cleanable/blood/gibs/ipc/Initialize(mapload, list/datum/disease/diseases)
+ . = ..()
+ reagents.add_reagent("liquidoilgibs", 5)
+ update_icon()
+ guts()
+
+/obj/effect/decal/cleanable/blood/gibs/ipc/guts()
+ if(gib_overlay)
+ var/mutable_appearance/gibz = mutable_appearance(icon, icon_state + "-ipcoverlay", color = blood_color, layer = -LOW_OBJ_LAYER)
+ var/mutable_appearance/gibz2 = mutable_appearance(icon, icon_state + "c-ipcoverlay", color = body_colors, layer = -LOW_OBJ_LAYER)
+ if(!slimy_gibs)
+ gibz.appearance_flags = RESET_COLOR
+ add_overlay(gibz)
+ else
+ gibz.appearance_flags = RESET_COLOR
+ add_overlay(gibz)
+ add_overlay(gibz2)
+
+/obj/effect/decal/cleanable/blood/gibs/ipc/up
+ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/ipc/down
+ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/ipc/body
+ random_icon_states = list("gibhead", "gibtorso")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/ipc/torso
+ random_icon_states = list("gibtorso")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/ipc/limb
+ random_icon_states = list("gibleg", "gibarm")
+ gib_overlay = TRUE
+ slimy_gibs = TRUE
+
+/obj/effect/decal/cleanable/blood/gibs/ipc/core
+ random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
+ gib_overlay = TRUE
+ slimy_gibs = 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()
diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm
index 6e92f8e876..02bf51bdd9 100644
--- a/code/game/objects/effects/decals/cleanable/robots.dm
+++ b/code/game/objects/effects/decals/cleanable/robots.dm
@@ -1,66 +1,65 @@
// Note: BYOND is object oriented. There is no reason for this to be copy/pasted blood code.
-/obj/effect/decal/cleanable/blood/gibs/robot
+/obj/effect/decal/cleanable/robot_debris
name = "robot debris"
desc = "It's a useless heap of junk... or is it?"
icon = 'icons/mob/robots.dmi'
icon_state = "gib1"
layer = LOW_OBJ_LAYER
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
- basecolor = BLOOD_COLOR_OIL
+ blood_state = BLOOD_STATE_OIL
+ bloodiness = BLOOD_AMOUNT_PER_DECAL
+ mergeable_decal = FALSE
-/obj/effect/decal/cleanable/blood/gibs/robot/Initialize(mapload, list/datum/disease/diseases)
+/obj/effect/decal/cleanable/robot_debris/Initialize(mapload, list/datum/disease/diseases)
. = ..()
reagents.add_reagent("liquidoilgibs", 5)
-/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like blood
+/obj/effect/decal/cleanable/robot_debris/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)
+ if (prob(40))
+ new /obj/effect/decal/cleanable/oil/streak(src.loc)
+ else if (prob(10))
+ var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ if (!step_to(src, get_step(src, direction), 0))
+ break
+
+/obj/effect/decal/cleanable/robot_debris/ex_act()
return
-/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions)
- spawn (0)
- var/direction = pick(directions)
- for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
- sleep(3)
- if (i > 0)
- if (prob(40))
- var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc)
- streak.update_icon()
- else if (prob(10))
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- if (step_to(src, get_step(src, direction), 0))
- break
-
-/obj/effect/decal/cleanable/blood/gibs/robot/ex_act()
- return
-
-/obj/effect/decal/cleanable/blood/gibs/robot/limb
+/obj/effect/decal/cleanable/robot_debris/limb
random_icon_states = list("gibarm", "gibleg")
-/obj/effect/decal/cleanable/blood/gibs/robot/up
+/obj/effect/decal/cleanable/robot_debris/up
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1")
-/obj/effect/decal/cleanable/blood/gibs/robot/down
+/obj/effect/decal/cleanable/robot_debris/down
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1")
-/obj/effect/decal/cleanable/blood/oil
+/obj/effect/decal/cleanable/oil
name = "motor oil"
desc = "It's black and greasy. Looks like Beepsky made another mess."
- basecolor = BLOOD_COLOR_OIL
+ icon = 'icons/mob/robots.dmi'
+ icon_state = "floor1"
+ random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
+ blood_state = BLOOD_STATE_OIL
+ bloodiness = BLOOD_AMOUNT_PER_DECAL
-/obj/effect/decal/cleanable/blood/oil/Initialize()
+/obj/effect/decal/cleanable/oil/Initialize()
. = ..()
reagents.add_reagent("oil", 30)
reagents.add_reagent("liquidoilgibs", 5)
-/obj/effect/decal/cleanable/blood/oil/dry()
- return
+/obj/effect/decal/cleanable/oil/streak
+ random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
-/obj/effect/decal/cleanable/blood/oil/streak
- amount = 2
+/obj/effect/decal/cleanable/oil/slippery
-/obj/effect/decal/cleanable/blood/oil/slippery
-
-/obj/effect/decal/cleanable/blood/oil/slippery/Initialize()
+/obj/effect/decal/cleanable/oil/slippery/Initialize()
AddComponent(/datum/component/slippery, 80, (NO_SLIP_WHEN_WALKING | SLIDE))
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index f906045d7f..d49f311c18 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -113,7 +113,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
//Blood overlay things
var/blood_color
- var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
/obj/item/Initialize()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 50ac3a71a2..13ea59cb52 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -194,8 +194,8 @@
if(O.obj_flags & FROZEN)
O.make_unfrozen()
- if(isliving(AM))
- var/mob/living/M = AM
+ if(isliving(A))
+ var/mob/living/M = A
if(ishuman(M))
var/mob/living/carbon/human/H = M
// Tracking blood
@@ -226,7 +226,7 @@
/turf/proc/is_plasteel_floor()
return FALSE
-/turf/open/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor=BLOOD_COLOR_HUMAN)
+/turf/open/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor=COLOR_BLOOD_HUMAN)
var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src
if(!tracks)
tracks = new typepath(src)
diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm
index 26459c8051..fb85d057b2 100644
--- a/code/modules/clothing/shoes/_shoes.dm
+++ b/code/modules/clothing/shoes/_shoes.dm
@@ -17,7 +17,7 @@
var/adjusted = NORMAL_STYLE
mutantrace_variation = MUTANTRACE_VARIATION
- var/move_trail = /obj/effect/decal/cleanable/blood/tracks/shoe
+ var/move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/shoe
/obj/item/clothing/shoes/suicide_act(mob/living/carbon/user)
if(rand(2)>1)
@@ -91,6 +91,7 @@
/obj/item/clothing/shoes/clean_blood()
..()
+ blood_smear = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
blood_state = BLOOD_STATE_NOT_BLOODY
blood_color = null
if(ismob(loc))
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 283d2db800..af03bf3f2f 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -77,7 +77,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/fixed_mut_color3 = ""
var/whitelisted = 0 //Is this species restricted to certain players?
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
- var/obj/effect/decal/cleanable/blood/tracks/move_trail = /obj/effect/decal/cleanable/blood/tracks/shoe // What marks are left when walking
+ var/obj/effect/decal/cleanable/blood/footprints/tracks/move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/shoe // What marks are left when walking
///////////
// PROCS //
@@ -643,9 +643,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(H.dna.features["taur"] != "None")
if(H.dna.features["taur"] in GLOB.noodle_taurs)
- move_trail = /obj/effect/decal/cleanable/blood/tracks/snake
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/snake
else if(H.dna.features["taur"] in GLOB.paw_taurs)
- move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/paw
//END EDIT
@@ -941,7 +941,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
// Impliments different trails for species depending on if they're wearing shoes.
/datum/species/proc/get_move_trail(var/mob/living/carbon/human/H)
if(H.lying)
- return /obj/effect/decal/cleanable/blood/tracks/body
+ return /obj/effect/decal/cleanable/blood/footprints/tracks/body
if(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)))
var/obj/item/clothing/shoes/shoes = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) ? H.wear_suit : H.shoes // suits take priority over shoes
return shoes.move_trail
diff --git a/code/modules/mob/living/carbon/human/species_types/angel.dm b/code/modules/mob/living/carbon/human/species_types/angel.dm
index 3a9ae056c9..92798c8bc7 100644
--- a/code/modules/mob/living/carbon/human/species_types/angel.dm
+++ b/code/modules/mob/living/carbon/human/species_types/angel.dm
@@ -10,7 +10,7 @@
blacklisted = 1
limbs_id = "human"
skinned_type = /obj/item/stack/sheet/animalhide/human
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
var/datum/action/innate/flight/fly
diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm
index 6ebc77f0b5..d3288e1cd1 100644
--- a/code/modules/mob/living/carbon/human/species_types/humans.dm
+++ b/code/modules/mob/living/carbon/human/species_types/humans.dm
@@ -9,7 +9,7 @@
skinned_type = /obj/item/stack/sheet/animalhide/human
disliked_food = GROSS | RAW
liked_food = JUNKFOOD | FRIED
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
/datum/species/human/qualifies_for_rank(rank, list/features)
return TRUE //Pure humans are always allowed in all roles.
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 63705bca90..ea7a20163a 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -18,7 +18,7 @@
coldmod = 6 // = 3x cold damage
heatmod = 0.5 // = 1/4x heat damage
burnmod = 0.5 // = 1/2x generic burn damage
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
/datum/species/jelly/on_species_loss(mob/living/carbon/C)
if(regenerate_limbs)
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 22d7250b61..ba4d8b8781 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -73,7 +73,7 @@
/datum/species/lizard/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
species_traits += DIGITIGRADE
- move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/claw
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(FALSE)
return ..()
@@ -81,7 +81,7 @@
/datum/species/lizard/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
species_traits -= DIGITIGRADE
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(TRUE)
@@ -97,7 +97,7 @@
mutantlungs = /obj/item/organ/lungs/ashwalker
burnmod = 0.9
brutemod = 0.9
- move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/claw
/datum/species/lizard/ashwalker/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index 6494638f0f..4c2c360c68 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -15,7 +15,7 @@
disliked_food = FRUIT | GROSS
toxic_food = MEAT | RAW
mutanteyes = /obj/item/organ/eyes/moth
- move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/claw
/datum/species/moth/on_species_gain(mob/living/carbon/C)
. = ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index fdca7b4f27..c556390533 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -21,7 +21,7 @@
var/internal_fire = FALSE //If the bones themselves are burning clothes won't help you much
disliked_food = FRUIT
liked_food = VEGETABLES
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
/datum/species/plasmaman/spec_life(mob/living/carbon/human/H)
var/datum/gas_mixture/environment = H.loc.return_air()
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index f43e3f1810..05c52ede86 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -17,7 +17,7 @@
var/light_oxyheal = 1
var/light_burnheal = 1
var/light_bruteheal = 1
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
index 6d7e93f7c7..606e72839b 100644
--- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
@@ -13,7 +13,7 @@
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
disliked_food = NONE
liked_food = GROSS | MEAT | RAW
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
/datum/species/skeleton/check_roundstart_eligible()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index 97d76e883b..e2c8ffb9c3 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -15,7 +15,7 @@
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
disliked_food = NONE
liked_food = GROSS | MEAT | RAW
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
/datum/species/zombie/check_roundstart_eligible()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 35aa0a3793..946024760d 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -276,7 +276,7 @@ There are several things that need to be remembered:
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES]
inv.update_icon()
- if(!shoes)
+ if(!shoes && bloody_feet)
var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyfeet", -SHOES_LAYER, color = blood_DNA_to_color())
if(dna.features["taur"] != "None")
if(dna.features["taur"] in GLOB.noodle_taurs)
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index f3dfae1889..97f14ce7bd 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -192,6 +192,7 @@
if(blood)
target_types += /obj/effect/decal/cleanable/blood
+ target_types += /obj/effect/decal/cleanable/trail_holder
if(pests)
target_types += /mob/living/simple_animal/cockroach
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
index 188aa4d913..3301345fcf 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -13,7 +13,7 @@
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal
liked_food = MEAT | FRIED
disliked_food = TOXIC
- move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/paw
//Curiosity killed the cat's wagging tail.
/datum/species/mammal/spec_death(gibbed, mob/living/carbon/human/H)
@@ -46,7 +46,7 @@
/datum/species/mammal/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
species_traits += DIGITIGRADE
- move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/paw
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(FALSE)
return ..()
@@ -54,7 +54,7 @@
/datum/species/mammal/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
species_traits -= DIGITIGRADE
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(TRUE)
@@ -78,7 +78,7 @@
miss_sound = 'sound/weapons/slashmiss.ogg'
liked_food = MEAT | FRUIT
disliked_food = TOXIC
- move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/claw
/datum/species/avian/spec_death(gibbed, mob/living/carbon/human/H)
if(H)
@@ -126,7 +126,7 @@
liked_food = MEAT
disliked_food = TOXIC
meat = /obj/item/reagent_containers/food/snacks/carpmeat/aquatic
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
/datum/species/aquatic/spec_death(gibbed, mob/living/carbon/human/H)
if(H)
@@ -173,7 +173,7 @@
miss_sound = 'sound/weapons/slashmiss.ogg'
liked_food = MEAT | FRUIT
disliked_food = TOXIC
- move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/claw
/datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H)
if(H)
@@ -230,7 +230,7 @@
/datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
species_traits += DIGITIGRADE
- move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/claw
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(FALSE)
return ..()
@@ -238,7 +238,7 @@
/datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
species_traits -= DIGITIGRADE
- move_trail = /obj/effect/decal/cleanable/blood/tracks/foot
+ move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(TRUE)