diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index af8ffb76809..4eaaeb52e53 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -39,6 +39,7 @@
var/tagged = 0 // so closet code knows to put the tag overlay back
density = 0
mob_storage_capacity = 2
+ open_sound = 'sound/items/zip.ogg'
/obj/structure/closet/body_bag/attackby(obj/item/I, mob/user, params)
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 506602fb560..d9d8492d700 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -140,6 +140,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
new/datum/stack_recipe("folder", /obj/item/weapon/folder), \
+ new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4), \
)
/obj/item/stack/sheet/cardboard //BubbleWrap
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 8fa1375a480..6963932ae51 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -15,10 +15,14 @@
var/wall_mounted = 0 //never solid (You can always pass over it)
var/health = 100
var/lastbang
+ var/can_weld_shut = 1
var/max_mob_size = MOB_SIZE_HUMAN //Biggest mob_size accepted by the container
var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet.
- var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate
- //then open it in a populated area to crash clients.
+ var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients.
+ var/cutting_tool = /obj/item/weapon/weldingtool
+ var/open_sound = 'sound/machines/click.ogg'
+ var/cutting_sound = 'sound/items/Welder.ogg'
+ var/material_drop = /obj/item/stack/sheet/metal
/obj/structure/closet/New()
..()
@@ -107,10 +111,7 @@
if(!can_open())
return 0
opened = 1
- if(istype(src, /obj/structure/closet/body_bag))
- playsound(loc, 'sound/items/zip.ogg', 15, 1, -3)
- else
- playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
+ playsound(loc, open_sound, 15, 1, -3)
density = 0
dump_contents()
update_icon()
@@ -151,10 +152,7 @@
take_contents()
opened = 0
- if(istype(src, /obj/structure/closet/body_bag))
- playsound(loc, 'sound/items/zip.ogg', 15, 1, -3)
- else
- playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
+ playsound(loc, open_sound, 15, 1, -3)
density = 1
update_icon()
return 1
@@ -166,7 +164,7 @@
/obj/structure/closet/ex_act(severity, target)
contents_explosion(severity, target)
- new /obj/item/stack/sheet/metal(loc)
+ new material_drop(loc)
dump_contents()
qdel(src)
..()
@@ -207,16 +205,18 @@
return
if(istype(W,/obj/item/tk_grab))
return 0
- if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.remove_fuel(0,user))
+ if(istype(W, cutting_tool))
+ if(istype(cutting_tool, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(!WT.remove_fuel(0,user))
+ return
user << "You begin cutting \the [src] apart..."
- playsound(loc, 'sound/items/Welder.ogg', 40, 1)
+ playsound(loc, cutting_sound, 40, 1)
if(do_after(user,40,5,1, target = src))
if( !opened || !istype(src, /obj/structure/closet) || !user || !WT || !WT.isOn() || !user.loc )
return
- playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
- new /obj/item/stack/sheet/metal(loc)
+ playsound(loc, cutting_sound, 50, 1)
+ new material_drop(loc)
visible_message("[user] has cut \the [src] apart with \the [WT].", "You hear welding.")
qdel(src)
return
@@ -227,7 +227,7 @@
else
if(istype(W, /obj/item/stack/packageWrap))
return
- if(istype(W, /obj/item/weapon/weldingtool))
+ if(istype(W, /obj/item/weapon/weldingtool) && can_weld_shut)
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0,user))
user << "You begin [welded ? "unwelding":"welding"] \the [src]..."
diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
new file mode 100644
index 00000000000..355707f6bb4
--- /dev/null
+++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
@@ -0,0 +1,21 @@
+/obj/structure/closet/cardboard
+ name = "large cardboard box"
+ desc = "Just a box..."
+ //icon_state = "cardboard" //NEEDS SPRITES
+ health = 10 //At the end of the day it's still just a box
+ mob_storage_capacity = 1
+ burntime = 20
+ can_weld_shut = 0
+ cutting_tool = /obj/item/weapon/wirecutters
+ open_sound = 'sound/effects/rustle2.ogg'
+ cutting_sound = 'sound/items/poster_ripped.ogg'
+ material_drop = /obj/item/stack/sheet/cardboard
+ var/move_delay = 0
+
+/obj/structure/closet/cardboard/relaymove(mob/user, direction) //!
+ if(opened || move_delay || user.stat || user.stunned || user.weakened || user.paralysis || !isturf(loc) || !has_gravity(loc))
+ return
+ step(src, direction)
+ move_delay = 1
+ spawn(config.walk_speed) //Kept you waiting, huh?
+ move_delay = 0
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index 5310c6088b5..60b625f9f0b 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -758,6 +758,7 @@
#include "code\game\objects\structures\crates_lockers\closets.dm"
#include "code\game\objects\structures\crates_lockers\crates.dm"
#include "code\game\objects\structures\crates_lockers\largecrate.dm"
+#include "code\game\objects\structures\crates_lockers\closets\cardboardbox.dm"
#include "code\game\objects\structures\crates_lockers\closets\crittercrate.dm"
#include "code\game\objects\structures\crates_lockers\closets\fitness.dm"
#include "code\game\objects\structures\crates_lockers\closets\gimmick.dm"