diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index a3e71cd8cdd..d032959d641 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -17,21 +17,22 @@
/obj/item/weapon/mop/New()
create_reagents(5)
-
-obj/item/weapon/mop/proc/clean(turf/simulated/A)
- if(reagents.has_reagent("water", 1))
- A.clean_blood()
- A.dirt = 0
- for(var/obj/effect/O in A)
+/turf/proc/clean(atom/source)
+ if(source.reagents.has_reagent("water", 1))
+ clean_blood()
+ if(istype(src, /turf/simulated))
+ var/turf/simulated/T = src
+ T.dirt = 0
+ for(var/obj/effect/O in src)
if(istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay))
del(O)
- reagents.reaction(A, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly.
- reagents.remove_any(1) //reaction() doesn't use up the reagents
+ source.reagents.reaction(src, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly.
+ source.reagents.remove_any(1) //reaction() doesn't use up the reagents
/obj/item/weapon/mop/afterattack(atom/A, mob/user, proximity)
if(!proximity) return
- if(istype(A, /turf/simulated) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune))
+ if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune))
if(reagents.total_volume < 1)
user << "Your mop is dry!"
return
@@ -39,8 +40,9 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A)
user.visible_message("[user] begins to clean \the [get_turf(A)].")
if(do_after(user, 40))
- if(A)
- clean(get_turf(A))
+ var/turf/T = A
+ if(T)
+ T.clean(src)
user << "You have finished mopping!"
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 5d6caee5e21..64317a1ac08 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -128,6 +128,11 @@
var/ismist = 0 //needs a var so we can make it linger~
var/watertemp = "normal" //freezing, normal, or boiling
var/mobpresent = 0 //true if there is a mob on the shower's loc, this is to ease process()
+ var/is_washing = 0
+
+/obj/machinery/shower/New()
+ ..()
+ create_reagents(2)
//add heat controls? when emagged, you can freeze to death in it?
@@ -285,10 +290,22 @@
del(E)
/obj/machinery/shower/process()
- if(!on || !mobpresent) return
+ if(!on) return
+ wash_floor()
+ if(!mobpresent) return
for(var/mob/living/carbon/C in loc)
check_heat(C)
+/obj/machinery/shower/proc/wash_floor()
+ if(!ismist && is_washing)
+ return
+ is_washing = 1
+ var/turf/T = get_turf(src)
+ reagents.add_reagent("water", 2)
+ T.clean(src)
+ spawn(100)
+ is_washing = 0
+
/obj/machinery/shower/proc/check_heat(mob/M as mob)
if(!on || watertemp == "normal") return
if(iscarbon(M))