diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index b905aa00ef4..e194bbc3e43 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -326,6 +326,7 @@
throw_range = 5
w_class = 2.0
attack_verb = list("warned", "cautioned", "smashed")
+ drop_sound = 'sound/items/drop/shoes.ogg'
/obj/item/weapon/caution/attack_self(mob/user as mob)
if(src.icon_state == "caution")
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 953962f57a8..1054ee229f3 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -33,6 +33,9 @@
amount = 0
..(ignore=1)
+/obj/effect/decal/cleanable/blood/hide()
+ return
+
/obj/effect/decal/cleanable/blood/Destroy()
for(var/datum/disease/D in viruses)
D.cure(0)
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index f7c737dfa68..5ee6bce5c38 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -37,8 +37,7 @@
name = "light replacer"
desc = "A device to automatically replace lights. Refill with working lightbulbs or sheets of glass."
-
- icon = 'icons/obj/tools/lightreplacer.dmi'
+ icon = 'icons/obj/janitor.dmi'
icon_state = "lightreplacer"
item_state = "lightreplacer"
contained_sprite = 1
@@ -66,7 +65,6 @@
icon_state = "adv_lightreplacer"
item_state = "adv_lightreplacer"
-
/obj/item/device/lightreplacer/New()
failmsg = "The [name]'s refill light blinks red."
..()
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index 846a8b2a403..0b66efc613a 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -22,6 +22,7 @@
return ..()
/obj/item/weapon/mop/afterattack(atom/A, mob/user, proximity)
+ update_icon()
if(!proximity) return
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)
@@ -29,6 +30,7 @@
return
user.visible_message("[user] begins to clean \the [get_turf(A)].")
+ playsound(loc, 'sound/effects/mop.ogg', 25, 1)
if(do_after(user, 40))
var/turf/T = get_turf(A)
@@ -41,3 +43,12 @@
if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap))
return
..()
+
+/obj/item/weapon/mop/update_icon()
+ if(reagents.total_volume < 1)
+ icon_state = "mop"
+ if(reagents.total_volume > 1)
+ icon_state = "mop_wet"
+
+/obj/item/weapon/mop/on_reagent_change()
+ update_icon()
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index c67298e135b..6d17adfbc62 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -88,10 +88,12 @@
if(I.reagents.total_volume < I.reagents.maximum_volume)
if(mybucket.reagents.total_volume < 1)
to_chat(user, "[mybucket] is empty!")
+ update_icon()
else
mybucket.reagents.trans_to_obj(I, 5) //
to_chat(user, "You wet [I] in [mybucket].")
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
+ update_icon()
else
to_chat(user, "[I] can't absorb anymore liquid!")
else
@@ -274,13 +276,14 @@
update_icon()
updateUsrDialog()
-
/obj/structure/janitorialcart/update_icon()
cut_overlays()
has_items = 0
if(mybucket)
add_overlay("cart_bucket")
has_items = 1
+ if(mybucket.reagents.total_volume > 0)
+ add_overlay("cart_water")
if(mybag)
add_overlay("cart_garbage")
has_items = 1
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index 0830a8b745b..243fb503aae 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -30,3 +30,18 @@
reagents.trans_to_obj(I, 5)
to_chat(user, "You wet \the [I] in \the [src].")
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
+ return ..()
+ update_icon()
+
+/obj/structure/mopbucket/update_icon()
+ cut_overlays()
+ if(reagents.total_volume > 0)
+ add_overlay("mopbucket_water")
+
+/obj/structure/mopbucket/on_reagent_change()
+ . = ..()
+ if(istype(loc,/obj/structure/janitorialcart))
+ var/obj/structure/janitorialcart/cart = loc
+ cart.update_icon()
+ else
+ update_icon()
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index e9b419b9b19..7f517fa4643 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -185,7 +185,7 @@
update_icon()
/obj/item/weapon/reagent_containers/glass/bucket
- desc = "It's a bucket."
+ desc = "A blue plastic bucket."
name = "bucket"
icon = 'icons/obj/janitor.dmi'
icon_state = "bucket"
@@ -198,6 +198,7 @@
volume = 120
flags = OPENCONTAINER
unacidable = 0
+ drop_sound = 'sound/items/drop/helm.ogg'
/obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob)
if(isprox(D))
@@ -224,9 +225,14 @@
/obj/item/weapon/reagent_containers/glass/bucket/update_icon()
cut_overlays()
- if (!is_open_container())
+ if(reagents.total_volume > 0)
+ add_overlay("water_[initial(icon_state)]")
+ if(!is_open_container())
add_overlay("lid_[initial(icon_state)]")
+/obj/item/weapon/reagent_containers/glass/bucket/on_reagent_change()
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bucket/self_feed_message(var/mob/user)
to_chat(user, "You drink heavily from \the [src].")
@@ -238,6 +244,7 @@ obj/item/weapon/reagent_containers/glass/bucket/wood
icon_state = "woodbucket"
item_state = "woodbucket"
matter = list("wood" = 50)
+ drop_sound = 'sound/items/drop/wooden.ogg'
/obj/item/weapon/reagent_containers/glass/bucket/wood/attackby(var/obj/D, mob/user as mob)
if(isprox(D))
@@ -257,4 +264,4 @@ obj/item/weapon/reagent_containers/glass/bucket/wood
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
return
else
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/html/changelogs/wezzyjanitorstuff.yml b/html/changelogs/wezzyjanitorstuff.yml
new file mode 100644
index 00000000000..a40ba520c96
--- /dev/null
+++ b/html/changelogs/wezzyjanitorstuff.yml
@@ -0,0 +1,42 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: Wowzewow
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - imageadd: "Adds new sprites for Janitor stuff, reagent tanks & dispensers (you can even see water in buckets now!)"
+ - soundadd: "Adds more drop sounds for Janistuff too."
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index d1b52e461b3..d1ef19e3880 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index 89a153050aa..b84d1819cba 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi
index 9b0f212947b..855243c78ea 100644
Binary files a/icons/obj/aibots.dmi and b/icons/obj/aibots.dmi differ
diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi
index c1ce0fe7b4a..836217ded3c 100644
Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ
diff --git a/icons/obj/clothing/material_armor.dmi b/icons/obj/clothing/material_armor.dmi
index 6f769ce6a9e..06aa0ce4fcc 100644
Binary files a/icons/obj/clothing/material_armor.dmi and b/icons/obj/clothing/material_armor.dmi differ
diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi
index e56743d2185..99036be8e72 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 1224f77be50..5b17912d5d5 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/icons/obj/tools/lightreplacer.dmi b/icons/obj/tools/lightreplacer.dmi
deleted file mode 100644
index d161eb00516..00000000000
Binary files a/icons/obj/tools/lightreplacer.dmi and /dev/null differ
diff --git a/sound/effects/mop.ogg b/sound/effects/mop.ogg
new file mode 100644
index 00000000000..07503a83257
Binary files /dev/null and b/sound/effects/mop.ogg differ