Files
VOREStation/code/game/objects/structures/bedsheet_bin.dm
SatinIsle 765181b19b Flippable beds and sheets
Added a verb to beds, bedsheets and sub-objects to allow them to be flipped to face the opposite direction (if they have directional sprites available). This applies to chairs too, because why not. If it's possible for me to just not display the verb for non-flippable subtypes, let me know how!

Also swaps out some beds on the Stellar Delight to face the other direction so that their pillows are against the wall.
2024-11-20 13:07:48 +00:00

267 lines
5.7 KiB
Plaintext

/*
CONTAINS:
BEDSHEETS
LINEN BINS
*/
/obj/item/bedsheet
name = "bedsheet"
desc = "A surprisingly soft linen bedsheet."
icon = 'icons/obj/items.dmi'
icon_state = "sheet"
slot_flags = SLOT_BACK
plane = MOB_PLANE
layer = BELOW_MOB_LAYER
throwforce = 1
throw_speed = 1
throw_range = 2
w_class = ITEMSIZE_SMALL
drop_sound = 'sound/items/drop/clothing.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
/obj/item/bedsheet/attack_self(mob/user as mob)
user.drop_item()
if(layer == initial(layer))
layer = ABOVE_MOB_LAYER
else
reset_plane_and_layer()
add_fingerprint(user)
return
/obj/item/bedsheet/attackby(obj/item/I, mob/user)
if(is_sharp(I))
user.visible_message(span_infoplain(span_bold("\The [user]") + " begins cutting up [src] with [I]."), span_notice("You begin cutting up [src] with [I]."))
if(do_after(user, 50))
to_chat(user, span_notice("You cut [src] into pieces!"))
for(var/i in 1 to rand(2,5))
new /obj/item/reagent_containers/glass/rag(drop_location())
qdel(src)
return
..()
/obj/item/bedsheet/verb/turn_around()
set name = "Turn Around"
set category = "Object"
set src in oview(1)
if(!usr || !isturf(usr.loc))
return
if(usr.stat || usr.restrained())
return
if(ismouse(usr) || (isobserver(usr) && !CONFIG_GET(flag/ghost_interaction)))
return
if(dir >= 2)
src.set_dir(1)
else
src.set_dir(2)
/obj/item/bedsheet/blue
icon_state = "sheetblue"
/obj/item/bedsheet/green
icon_state = "sheetgreen"
/obj/item/bedsheet/orange
icon_state = "sheetorange"
/obj/item/bedsheet/purple
icon_state = "sheetpurple"
/obj/item/bedsheet/rainbow
icon_state = "sheetrainbow"
/obj/item/bedsheet/red
icon_state = "sheetred"
/obj/item/bedsheet/yellow
icon_state = "sheetyellow"
/obj/item/bedsheet/mime
icon_state = "sheetmime"
/obj/item/bedsheet/clown
icon_state = "sheetclown"
item_state = "sheetrainbow"
/obj/item/bedsheet/captain
icon_state = "sheetcaptain"
/obj/item/bedsheet/rd
icon_state = "sheetrd"
/obj/item/bedsheet/medical
icon_state = "sheetmedical"
/obj/item/bedsheet/hos
icon_state = "sheethos"
/obj/item/bedsheet/hop
icon_state = "sheethop"
/obj/item/bedsheet/ce
icon_state = "sheetce"
/obj/item/bedsheet/brown
icon_state = "sheetbrown"
/obj/item/bedsheet/ian
icon_state = "sheetian"
/obj/item/bedsheet/double
icon_state = "doublesheet"
item_state = "sheet"
/obj/item/bedsheet/bluedouble
icon_state = "doublesheetblue"
item_state = "sheetblue"
/obj/item/bedsheet/greendouble
icon_state = "doublesheetgreen"
item_state = "sheetgreen"
/obj/item/bedsheet/orangedouble
icon_state = "doublesheetorange"
item_state = "sheetorange"
/obj/item/bedsheet/purpledouble
icon_state = "doublesheetpurple"
item_state = "sheetpurple"
/obj/item/bedsheet/rainbowdouble //all the way across the sky.
icon_state = "doublesheetrainbow"
item_state = "sheetrainbow"
/obj/item/bedsheet/reddouble
icon_state = "doublesheetred"
item_state = "sheetred"
/obj/item/bedsheet/yellowdouble
icon_state = "doublesheetyellow"
item_state = "sheetyellow"
/obj/item/bedsheet/mimedouble
icon_state = "doublesheetmime"
item_state = "sheetmime"
/obj/item/bedsheet/clowndouble
icon_state = "doublesheetclown"
item_state = "sheetrainbow"
/obj/item/bedsheet/captaindouble
icon_state = "doublesheetcaptain"
item_state = "sheetcaptain"
/obj/item/bedsheet/rddouble
icon_state = "doublesheetrd"
item_state = "sheetrd"
/obj/item/bedsheet/hosdouble
icon_state = "doublesheethos"
item_state = "sheethos"
/obj/item/bedsheet/hopdouble
icon_state = "doublesheethop"
item_state = "sheethop"
/obj/item/bedsheet/cedouble
icon_state = "doublesheetce"
item_state = "sheetce"
/obj/item/bedsheet/browndouble
icon_state = "doublesheetbrown"
item_state = "sheetbrown"
/obj/item/bedsheet/iandouble
icon_state = "doublesheetian"
item_state = "sheetian"
/obj/structure/bedsheetbin
name = "linen bin"
desc = "A linen bin. It looks rather cosy."
icon = 'icons/obj/structures.dmi'
icon_state = "linenbin-full"
anchored = TRUE
var/amount = 20
var/list/sheets = list()
var/obj/item/hidden = null
/obj/structure/bedsheetbin/examine(mob/user)
. = ..()
if(amount < 1)
. += "There are no bed sheets in the bin."
else if(amount == 1)
. += "There is one bed sheet in the bin."
else
. += "There are [amount] bed sheets in the bin."
/obj/structure/bedsheetbin/update_icon()
if(amount == 0)
icon_state = "linenbin-empty"
else if(amount <= (amount / 2))
icon_state = "linenbin-half"
else
icon_state = "linenbin-full"
/obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/bedsheet))
user.drop_item()
I.loc = src
sheets.Add(I)
amount++
to_chat(user, span_notice("You put [I] in [src]."))
else if(amount && !hidden && I.w_class < ITEMSIZE_LARGE) //make sure there's sheets to hide it among, make sure nothing else is hidden in there.
user.drop_item()
I.loc = src
hidden = I
to_chat(user, span_notice("You hide [I] among the sheets."))
/obj/structure/bedsheetbin/attack_hand(mob/user as mob)
if(amount >= 1)
amount--
var/obj/item/bedsheet/B
if(sheets.len > 0)
B = sheets[sheets.len]
sheets.Remove(B)
else
B = new /obj/item/bedsheet(loc)
B.loc = user.loc
user.put_in_hands(B)
to_chat(user, span_notice("You take [B] out of [src]."))
if(hidden)
hidden.loc = user.loc
to_chat(user, span_notice("[hidden] falls out of [B]!"))
hidden = null
add_fingerprint(user)
/obj/structure/bedsheetbin/attack_tk(mob/user as mob)
if(amount >= 1)
amount--
var/obj/item/bedsheet/B
if(sheets.len > 0)
B = sheets[sheets.len]
sheets.Remove(B)
else
B = new /obj/item/bedsheet(loc)
B.loc = loc
to_chat(user, span_notice("You telekinetically remove [B] from [src]."))
update_icon()
if(hidden)
hidden.loc = loc
hidden = null
add_fingerprint(user)