Files
Bubberstation/code/game/objects/structures/bedsheet_bin.dm
SkyratBot aba978827c [MIRROR] Post-Revolutionary Fervor station trait, revolutionary bedsheets, and a megaphone [MDB IGNORE] (#19834)
* Post-Revolutionary Fervor station trait, revolutionary bedsheets, and a megaphone (#73799)

## About The Pull Request

Upon revolution success, the chosen headrev will now also receive a
megaphone, and a "revolutionary bedsheet" repurposed from a stolen CC
bedsheet to commemorate their success. The post-revs confusion and lack
of command/security usually leads to an instantaneous, total breakdown
in cohesion. It's every man for himself -- that's no way to run a
commune! Just because the revolution has succeeded and nobody can see
your big blue "R" anymore doesn't mean you can't be a leader!

![image](https://user-images.githubusercontent.com/28870487/222981576-e62e457b-1b2d-4756-8c87-7a9093c92c2d.png)

This also adds a new revolution-themed negative station trait --
Post-Revolutionary Fervor. When present, this trait trashes the command
areas at the start of the round. This means cracked windows, broken
consoles, vendors getting knocked over, and the occasional dead
greytider.

![image](https://user-images.githubusercontent.com/28870487/222981095-14ce9336-2320-406e-b0a6-dc91cb8f9479.png)

If you start cleaning at the start of the round, you might finish right
as the next batch of revs decides to crop up.
## Why It's Good For The Game

Giving one of the headrevs a bigger voice and a cool cape (or uncool,
depending on how you view the sprite) means that there's a chance for
them to step up and try to keep the wheels on. Just remember -- Nobody
is obligated to actually listen to this person, it's just a bedsheet.

Adds a neato station trait, which probably counts as command gameplay
content.

## Changelog
🆑 Rhials
add: The headrev who receives the revolutionary banner after a win will
also receive a commemorative bedsheet and megaphone.
add: Post-Revolutionary Fervor station trait. I hope you enjoy fixing
broken computer screens.
spriteadd: A revolutionary bedsheet.
/🆑

* Post-Revolutionary Fervor station trait, revolutionary bedsheets, and a megaphone

---------

Co-authored-by: Rhials <Datguy33456@gmail.com>
2023-03-14 02:59:53 +00:00

737 lines
23 KiB
Plaintext

/*
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/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
var/list/dream_messages = list("white")
var/stack_amount = 3
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, 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 telekenetic 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
SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
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_PARENT_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_PARENT_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_PARENT_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/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/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 = turn(dir, 180)
/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/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
item_flags = 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
item_flags = ABSTRACT
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))
var/obj/item/bedsheet = new type(loc)
bedsheet.dir = dir
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/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/cosmos/double
icon_state = "double_sheetcosmos"
worn_icon_state = "sheetcosmos"
bedsheet_type = BEDSHEET_DOUBLE
/obj/item/bedsheet/dorms_double
icon_state = "random_bedsheet"
item_flags = ABSTRACT
bedsheet_type = BEDSHEET_ABSTRACT
/obj/item/bedsheet/dorms_double/Initialize(mapload)
..()
var/type = pick_weight(list("Colors" = 80, "Special" = 20))
switch(type)
if("Colors")
type = pick(list(
/obj/item/bedsheet/double,
/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,
))
var/obj/item/bedsheet = new type(loc)
bedsheet.dir = dir
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/screwdriver_act(mob/living/user, obj/item/tool)
if(flags_1 & NODECONSTRUCT_1)
return FALSE
if(amount)
to_chat(user, span_warning("The [src] must be empty first!"))
return TOOL_ACT_TOOLTYPE_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 TOOL_ACT_TOOLTYPE_SUCCESS
/obj/structure/bedsheetbin/wrench_act(mob/living/user, obj/item/tool)
. = ..()
default_unfasten_wrench(user, tool, time = 0.5 SECONDS)
return TOOL_ACT_TOOLTYPE_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
#undef BEDSHEET_ABSTRACT
#undef BEDSHEET_SINGLE
#undef BEDSHEET_DOUBLE