diff --git a/code/game/objects/structures/crates_lockers/__closets.dm b/code/game/objects/structures/crates_lockers/__closets.dm
index f56c0269a4..46a3226464 100644
--- a/code/game/objects/structures/crates_lockers/__closets.dm
+++ b/code/game/objects/structures/crates_lockers/__closets.dm
@@ -40,6 +40,7 @@
var/is_animating_door = FALSE
/// Our visual object for the closet door, if we're animating
var/obj/effect/overlay/closet_door/door_obj
+ var/vore_sound = 'sound/effects/metalscrape2.ogg'
/obj/structure/closet/Initialize()
..()
@@ -543,3 +544,49 @@
M.Multiply(matrix(cos(angle), 0, 0, -sin(angle) * closet_appearance.door_anim_squish, 1, 0))
M.Translate(closet_appearance.door_hinge, 0)
return M
+
+//verb to eat people in the same closet as yourself
+
+/obj/structure/closet/verb/hidden_vore()
+ set src in oview(1)
+ set category = "Object"
+ set name = "Vore Occupants"
+
+ if(!istype(usr, /mob/living)) //no ghosts
+ return
+
+ if(!(usr in src.contents))
+ to_chat(usr, "You need to be inside \the [src] to do this.")
+ return
+
+ var/list/targets = list() //IF IT IS NOT BROKEN. DO NOT FIX IT.
+
+ for(var/mob/living/L in src.contents)
+ if(!istype(L, /mob/living)) //Don't eat anything that isn't mob/living. Failsafe.
+ continue
+ if(L == usr) //no eating yourself. 1984.
+ continue
+ if(L.devourable)
+ targets += L
+
+ if(targets == 0)
+ to_chat(src, "No eligible targets found.")
+ return
+
+ var/mob/living/target = tgui_input_list(usr, "Please select a target.", "Victim", targets)
+
+ if(!target)
+ return
+
+ if(!istype(target, /mob/living)) //Safety.
+ to_chat(src, "You need to select a living target!")
+ return
+
+ if (get_dist(src,target) >= 1 || get_dist(src,usr) >= 1) //in case they leave the locker
+ to_chat(src, "You are no longer both in \the [src].")
+ return
+
+ playsound(src, vore_sound, 25)
+
+ var/mob/living/M = usr
+ M.perform_the_nom(usr,target,usr,usr.vore_selected,1)
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index f79d770f74..48bea9205b 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -6,6 +6,7 @@
open_sound = 'sound/effects/wooden_closet_open.ogg'
close_sound = 'sound/effects/wooden_closet_close.ogg'
+ vore_sound = 'sound/effects/woodhit.ogg'
/obj/structure/closet/acloset
name = "strange closet"
@@ -82,3 +83,34 @@
icon = 'icons/obj/closets/abductor.dmi'
anchored = TRUE
closet_appearance = null // special icons
+
+/obj/structure/closet/tent
+ name = "tent"
+ desc = "An old fashioned tent that can easily fit a couple of people."
+ icon = 'icons/obj/closets/tent.dmi'
+ closet_appearance = null
+ anchored = 1
+ open_sound = 'sound/effects/rustle3.ogg'
+ close_sound = 'sound/effects/rustle4.ogg'
+ vore_sound = 'sound/effects/rustle1.ogg'
+
+/obj/structure/closet/tent/B
+ icon = 'icons/obj/closets/tentB.dmi'
+
+/datum/crafting_recipe/tent
+ name = "tent (green)"
+ result = /obj/structure/closet/tent
+ reqs = list(
+ list(/obj/item/stack/material/cloth = 10)
+ )
+ time = 60
+ category = CAT_MISC
+
+/datum/crafting_recipe/tentb
+ name = "tent (tan)"
+ result = /obj/structure/closet/tent/B
+ reqs = list(
+ list(/obj/item/stack/material/cloth = 10)
+ )
+ time = 60
+ category = CAT_MISC
diff --git a/icons/obj/closets/tent.dmi b/icons/obj/closets/tent.dmi
new file mode 100644
index 0000000000..939557b190
Binary files /dev/null and b/icons/obj/closets/tent.dmi differ
diff --git a/icons/obj/closets/tentB.dmi b/icons/obj/closets/tentB.dmi
new file mode 100644
index 0000000000..a1446d2737
Binary files /dev/null and b/icons/obj/closets/tentB.dmi differ