diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 36815339c7..8e1281a79c 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -65,47 +65,38 @@ var/global/list/image/splatter_cache=list() name = initial(name) desc = initial(desc) -/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) - if(perp.is_incorporeal()) - return - if (!istype(perp)) - return - if(amount < 1) - return - - var/obj/item/organ/external/l_foot = perp.get_organ("l_foot") - var/obj/item/organ/external/r_foot = perp.get_organ("r_foot") +/mob/living/carbon/human/walk_through_blood(var/obj/effect/decal/cleanable/blood/blood) + var/obj/item/organ/external/l_foot = get_organ("l_foot") + var/obj/item/organ/external/r_foot = get_organ("r_foot") var/hasfeet = 1 if((!l_foot || l_foot.is_stump()) && (!r_foot || r_foot.is_stump())) hasfeet = 0 - if(perp.shoes && !perp.buckled)//Adding blood to shoes - var/obj/item/clothing/shoes/S = perp.shoes + if(shoes && !buckled)//Adding blood to shoes + var/obj/item/clothing/shoes/S = shoes if(istype(S)) - S.blood_color = basecolor - S.track_blood = max(amount,S.track_blood) + S.blood_color = blood.basecolor + S.track_blood = max(blood.amount, S.track_blood) if(!S.blood_overlay) S.generate_blood_overlay() if(!S.blood_DNA) S.blood_DNA = list() - S.blood_overlay.color = basecolor + S.blood_overlay.color = blood.basecolor S.add_overlay(S.blood_overlay) - if(S.blood_overlay && S.blood_overlay.color != basecolor) - S.blood_overlay.color = basecolor + if(S.blood_overlay && S.blood_overlay.color != blood.basecolor) + S.blood_overlay.color = blood.basecolor S.add_overlay(S.blood_overlay) - S.blood_DNA |= blood_DNA.Copy() - perp.update_inv_shoes() - + S.blood_DNA |= blood.blood_DNA.Copy() + update_inv_shoes() else if (hasfeet)//Or feet - perp.feet_blood_color = basecolor - perp.track_blood = max(amount,perp.track_blood) - LAZYINITLIST(perp.feet_blood_DNA) - perp.feet_blood_DNA |= blood_DNA.Copy() - perp.update_bloodied() - else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair)) - var/obj/structure/bed/chair/wheelchair/W = perp.buckled + ..() + if(istype(buckled, /obj/structure/bed/chair/wheelchair)) + var/obj/structure/bed/chair/wheelchair/W = buckled W.bloodiness = 4 - amount-- +/obj/effect/decal/cleanable/blood/Crossed(mob/living/perp) + if(istype(perp) && amount >= 1 && !perp.is_incorporeal() && perp.walk_through_blood(src)) + amount-- + ..() /obj/effect/decal/cleanable/blood/proc/dry() name = dryname diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index b2f2dcef1e..78cddbf6d0 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -456,17 +456,18 @@ /turf/simulated/floor/snow/Entered(atom/A) if(isliving(A)) var/mob/living/L = A - if(L.hovering) // Flying things shouldn't make footprints. + var/footprint_state = L.get_snow_footprint_state() + if(!footprint_state) return ..() var/mdir = "[A.dir]" - crossed_dirs[mdir] = 1 + crossed_dirs[mdir] = footprint_state update_icon() . = ..() /turf/simulated/floor/snow/update_icon() ..() for(var/d in crossed_dirs) - add_overlay(image(icon = 'icons/turf/outdoors.dmi', icon_state = "snow_footprints", dir = text2num(d))) + add_overlay(image(icon = 'icons/turf/outdoors.dmi', icon_state = crossed_dirs[d], dir = text2num(d))) //**** Here ends snow **** @@ -474,4 +475,4 @@ name = "concrete" icon = 'icons/turf/concrete.dmi' icon_state = "concrete" - initial_flooring = /decl/flooring/concrete \ No newline at end of file + initial_flooring = /decl/flooring/concrete diff --git a/code/game/turfs/simulated/outdoors/snow.dm b/code/game/turfs/simulated/outdoors/snow.dm index c7570ee401..542b8e0c43 100644 --- a/code/game/turfs/simulated/outdoors/snow.dm +++ b/code/game/turfs/simulated/outdoors/snow.dm @@ -10,21 +10,21 @@ ) var/list/crossed_dirs = list() - /turf/simulated/floor/outdoors/snow/Entered(atom/A) if(isliving(A)) var/mob/living/L = A - if(L.hovering) // Flying things shouldn't make footprints. + var/footprint_state = L.get_snow_footprint_state() + if(!footprint_state) return ..() var/mdir = "[A.dir]" - crossed_dirs[mdir] = 1 + crossed_dirs[mdir] = footprint_state update_icon() . = ..() /turf/simulated/floor/outdoors/snow/update_icon() ..() for(var/d in crossed_dirs) - add_overlay(image(icon = 'icons/turf/outdoors.dmi', icon_state = "snow_footprints", dir = text2num(d))) + add_overlay(image(icon = 'icons/turf/outdoors.dmi', icon_state = crossed_dirs[d], dir = text2num(d))) /turf/simulated/floor/outdoors/snow/attackby(var/obj/item/W, var/mob/user) if(istype(W, /obj/item/shovel)) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 4589645ed6..a7dcc26b3e 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -364,7 +364,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() overlays_standing[SKIN_LAYER] = skin apply_layer(SKIN_LAYER) -/mob/living/carbon/human/proc/update_bloodied() +/mob/living/carbon/human/update_bloodied() if(QDESTROYING(src)) return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 21c94b3339..7afe681d52 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1168,3 +1168,19 @@ /mob/living/proc/leaves_tracks_type() return + +/mob/living/proc/update_bloodied() + return + +/mob/living/proc/walk_through_blood(var/obj/effect/decal/cleanable/blood/blood) + if(!leaves_tracks_type()) + return FALSE + feet_blood_color = blood.basecolor + track_blood = max(blood.amount, track_blood) + LAZYINITLIST(feet_blood_DNA) + feet_blood_DNA |= blood.blood_DNA.Copy() + update_bloodied() + +/mob/living/proc/get_snow_footprint_state() + if(!hovering) // Flying things shouldn't make footprints. + return "snow_footprints" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm b/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm index 927c8c2edd..f6e09ffd0a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm @@ -38,6 +38,10 @@ /mob/living/simple_mob/animal/proc/has_appetite() return TRUE +/mob/living/simple_mob/animal/get_snow_footprint_state() + if(!hovering) + return "snow_animalprint" + /mob/living/simple_mob/animal/do_interaction(var/atom/A) // Can we do some critter interaction? diff --git a/icons/turf/outdoors.dmi b/icons/turf/outdoors.dmi index 1f6f5f81b3..bbe4f22c49 100644 Binary files a/icons/turf/outdoors.dmi and b/icons/turf/outdoors.dmi differ