mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-08-23 05:56:34 +01:00
Initial Commit
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
/obj/storage/cart
|
||||
name = "supply cart"
|
||||
desc = "A big rolling supply cart."
|
||||
is_short = 1
|
||||
icon_state = "cart"
|
||||
icon_closed = "cart"
|
||||
icon_opened = "cartopen"
|
||||
icon_welded = "welded-crate"
|
||||
soundproofing = 5
|
||||
throwforce = 50
|
||||
health = 4
|
||||
can_flip_bust = 1
|
||||
|
||||
/obj/storage/cart/mechcart
|
||||
name = "mechanics cart"
|
||||
desc = "A big rolling supply cart for station mechanics."
|
||||
icon_state = "mechcart"
|
||||
icon_closed = "mechcart"
|
||||
icon_opened = "mechcartopen"
|
||||
|
||||
/obj/storage/cart/medcart
|
||||
name = "medical cart"
|
||||
desc = "A big rolling supply cart for station medics."
|
||||
icon_state = "medcart"
|
||||
icon_closed = "medcart"
|
||||
icon_opened = "medcartopen"
|
||||
|
||||
/obj/storage/cart/forensic
|
||||
name = "forensics cart"
|
||||
desc = "A big rolling supply cart for crimescene forensics work."
|
||||
icon_state = "forensiccart"
|
||||
icon_closed = "forensiccart"
|
||||
icon_opened = "forensiccartopen"
|
||||
|
||||
/obj/storage/cart/trash
|
||||
name = "trash cart"
|
||||
desc = "Well at least you're in space, right?"
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "trashcart"
|
||||
icon_closed = "trashcart"
|
||||
icon_opened = "trashcartopen"
|
||||
|
||||
/obj/storage/cart/trash/syndicate
|
||||
crunches_contents = 1
|
||||
|
||||
/obj/storage/cart/hotdog
|
||||
name = "hotdog stand"
|
||||
desc = "This will probably never be used to sell hotdogs."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "hotdogstand"
|
||||
icon_closed = "hotdogstand"
|
||||
icon_opened = "hotdogstandopen"
|
||||
|
||||
/obj/storage/cart/hotdog/syndicate
|
||||
crunches_contents = 1
|
||||
crunches_deliciously = 1
|
||||
@@ -0,0 +1,226 @@
|
||||
/obj/storage/closet
|
||||
name = "closet"
|
||||
desc = "It's a closet! This one can be opened AND closed."
|
||||
soundproofing = 3
|
||||
can_flip_bust = 1
|
||||
|
||||
/obj/storage/closet/emergency
|
||||
name = "emergency supplies closet"
|
||||
desc = "It's a closet! This one can be opened AND closed. Comes prestocked with emergency equipment. <i>Hopefully</i>."
|
||||
icon_state = "emergency"
|
||||
icon_closed = "emergency"
|
||||
icon_opened = "emergency-open"
|
||||
|
||||
make_my_stuff() // cogwerks: adjusted probabilities a bit
|
||||
..()
|
||||
if (prob(40))
|
||||
new /obj/item/storage/toolbox/emergency(src)
|
||||
if (prob(33))
|
||||
new /obj/item/clothing/suit/space/emerg(src)
|
||||
new /obj/item/clothing/head/emerg(src)
|
||||
if (prob(10))
|
||||
new /obj/item/storage/firstaid/oxygen(src)
|
||||
if (prob(10))
|
||||
new /obj/item/tank/air(src)
|
||||
if (prob(2))
|
||||
new /obj/item/tank/oxygen(src)
|
||||
if (prob(2))
|
||||
new /obj/item/clothing/mask/gas/emergency(src)
|
||||
for (var/i=rand(2,3), i>0, i--)
|
||||
if (prob(33))
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
if (prob(40))
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
/* switch (pickweight(list("small" = 10, "mask" = 10, "tank" = 5, "both" = 20, "nothing" = 1)))
|
||||
if ("small")
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
if ("mask")
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
if ("tank")
|
||||
new /obj/item/tank/air(src)
|
||||
if ("both")
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
if ("nothing")
|
||||
return
|
||||
*/
|
||||
/obj/storage/closet/fire
|
||||
name = "firefighting supplies closet"
|
||||
desc = "It's a closet! This one can be opened AND closed. Comes prestocked with firefighting equipment. <i>Hopefully</i>."
|
||||
icon_state = "fire"
|
||||
icon_closed = "fire"
|
||||
icon_opened = "fire-open"
|
||||
|
||||
make_my_stuff()
|
||||
..()
|
||||
if (prob(80))
|
||||
new /obj/item/extinguisher(src)
|
||||
if (prob(30))
|
||||
new /obj/item/clothing/suit/fire(src)
|
||||
new /obj/item/clothing/mask/gas/emergency(src)
|
||||
if (prob(10))
|
||||
new /obj/item/storage/firstaid/fire(src)
|
||||
if (prob(5))
|
||||
new /obj/item/storage/toolbox/emergency(src)
|
||||
|
||||
/obj/storage/closet/janitor
|
||||
name = "custodial supplies closet"
|
||||
desc = "It's a closet! This one can be opened AND closed. Comes with janitor's clothes and biohazard gear."
|
||||
spawn_contents = list(/obj/item/clothing/suit/bio_suit,\
|
||||
/obj/item/clothing/head/bio_hood,\
|
||||
/obj/item/clothing/under/rank/janitor = 2,\
|
||||
/obj/item/clothing/shoes/black = 2,\
|
||||
/obj/item/device/flashlight,\
|
||||
/obj/item/clothing/shoes/galoshes,\
|
||||
/obj/item/caution = 6)
|
||||
|
||||
/obj/storage/closet/law
|
||||
name = "\improper Legal closet"
|
||||
desc = "It's a closet! This one can be opened AND closed. Comes with lawyer apparel and items."
|
||||
spawn_contents = list(/obj/item/clothing/under/misc/lawyer/black,\
|
||||
/obj/item/clothing/under/misc/lawyer/red,\
|
||||
/obj/item/clothing/under/misc/lawyer,\
|
||||
/obj/item/clothing/shoes/brown = 2,\
|
||||
/obj/item/clothing/shoes/black,\
|
||||
/obj/item/storage/briefcase = 2)
|
||||
|
||||
/obj/storage/closet/coffin
|
||||
name = "coffin"
|
||||
desc = "A burial receptacle for the dearly departed."
|
||||
icon_state = "coffin"
|
||||
icon_closed = "coffin"
|
||||
icon_opened = "coffin-open"
|
||||
|
||||
/obj/storage/closet/biohazard
|
||||
name = "\improper Level 3 Biohazard Suit closet"
|
||||
desc = "It's a closet! This one can be opened AND closed. Comes prestocked with level 3 biohazard gear for emergencies."
|
||||
icon_state = "bio"
|
||||
icon_closed = "bio"
|
||||
icon_opened = "bio-open"
|
||||
spawn_contents = list(/obj/item/clothing/suit/bio_suit,\
|
||||
/obj/item/clothing/under/color/white,\
|
||||
/obj/item/clothing/shoes/white,\
|
||||
/obj/item/clothing/head/bio_hood)
|
||||
|
||||
/obj/storage/closet/syndicate
|
||||
name = "gear closet"
|
||||
desc = "Why is this here?"
|
||||
icon_state = "syndicate"
|
||||
icon_closed = "syndicate"
|
||||
icon_opened = "syndicate-open"
|
||||
|
||||
/obj/storage/closet/syndicate/personal
|
||||
desc = "Gear preperations closet."
|
||||
spawn_contents = list(/obj/item/tank/jetpack,\
|
||||
/obj/item/clothing/mask/breath,\
|
||||
/obj/item/clothing/under/misc/syndicate,\
|
||||
#ifdef XMAS
|
||||
/obj/item/clothing/head/helmet/space/santahat,\
|
||||
/obj/item/clothing/suit/space/santa,\
|
||||
#else
|
||||
/obj/item/clothing/head/helmet/space/syndicate,\
|
||||
/obj/item/clothing/suit/space/syndicate,\
|
||||
#endif
|
||||
/obj/item/crowbar,\
|
||||
/obj/item/cell/supercell/charged,\
|
||||
/obj/item/device/multitool)
|
||||
|
||||
/obj/storage/closet/syndicate/nuclear
|
||||
desc = "Nuclear preperations closet."
|
||||
spawn_contents = list(/obj/item/storage/box/handcuff_kit,\
|
||||
/obj/item/storage/box/flashbang_kit,\
|
||||
/obj/item/pinpointer/nuke = 5,\
|
||||
/obj/item/device/pda2/syndicate)
|
||||
|
||||
/obj/storage/closet/syndicate/malf
|
||||
desc = "Gear preperations closet."
|
||||
spawn_contents = list(/obj/item/tank/jetpack,\
|
||||
/obj/item/clothing/mask/breath,\
|
||||
/obj/item/clothing/head/helmet/space/syndicate,\
|
||||
/obj/item/clothing/suit/space/syndicate,\
|
||||
/obj/item/crowbar,\
|
||||
/obj/item/cell,\
|
||||
/obj/item/device/multitool)
|
||||
|
||||
/obj/storage/closet/thunderdome
|
||||
name = "\improper Thunderdome closet"
|
||||
desc = "Everything you need!"
|
||||
anchored = 1
|
||||
|
||||
/* let us never forget this - haine
|
||||
/obj/closet/thunderdome/New()
|
||||
..()
|
||||
sleep(2)*/
|
||||
|
||||
/obj/storage/closet/thunderdome/red
|
||||
icon_state = "syndicate"
|
||||
icon_closed = "syndicate"
|
||||
icon_opened = "syndicate-open"
|
||||
spawn_contents = list(/obj/item/clothing/under/jersey/red,\
|
||||
/obj/item/clothing/under/jersey/red,\
|
||||
/obj/item/clothing/shoes/black = 2,\
|
||||
/obj/item/knife_butcher/predspear = 2,\
|
||||
/obj/item/gun/energy/laser_gun/pred = 2,\
|
||||
/obj/item/stimpack = 2,\
|
||||
/obj/item/storage/belt/wrestling = 2)
|
||||
|
||||
/obj/storage/closet/thunderdome/green
|
||||
icon_state = "syndicate1"
|
||||
icon_closed = "syndicate1"
|
||||
icon_opened = "syndicate1-open"
|
||||
spawn_contents = list(/obj/item/clothing/under/jersey/green,\
|
||||
/obj/item/clothing/under/jersey/green,\
|
||||
/obj/item/clothing/shoes/black = 2,\
|
||||
/obj/item/knife_butcher/predspear = 2,\
|
||||
/obj/item/gun/energy/laser_gun/pred = 2,\
|
||||
/obj/item/stimpack = 2,\
|
||||
/obj/item/storage/belt/wrestling = 2)
|
||||
|
||||
/obj/storage/closet/electrical_supply
|
||||
name = "electrical supplies closet"
|
||||
desc = "Everything you would ever need to repair electrical systems. Well, almost."
|
||||
spawn_contents = list(/obj/item/storage/toolbox/electrical = 3,\
|
||||
/obj/item/device/multitool = 3)
|
||||
|
||||
/obj/storage/closet/welding_supply
|
||||
name = "welding supplies closet"
|
||||
desc = "A handy closet full of everything an aspiring apprentice welder could ever need."
|
||||
spawn_contents = list(/obj/item/clothing/head/helmet/welding = 3,\
|
||||
/obj/item/weldingtool = 3)
|
||||
|
||||
/obj/storage/closet/office
|
||||
name = "office supply closet"
|
||||
desc = "Various supplies for the modern office."
|
||||
make_my_stuff()
|
||||
..()
|
||||
var/obj/item/paper_bin/B1 = new /obj/item/paper_bin(src)
|
||||
B1.pixel_y = 6
|
||||
B1.pixel_x = -5
|
||||
|
||||
var/obj/item/paper_bin/B2 = new /obj/item/paper_bin(src)
|
||||
B2.pixel_y = 6
|
||||
B2.pixel_x = 5
|
||||
|
||||
new /obj/item/postit_stack(src)
|
||||
|
||||
var/obj/item/pen/B3 = new /obj/item/pen(src)
|
||||
B3.pixel_y = 0
|
||||
B3.pixel_x = -4
|
||||
|
||||
var/obj/item/storage/box/marker/B4 = new /obj/item/storage/box/marker(src)
|
||||
B4.pixel_y = 0
|
||||
B4.pixel_x = 0
|
||||
|
||||
var/obj/item/storage/box/crayon/B5 = new /obj/item/storage/box/crayon(src)
|
||||
B5.pixel_y = 0
|
||||
B5.pixel_x = 4
|
||||
|
||||
var/obj/item/staple_gun/B6 = new /obj/item/staple_gun(src)
|
||||
B6.pixel_y = -5
|
||||
B6.pixel_x = -4
|
||||
|
||||
var/obj/item/scissors/B7 = new /obj/item/scissors(src)
|
||||
B7.pixel_y = -5
|
||||
B7.pixel_x = 4
|
||||
@@ -0,0 +1,187 @@
|
||||
/obj/storage/crate
|
||||
name = "crate"
|
||||
desc = "A small, cuboid object with a hinged top and empty interior."
|
||||
is_short = 1
|
||||
icon_state = "crate"
|
||||
icon_closed = "crate"
|
||||
icon_opened = "crateopen"
|
||||
icon_welded = "welded-crate"
|
||||
soundproofing = 3
|
||||
throwforce = 50 //ouch
|
||||
can_flip_bust = 1
|
||||
|
||||
/obj/storage/crate/internals
|
||||
name = "internals crate"
|
||||
desc = "An internals crate."
|
||||
icon_state = "o2crate"
|
||||
icon_opened = "o2crateopen"
|
||||
icon_closed = "o2crate"
|
||||
|
||||
/obj/storage/crate/medical
|
||||
name = "medical crate"
|
||||
desc = "A medical crate."
|
||||
icon_state = "medicalcrate"
|
||||
icon_opened = "medicalcrateopen"
|
||||
icon_closed = "medicalcrate"
|
||||
|
||||
/obj/storage/crate/rcd
|
||||
name = "\improper RCD crate"
|
||||
desc = "A crate for the storage of the RCD."
|
||||
spawn_contents = list(/obj/item/rcd_ammo = 5,
|
||||
/obj/item/rcd)
|
||||
|
||||
/obj/storage/crate/abcumarker
|
||||
name = "\improper ABCU-Marker crate"
|
||||
desc = "A crate for ABCU marker devices."
|
||||
spawn_contents = list(/obj/item/blueprint_marker = 5)
|
||||
|
||||
/obj/storage/crate/freezer
|
||||
name = "freezer"
|
||||
desc = "A freezer."
|
||||
icon_state = "freezer"
|
||||
icon_opened = "freezeropen"
|
||||
icon_closed = "freezer"
|
||||
|
||||
/obj/storage/crate/biohazard
|
||||
name = "biohazard crate"
|
||||
desc = "A crate for biohazardous materials."
|
||||
icon_state = "biohazardcrate"
|
||||
icon_opened = "biohazardcrateopen"
|
||||
icon_closed = "biohazardcrate"
|
||||
|
||||
cdc
|
||||
name = "CDC pathogen sample crate"
|
||||
desc = "A crate for sending pathogen or blood samples to the CDC for analysis."
|
||||
|
||||
/obj/storage/crate/freezer/milk
|
||||
spawn_contents = list(/obj/item/reagent_containers/food/drinks/milk = 10, \
|
||||
/obj/item/gun/russianrevolver)
|
||||
|
||||
/obj/storage/crate/bin
|
||||
name = "large bin"
|
||||
desc = "A large bin."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "largebin"
|
||||
icon_opened = "largebinopen"
|
||||
icon_closed = "largebin"
|
||||
|
||||
/obj/storage/crate/bin/lostandfound
|
||||
name = "\improper Lost and Found bin"
|
||||
desc = "Theoretically, items that are lost by a person are placed here so that the person may come and find them. This never happens."
|
||||
spawn_contents = list(/obj/item/gnomechompski)
|
||||
|
||||
/obj/storage/crate/adventure
|
||||
name = "adventure crate"
|
||||
desc = "Only distantly related to the adventure closet."
|
||||
spawn_contents = list(/obj/item/device/radio/headset/multifreq = 4,
|
||||
/obj/item/device/audio_log = 2,
|
||||
/obj/item/audio_tape = 4,
|
||||
/obj/item/camera_test = 2,
|
||||
/obj/item/device/flashlight = 2,
|
||||
/obj/item/paper/book/critter_compendium,
|
||||
/obj/item/reagent_containers/food/drinks/milk,
|
||||
/obj/item/reagent_containers/food/snacks/sandwich/pb,
|
||||
/obj/item/paper/note_from_mom)
|
||||
|
||||
/obj/storage/crate/materials
|
||||
name = "building materials crate"
|
||||
spawn_contents = list(/obj/item/sheet/steel/fullstack,
|
||||
/obj/item/sheet/glass/fullstack)
|
||||
|
||||
/obj/storage/crate/furnacefuel
|
||||
name = "furnace fuel crate"
|
||||
desc = "A crate with fuel for a furnace."
|
||||
spawn_contents = list(/obj/item/raw_material/char = 30)
|
||||
|
||||
/obj/storage/crate/robotics_supplies
|
||||
name = "robotics supplies crate"
|
||||
desc = "A crate containing supplies for Robotics."
|
||||
spawn_contents = list(/obj/item/sheet/steel/fullstack = 3,
|
||||
/obj/item/sheet/glass/fullstack,
|
||||
/obj/item/cell/supercell = 4,
|
||||
/obj/item/cable_coil = 2)
|
||||
|
||||
/obj/storage/crate/robotics_supplies_borg
|
||||
name = "robotics supplies crate"
|
||||
desc = "A crate containing supplies for Robotics and an extra set of cyborg parts."
|
||||
spawn_contents = list(/obj/item/sheet/steel/fullstack = 3,
|
||||
/obj/item/sheet/glass/fullstack,
|
||||
/obj/item/ai_interface,
|
||||
/obj/item/parts/robot_parts/robot_frame,
|
||||
/obj/item/parts/robot_parts/leg/left,
|
||||
/obj/item/parts/robot_parts/leg/right,
|
||||
/obj/item/parts/robot_parts/arm/left,
|
||||
/obj/item/parts/robot_parts/arm/right,
|
||||
/obj/item/parts/robot_parts/chest,
|
||||
/obj/item/parts/robot_parts/head,
|
||||
/obj/item/cell/supercell = 4,
|
||||
/obj/item/cable_coil = 2)
|
||||
|
||||
/obj/storage/crate/clown
|
||||
desc = "A small, cuboid object with a hinged top and empty interior. It looks a little funny."
|
||||
spawn_contents = list(/obj/item/clothing/under/misc/clown/fancy,
|
||||
/obj/item/clothing/under/misc/clown,
|
||||
/obj/item/clothing/shoes/clown_shoes,
|
||||
/obj/item/clothing/mask/clown_hat,
|
||||
/obj/item/storage/box/balloonbox)
|
||||
|
||||
/obj/storage/crate/materials
|
||||
name = "building materials crate"
|
||||
spawn_contents = list(/obj/item/sheet/steel/fullstack,
|
||||
/obj/item/sheet/glass/fullstack)
|
||||
|
||||
/*
|
||||
* SPOOKY haunted crate!
|
||||
*/
|
||||
|
||||
/obj/storage/crate/haunted
|
||||
icon = 'icons/misc/halloween.dmi'
|
||||
icon_state = "crate"
|
||||
var/triggered = 0
|
||||
|
||||
make_my_stuff()
|
||||
..()
|
||||
if(prob(60))
|
||||
new /obj/critter/spirit( src )
|
||||
|
||||
open()
|
||||
..()
|
||||
if(!triggered)
|
||||
triggered = 1
|
||||
gibs(src.loc)
|
||||
return
|
||||
|
||||
/obj/storage/crate/syndicate_surplus
|
||||
var/ready = 0
|
||||
New()
|
||||
spawn(20)
|
||||
if (!ready)
|
||||
spawn_items()
|
||||
|
||||
proc/spawn_items(var/mob/owner)
|
||||
ready = 1
|
||||
var/telecrystals = 0
|
||||
var/list/possible_items = list()
|
||||
|
||||
if (islist(syndi_buylist_cache))
|
||||
for (var/datum/syndicate_buylist/S in syndi_buylist_cache)
|
||||
var/blocked = 0
|
||||
if (ticker && ticker.mode && S.blockedmode && islist(S.blockedmode) && S.blockedmode.len)
|
||||
for (var/V in S.blockedmode)
|
||||
if (ispath(V) && istype(ticker.mode, V))
|
||||
blocked = 1
|
||||
break
|
||||
|
||||
if (blocked == 0 && !S.not_in_crates)
|
||||
possible_items += S
|
||||
|
||||
if (islist(possible_items) && possible_items.len)
|
||||
while(telecrystals < 18)
|
||||
var/datum/syndicate_buylist/item_datum = pick(possible_items)
|
||||
if(telecrystals + item_datum.cost > 24) continue
|
||||
var/obj/item/I = new item_datum.item(src)
|
||||
if (owner)
|
||||
item_datum.run_on_spawn(I, owner)
|
||||
if (owner.mind)
|
||||
owner.mind.traitor_crate_items += item_datum
|
||||
telecrystals += item_datum.cost
|
||||
@@ -0,0 +1,45 @@
|
||||
|
||||
/obj/storage/closet/syndi
|
||||
name = "floor"
|
||||
desc = "Something weird about this thing."
|
||||
icon_state = "closedf"
|
||||
icon_closed = "closedf"
|
||||
density = 0
|
||||
soundproofing = 15
|
||||
|
||||
close()
|
||||
var/turf/T = get_turf(src)
|
||||
if (T)
|
||||
src.icon = T.icon
|
||||
src.icon_closed = T.icon_state
|
||||
src.desc = T.desc + " It looks odd."
|
||||
else
|
||||
src.icon = 'icons/obj/large_storage.dmi'
|
||||
src.icon_closed = "closedf"
|
||||
..()
|
||||
return
|
||||
|
||||
open()
|
||||
if (src.welded)
|
||||
return
|
||||
src.icon = 'icons/obj/large_storage.dmi'
|
||||
..()
|
||||
return
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
return 1
|
||||
|
||||
/obj/storage/closet/syndi/hidden
|
||||
anchored = 1
|
||||
New()
|
||||
..()
|
||||
var/turf/T = get_turf(src.loc)
|
||||
if (T)
|
||||
src.icon = T.icon
|
||||
src.icon_closed = T.icon_state
|
||||
src.icon_state = icon_closed
|
||||
src.name = T.name
|
||||
else
|
||||
src.icon = 'icons/obj/closet.dmi'
|
||||
src.icon_closed = "closedf"
|
||||
|
||||
@@ -0,0 +1,763 @@
|
||||
// crates/closets/etc. this shoulda been combined a while ago, but here we are.
|
||||
|
||||
// NOTE:
|
||||
// Unlike old closets/etc, these things make their contents in the make_my_stuff() proc.
|
||||
// DO NOT OVERRIDE New() ON THESE OKAY
|
||||
// PLEASE JUST MAKE A MESS OF make_my_stuff() INSTEAD
|
||||
// CALL YOUR PARENTS
|
||||
|
||||
#define RELAYMOVE_DELAY 50
|
||||
|
||||
/obj/storage
|
||||
name = "storage"
|
||||
desc = "this is a parent item you shouldn't see!!"
|
||||
flags = FPRINT | NOSPLASH
|
||||
icon = 'icons/obj/large_storage.dmi'
|
||||
icon_state = "closed"
|
||||
density = 1
|
||||
throwforce = 10
|
||||
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
|
||||
var/secure = 0
|
||||
var/personal = 0
|
||||
var/registered = null
|
||||
var/icon_closed = "closed"
|
||||
var/icon_opened = "open"
|
||||
var/icon_welded = "welded-closet"
|
||||
var/open = 0
|
||||
var/welded = 0
|
||||
var/locked = 0
|
||||
var/emagged = 0
|
||||
var/jiggled = 0
|
||||
var/legholes = 0
|
||||
var/health = 3
|
||||
var/can_flip_bust = 0 // Can the trapped mob damage this container by flipping?
|
||||
var/obj/item/card/id/scan = null
|
||||
var/datum/data/record/account = null
|
||||
var/last_relaymove_time
|
||||
var/is_short = 0 // can you not stand in it? ie, crates?
|
||||
var/open_fail_prob = 50
|
||||
var/crunches_contents = 0 // for the syndicate trashcart & hotdog stand
|
||||
var/crunches_deliciously = 0 // :I
|
||||
//var/mob/living/carbon/to_crunch = null
|
||||
var/owner_ckey = null // owner of the crunchy cart, so they don't get crunched
|
||||
var/list/spawn_contents = list() // maybe better than just a bunch of stuff in New()?
|
||||
|
||||
New()
|
||||
..()
|
||||
spawn(1)
|
||||
src.update_icon()
|
||||
src.make_my_stuff()
|
||||
if (!src.open) // if closed, any item at src's loc is put in the contents
|
||||
for (var/obj/O in src.loc)
|
||||
if (src.is_acceptable_content(O))
|
||||
O.set_loc(src)
|
||||
|
||||
proc/make_my_stuff() // use this rather than overriding the container's New()
|
||||
if (!src.spawn_contents || !islist(src.spawn_contents) || !src.spawn_contents.len)
|
||||
return
|
||||
for (var/thing in src.spawn_contents)
|
||||
var/amt = 1
|
||||
if (!ispath(thing))
|
||||
continue
|
||||
if(isnum(spawn_contents[thing])) //Instead of duplicate entries in the list, let's make them associative
|
||||
amt = abs(spawn_contents[thing])
|
||||
do new thing(src) //Two lines! I TOLD YOU I COULD DO IT!!!
|
||||
while (--amt > 0)
|
||||
return
|
||||
|
||||
proc/update_icon()
|
||||
if (src.open)
|
||||
src.icon_state = src.icon_opened
|
||||
else if (!src.open)
|
||||
src.icon_state = src.icon_closed
|
||||
|
||||
if (src.overlays)
|
||||
src.overlays = list()
|
||||
if (src.welded)
|
||||
src.overlays += src.icon_welded
|
||||
|
||||
emp_act()
|
||||
if (!src.open && src.contents.len)
|
||||
for (var/atom/A in src.contents)
|
||||
if (ismob(A))
|
||||
var/mob/M = A
|
||||
M.emp_act()
|
||||
if (isitem(A))
|
||||
var/obj/item/I = A
|
||||
I.emp_act()
|
||||
return
|
||||
|
||||
alter_health()
|
||||
return get_turf(src)
|
||||
|
||||
relaymove(mob/user as mob)
|
||||
if (user.stunned > 0 || user.weakened > 0 || user.paralysis > 0 || user.stat != 0)
|
||||
return
|
||||
if (world.time < (src.last_relaymove_time + RELAYMOVE_DELAY))
|
||||
return
|
||||
src.last_relaymove_time = world.time
|
||||
|
||||
if (!src.open())
|
||||
if (!src.is_short && src.legholes)
|
||||
step(src, pick(alldirs))
|
||||
if (!src.jiggled)
|
||||
src.jiggled = 1
|
||||
user.show_text("You kick at [src], but it doesn't budge!", "red")
|
||||
user.unlock_medal("IT'S A TRAP", 1)
|
||||
for (var/mob/M in hearers(src, null))
|
||||
M.show_text("<font size=[max(0, 5 - get_dist(src, M))]>THUD, thud!</font>")
|
||||
playsound(get_turf(src), "sound/effects/zhit.ogg", 15, 1, -3)
|
||||
var/shakes = 5
|
||||
while (shakes > 0)
|
||||
shakes--
|
||||
src.pixel_x = rand(-5,5)
|
||||
src.pixel_y = rand(-5,5)
|
||||
sleep(1)
|
||||
src.pixel_x = 0
|
||||
src.pixel_y = 0
|
||||
spawn(5)
|
||||
src.jiggled = 0
|
||||
return
|
||||
|
||||
else if (prob(src.open_fail_prob))
|
||||
if (src.legholes)
|
||||
step(src,user.dir)
|
||||
user.show_text("You kick at [src], but it doesn't budge!", "red")
|
||||
return
|
||||
|
||||
// if all else fails:
|
||||
src.open()
|
||||
src.visible_message("<span style=\"color:red\"><b>[user]</b> kicks [src] open!</span>")
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if (get_dist(user, src) > 1)
|
||||
return
|
||||
add_fingerprint(user)
|
||||
if (src.welded)
|
||||
user.show_text("It won't open!", "red")
|
||||
return
|
||||
else if (!src.toggle())
|
||||
return src.attackby(null, user)
|
||||
|
||||
attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/cargotele))
|
||||
var/obj/item/cargotele/CT = W
|
||||
CT.cargoteleport(src, user)
|
||||
return
|
||||
|
||||
else if (istype(W, /obj/item/satchel/))
|
||||
var/amt = W:contents.len
|
||||
if (amt)
|
||||
user.visible_message("<span style=\"color:blue\">[user] dumps out [W]'s contents into [src]!</span>")
|
||||
var/amtload = 0
|
||||
for (var/obj/item/I in W.contents)
|
||||
if (open)
|
||||
I.set_loc(src.loc)
|
||||
else
|
||||
I.set_loc(src)
|
||||
amtload++
|
||||
W:satchel_updateicon()
|
||||
if (amtload)
|
||||
user.show_text("[amtload] [W:itemstring] dumped into [W]!", "blue")
|
||||
else
|
||||
user.show_text("No [W:itemstring] dumped!", "red")
|
||||
return
|
||||
|
||||
if (src.open)
|
||||
if (!src.is_short && istype(W, /obj/item/weldingtool))
|
||||
var/obj/item/weldingtool/welder = W
|
||||
if (welder.welding && !src.legholes)
|
||||
if (welder.get_fuel() < 2)
|
||||
user.show_text("Need more fuel!", "red")
|
||||
return
|
||||
welder.use_fuel(1)
|
||||
src.legholes = 1
|
||||
src.visible_message("<span style=\"color:red\">[user] adds some holes to the bottom of [src] with [welder].</span>")
|
||||
return
|
||||
else if(!issilicon(user))
|
||||
if(user.drop_item())
|
||||
if (welder)
|
||||
welder.set_loc(src.loc)
|
||||
return
|
||||
|
||||
else if (istype(W, /obj/item/wrench))
|
||||
var/obj/item/I = new /obj/item/sheet(get_turf(src))
|
||||
if (src.material)
|
||||
I.setMaterial(src.material)
|
||||
else
|
||||
var/datum/material/M = getCachedMaterial("steel")
|
||||
I.setMaterial(M)
|
||||
src.visible_message("<span style=\"color:red\">[user] takes apart [src] with [W].</span>")
|
||||
qdel(src)
|
||||
return
|
||||
else if (!issilicon(user))
|
||||
if (istype(W, /obj/item/grab))
|
||||
return src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
|
||||
if(user.drop_item())
|
||||
if(W) W.set_loc(src.loc)
|
||||
return
|
||||
|
||||
else if (!src.open && istype(W, /obj/item/weldingtool))
|
||||
var/obj/item/weldingtool/welder = W
|
||||
if (welder.welding)
|
||||
if (welder.get_fuel() < 2)
|
||||
user.show_text("Need more fuel!", "red")
|
||||
return
|
||||
if (!src.welded)
|
||||
src.weld(1, welder, user)
|
||||
src.visible_message("<span style=\"color:red\">[user] welds [src] closed with [welder].</span>")
|
||||
else
|
||||
src.weld(0, welder, user)
|
||||
src.visible_message("<span style=\"color:red\">[user] unwelds [src] with [welder].</span>")
|
||||
return
|
||||
|
||||
if (src.secure)
|
||||
if (src.emagged)
|
||||
user.show_text("It appears to be broken.", "red")
|
||||
return
|
||||
else if (src.personal && istype(W, /obj/item/card/id))
|
||||
var/obj/item/card/id/I = W
|
||||
if (src.allowed(user, req_only_one_required) || !src.registered || (istype(W, /obj/item/card/id) && src.registered == I.registered))
|
||||
//they can open all lockers, or nobody owns this, or they own this locker
|
||||
src.locked = !( src.locked )
|
||||
user.visible_message("<span style=\"color:blue\">The locker has been [src.locked ? null : "un"]locked by [user].</span>")
|
||||
src.update_icon()
|
||||
if (!src.registered)
|
||||
src.registered = I.registered
|
||||
src.name = "[I.registered]'s [src.name]"
|
||||
src.desc = "Owned by [I.registered]."
|
||||
for (var/mob/M in src.contents)
|
||||
src.log_me(user, M, src.locked ? "locks" : "unlocks")
|
||||
return
|
||||
else if (!src.personal && src.allowed(user, req_only_one_required))
|
||||
if (!src.open)
|
||||
src.locked = !src.locked
|
||||
user.visible_message("<span style=\"color:blue\">[src] has been [src.locked ? null : "un"]locked by [user].</span>")
|
||||
src.update_icon()
|
||||
for (var/mob/M in src.contents)
|
||||
src.log_me(user, M, src.locked ? "locks" : "unlocks")
|
||||
return
|
||||
else
|
||||
src.close()
|
||||
return
|
||||
|
||||
if (secure != 2)
|
||||
user.show_text("Access Denied", "red")
|
||||
user.unlock_medal("Rookie Thief", 1)
|
||||
return
|
||||
/*
|
||||
else if (issilicon(user))
|
||||
if (get_dist(src, user) <= 1)
|
||||
return src.attack_hand(user)
|
||||
*/
|
||||
else
|
||||
return ..()
|
||||
|
||||
MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
|
||||
if (!in_range(user, src) || !in_range(user, O) || user.restrained() || user.paralysis || user.sleeping || user.stat || user.lying)
|
||||
return
|
||||
|
||||
if (!src.is_acceptable_content(O))
|
||||
return
|
||||
|
||||
if (isitem(O) && (O:cant_drop || (issilicon(user) && O.loc == user))) //For borg held items
|
||||
user.show_text("You can't put that in [src] when it's attached to you!", "red")
|
||||
return
|
||||
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if (src.is_short && O == user)
|
||||
var/turf/T = get_turf(src)
|
||||
var/no_go = 0
|
||||
if (T.density)
|
||||
no_go = T
|
||||
else
|
||||
for (var/obj/thingy in T)
|
||||
if (thingy == src)
|
||||
continue
|
||||
if (istype(thingy, /obj/storage) && thingy:is_short)
|
||||
continue
|
||||
if (thingy.density)
|
||||
no_go = thingy
|
||||
break
|
||||
|
||||
if (no_go) // no more scooting around walls and doors okay
|
||||
user.visible_message("<span style=\"color:red\"><b>[user]</b> scoots around [src], right into [no_go]!</span>",\
|
||||
"<span style=\"color:red\">You scoot around [src], right into [no_go]!</span>")
|
||||
user.weakened += 4
|
||||
if (prob(25))
|
||||
user.show_text("You hit your head on [no_go]!", "red")
|
||||
user.TakeDamage("head", 0, 10)
|
||||
return
|
||||
|
||||
if (iscarbon(O))
|
||||
var/mob/living/carbon/M = user
|
||||
if (M.bioHolder && M.bioHolder.HasEffect("clumsy") && prob(40))
|
||||
user.visible_message("<span style=\"color:red\"><b>[user]</b> trips over [src]!</span>",\
|
||||
"<span style=\"color:red\">You trip over [src]!</span>")
|
||||
playsound(user.loc, 'sound/weapons/genhit2.ogg', 15, 1, -3)
|
||||
user.set_loc(src.loc)
|
||||
user.weakened += 10
|
||||
return
|
||||
else
|
||||
user.show_text("You scoot around [src].")
|
||||
user.set_loc(src.loc)
|
||||
return
|
||||
if (issilicon(O))
|
||||
user.show_text("You scoot around [src].")
|
||||
user.set_loc(src.loc)
|
||||
return
|
||||
|
||||
if (src.locked)
|
||||
user.show_text("You'll have to unlock [src] first.", "red")
|
||||
return
|
||||
|
||||
if (src.welded)
|
||||
user.show_text("[src] is welded shut!", "red")
|
||||
return
|
||||
|
||||
if (!src.open)
|
||||
src.open()
|
||||
|
||||
if (O.loc == user)
|
||||
user.u_equip(O)
|
||||
O.set_loc(get_turf(user))
|
||||
|
||||
spawn(5)
|
||||
if (istype(O, /obj/item/raw_material/))
|
||||
user.visible_message("<span style=\"color:blue\">[user] begins quickly stuffing materials into [src]!</span>",\
|
||||
"<span style=\"color:blue\">You begin quickly stuffing materials into [src]!</span>")
|
||||
var/staystill = user.loc
|
||||
for (var/obj/item/raw_material/M in view(1,user))
|
||||
if (M.material && M.material.getProperty(PROP_RADIOACTIVITY) > 0)
|
||||
user.irradiate(round(min(M.material.getProperty(PROP_RADIOACTIVITY) / 2, 20)))
|
||||
if (M.loc == src || M.loc == src.loc) // we're already there!
|
||||
continue
|
||||
M.set_loc(src.loc)
|
||||
sleep(0.5)
|
||||
if (!src.open)
|
||||
break
|
||||
if (user.loc != staystill)
|
||||
break
|
||||
for (var/obj/item/material_piece/M in view(1,user))
|
||||
if (M.material && M.material.getProperty(PROP_RADIOACTIVITY) > 0)
|
||||
user.irradiate(round(min(M.material.getProperty(PROP_RADIOACTIVITY) / 2, 20)))
|
||||
if (M.loc == src || M.loc == src.loc) // we're already there!
|
||||
continue
|
||||
M.set_loc(src.loc)
|
||||
sleep(0.5)
|
||||
if (!src.open)
|
||||
break
|
||||
if (user.loc != staystill)
|
||||
break
|
||||
user.show_text("You finish stuffing materials into [src]!", "blue")
|
||||
spawn(5)
|
||||
if (src.open)
|
||||
src.close()
|
||||
|
||||
else if (istype(O, /obj/item/plant/) || istype(O, /obj/item/reagent_containers/food/snacks/))
|
||||
user.visible_message("<span style=\"color:blue\">[user] begins quickly stuffing produce into [src]!</span>",\
|
||||
"<span style=\"color:blue\">You begin quickly stuffing produce into [src]!</span>")
|
||||
var/staystill = user.loc
|
||||
for (var/obj/item/plant/P in view(1,user))
|
||||
if (P in user)
|
||||
continue
|
||||
if (P.loc == src || P.loc == src.loc) // we're already there!
|
||||
continue
|
||||
P.set_loc(src.loc)
|
||||
sleep(0.5)
|
||||
if (!src.open)
|
||||
break
|
||||
if (user.loc != staystill)
|
||||
break
|
||||
for (var/obj/item/reagent_containers/food/snacks/F in view(1,user))
|
||||
if (F in user)
|
||||
continue
|
||||
if (F.loc == src || F.loc == src.loc) // we're already there!
|
||||
continue
|
||||
F.set_loc(src.loc)
|
||||
sleep(0.5)
|
||||
if (!src.open)
|
||||
break
|
||||
if (user.loc != staystill)
|
||||
break
|
||||
user.show_text("You finish stuffing produce into [src]!", "blue")
|
||||
spawn(5)
|
||||
if (src.open)
|
||||
src.close()
|
||||
|
||||
else
|
||||
O.set_loc(src.loc)
|
||||
if (user != O)
|
||||
user.visible_message("<span style=\"color:red\">[user] stuffs [O] into [src]!</span>",\
|
||||
"<span style=\"color:red\">You stuff [O] into [src]!</span>")
|
||||
spawn(5)
|
||||
if (src.open)
|
||||
src.close()
|
||||
return ..()
|
||||
|
||||
attack_ai(mob/user)
|
||||
if (can_reach(user, src) <= 1 && (isrobot(user) || isshell(user)))
|
||||
return src.attack_hand(user)
|
||||
|
||||
alter_health()
|
||||
return get_turf(src)
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if (air_group || (height==0))
|
||||
return 1
|
||||
if (src.is_short)
|
||||
return 0
|
||||
return open
|
||||
|
||||
ex_act(severity)
|
||||
switch (severity)
|
||||
if (1)
|
||||
for (var/atom/movable/A as mob|obj in src)
|
||||
A.set_loc(src.loc)
|
||||
A.ex_act(severity)
|
||||
qdel(src)
|
||||
if (2)
|
||||
if (prob(50))
|
||||
for (var/atom/movable/A as mob|obj in src)
|
||||
A.set_loc(src.loc)
|
||||
A.ex_act(severity)
|
||||
qdel(src)
|
||||
if (3)
|
||||
if (prob(5))
|
||||
for (var/atom/movable/A as mob|obj in src)
|
||||
A.set_loc(src.loc)
|
||||
A.ex_act(severity)
|
||||
qdel(src)
|
||||
|
||||
blob_act(var/power)
|
||||
if (prob(power * 2.5))
|
||||
dump_contents()
|
||||
qdel(src)
|
||||
|
||||
meteorhit(obj/O as obj)
|
||||
if (O && O.icon_state == "flaming")
|
||||
src.dump_contents()
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
proc/is_acceptable_content(var/atom/A)
|
||||
if (!A || !(isobj(A) || ismob(A)))
|
||||
return 0
|
||||
if (istype(A, /obj/decal/skeleton)) // uuuuuuugh
|
||||
return 1
|
||||
if (isobj(A) && ((A.density && !istype(A, /obj/critter)) || A:anchored || A == src || istype(A, /obj/decal) || istype(A, /obj/screen) || istype(A, /obj/storage)))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
proc/open()
|
||||
if (src.open)
|
||||
return 0
|
||||
if (!src.can_open())
|
||||
return 0
|
||||
src.dump_contents()
|
||||
src.open = 1
|
||||
src.update_icon()
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3)
|
||||
return 1
|
||||
|
||||
proc/close()
|
||||
if (!src.open)
|
||||
return 0
|
||||
if (!src.can_close())
|
||||
return 0
|
||||
|
||||
src.open = 0
|
||||
|
||||
for (var/obj/O in get_turf(src))
|
||||
if (src.is_acceptable_content(O))
|
||||
O.set_loc(src)
|
||||
|
||||
for (var/mob/M in get_turf(src))
|
||||
if (M.anchored || M.buckled || (src.is_short && !M.lying))
|
||||
continue
|
||||
#ifdef HALLOWEEN
|
||||
if (halloween_mode && prob(5)) //remove the prob() if you want, it's just a little broken if dudes are constantly teleporting
|
||||
var/list/obj/storage/myPals = list()
|
||||
for (var/obj/storage/O in world)
|
||||
if (O.z != src.z || O.open || !O.can_open())
|
||||
continue
|
||||
myPals.Add(O)
|
||||
|
||||
var/obj/storage/warp_dest = pick(myPals)
|
||||
M.set_loc(warp_dest)
|
||||
M.show_text("You are suddenly thrown elsewhere!", "red")
|
||||
M.playsound_local(M.loc, "warp", 50, 1)
|
||||
continue
|
||||
#endif
|
||||
if (isobserver(M) || iswraith(M) || isintangible(M) || istype(M, /mob/living/object))
|
||||
continue
|
||||
if (src.crunches_contents)
|
||||
src.crunch(M)
|
||||
M.set_loc(src)
|
||||
|
||||
src.update_icon()
|
||||
playsound(src.loc, "sound/machines/click.ogg", 15, 1, -3)
|
||||
return 1
|
||||
|
||||
proc/can_open()
|
||||
if (src.welded || src.locked)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
proc/can_close()
|
||||
for (var/obj/storage/S in get_turf(src))
|
||||
if (S != src)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
proc/dump_contents()
|
||||
var/newloc = get_turf(src)
|
||||
for (var/obj/O in src)
|
||||
O.set_loc(newloc)
|
||||
|
||||
for (var/mob/M in src)
|
||||
M.set_loc(newloc)
|
||||
|
||||
proc/toggle()
|
||||
if (src.open)
|
||||
return src.close()
|
||||
return src.open()
|
||||
|
||||
proc/bust_out()
|
||||
if (src.health)
|
||||
src.visible_message("<span style=\"color:red\">[src] [pick("cracks","bends","shakes","groans")].</span>")
|
||||
src.health--
|
||||
if (src.health <= 0)
|
||||
src.visible_message("<span style=\"color:red\">[src] breaks apart!</span>")
|
||||
src.dump_contents()
|
||||
spawn(1)
|
||||
var/newloc = get_turf(src)
|
||||
new /obj/decal/cleanable/machine_debris(newloc)
|
||||
qdel(src)
|
||||
|
||||
proc/weld(var/shut = 0, var/obj/item/weldingtool/W as obj, var/mob/weldman as mob)
|
||||
if (shut)
|
||||
W.use_fuel(1)
|
||||
W.eyecheck(weldman)
|
||||
weldman.visible_message("<span style=\"color:red\">[weldman] welds [src] shut.</span>")
|
||||
src.welded = 1
|
||||
else
|
||||
W.use_fuel(1)
|
||||
W.eyecheck(weldman)
|
||||
weldman.visible_message("<span style=\"color:red\">[weldman] unwelds [src].</span>") // walt-fuck_you.ogg
|
||||
src.welded = 0
|
||||
src.update_icon()
|
||||
for (var/mob/M in src.contents)
|
||||
src.log_me(weldman, M, src.welded ? "welds" : "unwelds")
|
||||
return
|
||||
|
||||
proc/crunch(var/mob/M as mob)
|
||||
if (!M || istype(M, /mob/living/carbon/wall))
|
||||
return
|
||||
|
||||
if (M.ckey && (M.ckey == owner_ckey))
|
||||
return
|
||||
else
|
||||
src.locked = 1
|
||||
M.show_text("Is it getting...smaller in here?", "red")
|
||||
spawn(50)
|
||||
if (!M.loc == src)
|
||||
src.locked = 0
|
||||
return
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 75, 1)
|
||||
M.show_text("<b>OH JESUS CHRIST</b>", "red")
|
||||
bleed(M, 500, 5)
|
||||
src.log_me(usr && ismob(usr) ? usr : null, M, "uses trash compactor")
|
||||
var/mob/living/carbon/wall/meatcube/W = M.make_meatcube(rand(10,15), get_turf(src))
|
||||
if (src.crunches_deliciously)
|
||||
W.name = "hotdog"
|
||||
var/obj/item/reagent_containers/food/snacks/hotdog/syndicate/snoopdog = new /obj/item/reagent_containers/food/snacks/hotdog/syndicate(src)
|
||||
snoopdog.victim = W
|
||||
|
||||
for (var/obj/item/I in M)
|
||||
if (istype(I, /obj/item/implant))
|
||||
I.set_loc(W)
|
||||
continue
|
||||
|
||||
I.set_loc(src)
|
||||
|
||||
src.locked = 0
|
||||
src.open()
|
||||
|
||||
// Added (Convair880).
|
||||
proc/log_me(var/mob/user, var/mob/occupant, var/action = "")
|
||||
if (!src || !occupant || !ismob(occupant) || !action)
|
||||
return
|
||||
|
||||
logTheThing("station", user, occupant, "[action] [src] with %target% inside at [log_loc(src)].")
|
||||
return
|
||||
|
||||
verb/toggle_verb()
|
||||
set src in oview(1)
|
||||
set name = "Open / Close"
|
||||
set desc = "Open or close the closet/crate/whatever. Woah!"
|
||||
set category = "Local"
|
||||
|
||||
if (usr.stat || !usr.can_use_hands())
|
||||
return
|
||||
|
||||
return toggle()
|
||||
|
||||
verb/move_inside()
|
||||
set src in oview(1)
|
||||
set name = "Move Inside"
|
||||
set desc = "Enter the closet/crate/whatever. Wow!"
|
||||
set category = "Local"
|
||||
|
||||
if (usr.stat || !usr.can_use_hands() || usr.loc == src)
|
||||
return
|
||||
|
||||
if (src.locked)
|
||||
return
|
||||
|
||||
if (src.open)
|
||||
step_towards(usr, src)
|
||||
sleep(10)
|
||||
if (usr.loc == src.loc)
|
||||
if (src.is_short)
|
||||
usr.lying = 1
|
||||
src.close()
|
||||
else if (src.open())
|
||||
step_towards(usr, src)
|
||||
sleep(10)
|
||||
if (usr.loc == src.loc)
|
||||
if (src.is_short)
|
||||
usr.lying = 1
|
||||
src.close()
|
||||
return
|
||||
|
||||
/obj/storage/secure
|
||||
name = "secure storage"
|
||||
icon_state = "secure"
|
||||
health = 6
|
||||
secure = 1
|
||||
locked = 1
|
||||
icon_closed = "secure"
|
||||
icon_opened = "secure-open"
|
||||
var/icon_greenlight = "greenlight"
|
||||
var/icon_redlight = "redlight"
|
||||
var/icon_sparks = "sparks"
|
||||
var/always_display_locks = 0
|
||||
var/datum/radio_frequency/radio_control = 1431
|
||||
var/net_id
|
||||
|
||||
New()
|
||||
..()
|
||||
spawn(10)
|
||||
if (isnum(src.radio_control) && radio_controller)
|
||||
radio_control = max(1000, min(round(radio_control), 1500))
|
||||
src.net_id = generate_net_id(src)
|
||||
radio_controller.add_object(src, "[src.radio_control]")
|
||||
src.radio_control = radio_controller.return_frequency("[src.radio_control]")
|
||||
|
||||
update_icon()
|
||||
..()
|
||||
if (!src.open)
|
||||
src.icon_state = src.icon_closed
|
||||
|
||||
if(!src.open || always_display_locks)
|
||||
if (src.emagged)
|
||||
src.overlays += src.icon_sparks
|
||||
else if (src.locked)
|
||||
src.overlays += src.icon_redlight
|
||||
else
|
||||
src.overlays += src.icon_greenlight
|
||||
|
||||
receive_signal(datum/signal/signal)
|
||||
if (!src.radio_control)
|
||||
return
|
||||
|
||||
var/sender = signal.data["sender"]
|
||||
if (!signal || signal.encryption || !sender)
|
||||
return
|
||||
|
||||
if (signal.data["address_1"] == src.net_id)
|
||||
switch (lowertext(signal.data["command"]))
|
||||
if ("status")
|
||||
var/datum/signal/reply = get_free_signal()
|
||||
reply.source = src
|
||||
reply.transmission_method = TRANSMISSION_RADIO
|
||||
reply.data = list("address_1" = sender, "command" = "lock=[locked]&open=[open]", "sender" = src.net_id)
|
||||
spawn (5)
|
||||
src.radio_control.post_signal(src, reply, 2)
|
||||
|
||||
if ("lock")
|
||||
. = 0
|
||||
if (signal.data["pass"] == netpass_heads)
|
||||
. = 1
|
||||
src.locked = !src.locked
|
||||
src.visible_message("[src] clicks[src.open ? "" : " locked"].")
|
||||
src.update_icon()
|
||||
|
||||
var/datum/signal/reply = get_free_signal()
|
||||
reply.source = src
|
||||
reply.transmission_method = TRANSMISSION_RADIO
|
||||
if (.)
|
||||
reply.data = list("address_1" = sender, "command" = "ack", "sender" = src.net_id)
|
||||
else
|
||||
reply.data = list("address_1" = sender, "command" = "nack", "data" = "badpass", "sender" = src.net_id)
|
||||
spawn (5)
|
||||
src.radio_control.post_signal(src, reply, 2)
|
||||
|
||||
if ("unlock")
|
||||
. = 0
|
||||
if (signal.data["pass"] == netpass_heads)
|
||||
. = 1
|
||||
src.locked = !src.locked
|
||||
src.visible_message("[src] clicks[src.open ? "" : " unlocked"].")
|
||||
src.update_icon()
|
||||
|
||||
var/datum/signal/reply = get_free_signal()
|
||||
reply.source = src
|
||||
reply.transmission_method = TRANSMISSION_RADIO
|
||||
if (.)
|
||||
reply.data = list("address_1" = sender, "command" = "ack", "sender" = src.net_id)
|
||||
else
|
||||
reply.data = list("address_1" = sender, "command" = "nack", "data" = "badpass", "sender" = src.net_id)
|
||||
|
||||
spawn(5)
|
||||
src.radio_control.post_signal(src, reply, 2)
|
||||
return //todo
|
||||
|
||||
else if (signal.data["address_1"] == "ping")
|
||||
var/datum/signal/reply = get_free_signal()
|
||||
reply.source = src
|
||||
reply.transmission_method = TRANSMISSION_RADIO
|
||||
reply.data["address_1"] = sender
|
||||
reply.data["command"] = "ping_reply"
|
||||
reply.data["device"] = "WNET_SECLOCKER"
|
||||
reply.data["netid"] = src.net_id
|
||||
spawn(5)
|
||||
src.radio_control.post_signal(src, reply, 2)
|
||||
return
|
||||
return
|
||||
|
||||
emag_act(var/mob/user, var/obj/item/card/emag/E)
|
||||
if (!src.emagged) // secure crates checked for being locked/welded but so long as you aren't telling the thing to open I don't see why that was needed
|
||||
src.emagged = 1
|
||||
src.locked = 0
|
||||
src.update_icon()
|
||||
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
|
||||
if (user)
|
||||
user.show_text("You short out the lock on [src].", "blue")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
demag(var/mob/user)
|
||||
if (!src.emagged)
|
||||
return 0
|
||||
else if (src.emagged)
|
||||
src.emagged = 0
|
||||
src.update_icon()
|
||||
if (user)
|
||||
user.show_text("You repair the lock on [src].", "blue")
|
||||
return 1
|
||||
|
||||
#undef RELAYMOVE_DELAY
|
||||
@@ -0,0 +1,672 @@
|
||||
/obj/storage/crate/loot
|
||||
name = "crate"
|
||||
desc = "A crate of unknown contents, probably accidentally lost from some bygone freighter shipment or the like."
|
||||
icon_state = "crate"
|
||||
icon_opened = "crateopen"
|
||||
icon_closed = "crate"
|
||||
locked = 1
|
||||
var/tier = 1
|
||||
var/image/light = null
|
||||
var/image/stripes = null
|
||||
var/datum/loot_crate_lock/lock = null
|
||||
var/datum/loot_crate_trap/trap = null
|
||||
|
||||
New()
|
||||
..()
|
||||
src.light = image('icons/obj/crate.dmi',"lootcratelocklight")
|
||||
src.stripes = image('icons/obj/crate.dmi',"lootcratestripes")
|
||||
|
||||
tier = RarityClassRoll(100,0,list(95,70))
|
||||
var/kind = rand(1,5)
|
||||
// kinds: (1) Civilian (2) Scientific (3) Industrial (4) Military (5) Criminal
|
||||
|
||||
var/list/items = list()
|
||||
var/list/item_amounts = list()
|
||||
var/picker = 0
|
||||
|
||||
switch(kind)
|
||||
if(2)
|
||||
name = "research shipment crate"
|
||||
desc = "There are laboratory and research company logos on the crate."
|
||||
icon_state = "lootsci"
|
||||
icon_opened = "lootsciopen"
|
||||
icon_closed = "lootsci"
|
||||
|
||||
// SCIENCE GOODS LOOT TABLE
|
||||
if (tier == 3)
|
||||
picker = rand(1,2)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += /obj/item/clothing/gloves/psylink_bracelet
|
||||
item_amounts += 1
|
||||
else
|
||||
items += /obj/item/device/voltron
|
||||
item_amounts += 1
|
||||
else if (tier == 2)
|
||||
picker = rand(1,1)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += pick(/obj/critter/bear)
|
||||
item_amounts += 1
|
||||
else
|
||||
picker = rand(1,3)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += /obj/item/roboupgrade/efficiency
|
||||
item_amounts += 1
|
||||
items += /obj/item/roboupgrade/jetpack
|
||||
item_amounts += 1
|
||||
picker = rand(1,4)
|
||||
items += pick(/obj/item/roboupgrade/physshield,/obj/item/roboupgrade/teleport,/*
|
||||
/obj/item/roboupgrade/opticthermal,*//obj/item/roboupgrade/speed)
|
||||
item_amounts += 1
|
||||
if(2)
|
||||
items += /obj/item/reagent_containers/glass/beaker/large/antitox
|
||||
item_amounts += 1
|
||||
items += /obj/item/reagent_containers/glass/beaker/large/brute
|
||||
item_amounts += 1
|
||||
items += /obj/item/reagent_containers/glass/beaker/large/burn
|
||||
item_amounts += 1
|
||||
items += /obj/item/reagent_containers/glass/beaker/large/epinephrine
|
||||
item_amounts += 1
|
||||
items += /obj/item/reagent_containers/hypospray
|
||||
item_amounts += 1
|
||||
if(3)
|
||||
items += pick(/obj/critter/spore)
|
||||
item_amounts += 3
|
||||
|
||||
if(3)
|
||||
name = "industrial shipment crate"
|
||||
desc = "There are industrial company logos on the crate."
|
||||
icon_state = "lootind"
|
||||
icon_opened = "lootindopen"
|
||||
icon_closed = "lootind"
|
||||
|
||||
// INDUSTRIAL GOODS LOOT TABLE
|
||||
if (tier == 3)
|
||||
items += /obj/item/device/voltron
|
||||
item_amounts += 1
|
||||
else if (tier == 2)
|
||||
picker = rand(1,1)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += pick(/obj/item/raw_material/telecrystal,/obj/item/raw_material/gemstone,
|
||||
/obj/item/raw_material/miracle,/obj/item/raw_material/uqill)
|
||||
item_amounts += 30
|
||||
else
|
||||
picker = rand(1,5)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += /obj/item/breaching_charge/mining
|
||||
item_amounts += 25
|
||||
if(2)
|
||||
items += /obj/item/clothing/gloves/concussive
|
||||
item_amounts += 1
|
||||
items += /obj/item/clothing/shoes/industrial
|
||||
item_amounts += 1
|
||||
if(3)
|
||||
items += /obj/item/clothing/head/helmet/space/industrial
|
||||
item_amounts += 1
|
||||
items += /obj/item/clothing/suit/space/industrial
|
||||
item_amounts += 1
|
||||
if(4)
|
||||
items += pick(/obj/item/raw_material/telecrystal,/obj/item/raw_material/gemstone,
|
||||
/obj/item/raw_material/miracle,/obj/item/raw_material/uqill)
|
||||
item_amounts += 10
|
||||
if(5)
|
||||
items += pick(/obj/item/raw_material/syreline,/obj/item/raw_material/bohrum,
|
||||
/obj/item/raw_material/claretine,/obj/item/raw_material/cerenkite)
|
||||
item_amounts += 40
|
||||
|
||||
if(4)
|
||||
name = "military shipment crate"
|
||||
desc = "The crate is covered in military insignia."
|
||||
icon_state = "lootmil"
|
||||
icon_opened = "lootmilopen"
|
||||
icon_closed = "lootmil"
|
||||
|
||||
// MILITARY GOODS LOOT TABLE
|
||||
if (tier == 3)
|
||||
items += /obj/item/device/voltron
|
||||
item_amounts += 1
|
||||
else if (tier == 2)
|
||||
picker = rand(1,10)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += pick(/obj/item/gun/energy/teleport,/obj/item/gun/energy/laser_gun/pred)
|
||||
item_amounts += 1
|
||||
if(2 to 6)
|
||||
items += /obj/item/gun/energy/phaser_gun
|
||||
item_amounts += 1
|
||||
if(7 to 10)
|
||||
for (var/i = 1, i < rand(4,10), i++)
|
||||
items += pick(/obj/item/chem_grenade/incendiary, /obj/item/chem_grenade/cryo, /obj/item/chem_grenade/shock, /obj/item/chem_grenade/pepper, prob(10); /obj/item/chem_grenade/sarin)
|
||||
item_amounts += 1
|
||||
else
|
||||
picker = rand(1,1)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += /obj/item/reagent_containers/glass/beaker/large/antitox
|
||||
item_amounts += 1
|
||||
items += /obj/item/reagent_containers/glass/beaker/large/brute
|
||||
item_amounts += 1
|
||||
items += /obj/item/reagent_containers/glass/beaker/large/burn
|
||||
item_amounts += 1
|
||||
items += /obj/item/reagent_containers/glass/beaker/large/epinephrine
|
||||
item_amounts += 1
|
||||
items += /obj/item/reagent_containers/hypospray
|
||||
item_amounts += 1
|
||||
|
||||
if(5)
|
||||
name = "unmarked shipment crate"
|
||||
desc = "This crate seems to have all identifications scratched off."
|
||||
icon_state = "lootcrime"
|
||||
icon_opened = "lootcrimeopen"
|
||||
icon_closed = "lootcrime"
|
||||
|
||||
// CRIMINAL GOODS LOOT TABLE
|
||||
if (tier == 3)
|
||||
items += /obj/item/device/voltron
|
||||
item_amounts += 1
|
||||
else if (tier == 2)
|
||||
picker = rand(1,3)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += /obj/item/spacecash/thousand
|
||||
item_amounts += 20
|
||||
if(2)
|
||||
items += /obj/item/material_piece/gold
|
||||
item_amounts += 5
|
||||
if(3)
|
||||
items += /obj/item/plant/herb/cannabis/omega/spawnable
|
||||
item_amounts += 10
|
||||
else
|
||||
picker = rand(1,4)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += /obj/item/spacecash/thousand
|
||||
item_amounts += 5
|
||||
if(2)
|
||||
items += /obj/item/reagent_containers/food/drinks/bottle/hobo_wine
|
||||
item_amounts += 5
|
||||
if(3)
|
||||
items += /obj/item/material_piece/gold
|
||||
item_amounts += 1
|
||||
if(4)
|
||||
items += pick(/obj/item/plant/herb/cannabis/spawnable,
|
||||
/obj/item/plant/herb/cannabis/white/spawnable,
|
||||
/obj/item/plant/herb/cannabis/mega/spawnable)
|
||||
item_amounts += 10
|
||||
|
||||
else
|
||||
name = "goods shipment crate"
|
||||
desc = "There are consumer goods company logos on the crate."
|
||||
|
||||
// CIVILIAN GOODS LOOT TABLE
|
||||
if (tier == 3)
|
||||
items += /obj/item/device/voltron
|
||||
item_amounts += 1
|
||||
else if (tier == 2)
|
||||
picker = rand(1,1)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += /obj/item/reagent_containers/food/snacks/plant/tomato/explosive
|
||||
item_amounts += 5
|
||||
else
|
||||
picker = rand(1,2)
|
||||
switch(picker)
|
||||
if(1)
|
||||
items += /obj/item/clothing/shoes/moon
|
||||
item_amounts += 1
|
||||
if(2)
|
||||
items += /obj/item/reagent_containers/food/drinks/bottle/hobo_wine
|
||||
item_amounts += 5
|
||||
if(3)
|
||||
items += pick(/obj/item/reagent_containers/food/snacks/burrito,
|
||||
/obj/item/reagent_containers/food/snacks/snack_cake,
|
||||
/obj/item/reagent_containers/food/snacks/snack_cake/golden,
|
||||
/obj/item/reagent_containers/food/snacks/plant/lashberry,
|
||||
/obj/item/reagent_containers/food/snacks/plant/tomato)
|
||||
item_amounts += 5
|
||||
if(4)
|
||||
items += /obj/critter/cat
|
||||
item_amounts += 1
|
||||
|
||||
var/trap_prob = 100
|
||||
var/newlock = null
|
||||
var/newtrap = null
|
||||
switch(tier)
|
||||
if(2)
|
||||
newlock = pick(/datum/loot_crate_lock/decacode,/datum/loot_crate_lock/hangman/seven)
|
||||
newtrap = pick(/datum/loot_crate_trap/crusher,/datum/loot_crate_trap/spikes,/datum/loot_crate_trap/zap)
|
||||
name = "fortified " + name
|
||||
desc += " It's pretty heavily secured, too."
|
||||
if(3)
|
||||
newlock = pick(/datum/loot_crate_lock/hangman/nine)
|
||||
newtrap = pick(/datum/loot_crate_trap/bomb,/datum/loot_crate_trap/zap)
|
||||
name = "heavily reinforced " + name
|
||||
desc += " It's also got more security measures on it than Fort Knox."
|
||||
else
|
||||
trap_prob = 33
|
||||
newlock = pick(/datum/loot_crate_lock/decacode,/datum/loot_crate_lock/hangman)
|
||||
newtrap = pick(/datum/loot_crate_trap/crusher,/datum/loot_crate_trap/spikes)
|
||||
|
||||
if (ispath(newlock))
|
||||
var/datum/loot_crate_lock/L = new newlock
|
||||
L.holder = src
|
||||
src.lock = L
|
||||
if (ispath(newtrap) && prob(trap_prob))
|
||||
var/datum/loot_crate_trap/T = new newtrap
|
||||
T.holder = src
|
||||
src.trap = T
|
||||
|
||||
var/list_counter = 1
|
||||
var/temp_counter = 0
|
||||
for (var/X in items)
|
||||
temp_counter = item_amounts[list_counter]
|
||||
while (temp_counter > 0)
|
||||
temp_counter--
|
||||
new X(src)
|
||||
list_counter++
|
||||
|
||||
spawn(0)
|
||||
update_icon()
|
||||
|
||||
return
|
||||
|
||||
emag_act(var/mob/user, var/obj/item/card/emag/E)
|
||||
if (istype(trap))
|
||||
if (E)
|
||||
boutput(user, "<span style=\"color:red\">The crate's anti-tamper system immediately activates in response to [E]! Fuck!</span>")
|
||||
else
|
||||
src.visible_message("<span style=\"color:red\">Something sets off [src]'s anti-tamper system!</span>")
|
||||
trap.trigger_trap(user)
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(istype(lock) && locked)
|
||||
var/success_state = lock.attempt_to_open(user)
|
||||
if (success_state == 1) // Succeeded
|
||||
boutput(user, "<span style=\"color:blue\">The crate unlocks!</span>")
|
||||
src.locked = 0
|
||||
src.lock = null
|
||||
src.trap = null
|
||||
src.update_icon()
|
||||
else if (success_state == 0) // Failed
|
||||
lock.fail_attempt(user)
|
||||
// Call -1 or something for cancelled attempts
|
||||
else
|
||||
return ..()
|
||||
|
||||
attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/device/multitool) && locked)
|
||||
if (istype(lock))
|
||||
lock.read_device(user)
|
||||
if (istype(trap))
|
||||
trap.read_device(user)
|
||||
else if (istype(W, /obj/item/weldingtool))
|
||||
var/obj/item/weldingtool/WELD = W
|
||||
if (WELD.welding)
|
||||
boutput(user, "<span style=\"color:red\">The crate seems to be resistant to welding.</span>")
|
||||
return
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
update_icon()
|
||||
if(open) icon_state = icon_opened
|
||||
else icon_state = icon_closed
|
||||
src.overlays = null
|
||||
|
||||
if (src.locked)
|
||||
light.color = "#FF0000"
|
||||
else
|
||||
light.color = "#00FF00"
|
||||
src.overlays += src.light
|
||||
|
||||
switch(tier)
|
||||
if(2)
|
||||
stripes.color = "#EBEB00"
|
||||
if(3)
|
||||
stripes.color = "#C00000"
|
||||
else
|
||||
stripes.color = "#00C000"
|
||||
src.overlays += src.stripes
|
||||
|
||||
// LOCKS
|
||||
|
||||
/datum/loot_crate_lock
|
||||
var/obj/storage/crate/loot/holder = null
|
||||
var/attempts_allowed = 0
|
||||
var/attempts_remaining = 0
|
||||
|
||||
New()
|
||||
scramble_code()
|
||||
|
||||
proc/attempt_to_open(var/mob/living/opener)
|
||||
// Return 1 for success, 0 for failiure, anything else for cancelled attempt
|
||||
// Otherwise the trap will go off if you reconsider too many times and that'd be Very Rude
|
||||
return -1
|
||||
|
||||
proc/fail_attempt(var/mob/living/opener)
|
||||
boutput(opener, "<span style=\"color:red\">A red light flashes.</span>")
|
||||
attempts_remaining--
|
||||
if (attempts_remaining <= 0)
|
||||
boutput(opener, "<span style=\"color:red\">The crate's anti-tamper system activates!</span>")
|
||||
if (holder && holder.trap)
|
||||
holder.trap.trigger_trap(opener)
|
||||
if (!holder.trap.destroys_crate)
|
||||
src.scramble_code()
|
||||
boutput(opener, "<span style=\"color:red\">Looks like the code changed, too. You'll have to start again.</span>")
|
||||
else
|
||||
src.scramble_code()
|
||||
boutput(opener, "<span style=\"color:red\">Looks like the code changed. You'll have to start again.</span>")
|
||||
return
|
||||
|
||||
proc/inputter_check(var/mob/living/opener)
|
||||
if (get_dist(holder.loc,opener.loc) > 2 && !opener.bioHolder.HasEffect("telekinesis"))
|
||||
boutput(opener, "You try really hard to press the button all the way over there. Using your mind. Way to go, champ!")
|
||||
return 0
|
||||
|
||||
if (!istype(opener.loc,/turf/) && !opener.bioHolder.HasEffect("telekinesis"))
|
||||
boutput(opener, "You can't press the button from inside there, you doofus!")
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
proc/read_device(var/mob/living/reader)
|
||||
return
|
||||
|
||||
proc/scramble_code()
|
||||
return
|
||||
|
||||
/datum/loot_crate_lock/decacode
|
||||
attempts_allowed = 3
|
||||
var/code = null
|
||||
var/lastattempt = null
|
||||
|
||||
attempt_to_open(var/mob/living/opener)
|
||||
boutput(opener, "<span style=\"color:blue\">The crate is locked with a deca-code lock.</span>")
|
||||
var/input = input(usr, "Enter digit from 1 to 10.", "Deca-Code Lock") as null|num
|
||||
if (input < 1 || input > 10)
|
||||
boutput(opener, "You leave the crate alone.")
|
||||
return -1
|
||||
|
||||
if (!inputter_check(opener))
|
||||
return
|
||||
|
||||
src.lastattempt = input
|
||||
|
||||
if (input == code)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
read_device(var/mob/living/reader)
|
||||
boutput(reader, "<b>DECA-CODE LOCK REPORT:</b>")
|
||||
if (attempts_allowed == 1)
|
||||
boutput(reader, "<span style=\"color:red\">* Anti-tamper system will activate on next failed access attempt.</span>")
|
||||
else
|
||||
boutput(reader, "* Anti-tamper system will activate after [attempts_remaining] failed access attempts.")
|
||||
|
||||
if (lastattempt == null)
|
||||
boutput(reader, "* No attempt has been made to open the crate thus far.")
|
||||
return
|
||||
|
||||
if (code > src.lastattempt)
|
||||
boutput(reader, "* Last access attempt lower than expected code.")
|
||||
else
|
||||
boutput(reader, "* Last access attempt higher than expected code.")
|
||||
|
||||
scramble_code()
|
||||
code = rand(1,10)
|
||||
attempts_remaining = attempts_allowed
|
||||
lastattempt = null
|
||||
|
||||
/datum/loot_crate_lock/hangman
|
||||
attempts_allowed = 8
|
||||
var/code = null
|
||||
var/revealed_code = "*****"
|
||||
var/code_pool = "five"
|
||||
|
||||
seven
|
||||
attempts_allowed = 8
|
||||
revealed_code = "*******"
|
||||
code_pool = "seven"
|
||||
|
||||
nine
|
||||
attempts_allowed = 8
|
||||
revealed_code = "*********"
|
||||
code_pool = "nine"
|
||||
|
||||
attempt_to_open(var/mob/living/opener)
|
||||
boutput(opener, "<span style=\"color:blue\">The crate is locked with a password lock. You'll need a multitool to get very far here.</span>")
|
||||
var/input = input(usr, "Enter one letter to reveal part of the password, or attempt to guess the password.", "Password Lock") as null|text
|
||||
input = lowertext(input)
|
||||
|
||||
if (!istext(input) || length(input) < 1)
|
||||
boutput(opener, "You leave the crate alone.")
|
||||
return -1
|
||||
|
||||
if (!inputter_check(opener))
|
||||
return
|
||||
|
||||
if (length(input) == 1)
|
||||
if (attempts_remaining <= 1)
|
||||
boutput(opener, "<span style=\"color:red\">Trying to reveal any more of the password would set off the anti-tamper system. You'll have to make a guess.</span>")
|
||||
return -1
|
||||
|
||||
var/chars_found = 0
|
||||
var/loops = length(code)
|
||||
|
||||
for (var/i = 1, i <= loops, i++)
|
||||
if (chs(code, i) == input)
|
||||
chars_found++
|
||||
revealed_code = copytext(revealed_code,1,i) + input + copytext(revealed_code,i+1)
|
||||
|
||||
if (chars_found)
|
||||
boutput(opener, "Found [input] in password.")
|
||||
else
|
||||
boutput(opener, "Did not find [input] in password.")
|
||||
attempts_remaining--
|
||||
|
||||
return -1
|
||||
else
|
||||
if (input == code)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
read_device(var/mob/living/reader)
|
||||
boutput(reader, "<b>PASSWORD LOCK REPORT:</b>")
|
||||
boutput(reader, "All passwords are fully lower-case and feature no non-alphabetical characters.")
|
||||
if (attempts_allowed == 1)
|
||||
boutput(reader, "<span style=\"color:red\">* Anti-tamper system will activate on next failed access attempt.</span>")
|
||||
else
|
||||
boutput(reader, "* Anti-tamper system will activate after [attempts_remaining] failed access attempts.")
|
||||
|
||||
boutput(reader, "* Characters known: [revealed_code]")
|
||||
return
|
||||
|
||||
scramble_code()
|
||||
code = pick(strings("password_pool.txt", code_pool))
|
||||
attempts_remaining = attempts_allowed
|
||||
revealed_code = initial(revealed_code)
|
||||
|
||||
// TRAPS
|
||||
|
||||
/datum/loot_crate_trap
|
||||
var/obj/storage/crate/loot/holder = null
|
||||
var/destroys_crate = 0
|
||||
var/desc = null
|
||||
|
||||
proc/trigger_trap(var/mob/living/opener)
|
||||
return 1
|
||||
|
||||
proc/read_device(var/mob/living/reader)
|
||||
if (istext(desc))
|
||||
boutput(reader, "[desc]")
|
||||
return
|
||||
|
||||
/datum/loot_crate_trap/bomb
|
||||
destroys_crate = 1
|
||||
desc = "Security Measure Installed: Officer Dan's Anti-Tamper Bomb System Mk 1.4"
|
||||
var/list/bomb_yields = list(-1,-1,1,1)
|
||||
|
||||
trigger_trap(var/mob/living/opener)
|
||||
if (..())
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(holder)
|
||||
holder.visible_message("<b>[holder] beeps, \"Thank you for triggering Officer Dan's Anti-Tamper Bomb system. Have a nice day.\"")
|
||||
explosion(holder, T,bomb_yields[1],bomb_yields[2],bomb_yields[3],bomb_yields[4])
|
||||
qdel(holder)
|
||||
return
|
||||
|
||||
read_device(var/mob/living/reader)
|
||||
|
||||
/datum/loot_crate_trap/spikes
|
||||
desc = "Security Measure Installed: Robust Solutions Inc. Anti-Thief Sublethal Skewer System"
|
||||
var/damage = 20
|
||||
|
||||
trigger_trap(var/mob/living/opener)
|
||||
holder.visible_message("<span style=\"color:red\"><b>Spikes shoot out of [holder]!</b></span>")
|
||||
if (opener)
|
||||
random_brute_damage(opener,damage,1)
|
||||
playsound(opener.loc, "sound/effects/bloody_stab.ogg", 60, 1)
|
||||
return
|
||||
|
||||
/datum/loot_crate_trap/zap
|
||||
desc = "Security Measure Installed: Robust Solutions Inc. Anti-Thief Electric Shock System"
|
||||
var/wattage = 17500
|
||||
|
||||
trigger_trap(var/mob/living/opener)
|
||||
if (opener)
|
||||
opener.shock(holder,wattage,1,1)
|
||||
return
|
||||
|
||||
/datum/loot_crate_trap/crusher
|
||||
desc = "Security Measure Installed: Dyna*Corp Contingency Crate Grinder System"
|
||||
destroys_crate = 1
|
||||
|
||||
trigger_trap(var/mob/living/opener)
|
||||
holder.visible_message("<span style=\"color:red\">A loud grinding sound comes from inside [holder] as it unlocks!</span>")
|
||||
playsound(holder.loc, "sound/machines/engine_grump1.ogg", 60, 1)
|
||||
|
||||
for (var/obj/I in holder.contents)
|
||||
if (istype(I,/obj/critter/cat/))
|
||||
continue // absolutely fucking not >=I
|
||||
new /obj/item/scrap(holder)
|
||||
qdel(I)
|
||||
|
||||
holder.locked = 0
|
||||
holder.lock = null
|
||||
holder.trap = null
|
||||
holder.update_icon()
|
||||
return
|
||||
|
||||
// Items specific to loot crates
|
||||
|
||||
/obj/item/clothing/gloves/psylink_bracelet
|
||||
name = "jewelled bracelet"
|
||||
desc = "Some pretty jewellery."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "bracelet"
|
||||
w_class = 1
|
||||
var/image/gemstone = null
|
||||
var/obj/item/clothing/gloves/psylink_bracelet/twin
|
||||
|
||||
New()
|
||||
src.gemstone = image('icons/obj/items.dmi',"bracelet-gem")
|
||||
var/obj/item/clothing/gloves/psylink_bracelet/two = new /obj/item/clothing/gloves/psylink_bracelet/secondary(src.loc)
|
||||
two.gemstone = image('icons/obj/items.dmi',"bracelet-gem")
|
||||
src.twin = two
|
||||
two.twin = src
|
||||
var/picker = rand(1,3)
|
||||
switch(picker)
|
||||
if(2)
|
||||
src.gemstone.color = "#00FF00"
|
||||
two.gemstone.color = "#FF00FF"
|
||||
if(3)
|
||||
src.gemstone.color = "#FFFF00"
|
||||
two.gemstone.color = "#00FFFF"
|
||||
else
|
||||
src.gemstone.color = "#FF0000"
|
||||
two.gemstone.color = "#0000FF"
|
||||
|
||||
src.overlays += src.gemstone
|
||||
two.overlays += two.gemstone
|
||||
|
||||
equipped(var/mob/user, var/slot)
|
||||
if (!user)
|
||||
return
|
||||
if (src.twin && istype(src.twin.loc,/mob/living/carbon/human/))
|
||||
var/mob/living/carbon/human/psy = src.twin.loc
|
||||
if (psy.bioHolder && psy.bioHolder.HasEffect("psy_resist"))
|
||||
return
|
||||
if (psy.gloves == src.twin)
|
||||
boutput(user, "<span style=\"color:red\">You suddenly begin hearing and seeing things. What the hell?</span>")
|
||||
boutput(psy, "<span style=\"color:red\">You suddenly begin hearing and seeing things. What the hell?</span>")
|
||||
|
||||
unequipped(var/mob/user)
|
||||
if (!user)
|
||||
return
|
||||
if (src.twin && istype(src.twin.loc,/mob/living/carbon/human/))
|
||||
var/mob/living/carbon/human/psy = src.twin.loc
|
||||
if (psy.bioHolder && psy.bioHolder.HasEffect("psy_resist"))
|
||||
return
|
||||
if (psy.gloves == src.twin)
|
||||
boutput(user, "<span style=\"color:blue\">The strange hallcuinations suddenly stop. That was weird.</span>")
|
||||
boutput(psy, "<span style=\"color:blue\">The strange hallcuinations suddenly stop. That was weird.</span>")
|
||||
|
||||
/obj/item/clothing/gloves/psylink_bracelet/secondary
|
||||
|
||||
New()
|
||||
return
|
||||
|
||||
/mob/proc/get_psychic_link()
|
||||
return null
|
||||
|
||||
/mob/living/carbon/human/get_psychic_link()
|
||||
if (!src)
|
||||
return null
|
||||
|
||||
if (istype(src.gloves,/obj/item/clothing/gloves/psylink_bracelet/))
|
||||
var/obj/item/clothing/gloves/psylink_bracelet/PB = src.gloves
|
||||
if (PB.twin && istype(PB.twin.loc,/mob/living/carbon/human/))
|
||||
var/mob/living/carbon/human/psy = PB.twin.loc
|
||||
if (psy.bioHolder && psy.bioHolder.HasEffect("psy_resist"))
|
||||
return null
|
||||
if (psy.gloves == PB.twin)
|
||||
return psy
|
||||
|
||||
return null
|
||||
|
||||
// Letters, documents, etc
|
||||
|
||||
/obj/item/paper/loot_crate_letters
|
||||
name = "letter"
|
||||
desc = "Some old fashioned paper correspondence."
|
||||
var/text_file = null
|
||||
var/list/pick_from_these_files = list()
|
||||
|
||||
New()
|
||||
if (text_file)
|
||||
info = file2text(text_file)
|
||||
else
|
||||
if (pick_from_these_files.len)
|
||||
info = file2text(pick(pick_from_these_files))
|
||||
|
||||
/obj/item/paper/loot_crate_letters/generic_science
|
||||
name = "scientific document"
|
||||
desc = "You recognise a prominent research company's logo on the letterhead."
|
||||
pick_from_these_files = list("strings/fluff/cat_planet.txt","strings/fluff/giant_ruby.txt")
|
||||
|
||||
/obj/item/paper/loot_crate_letters/generic_crime
|
||||
name = "sketchy memo"
|
||||
desc = "There's just something really shady about this correspondence."
|
||||
pick_from_these_files = list("strings/fluff/fuck_you_pianzi.txt")
|
||||
@@ -0,0 +1,607 @@
|
||||
/obj/storage/secure/closet
|
||||
name = "secure locker"
|
||||
desc = "A card-locked storage locker."
|
||||
soundproofing = 5
|
||||
can_flip_bust = 1
|
||||
|
||||
/obj/storage/secure/closet/personal
|
||||
name = "personal locker"
|
||||
desc = "The first card swiped gains control."
|
||||
personal = 1
|
||||
spawn_contents = list(/obj/item/device/radio/signaler,\
|
||||
/obj/item/pen,\
|
||||
/obj/item/storage/backpack,\
|
||||
/obj/item/storage/backpack/satchel,\
|
||||
/obj/item/device/radio/headset)
|
||||
|
||||
/* =================== */
|
||||
/* ----- Command ----- */
|
||||
/* =================== */
|
||||
|
||||
/obj/storage/secure/closet/command
|
||||
name = "command locker"
|
||||
req_access = list(access_heads)
|
||||
icon_state = "command"
|
||||
icon_closed = "command"
|
||||
icon_opened = "secure_blue-open"
|
||||
|
||||
/obj/storage/secure/closet/command/captain
|
||||
name = "\improper Captain's locker"
|
||||
req_access = list(access_captain)
|
||||
spawn_contents = list(/obj/item/gun/energy/egun,\
|
||||
/obj/item/storage/box/id_kit,\
|
||||
/obj/item/storage/box/clothing/captain,\
|
||||
/obj/item/clothing/shoes/brown,\
|
||||
/obj/item/clothing/suit/armor/vest,\
|
||||
/obj/item/clothing/head/helmet/swat,\
|
||||
/obj/item/clothing/glasses/sunglasses,\
|
||||
/obj/item/device/radio/headset/command/captain)
|
||||
|
||||
/obj/storage/secure/closet/command/hos
|
||||
name = "\improper Head of Security's locker"
|
||||
req_access = list(access_maxsec)
|
||||
spawn_contents = list(/obj/item/storage/box/id_kit,\
|
||||
/obj/item/handcuffs,\
|
||||
/obj/item/device/flash,\
|
||||
/obj/item/storage/box/clothing/hos,\
|
||||
/obj/item/clothing/shoes/brown,\
|
||||
/obj/item/clothing/suit/armor/vest,\
|
||||
/obj/item/clothing/head/helmet,\
|
||||
/obj/item/clothing/glasses/sunglasses,\
|
||||
/obj/item/baton,\
|
||||
/obj/item/gun/energy/egun,\
|
||||
/obj/item/device/radio/headset/security,\
|
||||
/obj/item/clothing/glasses/thermal,\
|
||||
/obj/item/device/radio/headset/command/hos)
|
||||
|
||||
/obj/storage/secure/closet/command/hop
|
||||
name = "\improper Head of Personnel's locker"
|
||||
req_access = list(access_head_of_personnel)
|
||||
spawn_contents = list(/obj/item/device/flash,\
|
||||
/obj/item/storage/box/id_kit,\
|
||||
/obj/item/storage/box/clothing/hop,\
|
||||
/obj/item/clothing/shoes/brown,\
|
||||
/obj/item/clothing/suit/armor/vest,\
|
||||
/obj/item/device/radio/headset/command/hop)
|
||||
|
||||
/obj/storage/secure/closet/command/research_director
|
||||
name = "\improper Research Director's locker"
|
||||
req_access = list(access_research_director)
|
||||
spawn_contents = list(/obj/item/plant/herb/cannabis/spawnable,\
|
||||
/obj/item/zippo,\
|
||||
/obj/item/storage/box/clothing/research_director,\
|
||||
/obj/item/clothing/shoes/brown,\
|
||||
/obj/item/circular_saw,\
|
||||
/obj/item/scalpel,\
|
||||
/obj/item/hand_tele,\
|
||||
/obj/item/storage/box/zeta_boot_kit,\
|
||||
/obj/item/device/radio/electropack,\
|
||||
/obj/item/device/flash,\
|
||||
/obj/item/device/radio/headset/command/rd)
|
||||
|
||||
make_my_stuff()
|
||||
..()
|
||||
if (prob(10))
|
||||
new /obj/item/photo/heisenbee(src)
|
||||
|
||||
/obj/storage/secure/closet/command/medical_director
|
||||
name = "\improper Medical Director's locker"
|
||||
req_access = list(access_medical_director)
|
||||
spawn_contents = list(/obj/item/storage/box/clothing/medical_director,\
|
||||
/obj/item/clothing/shoes/brown,\
|
||||
/obj/item/gun/kinetic/dart_rifle,\
|
||||
/obj/item/ammo/bullets/tranq_darts,\
|
||||
/obj/item/ammo/bullets/tranq_darts/anti_mutant,\
|
||||
/obj/item/robodefibrilator,\
|
||||
/obj/item/clothing/gloves/latex,\
|
||||
/obj/item/storage/belt/medical,\
|
||||
/obj/item/circular_saw,\
|
||||
/obj/item/scalpel,\
|
||||
/obj/item/reagent_containers/hypospray,\
|
||||
/obj/item/device/flash,\
|
||||
/obj/item/device/radio/headset/command/md)
|
||||
|
||||
make_my_stuff()
|
||||
..()
|
||||
if (prob(10)) // heh
|
||||
new /obj/item/reagent_containers/glass/bottle/eyedrops(src)
|
||||
new /obj/item/reagent_containers/dropper(src)
|
||||
|
||||
/obj/storage/secure/closet/command/chief_engineer
|
||||
name = "\improper Chief Engineer's locker"
|
||||
req_access = list(access_engineering_chief)
|
||||
spawn_contents = list(/obj/item/storage/toolbox/mechanical,\
|
||||
/obj/item/storage/box/clothing/chief_engineer,\
|
||||
/obj/item/clothing/gloves/yellow,\
|
||||
/obj/item/clothing/shoes/brown,\
|
||||
/obj/item/clothing/shoes/magnetic,\
|
||||
/obj/item/clothing/ears/earmuffs,\
|
||||
/obj/item/clothing/glasses/meson,\
|
||||
/obj/item/clothing/suit/fire,\
|
||||
/obj/item/clothing/mask/gas,\
|
||||
/obj/item/storage/belt/utility,\
|
||||
/obj/item/clothing/head/helmet/welding,\
|
||||
/obj/item/clothing/head/helmet/hardhat,\
|
||||
/obj/item/device/multitool,\
|
||||
/obj/item/device/flash,\
|
||||
/obj/item/device/radio/headset/command/ce)
|
||||
|
||||
/* ==================== */
|
||||
/* ----- Security ----- */
|
||||
/* ==================== */
|
||||
|
||||
/obj/storage/secure/closet/security
|
||||
name = "\improper Security locker"
|
||||
req_access = list(access_securitylockers)
|
||||
icon_state = "sec"
|
||||
icon_closed = "sec"
|
||||
icon_opened = "secure_red-open"
|
||||
|
||||
/obj/storage/secure/closet/security/equipment
|
||||
name = "\improper Security equipment locker"
|
||||
spawn_contents = list(/obj/item/handcuffs,\
|
||||
/obj/item/device/flash,\
|
||||
/obj/item/clothing/under/color/red,\
|
||||
/obj/item/clothing/shoes/brown,\
|
||||
/obj/item/clothing/suit/armor/vest,\
|
||||
/obj/item/clothing/head/helmet,\
|
||||
/obj/item/clothing/glasses/sunglasses,\
|
||||
/obj/item/baton,\
|
||||
/obj/item/gun/energy/taser_gun,\
|
||||
/obj/item/device/radio/headset/security)
|
||||
|
||||
/obj/storage/secure/closet/security/forensics
|
||||
name = "Forensics equipment locker"
|
||||
req_access = list(access_forensics_lockers)
|
||||
spawn_contents = list(/obj/item/clothing/under/rank/det,\
|
||||
/obj/item/clothing/shoes/brown,\
|
||||
/obj/item/clothing/head/det_hat,\
|
||||
/obj/item/clothing/suit/det_suit,\
|
||||
/obj/item/clothing/gloves/black,\
|
||||
/obj/item/clothing/glasses/thermal,\
|
||||
/obj/item/clothing/glasses/spectro,\
|
||||
/obj/item/storage/box/lglo_kit,\
|
||||
/obj/item/device/detective_scanner,\
|
||||
/obj/item/storage/box/detectivegun,\
|
||||
/obj/item/device/flash,\
|
||||
/obj/item/camera_film,\
|
||||
/obj/item/device/radio/headset/security)
|
||||
|
||||
/obj/storage/secure/closet/security/armory
|
||||
name = "\improper Special Equipment locker"
|
||||
req_access = list(access_maxsec)
|
||||
spawn_contents = list(/obj/item/device/flash,\
|
||||
/obj/item/storage/box/flashbang_kit,\
|
||||
/obj/item/clothing/glasses/sunglasses,\
|
||||
/obj/item/clothing/suit/armor/EOD,\
|
||||
/obj/item/clothing/head/helmet/EOD,\
|
||||
/obj/item/ammo/bullets/abg,\
|
||||
/obj/item/gun/kinetic/riotgun)
|
||||
|
||||
/obj/storage/secure/closet/brig
|
||||
name = "\improper Confiscated Items locker"
|
||||
req_access = list(access_brig)
|
||||
|
||||
// Old Mushroom-era feature I fixed up (Convair880).
|
||||
/obj/storage/secure/closet/brig/automatic
|
||||
name = "\improper Automatic Locker"
|
||||
desc = "Card-locked closet linked to a brig timer. Will unlock automatically when timer reaches zero."
|
||||
var/obj/machinery/door_timer/our_timer = null
|
||||
var/id = null
|
||||
|
||||
// Please keep synchronizied with these lists for easy map changes:
|
||||
// /obj/machinery/floorflusher (floorflusher.dm)
|
||||
// /obj/machinery/door_timer (door_timer.dm)
|
||||
// /obj/machinery/door/window/brigdoor (window.dm)
|
||||
// /obj/machinery/flasher (flasher.dm)
|
||||
solitary
|
||||
name = "\improper Automatic Locker (Cell #1)"
|
||||
id = "solitary"
|
||||
|
||||
solitary2
|
||||
name = "\improper Automatic Locker (Cell #2)"
|
||||
id = "solitary2"
|
||||
|
||||
solitary3
|
||||
name = "\improper Automatic Locker (Cell #3)"
|
||||
id = "solitary3"
|
||||
|
||||
solitary4
|
||||
name = "\improper Automatic Locker (Cell #4)"
|
||||
id = "solitary4"
|
||||
|
||||
minibrig
|
||||
name = "\improper Automatic Locker (Mini-Brig)"
|
||||
id = "minibrig"
|
||||
|
||||
minibrig2
|
||||
name = "\improper Automatic Locker (Mini-Brig #2)"
|
||||
id = "minibrig2"
|
||||
|
||||
minibrig3
|
||||
name = "\improper Automatic Locker (Mini-Brig #3)"
|
||||
id = "minibrig3"
|
||||
|
||||
genpop
|
||||
name = "\improper Automatic Locker (Genpop)"
|
||||
id = "genpop"
|
||||
|
||||
genpop_n
|
||||
name = "\improper Automatic Locker (Genpop North)"
|
||||
id = "genpop_n"
|
||||
|
||||
genpop_s
|
||||
name = "\improper Automatic Locker (Genpop South)"
|
||||
id = "genpop_s"
|
||||
|
||||
New()
|
||||
..()
|
||||
spawn (5)
|
||||
if (src)
|
||||
// Why range 30? COG2 places linked fixtures much further away from the timer than originally envisioned.
|
||||
for (var/obj/machinery/door_timer/DT in range(30, src))
|
||||
if (DT && DT.id == src.id)
|
||||
src.our_timer = DT
|
||||
if (src.name == "\improper Automatic Locker")
|
||||
src.name = "\improper Automatic Locker ([src.id])"
|
||||
break
|
||||
if (!src.our_timer)
|
||||
message_admins("Automatic locker: couldn't find brig timer with ID [isnull(src.id) ? "*null*" : "[src.id]"] in [get_area(src)].")
|
||||
logTheThing("debug", null, null, "<b>Convair880:</b> couldn't find brig timer with ID [isnull(src.id) ? "*null*" : "[src.id]"] for automatic locker at [log_loc(src)].")
|
||||
return
|
||||
|
||||
MouseDrop(over_object, src_location, over_location)
|
||||
..()
|
||||
if (isobserver(usr) || isintangible(usr))
|
||||
return
|
||||
if (!isturf(usr.loc))
|
||||
return
|
||||
if (usr.stat || usr.stunned || usr.weakened)
|
||||
return
|
||||
if (get_dist(src, usr) > 1)
|
||||
usr.show_text("You are too far away to do this!", "red")
|
||||
return
|
||||
if (get_dist(over_object, src) > 5)
|
||||
usr.show_text("The [src.name] is too far away from the target!", "red")
|
||||
return
|
||||
if (!istype(over_object, /obj/machinery/door_timer))
|
||||
usr.show_text("Automatic lockers can only be linked to a brig timer.", "red")
|
||||
return
|
||||
|
||||
if (alert("Link locker to this brig timer?",,"Yes","No") == "Yes")
|
||||
var/obj/machinery/door_timer/DT = over_object
|
||||
if (!DT.id)
|
||||
usr.show_text("This brig timer doesn't have an ID assigned to it.", "red")
|
||||
return
|
||||
src.id = DT.id
|
||||
src.our_timer = DT
|
||||
src.name = "\improper Automatic Locker ([src.id])"
|
||||
usr.visible_message("<span style=\"color:blue\"><b>[usr.name]</b> links [src.name] to a brig timer.</span>", "<span style=\"color:blue\">Brig timer linked: [src.id].</span>")
|
||||
return
|
||||
|
||||
/* =================== */
|
||||
/* ----- Medical ----- */
|
||||
/* =================== */
|
||||
|
||||
/obj/storage/secure/closet/medical
|
||||
name = "medical locker"
|
||||
icon_state = "medical"
|
||||
icon_closed = "medical"
|
||||
icon_opened = "secure_white-open"
|
||||
req_access = list(access_medical_lockers)
|
||||
|
||||
/obj/storage/secure/closet/medical/medicine
|
||||
name = "medicine storage locker"
|
||||
spawn_contents = list(/obj/item/clothing/glasses/visor,\
|
||||
/obj/item/device/radio/headset/deaf,\
|
||||
/obj/item/clothing/glasses/eyepatch,\
|
||||
/obj/item/reagent_containers/glass/bottle/antitoxin = 3,\
|
||||
/obj/item/reagent_containers/glass/bottle/epinephrine = 3,\
|
||||
/obj/item/storage/box/syringes,\
|
||||
/obj/item/storage/box/stma_kit,\
|
||||
/obj/item/storage/box/lglo_kit,\
|
||||
/obj/item/reagent_containers/dropper = 2,\
|
||||
/obj/item/reagent_containers/glass/beaker = 2)
|
||||
|
||||
/obj/storage/secure/closet/medical/medkit
|
||||
name = "medkit storage locker"
|
||||
spawn_contents = list()
|
||||
make_my_stuff()
|
||||
..()
|
||||
var/obj/item/storage/firstaid/regular/B1 = new(src)
|
||||
B1.pixel_y = 6
|
||||
B1.pixel_x = -6
|
||||
|
||||
var/obj/item/storage/firstaid/brute/B2 = new(src)
|
||||
B2.pixel_y = 6
|
||||
B2.pixel_x = 6
|
||||
|
||||
var/obj/item/storage/firstaid/fire/B3 = new(src)
|
||||
B3.pixel_y = 0
|
||||
B3.pixel_x = -6
|
||||
|
||||
var/obj/item/storage/firstaid/toxin/B4 = new(src)
|
||||
B4.pixel_y = 0
|
||||
B4.pixel_x = 6
|
||||
|
||||
var/obj/item/storage/firstaid/oxygen/B5 = new(src)
|
||||
B5.pixel_y = -6
|
||||
B5.pixel_x = -6
|
||||
|
||||
var/obj/item/storage/firstaid/brain/B6 = new(src)
|
||||
B6.pixel_y = -6
|
||||
B6.pixel_x = 6
|
||||
return
|
||||
|
||||
/obj/storage/secure/closet/medical/anesthetic
|
||||
name = "anesthetic storage locker"
|
||||
spawn_contents = list(/obj/item/reagent_containers/glass/bottle/morphine = 2,\
|
||||
/obj/item/storage/box/syringes,\
|
||||
/obj/item/tank/anesthetic = 5,\
|
||||
/obj/item/clothing/mask/medical = 4)
|
||||
|
||||
/obj/storage/secure/closet/medical/uniforms
|
||||
name = "medical uniform locker"
|
||||
spawn_contents = list(/obj/item/storage/backpack/satchel/medic,\
|
||||
/obj/item/storage/backpack/medic,\
|
||||
/obj/item/clothing/under/rank/medical,\
|
||||
/obj/item/clothing/shoes/red,\
|
||||
/obj/item/clothing/suit/labcoat,\
|
||||
/obj/item/storage/belt/medical,\
|
||||
/obj/item/storage/box/stma_kit,\
|
||||
/obj/item/storage/box/lglo_kit,\
|
||||
/obj/item/clothing/glasses/healthgoggles,\
|
||||
/obj/item/device/radio/headset/medical)
|
||||
|
||||
/obj/storage/secure/closet/medical/chemical
|
||||
name = "restricted medical locker"
|
||||
spawn_contents = list()
|
||||
req_access = list(access_medical_director)
|
||||
make_my_stuff()
|
||||
..()
|
||||
// let's organize the SHIT outta this closet too! hot damn
|
||||
var/obj/item/reagent_containers/glass/bottle/pfd/B1 = new(src)
|
||||
B1.pixel_y = 6
|
||||
B1.pixel_x = -4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/pentetic/B2 = new(src)
|
||||
B2.pixel_y = 6
|
||||
B2.pixel_x = 4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/omnizine/B3 = new(src)
|
||||
B3.pixel_y = 0
|
||||
B3.pixel_x = -4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/pfd/B4 = new(src)
|
||||
B4.pixel_y = 0
|
||||
B4.pixel_x = 4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/ether/B5 = new(src)
|
||||
B5.pixel_y = -5
|
||||
B5.pixel_x = -4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/haloperidol/B6 = new(src)
|
||||
B6.pixel_y = -5
|
||||
B6.pixel_x = 4
|
||||
return
|
||||
|
||||
/obj/storage/secure/closet/animal
|
||||
name = "\improper Animal Control locker"
|
||||
req_access = list(access_medical)
|
||||
spawn_contents = list(/obj/item/device/radio/signaler,\
|
||||
/obj/item/device/radio/electropack = 5,\
|
||||
/obj/item/clothing/glasses/blindfold = 2)
|
||||
|
||||
/* ==================== */
|
||||
/* ----- Research ----- */
|
||||
/* ==================== */
|
||||
|
||||
/obj/storage/secure/closet/research
|
||||
name = "\improper Research locker"
|
||||
icon_state = "science"
|
||||
icon_closed = "science"
|
||||
icon_opened = "secure_white-open"
|
||||
req_access = list(access_tox_storage)
|
||||
|
||||
/obj/storage/secure/closet/research/uniform
|
||||
name = "science uniform locker"
|
||||
spawn_contents = list(/obj/item/tank/air,\
|
||||
/obj/item/clothing/mask/gas,\
|
||||
/obj/item/clothing/suit/bio_suit,\
|
||||
/obj/item/clothing/under/rank/scientist,\
|
||||
/obj/item/clothing/shoes/white,\
|
||||
/obj/item/clothing/gloves/latex,\
|
||||
/obj/item/clothing/head/bio_hood,\
|
||||
/obj/item/clothing/suit/labcoat,\
|
||||
/obj/item/device/radio/headset/research)
|
||||
|
||||
/obj/storage/secure/closet/research/chemical
|
||||
name = "chemical storage locker"
|
||||
spawn_contents = list()
|
||||
make_my_stuff()
|
||||
..()
|
||||
// let's organize the SHIT outta this closet hot damn
|
||||
var/obj/item/reagent_containers/glass/bottle/oil/B1 = new(src)
|
||||
B1.pixel_y = 6
|
||||
B1.pixel_x = -4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/phenol/B2 = new(src)
|
||||
B2.pixel_y = 6
|
||||
B2.pixel_x = 4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/acetone/B3 = new(src)
|
||||
B3.pixel_y = 0
|
||||
B3.pixel_x = -4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/ammonia/B4 = new(src)
|
||||
B4.pixel_y = 0
|
||||
B4.pixel_x = 4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/diethylamine/B5 = new(src)
|
||||
B5.pixel_y = -5
|
||||
B5.pixel_x = -4
|
||||
|
||||
var/obj/item/reagent_containers/glass/bottle/acid/B6 = new(src)
|
||||
B6.pixel_y = -5
|
||||
B6.pixel_x = 4
|
||||
return
|
||||
|
||||
/* ======================= */
|
||||
/* ----- Engineering ----- */
|
||||
/* ======================= */
|
||||
|
||||
/obj/storage/secure/closet/engineering
|
||||
name = "\improper Engineering locker"
|
||||
icon_state = "eng"
|
||||
icon_closed = "eng"
|
||||
icon_opened = "secure_yellow-open"
|
||||
req_access = list(access_engineering)
|
||||
|
||||
/obj/storage/secure/closet/engineering/electrical
|
||||
name = "electrical supplies locker"
|
||||
req_access = list(access_engineering_power)
|
||||
spawn_contents = list(/obj/item/clothing/gloves/yellow = 3,\
|
||||
/obj/item/storage/toolbox/electrical = 3,\
|
||||
/obj/item/device/multitool = 3)
|
||||
|
||||
/obj/storage/secure/closet/engineering/welding
|
||||
name = "welding supplies locker"
|
||||
spawn_contents = list(/obj/item/clothing/head/helmet/welding = 3,\
|
||||
/obj/item/weldingtool = 3)
|
||||
|
||||
/obj/storage/secure/closet/engineering/mechanic
|
||||
name = "\improper Mechanic's locker"
|
||||
req_access = list(access_engineering_mechanic)
|
||||
spawn_contents = list(/obj/item/storage/toolbox/electrical,\
|
||||
/obj/item/clothing/under/rank/mechanic,\
|
||||
/obj/item/clothing/shoes/black,\
|
||||
/obj/item/clothing/gloves/yellow,\
|
||||
/obj/item/clothing/head/helmet/hardhat,\
|
||||
/obj/item/electronics/scanner,\
|
||||
/obj/item/clothing/glasses/meson,\
|
||||
/obj/item/electronics/soldering,\
|
||||
/obj/item/deconstructor,\
|
||||
/obj/item/device/radio/headset/engineer)
|
||||
|
||||
/obj/storage/secure/closet/engineering/atmos
|
||||
name = "\improper Atmospheric Technician's locker"
|
||||
req_access = list(access_engineering_atmos)
|
||||
spawn_contents = list(/obj/item/clothing/under/misc/atmospheric_technician,\
|
||||
/obj/item/clothing/suit/fire,\
|
||||
/obj/item/clothing/shoes/orange,\
|
||||
/obj/item/clothing/head/helmet/hardhat,\
|
||||
/obj/item/clothing/glasses/meson,\
|
||||
/obj/item/device/radio/headset/engineer)
|
||||
|
||||
/obj/storage/secure/closet/engineering/engineer
|
||||
name = "\improper Engineer's locker"
|
||||
req_access = list(access_engineering_engine)
|
||||
spawn_contents = list(/obj/item/storage/toolbox/mechanical,\
|
||||
/obj/item/clothing/under/rank/engineer,\
|
||||
/obj/item/clothing/shoes/orange,\
|
||||
/obj/item/clothing/mask/gas,\
|
||||
/obj/item/clothing/head/helmet/hardhat,\
|
||||
/obj/item/clothing/glasses/meson,\
|
||||
/obj/item/pen/infrared,\
|
||||
/obj/item/clothing/head/helmet/welding,\
|
||||
/obj/item/storage/belt/utility,\
|
||||
/obj/item/device/radio/headset/engineer)
|
||||
|
||||
/obj/storage/secure/closet/engineering/mining
|
||||
name = "\improper Miner's locker"
|
||||
req_access = list(access_mining)
|
||||
spawn_contents = list(/obj/item/breaching_charge/mining/light = 3,\
|
||||
/obj/item/satchel/mining = 2,\
|
||||
/obj/item/oreprospector,\
|
||||
/obj/item/ore_scoop,\
|
||||
/obj/item/mining_tool/power_pick,\
|
||||
/obj/item/clothing/glasses/meson,\
|
||||
/obj/item/storage/belt/mining,\
|
||||
/obj/item/device/radio/headset/engineer)
|
||||
|
||||
/* =================== */
|
||||
/* ----- Fridges ----- */
|
||||
/* =================== */
|
||||
|
||||
/obj/storage/secure/closet/fridge
|
||||
name = "refrigerator"
|
||||
icon_state = "fridge"
|
||||
icon_closed = "fridge"
|
||||
icon_opened = "fridge-open"
|
||||
icon_greenlight = "fridge-greenlight"
|
||||
icon_redlight = "fridge-redlight"
|
||||
icon_sparks = "fridge-sparks"
|
||||
|
||||
/obj/storage/secure/closet/fridge/kitchen
|
||||
spawn_contents = list(/obj/item/reagent_containers/food/drinks/cola,\
|
||||
/obj/item/reagent_containers/food/drinks/cola,\
|
||||
/obj/item/reagent_containers/food/snacks/ingredient/cheese = 6,\
|
||||
/obj/item/reagent_containers/food/drinks/milk = 5,\
|
||||
/obj/item/kitchen/food_box/egg_box = 2,\
|
||||
/obj/item/storage/box/donkpocket_kit,\
|
||||
/obj/item/storage/box/bacon_kit = 2)
|
||||
make_my_stuff()
|
||||
..()
|
||||
if (prob(25))
|
||||
for (var/i = rand(2,10), i > 0, i--)
|
||||
new /obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat/nugget(src)
|
||||
|
||||
/obj/item/paper/blood_fridge_note
|
||||
name = "paper- 'angry note'"
|
||||
info = "This fridge is for BLOOD PACKS <u>ONLY</u>! If I ever catch the idiot who keeps leaving their lunch in here, you're taking a one-way trip to the goddamn solarium!<br><br><i>L. Alliman</i><br>"
|
||||
|
||||
/obj/storage/secure/closet/fridge/blood
|
||||
name = "blood supply refrigerator"
|
||||
req_access = list(access_medical_lockers)
|
||||
spawn_contents = list(/obj/item/storage/box/iv_box,\
|
||||
/obj/item/reagent_containers/iv_drip/saline,\
|
||||
/obj/item/reagent_containers/iv_drip/blood = 5,\
|
||||
/obj/item/paper/blood_fridge_note)
|
||||
make_my_stuff()
|
||||
..()
|
||||
if (prob(11))
|
||||
new /obj/item/plate(src)
|
||||
var/obj/item/a_sandwich = pick(typesof(/obj/item/reagent_containers/food/snacks/sandwich))
|
||||
//a_sandwich.pixel_y = 0
|
||||
//a_sandwich.pixel_x = 0
|
||||
new a_sandwich(src)
|
||||
|
||||
/obj/storage/secure/closet/fridge/pathology
|
||||
name = "pathology lab fridge"
|
||||
req_access = list(access_medical_lockers)
|
||||
spawn_contents = list(/obj/item/reagent_containers/glass/vial/prepared = 10,
|
||||
/obj/item/reagent_containers/syringe/antiviral = 3)
|
||||
|
||||
/* ================ */
|
||||
/* ----- Misc ----- */
|
||||
/* ================ */
|
||||
|
||||
/obj/storage/secure/closet/courtroom
|
||||
name = "\improper Courtroom locker"
|
||||
req_access = list(access_heads)
|
||||
spawn_contents = list(/obj/item/clothing/shoes/brown,\
|
||||
/obj/item/paper/Court = 3,\
|
||||
/obj/item/pen,\
|
||||
/obj/item/clothing/suit/judgerobe,\
|
||||
/obj/item/clothing/head/powdered_wig,\
|
||||
/obj/item/clothing/under/misc/lawyer/red,\
|
||||
/obj/item/clothing/under/misc/lawyer,\
|
||||
/obj/item/clothing/under/misc/lawyer/black,\
|
||||
/obj/item/storage/briefcase)
|
||||
|
||||
/obj/storage/secure/closet/kitchen
|
||||
name = "kitchen cabinet"
|
||||
req_access = list(access_kitchen)
|
||||
spawn_contents = list(/obj/item/clothing/head/chefhat = 2,\
|
||||
/obj/item/clothing/under/rank/chef = 2,\
|
||||
/obj/item/kitchen/utensil/fork,\
|
||||
/obj/item/kitchen/utensil/knife,\
|
||||
/obj/item/kitchen/utensil/spoon,\
|
||||
/obj/item/kitchen/rollingpin,\
|
||||
/obj/item/reagent_containers/food/snacks/ingredient/spaghetti = 5)
|
||||
|
||||
/obj/storage/secure/closet/barber
|
||||
spawn_contents = list(/obj/item/clothing/under/misc/barber = 3,\
|
||||
/obj/item/clothing/head/wig = 2,\
|
||||
/obj/item/scissors,\
|
||||
/obj/item/razor_blade)
|
||||
@@ -0,0 +1,103 @@
|
||||
/obj/storage/secure/crate
|
||||
desc = "A secure crate."
|
||||
name = "Secure crate"
|
||||
icon_state = "securecrate"
|
||||
icon_opened = "securecrateopen"
|
||||
icon_closed = "securecrate"
|
||||
icon_redlight = "securecrater"
|
||||
icon_greenlight = "securecrateg"
|
||||
icon_sparks = "securecratesparks"
|
||||
//var/emag = "securecrateemag"
|
||||
density = 1
|
||||
always_display_locks = 1
|
||||
throwforce = 50
|
||||
can_flip_bust = 1
|
||||
|
||||
/obj/storage/secure/crate/weapon
|
||||
desc = "A secure weapons crate."
|
||||
name = "Weapons crate"
|
||||
icon_state = "weaponcrate"
|
||||
density = 1
|
||||
icon_opened = "weaponcrateopen"
|
||||
icon_closed = "weaponcrate"
|
||||
|
||||
confiscated_items
|
||||
name = "confiscated items crate"
|
||||
desc = "Secure storage for confiscated contraband."
|
||||
req_access = list(access_brig)
|
||||
|
||||
armory
|
||||
name = "secure weapons crate"
|
||||
req_access = list(access_maxsec)
|
||||
|
||||
tranquilizer
|
||||
name = "tranquilizer crate"
|
||||
spawn_contents = list(/obj/item/gun/kinetic/dart_rifle = 2,\
|
||||
/obj/item/ammo/bullets/tranq_darts = 2,\
|
||||
/obj/item/ammo/bullets/tranq_darts/anti_mutant)
|
||||
|
||||
phaser
|
||||
name = "phaser crate"
|
||||
spawn_contents = list(/obj/item/gun/energy/phaser_gun = 4)
|
||||
|
||||
shotgun
|
||||
name = "shotgun crate"
|
||||
spawn_contents = list(/obj/item/gun/kinetic/riotgun = 4,\
|
||||
/obj/item/ammo/bullets/abg = 4)
|
||||
|
||||
pod_weapons
|
||||
name = "pod weapons crate"
|
||||
spawn_contents = list(/obj/item/shipcomponent/mainweapon/disruptor_light = 2,\
|
||||
/obj/item/shipcomponent/mainweapon/laser = 2)
|
||||
|
||||
/obj/storage/secure/crate/plasma
|
||||
desc = "A secure plasma crate."
|
||||
name = "Plasma crate"
|
||||
icon_state = "plasmacrate"
|
||||
density = 1
|
||||
icon_opened = "plasmacrateopen"
|
||||
icon_closed = "plasmacrate"
|
||||
|
||||
armory
|
||||
name = "secure weapons crate"
|
||||
req_access = list(access_maxsec)
|
||||
|
||||
anti_biological
|
||||
name = "anti-biological crate"
|
||||
spawn_contents = list(/obj/item/storage/box/flaregun = 2,\
|
||||
/obj/item/flamethrower/loaded)
|
||||
|
||||
/obj/storage/secure/crate/gear
|
||||
desc = "A secure gear crate."
|
||||
name = "Gear crate"
|
||||
icon_state = "secgearcrate"
|
||||
density = 1
|
||||
icon_opened = "secgearcrateopen"
|
||||
icon_closed = "secgearcrate"
|
||||
|
||||
armory
|
||||
name = "secure weapons crate"
|
||||
req_access = list(access_maxsec)
|
||||
|
||||
grenades
|
||||
name = "special grenades crate"
|
||||
spawn_contents = list(/obj/item/storage/box/QM_grenadekit_security = 2,\
|
||||
/obj/item/storage/box/QM_grenadekit_experimentalweapons)
|
||||
|
||||
sarin_grenades
|
||||
name = "nerve agent crate (DANGER)"
|
||||
req_access = list(access_syndicate_shuttle)
|
||||
spawn_contents = list(/obj/item/reagent_containers/syringe/atropine = 3,\
|
||||
/obj/item/chem_grenade/sarin = 3)
|
||||
|
||||
/obj/storage/secure/crate/bee
|
||||
name = "Bee crate"
|
||||
desc = "A crate with a picture of a bee on it. Buzz."
|
||||
icon_state = "beecrate"
|
||||
density = 1
|
||||
icon_opened = "beecrateopen"
|
||||
icon_closed = "beecrate"
|
||||
|
||||
loaded
|
||||
req_access = list(access_hydro)
|
||||
spawn_contents = list(/obj/item/bee_egg_carton = 5)
|
||||
@@ -0,0 +1,226 @@
|
||||
|
||||
/obj/storage/closet/dresser
|
||||
name = "dresser"
|
||||
desc = "It's got room for all your fanciest or shabbiest outfits!"
|
||||
icon_state = "dresser"
|
||||
icon_closed = "dresser"
|
||||
icon_opened = "dresser-open"
|
||||
soundproofing = 10
|
||||
var/trick = 0 //enjoy some gimmicky bullfuckery
|
||||
var/id = null
|
||||
|
||||
/obj/storage/closet/wardrobe
|
||||
name = "wardrobe"
|
||||
desc = "It's a wardrobe closet! This one can be opened AND closed. Comes prestocked with some changes of clothes."
|
||||
soundproofing = 10
|
||||
|
||||
/* ==================== */
|
||||
/* ----- Standard ----- */
|
||||
/* ==================== */
|
||||
|
||||
/obj/storage/closet/wardrobe/black
|
||||
name = "black wardrobe"
|
||||
icon_state = "black"
|
||||
icon_closed = "black"
|
||||
spawn_contents = list(/obj/item/clothing/under/color = 4,
|
||||
/obj/item/clothing/shoes/black = 4,
|
||||
/obj/item/clothing/head/black = 2)
|
||||
|
||||
/obj/storage/closet/wardrobe/grey
|
||||
name = "grey wardrobe"
|
||||
icon_state = "grey"
|
||||
icon_closed = "grey"
|
||||
spawn_contents = list(/obj/item/clothing/under/color/grey = 4,
|
||||
/obj/item/clothing/shoes/black = 5)
|
||||
|
||||
/obj/storage/closet/wardrobe/white
|
||||
name = "white wardrobe"
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
spawn_contents = list(/obj/item/clothing/under/color/white = 4,
|
||||
/obj/item/clothing/shoes/brown = 4,
|
||||
/obj/item/clothing/head/white = 2)
|
||||
|
||||
/obj/storage/closet/wardrobe/pink
|
||||
name = "pink wardrobe"
|
||||
icon_state = "pink"
|
||||
icon_closed = "pink"
|
||||
spawn_contents = list(/obj/item/clothing/under/color/pink = 4,
|
||||
/obj/item/clothing/shoes/brown = 4)
|
||||
|
||||
/obj/storage/closet/wardrobe/red
|
||||
name = "red wardrobe"
|
||||
icon_state = "red"
|
||||
icon_closed = "red"
|
||||
spawn_contents = list(/obj/item/clothing/under/color/red = 4,
|
||||
/obj/item/clothing/shoes/brown = 4,
|
||||
/obj/item/clothing/head/red = 2)
|
||||
|
||||
/obj/storage/closet/wardrobe/orange
|
||||
name = "orange wardrobe"
|
||||
icon_state = "orange"
|
||||
icon_closed = "orange"
|
||||
spawn_contents = list(/obj/item/clothing/under/color/orange = 4,
|
||||
/obj/item/clothing/shoes/orange = 4)
|
||||
|
||||
/obj/storage/closet/wardrobe/yellow
|
||||
name = "yellow wardrobe"
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
spawn_contents = list(/obj/item/clothing/under/color/yellow = 4,
|
||||
/obj/item/clothing/shoes/orange = 4,
|
||||
/obj/item/clothing/head/yellow = 2)
|
||||
|
||||
/obj/storage/closet/wardrobe/green
|
||||
name = "green wardrobe"
|
||||
icon_state = "green"
|
||||
icon_closed = "green"
|
||||
spawn_contents = list(/obj/item/clothing/under/color/green = 4,
|
||||
/obj/item/clothing/shoes/black = 4,
|
||||
/obj/item/clothing/head/green = 2)
|
||||
|
||||
/obj/storage/closet/wardrobe/blue
|
||||
name = "blue wardrobe"
|
||||
icon_state = "blue"
|
||||
icon_closed = "blue"
|
||||
spawn_contents = list(/obj/item/clothing/under/color/blue = 4,
|
||||
/obj/item/clothing/shoes/brown = 4,
|
||||
/obj/item/clothing/head/blue = 2)
|
||||
|
||||
/obj/storage/closet/wardrobe/mixed
|
||||
name = "mixed wardrobe"
|
||||
icon_state = "mixed"
|
||||
icon_closed = "mixed"
|
||||
spawn_contents = list(/obj/item/clothing/under/color/blue = 2,
|
||||
/obj/item/clothing/under/color/pink = 2,
|
||||
/obj/item/clothing/shoes/brown = 4,
|
||||
/obj/item/clothing/head/blue,
|
||||
/obj/item/clothing/head/red)
|
||||
|
||||
/* =================== */
|
||||
/* ----- Special ----- */
|
||||
/* =================== */
|
||||
|
||||
/obj/storage/closet/wardrobe/black/chaplain
|
||||
name = "\improper Chaplain wardrobe"
|
||||
spawn_contents = list(/obj/item/clothing/under/rank/chaplain,
|
||||
/obj/item/clothing/under/misc/chaplain/atheist,
|
||||
/obj/item/clothing/under/misc/chaplain,
|
||||
/obj/item/clothing/under/misc/chaplain/rabbi,
|
||||
// drsingh is still not a real sihk
|
||||
/obj/item/clothing/under/misc/chaplain/siropa_robe,
|
||||
/obj/item/clothing/under/misc/chaplain/buddhist,
|
||||
/obj/item/clothing/under/misc/chaplain/muslim,
|
||||
/obj/item/clothing/suit/adeptus,
|
||||
/obj/item/clothing/head/rabbihat,
|
||||
/obj/item/clothing/head/formal_turban,
|
||||
/obj/item/clothing/head/turban,
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/clothing/shoes/sandal)
|
||||
|
||||
/obj/storage/closet/wardrobe/black/formalwear
|
||||
name = "formalwear closet"
|
||||
desc = "It's a closet! This one can be opened AND closed. Comes with formal clothes"
|
||||
spawn_contents = list(/obj/item/clothing/under/gimmick/maid,
|
||||
/obj/item/clothing/head/maid,
|
||||
/obj/item/clothing/under/gimmick/butler,
|
||||
/obj/item/clothing/head/that = 2,
|
||||
/obj/item/clothing/under/rank/bartender = 2,
|
||||
/obj/item/clothing/suit/wcoat = 2,
|
||||
/obj/item/clothing/shoes/black = 2)
|
||||
|
||||
/obj/storage/closet/wardrobe/yellow/engineering
|
||||
name = "\improper Engineering wardrobe"
|
||||
spawn_contents = list(/obj/item/clothing/under/rank/engineer = 4,
|
||||
/obj/item/clothing/shoes/orange = 4)
|
||||
|
||||
/obj/storage/closet/wardrobe/red/security_gimmick
|
||||
name = "\improper Security wardrobe"
|
||||
spawn_contents = list(/obj/item/clothing/shoes/brown = 4,
|
||||
/obj/item/clothing/under/color/red,
|
||||
/obj/item/clothing/under/gimmick/police,
|
||||
/obj/item/clothing/under/misc/head_of_security,
|
||||
/obj/item/clothing/under/misc/tourist,
|
||||
/obj/item/clothing/under/misc/tourist/max_payne,
|
||||
/obj/item/clothing/under/misc/serpico,
|
||||
/obj/item/clothing/head/serpico,
|
||||
/obj/item/clothing/head/red,
|
||||
/obj/item/clothing/head/flatcap,
|
||||
/obj/item/clothing/head/policecap,
|
||||
/obj/item/clothing/head/helmet/bobby)
|
||||
|
||||
/obj/storage/closet/wardrobe/white/medical
|
||||
name = "\improper Medical wardrobe"
|
||||
spawn_contents = list(/obj/item/clothing/under/rank/medical = 4,
|
||||
/obj/item/clothing/shoes/red = 4,
|
||||
/obj/item/storage/box/stma_kit,
|
||||
/obj/item/clothing/suit/labcoat = 3)
|
||||
|
||||
/obj/storage/closet/wardrobe/white/research
|
||||
name = "\improper Research wardrobe"
|
||||
spawn_contents = list(/obj/item/clothing/under/rank/scientist = 4,
|
||||
/obj/item/clothing/shoes/white = 4,
|
||||
/obj/item/storage/box/stma_kit,
|
||||
/obj/item/clothing/suit/labcoat = 4)
|
||||
|
||||
/obj/storage/closet/wardrobe/white/genetics
|
||||
name = "\improper Genetics wardrobe"
|
||||
spawn_contents = list(/obj/item/clothing/under/rank/geneticist = 4,
|
||||
/obj/item/clothing/shoes/white= 4,
|
||||
/obj/item/storage/box/stma_kit,
|
||||
/obj/item/clothing/suit/labcoat = 4)
|
||||
|
||||
/obj/storage/closet/dresser/random
|
||||
var/list/list_jump = list(/obj/item/clothing/under/color,
|
||||
/obj/item/clothing/under/color/grey,
|
||||
/obj/item/clothing/under/color/white,
|
||||
/obj/item/clothing/under/color/darkred,
|
||||
/obj/item/clothing/under/color/red,
|
||||
/obj/item/clothing/under/color/lightred,
|
||||
/obj/item/clothing/under/color/orange,
|
||||
/obj/item/clothing/under/color/brown,
|
||||
/obj/item/clothing/under/color/lightbrown,
|
||||
/obj/item/clothing/under/color/yellow,
|
||||
/obj/item/clothing/under/color/yellowgreen,
|
||||
/obj/item/clothing/under/color/lime,
|
||||
/obj/item/clothing/under/color/green,
|
||||
/obj/item/clothing/under/color/aqua,
|
||||
/obj/item/clothing/under/color/lightblue,
|
||||
/obj/item/clothing/under/color/blue,
|
||||
/obj/item/clothing/under/color/darkblue,
|
||||
/obj/item/clothing/under/color/purple,
|
||||
/obj/item/clothing/under/color/lightpurple,
|
||||
/obj/item/clothing/under/color/magenta,
|
||||
/obj/item/clothing/under/color/pink)
|
||||
var/list/list_shoe = list(/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/clothing/shoes/brown,
|
||||
/obj/item/clothing/shoes/red,
|
||||
/obj/item/clothing/shoes/orange,
|
||||
/obj/item/clothing/shoes/blue,
|
||||
/obj/item/clothing/shoes/pink)
|
||||
|
||||
make_my_stuff()
|
||||
..()
|
||||
for (var/i = 4, i > 0, i--)
|
||||
var/obj/item/clothing/under/color/JS = pick(src.list_jump)
|
||||
new JS(src)
|
||||
var/obj/item/clothing/shoes/SH = pick(src.list_shoe)
|
||||
new SH(src)
|
||||
|
||||
/obj/storage/closet/wardrobe/wizard
|
||||
name = "magical wardrobe"
|
||||
desc = "It's totally magic. It's got all sorts of magic in it. Not a regular wardrobe at all."
|
||||
icon_state = "syndicate"
|
||||
icon_closed = "syndicate"
|
||||
icon_opened = "syndicate-open"
|
||||
spawn_contents = list(/obj/item/staff = 4,
|
||||
/obj/item/staff/crystal = 2,
|
||||
/obj/item/clothing/suit/wizrobe/necro = 2,
|
||||
/obj/item/clothing/head/wizard/necro = 2,
|
||||
/obj/item/clothing/suit/wizrobe/purple = 2,
|
||||
/obj/item/clothing/head/wizard/purple = 2,
|
||||
/obj/item/clothing/suit/wizrobe/red = 2,
|
||||
/obj/item/clothing/head/wizard/red = 2,
|
||||
/obj/item/clothing/suit/wizrobe = 2,
|
||||
/obj/item/clothing/head/wizard = 2)
|
||||
Reference in New Issue
Block a user