/* CONTAINS: BEDSHEETS LINEN BINS */ #define BEDSHEET_ABSTRACT "abstract" #define BEDSHEET_SINGLE "single" #define BEDSHEET_DOUBLE "double" /obj/item/bedsheet name = "bedsheet" desc = "A surprisingly soft linen bedsheet." icon = 'icons/obj/bedsheets.dmi' lefthand_file = 'icons/mob/inhands/misc/bedsheet_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/bedsheet_righthand.dmi' icon_state = "sheetwhite" inhand_icon_state = "sheetwhite" slot_flags = ITEM_SLOT_NECK layer = MOB_LAYER throwforce = 0 throw_speed = 1 throw_range = 2 w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE dying_key = DYE_REGISTRY_BEDSHEET dog_fashion = /datum/dog_fashion/head/ghost var/list/dream_messages = list("white") var/stack_amount = 3 var/bedsheet_type = BEDSHEET_SINGLE /obj/item/bedsheet/Initialize(mapload) . = ..() AddElement(/datum/element/surgery_initiator) AddElement(/datum/element/bed_tuckable, 0, 0, 0) if(bedsheet_type == BEDSHEET_DOUBLE) stack_amount *= 2 dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET /obj/item/bedsheet/attack_self(mob/user) if(!user.CanReach(src)) //No telekenetic grabbing. return if(!user.dropItemToGround(src)) return if(layer == initial(layer)) layer = ABOVE_MOB_LAYER to_chat(user, span_notice("You cover yourself with [src].")) pixel_x = 0 pixel_y = 0 else layer = initial(layer) to_chat(user, span_notice("You smooth [src] out beneath you.")) add_fingerprint(user) return /obj/item/bedsheet/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness()) if (!(flags_1 & HOLOGRAM_1)) var/obj/item/stack/sheet/cloth/shreds = new (get_turf(src), stack_amount) if(!QDELETED(shreds)) //stacks merged transfer_fingerprints_to(shreds) shreds.add_fingerprint(user) qdel(src) to_chat(user, span_notice("You tear [src] up.")) else return ..() /obj/item/bedsheet/blue icon_state = "sheetblue" inhand_icon_state = "sheetblue" dream_messages = list("blue") /obj/item/bedsheet/green icon_state = "sheetgreen" inhand_icon_state = "sheetgreen" dream_messages = list("green") /obj/item/bedsheet/grey icon_state = "sheetgrey" inhand_icon_state = "sheetgrey" dream_messages = list("grey") /obj/item/bedsheet/orange icon_state = "sheetorange" inhand_icon_state = "sheetorange" dream_messages = list("orange") /obj/item/bedsheet/purple icon_state = "sheetpurple" inhand_icon_state = "sheetpurple" dream_messages = list("purple") /obj/item/bedsheet/patriot name = "patriotic bedsheet" desc = "You've never felt more free than when sleeping on this." icon_state = "sheetUSA" inhand_icon_state = "sheetUSA" dream_messages = list("America", "freedom", "fireworks", "bald eagles") /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" inhand_icon_state = "sheetrainbow" dream_messages = list("red", "orange", "yellow", "green", "blue", "purple", "a rainbow") /obj/item/bedsheet/red icon_state = "sheetred" inhand_icon_state = "sheetred" dream_messages = list("red") /obj/item/bedsheet/yellow icon_state = "sheetyellow" inhand_icon_state = "sheetyellow" dream_messages = list("yellow") /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" inhand_icon_state = "sheetmime" dream_messages = list("silence", "gestures", "a pale face", "a gaping mouth", "the mime") /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" inhand_icon_state = "sheetrainbow" dream_messages = list("honk", "laughter", "a prank", "a joke", "a smiling face", "the clown") /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" inhand_icon_state = "sheetcaptain" dream_messages = list("authority", "a golden ID", "sunglasses", "a green disc", "an antique gun", "the captain") /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" inhand_icon_state = "sheetrd" dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director") // for Free Golems. /obj/item/bedsheet/rd/royal_cape name = "Royal Cape of the Liberator" desc = "Majestic." dream_messages = list("mining", "stone", "a golem", "freedom", "doing whatever") /obj/item/bedsheet/medical name = "medical blanket" desc = "It's a sterilized* blanket commonly used in the Medbay. *Sterilization is voided if a virologist is present onboard the station." icon_state = "sheetmedical" inhand_icon_state = "sheetmedical" dream_messages = list("healing", "life", "surgery", "a doctor") /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, likely from Runtime." icon_state = "sheetcmo" inhand_icon_state = "sheetcmo" dream_messages = list("authority", "a silvery ID", "healing", "life", "surgery", "a cat", "the chief medical officer") /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" inhand_icon_state = "sheethos" dream_messages = list("authority", "a silvery ID", "handcuffs", "a baton", "a flashbang", "sunglasses", "the head of security") /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" inhand_icon_state = "sheethop" dream_messages = list("authority", "a silvery ID", "obligation", "a computer", "an ID", "a corgi", "the head of personnel") /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" inhand_icon_state = "sheetce" dream_messages = list("authority", "a silvery ID", "the engine", "power tools", "an APC", "a parrot", "the chief engineer") /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" inhand_icon_state = "sheetqm" dream_messages = list("a grey ID", "a shuttle", "a crate", "a sloth", "the quartermaster") /obj/item/bedsheet/chaplain name = "chaplain's blanket" desc = "A blanket woven with the hearts of gods themselves... Wait, that's just linen." icon_state = "sheetchap" inhand_icon_state = "sheetchap" dream_messages = list("a grey ID", "the gods", "a fulfilled prayer", "a cult", "the chaplain") /obj/item/bedsheet/brown icon_state = "sheetbrown" inhand_icon_state = "sheetbrown" dream_messages = list("brown") /obj/item/bedsheet/black icon_state = "sheetblack" inhand_icon_state = "sheetblack" dream_messages = list("black") /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" inhand_icon_state = "sheetcentcom" dream_messages = list("a unique ID", "authority", "artillery", "an ending") /obj/item/bedsheet/syndie name = "syndicate bedsheet" desc = "It has a syndicate emblem and it has an aura of evil." icon_state = "sheetsyndie" inhand_icon_state = "sheetsyndie" dream_messages = list("a green disc", "a red crystal", "a glowing blade", "a wire-covered ID") /obj/item/bedsheet/cult name = "cultist's bedsheet" desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence." icon_state = "sheetcult" inhand_icon_state = "sheetcult" dream_messages = list("a tome", "a floating red crystal", "a glowing sword", "a bloody symbol", "a massive humanoid figure") /obj/item/bedsheet/wiz name = "wizard's bedsheet" desc = "A special fabric enchanted with magic so you can have an enchanted night. It even glows!" icon_state = "sheetwiz" inhand_icon_state = "sheetwiz" dream_messages = list("a book", "an explosion", "lightning", "a staff", "a skeleton", "a robe", "magic") /obj/item/bedsheet/nanotrasen name = "\improper Nanotrasen bedsheet" desc = "It has the Nanotrasen logo on it and has an aura of duty." icon_state = "sheetNT" inhand_icon_state = "sheetNT" dream_messages = list("authority", "an ending") /obj/item/bedsheet/ian icon_state = "sheetian" inhand_icon_state = "sheetian" dream_messages = list("a dog", "a corgi", "woof", "bark", "arf") /obj/item/bedsheet/cosmos name = "cosmic space bedsheet" desc = "Made from the dreams of those who wonder at the stars." icon_state = "sheetcosmos" inhand_icon_state = "sheetcosmos" dream_messages = list("the infinite cosmos", "Hans Zimmer music", "a flight through space", "the galaxy", "being fabulous", "shooting stars") light_power = 2 light_range = 1.4 /obj/item/bedsheet/random icon_state = "random_bedsheet" name = "random bedsheet" desc = "If you're reading this description ingame, something has gone wrong! Honk!" bedsheet_type = BEDSHEET_ABSTRACT var/static/list/bedsheet_list var/spawn_type = BEDSHEET_SINGLE /obj/item/bedsheet/random/Initialize(mapload) ..() if(!LAZYACCESS(bedsheet_list, spawn_type)) var/list/spawn_list = list() var/list/possible_types = typesof(/obj/item/bedsheet) for(var/obj/item/bedsheet/sheet as anything in possible_types) if(initial(sheet.bedsheet_type) == spawn_type) spawn_list += sheet LAZYSET(bedsheet_list, spawn_type, spawn_list) var/chosen_type = pick(bedsheet_list[spawn_type]) new chosen_type(loc) return INITIALIZE_HINT_QDEL /obj/item/bedsheet/random/double icon_state = "random_bedsheet" spawn_type = BEDSHEET_DOUBLE /obj/item/bedsheet/dorms icon_state = "random_bedsheet" name = "random dorms bedsheet" desc = "If you're reading this description ingame, something has gone wrong! Honk!" bedsheet_type = BEDSHEET_DOUBLE slot_flags = null /obj/item/bedsheet/dorms/Initialize(mapload) ..() var/type = pick_weight(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/patriot, /obj/item/bedsheet/rainbow, /obj/item/bedsheet/ian, /obj/item/bedsheet/cosmos, /obj/item/bedsheet/nanotrasen)) new type(loc) return INITIALIZE_HINT_QDEL /obj/item/bedsheet/double icon_state = "double_sheetwhite" worn_icon_state = "sheetwhite" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/blue/double icon_state = "double_sheetblue" worn_icon_state = "sheetblue" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/green/double icon_state = "double_sheetgreen" worn_icon_state = "sheetgreen" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/grey/double icon_state = "double_sheetgrey" worn_icon_state = "sheetgrey" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/orange/double icon_state = "double_sheetorange" worn_icon_state = "sheetorange" dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/purple/double icon_state = "double_sheetpurple" worn_icon_state = "sheetpurple" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/patriot/double icon_state = "double_sheetUSA" worn_icon_state = "sheetUSA" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/rainbow/double icon_state = "double_sheetrainbow" worn_icon_state = "sheetrainbow" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/red/double icon_state = "double_sheetred" worn_icon_state = "sheetred" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/yellow/double icon_state = "double_sheetyellow" worn_icon_state = "sheetyellow" dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/mime/double icon_state = "double_sheetmime" worn_icon_state = "sheetmime" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/clown/double icon_state = "double_sheetclown" worn_icon_state = "sheetclown" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/captain/double icon_state = "double_sheetcaptain" worn_icon_state = "sheetcaptain" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/rd/double icon_state = "double_sheetrd" worn_icon_state = "sheetrd" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/medical/double icon_state = "double_sheetmedical" worn_icon_state = "sheetmedical" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/cmo/double icon_state = "double_sheetcmo" worn_icon_state = "sheetcmo" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/hos/double icon_state = "double_sheethos" worn_icon_state = "sheethos" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/hop/double icon_state = "double_sheethop" worn_icon_state = "sheethop" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/ce/double icon_state = "double_sheetce" worn_icon_state = "sheetce" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/qm/double icon_state = "double_sheetqm" worn_icon_state = "sheetqm" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/chaplain/double icon_state = "double_sheetchap" worn_icon_state = "sheetchap" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/brown/double icon_state = "double_sheetbrown" worn_icon_state = "sheetbrown" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/black/double icon_state = "double_sheetblack" worn_icon_state = "sheetblack" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/centcom/double icon_state = "double_sheetcentcom" worn_icon_state = "sheetcentcom" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/syndie/double icon_state = "double_sheetsyndie" worn_icon_state = "sheetsyndie" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/cult/double icon_state = "double_sheetcult" worn_icon_state = "sheetcult" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/wiz/double icon_state = "double_sheetwiz" worn_icon_state = "sheetwiz" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/nanotrasen/double icon_state = "double_sheetNT" worn_icon_state = "sheetNT" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/ian/double icon_state = "double_sheetian" worn_icon_state = "sheetian" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/cosmos/double icon_state = "double_sheetcosmos" worn_icon_state = "sheetcosmos" bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/dorms_double icon_state = "random_bedsheet" bedsheet_type = BEDSHEET_ABSTRACT /obj/item/bedsheet/dorms_double/Initialize() ..() var/type = pick_weight(list("Colors" = 80, "Special" = 20)) switch(type) if("Colors") type = pick(list(/obj/item/bedsheet, /obj/item/bedsheet/blue/double, /obj/item/bedsheet/green/double, /obj/item/bedsheet/grey/double, /obj/item/bedsheet/orange/double, /obj/item/bedsheet/purple/double, /obj/item/bedsheet/red/double, /obj/item/bedsheet/yellow/double, /obj/item/bedsheet/brown/double, /obj/item/bedsheet/black/double)) if("Special") type = pick(list(/obj/item/bedsheet/patriot/double, /obj/item/bedsheet/rainbow/double, /obj/item/bedsheet/ian/double, /obj/item/bedsheet/cosmos/double, /obj/item/bedsheet/nanotrasen/double)) new type(loc) return INITIALIZE_HINT_QDEL /obj/structure/bedsheetbin name = "linen bin" desc = "It looks rather cosy." icon = 'icons/obj/structures.dmi' icon_state = "linenbin-full" anchored = TRUE resistance_flags = FLAMMABLE max_integrity = 70 var/amount = 10 var/list/sheets = list() var/obj/item/hidden = null /obj/structure/bedsheetbin/empty amount = 0 icon_state = "linenbin-empty" anchored = FALSE /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_state() switch(amount) if(0) icon_state = "linenbin-empty" if(1 to 5) icon_state = "linenbin-half" else icon_state = "linenbin-full" return ..() /obj/structure/bedsheetbin/fire_act(exposed_temperature, exposed_volume) if(amount) amount = 0 update_appearance() ..() /obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/bedsheet)) if(!user.transferItemToLoc(I, src)) return sheets.Add(I) amount++ to_chat(user, span_notice("You put [I] in [src].")) update_appearance() else if(default_unfasten_wrench(user, I, 5)) return else if(I.tool_behaviour == TOOL_SCREWDRIVER) if(flags_1 & NODECONSTRUCT_1) return if(amount) to_chat(user, "The [src] must be empty first!") return if(I.use_tool(src, user, 5, volume=50)) to_chat(user, "You disassemble the [src].") new /obj/item/stack/rods(loc, 2) qdel(src) else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. if(!user.transferItemToLoc(I, src)) to_chat(user, span_warning("\The [I] is stuck to your hand, you cannot hide it among the sheets!")) return hidden = I to_chat(user, span_notice("You hide [I] among the sheets.")) /obj/structure/bedsheetbin/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) /obj/structure/bedsheetbin/attack_hand(mob/user, list/modifiers) . = ..() if(.) return if(isliving(user)) var/mob/living/L = user if(!(L.mobility_flags & MOBILITY_PICKUP)) return 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(drop_location()) user.put_in_hands(B) to_chat(user, span_notice("You take [B] out of [src].")) update_appearance() if(hidden) hidden.forceMove(drop_location()) to_chat(user, span_notice("[hidden] falls out of [B]!")) hidden = null add_fingerprint(user) /obj/structure/bedsheetbin/attack_tk(mob/user) 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(drop_location()) to_chat(user, span_notice("You telekinetically remove [B] from [src].")) update_appearance() if(hidden) hidden.forceMove(drop_location()) hidden = null add_fingerprint(user) return COMPONENT_CANCEL_ATTACK_CHAIN #undef BEDSHEET_ABSTRACT #undef BEDSHEET_SINGLE #undef BEDSHEET_DOUBLE