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.
This commit is contained in:
SatinIsle
2024-03-06 19:19:53 +00:00
committed by GitHub
parent ec19e32688
commit dc8dfc1094
4 changed files with 79 additions and 0 deletions
@@ -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, "<span class='warning'>You need to be inside \the [src] to do this.</span>")
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, "<span class='notice'>No eligible targets found.</span>")
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, "<span class='warning'>You need to select a living target!</span>")
return
if (get_dist(src,target) >= 1 || get_dist(src,usr) >= 1) //in case they leave the locker
to_chat(src, "<span class='warning'>You are no longer both in \the [src].</span>")
return
playsound(src, vore_sound, 25)
var/mob/living/M = usr
M.perform_the_nom(usr,target,usr,usr.vore_selected,1)
@@ -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