diff --git a/code/game/objects/items/weapons/holosign.dm b/code/game/objects/items/weapons/holosign.dm index 72f11f6f992..9e0d05549ce 100644 --- a/code/game/objects/items/weapons/holosign.dm +++ b/code/game/objects/items/weapons/holosign.dm @@ -1,6 +1,6 @@ /obj/item/holosign_creator name = "holographic sign projector" - desc = "A handy-dandy holographic projector that displays a janitorial sign." + desc = "This shouldnt exist, if it does, tell a coder" icon = 'icons/obj/device.dmi' icon_state = "signmaker" item_state = "electronic" @@ -15,7 +15,7 @@ var/list/signs = list() var/max_signs = 10 var/creation_time = 0 //time to create a holosign in deciseconds. - var/holosign_type = /obj/structure/holosign/wetsign + var/holosign_type = null var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once /obj/item/holosign_creator/afterattack(atom/target, mob/user, flag) @@ -46,6 +46,7 @@ return H = new holosign_type(get_turf(target), src) to_chat(user, "You create [H] with [src].") + return H else to_chat(user, "[src] is projecting at max capacity!") @@ -58,6 +59,30 @@ qdel(H) to_chat(user, "You clear all active holograms.") +/obj/item/holosign_creator/janitor + name = "Janitorial Holosign projector" + desc = "A handy-dandy holographic projector that displays a janitorial sign." + holosign_type = /obj/structure/holosign/wetsign + var/wet_enabled = FALSE + +/obj/item/holosign_creator/janitor/AltClick(mob/user) + wet_enabled = !wet_enabled + playsound(loc, 'sound/weapons/empty.ogg', 20) + if(wet_enabled) + to_chat(user, "You enable the W.E.T. (wet evaporation timer)\nAny newly placed holographic signs will clear after the likely time it takes for a mopped tile to dry.") + else + to_chat(user, "You disable the W.E.T. (wet evaporation timer)\nAny newly placed holographic signs will now stay indefinitely.") + +/obj/item/holosign_creator/janitor/examine(mob/user) + . = ..() + if(ishuman(user)) + . += "Alt Click to [wet_enabled ? "deactivate" : "activate"] its built-in wet evaporation timer." + + +/obj/item/holosign_creator/janitor/afterattack(atom/target, mob/user, flag) + var/obj/structure/holosign/wetsign/WS = ..() + if(WS && wet_enabled) + WS.wet_timer_start(src) /obj/item/holosign_creator/security name = "security holobarrier projector" diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 3221f0f637c..a833f591972 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -24,6 +24,17 @@ GLOB.janitorial_equipment -= src return ..() +/obj/item/mop/proc/wet_mop(obj/o, mob/user) + if(o.reagents.total_volume < 1) + to_chat(user, "[o] is out of water!") + if(!istype(o, /obj/item/reagent_containers/glass/bucket)) + janicart_insert(user, o) + return + + o.reagents.trans_to(src, 5) + to_chat(user, "You wet [src] in [o].") + playsound(loc, 'sound/effects/slosh.ogg', 25, 1) + /obj/item/mop/proc/clean(turf/simulated/A) if(reagents.has_reagent("water", 1) || reagents.has_reagent("cleaner", 1) || reagents.has_reagent("holywater", 1)) A.clean_blood() @@ -42,7 +53,7 @@ var/turf/simulated/T = get_turf(A) - if(istype(A, /obj/item/reagent_containers/glass/bucket) || istype(A, /obj/structure/janitorialcart)) + if(istype(A, /obj/item/reagent_containers/glass/bucket) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/structure/mopbucket)) return if(istype(T)) @@ -52,14 +63,12 @@ to_chat(user, "You finish mopping.") clean(T) - /obj/effect/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/mop) || istype(I, /obj/item/soap)) return else return ..() - /obj/item/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) J.put_in_cart(src, user) J.mymop=src @@ -113,7 +122,6 @@ STOP_PROCESSING(SSobj, src) return ..() - /obj/item/mop/advanced/cyborg /obj/item/mop/advanced/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 1d2334a69eb..821e8e1f936 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -402,14 +402,14 @@ /obj/item/flashlight, /obj/item/reagent_containers/spray, /obj/item/soap, - /obj/item/holosign_creator, + /obj/item/holosign_creator/janitor, /obj/item/melee/flyswatter, /obj/item/storage/bag/trash ) /obj/item/storage/belt/janitor/full/populate_contents() new /obj/item/lightreplacer(src) - new /obj/item/holosign_creator(src) + new /obj/item/holosign_creator/janitor(src) new /obj/item/reagent_containers/spray/cleaner(src) new /obj/item/soap(src) new /obj/item/grenade/chem_grenade/cleaner(src) diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 505ae16b3f7..7a1e8aa515d 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -89,8 +89,8 @@ new /obj/item/storage/bag/trash(src) new /obj/item/lightreplacer(src) new /obj/item/lightreplacer(src) - new /obj/item/holosign_creator(src) - new /obj/item/holosign_creator(src) + new /obj/item/holosign_creator/janitor(src) + new /obj/item/holosign_creator/janitor(src) new /obj/item/watertank/janitor(src) new /obj/item/watertank/janitor(src) new /obj/item/storage/belt/janitor(src) diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index 13b5ba64140..ec57df2adf0 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -41,6 +41,13 @@ desc = "The words flicker as if they mean nothing." icon_state = "holosign" +/obj/structure/holosign/wetsign/proc/wet_timer_start(obj/item/holosign_creator/HS_C) + addtimer(CALLBACK(src, .proc/wet_timer_finish, HS_C), 82 SECONDS, TIMER_UNIQUE) + +/obj/structure/holosign/wetsign/proc/wet_timer_finish(obj/item/holosign_creator/HS_C) + playsound(HS_C.loc, 'sound/machines/chime.ogg', 20, 1) + qdel(src) + /obj/structure/holosign/barrier name = "holo barrier" desc = "A short holographic barrier which can only be passed by walking." diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 5c9b3393808..7cd8f5c1917 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -32,21 +32,15 @@ QDEL_NULL(myreplacer) return ..() -/obj/structure/janitorialcart/proc/wet_mop(obj/item/mop, mob/user) - if(reagents.total_volume < 1) - to_chat(user, "[src] is out of water!") - else - reagents.trans_to(mop, 5) // - to_chat(user, "You wet [mop] in [src].") - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) user.drop_item() - I.loc = src + I.forceMove(src) updateUsrDialog() to_chat(user, "You put [I] into [src].") return +/obj/structure/janitorialcart/on_reagent_change() + update_icon() /obj/structure/janitorialcart/attackby(obj/item/I, mob/user, params) var/fail_msg = "There is already one of those in [src]." @@ -55,7 +49,7 @@ if(istype(I, /obj/item/mop)) var/obj/item/mop/m=I if(m.reagents.total_volume < m.reagents.maximum_volume) - wet_mop(m, user) + m.wet_mop(src, user) return if(!mymop) m.janicart_insert(user, src) @@ -185,3 +179,17 @@ overlays += "cart_replacer" if(signs) overlays += "cart_sign[signs]" + if(reagents.total_volume > 0) + var/image/reagentsImage = image(icon,src,"cart_reagents0") + reagentsImage.alpha = 150 + switch((reagents.total_volume/reagents.maximum_volume)*100) + if(1 to 25) + reagentsImage.icon_state = "cart_reagents1" + if(26 to 50) + reagentsImage.icon_state = "cart_reagents2" + if(51 to 75) + reagentsImage.icon_state = "cart_reagents3" + if(76 to 100) + reagentsImage.icon_state = "cart_reagents4" + reagentsImage.icon += mix_color_from_reagents(reagents.reagent_list) + add_overlay(reagentsImage) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index cec34f384df..a99832bae49 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -5,6 +5,8 @@ icon_state = "mopbucket" density = 1 container_type = OPENCONTAINER + face_while_pulling = FALSE + var/obj/item/mop/mymop = null var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite /obj/structure/mopbucket/Initialize(mapload) @@ -27,11 +29,52 @@ /obj/structure/mopbucket/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/mop)) - if(src.reagents.total_volume >= 2) - src.reagents.trans_to(W, 2) - to_chat(user, "You wet the mop") - playsound(src.loc, 'sound/effects/slosh.ogg', 25, 1) - if(src.reagents.total_volume < 1) - to_chat(user, "Out of water!") + var/obj/item/mop/m = W + if(m.reagents.total_volume < m.reagents.maximum_volume) + m.wet_mop(src, user) + return + if(!mymop) + m.janicart_insert(user, src) + return + to_chat(user, "Theres already a mop in the mopbucket.") return return ..() + +/obj/structure/mopbucket/proc/put_in_cart(obj/item/mop/I, mob/user) + user.drop_item() + I.forceMove(src) + to_chat(user, "You put [I] into [src].") + return + +/obj/structure/mopbucket/on_reagent_change() + update_icon() + +/obj/structure/mopbucket/update_icon() + overlays.Cut() + if(mymop) + overlays += image(icon,"mopbucket_mop") + if(reagents.total_volume > 0) + var/image/reagentsImage = image(icon, src, "mopbucket_reagents0") + reagentsImage.alpha = 150 + switch((reagents.total_volume/reagents.maximum_volume)*100) + if(1 to 25) + reagentsImage.icon_state = "mopbucket_reagents1" + if(26 to 50) + reagentsImage.icon_state = "mopbucket_reagents2" + if(51 to 75) + reagentsImage.icon_state = "mopbucket_reagents3" + if(76 to 100) + reagentsImage.icon_state = "mopbucket_reagents4" + reagentsImage.icon += mix_color_from_reagents(reagents.reagent_list) + add_overlay(reagentsImage) + +/obj/structure/mopbucket/attack_hand(mob/living/user) + . = ..() + if(mymop) + user.put_in_hands(mymop) + to_chat(user, "You take [mymop] from [src].") + mymop = null + update_icon() + return + + diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 66baf0cbbc6..ebe9152add1 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -419,7 +419,7 @@ /obj/item/storage/bag/trash/cyborg, /obj/item/mop/advanced/cyborg, /obj/item/lightreplacer/cyborg, - /obj/item/holosign_creator, + /obj/item/holosign_creator/janitor, /obj/item/extinguisher/mini ) emag_modules = list(/obj/item/reagent_containers/spray/cyborg_lube, /obj/item/restraints/handcuffs/cable/zipties/cyborg) diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 5c64a4782ba..7dc15e82155 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -283,7 +283,6 @@ /obj/item/reagent_containers/glass/beaker/drugs/meth list_reagents = list("methamphetamine" = 10) - /obj/item/reagent_containers/glass/bucket desc = "It's a bucket." name = "bucket" @@ -317,6 +316,10 @@ reagents.clear_reagents() /obj/item/reagent_containers/glass/bucket/attackby(obj/D, mob/user, params) + if(istype(D, /obj/item/mop)) + var/obj/item/mop/m = D + m.wet_mop(src, user) + return if(isprox(D)) to_chat(user, "You add [D] to [src].") qdel(D) diff --git a/code/modules/research/designs/janitorial_designs.dm b/code/modules/research/designs/janitorial_designs.dm index 8ac988a51e9..9b06e77d04e 100644 --- a/code/modules/research/designs/janitorial_designs.dm +++ b/code/modules/research/designs/janitorial_designs.dm @@ -32,13 +32,13 @@ category = list("Janitorial") /datum/design/holosign - name = "Holographic Sign Projector" - desc = "A holograpic projector used to project various warning signs." + name = "Janitorial Holographic Sign Projector" + desc = "A holograpic projector used to project wet warning signs." id = "holosign" req_tech = list("programming" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_GLASS = 1000) - build_path = /obj/item/holosign_creator + build_path = /obj/item/holosign_creator/janitor category = list("Janitorial") /datum/design/light_replacer diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index e9182fd0cb3..c04b4a1f8ab 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -296,7 +296,7 @@ /obj/item/organ/internal/cyberimp/arm/janitorial name = "janitorial toolset implant" desc = "A set of janitorial tools hidden behind a concealed panel on the user's arm" - contents = newlist(/obj/item/mop/advanced, /obj/item/soap, /obj/item/lightreplacer, /obj/item/holosign_creator, /obj/item/melee/flyswatter, /obj/item/reagent_containers/spray/cleaner/safety) + contents = newlist(/obj/item/mop/advanced, /obj/item/soap, /obj/item/lightreplacer, /obj/item/holosign_creator/janitor, /obj/item/melee/flyswatter, /obj/item/reagent_containers/spray/cleaner/safety) origin_tech = "materials=3;engineering=4;biotech=3" action_icon = list(/datum/action/item_action/organ_action/toggle = 'icons/obj/clothing/belts.dmi') action_icon_state = list(/datum/action/item_action/organ_action/toggle = "janibelt") diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 09f8a6cc748..0f05067b4f3 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index e2a1f7cfae2..65a688c8543 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ