diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm
index 04a9c886b79..76e94c9792f 100644
--- a/code/ZAS/Fire.dm
+++ b/code/ZAS/Fire.dm
@@ -95,6 +95,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
return 0
/turf/simulated/create_fire(fl)
+
if(fire)
fire.firelevel = max(fl, fire.firelevel)
return 1
@@ -111,6 +112,11 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
if(fuel)
LAZYADD(zone.fuel_objs, fuel)
+ var/obj/effect/decal/cleanable/foam/extinguisher_foam = locate() in src
+ if(extinguisher_foam && extinguisher_foam.reagents)
+ fire.firelevel *= max(0,1 - (extinguisher_foam.reagents.total_volume*0.04))
+ //25 units will eliminate the fire completely
+
return 0
/obj/fire
diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm
index 19cefd82cdf..44b58252052 100644
--- a/code/__defines/chemistry.dm
+++ b/code/__defines/chemistry.dm
@@ -5,6 +5,10 @@
#define CHEM_BLOOD 3
#define CHEM_BREATHE 4
+#define WET_TYPE_WATER 1
+#define WET_TYPE_LUBE 2
+#define WET_TYPE_ICE 3
+
#define MINIMUM_CHEMICAL_VOLUME 0.01
#define SOLID 1
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index e6f44601f79..2069788c7d6 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -190,7 +190,7 @@
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/New()
reagents = new/datum/reagents(max_water)
reagents.my_atom = src
- reagents.add_reagent("water", max_water)
+ reagents.add_reagent("monoammoniumphosphate", max_water)
..()
return
@@ -199,7 +199,7 @@
if(get_dist(chassis, target)>2) return
set_ready_state(0)
if(do_after_cooldown(target))
- if( istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
+ if( istype(target, /obj/structure/reagent_dispensers) && get_dist(chassis,target) <= 1)
var/obj/o = target
var/amount = o.reagents.trans_to_obj(src, 200)
occupant_message("[amount] units transferred into internal tank.")
diff --git a/code/game/mecha/equipment/tracking_beacon.dm b/code/game/mecha/equipment/tracking_beacon.dm
index 6892b2443ac..afbf8bf58f9 100644
--- a/code/game/mecha/equipment/tracking_beacon.dm
+++ b/code/game/mecha/equipment/tracking_beacon.dm
@@ -91,7 +91,7 @@
qdel(src)
return
-/obj/item/mecha_parts/mecha_tracking/ex_act()
+/obj/item/mecha_parts/mecha_tracking/ex_act(var/severity = 2.0)
qdel(src)
return
diff --git a/code/game/objects/effects/chem/water.dm b/code/game/objects/effects/chem/water.dm
index 33e66096b3b..1aee086a8b4 100644
--- a/code/game/objects/effects/chem/water.dm
+++ b/code/game/objects/effects/chem/water.dm
@@ -79,4 +79,4 @@
//used by evil things
/obj/effect/effect/water/firewater
name = "napalm gel"
- icon_state = "mustard"
\ No newline at end of file
+ icon_state = "mustard"
diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm
index 5fb93e61a04..9c87636b336 100644
--- a/code/game/objects/effects/decals/Cleanable/fuel.dm
+++ b/code/game/objects/effects/decals/Cleanable/fuel.dm
@@ -107,4 +107,51 @@
var/sticky = min(rand(5,25), amount)
if(sticky > 1)
L.adjust_fire_stacks(sticky)
- amount = max(1, amount - sticky)
\ No newline at end of file
+ amount = max(1, amount - sticky)
+
+/obj/effect/decal/cleanable/foam //Copied from liquid fuel
+ name = "foam"
+ desc = "Some kind of extinguishing foam."
+ gender = PLURAL
+ density = 0
+ anchored = 1
+ layer = 2
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "white_foam"
+ var/amount = 1
+
+/obj/effect/decal/cleanable/foam/Initialize(mapload, amt = 1, nologs = 0)
+ src.amount = amt
+
+ var/has_spread = 0
+ //Be absorbed by any other liquid fuel in the tile.
+ for(var/obj/effect/decal/cleanable/foam/other in loc)
+ if(other != src)
+ other.amount += src.amount
+ other.Spread()
+ has_spread = 1
+ break
+
+ if(!has_spread)
+ Spread()
+ QDEL_IN(src, 2 MINUTES)
+ else
+ qdel(src)
+
+/obj/effect/decal/cleanable/foam/proc/Spread(exclude=list())
+ if(amount < 15) return
+ var/turf/simulated/S = loc
+ if(!istype(S)) return
+ for(var/d in cardinal)
+ var/turf/simulated/target = get_step(src,d)
+ var/turf/simulated/origin = get_turf(src)
+ if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
+ var/obj/effect/decal/cleanable/foam/other_foam = locate() in target
+ if(other_foam)
+ other_foam.amount += amount*0.25
+ if(!(other_foam in exclude))
+ exclude += src
+ other_foam.Spread(exclude)
+ else
+ new/obj/effect/decal/cleanable/foam(target, amount*0.25,1)
+ amount *= 0.75
\ No newline at end of file
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index 727a59948c3..a20b6335eda 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -85,7 +85,7 @@
QDEL_IN(src, duration)
-/obj/effect/overlay/temp/ex_act()
+/obj/effect/overlay/temp/ex_act(var/severity = 2.0)
return
/obj/effect/overlay/temp/dir_setting
diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
index a567548c74f..b9688f5e5ac 100644
--- a/code/game/objects/effects/temporary_visuals/temporary_visual.dm
+++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
@@ -20,7 +20,7 @@
/obj/effect/temp_visual/singularity_pull()
return
-/obj/effect/temp_visual/ex_act()
+/obj/effect/temp_visual/ex_act(var/severity = 2.0)
return
/obj/effect/temp_visual/dir_setting
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index c45a542448c..b85ca04a883 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -109,7 +109,7 @@
M << "Your chameleon-projector deactivates."
master.disrupt()
-/obj/effect/dummy/chameleon/ex_act()
+/obj/effect/dummy/chameleon/ex_act(var/severity = 2.0)
for(var/mob/M in src)
M << "Your chameleon-projector deactivates."
master.disrupt()
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index 3eaa2d7b349..5a7aaceb3f6 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -1,3 +1,76 @@
+/obj/item/weapon/reagent_containers/extinguisher_refill
+ name = "extinguisher refiller"
+ desc = "A one time use extinguisher refiller that allows fire extinguishers to be refilled with an aerosol mix. Just pour in the reagents and twist."
+ icon = 'icons/obj/items.dmi'
+ icon_state = "metal_canister"
+ item_state = "metal_canister"
+ hitsound = 'sound/weapons/smash.ogg'
+ flags = CONDUCT | OPENCONTAINER
+ throwforce = 8
+ w_class = 4.0 // Don't want to give people free bluespace beakers.
+ throw_speed = 2
+ throw_range = 10
+ force = 8
+ matter = list(DEFAULT_WALL_MATERIAL = 90)
+ attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
+ amount_per_transfer_from_this = 300
+ possible_transfer_amounts = null
+ volume = 300
+
+/obj/item/weapon/reagent_containers/extinguisher_refill/attackby(var/obj/O as obj, var/mob/user as mob)
+
+ if(istype(O,/obj/item/weapon/extinguisher))
+ var/obj/item/weapon/extinguisher/E = O
+ if(src.is_open_container())
+ to_chat(user,"\The [src] needs to be secured first!")
+ else if(src.reagents.total_volume <= 0)
+ to_chat(user,"\The [src] is empty!")
+ else if(E.reagents.total_volume < E.reagents.maximum_volume)
+ src.reagents.trans_to(E, src.reagents.total_volume)
+ user.visible_message("[user] fills \the [E] with the [src].", "You fill \the [E] with the [src].")
+ playsound(E.loc, 'sound/items/stimpack.ogg', 50, 1)
+ else
+ to_chat(user,"\The [E] is full!")
+ return
+
+ . = ..()
+
+/obj/item/weapon/reagent_containers/extinguisher_refill/attack_self(mob/user as mob) //Copied from inhalers.
+ if(is_open_container())
+ if(reagents && reagents.reagent_list.len)
+ to_chat(user,"With a quick twist of the cartridge's lid, you secure the reagents inside \the [src].")
+ flags ^= OPENCONTAINER
+ else
+ to_chat(user,"You can't secure the cartridge without putting reagents in!")
+ else
+ to_chat(user,"\The reagents inside [src] are already secured!")
+ return
+
+/obj/item/weapon/reagent_containers/extinguisher_refill/examine(var/mob/user) //Copied from inhalers.
+ if(!..(user, 2))
+ return
+
+ if(is_open_container())
+ if(reagents && reagents.reagent_list.len)
+ to_chat(user,"It contains [round(reagents.total_volume, accuracy)] units of non-aerosol mix.")
+ else
+ to_chat(user,"It is empty.")
+ else
+ if(reagents && reagents.reagent_list.len)
+ to_chat(user,"The reagents are secured in the aerosol mix.")
+ else
+ to_chat(user,"The cartridge seems spent.")
+
+/obj/item/weapon/reagent_containers/extinguisher_refill/filled
+ name = "extinguisher refiller (monoammonium phosphate)"
+ desc = "A one time use extinguisher refiller that allows fire extinguishers to be refilled with an aerosol mix. This one is contains monoammonium phosphate."
+
+/obj/item/weapon/reagent_containers/extinguisher_refill/filled/Initialize()
+ . =..()
+ reagents.add_reagent("monoammoniumphosphate", volume)
+ flags &= ~OPENCONTAINER
+ return
+
/obj/item/weapon/extinguisher
name = "fire extinguisher"
desc = "A traditional red fire extinguisher."
@@ -16,6 +89,7 @@
var/spray_particles = 3
var/spray_amount = 10 //units of liquid per particle
+ var/spray_distance = 3
var/max_water = 300
var/last_use = 1.0
var/safety = 1
@@ -27,21 +101,25 @@
icon_state = "miniFE0"
item_state = "miniFE"
hitsound = null //it is much lighter, after all.
+ flags = OPENCONTAINER
throwforce = 2
w_class = 2.0
- force = 3.0
- max_water = 150
- spray_particles = 3
+ force = 2.0
+ max_water = 60
+ spray_amount = 10
+ spray_particles = 1
+ spray_distance = 1
sprite_name = "miniFE"
/obj/item/weapon/extinguisher/New()
create_reagents(max_water)
- reagents.add_reagent("water", max_water)
+ reagents.add_reagent("monoammoniumphosphate", max_water)
..()
/obj/item/weapon/extinguisher/examine(mob/user)
if(..(user, 0))
- user << text("\icon[] [] contains [] units of water left!", src, src.name, src.reagents.total_volume)
+ to_chat(user,"The [src] contains [src.reagents.total_volume] units of reagents.")
+ to_chat(user,"The safety is [safety ? "on" : "off"].")
return
/obj/item/weapon/extinguisher/attack_self(mob/user as mob)
@@ -51,6 +129,24 @@
user << "The safety is [safety ? "on" : "off"]."
return
+/obj/item/weapon/extinguisher/attackby(var/obj/O as obj, var/mob/user as mob)
+
+ if(istype(O,/obj/item/weapon/reagent_containers/extinguisher_refill))
+ var/obj/item/weapon/reagent_containers/extinguisher_refill/ER = O
+ if(ER.is_open_container())
+ to_chat(user,"\The [ER] needs to be secured first!")
+ else if(ER.reagents.total_volume <= 0)
+ to_chat(user,"\The [ER] is empty!")
+ else if (src.reagents.total_volume < src.reagents.maximum_volume)
+ ER.reagents.trans_to(src, ER.reagents.total_volume)
+ user.visible_message("[user] fills \the [src] with the [ER].", "You fill \the [src] with the [ER].")
+ playsound(ER.loc, 'sound/items/stimpack.ogg', 50, 1)
+ else
+ to_chat(user,"\The [src] is full!")
+ return
+
+ . = ..()
+
/obj/item/weapon/extinguisher/proc/propel_object(var/obj/O, mob/user, movementdirection)
if(O.anchored) return
@@ -70,23 +166,6 @@
sleep(3)
/obj/item/weapon/extinguisher/afterattack(var/atom/target, var/mob/user, var/flag)
- //TODO; Add support for reagents in water.
-
- if( istype(target, /obj/structure/reagent_dispensers/watertank) && flag)
- var/obj/o = target
- var/amount = o.reagents.trans_to_obj(src, 50)
-
- if (src.reagents.total_volume == 300)
- user << "The fire extinguisher is full!"
- return 0
-
- if (o.reagents.total_volume < 1)
- user << "There is nothing left in the [target]."
- return 0
- else
- user << "You fill [src] with [amount] units of the contents of [target]."
- playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
- return
if (!safety)
if (src.reagents.total_volume < 1)
@@ -125,7 +204,7 @@
W.create_reagents(spray_amount)
reagents.trans_to_obj(W, spray_amount)
W.set_color()
- W.set_up(my_target)
+ W.set_up(my_target,spray_distance,3)
if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity() == 0))
user.inertia_dir = get_dir(target, user)
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index b9fd028d2d6..05a3462c922 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -35,7 +35,7 @@
qdel(src)
return
-/obj/item/weapon/a_gift/ex_act()
+/obj/item/weapon/a_gift/ex_act(var/severity = 2.0)
qdel(src)
return
@@ -215,7 +215,7 @@
return
-/obj/item/weapon/xmasgift/ex_act()
+/obj/item/weapon/xmasgift/ex_act(var/severity = 2.0)
qdel(src)
return
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index c066182d7d3..8a27b00f4bb 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -304,7 +304,7 @@
/obj/item/weapon/grenade/chem_grenade/large/phoroncleaner
name = "large cardox grenade"
- desc = "A large smoke grenade containing a heavy amount of cardox. Use in case of phoron leaks. Warning: Harmful to Vaurca health."
+ desc = "A large chemical grenade containing a heavy amount of cardox. Use in case of phoron leaks. Warning: Harmful to Vaurca health."
stage = 2
path = 1
@@ -347,3 +347,24 @@
beakers += B2
icon_state = initial(icon_state) +"_locked"
+/obj/item/weapon/grenade/chem_grenade/monoammoniumphosphate
+ name = "extinguisher grenade"
+ desc = "BLAM!-brand foaming extinguisher. Incredibly useful for taking out large chemical fires at a distance."
+ stage = 2
+ path = 1
+
+ Initialize()
+ . = ..()
+ var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
+ var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
+
+ B1.reagents.add_reagent("surfactant", 40)
+ B1.reagents.add_reagent("monoammoniumphosphate", 20)
+ B2.reagents.add_reagent("water", 40)
+ B2.reagents.add_reagent("monoammoniumphosphate", 20)
+
+ detonator = new/obj/item/device/assembly_holder/timer_igniter(src)
+
+ beakers += B1
+ beakers += B2
+ icon_state = initial(icon_state) +"_locked"
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/landmines.dm b/code/game/objects/items/weapons/landmines.dm
index e4ab7294997..27e13c064e8 100644
--- a/code/game/objects/items/weapons/landmines.dm
+++ b/code/game/objects/items/weapons/landmines.dm
@@ -85,7 +85,7 @@
if(deployed)
trigger()
-/obj/item/weapon/landmine/ex_act()
+/obj/item/weapon/landmine/ex_act(var/severity = 2.0)
if(deployed)
trigger()
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 977a8d3054a..1a352973dd5 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -342,7 +342,7 @@
message_admins("[key_name_admin(user)] triggered a fueltank explosion.")
log_game("[key_name(user)] triggered a fueltank explosion with a welding tool.",ckey=key_name(user))
user << span("alert", "That was stupid of you.")
- tank.explode()
+ tank.ex_act(3.0)
return
else
tank.armed = 0
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index 042b84180dd..c04610ed207 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -244,7 +244,7 @@
healthcheck()
return 0
-/obj/effect/energy_net/ex_act()
+/obj/effect/energy_net/ex_act(var/severity = 2.0)
health = 0
healthcheck()
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index bb92fdc0ead..aa781398829 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -701,3 +701,11 @@
return pickweight(random_stock_uncommon)
if ("3")
return pickweight(random_stock_common)
+
+/obj/structure/closet/crate/extinguisher_catridges
+ name = "crate of extinguisher cartridges"
+ desc = "Contains a dozen empty extinguisher cartridges."
+
+/obj/structure/closet/crate/extinguisher_catridges/fill()
+ for(var/a = 1 to 12)
+ new /obj/item/weapon/reagent_containers/extinguisher_refill(src)
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 54fc6dc55ab..f85976b840b 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -91,7 +91,7 @@
desc = "It looks dead."
dead = 1
//No complex interactions, just make them fragile
-/obj/structure/flora/pottedplant/ex_act()
+/obj/structure/flora/pottedplant/ex_act(var/severity = 2.0)
death()
return ..()
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 4f59e26688d..9047e099773 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -369,6 +369,16 @@
desc = "A sink used for washing one's hands and face."
anchored = 1
var/busy = 0 //Something's being washed at the moment
+ var/amount_per_transfer_from_this = 10
+ var/possible_transfer_amounts = list(5,10,15,25,30,50,60,100,120,250,300)
+
+/obj/structure/sink/verb/set_APTFT() //set amount_per_transfer_from_this
+ set name = "Set transfer amount"
+ set category = "Object"
+ set src in view(1)
+ var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
+ if (N)
+ amount_per_transfer_from_this = N
/obj/structure/sink/attack_hand(mob/user as mob)
if (ishuman(user))
@@ -427,7 +437,7 @@
usr << "\The [RG] is already full."
return
- RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this))
+ RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, amount_per_transfer_from_this))
oviewers(3, usr) << "[usr] fills \the [RG] using \the [src]."
usr << "You fill \the [RG] using \the [src]."
if ("Empty")
@@ -435,9 +445,9 @@
usr << "\The [RG] is already empty."
return
- RG.reagents.clear_reagents()
- oviewers(3, usr) << "[usr] empties \the [RG] into \the [src]."
- usr << "You empty \the [RG] into \the [src]."
+ var/empty_amount = RG.reagents.trans_to(src, RG.amount_per_transfer_from_this)
+ oviewers(3, usr) << "[usr] empties [empty_amount]u of \the [RG] into \the [src]."
+ usr << "You empty [empty_amount]u of \the [RG] into \the [src]."
return
// Filling/empying Syringes
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 88c38711364..42a6b1a4fe2 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -525,7 +525,7 @@
/obj/structure/window/reinforced/crescent/attackby()
return
-/obj/structure/window/reinforced/crescent/ex_act()
+/obj/structure/window/reinforced/crescent/ex_act(var/severity = 2.0)
return
/obj/structure/window/reinforced/crescent/hitby()
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index e6500518309..547e0145f70 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -1,6 +1,7 @@
/turf/simulated
name = "station"
- var/wet = 0
+ var/wet_type = 0
+ var/wet_amount = 0
var/image/wet_overlay = null
//Mining resources (for the large drills).
@@ -18,26 +19,53 @@
roof_type = /turf/simulated/floor/airless/ceiling
-/turf/simulated/proc/wet_floor(var/wet_val = 1)
- if(wet_val < wet)
- return
+/turf/simulated/proc/wet_floor(var/apply_type = WET_TYPE_WATER, var/amount = 1)
- if(!wet)
- wet = wet_val
+ //Wet type:
+ //WET_TYPE_WATER = water
+ //WET_TYPE_LUBE = lube
+ //WET_TYPE_ICE = ice
+
+ if(!wet_type)
+ wet_type = apply_type
+ else if(apply_type != wet_type)
+ if(apply_type == WET_TYPE_WATER && wet_type == WET_TYPE_LUBE)
+ wet_type = WET_TYPE_WATER
+ else if(apply_type == WET_TYPE_ICE && (wet_type == WET_TYPE_WATER || wet_type == WET_TYPE_LUBE))
+ wet_type = apply_type
+
+ if(wet_amount <= 0)
+ wet_amount = 0 //Just in case
+
+ if(!wet_overlay)
wet_overlay = image('icons/effects/water.dmi',src,"wet_floor")
add_overlay(wet_overlay, TRUE)
+ wet_amount += amount
+
+ var/max_wetness = 10 //About 100 units per tile
+ if(wet_amount > max_wetness)
+ var/stored_wet = wet_amount - max_wetness
+ wet_amount -= max_wetness
+ var/wet_per_tile = stored_wet * 0.25
+ for(var/d in cardinal)
+ var/turf/simulated/target = get_step(src,d)
+ if(src.CanPass(null, target, 0, 0) && target.CanPass(null, src, 0, 0))
+ if(target.wet_amount)
+ var/edited_value = round(wet_per_tile * 0.5) //Prevent infinite loops
+ target.wet_floor(apply_type,edited_value)
+ wet_amount += edited_value
+ else
+ target.wet_floor(apply_type,wet_per_tile)
+
unwet_timer = addtimer(CALLBACK(src, .proc/unwet_floor), 120 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE)
/turf/simulated/proc/unwet_floor()
- --wet
- if (wet < 1)
- wet = 0
- if(wet_overlay)
- cut_overlay(wet_overlay, TRUE)
- wet_overlay = null
- else
- unwet_timer = addtimer(CALLBACK(src, .proc/unwet_floor), 120 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE)
+ wet_amount = 0
+ wet_type = 0
+ if(wet_overlay)
+ cut_overlay(wet_overlay, TRUE)
+ wet_overlay = null
/turf/simulated/clean_blood()
for(var/obj/effect/decal/cleanable/blood/B in contents)
@@ -112,16 +140,17 @@
bloodDNA = null
- if(src.wet)
+ if(src.wet_type && src.wet_amount)
- if(M.buckled || (src.wet == 1 && M.m_intent == "walk"))
+ if(M.buckled || (src.wet_type == 1 && M.m_intent == "walk"))
return
+ //Water
var/slip_dist = 1
var/slip_stun = 6
var/floor_type = "wet"
- switch(src.wet)
+ switch(src.wet_type)
if(2) // Lube
floor_type = "slippery"
slip_dist = 4
diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm
index 654b62cbdeb..4125881b7c5 100644
--- a/code/modules/assembly/igniter.dm
+++ b/code/modules/assembly/igniter.dm
@@ -22,8 +22,8 @@
if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
if (tank && tank.modded)
- tank.explode()
-
+ tank.ex_act(3.0)
+
spark(src, 4, cardinal)
return 1
diff --git a/code/modules/mob/abstract/abstract.dm b/code/modules/mob/abstract/abstract.dm
index 583701e97ac..25eeca124a8 100644
--- a/code/modules/mob/abstract/abstract.dm
+++ b/code/modules/mob/abstract/abstract.dm
@@ -23,7 +23,7 @@
/mob/abstract/conveyor_act()
return
-/mob/abstract/ex_act()
+/mob/abstract/ex_act(var/severity = 2.0)
return
/mob/abstract/singularity_act()
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 4bb271c90c9..8dd976bd13e 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -141,7 +141,7 @@
if(M.a_intent == I_HURT)
set_flee_target(M)
-/mob/living/simple_animal/cat/ex_act()
+/mob/living/simple_animal/cat/ex_act(var/severity = 2.0)
. = ..()
set_flee_target(src.loc)
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index ba78b3dae7e..23e122ec470 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -289,7 +289,7 @@
if (health < healthbefore)
instant_aggro()
-/mob/living/simple_animal/hostile/bear/ex_act()
+/mob/living/simple_animal/hostile/bear/ex_act(var/severity = 2.0)
var/healthbefore = health
..()
spawn(1)
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 72a23e84863..4f7e403dc3d 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -283,7 +283,7 @@
qdel(src)
return TRUE
-/obj/item/projectile/ex_act()
+/obj/item/projectile/ex_act(var/severity = 2.0)
return //explosions probably shouldn't delete projectiles
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
index 141fa1980dd..114f289523d 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
@@ -182,7 +182,7 @@
var/hotspot = (locate(/obj/fire) in T)
if(hotspot && !istype(T, /turf/space))
var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles)
- lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0)
+ lowertemp.temperature = max(lowertemp.temperature-2000, lowertemp.temperature / 2, 0)
lowertemp.react()
T.assume_air(lowertemp)
qdel(hotspot)
@@ -194,7 +194,7 @@
T.visible_message("The water sizzles as it lands on \the [T]!")
else if(volume >= 10)
- T.wet_floor(1)
+ T.wet_floor(WET_TYPE_WATER,volume)
/datum/reagent/water/touch_obj(var/obj/O)
if(istype(O))
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index 16a1542f5f7..7a98d65948a 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -288,7 +288,7 @@
*/
if(volume >= 3)
- T.wet_floor(2)
+ T.wet_floor(WET_TYPE_LUBE,volume)
/datum/reagent/nutriment/triglyceride/oil/initialize_data(var/newdata) // Called when the reagent is created.
..()
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
index fd229d16521..eb764b5e329 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
@@ -366,7 +366,7 @@
if(!istype(T))
return
if(volume >= 1)
- T.wet_floor(2)
+ T.wet_floor(WET_TYPE_LUBE,volume)
/datum/reagent/silicate
name = "Silicate"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index 2f7a02bc693..43643604bea 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -259,6 +259,51 @@
name = "Robust Harvest"
id = "robustharvest"
+/datum/reagent/toxin/fertilizer/monoammoniumphosphate
+ name = "Monoammonium Phosphate"
+ id = "monoammoniumphosphate"
+ strength = 0.25
+ description = "Commonly found in fire extinguishers, also works as a fertilizer."
+ reagent_state = SOLID
+ color = "#CCCCCC"
+ taste_description = "salty dirt"
+ metabolism = REM * 2
+
+/datum/reagent/toxin/fertilizer/monoammoniumphosphate/touch_turf(var/turf/simulated/T)
+
+ if(!istype(T))
+ return
+
+ var/hotspot = (locate(/obj/fire) in T)
+ if(hotspot && !istype(T, /turf/space))
+ var/datum/gas_mixture/lowertemp = T.return_air()
+ lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0)
+ lowertemp.react()
+ qdel(hotspot)
+
+ var/amount_to_remove = max(1,round(volume * 0.5))
+
+ new /obj/effect/decal/cleanable/foam(T, amount_to_remove)
+ remove_self(amount_to_remove)
+ return
+
+
+/datum/reagent/toxin/fertilizer/monoammoniumphosphate/touch_mob(var/mob/living/L, var/amount)
+ if(istype(L))
+ L.adjust_fire_stacks(-amount)
+ if(L.fire_stacks <= 0 )
+ L.fire_stacks = 0
+ L.ExtinguishMob()
+
+/datum/reagent/toxin/fertilizer/monoammoniumphosphate/affect_touch(var/mob/living/carbon/slime/S, var/alien, var/removed)
+ if(istype(S))
+ S.adjustToxLoss(8 * removed)
+ if(!S.client && S.Target)
+ S.Target = null
+ ++S.Discipline
+ if(dose == removed)
+ S.visible_message("[S]'s flesh sizzles where the liquid touches it!", "Your flesh burns in the liquid!")
+
/datum/reagent/toxin/plantbgone
name = "Plant-B-Gone"
id = "plantbgone"
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index d7810a7691e..6d6115bf9a2 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -537,6 +537,13 @@
required_reagents = list("cardox" = 0.1, "phoron" = 1)
result_amount = 0
+/datum/chemical_reaction/monoammoniumphosphate
+ name = "Monoammoniumphosphate"
+ id = "monoammoniumphosphate"
+ result = "monoammoniumphosphate"
+ required_reagents = list("ammonia" = 1, "sacid" = 1, "sodium" = 1, "phosphorus" = 1)
+ result_amount = 4
+
/datum/chemical_reaction/koispasteclean
name = "Filtered K'ois"
id = "koispasteclean"
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 85c1b619bcc..1c7a04c3e35 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -8,6 +8,35 @@
var/possible_transfer_amounts = list(5,10,15,25,30)
var/volume = 30
var/accuracy = 1
+ var/can_be_placed_into = list(
+ /obj/machinery/chem_master,
+ /obj/machinery/chemical_dispenser,
+ /obj/structure/reagent_dispensers,
+ /obj/machinery/reagentgrinder,
+ /obj/structure/table,
+ /obj/structure/closet,
+ /obj/structure/sink,
+ /obj/item/weapon/storage,
+ /obj/machinery/atmospherics/unary/cryo_cell,
+ /obj/machinery/dna_scannernew,
+ /obj/item/weapon/grenade/chem_grenade,
+ /mob/living/bot/medbot,
+ /obj/machinery/computer/pandemic,
+ /obj/item/weapon/storage/secure/safe,
+ /obj/machinery/iv_drip,
+ /obj/machinery/disease2/incubator,
+ /obj/machinery/disposal,
+ /mob/living/simple_animal/cow,
+ /mob/living/simple_animal/hostile/retaliate/goat,
+ /obj/machinery/computer/centrifuge,
+ /obj/machinery/sleeper,
+ /obj/machinery/smartfridge,
+ /obj/machinery/biogenerator,
+ /obj/machinery/constructable_frame,
+ /obj/machinery/radiocarbon_spectrometer,
+ /obj/item/weapon/storage/part_replacer
+ )
+ //The above list a misnomer. This basically means that anything in this list has their own way of handling reagent transfers and should be ignored in afterattack.
/obj/item/weapon/reagent_containers/verb/set_APTFT() //set amount_per_transfer_from_this
set name = "Set transfer amount"
@@ -27,19 +56,29 @@
return
/obj/item/weapon/reagent_containers/attack(mob/M as mob, mob/user as mob, def_zone)
- if(can_operate(M))//Checks if mob is lying down on table for surgery
- if(do_surgery(M, user, src))
- return
+ if(can_operate(M) && do_surgery(M, user, src))
+ return
-/obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user, flag)
- return
+/obj/item/weapon/reagent_containers/afterattack(var/obj/target, var/mob/user, var/proximity)
+ if(!proximity || !is_open_container())
+ return
+ if(is_type_in_list(target,can_be_placed_into))
+ return
+ if(standard_splash_mob(user, target))
+ return
+ if(standard_feed_mob(user,target))
+ return
+ if(standard_pour_into(user, target))
+ return
+ if(standard_splash_obj(user, target))
+ return
/obj/item/weapon/reagent_containers/proc/reagentlist() // For attack logs
if(reagents)
return reagents.get_reagents()
return "No reagent holder"
-/obj/item/weapon/reagent_containers/proc/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target) // This goes into afterattack
+/obj/item/weapon/reagent_containers/proc/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
if(!istype(target))
return 0
@@ -51,14 +90,29 @@
user << "[src] is full."
return 1
- var/trans = target.reagents.trans_to_obj(src, target:amount_per_transfer_from_this)
+ var/trans = target.reagents.trans_to_obj(src, target.amount_per_transfer_from_this)
user << "You fill [src] with [trans] units of the contents of [target]."
return 1
+/obj/item/weapon/reagent_containers/proc/standard_splash_obj(var/mob/user, var/target)
+
+ if(user.a_intent != I_HURT)
+ return
+
+ if(!reagents || !reagents.total_volume)
+ return
+
+ user.visible_message("\The [target] has been splashed with something by \the [user]!", "You splash the solution onto \the [target].")
+ reagents.splash(target, reagents.total_volume)
+ return
+
/obj/item/weapon/reagent_containers/proc/standard_splash_mob(var/mob/user, var/mob/target) // This goes into afterattack
if(!istype(target))
return
+ if(user.a_intent != I_HURT)
+ return
+
if(!reagents || !reagents.total_volume)
user << "[src] is empty."
return 1
@@ -67,15 +121,13 @@
user << "[target] is full."
return 1
-
-
var/contained = reagentlist()
target.attack_log += text("\[[time_stamp()]\] Has been splashed with [name] by [user.name] ([user.ckey]). Reagents: [contained]")
user.attack_log += text("\[[time_stamp()]\] Used the [name] to splash [target.name] ([target.key]). Reagents: [contained]")
msg_admin_attack("[user.name] ([user.ckey]) splashed [target.name] ([target.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)",ckey=key_name(user),ckey_target=key_name(target))
- user.visible_message("[target] has been splashed with something by [user]!", "You splash the solution onto [target].")
- reagents.splash(target, reagents.total_volume)
+ user.visible_message("\The [target] has been splashed with something by \the [user]!", "You splash the solution onto \the [target].")
+ reagents.splash(target, min(120,reagents.total_volume) ) //Splash Limit
if (istype(target, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = target
@@ -84,7 +136,7 @@
return 1
/obj/item/weapon/reagent_containers/proc/self_feed_message(var/mob/user)
- user << "You eat \the [src]"
+ user.visible_message("\The [user] drinks from \the [src]","You drink from \the [src]")
/obj/item/weapon/reagent_containers/proc/other_feed_message_start(var/mob/user, var/mob/target)
user.visible_message("[user] is trying to feed [target] \the [src]!")
@@ -93,7 +145,7 @@
user.visible_message("[user] has fed [target] \the [src]!")
/obj/item/weapon/reagent_containers/proc/feed_sound(var/mob/user)
- return
+ playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
/obj/item/weapon/reagent_containers/proc/standard_feed_mob(var/mob/user, var/mob/target) // This goes into attack
if(!istype(target))
@@ -121,7 +173,7 @@
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //puts a limit on how fast people can eat/drink things
self_feed_message(user)
- reagents.trans_to_mob(user, amount_per_transfer_from_this, CHEM_INGEST)
+ reagents.trans_to_mob(user, min(10,amount_per_transfer_from_this), CHEM_INGEST) //A sane limiter. So you don't go drinking 300u all at once.
feed_sound(user)
return 1
else
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 48a0d053d8e..b492b0dc065 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -51,34 +51,38 @@
reagent_volumes[T] = min(reagent_volumes[T] + 5, volume)
return 1
-/obj/item/weapon/reagent_containers/borghypo/attack(var/mob/living/M, var/mob/user)
- if(!istype(M))
+/obj/item/weapon/reagent_containers/borghypo/afterattack(var/mob/living/M, var/mob/user, proximity)
+
+ if(!proximity)
return
+ if(!istype(M))
+ return ..()
+
if(!reagent_volumes[reagent_ids[mode]])
- user << "The injector is empty."
+ to_chat(user,"The injector is empty.")
return
var/mob/living/carbon/human/H = M
if(istype(H))
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
if(!affected)
- user << "\The [H] is missing that limb!"
+ to_chat(user,"\The [H] is missing that limb!")
return
else if(affected.status & ORGAN_ROBOT)
- user << "You cannot inject a robotic limb."
+ to_chat(user,"You cannot inject a robotic limb.")
return
if (M.can_inject(user, 1))
visible_message("[user] injects [M] with their hypospray!", "You inject [M] with your hypospray!")
- M << "You feel a tiny prick!"
+ to_chat(M,"You feel a tiny prick!")
if(M.reagents)
var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]])
M.reagents.add_reagent(reagent_ids[mode], t)
reagent_volumes[reagent_ids[mode]] -= t
admin_inject_log(user, M, src, reagent_ids[mode], t)
- user << "[t] units injected. [reagent_volumes[reagent_ids[mode]]] units remaining."
+ to_chat(user,"[t] units injected. [reagent_volumes[reagent_ids[mode]]] units remaining.")
return
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob) //Change the mode
diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/reagents/reagent_containers/food.dm
index d41ce9c683c..b37103cbb28 100644
--- a/code/modules/reagents/reagent_containers/food.dm
+++ b/code/modules/reagents/reagent_containers/food.dm
@@ -35,5 +35,7 @@
pixel_x = (CELLSIZE * (0.5 + cell_x)) - center_of_mass["x"]
pixel_y = (CELLSIZE * (0.5 + cell_y)) - center_of_mass["y"]
+ . = ..()
+
#undef CELLS
#undef CELLSIZE
diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm
index c2523236508..adbdfda9f1a 100644
--- a/code/modules/reagents/reagent_containers/food/condiment.dm
+++ b/code/modules/reagents/reagent_containers/food/condiment.dm
@@ -29,26 +29,6 @@
if(!proximity)
return
- if(standard_dispenser_refill(user, target))
- return
- if(standard_pour_into(user, target))
- return
-
- if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
- if(!reagents || !reagents.total_volume)
- user << "There is no condiment left in \the [src]."
- return
-
- if(!target.reagents.get_free_space())
- user << "You can't add more condiment to \the [target]."
- return
-
- var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
- user << "You add [trans] units of the condiment to \the [target]."
-
-/obj/item/weapon/reagent_containers/food/condiment/feed_sound(var/mob/user)
- playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
-
/obj/item/weapon/reagent_containers/food/condiment/self_feed_message(var/mob/user)
user << "You swallow some of contents of \the [src]."
@@ -116,11 +96,7 @@
desc = "Garlic sauce, perfect for spicing up a plate of garlic."
center_of_mass = list("x"=16, "y"=6)
else
- name = "misc condiment bottle"
- if (reagents.reagent_list.len==1)
- desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
- else
- desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
+ desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
icon_state = "mixedcondiments"
center_of_mass = list("x"=16, "y"=6)
else
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 0b9df0bdae6..e24581bb756 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -41,21 +41,8 @@
/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone)
if(force && !(flags & NOBLUDGEON) && user.a_intent == I_HURT)
return ..()
-
- if(standard_feed_mob(user, M))
- return
-
return 0
-/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
- if(!proximity)
- return
- if(standard_dispenser_refill(user, target))
- return
- if(standard_pour_into(user, target))
- return
- return ..()
-
/obj/item/weapon/reagent_containers/food/drinks/standard_feed_mob(var/mob/user, var/mob/target)
if(!is_open_container())
user << "You need to open [src]!"
@@ -74,12 +61,6 @@
return 1
return ..()
-/obj/item/weapon/reagent_containers/food/drinks/self_feed_message(var/mob/user)
- user << "You swallow a gulp from \the [src]."
-
-/obj/item/weapon/reagent_containers/food/drinks/feed_sound(var/mob/user)
- playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
-
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
if(!..(user, 1))
return
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index ed01e8550a1..773f2ef2037 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -19,34 +19,6 @@
var/label_text = ""
- var/list/can_be_placed_into = list(
- /obj/machinery/chem_master/,
- /obj/machinery/chemical_dispenser,
- /obj/machinery/reagentgrinder,
- /obj/structure/table,
- /obj/structure/closet,
- /obj/structure/sink,
- /obj/item/weapon/storage,
- /obj/machinery/atmospherics/unary/cryo_cell,
- /obj/machinery/dna_scannernew,
- /obj/item/weapon/grenade/chem_grenade,
- /mob/living/bot/medbot,
- /obj/machinery/computer/pandemic,
- /obj/item/weapon/storage/secure/safe,
- /obj/machinery/iv_drip,
- /obj/machinery/disease2/incubator,
- /obj/machinery/disposal,
- /mob/living/simple_animal/cow,
- /mob/living/simple_animal/hostile/retaliate/goat,
- /obj/machinery/computer/centrifuge,
- /obj/machinery/sleeper,
- /obj/machinery/smartfridge/,
- /obj/machinery/biogenerator,
- /obj/machinery/constructable_frame,
- /obj/machinery/radiocarbon_spectrometer,
- /obj/item/weapon/storage/part_replacer
- )
-
/obj/item/weapon/reagent_containers/glass/Initialize()
. = ..()
base_name = name
@@ -78,26 +50,6 @@
/obj/item/weapon/reagent_containers/glass/AltClick(var/mob/user)
set_APTFT()
-/obj/item/weapon/reagent_containers/glass/afterattack(var/obj/target, var/mob/user, var/flag)
- if(!is_open_container() || !flag)
- return
-
- for(var/type in can_be_placed_into)
- if(istype(target, type))
- return
-
- if(standard_splash_mob(user, target))
- return
- if(standard_dispenser_refill(user, target))
- return
- if(standard_pour_into(user, target))
- return
-
- if(reagents && reagents.total_volume)
- user << "You splash the solution onto [target]."
- reagents.splash(target, reagents.total_volume)
- return
-
/obj/item/weapon/reagent_containers/glass/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/storage/part_replacer))
if(!reagents || !reagents.total_volume)
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 0cfb0b41f14..dcf97311313 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -15,43 +15,35 @@
flags = OPENCONTAINER
slot_flags = SLOT_BELT
-///obj/item/weapon/reagent_containers/hypospray/Initialize() //comment this to make hypos start off empty
-// . = ..()
-// reagents.add_reagent("tricordrazine", 30)
-// return
-
-/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob, var/target_zone)
- if(!reagents.total_volume)
- user << "[src] is empty."
- return
- if (!istype(M))
- return
-
+/obj/item/weapon/reagent_containers/hypospray/attack(var/mob/M, var/mob/user, target_zone)
+ . = ..()
var/mob/living/carbon/human/H = M
if(istype(H))
- var/obj/item/organ/external/affected = H.get_organ(target_zone)
- if(!affected)
- user << "\The [H] is missing that limb!"
- return
- else if(affected.status & ORGAN_ROBOT)
- user << "You cannot inject a robotic limb."
- return
-
- user.visible_message("[user] is trying to inject [M] with [src]!","You are trying to inject [M] with [src].")
+ user.visible_message("[user] is trying to inject \the [M] with \the [src]!","You are trying to inject \the [M] with \the [src].")
if(H.run_armor_check(target_zone,"melee",0,"Your armor slows down the injection!","Your armor slows down the injection!"))
if(!do_mob(user, M, 60))
return
+/obj/item/weapon/reagent_containers/hypospray/afterattack(var/mob/M, var/mob/user, proximity)
+
+ if (!istype(M))
+ return ..()
+
+ if(!reagents.total_volume)
+ to_chat(user,"\The [src] is empty.")
+ return
+
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
user.do_attack_animation(M)
- M << "You feel a tiny prick!"
+ to_chat(user,"You inject [M] with [src].")
+ to_chat(M,"You feel a tiny prick!")
playsound(src, 'sound/items/hypospray.ogg',25)
if(M.reagents)
var/contained = reagentlist()
var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD)
admin_inject_log(user, M, src, contained, trans)
- user << "[trans] units injected. [reagents.total_volume] units remaining in \the [src]."
+ to_chat(user,"[trans] units injected. [reagents.total_volume] units remaining in \the [src].")
return
@@ -96,10 +88,10 @@
amount_per_transfer_from_this = 20
/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack/Initialize()
- . = ..()
- reagents.add_reagent("hyperzine", 12)
- reagents.add_reagent("tramadol", 8)
- update_icon()
+ . = ..()
+ reagents.add_reagent("hyperzine", 12)
+ reagents.add_reagent("tramadol", 8)
+ update_icon()
/obj/item/weapon/reagent_containers/hypospray/autoinjector/survival
name = "survival autoinjector"
@@ -108,13 +100,13 @@
amount_per_transfer_from_this = 35
/obj/item/weapon/reagent_containers/hypospray/autoinjector/survival/Initialize()
- . = ..()
- reagents.add_reagent("tricordrazine", 15)
- reagents.add_reagent("inaprovaline", 5)
- reagents.add_reagent("dexalinp", 5)
- reagents.add_reagent("oxycodone", 5)
- reagents.add_reagent("methylphenidate", 5)
- update_icon()
+ . = ..()
+ reagents.add_reagent("tricordrazine", 15)
+ reagents.add_reagent("inaprovaline", 5)
+ reagents.add_reagent("dexalinp", 5)
+ reagents.add_reagent("oxycodone", 5)
+ reagents.add_reagent("methylphenidate", 5)
+ update_icon()
/obj/item/weapon/reagent_containers/hypospray/combat
name = "combat hypospray"
@@ -129,5 +121,4 @@
reagents.add_reagent("synaptizine", 5)
reagents.add_reagent("hyperzine", 5)
reagents.add_reagent("arithrazine", 5)
-
- return
+ update_icon()
diff --git a/code/modules/reagents/reagent_containers/inhaler.dm b/code/modules/reagents/reagent_containers/inhaler.dm
index f1a27f0e329..9e33feffde1 100644
--- a/code/modules/reagents/reagent_containers/inhaler.dm
+++ b/code/modules/reagents/reagent_containers/inhaler.dm
@@ -14,26 +14,24 @@
flags = OPENCONTAINER
slot_flags = SLOT_BELT
-/obj/item/weapon/reagent_containers/inhaler/attack(mob/living/M as mob, mob/user as mob)
+/obj/item/weapon/reagent_containers/inhaler/afterattack(var/mob/living/carbon/human/H, var/mob/user, proximity)
+
+ if (!istype(H))
+ return ..()
if(!reagents.total_volume)
to_chat(user,"\The [src] is empty.")
return
- var/mob/living/carbon/human/H = M
-
- if (!istype(H))
- return
-
if ( ((CLUMSY in user.mutations) || (DUMB in user.mutations)) && prob(10))
to_chat(user,"Your hand slips from clumsiness!")
- eyestab(M,user)
- if(M.reagents)
+ eyestab(H,user)
+ if(H.reagents)
var/contained = reagentlist()
- var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_TOUCH)
- admin_inject_log(user, M, src, contained, trans)
+ var/trans = reagents.trans_to_mob(H, amount_per_transfer_from_this, CHEM_TOUCH)
+ admin_inject_log(user, H, src, contained, trans)
playsound(src.loc, 'sound/items/stimpack.ogg', 50, 1)
- user.visible_message("[user] accidentally sticks the [src] in [M]'s eyes!","You accidentally stick the [src] in [M]'s eyes!")
+ user.visible_message("[user] accidentally sticks the [src] in [H]'s eyes!","You accidentally stick the [src] in [H]'s eyes!")
to_chat(user,"[trans] units injected. [reagents.total_volume] units remaining in \the [src].")
return
@@ -41,30 +39,30 @@
to_chat(user,"You don't have the dexterity to do this!")
return
- if(user == M)
- if(!M.can_eat(src))
+ if(user == H)
+ if(!H.can_eat(src))
return
else
- if(!M.can_force_feed(user, src))
+ if(!H.can_force_feed(user, src))
return
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
- user.do_attack_animation(M)
+ user.do_attack_animation(H)
- if(user == M)
+ if(user == H)
user.visible_message("[user] injects themselves with the [src]","You stick the [src] in your mouth and press the injection button.")
else
- user.visible_message("[user] attempts to administer \the [src] to [M]...","You attempt to administer \the [src] to [M]...")
- if (!do_after(user, 1 SECONDS, act_target = M))
+ user.visible_message("[user] attempts to administer \the [src] to [H]...","You attempt to administer \the [src] to [H]...")
+ if (!do_after(user, 1 SECONDS, act_target = H))
to_chat(user,"You and the target need to be standing still in order to inject \the [src].")
return
- user.visible_message("[user] injects [M] with the [src].","You stick the [src] in [M]'s mouth and press the injection button.")
+ user.visible_message("[user] injects [H] with the [src].","You stick the [src] in [H]'s mouth and press the injection button.")
- if(M.reagents)
+ if(H.reagents)
var/contained = reagentlist()
- var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BREATHE, bypass_mask = TRUE)
- admin_inject_log(user, M, src, contained, trans)
+ var/trans = reagents.trans_to_mob(H, amount_per_transfer_from_this, CHEM_BREATHE, bypass_mask = TRUE)
+ admin_inject_log(user, H, src, contained, trans)
playsound(src.loc, 'sound/items/stimpack.ogg', 50, 1)
to_chat(user,"[trans] units injected. [reagents.total_volume] units remaining in \the [src].")
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index e577603fd55..4ca154bfc0c 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -26,11 +26,16 @@
if(!usr || usr.stat || usr.lying || usr.restrained() || !Adjacent(usr)) return
safety = !safety
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
- usr << "You twist the locking cap on the end of the nozzle, the spraybottle is now [safety ? "locked" : "unlocked"]."
+ usr << "You twist the locking cap on the end of the nozzle. \The [src] is now [safety ? "locked" : "unlocked"]."
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
- if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart))
+
+ if(istype(A, /obj/item/weapon/reagent_containers))
+ . = ..()
+ return
+
+ if(is_type_in_list(A,can_be_placed_into))
return
if(istype(A, /mob))
@@ -58,8 +63,6 @@
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
-
-
if(reagents.has_reagent("sacid"))
message_admins("[key_name_admin(user)] fired sulphuric acid from \a [src].")
log_game("[key_name(user)] fired sulphuric acid from \a [src].",ckey=key_name(user))
@@ -199,7 +202,7 @@
var/turf/T2 = get_step(T,turn(direction, -90))
var/list/the_targets = list(T, T1, T2)
- for(var/a = 1 to 3)
+ for(var/a = 1 to spray_size)
spawn(0)
if(reagents.total_volume < 1) break
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
@@ -212,6 +215,19 @@
D.set_up(my_target, rand(6, 8), 2)
return
+/obj/item/weapon/reagent_containers/spray/chemsprayer/xenobiology
+ name = "xenoblaster"
+ desc = "A child's plastic watergun repurposed for the use in pacifying slimes. Has an adjustable nozzle that controls precision as well as strength."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "xenoblaster"
+ item_state = "xenoblaster"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
+ volume = 200
+ spray_size = 3
+ spray_sizes = list(1,3)
+ amount_per_transfer_from_this = 5
+ possible_transfer_amounts = list(5,15)
+
/obj/item/weapon/reagent_containers/spray/plantbgone
name = "Plant-B-Gone"
desc = "Kills those pesky weeds!"
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 8f5c40daa76..7cc4194cfd9 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -1,93 +1,130 @@
-
-
/obj/structure/reagent_dispensers
- name = "Dispenser"
- desc = "..."
+ name = "Strange dispenser"
+ desc = "What the fuck is this?"
icon = 'icons/obj/objects.dmi'
icon_state = "watertank"
density = 1
anchored = 0
+ var/accept_any_reagent = TRUE
var/amount_per_transfer_from_this = 10
- var/possible_transfer_amounts = list(10,25,50,100)
+ var/possible_transfer_amounts = list(5,10,15,25,30,50,60,100,120,250,300)
var/capacity = 1000
- attackby(obj/item/weapon/W as obj, mob/user as mob)
+ var/can_tamper = TRUE
+ var/is_leaking = FALSE
+
+/obj/structure/reagent_dispensers/Initialize()
+ . = ..()
+ create_reagents(capacity)
+ if (!possible_transfer_amounts)
+ src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
+
+/obj/structure/reagent_dispensers/examine(mob/user)
+ if(!..(user, 2))
return
+ to_chat(user,"It contains [reagents.total_volume] units of reagents.")
- New()
- var/datum/reagents/R = new/datum/reagents(capacity)
- reagents = R
- R.my_atom = src
- if (!possible_transfer_amounts)
- src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
- ..()
+/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this
+ set name = "Set transfer amount"
+ set category = "Object"
+ set src in view(1)
+ var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
+ if (N)
+ amount_per_transfer_from_this = N
- examine(mob/user)
- if(!..(user, 2))
- return
- user << "It contains:"
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- user << "[R.volume] units of [R.name]"
+/obj/structure/reagent_dispensers/ex_act(severity)
+ reagents.splash_turf(get_turf(src), reagents.total_volume)
+ visible_message(span("danger", "\The [src] bursts open, spreading reagents all over the area!"))
+ qdel(src)
+
+/obj/structure/reagent_dispensers/attackby(obj/item/O as obj, mob/user as mob)
+
+ var/obj/item/weapon/reagent_containers/RG = O
+ if (istype(RG) && RG.is_open_container())
+
+ var/atype
+ if(accept_any_reagent)
+ atype = alert(user, "Do you want to fill or empty \the [RG] at \the [src]?", "Fill or Empty", "Fill", "Empty", "Cancel")
else
- user << "Nothing."
+ atype = alert(user, "Do you want to fill \the [RG] at \the [src]?", "Fill", "Fill", "Cancel")
- verb/set_APTFT() //set amount_per_transfer_from_this
- set name = "Set transfer amount"
- set category = "Object"
- set src in view(1)
- var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
- if (N)
- amount_per_transfer_from_this = N
+ if(!user.Adjacent(src)) return
+ if(RG.loc != user) return
- ex_act(severity)
- switch(severity)
- if(1.0)
- qdel(src)
- return
- if(2.0)
- if (prob(50))
- new /obj/effect/effect/water(src.loc)
- qdel(src)
- return
- if(3.0)
- if (prob(5))
- new /obj/effect/effect/water(src.loc)
- qdel(src)
- return
- else
+ switch(atype)
+ if ("Fill")
+ RG.standard_dispenser_refill(user,src)
+ if ("Empty")
+ if(is_open_container())
+ RG.standard_pour_into(user,src)
+ else
+ to_chat(user,"The top cap is wrenched on tight!")
return
+ if (iswrench(O))
+ if(can_tamper && user.a_intent == I_HURT)
+ user.visible_message("\The [user] wrenches \the [src]'s faucet [is_leaking ? "closed" : "open"].","You wrench \the [src]'s faucet [is_leaking ? "closed" : "open"]")
+ is_leaking = !is_leaking
+ if (is_leaking)
+ message_admins("[key_name_admin(user)] wrench opened \the [src] at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking reagents. (JMP)")
+ log_game("[key_name(user)] opened \the [src] at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking reagents.",ckey=key_name(user))
+ START_PROCESSING(SSprocessing,src)
+ else if(accept_any_reagent)
+ var/is_closed = flags & OPENCONTAINER
+ var/verb01 = is_closed ? "unwrenches" : "wrenches"
+ var/verb02 = (is_closed ? "open" : "shut")
+ user.visible_message("[user] [verb01] the top cap [verb02] from \the [src].", "You [verb01] the top cap [verb02] from \the [src].")
+ flags ^= OPENCONTAINER
+ return
+/obj/structure/reagent_dispensers/process()
+ if(!is_leaking || reagents.total_volume <= 0)
+ STOP_PROCESSING(SSprocessing,src)
+ return
-
+ var/splash_amount = min(amount_per_transfer_from_this,60) //Hard limit of 60 per process
+ reagents.trans_to_turf(get_turf(src),splash_amount)
//Dispensers
/obj/structure/reagent_dispensers/watertank
- name = "watertank"
+ name = "water tank"
desc = "A tank filled with water."
icon = 'icons/obj/objects.dmi'
icon_state = "watertank"
amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("water",capacity)
+
+/obj/structure/reagent_dispensers/watertank/Initialize()
+ . = ..()
+ reagents.add_reagent("water",capacity)
+
+/obj/structure/reagent_dispensers/extinguisher
+ name = "extinguisher tank"
+ desc = "A tank filled with extinguisher fluid."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "extinguisher_tank"
+ amount_per_transfer_from_this = 10
+
+/obj/structure/reagent_dispensers/extinguisher/Initialize()
+ . = ..()
+ reagents.add_reagent("monoammoniumphosphate",capacity)
/obj/structure/reagent_dispensers/fueltank
name = "fuel tank"
desc = "A tank filled with welding fuel."
icon = 'icons/obj/objects.dmi'
icon_state = "weldtank"
+ accept_any_reagent = FALSE
amount_per_transfer_from_this = 10
var/modded = 0
var/defuse = 0
var/armed = 0
var/obj/item/device/assembly_holder/rig = null
- New()
- ..()
- reagents.add_reagent("fuel",capacity)
+
+/obj/structure/reagent_dispensers/fueltank/Initialize()
+ . = ..()
+ reagents.add_reagent("fuel",capacity)
/obj/structure/reagent_dispensers/fueltank/examine(mob/user)
if(!..(user, 2))
@@ -97,25 +134,17 @@
if(rig)
user << "There is some kind of device rigged to the tank."
-/obj/structure/reagent_dispensers/fueltank/attack_hand()
+/obj/structure/reagent_dispensers/fueltank/attack_hand(mob/user)
if (rig)
- usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]")
- if(do_after(usr, 20))
- usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]")
- rig.forceMove(get_turf(usr))
+ user.visible_message("[user] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]")
+ if(do_after(user, 20))
+ user.visible_message("[user] detaches [rig] from \the [src].", "You detach [rig] from \the [src]")
+ rig.forceMove(get_turf(user))
rig = null
overlays = new/list()
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob)
src.add_fingerprint(user)
- if (iswrench(W))
- user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \
- "You wrench [src]'s faucet [modded ? "closed" : "open"]")
- modded = modded ? 0 : 1
- if (modded)
- message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)")
- log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.",ckey=key_name(user))
- leak_fuel(amount_per_transfer_from_this)
if (istype(W,/obj/item/device/assembly_holder))
if (rig)
user << "There is another device in the way."
@@ -158,12 +187,10 @@
log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).",ckey=key_name(Proj.firer))
if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) )
- explode()
+ ex_act(2.0)
-/obj/structure/reagent_dispensers/fueltank/ex_act()
- explode()
+/obj/structure/reagent_dispensers/fueltank/ex_act(var/severity = 3.0)
-/obj/structure/reagent_dispensers/fueltank/proc/explode()
if (QDELETED(src))
return
@@ -173,31 +200,19 @@
explosion(src.loc,0,1,3)
else if (reagents.total_volume > 50)
explosion(src.loc,-1,1,2)
- if(src)
- qdel(src)
+
+ ..()
/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume)
if (modded)
- explode()
+ ex_act(2.0)
else if (temperature > T0C+500)
- explode()
+ ex_act(2.0)
return ..()
/obj/structure/reagent_dispensers/fueltank/tesla_act()
..()
- explode()
-
-/obj/structure/reagent_dispensers/fueltank/Move()
- if (..() && modded)
- leak_fuel(amount_per_transfer_from_this/10.0)
-
-/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount)
- if (reagents.total_volume == 0)
- return
-
- amount = min(amount, reagents.total_volume)
- reagents.remove_reagent("fuel",amount)
- new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1)
+ ex_act(2.0)
/obj/structure/reagent_dispensers/peppertank
name = "Pepper Spray Refiller"
@@ -207,10 +222,11 @@
anchored = 1
density = 0
amount_per_transfer_from_this = 45
- New()
- ..()
- reagents.add_reagent("condensedcapsaicin",capacity)
+ can_tamper = FALSE
+/obj/structure/reagent_dispensers/peppertank/Initialize()
+ . = ..()
+ reagents.add_reagent("condensedcapsaicin",capacity)
/obj/structure/reagent_dispensers/water_cooler
name = "Water-Cooler"
@@ -220,12 +236,15 @@
icon_state = "water_cooler"
possible_transfer_amounts = null
anchored = 1
- New()
- ..()
- reagents.add_reagent("water",500)
+ capacity = 500
+ can_tamper = FALSE
+
+/obj/structure/reagent_dispensers/water_cooler/Initialize()
+ . = ..()
+ reagents.add_reagent("water",capacity)
/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (iswrench(W))
+ if (isscrewdriver(W))
src.add_fingerprint(user)
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
if(do_after(user, 20))
@@ -233,22 +252,22 @@
switch (anchored)
if (0)
anchored = 1
- user.visible_message("\The [user] tightens the bolts securing \the [src] to the floor.", "You tighten the bolts securing \the [src] to the floor.")
+ user.visible_message("\The [user] tightens the screws securing \the [src] to the floor.", "You tighten the screws securing \the [src] to the floor.")
if (1)
- user.visible_message("\The [user] unfastens the bolts securing \the [src] to the floor.", "You unfasten the bolts securing \the [src] to the floor.")
+ user.visible_message("\The [user] unfastens the screws securing \the [src] to the floor.", "You unfasten the screws securing \the [src] to the floor.")
anchored = 0
return
-
/obj/structure/reagent_dispensers/beerkeg
name = "beer keg"
desc = "A beer keg"
icon = 'icons/obj/objects.dmi'
icon_state = "beertankTEMP"
amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("beer",capacity)
+
+/obj/structure/reagent_dispensers/beerkeg/Initialize()
+ . = ..()
+ reagents.add_reagent("beer",capacity)
/obj/structure/reagent_dispensers/xuizikeg
name = "xuizi juice keg"
@@ -256,9 +275,10 @@
icon = 'icons/obj/objects.dmi'
icon_state = "keg_xuizi"
amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("xuizijuice",capacity)
+
+/obj/structure/reagent_dispensers/xuizikeg/Initialize()
+ . = ..()
+ reagents.add_reagent("xuizijuice",capacity)
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"
@@ -268,10 +288,11 @@
amount_per_transfer_from_this = 10
anchored = 1
density = 0
+ can_tamper = FALSE
- New()
- ..()
- reagents.add_reagent("virusfood", capacity)
+/obj/structure/reagent_dispensers/virusfood/Initialize()
+ . = ..()
+ reagents.add_reagent("virusfood", capacity)
/obj/structure/reagent_dispensers/acid
name = "Sulphuric Acid Dispenser"
@@ -281,11 +302,11 @@
amount_per_transfer_from_this = 10
anchored = 1
density = 0
+ can_tamper = FALSE
- New()
- ..()
- reagents.add_reagent("sacid", capacity)
-
+/obj/structure/reagent_dispensers/acid/Initialize()
+ . = ..()
+ reagents.add_reagent("sacid", capacity)
//Cooking oil refill tank
/obj/structure/reagent_dispensers/cookingoil
@@ -302,12 +323,4 @@
/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj)
if(Proj.get_structure_damage())
- explode()
-
-/obj/structure/reagent_dispensers/cookingoil/ex_act()
- explode()
-
-/obj/structure/reagent_dispensers/cookingoil/proc/explode()
- reagents.splash_area(get_turf(src), 3)
- visible_message(span("danger", "The [src] bursts open, spreading oil all over the area."))
- qdel(src)
+ ex_act(2.0)
diff --git a/code/modules/research/xenoarchaeology/machinery/coolant.dm b/code/modules/research/xenoarchaeology/machinery/coolant.dm
index 62dde2edd56..98115d05bb4 100644
--- a/code/modules/research/xenoarchaeology/machinery/coolant.dm
+++ b/code/modules/research/xenoarchaeology/machinery/coolant.dm
@@ -4,16 +4,17 @@
icon = 'icons/obj/objects.dmi'
icon_state = "coolanttank"
amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("coolant",1000)
+
+/obj/structure/reagent_dispensers/coolanttank/Initialize()
+ . = ..()
+ reagents.add_reagent("coolant",1000)
/obj/structure/reagent_dispensers/coolanttank/bullet_act(var/obj/item/projectile/Proj)
if(Proj.get_structure_damage())
if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) )
explode()
-/obj/structure/reagent_dispensers/coolanttank/ex_act()
+/obj/structure/reagent_dispensers/coolanttank/ex_act(var/severity = 2.0)
explode()
/obj/structure/reagent_dispensers/coolanttank/proc/explode()
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index 4fb37bc7032..c1c53e24d85 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -96,7 +96,7 @@
/obj/machinery/computer/shuttle_control/bullet_act(var/obj/item/projectile/Proj)
visible_message("\The [Proj] ricochets off \the [src]!")
-/obj/machinery/computer/shuttle_control/ex_act()
+/obj/machinery/computer/shuttle_control/ex_act(var/severity = 2.0)
return
/obj/machinery/computer/shuttle_control/emp_act()
diff --git a/code/modules/spells/spell_projectile.dm b/code/modules/spells/spell_projectile.dm
index 26ffcc0080e..fd1ed3927f9 100644
--- a/code/modules/spells/spell_projectile.dm
+++ b/code/modules/spells/spell_projectile.dm
@@ -21,7 +21,7 @@
carried = null
return ..()
-/obj/item/projectile/spell_projectile/ex_act()
+/obj/item/projectile/spell_projectile/ex_act(var/severity = 2.0)
return
/obj/item/projectile/spell_projectile/before_move()
diff --git a/html/changelogs/burgerbb-extinguishers.yml b/html/changelogs/burgerbb-extinguishers.yml
new file mode 100644
index 00000000000..a59ac9f2d0f
--- /dev/null
+++ b/html/changelogs/burgerbb-extinguishers.yml
@@ -0,0 +1,45 @@
+################################
+# 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
+#################################
+
+# Your name.
+author: BurgerBB
+
+# 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:
+ - rscadd: "Added Monoammonium Phosphate, a reagent that excels in extinguishing fires, and acts as a fertilizer. They are now found in fire extinguishers instead of water. Added Monoammonium Phosphate tanks around the station in place of some water tanks."
+ - rscadd: "Added a new weak chem sprayer, 'Xenoblaster', which can be found in xenobiology for xenobiologists."
+ - tweak: "Fire extinguishers can be filled with any reagent using an extinguisher cartridge. Extinguisher cartridges can be ordered by cargo, or found in atmospherics."
+ - tweak: "Reagent dispensers, such as watertanks and beer kegs, can now be filled with any reagent. Fuel tanks are an exception."
+ - rscadd: "Most mobile reagent dispensers can leak their contents if you use harm intent wrench on them. Changed how leaking works."
+ - tweak: "Reworked how reagent containers (glass beakers, drinks) behave on interaction. You can splash anyone with any container on harm intent, and drink/use them on other intents."
+ - maptweak: "Added a fire storage area in atmospherics that contains firefighting equipment and Monoammonium Phosphate containers."
+ - rscadd: "Lube and water can be spread to other tiles if there is too much water or lube on one tile."
+
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 44a922abfe9..afdce76bf32 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 82f7e3986fa..e148910c7e4 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi
index d0902769f47..ae2a548d25f 100644
Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 139a72b587c..e0d072c0264 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 5287b7f2c6b..8f9f78ba869 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 64dc6577d53..6d515260b1d 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/maps/aurora/aurora-3_sublevel.dmm b/maps/aurora/aurora-3_sublevel.dmm
index 3c22b666c6b..f73c99f58d1 100644
--- a/maps/aurora/aurora-3_sublevel.dmm
+++ b/maps/aurora/aurora-3_sublevel.dmm
@@ -18888,7 +18888,7 @@
},
/obj/structure/window/reinforced,
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/reagent_dispensers/extinguisher,
/turf/simulated/floor/tiled/white,
/area/outpost/research/hallway)
"Hr" = (
@@ -27806,6 +27806,10 @@
},
/turf/simulated/floor/reinforced,
/area/rnd/xenobiology/cells/delta)
+"Xg" = (
+/obj/structure/reagent_dispensers/extinguisher,
+/turf/simulated/floor/plating,
+/area/maintenance/sublevel)
"Xh" = (
/obj/machinery/disposal/deliveryChute{
dir = 8;
@@ -29268,6 +29272,12 @@
},
/turf/simulated/floor/plating,
/area/maintenance/research_xenobiology)
+"ZE" = (
+/obj/structure/table/standard,
+/obj/item/weapon/reagent_containers/spray/chemsprayer/xenobiology,
+/obj/item/weapon/reagent_containers/spray/chemsprayer/xenobiology,
+/turf/simulated/floor/tiled/white,
+/area/rnd/xenobiology)
(1,1,1) = {"
aa
@@ -51522,7 +51532,7 @@ CO
DT
ES
BW
-Gz
+Xg
Jp
Im
Fa
@@ -55388,7 +55398,7 @@ Pp
It
Vg
VY
-VY
+ZE
It
It
WV
diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm
index 68602f70533..9549aa6b75d 100644
--- a/maps/aurora/aurora-4_mainlevel.dmm
+++ b/maps/aurora/aurora-4_mainlevel.dmm
@@ -648,7 +648,7 @@
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"abn" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/reagent_dispensers/extinguisher,
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"abo" = (
@@ -4032,6 +4032,33 @@
},
/turf/simulated/floor/tiled,
/area/security/brig)
+"aih" = (
+/obj/item/stack/tile/floor,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/tiled,
+/area/maintenance/civ)
+"aii" = (
+/obj/structure/reagent_dispensers/extinguisher,
+/turf/simulated/floor/plating,
+/area/maintenance/engineering)
+"aij" = (
+/obj/structure/reagent_dispensers/extinguisher,
+/obj/effect/floor_decal/corner/blue{
+ icon_state = "corner_white";
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ai_monitored/storage/eva)
+"aik" = (
+/obj/item/weapon/reagent_containers/glass/bucket,
+/obj/machinery/camera/network/prison{
+ c_tag = "Security - Communal Brig Aft";
+ dir = 1
+ },
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/tiled,
+/area/security/prison)
"ail" = (
/obj/structure/table/standard,
/obj/item/weapon/paper_bin,
@@ -4414,9 +4441,22 @@
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
/area/security/brig)
+"aiZ" = (
+/obj/structure/reagent_dispensers/extinguisher,
+/turf/simulated/floor/plating,
+/area/maintenance/maintcentral)
"aja" = (
/turf/simulated/wall,
/area/security/main)
+"ajb" = (
+/obj/item/weapon/reagent_containers/glass/bucket,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/tiled/dark,
+/area/janitor)
"ajc" = (
/obj/structure/window/reinforced{
icon_state = "rwindow";
@@ -4734,6 +4774,61 @@
/obj/machinery/firealarm/west,
/turf/simulated/floor/tiled,
/area/security/brig)
+"ajI" = (
+/obj/structure/reagent_dispensers/extinguisher,
+/turf/simulated/floor/plating,
+/area/storage/emergency)
+"ajJ" = (
+/obj/item/weapon/reagent_containers/glass/bucket,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/tiled/dark,
+/area/janitor)
+"ajK" = (
+/obj/structure/reagent_dispensers/extinguisher,
+/turf/simulated/floor/plating,
+/area/maintenance/research_port)
+"ajL" = (
+/obj/structure/reagent_dispensers/extinguisher,
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/maintenance/medbay)
+"ajM" = (
+/obj/item/weapon/reagent_containers/glass/bucket,
+/obj/effect/floor_decal/corner/green{
+ dir = 10
+ },
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/tiled/white,
+/area/rnd/xenobiology/xenoflora)
+"ajN" = (
+/obj/machinery/status_display{
+ pixel_x = 0;
+ pixel_y = 32
+ },
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/tiled,
+/area/hydroponics)
+"ajO" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/item/device/radio/intercom{
+ pixel_x = 0;
+ pixel_y = 27
+ },
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/tiled,
+/area/hydroponics)
"ajP" = (
/obj/structure/closet/secure_closet/security,
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -4845,11 +4940,9 @@
/turf/simulated/floor/tiled,
/area/maintenance/civ)
"akb" = (
-/obj/item/stack/tile/floor,
-/obj/structure/reagent_dispensers/watertank,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/maintenance/civ)
+/obj/structure/reagent_dispensers/extinguisher,
+/turf/simulated/floor/plating,
+/area/maintenance/library)
"akc" = (
/obj/machinery/alarm{
dir = 4;
@@ -5214,6 +5307,30 @@
},
/turf/simulated/floor/tiled,
/area/security/brig)
+"akF" = (
+/obj/structure/window/reinforced{
+ icon_state = "rwindow";
+ dir = 1
+ },
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/grass,
+/area/hydroponics)
+"akG" = (
+/obj/structure/fireaxecabinet{
+ pixel_x = -32
+ },
+/obj/structure/closet/crate/extinguisher_catridges,
+/turf/simulated/floor/tiled,
+/area/engineering/atmos/storage)
+"akH" = (
+/obj/structure/table/standard,
+/obj/machinery/cell_charger,
+/obj/structure/sign/nosmoking_2{
+ pixel_x = -32
+ },
+/obj/item/device/multitool,
+/turf/simulated/floor/tiled,
+/area/engineering/atmos/storage)
"akN" = (
/obj/structure/morgue{
icon_state = "morgue1";
@@ -5419,14 +5536,6 @@
/obj/structure/cable/green,
/turf/simulated/floor/plating,
/area/maintenance/atmos_control)
-"ali" = (
-/obj/structure/table/standard,
-/obj/item/device/multitool,
-/obj/structure/fireaxecabinet{
- pixel_x = -32
- },
-/turf/simulated/floor/tiled,
-/area/engineering/atmos/storage)
"alj" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
@@ -5811,14 +5920,6 @@
/obj/machinery/shield_gen,
/turf/simulated/floor/plating,
/area/engineering/storage)
-"amf" = (
-/obj/structure/table/standard,
-/obj/machinery/cell_charger,
-/obj/structure/sign/nosmoking_2{
- pixel_x = -32
- },
-/turf/simulated/floor/tiled,
-/area/engineering/atmos/storage)
"amg" = (
/turf/simulated/floor/tiled,
/area/engineering/atmos/storage)
@@ -12859,10 +12960,6 @@
"ayE" = (
/turf/simulated/wall,
/area/maintenance/substation/engineering)
-"ayF" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/plating,
-/area/maintenance/engineering)
"ayG" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -24992,14 +25089,6 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/simulated/floor/tiled/dark,
/area/ai_monitored/storage/eva)
-"aSL" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/effect/floor_decal/corner/blue{
- icon_state = "corner_white";
- dir = 6
- },
-/turf/simulated/floor/tiled/dark,
-/area/ai_monitored/storage/eva)
"aSM" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -25330,15 +25419,6 @@
/obj/machinery/light,
/turf/simulated/floor/tiled,
/area/security/prison)
-"aTp" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/item/weapon/reagent_containers/glass/bucket,
-/obj/machinery/camera/network/prison{
- c_tag = "Security - Communal Brig Aft";
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/security/prison)
"aTq" = (
/obj/structure/closet/crate/trashcart,
/obj/item/toy/figure/secofficer{
@@ -26801,10 +26881,6 @@
/obj/structure/sign/drop,
/turf/simulated/wall,
/area/outpost/mining_main/eva)
-"aWo" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/plating,
-/area/maintenance/maintcentral)
"aWp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
@@ -30105,15 +30181,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/janitor)
-"bcb" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/item/weapon/reagent_containers/glass/bucket,
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/simulated/floor/tiled/dark,
-/area/janitor)
"bcc" = (
/turf/simulated/wall/r_wall,
/area/storage/tech)
@@ -30354,10 +30421,6 @@
},
/turf/simulated/floor/tiled,
/area/hallway/primary/central_one)
-"bcA" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/plating,
-/area/storage/emergency)
"bcB" = (
/obj/machinery/space_heater,
/obj/machinery/light/small,
@@ -30880,12 +30943,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/janitor)
-"bdw" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/item/weapon/reagent_containers/glass/bucket,
-/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/tiled/dark,
-/area/janitor)
"bdx" = (
/obj/structure/table/rack{
dir = 8;
@@ -35582,10 +35639,6 @@
/obj/structure/ladder/up,
/turf/simulated/floor/plating,
/area/bridge/aibunker)
-"bly" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/plating,
-/area/maintenance/research_port)
"blz" = (
/obj/structure/cable{
d1 = 1;
@@ -47487,14 +47540,6 @@
},
/turf/simulated/floor/tiled/white,
/area/rnd/xenobiology/xenoflora)
-"bFg" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/item/weapon/reagent_containers/glass/bucket,
-/obj/effect/floor_decal/corner/green{
- dir = 10
- },
-/turf/simulated/floor/tiled/white,
-/area/rnd/xenobiology/xenoflora)
"bFh" = (
/obj/effect/floor_decal/corner/green{
icon_state = "corner_white";
@@ -53560,10 +53605,6 @@
temperature = 253.15
},
/area/crew_quarters/kitchen)
-"bTi" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/plating,
-/area/maintenance/library)
"bTj" = (
/obj/machinery/door/airlock/maintenance,
/obj/machinery/door/firedoor,
@@ -59683,21 +59724,6 @@
},
/turf/simulated/floor/plating,
/area/maintenance/medbay)
-"chD" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/structure/cable/green{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/maintenance/medbay)
"chE" = (
/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{
icon_state = "up-scrubbers";
@@ -61306,24 +61332,6 @@
},
/turf/simulated/floor/tiled,
/area/hydroponics)
-"coq" = (
-/obj/machinery/status_display{
- pixel_x = 0;
- pixel_y = 32
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/tiled,
-/area/hydroponics)
-"cor" = (
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/reagent_dispensers/watertank,
-/obj/item/device/radio/intercom{
- pixel_x = 0;
- pixel_y = 27
- },
-/turf/simulated/floor/tiled,
-/area/hydroponics)
"cos" = (
/obj/machinery/light{
dir = 1;
@@ -61738,14 +61746,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/grass,
/area/hydroponics)
-"cpl" = (
-/obj/structure/window/reinforced{
- icon_state = "rwindow";
- dir = 1
- },
-/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/grass,
-/area/hydroponics)
"cpm" = (
/obj/structure/window/reinforced{
dir = 4
@@ -79581,7 +79581,7 @@ aYc
bhv
biY
aKj
-bly
+ajK
aLT
aKi
aaa
@@ -80886,7 +80886,7 @@ baJ
baJ
bFV
bGX
-bly
+ajK
baJ
baJ
baJ
@@ -81373,8 +81373,8 @@ aWU
aYe
aZB
aZC
-bcb
-bdw
+ajb
+ajJ
beK
cob
bhy
@@ -83442,7 +83442,7 @@ aKl
bpG
bqP
brV
-bly
+ajK
aLT
baJ
baJ
@@ -84171,8 +84171,8 @@ ahY
aiO
agD
akv
-ali
-amf
+akG
+akH
anh
aoh
ctr
@@ -87534,7 +87534,7 @@ aFj
aNZ
aFj
aFj
-aSL
+aij
aUv
aVz
aXi
@@ -88336,7 +88336,7 @@ bBq
bCq
bDj
bEk
-bFg
+ajM
bGg
bHn
bIu
@@ -88807,7 +88807,7 @@ asf
atO
aos
axb
-ayF
+aii
afr
aaa
aDm
@@ -90157,7 +90157,7 @@ coo
coB
coO
coZ
-cpl
+akF
cpu
cqa
cqa
@@ -90667,7 +90667,7 @@ baK
btm
bAi
bRL
-coq
+ajN
coF
coQ
cpb
@@ -90924,7 +90924,7 @@ bMD
bQB
bMD
bRL
-cor
+ajO
coF
coR
bSO
@@ -91173,7 +91173,7 @@ baK
baK
bMC
bCe
-bly
+ajK
bMD
bOW
bPy
@@ -96022,7 +96022,7 @@ aLc
aYK
aZU
bbc
-bcA
+ajI
bdV
bfo
bgB
@@ -97607,7 +97607,7 @@ bPJ
bPO
bQQ
bSt
-bTi
+akb
bMi
bMj
bMj
@@ -98842,7 +98842,7 @@ aFK
aOz
aQe
azb
-aTp
+aik
aPU
awc
aLc
@@ -104498,7 +104498,7 @@ aQr
aRU
aTB
aQt
-aWo
+aiZ
aXD
aYY
bah
@@ -105037,7 +105037,7 @@ bub
bub
bub
bub
-chD
+ajL
bok
bmK
biL
@@ -106785,7 +106785,7 @@ aeO
aeO
aiy
ael
-akb
+aih
akW
adl
adI
@@ -107077,7 +107077,7 @@ bdg
aOM
bfP
bds
-aWo
+aiZ
biL
blh
bmK
diff --git a/maps/aurora/aurora-6_surface.dmm b/maps/aurora/aurora-6_surface.dmm
index 7719c5e0951..c25299e1f6f 100644
--- a/maps/aurora/aurora-6_surface.dmm
+++ b/maps/aurora/aurora-6_surface.dmm
@@ -841,7 +841,7 @@
/turf/simulated/floor/plating,
/area/tcommsat/computer)
"bD" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/reagent_dispensers/extinguisher,
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/tiled/dark,
/area/tcommsat/computer)
@@ -9825,7 +9825,7 @@
/turf/simulated/floor/tiled,
/area/storage/primary)
"rP" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/reagent_dispensers/extinguisher,
/turf/simulated/floor/tiled,
/area/storage/primary)
"rQ" = (
@@ -11670,7 +11670,7 @@
/turf/simulated/floor/tiled,
/area/crew_quarters/locker)
"vD" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/reagent_dispensers/extinguisher,
/turf/simulated/floor/tiled,
/area/crew_quarters/locker)
"vE" = (
@@ -15327,7 +15327,7 @@
/turf/simulated/floor/tiled/dark,
/area/crew_quarters/fitness)
"Cg" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/reagent_dispensers/extinguisher,
/turf/simulated/floor/plating,
/area/maintenance/arrivals)
"Ch" = (
@@ -15494,7 +15494,7 @@
/turf/simulated/floor/tiled,
/area/storage/tools)
"CF" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/reagent_dispensers/extinguisher,
/turf/simulated/floor/tiled,
/area/storage/tools)
"CG" = (
@@ -16026,8 +16026,8 @@
/turf/simulated/floor/tiled,
/area/hallway/secondary/entry/aft)
"DQ" = (
-/obj/structure/reagent_dispensers/watertank,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/reagent_dispensers/watertank,
/turf/simulated/floor/plating,
/area/hallway/secondary/entry/aft)
"DR" = (
diff --git a/vueui/install b/vueui/install
old mode 100644
new mode 100755