diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 687e2fa9dce..8128e1f44d4 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -45,15 +45,16 @@
name = "station intercom (Security)"
frequency = SEC_I_FREQ
-/obj/item/radio/intercom/New(turf/loc, var/ndir = 0, var/building = 3)
+/obj/item/radio/intercom/New(turf/loc, ndir, building = 3)
..()
buildstage = building
if(buildstage)
processing_objects.Add(src)
else
- pixel_x = (ndir & 3)? 0 : (ndir == 4 ? 28 : -28)
- pixel_y = (ndir & 3)? (ndir ==1 ? 28 : -28) : 0
- dir=ndir
+ if(ndir)
+ pixel_x = (ndir & EAST|WEST) ? (ndir == EAST ? 28 : -28) : 0
+ pixel_y = (ndir & NORTH|SOUTH) ? (ndir == NORTH ? 28 : -28) : 0
+ dir=ndir
b_stat=1
on = 0
global_intercoms.Add(src)
diff --git a/code/game/objects/items/mountable_frames/extinguisher_frame.dm b/code/game/objects/items/mountable_frames/extinguisher_frame.dm
new file mode 100644
index 00000000000..531005ca902
--- /dev/null
+++ b/code/game/objects/items/mountable_frames/extinguisher_frame.dm
@@ -0,0 +1,10 @@
+/obj/item/mounted/frame/extinguisher
+ name = "Extinguisher Cabinet Frame"
+ desc = "Used for building extinguisher cabinet"
+ icon = 'icons/obj/closet.dmi'
+ icon_state = "extinguisher_frame"
+ mount_reqs = list("simfloor", "nospace")
+
+/obj/item/mounted/frame/extinguisher/do_build(turf/on_wall, mob/user)
+ new /obj/structure/extinguisher_cabinet(get_turf(src), get_dir(user, on_wall))
+ qdel(src)
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 4412b547b19..0e9be717ca1 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -90,6 +90,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
new /datum/stack_recipe("air alarm frame", /obj/item/mounted/frame/alarm_frame, 2),
new /datum/stack_recipe("fire alarm frame", /obj/item/mounted/frame/firealarm, 2),
new /datum/stack_recipe("intercom frame", /obj/item/mounted/frame/intercom, 2),
+ new /datum/stack_recipe("extinguisher cabinet frame", /obj/item/mounted/frame/extinguisher, 5),
null
)
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index 048961defd5..ce550871c63 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -7,6 +7,13 @@
density = 0
var/obj/item/extinguisher/has_extinguisher = new/obj/item/extinguisher
var/opened = 0
+ var/material_drop = /obj/item/stack/sheet/metal
+
+/obj/structure/extinguisher_cabinet/New(turf/loc, ndir = null)
+ ..()
+ if(ndir)
+ pixel_x = (ndir & EAST|WEST) ? (ndir == EAST ? 28 : -28) : 0
+ pixel_y = (ndir & NORTH|SOUTH)? (ndir == WEST ? 28 : -28) : 0
/obj/structure/extinguisher_cabinet/Destroy()
QDEL_NULL(has_extinguisher)
@@ -23,13 +30,35 @@
to_chat(user, "You place [O] in [src].")
else
opened = !opened
+ else if(istype(O, /obj/item/weldingtool))
+ if(has_extinguisher)
+ to_chat(user, "You need to remove the extinguisher before deconstructing the cabinet!")
+ return
+ if(!opened)
+ to_chat(user, "Open the cabinet before cutting it apart!")
+ return
+ var/obj/item/weldingtool/WT = O
+ if(!WT.remove_fuel(0, user))
+ to_chat(user, "You need more welding fuel to complete this task.")
+ return
+ to_chat(user, "You begin cutting [src] apart...")
+ playsound(loc, WT.usesound, 40, 1)
+ if(do_after(user, 40 * WT.toolspeed, 1, target = src))
+ if(!src ||!opened || !WT.isOn()) // !src to prevent it being duped
+ return
+ visible_message("[user] slices apart [src].",
+ "You cut [src] apart with [WT].",
+ "You hear welding.")
+ var/turf/T = get_turf(src)
+ new material_drop(T)
+ qdel(src)
else
opened = !opened
update_icon()
-
/obj/structure/extinguisher_cabinet/attack_hand(mob/user)
if(isrobot(user) || isalien(user))
+ to_chat(user, "You don't have the dexterity to do this!")
return
if(ishuman(user))
var/mob/living/carbon/human/H = user
diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi
index 20372528b02..de22e917ddc 100644
Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 303c0ebaed9..0c4d56eeff5 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -807,6 +807,7 @@
#include "code\game\objects\items\mountable_frames\air_alarm.dm"
#include "code\game\objects\items\mountable_frames\apc_frame.dm"
#include "code\game\objects\items\mountable_frames\buttons_switches.dm"
+#include "code\game\objects\items\mountable_frames\extinguisher_frame.dm"
#include "code\game\objects\items\mountable_frames\fire_alarm.dm"
#include "code\game\objects\items\mountable_frames\frames.dm"
#include "code\game\objects\items\mountable_frames\intercom.dm"