Files
Aurora.3/code/game/objects/structures/bedsheet_bin.dm
Wowzewow (Wezzy) a6688878a4 Bedsheet inhands and other fixes (#7559)
Adds more bedsheet inhands, because immersion.
Penlight has an inhand now.
Lanterns have new inhands.
Ashtray cigarette extinguish now properly plays the sound.
You can put cigarette butts in cigarette packets

also some more stupid drop sounds
2019-12-05 23:43:49 +02:00

458 lines
14 KiB
Plaintext

/*
CONTAINS:
BEDSHEETS
LINEN BINS
*/
/obj/item/bedsheet
name = "bedsheet"
desc = "A surprisingly soft linen bedsheet."
description_info = "Click to roll and unroll. Alt-click to fold and unfold. Drag and drop to pick up."
description_fluff = "It seems like you can equip it in your backpack slot..."
icon = 'icons/obj/bedsheets.dmi'
icon_state = "sheetwhite"
item_state = "sheetwhite"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_bedsheet.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_bedsheet.dmi',
)
slot_flags = SLOT_BACK
layer = 4.0
throwforce = 1
throw_speed = 1
throw_range = 2
w_class = 4.0
drop_sound = 'sound/items/drop/clothing.ogg'
randpixel = 0
center_of_mass = null
var/roll = FALSE
var/fold = FALSE
var/inuse = FALSE
var/inside_storage_item = FALSE
/obj/item/bedsheet/afterattack(atom/A, mob/user)
if(istype(A, /obj/structure/bed))
user.drop_item()
forceMove(get_turf(A))
add_fingerprint(user)
return
/obj/item/bedsheet/attack_hand(mob/user as mob)
if(fold || inside_storage_item)
if(inside_storage_item)
inside_storage_item = FALSE
if(!istype(loc,/mob))
user.put_in_hands(src)
if(!istype(loc,/mob))
toggle_roll(user)
else
..()
add_fingerprint(user)
/obj/item/bedsheet/on_enter_storage(obj/item/storage/S as obj)
inside_storage_item = TRUE
return
/obj/item/bedsheet/on_exit_storage(obj/item/storage/S as obj)
inside_storage_item = FALSE
return
/obj/item/bedsheet/AltClick(mob/user as mob)
if(!istype(loc,/mob))
toggle_fold(user)
else
user.show_message("<span class='warning'>Drop \the [src] first.</span>")
..()
add_fingerprint(user)
/obj/item/bedsheet/MouseDrop(mob/user as mob)
if((user && (!use_check(user))) && (user.contents.Find(src) || in_range(src, user)))
if(!istype(user, /mob/living/carbon/slime) && !istype(user, /mob/living/simple_animal))
if( !user.get_active_hand() ) //if active hand is empty
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
if (H.hand)
temp = H.organs_by_name["l_hand"]
if(temp && !temp.is_usable())
to_chat(user, "<span class='notice'>You try to move your [temp.name], but cannot!</span>")
return
to_chat(user, "<span class='notice'>You pick up the [src].</span>")
user.put_in_hands(src)
return
/obj/item/bedsheet/update_icon()
if(fold)
icon_state = "sheet-fold"
else if(roll)
icon_state = "sheet-roll"
else
icon_state = initial(icon_state)
/obj/item/bedsheet/Crossed(H as mob) //Basically, stepping on it resets it to below people.
if(isliving(H))
var/mob/living/M = H
if(M.loc == src.loc)
return
else
layer = initial(layer)
/obj/item/bedsheet/verb/fold_verb(var/mob/living/user)
set name = "Fold Bedsheet"
set category = "Object"
set src in view(1)
if(ishuman(user))
toggle_fold(user)
/obj/item/bedsheet/proc/toggle_fold(var/mob/living/user) // Fold sheets to make them more portable through secret janitor-fu.
if(!user)
return FALSE
if(inuse)
return FALSE
if(roll)
user.show_message("<span class='warning'>Unroll \the [src] first.</span>")
return FALSE
inuse = TRUE
if (do_after(user, 25, src))
if(user.loc != loc)
user.do_attack_animation(src)
playsound(get_turf(loc), "rustle", 15, 1, -5)
var/folds = fold
user.visible_message("<span class='notice'>\The [user] [folds ? "unfolds" : "folds"] \the [src].", "You [fold ? "unfold" : "fold"] \the [src].</span>")
if(!fold)
fold = TRUE
slot_flags = null
w_class = 2.0
layer = initial(layer)
else
fold = FALSE
slot_flags = SLOT_BACK
w_class = 4.0
update_icon()
inuse = FALSE
return TRUE
inuse = FALSE
return FALSE
/obj/item/bedsheet/verb/roll_verb(var/mob/living/user)
set name = "Roll Bedsheet"
set category = "Object"
set src in view(1)
if(ishuman(user))
toggle_roll(user)
/obj/item/bedsheet/proc/toggle_roll(var/mob/living/user) // Tuck yourself in just by clicking. Also automatically rests you (if you're under it)
if(!user)
return FALSE
if(inuse)
return FALSE
if(fold)
return FALSE
inuse = TRUE
if (do_after(user, 6, src))
if(user.loc != loc)
user.do_attack_animation(src)
playsound(get_turf(loc), "rustle", 15, 1, -5)
var/rolls = roll
user.visible_message("<span class='notice'>\The [user] [rolls ? "unrolls" : "rolls"] \the [src].", "You [roll ? "unroll" : "roll"] \the [src].</span>")
if(!roll)
roll = TRUE
slot_flags = null
w_class = 3.0
layer = initial(layer)
if(user.resting && get_turf(src) == get_turf(user)) // Make them rest
user.lay_down()
else
roll = FALSE
slot_flags = SLOT_BACK
w_class = 4.0
if(layer == initial(layer))
layer = ABOVE_MOB_LAYER
if(!user.resting && get_turf(src) == get_turf(user)) // Make them get up
user.lay_down()
update_icon()
inuse = FALSE
return TRUE
inuse = FALSE
return FALSE
/obj/item/bedsheet/attackby(obj/item/I, mob/user)
if(I.isscrewdriver())
user.visible_message("<span class='notice'>\The [user] begins poking eyeholes in \the [src] with \the [I].</span>", "<span class='notice'>You begin poking eyeholes in \the [src] with \the [I].</span>")
if(do_after(user, 50/I.toolspeed))
to_chat(user, "<span class='notice'>You poke eyeholes in \the [src]!</span>")
new /obj/item/bedsheet/costume(get_turf(src))
qdel(src)
return
else if(is_sharp(I))
user.visible_message("<span class='notice'>\The [user] begins cutting up [src] with [I].</span>", "<span class='notice'>You begin cutting up [src] with [I].</span>")
if(do_after(user, 50/I.toolspeed))
to_chat(user, "<span class='notice'>You cut [src] into pieces!</span>")
for(var/i in 1 to rand(2,5))
new /obj/item/reagent_containers/glass/rag(get_turf(src))
qdel(src)
return
..()
/obj/item/bedsheet/grey
icon_state = "sheetgrey"
item_state = "sheetgrey"
/obj/item/bedsheet/red
icon_state = "sheetred"
item_state = "sheetred"
/obj/item/bedsheet/orange
icon_state = "sheetorange"
item_state = "sheetorange"
/obj/item/bedsheet/yellow
icon_state = "sheetyellow"
item_state = "sheetyellow"
/obj/item/bedsheet/green
icon_state = "sheetgreen"
item_state = "sheetgreen"
/obj/item/bedsheet/blue
icon_state = "sheetblue"
item_state = "sheetblue"
/obj/item/bedsheet/purple
icon_state = "sheetpurple"
item_state = "sheetpurple"
/obj/item/bedsheet/rainbow
name = "rainbow bedsheet"
desc = "A multicolored blanket. It's actually several different sheets cut up and sewn together."
icon_state = "sheetrainbow"
item_state = "sheetrainbow"
/obj/item/bedsheet/brown
icon_state = "sheetbrown"
item_state = "sheetbrown"
/obj/item/bedsheet/black
icon_state = "sheetblack"
item_state = "sheetblack"
/obj/item/bedsheet/mime
name = "mime's blanket"
desc = "A very soothing striped blanket. All the noise just seems to fade out when you're under the covers in this."
icon_state = "sheetmime"
item_state = "sheetmime"
/obj/item/bedsheet/clown
name = "clown's blanket"
desc = "A rainbow blanket with a clown mask woven in. It smells faintly of bananas."
icon_state = "sheetclown"
item_state = "sheetclown"
/obj/item/bedsheet/captain
name = "captain's bedsheet"
desc = "It has a Nanotrasen symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains."
icon_state = "sheetcaptain"
item_state = "sheetcaptain"
/obj/item/bedsheet/ian
icon_state = "sheetian"
item_state = "sheetian"
/obj/item/bedsheet/medical
name = "medical blanket"
desc = "It's a sterilized blanket commonly used in the Medbay. Well, as sterilized as space cleaner allows."
icon_state = "sheetmedical"
item_state = "sheetmedical"
/obj/item/bedsheet/cmo
name = "chief medical officer's bedsheet"
desc = "It's a sterilized blanket that has a cross emblem. There's some cat fur on it."
icon_state = "sheetcmo"
item_state = "sheetcmo"
/obj/item/bedsheet/qm
name = "quartermaster's bedsheet"
desc = "It is decorated with a crate emblem in silver lining. It's rather tough, and just the thing to lie on after a hard day of pushing paper."
icon_state = "sheetqm"
item_state = "sheetqm"
/obj/item/bedsheet/hop
name = "head of personnel's bedsheet"
desc = "It is decorated with a key emblem. For those rare moments when you can rest and cuddle with Ian without someone screaming for you over the radio."
icon_state = "sheethop"
item_state = "sheethop"
/obj/item/bedsheet/ce
name = "chief engineer's bedsheet"
desc = "It is decorated with a wrench emblem. It's highly reflective and stain resistant, so you don't need to worry about ruining it with oil."
icon_state = "sheetce"
item_state = "sheetce"
/obj/item/bedsheet/hos
name = "head of security's bedsheet"
desc = "It is decorated with a shield emblem. While crime doesn't sleep, you do, but you are still THE LAW!"
icon_state = "sheethos"
item_state = "sheethos"
/obj/item/bedsheet/rd
name = "research director's bedsheet"
desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day."
icon_state = "sheetrd"
item_state = "sheetrd"
/obj/item/bedsheet/centcom
name = "\improper CentCom bedsheet"
desc = "Woven with advanced nanothread for warmth as well as being very decorated, essential for all officials."
icon_state = "sheetcentcom"
item_state = "sheetcentcom"
/obj/item/bedsheet/nanotrasen
name = "nanotrasen bedsheet"
desc = "It has the Nanotrasen logo on it and has an aura of duty."
icon_state = "sheetNT"
item_state = "sheetNT"
/obj/item/bedsheet/syndie
name = "syndicate bedsheet"
desc = "It has a syndicate emblem and it has an aura of evil."
icon_state = "sheetsyndie"
item_state = "sheetsyndie"
/obj/item/bedsheet/costume
name = "ghost bedsheet"
desc = "It seems to be flipped inside out with eyeholes poked out. "
icon_state = "sheetcostume"
item_state = "sheetcostume"
slot_flags = SLOT_OCLOTHING
/obj/item/bedsheet/random
name = "random bedsheet"
icon_state = "sheetrandom"
item_state = "sheetrainbow"
desc = "If you're reading this description ingame, something has gone wrong! Honk!"
/obj/item/bedsheet/random/Initialize()
..()
var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random)
new type(loc)
return INITIALIZE_HINT_QDEL
/obj/item/bedsheet/dorms
name = "random dorms bedsheet"
icon_state = "sheetrandom"
item_state = "sheetrainbow"
desc = "If you're reading this description ingame, something has gone wrong! Honk!"
/obj/item/bedsheet/dorms/Initialize()
..()
var/type = pickweight(list("Colors" = 80, "Special" = 20))
switch(type)
if("Colors")
type = pick(list(/obj/item/bedsheet,
/obj/item/bedsheet/blue,
/obj/item/bedsheet/green,
/obj/item/bedsheet/grey,
/obj/item/bedsheet/orange,
/obj/item/bedsheet/purple,
/obj/item/bedsheet/red,
/obj/item/bedsheet/yellow,
/obj/item/bedsheet/brown,
/obj/item/bedsheet/black))
if("Special")
type = pick(list(/obj/item/bedsheet/rainbow,
/obj/item/bedsheet/ian,
/obj/item/bedsheet/nanotrasen))
new type(loc)
return INITIALIZE_HINT_QDEL
/obj/structure/bedsheetbin
name = "linen bin"
desc = "A linen bin. It looks rather cosy."
icon = 'icons/obj/structures.dmi'
icon_state = "linenbin-full"
anchored = 1
var/amount = 20
var/list/sheets = list()
var/obj/item/hidden = null
/obj/structure/bedsheetbin/examine(mob/user)
..(user)
if(amount < 1)
to_chat(user, "There are no bed sheets in the bin.")
return
if(amount == 1)
to_chat(user, "There is one bed sheet in the bin.")
return
to_chat(user, "There are [amount] bed sheets in the bin.")
/obj/structure/bedsheetbin/update_icon()
switch(amount)
if(0) icon_state = "linenbin-empty"
if(1 to 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_from_inventory(I,src)
sheets.Add(I)
amount++
to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
else if(amount && !hidden && I.w_class < 4) //make sure there's sheets to hide it among, make sure nothing else is hidden in there.
user.drop_from_inventory(I,src)
hidden = I
to_chat(user, "<span class='notice'>You hide [I] among the sheets.</span>")
/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.forceMove(user.loc)
user.put_in_hands(B)
to_chat(user, "<span class='notice'>You take [B] out of [src].</span>")
if(hidden)
hidden.forceMove(user.loc)
to_chat(user, "<span class='notice'>[hidden] falls out of [B]!</span>")
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.forceMove(loc)
to_chat(user, "<span class='notice'>You telekinetically remove [B] from [src].</span>")
update_icon()
if(hidden)
hidden.forceMove(loc)
hidden = null
add_fingerprint(user)