diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
index 25dcbac4f60..b7d09bb54eb 100644
--- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
+++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
@@ -2788,7 +2788,7 @@
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/science/ordnance)
"yb" = (
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/obj/item/mop,
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/broken_floor,
diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm
index 091c494c899..d613c0d6438 100644
--- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm
+++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm
@@ -654,7 +654,7 @@
/turf/open/floor/iron,
/area/ruin/space/has_grav/derelictoutpost/cargobay)
"cI" = (
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/structure/cable,
/turf/open/floor/iron,
/area/ruin/space/has_grav/derelictoutpost/cargobay)
diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
index 1595f7a067d..d3556556eef 100644
--- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
+++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
@@ -2212,7 +2212,7 @@
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/powered/hilbertresearchfacility)
"Wg" = (
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/turf/open/floor/plating,
/area/ruin/space/has_grav/powered/hilbertresearchfacility)
"Wm" = (
diff --git a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm
index 3a87ee689c5..f6d3c45fcd2 100644
--- a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm
+++ b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm
@@ -29,7 +29,7 @@
/turf/open/floor/plating,
/area/ruin/space/has_grav/powered/cat_man)
"ai" = (
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/item/mop,
/obj/item/reagent_containers/cup/bucket,
/obj/effect/decal/cleanable/cobweb/cobweb2,
@@ -41,7 +41,7 @@
/turf/open/floor/plating,
/area/ruin/space/has_grav/powered/cat_man)
"ak" = (
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/turf/open/floor/plating,
/area/ruin/space/has_grav/powered/cat_man)
"al" = (
diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
index 45144496b25..c8dc6d43b4b 100644
--- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
@@ -8837,7 +8837,7 @@
"Yg" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/janitorialcart{
+/obj/structure/mop_bucket/janitorialcart{
dir = 4
},
/obj/item/reagent_containers/cup/bucket,
diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm
index 55ab088dd3e..786a955abea 100644
--- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm
+++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm
@@ -298,7 +298,7 @@
/turf/open/floor/plating,
/area/ruin/space/has_grav/hotel/power)
"cS" = (
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/item/mop,
/obj/item/lightreplacer,
/turf/open/floor/catwalk_floor,
diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm
index dab6c8ea02f..1b9c003e8c3 100644
--- a/_maps/RandomZLevels/SnowCabin.dmm
+++ b/_maps/RandomZLevels/SnowCabin.dmm
@@ -277,7 +277,7 @@
desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
name = "sink"
},
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/item/mop,
/obj/item/reagent_containers/cup/bucket,
/obj/item/clothing/suit/caution,
diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm
index 39d2fd80fbd..41091845b61 100644
--- a/_maps/RandomZLevels/snowdin.dmm
+++ b/_maps/RandomZLevels/snowdin.dmm
@@ -4039,7 +4039,7 @@
pixel_x = 5;
pixel_y = 5
},
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/item/mop,
/turf/open/floor/iron/dark,
/area/awaymission/snowdin/post/custodials)
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 976ef7cc855..35e86ccbe07 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -72683,7 +72683,7 @@
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
"rLO" = (
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/item/mop,
/obj/item/reagent_containers/cup/bucket,
/obj/item/radio/intercom/directional/east,
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index d5a2a09e148..4a9ff580cbd 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -5831,7 +5831,7 @@
/turf/open/floor/iron/dark,
/area/station/service/chapel)
"bMs" = (
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
"bMz" = (
@@ -40551,7 +40551,7 @@
/area/station/engineering/atmos)
"mxA" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/janitorialcart{
+/obj/structure/mop_bucket/janitorialcart{
dir = 4
},
/obj/item/mop,
@@ -45910,7 +45910,7 @@
/turf/open/floor/iron/showroomfloor,
/area/station/security/warden)
"oaB" = (
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/turf/open/floor/iron,
/area/station/service/janitor)
"oaG" = (
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 992675343c5..93682779e6b 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -23858,7 +23858,7 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"gPZ" = (
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/effect/turf_decal/delivery,
/obj/machinery/light/small/directional/east,
/obj/effect/turf_decal/tile/neutral{
@@ -47082,7 +47082,7 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"nts" = (
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/tile/neutral{
dir = 8
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index b318b364ddd..e26a8676ae3 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -10361,7 +10361,7 @@
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
"dPa" = (
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/obj/item/mop,
/obj/effect/landmark/blobstart,
/obj/effect/mapping_helpers/broken_floor,
@@ -16698,7 +16698,7 @@
/area/space/nearstation)
"ghN" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron,
/area/station/service/janitor)
@@ -39283,7 +39283,7 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"nWj" = (
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/obj/machinery/light/small/directional/west,
/obj/item/mop,
/turf/open/floor/plating,
@@ -63358,7 +63358,7 @@
/turf/open/floor/iron/white,
/area/station/science/research)
"wkH" = (
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/obj/item/mop,
/obj/structure/sign/poster/random/directional/north,
/turf/open/floor/plating,
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index f13e057101f..d50687d7e31 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -2627,7 +2627,7 @@
/turf/open/floor/wood,
/area/centcom/central_command_areas/admin)
"hU" = (
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/obj/item/mop,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/centcom/syndicate_mothership/control)
diff --git a/_maps/map_files/tramstation/modular_pieces/maintenance_lowercargosci_attachment_a_3.dmm b/_maps/map_files/tramstation/modular_pieces/maintenance_lowercargosci_attachment_a_3.dmm
index 774d783974e..e15134471bf 100644
--- a/_maps/map_files/tramstation/modular_pieces/maintenance_lowercargosci_attachment_a_3.dmm
+++ b/_maps/map_files/tramstation/modular_pieces/maintenance_lowercargosci_attachment_a_3.dmm
@@ -82,7 +82,7 @@
/area/station/maintenance/starboard/central)
"V" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/mopbucket{
+/obj/structure/mop_bucket{
pixel_y = 15;
pixel_x = 5
},
diff --git a/_maps/map_files/tramstation/modular_pieces/maintenance_lowerdorm_attachment_a_3.dmm b/_maps/map_files/tramstation/modular_pieces/maintenance_lowerdorm_attachment_a_3.dmm
index 84ea46a78d7..e45b1dbe589 100644
--- a/_maps/map_files/tramstation/modular_pieces/maintenance_lowerdorm_attachment_a_3.dmm
+++ b/_maps/map_files/tramstation/modular_pieces/maintenance_lowerdorm_attachment_a_3.dmm
@@ -63,7 +63,7 @@
"W" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/directional/north,
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/item/mop,
/turf/open/floor/iron/smooth,
/area/station/maintenance/department/crew_quarters/dorms)
diff --git a/_maps/map_files/tramstation/modular_pieces/maintenance_uppermedsci_attachment_b_3.dmm b/_maps/map_files/tramstation/modular_pieces/maintenance_uppermedsci_attachment_b_3.dmm
index 8ae48fd55e1..10c5d96b265 100644
--- a/_maps/map_files/tramstation/modular_pieces/maintenance_uppermedsci_attachment_b_3.dmm
+++ b/_maps/map_files/tramstation/modular_pieces/maintenance_uppermedsci_attachment_b_3.dmm
@@ -6,7 +6,7 @@
/area/station/maintenance/department/science)
"b" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/obj/item/mop,
/turf/open/floor/iron/smooth,
/area/station/maintenance/department/science)
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index 36f3a532a26..c1593b2b9c3 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -53185,7 +53185,7 @@
/area/station/security/brig)
"sTZ" = (
/obj/effect/turf_decal/bot,
-/obj/structure/janitorialcart,
+/obj/structure/mop_bucket/janitorialcart,
/obj/item/mop,
/obj/effect/turf_decal/trimline/neutral/filled/line{
dir = 10
diff --git a/_maps/shuttles/emergency_casino.dmm b/_maps/shuttles/emergency_casino.dmm
index 9c8b7d2929d..514da314e01 100644
--- a/_maps/shuttles/emergency_casino.dmm
+++ b/_maps/shuttles/emergency_casino.dmm
@@ -1219,7 +1219,7 @@
/turf/open/floor/wood,
/area/shuttle/escape)
"MS" = (
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/obj/item/mop,
/mob/living/simple_animal/bot/cleanbot,
/turf/open/floor/mineral/titanium/yellow,
diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm
index 204b8f534c6..e81ba2d01ae 100644
--- a/_maps/shuttles/whiteship_pubby.dmm
+++ b/_maps/shuttles/whiteship_pubby.dmm
@@ -1188,7 +1188,7 @@
dir = 5
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/obj/item/soap/nanotrasen,
/obj/item/mop,
/turf/open/floor/iron/dark,
diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm
index b6a025b1da9..46cf3b62bde 100644
--- a/_maps/templates/battlecruiser_starfury.dmm
+++ b/_maps/templates/battlecruiser_starfury.dmm
@@ -2345,7 +2345,7 @@
/area/shuttle/sbc_starfury)
"hI" = (
/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/mopbucket,
+/obj/structure/mop_bucket,
/obj/item/mop,
/turf/open/floor/iron/dark/side,
/area/shuttle/sbc_starfury)
diff --git a/code/game/objects/effects/spawners/random/trash.dm b/code/game/objects/effects/spawners/random/trash.dm
index a4f22af39c0..c9ca7ca2862 100644
--- a/code/game/objects/effects/spawners/random/trash.dm
+++ b/code/game/objects/effects/spawners/random/trash.dm
@@ -142,7 +142,7 @@
/obj/item/reagent_containers/cup/rag = 2,
/obj/item/reagent_containers/cup/bucket = 2,
/obj/effect/decal/cleanable/blood/old = 2,
- /obj/structure/mopbucket = 2,
+ /obj/structure/mop_bucket = 2,
/mob/living/simple_animal/axolotl = 1,
)
@@ -187,7 +187,7 @@
spawn_loot_count = 2
spawn_loot_double = FALSE
loot = list(
- /obj/structure/mopbucket = 10,
+ /obj/structure/mop_bucket = 10,
/obj/item/mop = 5,
/obj/item/clothing/suit/caution = 3,
/obj/item/reagent_containers/cup/bucket = 1,
diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm
index a53ada4cdd3..544a6dfa334 100644
--- a/code/game/objects/items/mop.dm
+++ b/code/game/objects/items/mop.dm
@@ -20,6 +20,10 @@
var/mopspeed = 1.5 SECONDS
force_string = "robust... against germs"
var/insertable = TRUE
+ var/static/list/clean_blacklist = typecacheof(list(
+ /obj/item/reagent_containers/cup/bucket,
+ /obj/structure/mop_bucket,
+ ))
/obj/item/mop/Initialize(mapload)
. = ..()
@@ -33,7 +37,7 @@
///Checks whether or not we should clean.
/obj/item/mop/proc/should_clean(datum/cleaning_source, atom/atom_to_clean, mob/living/cleaner)
- if(istype(atom_to_clean, /obj/item/reagent_containers/cup/bucket) || istype(atom_to_clean, /obj/structure/janitorialcart))
+ if(clean_blacklist[atom_to_clean.type])
return DO_NOT_CLEAN
if(reagents.total_volume < 0.1)
to_chat(cleaner, span_warning("Your mop is dry!"))
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janitor.dm
similarity index 68%
rename from code/game/objects/structures/janicart.dm
rename to code/game/objects/structures/janitor.dm
index 3850b9f2fa5..6a385e5f70e 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janitor.dm
@@ -1,13 +1,68 @@
#define CART_HAS_MINIMUM_REAGENT_VOLUME !(reagents.total_volume < 1)
-/obj/structure/janitorialcart
- name = "janitorial cart"
- desc = "This is the alpha and omega of sanitation."
+/obj/structure/mop_bucket
+ name = "mop bucket"
+ desc = "Fill it with water, but don't forget a mop!"
icon = 'icons/obj/janitor.dmi'
- icon_state = "cart"
- anchored = FALSE
+ icon_state = "mopbucket"
density = TRUE
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
+ /// The icon used for the water overlay
+ var/water_icon = "mopbucket_water"
+
+/obj/structure/mop_bucket/Initialize(mapload)
+ . = ..()
+ create_reagents(100, OPENCONTAINER)
+ register_context()
+
+/obj/structure/mop_bucket/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
+ . = ..()
+
+ if(istype(held_item, /obj/item/mop))
+ context[SCREENTIP_CONTEXT_RMB] = "Wet [held_item]"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(istype(held_item, /obj/item/reagent_containers))
+ context[SCREENTIP_CONTEXT_LMB] = "Fill mop bucket"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ return .
+
+/obj/structure/mop_bucket/attackby(obj/item/weapon, mob/user, params)
+ if(istype(weapon, /obj/item/reagent_containers))
+ update_appearance(UPDATE_OVERLAYS)
+ return FALSE // skip attack animation when refilling cart
+
+ return ..()
+
+/obj/structure/mop_bucket/attackby_secondary(obj/item/weapon, mob/user, params)
+ if(istype(weapon, /obj/item/mop))
+ if(weapon.reagents.total_volume >= weapon.reagents.maximum_volume)
+ balloon_alert(user, "mop is already soaked!")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ if(!CART_HAS_MINIMUM_REAGENT_VOLUME)
+ balloon_alert(user, "mop bucket is empty!")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ reagents.trans_to(weapon, weapon.reagents.maximum_volume, transfered_by = user)
+ balloon_alert(user, "wet mop")
+ playsound(src, 'sound/effects/slosh.ogg', 25, vary = TRUE)
+
+ if(istype(weapon, /obj/item/reagent_containers) || istype(weapon, /obj/item/mop))
+ update_appearance(UPDATE_OVERLAYS)
+ return SECONDARY_ATTACK_CONTINUE_CHAIN // skip attack animations when refilling cart
+
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+
+/obj/structure/mop_bucket/update_overlays()
+ . = ..()
+ if(reagents.total_volume > 0)
+ . += water_icon
+
+/obj/structure/mop_bucket/janitorialcart
+ name = "janitorial cart"
+ desc = "This is the alpha and omega of sanitation."
+ icon_state = "cart"
+ water_icon = "cart_water"
var/obj/item/storage/bag/trash/mybag
var/obj/item/mop/mymop
var/obj/item/pushbroom/mybroom
@@ -16,14 +71,11 @@
var/list/obj/item/clothing/suit/caution/held_signs = list()
var/max_signs = 4
-/obj/structure/janitorialcart/Initialize(mapload)
+/obj/structure/mop_bucket/janitorialcart/Initialize(mapload)
. = ..()
- create_reagents(100, OPENCONTAINER)
GLOB.janitor_devices += src
- register_context() //Context sensitive tooltips. See add_context()
-
-/obj/structure/janitorialcart/Destroy()
+/obj/structure/mop_bucket/janitorialcart/Destroy()
GLOB.janitor_devices -= src
QDEL_NULL(myreplacer)
QDEL_NULL(myspray)
@@ -33,7 +85,7 @@
QDEL_LIST(held_signs)
return ..()
-/obj/structure/janitorialcart/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
+/obj/structure/mop_bucket/janitorialcart/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
if(istype(arrived, /obj/item/storage/bag/trash))
mybag = arrived
else if(istype(arrived, /obj/item/mop))
@@ -46,10 +98,10 @@
myreplacer = arrived
else if(istype(arrived, /obj/item/clothing/suit/caution))
held_signs += arrived
- update_appearance(UPDATE_ICON)
+ update_appearance(UPDATE_OVERLAYS)
return ..()
-/obj/structure/janitorialcart/Exited(atom/movable/gone, direction)
+/obj/structure/mop_bucket/janitorialcart/Exited(atom/movable/gone, direction)
if(gone == mybag)
mybag = null
else if(gone == mymop)
@@ -63,10 +115,10 @@
else if(gone in held_signs)
held_signs -= gone
if(!QDELING(src))
- update_appearance(UPDATE_ICON)
+ update_appearance(UPDATE_OVERLAYS)
return ..()
-/obj/structure/janitorialcart/examine(mob/user)
+/obj/structure/mop_bucket/janitorialcart/examine(mob/user)
. = ..()
if(contents.len)
. += span_bold(span_info("\nIt is carrying:"))
@@ -89,63 +141,47 @@
. += span_notice("Right-click with a mop to wet it.")
. += span_info("Crowbar it to dump its mop bucket onto [get_turf(src)].")
-/obj/structure/janitorialcart/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
- if(!held_item)
- if(!contents.len)
- return NONE
+/obj/structure/mop_bucket/janitorialcart/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
+ . = ..()
+
+ if(isnull(held_item) && contents.len)
if(mymop)
context[SCREENTIP_CONTEXT_RMB] = "Remove [mymop]"
+ . = CONTEXTUAL_SCREENTIP_SET
if(contents.len == 1)
context[SCREENTIP_CONTEXT_LMB] = "Remove [contents[1]]"
- return CONTEXTUAL_SCREENTIP_SET
+ . = CONTEXTUAL_SCREENTIP_SET
context[SCREENTIP_CONTEXT_LMB] = "Search cart"
- return CONTEXTUAL_SCREENTIP_SET
- if(istype(held_item, /obj/item/mop))
- . = NONE
- if(!mymop)
- context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
- . = CONTEXTUAL_SCREENTIP_SET
- if(CART_HAS_MINIMUM_REAGENT_VOLUME && held_item.reagents.total_volume < held_item.reagents.maximum_volume)
- context[SCREENTIP_CONTEXT_RMB] = "Wet [held_item]"
- . = CONTEXTUAL_SCREENTIP_SET
- return
- if(istype(held_item, /obj/item/pushbroom))
- if(mybroom)
- return NONE
- context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
- return CONTEXTUAL_SCREENTIP_SET
- if(istype(held_item, /obj/item/storage/bag/trash))
- if(mybag)
- return NONE
- context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
- return CONTEXTUAL_SCREENTIP_SET
- if(istype(held_item, /obj/item/reagent_containers/spray/cleaner))
- if(myspray)
- return NONE
- context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
- return CONTEXTUAL_SCREENTIP_SET
- if(istype(held_item, /obj/item/clothing/suit/caution))
- if(held_signs.len >= max_signs)
- return NONE
- context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
- return CONTEXTUAL_SCREENTIP_SET
- if(istype(held_item, /obj/item/lightreplacer))
- if(myreplacer)
- return NONE
- context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
- return CONTEXTUAL_SCREENTIP_SET
- if((held_item.is_refillable() && held_item.reagents.total_volume) && reagents.total_volume < reagents.maximum_volume)
- context[SCREENTIP_CONTEXT_RMB] = "Fill [src]'s mop bucket"
- return CONTEXTUAL_SCREENTIP_SET
- if(held_item.tool_behaviour == TOOL_CROWBAR && CART_HAS_MINIMUM_REAGENT_VOLUME)
- context[SCREENTIP_CONTEXT_LMB] = "Dump [src]'s mop bucket on [get_turf(src)]"
- return CONTEXTUAL_SCREENTIP_SET
- if(mybag?.atom_storage?.max_specific_storage >= held_item.w_class)
- context[SCREENTIP_CONTEXT_RMB] = "Insert [held_item] into [mybag]"
- return CONTEXTUAL_SCREENTIP_SET
- return NONE
+ . = CONTEXTUAL_SCREENTIP_SET
-/obj/structure/janitorialcart/attackby(obj/item/attacking_item, mob/user, params)
+ if(istype(held_item, /obj/item/mop) && !mymop)
+ context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
+ . = CONTEXTUAL_SCREENTIP_SET
+ if(istype(held_item, /obj/item/pushbroom) && !mybroom)
+ context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
+ . = CONTEXTUAL_SCREENTIP_SET
+ if(istype(held_item, /obj/item/storage/bag/trash) && !mybag)
+ context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
+ . = CONTEXTUAL_SCREENTIP_SET
+ if(istype(held_item, /obj/item/reagent_containers/spray/cleaner) && !myspray)
+ context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
+ . = CONTEXTUAL_SCREENTIP_SET
+ if(istype(held_item, /obj/item/clothing/suit/caution) && held_signs.len < max_signs)
+ context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
+ . = CONTEXTUAL_SCREENTIP_SET
+ if(istype(held_item, /obj/item/lightreplacer) && !myreplacer)
+ context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]"
+ . = CONTEXTUAL_SCREENTIP_SET
+ if(istype(held_item) && held_item.tool_behaviour == TOOL_CROWBAR && CART_HAS_MINIMUM_REAGENT_VOLUME)
+ context[SCREENTIP_CONTEXT_LMB] = "Dump [src]'s mop bucket on [get_turf(src)]"
+ . = CONTEXTUAL_SCREENTIP_SET
+ if(!isnull(held_item) && mybag?.atom_storage?.max_specific_storage >= held_item.w_class)
+ context[SCREENTIP_CONTEXT_RMB] = "Insert [held_item] into [mybag]"
+ . = CONTEXTUAL_SCREENTIP_SET
+
+ return . || NONE
+
+/obj/structure/mop_bucket/janitorialcart/attackby(obj/item/attacking_item, mob/user, params)
if(istype(attacking_item, /obj/item/mop))
if(mymop)
balloon_alert(user, "already has \a [mymop]!")
@@ -188,12 +224,9 @@
balloon_alert(user, "placed [attacking_item]")
return
- if(attacking_item.is_drainable())
- return FALSE //so we can fill the cart via our afterattack without bludgeoning it
-
return ..()
-/obj/structure/janitorialcart/crowbar_act(mob/living/user, obj/item/tool)
+/obj/structure/mop_bucket/janitorialcart/crowbar_act(mob/living/user, obj/item/tool)
if(!CART_HAS_MINIMUM_REAGENT_VOLUME)
balloon_alert(user, "mop bucket is empty!")
return TOOL_ACT_TOOLTYPE_SUCCESS
@@ -204,24 +237,16 @@
to_chat(user, span_notice("You dumped the contents of [src]'s mop bucket onto the floor."))
reagents.expose(loc)
reagents.clear_reagents()
- update_appearance(UPDATE_ICON)
+ update_appearance(UPDATE_OVERLAYS)
return TOOL_ACT_TOOLTYPE_SUCCESS
-/obj/structure/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, params)
- if(istype(weapon, /obj/item/mop))
- var/obj/item/mop/your_mop = weapon
- if(your_mop.reagents.total_volume >= your_mop.reagents.maximum_volume)
- balloon_alert(user, "[your_mop] is already soaked!")
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(!CART_HAS_MINIMUM_REAGENT_VOLUME)
- balloon_alert(user, "mop bucket is empty!")
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- reagents.trans_to(your_mop, your_mop.reagents.maximum_volume, transfered_by = user)
- balloon_alert(user, "wet [your_mop]")
- playsound(src, 'sound/effects/slosh.ogg', 25, TRUE)
+/obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, params)
+ . = ..()
+ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(weapon.is_refillable())
+ if(istype(weapon, /obj/item/reagent_containers))
+ update_appearance(UPDATE_OVERLAYS)
return SECONDARY_ATTACK_CONTINUE_CHAIN //so we can empty the cart via our afterattack without trying to put the item in the bag
if(mybag?.attackby(weapon, user))
@@ -229,7 +254,7 @@
return SECONDARY_ATTACK_CONTINUE_CHAIN
-/obj/structure/janitorialcart/attack_hand(mob/user, list/modifiers)
+/obj/structure/mop_bucket/janitorialcart/attack_hand(mob/user, list/modifiers)
. = ..()
if(.)
return
@@ -297,7 +322,7 @@
else
return
-/obj/structure/janitorialcart/attack_hand_secondary(mob/user, list/modifiers)
+/obj/structure/mop_bucket/janitorialcart/attack_hand_secondary(mob/user, list/modifiers)
if(!mymop)
return SECONDARY_ATTACK_CONTINUE_CHAIN
balloon_alert(user, "removed [mymop]")
@@ -310,20 +335,13 @@
* Arguments:
* * user The mob interacting with a menu
*/
-/obj/structure/janitorialcart/proc/check_menu(mob/living/user)
- if(!istype(user))
- return FALSE
- if(user.incapacitated())
- return FALSE
- return TRUE
+/obj/structure/mop_bucket/janitorialcart/proc/check_menu(mob/living/user)
+ return istype(user) && !user.incapacitated()
-/obj/structure/janitorialcart/update_overlays()
+/obj/structure/mop_bucket/janitorialcart/update_overlays()
. = ..()
if(mybag)
- if(istype(mybag, /obj/item/storage/bag/trash/bluespace))
- . += "cart_bluespace_garbage"
- else
- . += "cart_garbage"
+ . += istype(mybag, /obj/item/storage/bag/trash/bluespace) ? "cart_bluespace_garbage" : "cart_garbage"
if(mymop)
. += "cart_mop"
if(mybroom)
@@ -334,8 +352,5 @@
. += "cart_replacer"
if(held_signs.len)
. += "cart_sign[min(held_signs.len, 4)]"
- if(reagents.total_volume > 0)
- . += "cart_water"
-
#undef CART_HAS_MINIMUM_REAGENT_VOLUME
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
deleted file mode 100644
index 1e1bfb54265..00000000000
--- a/code/game/objects/structures/mop_bucket.dm
+++ /dev/null
@@ -1,31 +0,0 @@
-/obj/structure/mopbucket
- name = "mop bucket"
- desc = "Fill it with water, but don't forget a mop!"
- icon = 'icons/obj/janitor.dmi'
- icon_state = "mopbucket"
- density = TRUE
- var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
-
-
-/obj/structure/mopbucket/Initialize(mapload)
- . = ..()
- create_reagents(100, OPENCONTAINER)
-
-/obj/structure/mopbucket/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/mop))
- if(reagents.total_volume < 1)
- to_chat(user, span_warning("[src] is out of water!"))
- else
- reagents.trans_to(I, 5, transfered_by = user)
- to_chat(user, span_notice("You wet [I] in [src]."))
- playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE)
- update_appearance()
- return TRUE //Stop the click handling chain so the mop after attack doesn't proc and you don't wet the turf the bucket is on
- else
- . = ..()
- update_appearance()
-
-/obj/structure/mopbucket/update_overlays()
- . = ..()
- if(reagents.total_volume > 0)
- . += "mopbucket_water"
diff --git a/code/modules/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm
index 44cb86c89f2..d511bc15bd1 100644
--- a/code/modules/cargo/packs/service.dm
+++ b/code/modules/cargo/packs/service.dm
@@ -47,7 +47,7 @@
desc = "The keystone to any successful janitor. As long as you have feet, this pair \
of galoshes will keep them firmly planted on the ground. Also contains a janitorial cart."
cost = CARGO_CRATE_VALUE * 4
- contains = list(/obj/structure/janitorialcart,
+ contains = list(/obj/structure/mop_bucket/janitorialcart,
/obj/item/clothing/shoes/galoshes,
)
crate_name = "janitorial cart crate"
diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm
index 966f66f514b..6ad369e8433 100644
--- a/code/modules/modular_computers/file_system/programs/radar.dm
+++ b/code/modules/modular_computers/file_system/programs/radar.dm
@@ -277,8 +277,8 @@
var/obj/item/mop/wet_mop = custodial_tools
tool_name = "[wet_mop.reagents.total_volume ? "Wet" : "Dry"] [wet_mop.name]"
- if(istype(custodial_tools, /obj/structure/janitorialcart))
- var/obj/structure/janitorialcart/janicart = custodial_tools
+ if(istype(custodial_tools, /obj/structure/mop_bucket/janitorialcart))
+ var/obj/structure/mop_bucket/janitorialcart/janicart = custodial_tools
tool_name = "[janicart.name] - Water level: [janicart.reagents.total_volume] / [janicart.reagents.maximum_volume]"
if(istype(custodial_tools, /mob/living/simple_animal/bot/cleanbot))
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 486da26b9a4..4be30fc719f 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -67,6 +67,7 @@
trans = src.reagents.trans_to(target, amount_per_transfer_from_this, transfered_by = user)
to_chat(user, span_notice("You transfer [trans] unit\s of the solution."))
update_appearance()
+ target.update_appearance()
else
@@ -83,6 +84,7 @@
to_chat(user, span_notice("You fill [src] with [trans] unit\s of the solution."))
update_appearance()
+ target.update_appearance()
/obj/item/reagent_containers/dropper/update_overlays()
. = ..()
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 53d308937d0..b8286116e0a 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -27,7 +27,7 @@
/obj/item/reagent_containers/spray/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
- if(istype(target, /obj/structure/sink) || istype(target, /obj/structure/janitorialcart) || istype(target, /obj/machinery/hydroponics))
+ if(istype(target, /obj/structure/sink) || istype(target, /obj/structure/mop_bucket/janitorialcart) || istype(target, /obj/machinery/hydroponics))
return
if((target.is_drainable() && !target.is_refillable()) && (get_dist(src, target) <= 1) && can_fill_from_container)
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 6b37d95a66f..a6ef7c810e2 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -83,6 +83,7 @@
log_combat(user, living_target, "injected", src, addition="which had [contained]")
reagents.trans_to(target, amount_per_transfer_from_this, transfered_by = user, methods = INJECT)
to_chat(user, span_notice("You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units."))
+ target.update_appearance()
/obj/item/reagent_containers/syringe/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters)
if (!try_syringe(target, user, proximity_flag))
@@ -118,6 +119,7 @@
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transfered_by = user) // transfer from, transfer to - who cares?
to_chat(user, span_notice("You fill [src] with [trans] units of the solution. It now contains [reagents.total_volume] units."))
+ target.update_appearance()
return SECONDARY_ATTACK_CONTINUE_CHAIN
diff --git a/tgstation.dme b/tgstation.dme
index 489cd66868d..e9c3b39ab8a 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1923,7 +1923,7 @@
#include "code\game\objects\structures\headpike.dm"
#include "code\game\objects\structures\hivebot.dm"
#include "code\game\objects\structures\holosign.dm"
-#include "code\game\objects\structures\janicart.dm"
+#include "code\game\objects\structures\janitor.dm"
#include "code\game\objects\structures\kitchen_spike.dm"
#include "code\game\objects\structures\ladders.dm"
#include "code\game\objects\structures\lattice.dm"
@@ -1933,7 +1933,6 @@
#include "code\game\objects\structures\memorial.dm"
#include "code\game\objects\structures\mineral_doors.dm"
#include "code\game\objects\structures\mirror.dm"
-#include "code\game\objects\structures\mop_bucket.dm"
#include "code\game\objects\structures\morgue.dm"
#include "code\game\objects\structures\mystery_box.dm"
#include "code\game\objects\structures\noticeboard.dm"