mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 05:00:55 +01:00
# Conflicts: # .github/CODEOWNERS # .github/workflows/compile_changelogs.yml # .github/workflows/stale.yml # SQL/database_changelog.md # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # code/__DEFINES/atom_hud.dm # code/__DEFINES/inventory.dm # code/__DEFINES/mobs.dm # code/__DEFINES/species_clothing_paths.dm # code/__DEFINES/subsystems.dm # code/__DEFINES/surgery.dm # code/__HELPERS/global_lists.dm # code/_globalvars/lists/maintenance_loot.dm # code/_globalvars/traits/_traits.dm # code/controllers/subsystem/minor_mapping.dm # code/controllers/subsystem/processing/quirks.dm # code/controllers/subsystem/shuttle.dm # code/datums/components/palette.dm # code/datums/components/surgery_initiator.dm # code/datums/diseases/advance/advance.dm # code/datums/hud.dm # code/datums/mood.dm # code/datums/mutations/chameleon.dm # code/datums/quirks/negative_quirks/nyctophobia.dm # code/datums/status_effects/debuffs/debuffs.dm # code/datums/status_effects/debuffs/drunk.dm # code/datums/status_effects/debuffs/slime/slime_leech.dm # code/datums/weather/weather.dm # code/game/data_huds.dm # code/game/objects/items.dm # code/game/objects/items/devices/scanners/health_analyzer.dm # code/game/objects/items/frog_statue.dm # code/game/objects/items/rcd/RLD.dm # code/game/objects/items/robot/items/hypo.dm # code/game/objects/items/stacks/medical.dm # code/game/objects/items/stacks/wrap.dm # code/game/objects/items/storage/garment.dm # code/game/objects/items/tools/medical/defib.dm # code/game/objects/items/weaponry.dm # code/game/objects/items/weaponry/melee/misc.dm # code/game/objects/structures/crates_lockers/closets/secure/security.dm # code/game/objects/structures/curtains.dm # code/game/objects/structures/dresser.dm # code/game/objects/structures/girders.dm # code/game/objects/structures/maintenance.dm # code/game/objects/structures/mirror.dm # code/modules/admin/greyscale_modify_menu.dm # code/modules/admin/verbs/light_debug.dm # code/modules/antagonists/ashwalker/ashwalker.dm # code/modules/antagonists/heretic/knowledge/starting_lore.dm # code/modules/antagonists/ninja/ninjaDrainAct.dm # code/modules/art/paintings.dm # code/modules/client/preferences.dm # code/modules/client/verbs/ooc.dm # code/modules/clothing/head/wig.dm # code/modules/events/disease_outbreak.dm # code/modules/holodeck/holo_effect.dm # code/modules/jobs/job_types/head_of_security.dm # code/modules/jobs/job_types/security_officer.dm # code/modules/library/skill_learning/generic_skillchips/point.dm # code/modules/mining/lavaland/ash_flora.dm # code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm # code/modules/mob/dead/new_player/new_player.dm # code/modules/mob/living/basic/guardian/guardian.dm # code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm # code/modules/mob/living/carbon/carbon.dm # code/modules/mob/living/carbon/human/human.dm # code/modules/mob/living/carbon/human/human_defines.dm # code/modules/mob/living/carbon/life.dm # code/modules/mob/living/living.dm # code/modules/mob/living/living_defines.dm # code/modules/mob/mob.dm # code/modules/mob_spawn/ghost_roles/mining_roles.dm # code/modules/mod/mod_control.dm # code/modules/mod/modules/modules_general.dm # code/modules/modular_computers/computers/item/computer_ui.dm # code/modules/paperwork/paper.dm # code/modules/paperwork/paperbin.dm # code/modules/power/lighting/light.dm # code/modules/projectiles/guns/energy/kinetic_accelerator.dm # code/modules/projectiles/projectile.dm # code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm # code/modules/reagents/chemistry/reagents/food_reagents.dm # code/modules/reagents/chemistry/reagents/other_reagents.dm # code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm # code/modules/research/xenobiology/crossbreeding/_clothing.dm # code/modules/research/xenobiology/crossbreeding/prismatic.dm # code/modules/surgery/advanced/brainwashing.dm # code/modules/surgery/advanced/lobotomy.dm # code/modules/surgery/amputation.dm # code/modules/surgery/blood_filter.dm # code/modules/surgery/bodyparts/_bodyparts.dm # code/modules/surgery/brain_surgery.dm # code/modules/surgery/cavity_implant.dm # code/modules/surgery/coronary_bypass.dm # code/modules/surgery/gastrectomy.dm # code/modules/surgery/healing.dm # code/modules/surgery/limb_augmentation.dm # code/modules/surgery/organ_manipulation.dm # code/modules/surgery/revival.dm # code/modules/surgery/sleeper_protocol.dm # code/modules/surgery/surgery_helpers.dm # code/modules/surgery/surgery_step.dm # code/modules/unit_tests/_unit_tests.dm # code/modules/unit_tests/designs.dm # code/modules/unit_tests/icon_state_worn.dm # code/modules/unit_tests/screenshots/screenshot_antag_icons_cultist.png # code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png # code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png # code/modules/unit_tests/screenshots/screenshot_husk_body.png # code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png # icons/map_icons/clothing/head/_head.dmi # icons/map_icons/clothing/shoes.dmi # icons/map_icons/items/_item.dmi # icons/mob/huds/hud.dmi # icons/mob/inhands/64x64_lefthand.dmi # icons/mob/inhands/64x64_righthand.dmi # icons/obj/machines/computer.dmi # tgui/packages/tgui/interfaces/OperatingComputer.jsx # tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx # tgui/packages/tgui/interfaces/PreferencesMenu/types.ts # tgui/packages/tgui/interfaces/SurgeryInitiator.tsx # tools/icon_cutter/check.py
505 lines
16 KiB
Plaintext
505 lines
16 KiB
Plaintext
/obj/structure/closet/crate
|
|
name = "crate"
|
|
desc = "A rectangular steel crate."
|
|
icon = 'icons/obj/storage/crates.dmi'
|
|
icon_state = "crate"
|
|
base_icon_state = "crate"
|
|
req_access = null
|
|
horizontal = TRUE
|
|
allow_objects = TRUE
|
|
allow_dense = TRUE
|
|
dense_when_open = TRUE
|
|
delivery_icon = "deliverycrate"
|
|
open_sound = 'sound/machines/crate/crate_open.ogg'
|
|
close_sound = 'sound/machines/crate/crate_close.ogg'
|
|
open_sound_volume = 35
|
|
close_sound_volume = 50
|
|
drag_slowdown = 0
|
|
door_anim_time = 0 // no animation
|
|
pass_flags_self = PASSSTRUCTURE | LETPASSTHROW
|
|
x_shake_pixel_shift = 1
|
|
y_shake_pixel_shift = 2
|
|
/// Mobs standing on it are nudged up by this amount.
|
|
var/elevation = 14
|
|
/// The same, but when the crate is open
|
|
var/elevation_open = 14
|
|
/// The time spent to climb this crate.
|
|
var/crate_climb_time = 2 SECONDS
|
|
/// The reference of the manifest paper attached to the cargo crate.
|
|
var/datum/weakref/manifest
|
|
/// Where the Icons for lids are located.
|
|
var/lid_icon = 'icons/obj/storage/crates.dmi'
|
|
/// Icon state to use for lid to display when opened. Leave undefined if there isn't one.
|
|
var/lid_icon_state
|
|
/// Controls the X value of the lid, allowing left and right pixel movement.
|
|
var/lid_w = 0
|
|
/// Controls the Y value of the lid, allowing up and down pixel movement.
|
|
var/lid_z = 0
|
|
var/weld_w = 0
|
|
var/weld_z = 0
|
|
|
|
/obj/structure/closet/crate/Initialize(mapload)
|
|
AddElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0) //add element in closed state before parent init opens it(if it does)
|
|
if(elevation)
|
|
AddElement(/datum/element/climb_walkable)
|
|
AddElement(/datum/element/elevation, pixel_shift = elevation)
|
|
. = ..()
|
|
|
|
var/static/list/crate_paint_jobs
|
|
if(isnull(crate_paint_jobs))
|
|
crate_paint_jobs = list(
|
|
"Internals" = list("icon_state" = "o2crate"),
|
|
"Medical" = list("icon_state" = "medical"),
|
|
"Medical Plus" = list("icon_state" = "medicalcrate"),
|
|
"Radiation" = list("icon_state" = "radiation"),
|
|
"Hydrophonics" = list("icon_state" = "hydrocrate"),
|
|
"Science" = list("icon_state" = "scicrate"),
|
|
"Robotics" = list("icon_state" = "robo"),
|
|
"Solar" = list("icon_state" = "engi_e_crate"),
|
|
"Engineering" = list("icon_state" = "engi_crate"),
|
|
"Atmospherics" = list("icon_state" = "atmos"),
|
|
"Cargo" = list("icon_state" = "cargo"),
|
|
"Mining" = list("icon_state" = "mining"),
|
|
"Command" = list("icon_state" = "centcom"),
|
|
)
|
|
if(paint_jobs)
|
|
paint_jobs = crate_paint_jobs
|
|
AddComponent(/datum/component/soapbox)
|
|
|
|
/obj/structure/closet/crate/Destroy()
|
|
manifest = null
|
|
return ..()
|
|
|
|
/obj/structure/closet/crate/CanAllowThrough(atom/movable/mover, border_dir)
|
|
. = ..()
|
|
if(!istype(mover, /obj/structure/closet))
|
|
var/obj/structure/closet/crate/locatedcrate = locate(/obj/structure/closet/crate) in get_turf(mover)
|
|
if(locatedcrate) //you can walk on it like tables, if you're not in an open crate trying to move to a closed crate
|
|
if(opened) //if we're open, allow entering regardless of located crate openness
|
|
return TRUE
|
|
if(!locatedcrate.opened) //otherwise, if the located crate is closed, allow entering
|
|
return TRUE
|
|
|
|
/obj/structure/closet/crate/update_icon_state()
|
|
icon_state = "[isnull(base_icon_state) ? initial(icon_state) : base_icon_state][opened ? "open" : ""]"
|
|
return ..()
|
|
|
|
/obj/structure/closet/crate/closet_update_overlays(list/new_overlays)
|
|
. = new_overlays
|
|
if(manifest)
|
|
. += "manifest"
|
|
|
|
if(!opened)
|
|
if(broken)
|
|
. += "securecrateemag"
|
|
else if(locked)
|
|
. += "securecrater"
|
|
else if(secure)
|
|
. += "securecrateg"
|
|
|
|
if(welded)
|
|
var/mutable_appearance/weld_overlay = mutable_appearance(icon, "welded")
|
|
weld_overlay.pixel_w = weld_w
|
|
weld_overlay.pixel_z = weld_z
|
|
. += weld_overlay
|
|
|
|
if(opened && lid_icon_state)
|
|
var/mutable_appearance/lid = mutable_appearance(icon = lid_icon, icon_state = lid_icon_state)
|
|
lid.pixel_w = lid_w
|
|
lid.pixel_z = lid_z
|
|
lid.layer = layer
|
|
. += lid
|
|
|
|
/obj/structure/closet/crate/attack_hand(mob/user, list/modifiers)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
tear_manifest(user)
|
|
|
|
/obj/structure/closet/crate/after_open(mob/living/user, force)
|
|
. = ..()
|
|
RemoveElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0)
|
|
AddElement(/datum/element/climbable, climb_time = crate_climb_time * 0.5, climb_stun = 0)
|
|
if(elevation != elevation_open)
|
|
if(elevation)
|
|
RemoveElement(/datum/element/elevation, pixel_shift = elevation)
|
|
if(elevation_open)
|
|
AddElement(/datum/element/elevation, pixel_shift = elevation_open)
|
|
|
|
tear_manifest()
|
|
|
|
/obj/structure/closet/crate/after_close(mob/living/user)
|
|
. = ..()
|
|
RemoveElement(/datum/element/climbable, climb_time = crate_climb_time * 0.5, climb_stun = 0)
|
|
AddElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0)
|
|
if(elevation != elevation_open)
|
|
if(elevation_open)
|
|
RemoveElement(/datum/element/elevation, pixel_shift = elevation_open)
|
|
if(elevation)
|
|
AddElement(/datum/element/elevation, pixel_shift = elevation)
|
|
|
|
///Spawns two to six maintenance spawners inside the closet
|
|
/obj/structure/closet/proc/populate_with_random_maint_loot()
|
|
SIGNAL_HANDLER
|
|
|
|
for (var/i in 1 to rand(2,6))
|
|
new /obj/effect/spawner/random/maintenance(src)
|
|
|
|
UnregisterSignal(src, COMSIG_CLOSET_CONTENTS_INITIALIZED)
|
|
|
|
///Removes the supply manifest from the closet
|
|
/obj/structure/closet/crate/proc/tear_manifest(mob/user)
|
|
var/obj/item/paper/fluff/jobs/cargo/manifest/our_manifest = manifest?.resolve()
|
|
if(QDELETED(our_manifest))
|
|
manifest = null
|
|
return
|
|
if(user)
|
|
to_chat(user, span_notice("You tear the manifest off of [src]."))
|
|
playsound(src, 'sound/items/poster/poster_ripped.ogg', 75, TRUE)
|
|
|
|
our_manifest.forceMove(drop_location(src))
|
|
if(ishuman(user))
|
|
user.put_in_hands(our_manifest)
|
|
manifest = null
|
|
update_appearance()
|
|
|
|
/obj/structure/closet/crate/preopen
|
|
opened = TRUE
|
|
icon_state = "crateopen"
|
|
|
|
/obj/structure/closet/crate/coffin
|
|
name = "coffin"
|
|
desc = "It's a burial receptacle for the dearly departed."
|
|
icon_state = "coffin"
|
|
base_icon_state = "coffin"
|
|
resistance_flags = FLAMMABLE
|
|
max_integrity = 70
|
|
material_drop = /obj/item/stack/sheet/mineral/wood
|
|
material_drop_amount = 5
|
|
open_sound = 'sound/machines/closet/wooden_closet_open.ogg'
|
|
close_sound = 'sound/machines/closet/wooden_closet_close.ogg'
|
|
open_sound_volume = 25
|
|
close_sound_volume = 50
|
|
can_install_electronics = FALSE
|
|
paint_jobs = null
|
|
elevation_open = 0
|
|
can_weld_shut = FALSE
|
|
custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT * 5)
|
|
|
|
/obj/structure/closet/crate/trashcart //please make this a generic cart path later after things calm down a little
|
|
desc = "A heavy, metal trashcart with wheels."
|
|
name = "trash cart"
|
|
icon_state = "trashcart"
|
|
base_icon_state = "trashcart"
|
|
can_install_electronics = FALSE
|
|
paint_jobs = null
|
|
weld_z = 5
|
|
|
|
/obj/structure/closet/crate/trashcart/laundry
|
|
name = "laundry cart"
|
|
desc = "A large cart for hauling around large amounts of laundry."
|
|
icon_state = "laundry"
|
|
base_icon_state = "laundry"
|
|
elevation = 14
|
|
elevation_open = 14
|
|
can_weld_shut = FALSE
|
|
|
|
/obj/structure/closet/crate/trashcart/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/swabable, CELL_LINE_TABLE_SLUDGE, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 15)
|
|
AddElement(/datum/element/noisy_movement)
|
|
|
|
/obj/structure/closet/crate/trashcart/filled
|
|
|
|
/obj/structure/closet/crate/trashcart/filled/Initialize(mapload)
|
|
. = ..()
|
|
if(mapload)
|
|
new /obj/effect/spawner/random/trash/grime(loc) //needs to be done before the trashcart is opened because it spawns things in a range outside of the trashcart
|
|
|
|
/obj/structure/closet/crate/trashcart/filled/PopulateContents()
|
|
. = ..()
|
|
for(var/i in 1 to rand(7,15))
|
|
new /obj/effect/spawner/random/trash/garbage(src)
|
|
if(prob(12))
|
|
new /obj/item/storage/bag/trash/filled(src)
|
|
|
|
/obj/structure/closet/crate/internals
|
|
desc = "An internals crate."
|
|
name = "internals crate"
|
|
icon_state = "o2crate"
|
|
base_icon_state = "o2crate"
|
|
|
|
/obj/structure/closet/crate/medical
|
|
desc = "A medical crate."
|
|
name = "medical crate"
|
|
icon_state = "medicalcrate"
|
|
base_icon_state = "medicalcrate"
|
|
|
|
/obj/structure/closet/crate/deforest
|
|
name = "deforest medical crate"
|
|
desc = "A DeForest brand crate of medical supplies."
|
|
icon_state = "deforest"
|
|
base_icon_state = "deforest"
|
|
|
|
/obj/structure/closet/crate/medical/department
|
|
icon_state = "medical"
|
|
base_icon_state = "medical"
|
|
|
|
/obj/structure/closet/crate/freezer
|
|
desc = "A freezer."
|
|
name = "freezer"
|
|
icon_state = "freezer"
|
|
base_icon_state = "freezer"
|
|
paint_jobs = null
|
|
sealed = TRUE
|
|
/// The rate at which the internal air mixture cools
|
|
var/cooling_rate_per_second = 4
|
|
/// Minimum temperature of the internal air mixture
|
|
var/minimum_temperature = T0C - 60
|
|
|
|
/obj/structure/closet/crate/freezer/process_internal_air(seconds_per_tick)
|
|
if(opened)
|
|
var/datum/gas_mixture/current_exposed_air = loc.return_air()
|
|
if(!current_exposed_air)
|
|
return
|
|
// The internal air won't cool down the external air when the freezer is opened.
|
|
internal_air.temperature = max(current_exposed_air.temperature, internal_air.temperature)
|
|
return ..()
|
|
else
|
|
if(internal_air.temperature <= minimum_temperature)
|
|
return
|
|
var/temperature_decrease_this_tick = min(cooling_rate_per_second * seconds_per_tick, internal_air.temperature - minimum_temperature)
|
|
internal_air.temperature -= temperature_decrease_this_tick
|
|
|
|
/obj/structure/closet/crate/freezer/blood
|
|
name = "blood freezer"
|
|
desc = "A freezer containing packs of blood."
|
|
|
|
/obj/structure/closet/crate/freezer/blood/PopulateContents()
|
|
. = ..()
|
|
new /obj/item/reagent_containers/blood(src)
|
|
new /obj/item/reagent_containers/blood(src)
|
|
new /obj/item/reagent_containers/blood/a_minus(src)
|
|
new /obj/item/reagent_containers/blood/b_minus(src)
|
|
new /obj/item/reagent_containers/blood/b_plus(src)
|
|
new /obj/item/reagent_containers/blood/o_minus(src)
|
|
new /obj/item/reagent_containers/blood/o_plus(src)
|
|
new /obj/item/reagent_containers/blood/lizard(src)
|
|
new /obj/item/reagent_containers/blood/ethereal(src)
|
|
for(var/i in 1 to 3)
|
|
new /obj/item/reagent_containers/blood/random(src)
|
|
new /obj/item/paper/fluff/jobs/medical/blood_types(src)
|
|
|
|
/obj/structure/closet/crate/freezer/surplus_limbs
|
|
name = "surplus prosthetic limbs"
|
|
desc = "A crate containing an assortment of cheap prosthetic limbs."
|
|
|
|
/obj/structure/closet/crate/freezer/surplus_limbs/PopulateContents()
|
|
. = ..()
|
|
new /obj/item/bodypart/arm/left/robot/surplus(src)
|
|
new /obj/item/bodypart/arm/left/robot/surplus(src)
|
|
new /obj/item/bodypart/arm/right/robot/surplus(src)
|
|
new /obj/item/bodypart/arm/right/robot/surplus(src)
|
|
new /obj/item/bodypart/leg/left/robot/surplus(src)
|
|
new /obj/item/bodypart/leg/left/robot/surplus(src)
|
|
new /obj/item/bodypart/leg/right/robot/surplus(src)
|
|
new /obj/item/bodypart/leg/right/robot/surplus(src)
|
|
|
|
/obj/structure/closet/crate/freezer/organ
|
|
name = "organ freezer"
|
|
desc = "A freezer containing a set of organic organs."
|
|
|
|
/obj/structure/closet/crate/freezer/organ/PopulateContents()
|
|
. = ..()
|
|
new /obj/item/organ/heart(src)
|
|
new /obj/item/organ/lungs(src)
|
|
new /obj/item/organ/eyes(src)
|
|
new /obj/item/organ/ears(src)
|
|
new /obj/item/organ/tongue(src)
|
|
new /obj/item/organ/liver(src)
|
|
new /obj/item/organ/stomach(src)
|
|
new /obj/item/organ/appendix(src)
|
|
|
|
/obj/structure/closet/crate/freezer/food
|
|
name = "food icebox"
|
|
icon_state = "food"
|
|
base_icon_state = "food"
|
|
|
|
/obj/structure/closet/crate/freezer/donk
|
|
name = "\improper Donk Co. fridge"
|
|
desc = "A Donk Co. brand fridge, keeps your donkpockets and foam ammunition fresh!"
|
|
icon_state = "donkcocrate"
|
|
base_icon_state = "donkcocrate"
|
|
|
|
/obj/structure/closet/crate/self
|
|
name = "\improper S.E.L.F. crate"
|
|
desc = "A robust-looking crate with a seemingly decorative holographic display. The front of the crate proudly declares its allegiance to the notorious terrorist group 'S.E.L.F'."
|
|
icon_state = "selfcrate"
|
|
base_icon_state = "selfcrate"
|
|
|
|
/obj/structure/closet/crate/radiation
|
|
desc = "A crate with a radiation sign on it."
|
|
name = "radiation crate"
|
|
icon_state = "radiation"
|
|
base_icon_state = "radiation"
|
|
|
|
/obj/structure/closet/crate/hydroponics
|
|
name = "hydroponics crate"
|
|
desc = "All you need to destroy those pesky weeds and pests."
|
|
icon_state = "hydrocrate"
|
|
base_icon_state = "hydrocrate"
|
|
|
|
/obj/structure/closet/crate/centcom
|
|
name = "centcom crate"
|
|
icon_state = "centcom"
|
|
base_icon_state = "centcom"
|
|
|
|
/obj/structure/closet/crate/cargo
|
|
name = "cargo crate"
|
|
icon_state = "cargo"
|
|
base_icon_state = "cargo"
|
|
|
|
/obj/structure/closet/crate/robust
|
|
name = "robust industries crate"
|
|
desc = "Robust Industries LLC. crate. Feels oddly nostalgic."
|
|
icon_state = "robust"
|
|
base_icon_state = "robust"
|
|
|
|
/obj/structure/closet/crate/cargo/mining
|
|
name = "mining crate"
|
|
icon_state = "mining"
|
|
base_icon_state = "mining"
|
|
|
|
/obj/structure/closet/crate/engineering
|
|
name = "engineering crate"
|
|
icon_state = "engi_crate"
|
|
base_icon_state = "engi_crate"
|
|
|
|
|
|
/obj/structure/closet/crate/nakamura
|
|
name = "nakamura engineering crate"
|
|
desc = "Crate from Nakamura Engineering, most likely containing engineering supplies or MODcores."
|
|
icon_state = "nakamura"
|
|
base_icon_state = "nakamura"
|
|
|
|
|
|
/obj/structure/closet/crate/engineering/electrical
|
|
icon_state = "engi_e_crate"
|
|
base_icon_state = "engi_e_crate"
|
|
|
|
/obj/structure/closet/crate/engineering/atmos
|
|
name = "atmospherics crate"
|
|
icon_state = "atmos"
|
|
base_icon_state = "atmos"
|
|
|
|
/obj/structure/closet/crate/rcd
|
|
desc = "A crate for the storage of an RCD."
|
|
name = "\improper RCD crate"
|
|
icon_state = "engi_crate"
|
|
base_icon_state = "engi_crate"
|
|
|
|
/obj/structure/closet/crate/rcd/PopulateContents()
|
|
..()
|
|
for(var/i in 1 to 4)
|
|
new /obj/item/rcd_ammo(src)
|
|
new /obj/item/construction/rcd(src)
|
|
|
|
/obj/structure/closet/crate/science
|
|
name = "science crate"
|
|
desc = "A science crate."
|
|
icon_state = "scicrate"
|
|
base_icon_state = "scicrate"
|
|
|
|
/obj/structure/closet/crate/science/robo
|
|
name = "robotics crate"
|
|
icon_state = "robo"
|
|
base_icon_state = "robo"
|
|
|
|
/obj/structure/closet/crate/mod
|
|
name = "MOD crate"
|
|
icon_state = "robo"
|
|
base_icon_state = "robo"
|
|
|
|
/obj/structure/closet/crate/mod/PopulateContents()
|
|
..()
|
|
for(var/i in 1 to 3)
|
|
new /obj/item/mod/core/standard(src)
|
|
for(var/i in 1 to 2)
|
|
new /obj/item/clothing/neck/link_scryer/loaded(src)
|
|
|
|
/obj/structure/closet/crate/solarpanel_small
|
|
name = "budget solar panel crate"
|
|
icon_state = "engi_e_crate"
|
|
base_icon_state = "engi_e_crate"
|
|
|
|
/obj/structure/closet/crate/solarpanel_small/PopulateContents()
|
|
..()
|
|
for(var/i in 1 to 13)
|
|
new /obj/item/solar_assembly(src)
|
|
new /obj/item/circuitboard/computer/solar_control(src)
|
|
new /obj/item/paper/guides/jobs/engi/solars(src)
|
|
new /obj/item/electronics/tracker(src)
|
|
|
|
/obj/structure/closet/crate/goldcrate
|
|
name = "gold crate"
|
|
desc = "A rectangular steel crate. It seems to be painted to look like gold."
|
|
icon_state = "gold"
|
|
base_icon_state = "gold"
|
|
|
|
/obj/structure/closet/crate/goldcrate/PopulateContents()
|
|
..()
|
|
new /obj/item/storage/belt/champion(src)
|
|
|
|
/obj/structure/closet/crate/goldcrate/populate_contents_immediate()
|
|
. = ..()
|
|
|
|
for(var/i in 1 to 3)
|
|
new /obj/item/stack/sheet/mineral/gold(src, 1, FALSE)
|
|
|
|
/obj/structure/closet/crate/silvercrate
|
|
name = "silver crate"
|
|
desc = "A rectangular steel crate. It seems to be painted to look like silver."
|
|
icon_state = "silver"
|
|
base_icon_state = "silver"
|
|
|
|
/obj/structure/closet/crate/silvercrate/PopulateContents()
|
|
..()
|
|
for(var/i in 1 to 5)
|
|
new /obj/item/coin/silver(src)
|
|
|
|
/obj/structure/closet/crate/decorations
|
|
icon_state = "engi_crate"
|
|
base_icon_state = "engi_crate"
|
|
|
|
/obj/structure/closet/crate/decorations/PopulateContents()
|
|
. = ..()
|
|
for(var/i in 1 to 4)
|
|
new /obj/effect/spawner/random/decoration/generic(src)
|
|
|
|
/obj/structure/closet/crate/add_to_roundstart_list()
|
|
return
|
|
|
|
/obj/structure/closet/crate/glitter
|
|
name = "pink crate"
|
|
desc = "A glittery pink crate."
|
|
icon_state = "pink"
|
|
base_icon_state = "pink"
|
|
var/glitter_prob = 25
|
|
var/glitter_color = "#ff8080"
|
|
|
|
/obj/structure/closet/crate/glitter/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
|
|
. = ..()
|
|
|
|
var/turf/old_turf = get_turf(old_loc)
|
|
if(!old_turf)
|
|
return
|
|
if(prob(glitter_prob))
|
|
old_turf.spawn_glitter(list("[glitter_color]" = 100))
|
|
|
|
/obj/structure/closet/crate/glitter/lavender
|
|
name = "lavender crate"
|
|
desc = "A glittery purple... no, lavender crate."
|
|
icon_state = "lavender"
|
|
base_icon_state = "lavender"
|
|
glitter_color = "#db80ff"
|