Files
Bubberstation/code/game/objects/structures/bedsheet_bin.dm
jjpark-kb 3b134f2e85 Missingmirrors (#26743)
* [NO GBP] Extremely tiny stupid nitpick changes to the smoking room ruin (#81767)

## About The Pull Request

Ok so this just does some really really tiny changes to the smoking room
of the smoking room ruin. I added this way back during march mapness and
have always wanted to touch up this last area.

These are basically just touch-ups that are two years too late because
they felt so insignificant and small that making an entire PR to change
them felt excessive. I still feel that way but I'm also a perfectionist
and this would linger in my head until the day I die.

Anyways, there should be slightly less awkwardly placed spawners, decals
blocked from view. You also have to walk past the smoky remains to reach
the second special lighter, instead of the first.

That's it, that's everything. You don't even get screenshots here.
Sorry.
## Why It's Good For The Game

I have an obsession with revisiting and completing old, unfinished work.
## Changelog
🆑 Rhials
fix: Some tiny tiny changes to the smoking room ruin to make it a little
less ugly.
/🆑

* Tram tile/bench fixes (#81798)

## About The Pull Request

- Tram benches can be rebuilt after deconstruction
- Tram tiles build the correct amount inhand
- Tram tiles available in the engineering protolathe with other items
- Tram tiles create the right stack type when pulled up
- Tram tiles have inhand/obj icons for both types

## Changelog

🆑 LT3
fix: Tram floor tiles constructed inhand provides 4 instead of 1
fix: Tram floor tiles provide correct stack item when pulled up
image: Tram floor tiles have their own inhand icons
qol: Tram floor tiles available in the engineering protolathe
fix: You can reconstruct deconstructed tram benches
/🆑

* Tram icon cleanup (#81797)

## About The Pull Request

- Deletes an unused tram_wall.dmi
- Renames tram frame to tram girder
- Tram girder looks like girder, not lattice


![image](https://github.com/tgstation/tgstation/assets/83487515/328c2455-def0-41a1-be9a-87a3ec0dcee7)

## Why It's Good For The Game

More straightforward for players. Since it acts like a girder, it should
look like a girder not a lattice.

## Changelog

🆑 LT3
image: Tram frame is now tram girder, because it acts like one
/🆑

* Autotucking On Map Load (#81782)

## About The Pull Request

Doesn't really do much currently but without it wallening beds look
fuckin DUMB
Plus I think this better matches what is intended

## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/58055496/d5e4c372-3e84-435a-88b9-b5be442049b2)

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>

* Makes Ethereal Charging Loop Just About Everywhere (#81775)

## About The Pull Request
Basically,


For APCs.

![dreamseeker_bfZeNmkOPh](https://github.com/tgstation/tgstation/assets/12636964/39eddc7b-7389-4586-a392-4a8d2437e93b)


For recharging APCs.

![dreamseeker_mlKuDR2JJW](https://github.com/tgstation/tgstation/assets/12636964/1f28850c-57a7-43b2-9663-81b2f3b34ce9)


For recharging from cells. The Ethereal offscreen was blue, you'll just
have to trust me that this was a color-coded PR.

![dreamseeker_bcP0126NlF](https://github.com/tgstation/tgstation/assets/12636964/c20eff96-3112-4b9b-a733-c320528adb5e)

## Why It's Good For The Game
It's kind of CBT as-is right now to have to click this stuff over and
over, especially when light tubes have it that much more convenient than
everything else. I figure some while loops would make the situation
better for them.

## Changelog
🆑
qol: Ethereal charging now loops when they're charging (from) APCs or
from power cells!
/🆑

* Lots of description changes and grammar fixes for heretics (#81761)

## About The Pull Request

Changes a lot of text. Apart from grammar fixes, here are the notable
changes:

- Ash jaunt description just said it is a "short range jaunt" without
explaining what exactly a jaunt is. I believe it is better to describe
without comparing to another spell the player may not have experience
with.
- Cosmic grasp now explains what the deal is with star marks and cosmic
fields. It is still possible to crosspath into a star mark spell,
skipping this description, but I assume a player like that is
experienced enough to know what the star mark does anyway...
- The knowledge for ash spirits no longer refers to them as "Ash Men" -
"Ash Spirit" is the mob's actual name. If you think "Ash Man" is a
better name, I can change it around so that the mob gets renamed that
instead.
- Removes the lines from paradoxical curio's description about causing
brain damage on examination - many heretic items cause adverse effects
to heathens who try to interact with them, and there is never a need to
clutter the description with them.
- Changes the eldritch coin description, because the old one was, in my
opinion, awkward. I changed it to be more inline with the other items'
descriptions, and to not tell non-heretics what its purpose is. If you
liked the old one better, I can revert this change.
## Why It's Good For The Game

Grammar good. Accurate descriptions good.
## Changelog
🆑
fix: made some heretic descriptions more accurate
spellcheck: improved english of the heretical eldritch patrons
/🆑

* Makes Medbay surgery on Metastation a bit more inline with other maps (#81786)

## About The Pull Request

Makes it so paramedics can't access the surgery theater in Metastation

## Why It's Good For The Game
Paramedics can't access surgery on the other maps, and can't use the
front door to the surgery theater, They shouldn't have access to it
through maints

## Changelog
🆑

fix: Makes Metastation surgery access more consistent with other maps

/🆑

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Nerevar <12636964+Nerev4r@users.noreply.github.com>
Co-authored-by: ViktorKoL <44502667+ViktorKoL@users.noreply.github.com>
Co-authored-by: starrm4nn <139372157+starrm4nn@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
2024-03-13 04:07:27 +01:00

702 lines
22 KiB
Plaintext

/*
CONTAINS:
BEDSHEETS
LINEN BINS
*/
/obj/item/bedsheet
name = "bedsheet"
desc = "A surprisingly soft linen bedsheet."
icon = 'icons/obj/bedsheets.dmi'
lefthand_file = 'icons/mob/inhands/items/bedsheet_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items/bedsheet_righthand.dmi'
icon_state = "sheetwhite"
inhand_icon_state = "sheetwhite"
slot_flags = ITEM_SLOT_NECK
layer = BELOW_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
/// Custom nouns to act as the subject of dreams
var/list/dream_messages = list("white")
/// Cutting it up will yield this.
var/stack_type = /obj/item/stack/sheet/cloth
/// The number of sheets dropped by this bedsheet when cut
var/stack_amount = 3
/// Denotes if the bedsheet is a single, double, or other kind of bedsheet
var/bedsheet_type = BEDSHEET_SINGLE
var/datum/weakref/signal_sleeper //this is our goldylocks
/obj/item/bedsheet/Initialize(mapload)
. = ..()
AddComponent(/datum/component/surgery_initiator)
AddElement(/datum/element/bed_tuckable, mapload, 0, 0, 0)
if(bedsheet_type == BEDSHEET_DOUBLE)
stack_amount *= 2
dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET
register_context()
register_item_context()
/obj/item/bedsheet/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
if(istype(held_item) && (held_item.tool_behaviour == TOOL_WIRECUTTER || held_item.get_sharpness()))
context[SCREENTIP_CONTEXT_LMB] = "Shred into cloth"
context[SCREENTIP_CONTEXT_ALT_LMB] = "Rotate"
return CONTEXTUAL_SCREENTIP_SET
/obj/item/bedsheet/add_item_context(datum/source, list/context, mob/living/target)
if(isliving(target) && target.body_position == LYING_DOWN)
context[SCREENTIP_CONTEXT_RMB] = "Cover"
return CONTEXTUAL_SCREENTIP_SET
return NONE
/obj/item/bedsheet/attack_secondary(mob/living/target, mob/living/user, params)
if(!user.CanReach(target))
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
if(target.body_position != LYING_DOWN)
return ..()
if(!user.dropItemToGround(src))
return ..()
forceMove(get_turf(target))
balloon_alert(user, "covered")
coverup(target)
add_fingerprint(user)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
/obj/item/bedsheet/attack_self(mob/living/user)
if(!user.CanReach(src)) //No telekinetic grabbing.
return
if(user.body_position != LYING_DOWN)
return
if(!user.dropItemToGround(src))
return
coverup(user)
add_fingerprint(user)
/obj/item/bedsheet/proc/coverup(mob/living/sleeper)
layer = ABOVE_MOB_LAYER
pixel_x = 0
pixel_y = 0
balloon_alert(sleeper, "covered")
var/angle = sleeper.lying_prev
dir = angle2dir(angle + 180) // 180 flips it to be the same direction as the mob
signal_sleeper = WEAKREF(sleeper)
RegisterSignal(src, COMSIG_ITEM_PICKUP, PROC_REF(on_pickup))
RegisterSignal(sleeper, COMSIG_MOVABLE_MOVED, PROC_REF(smooth_sheets))
RegisterSignal(sleeper, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(smooth_sheets))
RegisterSignal(sleeper, COMSIG_QDELETING, PROC_REF(smooth_sheets))
/obj/item/bedsheet/proc/smooth_sheets(mob/living/sleeper)
SIGNAL_HANDLER
UnregisterSignal(src, COMSIG_ITEM_PICKUP)
UnregisterSignal(sleeper, COMSIG_MOVABLE_MOVED)
UnregisterSignal(sleeper, COMSIG_LIVING_SET_BODY_POSITION)
UnregisterSignal(sleeper, COMSIG_QDELETING)
balloon_alert(sleeper, "smoothed sheets")
layer = initial(layer)
SET_PLANE_IMPLICIT(src, initial(plane))
signal_sleeper = null
// We need to do this in case someone picks up a bedsheet while a mob is covered up
// otherwise the bedsheet will disappear while in our hands if the sleeper signals get activated by moving
/obj/item/bedsheet/proc/on_pickup(datum/source, mob/grabber)
SIGNAL_HANDLER
var/mob/living/sleeper = signal_sleeper?.resolve()
UnregisterSignal(src, COMSIG_ITEM_PICKUP)
UnregisterSignal(sleeper, COMSIG_MOVABLE_MOVED)
UnregisterSignal(sleeper, COMSIG_LIVING_SET_BODY_POSITION)
UnregisterSignal(sleeper, COMSIG_QDELETING)
signal_sleeper = null
/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/shreds = new stack_type(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/AltClick(mob/living/user)
// double check the canUseTopic args to make sure it's correct
if(!istype(user) || !user.can_perform_action(src, NEED_DEXTERITY))
return
dir = REVERSE_DIR(dir)
/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("authority", "a silvery 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/rev
name = "revolutionary's bedsheet"
desc = "A bedsheet stolen from a Central Command official's bedroom, used a symbol of triumph against Nanotrasen's tyranny. The golden emblem on the front has been scribbled out."
icon_state = "sheetrev"
inhand_icon_state = "sheetrev"
dream_messages = list(
"the people",
"liberation",
"collaboration",
"heads rolling",
"so, so many baseball bats",
"blinding light",
"your brothers in arms"
)
/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/runtime
icon_state = "sheetruntime"
inhand_icon_state = "sheetruntime"
dream_messages = list("a kitty", "a cat", "meow", "purr", "nya~")
/obj/item/bedsheet/pirate
name = "pirate's bedsheet"
desc = "It has a Jolly Roger emblem on it and has a faint scent of grog."
icon_state = "sheetpirate"
inhand_icon_state = "sheetpirate"
dream_messages = list(
"a buried treasure",
"an island",
"a monkey",
"a parrot",
"a swashbuckler",
"a talking skull",
"avast",
"being a pirate",
"'cause a pirate is free",
"doing whatever you want",
"gold",
"landlubbers",
"stealing",
"sailing the Seven Seas",
"yarr",
)
/obj/item/bedsheet/gondola
name = "gondola bedsheet"
desc = "A precious bedsheet made from the hide of a endangered and peculiar critter."
icon_state = "sheetgondola"
inhand_icon_state = "sheetgondola"
dream_messages = list("peace", "comfiness", "a rare critter", "a harmless creature")
stack_type = /obj/item/stack/sheet/animalhide/gondola
stack_amount = 1
///one of four icon states that represent its mouth
var/gondola_mouth
///one of four icon states that represent its eyes
var/gondola_eyes
/obj/item/bedsheet/gondola/Initialize(mapload)
. = ..()
gondola_mouth = "sheetgondola_mouth[rand(1, 4)]"
gondola_eyes = "sheetgondola_eyes[rand(1, 4)]"
add_overlay(gondola_mouth)
add_overlay(gondola_eyes)
/obj/item/bedsheet/gondola/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
. = ..()
if(!isinhands)
. += mutable_appearance(icon_file, gondola_mouth)
. += mutable_appearance(icon_file, gondola_eyes)
/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/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/rev/double
icon_state = "double_sheetrev"
worn_icon_state = "sheetrev"
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/runtime/double
icon_state = "double_sheetruntime"
worn_icon_state = "sheetruntime"
bedsheet_type = BEDSHEET_DOUBLE
/obj/item/bedsheet/cosmos/double
icon_state = "double_sheetcosmos"
worn_icon_state = "sheetcosmos"
bedsheet_type = BEDSHEET_DOUBLE
/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
/// The number of bedsheets in the bin
var/amount = 10
/// A list of actual sheets within the bin
var/list/sheets = list()
/// The object hiddin within the bedsheet bin
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/screwdriver_act(mob/living/user, obj/item/tool)
if(obj_flags & NO_DECONSTRUCTION)
return FALSE
if(amount)
to_chat(user, span_warning("The [src] must be empty first!"))
return ITEM_INTERACT_SUCCESS
if(tool.use_tool(src, user, 0.5 SECONDS, volume=50))
to_chat(user, span_notice("You disassemble the [src]."))
new /obj/item/stack/rods(loc, 2)
qdel(src)
return ITEM_INTERACT_SUCCESS
/obj/structure/bedsheetbin/wrench_act(mob/living/user, obj/item/tool)
. = ..()
default_unfasten_wrench(user, tool, time = 0.5 SECONDS)
return ITEM_INTERACT_SUCCESS
/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(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