diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index eccd3c657d..08fd0cedae 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -18,11 +18,13 @@
container_type = AMOUNT_VISIBLE
var/max_water = 50
var/last_use = 1
+ var/chem = "water"
var/safety = TRUE
var/refilling = FALSE
+ var/tanktype = /obj/structure/reagent_dispensers/watertank
var/sprite_name = "fire_extinguisher"
var/power = 5 //Maximum distance launched water will travel
- var/precision = 0 //By default, turfs picked from a spray are random, set to 1 to make it always have at least one water effect per row
+ var/precision = FALSE //By default, turfs picked from a spray are random, set to 1 to make it always have at least one water effect per row
var/cooling_power = 2 //Sets the cooling_temperature of the water reagent datum inside of the extinguisher when it is refilled
/obj/item/extinguisher/mini
@@ -43,7 +45,19 @@
/obj/item/extinguisher/New()
..()
create_reagents(max_water)
- reagents.add_reagent("water", max_water)
+ reagents.add_reagent(chem, max_water)
+
+
+/obj/item/extinguisher/advanced
+ name = "advanced fire extinguisher"
+ desc = "Used to stop thermonuclear fires from spreading inside your engine."
+ icon_state = "foam_extinguisher0"
+ //item_state = "foam_extinguisher" needs sprite
+ dog_fashion = null
+ chem = "firefighting_foam"
+ tanktype = /obj/structure/reagent_dispensers/foamtank
+ sprite_name = "foam_extinguisher"
+ precision = TRUE
/obj/item/extinguisher/suicide_act(mob/living/carbon/user)
if (!safety && (reagents.total_volume >= 1))
@@ -84,14 +98,14 @@
to_chat(user, "Alt-click to empty it.")
/obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user)
- if(istype(target, /obj/structure/reagent_dispensers/watertank) && target.Adjacent(user))
+ if(istype(target, tanktype) && target.Adjacent(user))
var/safety_save = safety
safety = TRUE
if(reagents.total_volume == reagents.maximum_volume)
to_chat(user, "\The [src] is already full!")
safety = safety_save
return 1
- var/obj/structure/reagent_dispensers/watertank/W = target
+ var/obj/structure/reagent_dispensers/W = target //will it work?
var/transferred = W.reagents.trans_to(src, max_water)
if(transferred > 0)
to_chat(user, "\The [src] has been refilled by [transferred] units.")
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 9cc4598697..97a157e0be 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -28,6 +28,7 @@
new /obj/item/pipe_dispenser(src)
new /obj/item/inducer(src)
new /obj/item/circuitboard/machine/techfab/department/engineering(src)
+ new /obj/item/extinguisher/advanced(src)
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
@@ -94,3 +95,4 @@
new /obj/item/clothing/suit/fire/atmos(src)
new /obj/item/clothing/head/hardhat/atmos(src)
new /obj/item/clothing/glasses/meson/engine/tray(src)
+ new /obj/item/extinguisher/advanced(src)
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index e0a137fb7c..e6b4a29502 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -102,8 +102,8 @@
/obj/item/flashlight,
/obj/item/tank/internals/oxygen/red,
/obj/item/tank/internals/oxygen/red,
- /obj/item/extinguisher,
- /obj/item/extinguisher,
+ /obj/item/extinguisher/advanced,
+ /obj/item/extinguisher/advanced,
/obj/item/clothing/head/hardhat/red,
/obj/item/clothing/head/hardhat/red)
crate_name = "firefighting crate"
@@ -1000,6 +1000,14 @@
crate_name = "water tank crate"
crate_type = /obj/structure/closet/crate/large
+/datum/supply_pack/materials/foamtank
+ name = "Foam Tank Crate"
+ desc = "Contains plasmamen's bane."
+ cost = 1500
+ contains = list(/obj/structure/reagent_dispensers/foamtank)
+ crate_name = "foam tank crate"
+ crate_type = /obj/structure/closet/crate/large
+
/datum/supply_pack/materials/hightank
name = "Large Water Tank Crate"
desc = "Contains a high-capacity water tank. Useful for botany or other service jobs."
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 508f3815a0..0607287957 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -51,6 +51,13 @@
icon_state = "water_high" //I was gonna clean my room...
tank_volume = 100000
+/obj/structure/reagent_dispensers/foamtank
+ name = "firefoam tank"
+ desc = "A tank full of foaming things."
+ icon_state = "foam"
+ reagent_id = "firefighting_foam"
+ tank_volume = 500
+
/obj/structure/reagent_dispensers/fueltank
name = "fuel tank"
desc = "A tank full of industrial welding fuel. Do not consume."
diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi
index b0b01a2446..bae64f4c55 100644
Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index b4431daf83..a6e6d3b6f7 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ