diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 47420ee83a..caeb8e7f83 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -971,3 +971,9 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. if (!user.check_dexterity(test_dexterity, src, silent)) // Handles its own failure message. return return FALSE + +/obj/item/proc/is_mob_movement_sensitive() + return FALSE + +/obj/item/proc/handle_movement(var/turf/walking, var/running) + return FALSE diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 526e7184cf..f036f1ac15 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -100,17 +100,19 @@ var/bloodcolor="" var/mob/living/carbon/human/H = M - if(istype(H) && istype(H.shoes, /obj/item/clothing/shoes)) - var/obj/item/clothing/shoes/S = H.shoes - S.handle_movement(src, IS_RUNNING(H)) - if(S.track_blood && S.blood_DNA) - bloodDNA = S.blood_DNA - bloodcolor=S.blood_color - S.track_blood-- - else if(M.track_blood && M.feet_blood_DNA) - bloodDNA = M.feet_blood_DNA - bloodcolor = M.feet_blood_color - M.track_blood-- + if(istype(H)) + if(istype(H.shoes, /obj/item/clothing/shoes)) + var/obj/item/clothing/shoes/S = H.shoes + if(S.track_blood && S.blood_DNA) + bloodDNA = S.blood_DNA + bloodcolor=S.blood_color + S.track_blood-- + else if(M.track_blood && M.feet_blood_DNA) + bloodDNA = M.feet_blood_DNA + bloodcolor = M.feet_blood_color + M.track_blood-- + for(var/obj/item/thing in H.get_movement_sensitive_gear()) + thing.handle_movement(src, IS_RUNNING(H)) if(bloodDNA) src.AddTracks(track_type, bloodDNA , M.dir, 0, bloodcolor) // Coming diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index fef692a574..453f55fc5e 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -695,9 +695,6 @@ var/global/list/light_overlay_cache = list() //see get_worn_overlay() on helmets update_icon() return ..() -/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running) - return - /obj/item/clothing/shoes/update_clothing_icon() if (ismob(src.loc)) var/mob/M = src.loc diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 2461407c05..99961f06f6 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -73,6 +73,9 @@ var/footstep = 1 //used for squeeks whilst walking species_restricted = null +/obj/item/clothing/shoes/clown_shoes/is_mob_movement_sensitive() + return TRUE + /obj/item/clothing/shoes/clown_shoes/handle_movement(var/turf/walking, var/running) if(running) if(footstep >= 2) @@ -216,4 +219,4 @@ bootcolor = "orange" /obj/item/clothing/shoes/ranger/yellow - bootcolor = "yellow" \ No newline at end of file + bootcolor = "yellow" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a3bfe28b49..0d69192ef0 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1673,3 +1673,17 @@ /mob/living/carbon/human/hearing_boost_range() return (hearing_boost_range + species.hearboost) + +// Add gear to this proc that needs to be checked for movement sensitivity. +// Keep in mind this list will be iterated every single time the mob moves. +// This should really be a signal or something but augh. +/mob/living/carbon/human/proc/get_movement_sensitive_gear() + // Clown shoes. + if(shoes && shoes.is_mob_movement_sensitive()) + LAZYADD(., shoes) + // Tail bells. + var/obj/item/clothing/uniform = w_uniform + if(istype(uniform) && length(uniform.accessories)) + for(var/obj/item/accessory in uniform.accessories) + if(accessory.is_mob_movement_sensitive()) + LAZYADD(., accessory)