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..5356a154a6d
--- /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/empty(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 5ef40ee25e8..eb58f7fcc65 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, 2),
null
)
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index 048961defd5..568fb0ededc 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -1,3 +1,8 @@
+#define NO_EXTINGUISHER 0
+#define NORMAL_EXTINGUISHER 1
+#define MINI_EXTINGUISHER 2
+
+
/obj/structure/extinguisher_cabinet
name = "extinguisher cabinet"
desc = "A small wall mounted cabinet designed to hold a fire extinguisher."
@@ -5,13 +10,28 @@
icon_state = "extinguisher_closed"
anchored = 1
density = 0
- var/obj/item/extinguisher/has_extinguisher = new/obj/item/extinguisher
+ var/obj/item/extinguisher/has_extinguisher = null
+ var/extinguishertype
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
+ switch(extinguishertype)
+ if(NO_EXTINGUISHER)
+ return
+ if(MINI_EXTINGUISHER)
+ has_extinguisher = new/obj/item/extinguisher/mini
+ else
+ has_extinguisher = new/obj/item/extinguisher
/obj/structure/extinguisher_cabinet/Destroy()
QDEL_NULL(has_extinguisher)
return ..()
-
+
/obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user, params)
if(isrobot(user) || isalien(user))
return
@@ -23,13 +43,34 @@
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))
+ 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
@@ -70,3 +111,11 @@
icon_state = "extinguisher_full"
else
icon_state = "extinguisher_empty"
+
+/obj/structure/extinguisher_cabinet/empty/New(turf/loc, ndir = null)
+ extinguishertype = NO_EXTINGUISHER
+ ..()
+
+#undef NO_EXTINGUISHER
+#undef NORMAL_EXTINGUISHER
+#undef MINI_EXTINGUISHER
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 7c4deb70dd2..9d16c171c88 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -814,6 +814,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"