From dc8dfc109489cadf97869fcb419ae0610fbdb2ef Mon Sep 17 00:00:00 2001
From: SatinIsle <98125273+SatinIsle@users.noreply.github.com>
Date: Wed, 6 Mar 2024 19:19:53 +0000
Subject: [PATCH] Closet vore and Tents (#15808)
* Closet vore and Tents
Added a new verb to the ability tab when interacting with closets called "Vore Occupants". This allows you to eat another person when both of you are inside of the same closet.
Added tents as a subtype of closets.
* Crafting
Added the ability to craft tents with 10 cloth.
* Ghost check and change category
Added a check to make sure user is /mob/living.
Changed category from Abilities to Object because having no abilities means that your tab changes every time you move past a locker.
---
.../structures/crates_lockers/__closets.dm | 47 ++++++++++++++++++
.../crates_lockers/closets/gimmick.dm | 32 ++++++++++++
icons/obj/closets/tent.dmi | Bin 0 -> 552 bytes
icons/obj/closets/tentB.dmi | Bin 0 -> 552 bytes
4 files changed, 79 insertions(+)
create mode 100644 icons/obj/closets/tent.dmi
create mode 100644 icons/obj/closets/tentB.dmi
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 0000000000000000000000000000000000000000..939557b190f249966340f19dc533ca0fe7e09754
GIT binary patch
literal 552
zcmV+@0@wYCP)fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM
z;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KAHiHkEOv#1!zH00t;D@x2wg|OiY@(WV)
za4Aw&aP@NmTMGaHt0G(a?QeYm00A^fL_t(Ijg`+oYJ@--hvCmkw%iCdK@k5OK!*kE
zz+ONRY;9%>t2DbXl@Jz8XP4S$7d%G1fmNEhOJ&B*>z*GkBLaxiY?$2Kuy?kt
z1)ja-$AJ-eFI(17;2rICgUN?@-8$w&YOfj2Vu;tQV=*MER
zCvwLi$5ua@4Q5_+ZafBNPU&bMcoyJkptmP%7G0S7>Nii=qO@0L18H#4AwO0DX(&5o
z(C@9ugD}08(iRVTX(0Co^8oqROqvcS4TQ+xEy|=tAPpDxg&~MgC2Wb{OL)g07y|Z0
qJ(yDUM9qWC>z>_{<5X2u|M52-me>LQ(3!#j0000
literal 0
HcmV?d00001
diff --git a/icons/obj/closets/tentB.dmi b/icons/obj/closets/tentB.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..a1446d27378f40714ea6403f989a74855bbd26c8
GIT binary patch
literal 552
zcmV+@0@wYCP)fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM
z;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KAHiHkEOv#1!zH00t;D@x2wg|OiY@(WV)
za4Aw&aP@NmTMGaHt0G(a?QeYm00A^fL_t(Ijg`+oYJ@--hvCmkw%iCdK@k5OK!*kE
zz+ONRY;9%>t2DbXl@Jz8XP4S$7d%G1fmNEhOJ&B*>z*GkBLaxiY?$2Kuy?kt
z1)ja-$AJ-eFI(17;2rICgUN?@-8$w&YOfj2Vu;tQV=*MER
zCvwLi$5ua@4Q5_+ZafBNPU&bMcoyJkptmP%7G0S7>Nii=qO@0L18H#4AwO0DX(&5o
z(C@9ugD}08(iRVTX(0Co^8oqROqvcS4TQ+xEy|=tAPpDxg&~MgC2Wb{OL)g07y|Z0
qJ(yDUM9qWC>z>_{<5X2u|M52-me>LQ(3!#j0000