diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index a09d66a880d..85d4aeacb01 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -1,21 +1,30 @@
+//Hydroponics tank and base code
/obj/item/weapon/watertank
- name = "S.U.N.S.H.I.N.E. water sprayer"
- desc = "A watertank backpack with nozzle to water plants."
+ name = "backpack water tank"
+ desc = "A S.U.N.S.H.I.N.E. brand watertank backpack with nozzle to water plants."
icon = 'icons/obj/hydroponics.dmi'
icon_state = "waterbackpack"
item_state = "waterbackpack"
w_class = 4.0
slot_flags = SLOT_BACK
- slowdown = 3
+ slowdown = 1
action_button_name = "Toggle Mister"
- var/obj/item/weapon/reagent_containers/glass/mister/noz
+ var/obj/item/weapon/noz
var/on = 0
var/volume = 500
/obj/item/weapon/watertank/New()
..()
create_reagents(volume)
+ noz = make_noz()
+ return
+
+/obj/item/weapon/watertank/examine()
+ set src in usr
+ ..()
+ for(var/datum/reagent/R in reagents.reagent_list)
+ usr << "[round(R.volume)] units of [R.name] left."
return
/obj/item/weapon/watertank/ui_action_click()
@@ -33,28 +42,32 @@
var/mob/living/carbon/human/user = usr
if(on)
//Detach the nozzle into the user's hands
- noz = new(src)
var/list/L = list("left hand" = slot_l_hand,"right hand" = slot_r_hand)
if(!user.equip_in_one_of_slots(noz, L))
on = 0
user << "You need a free hand to hold the mister!"
+ return
+ noz.loc = user
else
//Remove from their hands and put back "into" the tank
remove_noz(user)
return
+/obj/item/weapon/watertank/proc/make_noz()
+ return new /obj/item/weapon/reagent_containers/spray/mister(src)
+
/obj/item/weapon/watertank/equipped(mob/user, slot)
if (slot != slot_back)
remove_noz(user)
/obj/item/weapon/watertank/proc/remove_noz(mob/user)
- if (noz != null)
- var/mob/living/carbon/human/M = user
+ var/mob/living/carbon/human/M = user
+ if(noz in get_both_hands(M))
M.u_equip(noz)
return
/obj/item/weapon/watertank/Destroy()
- if (noz)
+ if (on)
var/M = get(noz, /mob)
remove_noz(M)
..()
@@ -64,7 +77,7 @@
// Therefore, it's designed to be "locked" to the player's hands or extended back onto
// the watertank backpack. Allowing it to be placed elsewhere or created without a parent
// watertank object will likely lead to weird behaviour or runtimes.
-/obj/item/weapon/reagent_containers/glass/mister
+/obj/item/weapon/reagent_containers/spray/mister
name = "water mister"
desc = "A mister nozzle attached to a water tank."
icon = 'icons/obj/hydroponics.dmi'
@@ -74,22 +87,93 @@
amount_per_transfer_from_this = 50
possible_transfer_amounts = list(25,50,100)
volume = 500
- can_be_placed_into = list()
var/obj/item/weapon/watertank/tank
-/obj/item/weapon/reagent_containers/glass/mister/New(parent_tank)
+/obj/item/weapon/reagent_containers/spray/mister/New(parent_tank)
..()
- if (!parent_tank || !istype(parent_tank, /obj/item/weapon/watertank)) //To avoid weird issues from admin spawns
- var/mob/living/carbon/human/M = usr
- M.u_equip(src)
- Destroy()
- else
+ if(check_tank_exists(parent_tank, src))
tank = parent_tank
reagents = tank.reagents //This mister is really just a proxy for the tank's reagents
- return
+ loc = tank
+ return
-/obj/item/weapon/reagent_containers/glass/mister/dropped(mob/user as mob)
+/obj/item/weapon/reagent_containers/spray/mister/dropped(mob/user as mob)
user << "The mister snaps back onto the watertank!"
tank.on = 0
- Destroy()
+ loc = tank
+
+/obj/item/weapon/reagent_containers/spray/mister/attack_self()
+ return
+
+/proc/check_tank_exists(parent_tank, var/mob/living/carbon/human/M, var/obj/O)
+ if (!parent_tank || !istype(parent_tank, /obj/item/weapon/watertank)) //To avoid weird issues from admin spawns
+ M.u_equip(O)
+ qdel(0)
+ return 0
+ else
+ return 1
+
+//Janitor tank
+/obj/item/weapon/watertank/janitor
+ name = "backpack water tank"
+ desc = "A janitorial watertank backpack with nozzle to clean dirt and graffiti."
+ icon_state = "waterbackpackjani"
+ item_state = "waterbackpackjani"
+
+/obj/item/weapon/watertank/janitor/New()
+ ..()
+ reagents.add_reagent("cleaner", 250)
+
+
+/obj/item/weapon/reagent_containers/spray/mister/janitor
+ name = "janitor spray nozzle"
+ desc = "A janitorial spray nozzle attached to a watertank, designed to clean up large messes."
+ icon = 'icons/obj/hydroponics.dmi'
+ icon_state = "misterjani"
+ item_state = "misterjani"
+ amount_per_transfer_from_this = 5
+ possible_transfer_amounts = null
+
+/obj/item/weapon/watertank/janitor/make_noz()
+ return new /obj/item/weapon/reagent_containers/spray/mister/janitor(src)
+
+/obj/item/weapon/reagent_containers/spray/mister/janitor/attack_self(var/mob/user)
+ amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10)
+ user << "You [amount_per_transfer_from_this == 10 ? "remove" : "fix"] the nozzle. You'll now use [amount_per_transfer_from_this] units per spray."
+
+//Atmos tank
+/obj/item/weapon/watertank/atmos
+ name = "backpack water tank"
+ desc = "A backpack watertank with fire extinguisher nozzle, intended to fight fires. Shouldn't toxins have one of these?"
+ icon_state = "waterbackpackatmos"
+ item_state = "waterbackpackatmos"
+ volume = 100
+
+/obj/item/weapon/watertank/atmos/make_noz()
+ return new /obj/item/weapon/extinguisher/mini/nozzle(src)
+
+/obj/item/weapon/extinguisher/mini/nozzle
+ name = "fire extinguisher nozzle"
+ desc = "A fire extinguisher nozzle attached to a water tank."
+ icon = 'icons/obj/hydroponics.dmi'
+ icon_state = "misteratmos"
+ item_state = "misteratmos"
+ safety = 0
+ var/obj/item/weapon/watertank/tank
+
+/obj/item/weapon/extinguisher/mini/nozzle/New(parent_tank)
+ if(check_tank_exists(parent_tank, src))
+ tank = parent_tank
+ reagents = tank.reagents
+ max_water = tank.volume
+ loc = tank
+ return
+
+/obj/item/weapon/extinguisher/mini/nozzle/dropped(mob/user as mob)
+ user << "The nozzle snaps back onto the watertank!"
+ tank.on = 0
+ loc = tank
+
+/obj/item/weapon/extinguisher/mini/nozzle/attack_self()
+ return
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 7d05fa0b9b2..34fda885462 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -453,4 +453,8 @@ var/list/intents = list("help","disarm","grab","harm")
var/obj/item/device/multitool/P = user.get_multitool()
if(!istype(P))
return null
- return P
\ No newline at end of file
+ return P
+
+/proc/get_both_hands(mob/living/carbon/M)
+ var/list/hands = list(M.l_hand, M.r_hand)
+ return hands