Part 3: Storage Improvements (#90476)

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
This commit is contained in:
SyncIt21
2025-04-20 17:32:29 +05:30
committed by GitHub
parent 9734550d3c
commit 9bd45e2f3a
66 changed files with 2009 additions and 1611 deletions

View File

@@ -499,14 +499,7 @@
icon_state = "skubpack"
illustration = "label_skub"
w_class = WEIGHT_CLASS_SMALL
/obj/item/storage/box/stickers/skub/Initialize(mapload)
. = ..()
atom_storage.max_slots = 3
atom_storage.set_holdable(exception_hold_list = list(
/obj/item/skub,
/obj/item/clothing/suit/costume/wellworn_shirt/skub,
))
storage_type = /datum/storage/box/skub
/obj/item/storage/box/stickers/skub/PopulateContents()
new /obj/item/skub(src)
@@ -518,10 +511,7 @@
desc = "The enemy may have been given a skub and a shirt, but I've got more stickers! Plus the pack can hold my anti-skub shirt."
icon_state = "skubpack"
illustration = "label_anti_skub"
/obj/item/storage/box/stickers/anti_skub/Initialize(mapload)
. = ..()
atom_storage.set_holdable(exception_hold_list = /obj/item/clothing/suit/costume/wellworn_shirt/skub)
storage_type = /datum/storage/box/anti_skub
/obj/item/storage/box/stickers/anti_skub/PopulateContents()
for(var/i in 1 to 4)

View File

@@ -1,18 +0,0 @@
/datum/storage/backpack
max_total_storage = 21
max_slots = 21
/datum/storage/backpack/New(
atom/parent,
max_slots,
max_specific_storage,
max_total_storage,
)
. = ..()
set_holdable(exception_hold_list = /obj/item/fish_tank)
/datum/storage/backpack/santabag
max_total_storage = 60
max_slots = 21
max_specific_storage = WEIGHT_CLASS_NORMAL

View File

@@ -0,0 +1,29 @@
///Regular backpack
/datum/storage/backpack
max_total_storage = 21
max_slots = 21
/datum/storage/backpack/New(
atom/parent,
max_slots,
max_specific_storage,
max_total_storage,
)
. = ..()
set_holdable(exception_hold_list = /obj/item/fish_tank)
///Saddle backpack
/datum/storage/backpack/saddle
max_total_storage = 26
///Satchel flat
/datum/storage/backpack/satchel_flat
max_total_storage = 15
/datum/storage/backpack/satchel_flat/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(cant_hold_list = /obj/item/storage/backpack/satchel/flat) //muh recursive backpacks
///Santa bag
/datum/storage/backpack/santabag
max_total_storage = 60

View File

@@ -0,0 +1,317 @@
///Normal bag
/datum/storage/bag
allow_quick_gather = TRUE
allow_quick_empty = TRUE
numerical_stacking = TRUE
///Trash Bag
/datum/storage/bag/trash
max_specific_storage = WEIGHT_CLASS_SMALL
max_total_storage = 30
max_slots = 30
supports_smart_equip = FALSE
/datum/storage/bag/trash/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(cant_hold_list = /obj/item/disk/nuclear)
/datum/storage/bag/trash/remove_single(mob/removing, obj/item/thing, atom/remove_to_loc, silent)
real_location.visible_message(
span_notice("[removing] starts fishing around inside [parent]."),
span_notice("You start digging around in [parent] to try and pull something out."),
)
if(!do_after(removing, 1.5 SECONDS, parent))
return FALSE
return ..()
///Bluespace trash bag
/datum/storage/bag/trash/bluespace
max_total_storage = 60
max_slots = 60
///Ore Bag
/datum/storage/bag/ore
max_specific_storage = WEIGHT_CLASS_HUGE
max_total_storage = 50
silent_for_user = TRUE
/datum/storage/bag/ore/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/stack/ore)
///Ore bag of holding
/datum/storage/bag/ore/holding
max_slots = INFINITY
max_specific_storage = INFINITY
max_total_storage = INFINITY
///Plant bag
/datum/storage/bag/plants
max_total_storage = 100
max_slots = 100
/datum/storage/bag/plants/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/food/grown,
/obj/item/graft,
/obj/item/grown,
/obj/item/food/honeycomb,
/obj/item/seeds,
))
///Sheet snatcher bag
/datum/storage/bag/sheet_snatcher
max_total_storage = 150
/datum/storage/bag/sheet_snatcher/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(
can_hold_list = /obj/item/stack/sheet,
cant_hold_list = list(
/obj/item/stack/sheet/mineral/sandstone,
/obj/item/stack/sheet/mineral/wood,
),
)
///Borg sheet snatcher bag
/datum/storage/bag/sheet_snatcher/borg
max_total_storage = 250
///Debug sheet snatcher bag
/datum/storage/bag/sheet_snatcher_debug
allow_big_nesting = TRUE
max_slots = 99
max_specific_storage = WEIGHT_CLASS_GIGANTIC
max_total_storage = 5000
/datum/storage/bag/sheet_snatcher_debug/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/stack/sheet,
/obj/item/stack/sheet/mineral/sandstone,
/obj/item/stack/sheet/mineral/wood,
))
///Book bag
/datum/storage/bag/books
max_total_storage = 21
max_slots = 7
/datum/storage/bag/books/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/book,
/obj/item/spellbook,
/obj/item/poster,
))
///Tray bag
/datum/storage/bag/tray
max_specific_storage = WEIGHT_CLASS_BULKY //Plates are required bulky to keep them out of backpacks
insert_preposition = "on"
max_slots = 8
max_total_storage = 16
/datum/storage/bag/tray/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(
can_hold_list = list(
/obj/item/cigarette,
/obj/item/food,
/obj/item/kitchen,
/obj/item/lighter,
/obj/item/organ,
/obj/item/plate,
/obj/item/reagent_containers/condiment,
/obj/item/reagent_containers/cup,
/obj/item/rollingpaper,
/obj/item/storage/box/gum,
/obj/item/storage/box/matches,
/obj/item/storage/fancy,
/obj/item/trash,
),
cant_hold_list = list(
/obj/item/plate/oven_tray,
/obj/item/reagent_containers/cup/soup_pot,
),
) //Should cover: Bottles, Beakers, Bowls, Booze, Glasses, Food, Food Containers, Food Trash, Organs, Tobacco Products, Lighters, and Kitchen Tools.
///Chemistry bag
/datum/storage/bag/chemistry
max_total_storage = 200
max_slots = 50
/datum/storage/bag/chemistry/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/reagent_containers/chem_pack,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/glass/waterbottle,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/medigel,
/obj/item/reagent_containers/applicator,
/obj/item/reagent_containers/syringe,
))
///Bio bag
/datum/storage/bag/bio
max_total_storage = 200
max_slots = 25
/datum/storage/bag/bio/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/bodypart,
/obj/item/food/monkeycube,
/obj/item/healthanalyzer,
/obj/item/organ,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/hypospray/medipen,
/obj/item/reagent_containers/syringe,
))
///Xeno bag
/datum/storage/bag/xeno
max_total_storage = 200
max_slots = 25
/datum/storage/bag/xeno/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/bodypart,
/obj/item/food/deadmouse,
/obj/item/food/monkeycube,
/obj/item/organ,
/obj/item/petri_dish,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/syringe,
/obj/item/slime_extract,
/obj/item/swab,
))
///Construction bag
/datum/storage/bag/construction
max_total_storage = 100
max_slots = 50
max_specific_storage = WEIGHT_CLASS_SMALL
/datum/storage/bag/construction/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/assembly,
/obj/item/circuitboard,
/obj/item/electronics,
/obj/item/reagent_containers/cup/beaker,
/obj/item/stack/cable_coil,
/obj/item/stack/ore/bluespace_crystal,
/obj/item/stock_parts,
/obj/item/wallframe/camera,
))
///Harpoon quiver bag
/datum/storage/bag/harpoon_quiver
max_specific_storage = WEIGHT_CLASS_TINY
max_slots = 40
max_total_storage = 100
/datum/storage/bag/harpoon_quiver/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/ammo_casing/harpoon)
///Rebar quiber bag
/datum/storage/bag/rebar_quiver
max_specific_storage = WEIGHT_CLASS_TINY
max_slots = 10
max_total_storage = 15
/datum/storage/bag/rebar_quiver/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/ammo_casing/rebar,
))
///Syndicate rebar quiver bag
/datum/storage/bag/rebar_quiver/syndicate
max_slots = 20
max_total_storage = 20
///Mail bag
/datum/storage/bag/mail
max_total_storage = 42
max_slots = 21
numerical_stacking = FALSE
/datum/storage/bag/mail/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/mail,
/obj/item/delivery/small,
/obj/item/paper
))
///Garment bag
/datum/storage/bag/garment
numerical_stacking = FALSE
max_total_storage = 200
max_slots = 15
insert_preposition = "in"
/datum/storage/bag/garment/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/clothing)
///Quiver bag
/datum/storage/bag/quiver
max_specific_storage = WEIGHT_CLASS_TINY
max_slots = 40
max_total_storage = 100
/datum/storage/bag/quiver/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/ammo_casing/arrow)
///Quiver bag less
/datum/storage/bag/quiver/less
max_slots = 10
///Quiver bag endless
/datum/storage/bag/quiver/endless
max_slots = 1
/datum/storage/bag/quiver/endless/handle_exit(datum/source, obj/item/gone)
. = ..()
var/obj/item/storage/bag/quiver/endless/store = real_location
new store.arrow_path(store)
///Money bag
/datum/storage/bag/money
max_slots = 40
max_specific_storage = 40
/datum/storage/bag/money/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/coin,
/obj/item/stack/spacecash,
/obj/item/holochip
))
///Fishing bag
/datum/storage/bag/fishing
max_total_storage = 24 // Up to 8 normal fish
max_slots = 21
/datum/storage/bag/fishing/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/fish)

View File

@@ -0,0 +1,338 @@
///Utility belt
/datum/storage/utility_belt
max_total_storage = 21
/datum/storage/utility_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(GLOB.tool_items + list(
/obj/item/clothing/gloves,
/obj/item/radio,
/obj/item/melee/sickly_blade/lock,
/obj/item/reagent_containers/cup/soda_cans,
))
///Medical belt
/datum/storage/medical_belt
max_total_storage = 21
/datum/storage/medical_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/bikehorn/rubberducky,
/obj/item/blood_filter,
/obj/item/bonesetter,
/obj/item/cautery,
/obj/item/circular_saw,
/obj/item/clothing/glasses,
/obj/item/clothing/gloves,
/obj/item/clothing/neck/stethoscope,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/muzzle,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/head/utility/surgerycap,
/obj/item/construction/plumbing,
/obj/item/dnainjector,
/obj/item/extinguisher/mini,
/obj/item/flashlight/pen,
/obj/item/geiger_counter,
/obj/item/gun/syringe/syndicate,
/obj/item/healthanalyzer,
/obj/item/hemostat,
/obj/item/holosign_creator/medical,
/obj/item/implant,
/obj/item/implantcase,
/obj/item/implanter,
/obj/item/lazarus_injector,
/obj/item/lighter,
/obj/item/pinpointer/crew,
/obj/item/plunger,
/obj/item/radio,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/hypospray,
/obj/item/reagent_containers/medigel,
/obj/item/reagent_containers/applicator,
/obj/item/reagent_containers/spray,
/obj/item/reagent_containers/syringe,
/obj/item/retractor,
/obj/item/scalpel,
/obj/item/shears,
/obj/item/stack/medical,
/obj/item/stack/sticky_tape, //surgical tape
/obj/item/stamp,
/obj/item/sensor_device,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/surgical_drapes, //for true paramedics
/obj/item/surgicaldrill,
/obj/item/tank/internals/emergency_oxygen,
/obj/item/wrench/medical,
/obj/item/knife/ritual,
/obj/item/flesh_shears,
))
///Security belt
/datum/storage/security_belt
max_slots = 5
open_sound = 'sound/items/handling/holster_open.ogg'
open_sound_vary = TRUE
rustle_sound = null
/datum/storage/security_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/ammo_box,
/obj/item/ammo_casing/shotgun,
/obj/item/assembly/flash/handheld,
/obj/item/clothing/glasses,
/obj/item/clothing/gloves,
/obj/item/flashlight/seclite,
/obj/item/food/donut,
/obj/item/grenade,
/obj/item/holosign_creator/security,
/obj/item/knife/combat,
/obj/item/melee/baton,
/obj/item/radio,
/obj/item/reagent_containers/spray/pepper,
/obj/item/restraints/handcuffs,
/obj/item/restraints/legcuffs/bola,
))
///Webbing security belt
/datum/storage/security_belt/webbing
max_slots = 6
///Mining belt
/datum/storage/mining_belt
max_slots = 6
max_total_storage = 20
/datum/storage/mining_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/analyzer,
/obj/item/clothing/gloves,
/obj/item/crowbar,
/obj/item/extinguisher/mini,
/obj/item/flashlight,
/obj/item/gps,
/obj/item/mining_stabilizer,
/obj/item/key/lasso,
/obj/item/knife,
/obj/item/lighter,
/obj/item/mining_scanner,
/obj/item/multitool,
/obj/item/organ/monster_core,
/obj/item/pickaxe,
/obj/item/radio,
/obj/item/reagent_containers/cup/glass,
/obj/item/reagent_containers/cup/glass/bottle,
/obj/item/reagent_containers/hypospray,
/obj/item/reagent_containers/applicator/pill,
/obj/item/resonator,
/obj/item/screwdriver,
/obj/item/shovel,
/obj/item/stack/cable_coil,
/obj/item/stack/marker_beacon,
/obj/item/stack/medical,
/obj/item/stack/ore,
/obj/item/stack/sheet/animalhide,
/obj/item/stack/sheet/bone,
/obj/item/stack/sheet/sinew,
/obj/item/storage/bag/ore,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/survivalcapsule,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/weldingtool,
/obj/item/wirecutters,
/obj/item/wrench,
/obj/item/wormhole_jaunter,
/obj/item/skeleton_key,
))
///Primitive mining belt
/datum/storage/mining_belt/primitive
max_slots = 5
///Soulstone belt
/datum/storage/soulstone_belt
max_slots = 6
/datum/storage/soulstone_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/soulstone)
///Champion belt
/datum/storage/champion_belt
max_slots = 1
/datum/storage/champion_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/clothing/mask/luchador)
///Military belt
/datum/storage/military_belt
max_specific_storage = WEIGHT_CLASS_SMALL
///Military snack belt
/datum/storage/military_belt/snack
max_slots = 6
/datum/storage/military_belt/snack/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/food,
/obj/item/reagent_containers/cup/glass,
))
///Military assault belt
/datum/storage/military_belt/assault
max_slots = 6
///Grenade belt
/datum/storage/grenade_belt
max_slots = 30
numerical_stacking = TRUE
max_total_storage = 60
max_specific_storage = WEIGHT_CLASS_BULKY
/datum/storage/grenade_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/food/grown/cherry_bomb,
/obj/item/food/grown/firelemon,
/obj/item/grenade,
/obj/item/grenade/c4,
/obj/item/lighter,
/obj/item/multitool,
/obj/item/reagent_containers/cup/glass/bottle/molotov,
/obj/item/screwdriver,
))
///Wands belt
/datum/storage/wands_belt
max_slots = 7
/datum/storage/wands_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/gun/magic/wand)
///Janitor belt
/datum/storage/janitor_belt
max_slots = 6
/datum/storage/janitor_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/access_key,
/obj/item/assembly/mousetrap,
/obj/item/clothing/gloves,
/obj/item/flashlight,
/obj/item/forcefield_projector,
/obj/item/grenade/chem_grenade,
/obj/item/holosign_creator,
/obj/item/key/janitor,
/obj/item/lightreplacer,
/obj/item/melee/flyswatter,
/obj/item/paint/paint_remover,
/obj/item/plunger,
/obj/item/pushbroom,
/obj/item/reagent_containers/spray,
/obj/item/soap,
/obj/item/wirebrush,
))
///Bandolier belt
/datum/storage/bandolier_belt
max_slots = 24
max_total_storage = 24
numerical_stacking = TRUE
allow_quick_gather = TRUE
allow_quick_empty = TRUE
/datum/storage/bandolier_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/ammo_casing/strilka310,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/c357,
/obj/item/ammo_casing/junk,
))
///Fanny pack
/datum/storage/fanny_pack
max_slots = 3
max_specific_storage = WEIGHT_CLASS_SMALL
silent = TRUE
///Sabre belt
/datum/storage/sabre_belt
max_slots = 1
do_rustle = FALSE
max_specific_storage = WEIGHT_CLASS_BULKY
click_alt_open = FALSE
/datum/storage/sabre_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/melee/sabre)
///Green sabre belt
/datum/storage/green_sabre_belt
max_slots = 1
do_rustle = FALSE
max_specific_storage = WEIGHT_CLASS_BULKY
click_alt_open = FALSE
/datum/storage/green_sabre_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/melee/parsnip_sabre)
///Plant belt
/datum/storage/plant_belt
max_slots = 6
/datum/storage/plant_belt/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/cultivator,
/obj/item/geneshears,
/obj/item/graft,
/obj/item/gun/energy/floragun,
/obj/item/hatchet,
/obj/item/plant_analyzer,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/spray/pestspray,
/obj/item/reagent_containers/spray/plantbgone,
/obj/item/secateurs,
/obj/item/seeds,
/obj/item/shovel/spade,
))
///Unfathomable curio
/datum/storage/unfathomable_curio
max_total_storage = 21
/datum/storage/unfathomable_curio/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/ammo_box/strilka310/lionhunter,
/obj/item/heretic_labyrinth_handbook,
/obj/item/bodypart, // Bodyparts are often used in rituals.
/obj/item/clothing/neck/eldritch_amulet,
/obj/item/clothing/neck/heretic_focus,
/obj/item/codex_cicatrix,
/obj/item/eldritch_potion,
/obj/item/food/grown/poppy, // Used to regain a Living Heart.
/obj/item/food/grown/harebell, // Used to reroll targets
/obj/item/melee/rune_carver,
/obj/item/melee/sickly_blade,
/obj/item/organ, // Organs are also often used in rituals.
/obj/item/reagent_containers/cup/beaker/eldritch,
/obj/item/stack/sheet/glass, // Glass is often used by moon heretics
))

View File

@@ -0,0 +1,179 @@
///Normal box
/datum/storage/box
max_specific_storage = WEIGHT_CLASS_SMALL
open_sound = 'sound/items/handling/cardboard_box/cardboard_box_open.ogg'
rustle_sound = 'sound/items/handling/cardboard_box/cardboard_box_rustle.ogg'
///Debug tools box
/datum/storage/box/debug
allow_big_nesting = TRUE
max_slots = 99
max_specific_storage = WEIGHT_CLASS_GIGANTIC
max_total_storage = 99
///Donk Pocket box
/datum/storage/box/donk_pockets/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/food/donkpocket)
///Coffee box
/datum/storage/box/coffee
max_slots = 5
/datum/storage/box/coffee/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/food/grown/coffee)
///Bandage box
/datum/storage/box/bandages
max_slots = 6
/datum/storage/box/bandages/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/stack/medical/bandage,
/obj/item/reagent_containers/applicator/pill,
/obj/item/reagent_containers/applicator/patch,
))
///Monkey cube box
/datum/storage/box/monkey_cube
max_slots = 7
/datum/storage/box/monkey_cube/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(
can_hold_list = /obj/item/food/monkeycube,
cant_hold_list = /obj/item/food/monkeycube/gorilla,
)
///Gorilla cube box
/datum/storage/box/gorilla_cube_box
max_slots = 3
/datum/storage/box/gorilla_cube_box/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/food/monkeycube/gorilla)
///Stabalized extract box
/datum/storage/box/stabilized
allow_big_nesting = TRUE
max_slots = 99
max_specific_storage = WEIGHT_CLASS_GIGANTIC
max_total_storage = 99
///Snappops box
/datum/storage/box/snappops
max_slots = 8
/datum/storage/box/snappops/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/toy/snappop)
///Match box
/datum/storage/box/match
max_slots = 10
/datum/storage/box/match/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/match)
///Light Box
/datum/storage/box/lights
max_slots = 21
max_total_storage = 21
allow_quick_gather = FALSE //temp workaround to re-enable filling the light replacer with the box
/datum/storage/box/lights/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/light/tube,
/obj/item/light/bulb
))
///Balloon box
/datum/storage/box/balloon
max_slots = 24
max_total_storage = 24
allow_quick_gather = FALSE
/datum/storage/box/balloon/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/toy/balloon/long)
///Stickers Box
/datum/storage/box/stickers
max_slots = 8
max_specific_storage = WEIGHT_CLASS_TINY
/datum/storage/box/stickers/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/sticker)
///Syndicate space box
/datum/storage/box/syndicate_space
max_specific_storage = WEIGHT_CLASS_NORMAL
/datum/storage/box/syndicate_space/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/clothing/suit/space/syndicate,
/obj/item/clothing/head/helmet/space/syndicate
))
///Syndicate chemical box
/datum/storage/box/syndicate_chemical
max_slots = 15
///Syndicate throwing weapons box
/datum/storage/box/syndicate_throwing
max_slots = 9 // 5 + 2 + 2
max_specific_storage = WEIGHT_CLASS_NORMAL
max_total_storage = 18 // 5*2 + 2*1 + 3*2
/datum/storage/box/syndicate_throwing/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/restraints/legcuffs/bola/tactical,
/obj/item/paperplane/syndicate,
/obj/item/throwing_star,
))
///Stickers skub box
/datum/storage/box/skub
max_slots = 3
/datum/storage/box/skub/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(exception_hold_list = list(
/obj/item/skub,
/obj/item/clothing/suit/costume/wellworn_shirt/skub,
))
///Stickers anti skub box
/datum/storage/box/anti_skub/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(exception_hold_list = /obj/item/clothing/suit/costume/wellworn_shirt/skub)
///Flat box
/datum/storage/box/flat
max_slots = 3
///Gum Box
/datum/storage/box/gum
max_slots = 4
allow_big_nesting = TRUE
/datum/storage/box/gum/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/storage/bubblegum_wrapper)
///Fishing lures box
/datum/storage/box/fishing_lures/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
//adds an extra slot, so we can put back the lures even if we didn't take out the instructions.
var/static/slots = length(typesof(/obj/item/fishing_lure)) + 1
max_slots = slots
max_total_storage = WEIGHT_CLASS_SMALL * slots
. = ..()
set_holdable(/obj/item/fishing_lure) //can only hold lures

View File

@@ -1,26 +0,0 @@
/datum/storage/drone
max_total_storage = 40
max_specific_storage = WEIGHT_CLASS_NORMAL
max_slots = 10
do_rustle = FALSE
/datum/storage/drone/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
var/static/list/drone_builtins = list(
/obj/item/crowbar/drone,
/obj/item/screwdriver/drone,
/obj/item/wrench/drone,
/obj/item/weldingtool/drone,
/obj/item/wirecutters/drone,
/obj/item/multitool/drone,
/obj/item/pipe_dispenser/drone,
/obj/item/t_scanner/drone,
/obj/item/analyzer/drone,
/obj/item/soap/drone,
)
set_holdable(drone_builtins)
/datum/storage/drone/dump_content_at(atom/dest_object, dump_loc, mob/user)
return //no dumping of contents allowed

View File

@@ -1,3 +1,4 @@
///Normal duffle bag
/datum/storage/duffel
max_total_storage = 30
max_slots = 21
@@ -9,7 +10,6 @@
max_total_storage,
)
. = ..()
set_holdable(exception_hold_list = /obj/item/fish_tank)
// Syndi bags get some FUN extras
@@ -27,7 +27,6 @@
max_total_storage,
)
. = ..()
var/static/list/exception_type_list = list(
// Gun and gun-related accessories
/obj/item/gun,

View File

@@ -0,0 +1,122 @@
///Holster
/datum/storage/holster
max_slots = 1
max_total_storage = 16
open_sound = 'sound/items/handling/holster_open.ogg'
open_sound_vary = TRUE
/datum/storage/holster/New(atom/parent, max_slots, max_specific_storage, max_total_storage, list/holdables)
. = ..()
if(length(holdables))
set_holdable(holdables)
return
set_holdable(list(
/obj/item/gun/ballistic/automatic/pistol,
/obj/item/gun/ballistic/revolver,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/dueling,
/obj/item/food/grown/banana,
/obj/item/gun/energy/laser/thermal,
/obj/item/gun/ballistic/rifle/boltaction, //fits if you make it an obrez
/obj/item/gun/energy/laser/captain,
/obj/item/gun/energy/e_gun/hos,
))
///Energy holster
/datum/storage/holster/energy
max_slots = 2
/datum/storage/holster/energy/New(atom/parent, max_slots, max_specific_storage, max_total_storage, list/holdables)
holdables = list(
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/dueling,
/obj/item/food/grown/banana,
/obj/item/gun/energy/laser/thermal,
/obj/item/gun/energy/recharge/ebow,
/obj/item/gun/energy/laser/captain,
/obj/item/gun/energy/e_gun/hos,
)
return ..()
///Detective holster
/datum/storage/holster/detective
max_slots = 3
/datum/storage/holster/detective/New(atom/parent, max_slots, max_specific_storage, max_total_storage, list/holdables)
holdables = list(
/obj/item/gun/ballistic/automatic/pistol,
/obj/item/ammo_box/magazine/m9mm, // Pistol magazines.
/obj/item/ammo_box/magazine/m9mm_aps,
/obj/item/ammo_box/magazine/m10mm,
/obj/item/ammo_box/magazine/m45,
/obj/item/ammo_box/magazine/m50,
/obj/item/gun/ballistic/revolver,
/obj/item/ammo_box/c38, // Revolver speedloaders.
/obj/item/ammo_box/a357,
/obj/item/ammo_box/strilka310,
/obj/item/ammo_box/magazine/toy/pistol,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/dueling,
/obj/item/gun/energy/laser/thermal,
/obj/item/gun/energy/laser/captain,
/obj/item/gun/energy/e_gun/hos,
/obj/item/gun/ballistic/rifle/boltaction, //fits if you make it an obrez
)
return ..()
///Chameleon Holster
/datum/storage/holster/chameleon
max_slots = 2
silent = TRUE
/datum/storage/holster/chameleon/New(atom/parent, max_slots, max_specific_storage, max_total_storage, list/holdables)
holdables = list(
/obj/item/gun/ballistic/automatic/pistol,
/obj/item/ammo_box/magazine/m9mm,
/obj/item/ammo_box/magazine/m9mm_aps,
/obj/item/ammo_box/magazine/m10mm,
/obj/item/ammo_box/magazine/m45,
/obj/item/ammo_box/magazine/m50,
/obj/item/gun/ballistic/revolver,
/obj/item/ammo_box/c38,
/obj/item/ammo_box/a357,
/obj/item/ammo_box/strilka310,
/obj/item/ammo_box/magazine/toy/pistol,
/obj/item/gun/energy/recharge/ebow,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/dueling,
/obj/item/gun/energy/laser/captain,
/obj/item/gun/energy/e_gun/hos,
)
return ..()
///Nukie holster
/datum/storage/holster/nukie
max_slots = 2
max_specific_storage = WEIGHT_CLASS_BULKY
/datum/storage/holster/nukie/New(atom/parent, max_slots, max_specific_storage, max_total_storage, list/holdables)
holdables = list(
/obj/item/gun, // ALL guns.
/obj/item/ammo_box/magazine, // ALL magazines.
/obj/item/ammo_box/c38, //There isn't a speedloader parent type, so I just put these three here by hand.
/obj/item/ammo_box/a357, //I didn't want to just use /obj/item/ammo_box, because then this could hold huge boxes of ammo.
/obj/item/ammo_box/strilka310,
/obj/item/ammo_casing, // For shotgun shells, rockets, launcher grenades, and a few other things.
/obj/item/grenade, // All regular grenades, the big grenade launcher fires these.
)
return ..()
///Nukie cowboy holster
/datum/storage/holster/nukie/cowboy
max_slots = 3
max_specific_storage = WEIGHT_CLASS_NORMAL

View File

@@ -1,15 +0,0 @@
/datum/storage/implant
max_specific_storage = WEIGHT_CLASS_NORMAL
max_total_storage = 6
max_slots = 2
silent = TRUE
allow_big_nesting = TRUE
/datum/storage/implant/New(
atom/parent,
max_slots,
max_specific_storage,
max_total_storage,
)
. = ..()
set_holdable(cant_hold_list = /obj/item/disk/nuclear)

View File

@@ -0,0 +1,36 @@
///Normal lockbox
/datum/storage/lockbox
max_total_storage = 14
max_slots = 4
/datum/storage/lockbox/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_locked(STORAGE_FULLY_LOCKED)
///Medal lockbox
/datum/storage/lockbox/medal
max_slots = 10
max_total_storage = 20
max_specific_storage = WEIGHT_CLASS_SMALL
/datum/storage/lockbox/medal/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/clothing/accessory/medal)
///Dueling lockbox
/datum/storage/lockbox/dueling
max_slots = 2
max_specific_storage = WEIGHT_CLASS_SMALL
/datum/storage/lockbox/dueling/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/gun/energy/dueling)
///Bitrunning decrypted lockbox
/datum/storage/lockbox/bitrunning_decrypted
max_slots = 1
max_total_storage = 3
/datum/storage/lockbox/bitrunning_decrypted/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_locked(STORAGE_NOT_LOCKED)

View File

@@ -0,0 +1,133 @@
///Regular medkit
/datum/storage/medkit
open_sound = 'sound/items/handling/medkit/medkit_open.ogg'
open_sound_vary = TRUE
rustle_sound = 'sound/items/handling/medkit/medkit_rustle.ogg'
max_specific_storage = WEIGHT_CLASS_SMALL
///List of everything a medkit can hold
VAR_FINAL/static/list/obj/item/list_of_everything_medkits_can_hold = list(
//surgery tools
/obj/item/surgical_drapes,
/obj/item/scalpel,
/obj/item/circular_saw,
/obj/item/bonesetter,
/obj/item/surgicaldrill,
/obj/item/retractor,
/obj/item/cautery,
/obj/item/hemostat,
/obj/item/blood_filter,
//special tools
/obj/item/healthanalyzer,
/obj/item/dnainjector,
/obj/item/lazarus_injector,
/obj/item/implantcase,
/obj/item/implant,
/obj/item/implanter,
//stacks
/obj/item/stack/medical,
/obj/item/stack/sticky_tape,
//containers
/obj/item/reagent_containers/applicator,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/medigel,
/obj/item/reagent_containers/spray,
/obj/item/reagent_containers/hypospray,
/obj/item/reagent_containers/blood,
//storage items
/obj/item/storage/box/bandages,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/storage/box/evilmeds,
//clothing
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/neck/stethoscope,
/obj/item/clothing/gloves,
/obj/item/clothing/mask/muzzle,
/obj/item/clothing/glasses,
//mod suite
/obj/item/mod/module/thread_ripper,
/obj/item/mod/module/surgical_processor/preloaded,
/obj/item/mod/module/defibrillator/combat,
/obj/item/mod/module/health_analyzer,
//misc
/obj/item/lighter,
/obj/item/sensor_device,
/obj/item/radio,
/obj/item/bikehorn/rubberducky,
/obj/item/shears,
/obj/item/geiger_counter,
/obj/item/flashlight/pen,
/obj/item/extinguisher/mini,
/obj/item/stamp,
/obj/item/wrench/medical,
/obj/item/tank/internals/emergency_oxygen,
/obj/item/gun/syringe/syndicate,
/obj/item/pinpointer/crew,
/obj/item/holosign_creator/medical,
/obj/item/autosurgeon/syndicate/emaggedsurgerytoolset,
)
/datum/storage/medkit/New(atom/parent, max_slots, max_specific_storage, max_total_storage, list/holdables = null)
. = ..()
if(!isnull(holdables))
set_holdable(holdables)
///Surgery medkit
/datum/storage/medkit/surgery
max_slots = 12
max_total_storage = 24
max_specific_storage = WEIGHT_CLASS_NORMAL //holds the same equipment as a medibelt
/datum/storage/medkit/surgery/New(atom/parent, max_slots, max_specific_storage, max_total_storage, list/holdables)
holdables = list_of_everything_medkits_can_hold
return ..()
///Tactical medkit
/datum/storage/medkit/tactical
max_slots = 21
max_total_storage = 24
max_specific_storage = WEIGHT_CLASS_NORMAL
/datum/storage/medkit/tactical/New(atom/parent, max_slots, max_specific_storage, max_total_storage, list/holdables)
holdables = list_of_everything_medkits_can_hold
return ..()
///Premium tactical medkit
/datum/storage/medkit/tactical/premium
allow_big_nesting = TRUE // so you can put back the box you took out
max_total_storage = 34
///Coroner medkit
/datum/storage/medkit/coroner
max_slots = 14
max_total_storage = 24
max_specific_storage = WEIGHT_CLASS_NORMAL
/datum/storage/medkit/coroner/New(atom/parent, max_slots, max_specific_storage, max_total_storage, list/holdables)
holdables = list(
/obj/item/reagent_containers,
/obj/item/bodybag,
/obj/item/toy/crayon,
/obj/item/pen,
/obj/item/paper,
/obj/item/surgical_drapes,
/obj/item/scalpel,
/obj/item/retractor,
/obj/item/hemostat,
/obj/item/cautery,
/obj/item/autopsy_scanner,
)
return ..()

View File

@@ -1,17 +0,0 @@
/datum/storage/organ_box
/datum/storage/organ_box/handle_enter(obj/item/storage/organbox/source, obj/item/arrived)
. = ..()
if(!istype(arrived) || !istype(source) || !source.coolant_to_spend())
return
arrived.freeze()
/datum/storage/organ_box/handle_exit(datum/source, obj/item/gone)
. = ..()
if(!istype(gone))
return
gone.unfreeze()

View File

@@ -1,6 +1,19 @@
/datum/storage/carpskin_bag
max_total_storage = 42 // Up to 14 normal fish, but we're assuming that you'll be storing a bunch of gear as well
var/forced_pickup = FALSE
/datum/storage/carpskin_bag/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/fish,
/obj/item/fishing_line,
/obj/item/fishing_hook,
/obj/item/fishing_lure,
/obj/item/fish_analyzer,
/obj/item/bait_can,
))
// All hooks, lines and lures are classified as one type
/datum/storage/carpskin_bag/process_numerical_display()
var/list/toreturn = list()

View File

@@ -6,7 +6,8 @@
/datum/storage/fish_case/can_insert(obj/item/to_insert, mob/user, messages, force)
. = ..()
if(!.)
return .
return
if(!HAS_TRAIT(to_insert, TRAIT_AQUARIUM_CONTENT))
if(messages && user)
user.balloon_alert(user, "can't hold!")

View File

@@ -0,0 +1,327 @@
//For storage types that are small enough to fit in this file
///Test tube rack
/datum/storage/test_tube_rack
max_slots = 8
screen_max_columns = 4
screen_max_rows = 2
allow_quick_gather = TRUE
allow_quick_empty = TRUE
/datum/storage/test_tube_rack/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/reagent_containers/cup/tube)
///Surgery tray
/datum/storage/surgery_tray
max_total_storage = 30
max_slots = 14
animated = FALSE
/datum/storage/surgery_tray/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/autopsy_scanner,
/obj/item/blood_filter,
/obj/item/bonesetter,
/obj/item/cautery,
/obj/item/circular_saw,
/obj/item/clothing/mask/surgical,
/obj/item/hemostat,
/obj/item/razor,
/obj/item/retractor,
/obj/item/scalpel,
/obj/item/stack/medical/bone_gel,
/obj/item/stack/sticky_tape/surgical,
/obj/item/surgical_drapes,
/obj/item/surgicaldrill,
))
///Organ box
/datum/storage/organ_box
max_specific_storage = WEIGHT_CLASS_BULKY
max_total_storage = 21
/datum/storage/organ_box/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/organ,
/obj/item/bodypart,
/obj/item/food/icecream,
))
/datum/storage/organ_box/handle_enter(obj/item/storage/organbox/source, obj/item/arrived)
. = ..()
if(istype(arrived) && istype(source) && source.coolant_to_spend())
arrived.freeze()
/datum/storage/organ_box/handle_exit(datum/source, obj/item/gone)
. = ..()
if(istype(gone))
gone.unfreeze()
///Portable chem mixer
/datum/storage/portable_chem_mixer
max_total_storage = 200
max_slots = 50
/datum/storage/portable_chem_mixer/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/cup/glass/waterbottle,
/obj/item/reagent_containers/condiment,
))
///Implant
/datum/storage/implant
max_total_storage = 6
max_slots = 2
silent = TRUE
allow_big_nesting = TRUE
/datum/storage/implant/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(cant_hold_list = /obj/item/disk/nuclear)
///Drone storage
/datum/storage/drone
max_total_storage = 40
max_slots = 10
do_rustle = FALSE
/datum/storage/drone/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/crowbar/drone,
/obj/item/screwdriver/drone,
/obj/item/wrench/drone,
/obj/item/weldingtool/drone,
/obj/item/wirecutters/drone,
/obj/item/multitool/drone,
/obj/item/pipe_dispenser/drone,
/obj/item/t_scanner/drone,
/obj/item/analyzer/drone,
/obj/item/soap/drone,
))
/datum/storage/drone/dump_content_at(atom/dest_object, dump_loc, mob/user)
return //no dumping of contents allowed
///Basket
/datum/storage/basket
max_total_storage = 21
///Easter basket
/datum/storage/basket/easter/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/food/egg,
/obj/item/food/chocolateegg,
/obj/item/food/boiledegg,
/obj/item/surprise_egg
))
/datum/storage/basket/easter/handle_enter(datum/source, obj/item/arrived)
. = ..()
countEggs(source)
/datum/storage/basket/easter/proc/countEggs(obj/item/storage/basket/easter/basket)
basket.cut_overlays()
basket.add_overlay("basket-grass")
basket.add_overlay("basket-egg[min(basket.contents.len, 5)]")
/datum/storage/basket/easter/handle_exit(datum/source, obj/item/gone)
. = ..()
countEggs(source)
///Briefcase
/datum/storage/briefcase
max_total_storage = 21
//=======================Fancy storages======================
///Donut box
/datum/storage/donut/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/food/donut)
///Egg box
/datum/storage/egg_box/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/food/egg)
///Generic fancy holder
/datum/storage/fancy_holder/New(obj/item/storage/fancy/candle_box/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(parent.spawn_type)
///Heart box
/datum/storage/heart_box/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/food/bonbon)
///Cigrate boxes
/datum/storage/cigarette_box
display_contents = FALSE
/datum/storage/cigarette_box/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/cigarette,
/obj/item/lighter,
))
///Coffee condiment display
/datum/storage/coffee_condi_display
max_slots = 14
/datum/storage/coffee_condi_display/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/reagent_containers/condiment/pack/sugar,
/obj/item/reagent_containers/condiment/creamer,
/obj/item/reagent_containers/condiment/pack/astrotame,
/obj/item/reagent_containers/condiment/chocolate,
))
///Coffee cart rack
/datum/storage/coffee_cart_rack
max_slots = 4
/datum/storage/coffee_cart_rack/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/coffee_cartridge)
//=================================================
///Pill bottle
/datum/storage/pillbottle
allow_quick_gather = TRUE
open_sound = 'sound/items/handling/pill_bottle_open.ogg'
open_sound_vary = FALSE
/datum/storage/pillbottle/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/reagent_containers/applicator,
/obj/item/food/bait/natural,
))
///Six pack beer
/datum/storage/sixcan
max_specific_storage = WEIGHT_CLASS_SMALL
max_total_storage = 12
max_slots = 6
/datum/storage/sixcan/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/reagent_containers/cup/soda_cans,
/obj/item/reagent_containers/cup/glass/bottle/beer,
/obj/item/reagent_containers/cup/glass/bottle/ale,
/obj/item/reagent_containers/cup/glass/waterbottle,
))
///Wallet storage
/datum/storage/wallet
max_specific_storage = WEIGHT_CLASS_SMALL
max_slots = 4
/datum/storage/wallet/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(
can_hold_list = list(
/obj/item/stack/spacecash,
/obj/item/holochip,
/obj/item/card,
/obj/item/cigarette,
/obj/item/clothing/accessory/dogtag,
/obj/item/coin,
/obj/item/coupon,
/obj/item/dice,
/obj/item/disk,
/obj/item/flashlight/pen,
/obj/item/folder/biscuit,
/obj/item/food/chococoin,
/obj/item/implanter,
/obj/item/laser_pointer,
/obj/item/lighter,
/obj/item/lipstick,
/obj/item/match,
/obj/item/paper,
/obj/item/pen,
/obj/item/photo,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/applicator,
/obj/item/screwdriver,
/obj/item/seeds,
/obj/item/spess_knife,
/obj/item/stack/medical,
/obj/item/stamp,
/obj/item/toy/crayon,
),
cant_hold_list = list(
/obj/item/screwdriver/power
)
)
///Crayons storage
/datum/storage/crayons/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(
can_hold_list = /obj/item/toy/crayon,
cant_hold_list = list(
/obj/item/toy/crayon/spraycan,
/obj/item/toy/crayon/mime,
/obj/item/toy/crayon/rainbow,
),
)
///Dice storage
/datum/storage/dice
allow_quick_gather = TRUE
/datum/storage/dice/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/dice)
///Mail counterfeit
/datum/storage/mail_counterfeit
max_slots = 1
allow_big_nesting = TRUE
///Mail counterfeit advanced
/datum/storage/mail_counterfeit/advanced
max_slots = 21
max_total_storage = 21
///Mail counterfeit bluespace
/datum/storage/mail_counterfeit/bluespace
max_total_storage = 35
max_slots = 30
max_specific_storage = WEIGHT_CLASS_GIGANTIC
///Card binder
/datum/storage/card_binder
max_total_storage = 120
max_slots = 60
/datum/storage/card_binder/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/tcgcard)
///Toilet bong
/datum/storage/toiletbong
max_slots = 12
max_total_storage = 100
attack_hand_interact = FALSE
do_rustle = FALSE
animated = FALSE
/datum/storage/toiletbong/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(/obj/item/food)

View File

@@ -0,0 +1,51 @@
/datum/storage/pod
max_slots = 14
max_total_storage = WEIGHT_CLASS_BULKY * 14
allow_big_nesting = TRUE
/// If TRUE, we unlock regardless of security level
var/always_unlocked = FALSE
/datum/storage/pod/open_storage(mob/to_show)
if(isliving(to_show) && SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_RED)
to_chat(to_show, span_warning("The storage unit will only unlock during a Red or Delta security alert."))
return FALSE
return ..()
/datum/storage/pod/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
// all of these are a type below what actually spawn with
// (IE all space suits instead of just the emergency ones)
// because an enterprising traitor might be able to hide things,
// like their syndicate toolbox or softsuit. may be fun?
set_holdable(exception_hold_list = list(
/obj/item/clothing/suit/space,
/obj/item/pickaxe,
/obj/item/storage/toolbox,
))
RegisterSignal(SSsecurity_level, COMSIG_SECURITY_LEVEL_CHANGED, PROC_REF(update_lock))
update_lock(new_level = SSsecurity_level.get_current_level_as_number())
/datum/storage/pod/set_parent(atom/new_parent)
. = ..()
RegisterSignal(parent, COMSIG_ATOM_AFTER_SHUTTLE_MOVE, PROC_REF(pod_launch))
/datum/storage/pod/proc/update_lock(datum/source, new_level)
SIGNAL_HANDLER
if(always_unlocked)
return
locked = (new_level < SEC_LEVEL_RED) ? STORAGE_FULLY_LOCKED : STORAGE_NOT_LOCKED
parent.update_appearance(UPDATE_ICON_STATE)
if(locked) // future todo : make `locked` a setter so this behavior can be built in (avoids exploits)
close_all()
/datum/storage/pod/proc/pod_launch(datum/source, turf/old_turf)
SIGNAL_HANDLER
// This check is to ignore the movement of the shuttle from the transit level to the station as it is loaded in.
if(old_turf && is_reserved_level(old_turf.z))
return
// If the pod was launched, the storage will always open.
always_unlocked = TRUE
locked = STORAGE_NOT_LOCKED
parent.update_appearance(UPDATE_ICON_STATE)

View File

@@ -43,7 +43,10 @@
/obj/item/circuitboard/computer,
)
return is_type_in_list(to_insert, exceptions) ? ..() : FALSE
if(!is_type_in_list(to_insert, exceptions))
return FALSE
return ..()
/datum/storage/rped/attempt_insert(obj/item/to_insert, mob/user, override, force, messages)
if(isstack(to_insert))

View File

@@ -1,3 +1,4 @@
///Regular pockets
/datum/storage/pockets
max_slots = 2
max_specific_storage = WEIGHT_CLASS_SMALL
@@ -17,16 +18,18 @@
else
to_chat(user, span_notice("You discreetly slip [to_insert] into [parent]."))
///Small pockets
/datum/storage/pockets/small
max_slots = 1
max_specific_storage = WEIGHT_CLASS_SMALL
attack_hand_interact = FALSE
///Tiny pockets
/datum/storage/pockets/tiny
max_slots = 1
max_specific_storage = WEIGHT_CLASS_TINY
attack_hand_interact = FALSE
///Fedora pockets
/datum/storage/pockets/small/fedora/New(
atom/parent,
max_slots,
@@ -34,7 +37,6 @@
max_total_storage,
)
. = ..()
set_holdable(exception_hold_list = list(
/obj/item/katana,
/obj/item/toy/katana,
@@ -43,10 +45,12 @@
/obj/item/gun/ballistic/automatic/tommygun,
))
///Fedora detective pockets
/datum/storage/pockets/small/fedora/detective
attack_hand_interact = TRUE // so the detectives would discover pockets in their hats
click_alt_open = FALSE
///Chef hat pocket
/datum/storage/pockets/chefhat
attack_hand_interact = TRUE
max_slots = 1
@@ -72,6 +76,7 @@
return
return FALSE
///Shoe pockets
/datum/storage/pockets/shoes
max_slots = 2
attack_hand_interact = FALSE
@@ -114,16 +119,17 @@
/obj/item/match,
/obj/item/holochip,
/obj/item/toy/crayon,
/obj/item/reagent_containers/cup/glass/flask
/obj/item/reagent_containers/cup/glass/flask,
),
cant_hold_list = list(
/obj/item/screwdriver/power,
/obj/item/ammo_casing/rocket,
/obj/item/cigarette/pipe,
/obj/item/toy/crayon/spraycan
/obj/item/toy/crayon/spraycan,
)
)
///Clown shoe pockets
/datum/storage/pockets/shoes/clown/New(
atom/parent,
max_slots,
@@ -168,6 +174,7 @@
),
)
///Protector pocket
/datum/storage/pockets/pocketprotector
max_slots = 3
max_specific_storage = WEIGHT_CLASS_TINY
@@ -187,6 +194,7 @@
/obj/item/lipstick,
))
///Helmet pockets
/datum/storage/pockets/helmet
max_slots = 2
quickdraw = TRUE
@@ -206,7 +214,7 @@
/obj/item/ammo_box/strilka310
))
///Void cloak pocket
/datum/storage/pockets/void_cloak
quickdraw = TRUE
max_total_storage = 5 // 2 small items + 1 tiny item, or 1 normal item + 1 small item
@@ -235,6 +243,7 @@
),
exception_hold_list = list(
/obj/item/bodypart,
/obj/item/melee/sickly_blade,
/obj/item/melee/sickly_blade
)
)

View File

@@ -1,14 +0,0 @@
/datum/storage/portable_chem_mixer
max_total_storage = 200
max_slots = 50
/datum/storage/portable_chem_mixer/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(list(
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/cup/glass/waterbottle,
/obj/item/reagent_containers/condiment,
))

View File

@@ -1,29 +0,0 @@
/datum/storage/surgery_tray
max_total_storage = 30
max_specific_storage = WEIGHT_CLASS_NORMAL
max_slots = 14
animated = FALSE
/datum/storage/surgery_tray/New(
atom/parent,
max_slots,
max_specific_storage,
max_total_storage,
)
. = ..()
set_holdable(list(
/obj/item/autopsy_scanner,
/obj/item/blood_filter,
/obj/item/bonesetter,
/obj/item/cautery,
/obj/item/circular_saw,
/obj/item/clothing/mask/surgical,
/obj/item/hemostat,
/obj/item/razor,
/obj/item/retractor,
/obj/item/scalpel,
/obj/item/stack/medical/bone_gel,
/obj/item/stack/sticky_tape/surgical,
/obj/item/surgical_drapes,
/obj/item/surgicaldrill,
))

View File

@@ -1,15 +0,0 @@
/datum/storage/test_tube_rack
max_slots = 8
screen_max_columns = 4
screen_max_rows = 2
allow_quick_gather = TRUE
allow_quick_empty = TRUE
/datum/storage/test_tube_rack/New(
atom/parent,
max_slots,
max_specific_storage,
max_total_storage,
)
. = ..()
set_holdable(/obj/item/reagent_containers/cup/tube)

View File

@@ -0,0 +1,37 @@
///Normal toolbox
/datum/storage/toolbox
open_sound = 'sound/items/handling/toolbox/toolbox_open.ogg'
rustle_sound = 'sound/items/handling/toolbox/toolbox_rustle.ogg'
///Heirloom toolbox
/datum/storage/toolbox/heirloom
max_specific_storage = WEIGHT_CLASS_SMALL
///Syndicate toolbox
/datum/storage/toolbox/syndicate
silent = TRUE
///Artistic toolbox
/datum/storage/toolbox/artistic
max_total_storage = 20
max_slots = 11
///Guncase toolbox
/datum/storage/toolbox/guncase
max_total_storage = 7 //enough to hold ONE bulky gun and the ammo boxes
max_slots = 4
max_specific_storage = WEIGHT_CLASS_BULKY
///Doublesword toolbox
/datum/storage/toolbox/guncase/doublesword
max_slots = 5
max_total_storage = 10 //it'll hold enough
///Fishing toolbox
/datum/storage/toolbox/fishing/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
set_holdable(exception_hold_list = /obj/item/fishing_rod)
///Fishing toolbox small
/datum/storage/toolbox/fishing/small
max_specific_storage = WEIGHT_CLASS_SMALL //It can still hold a fishing rod

View File

@@ -1,11 +0,0 @@
/datum/storage/trash
/datum/storage/trash/remove_single(mob/removing, obj/item/thing, atom/remove_to_loc, silent)
real_location.visible_message(
span_notice("[removing] starts fishing around inside [parent]."),
span_notice("You start digging around in [parent] to try and pull something out."),
)
if(!do_after(removing, 1.5 SECONDS, parent))
return FALSE
return ..()

View File

@@ -725,17 +725,7 @@
icon_state = "crayonbox"
w_class = WEIGHT_CLASS_SMALL
custom_materials = list(/datum/material/cardboard = SHEET_MATERIAL_AMOUNT)
/obj/item/storage/crayons/Initialize(mapload)
. = ..()
atom_storage.set_holdable(
can_hold_list = /obj/item/toy/crayon,
cant_hold_list = list(
/obj/item/toy/crayon/spraycan,
/obj/item/toy/crayon/mime,
/obj/item/toy/crayon/rainbow,
),
)
storage_type = /datum/storage/crayons
/obj/item/storage/crayons/PopulateContents()
new /obj/item/toy/crayon/red(src)

View File

@@ -9,11 +9,7 @@
icon = 'icons/obj/toys/dice.dmi'
icon_state = "dicebag"
w_class = WEIGHT_CLASS_SMALL
/obj/item/storage/dice/Initialize(mapload)
. = ..()
atom_storage.allow_quick_gather = TRUE
atom_storage.set_holdable(/obj/item/dice)
storage_type = /datum/storage/dice
/obj/item/storage/dice/PopulateContents()
new /obj/item/dice/d4(src)

View File

@@ -349,18 +349,7 @@
worn_icon_state = "mailbag"
resistance_flags = FLAMMABLE
custom_premium_price = PAYCHECK_LOWER
/obj/item/storage/bag/mail/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 42
atom_storage.max_slots = 21
atom_storage.numerical_stacking = FALSE
atom_storage.set_holdable(list(
/obj/item/mail,
/obj/item/delivery/small,
/obj/item/paper
))
storage_type = /datum/storage/bag/mail
/obj/item/paper/fluff/junkmail_redpill
name = "smudged paper"
@@ -499,12 +488,7 @@
w_class = WEIGHT_CLASS_NORMAL
icon = 'icons/obj/antags/syndicate_tools.dmi'
icon_state = "mail_counterfeit_device"
/obj/item/storage/mail_counterfeit_device/Initialize(mapload)
. = ..()
atom_storage.max_slots = 1
atom_storage.allow_big_nesting = TRUE
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
storage_type = /datum/storage/mail_counterfeit
/obj/item/storage/mail_counterfeit_device/examine_more(mob/user)
. = ..()
@@ -576,19 +560,17 @@
/// Unobtainable item mostly for (b)admin purposes.
/obj/item/storage/mail_counterfeit_device/advanced
name = "GLA-MACRO mail counterfeit device"
storage_type = /datum/storage/mail_counterfeit/advanced
/obj/item/storage/mail_counterfeit_device/advanced/Initialize(mapload)
. = ..()
desc += " This model is highly advanced and capable of compressing items, making mail's storage space comparable to standard backpack."
create_storage(max_slots = 21, max_total_storage = 21)
atom_storage.allow_big_nesting = TRUE
/// Unobtainable item mostly for (b)admin purposes.
/obj/item/storage/mail_counterfeit_device/bluespace
name = "GLA-ULTRA mail counterfeit device"
storage_type = /datum/storage/mail_counterfeit/bluespace
/obj/item/storage/mail_counterfeit_device/bluespace/Initialize(mapload)
. = ..()
desc += " This model is the most advanced and capable of performing crazy bluespace compressions, making mail's storage space comparable to bluespace backpack."
create_storage(max_specific_storage = WEIGHT_CLASS_GIGANTIC, max_total_storage = 35, max_slots = 30)
atom_storage.allow_big_nesting = TRUE

View File

@@ -86,6 +86,7 @@
icon_state = "giftbag0"
inhand_icon_state = "giftbag"
w_class = WEIGHT_CLASS_BULKY
storage_type = /datum/storage/backpack/santabag
/obj/item/storage/backpack/santabag/Initialize(mapload)
. = ..()
@@ -238,10 +239,7 @@
icon = 'icons/obj/storage/ethereal.dmi'
worn_icon = 'icons/mob/clothing/back/ethereal.dmi'
icon_state = "saddlepack"
/obj/item/storage/backpack/saddlepack/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 26
storage_type = /datum/storage/backpack/saddle
// MEAT MEAT MEAT MEAT MEAT
@@ -388,12 +386,11 @@
icon_state = "satchel-flat"
inhand_icon_state = "satchel-flat"
w_class = WEIGHT_CLASS_NORMAL //Can fit in backpacks itself.
storage_type = /datum/storage/backpack/satchel_flat
/obj/item/storage/backpack/satchel/flat/Initialize(mapload)
. = ..()
AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_OBSERVER, use_anchor = TRUE)
atom_storage.max_total_storage = 15
atom_storage.set_holdable(cant_hold_list = /obj/item/storage/backpack/satchel/flat) //muh recursive backpacks
ADD_TRAIT(src, TRAIT_CONTRABAND_BLOCKER, INNATE_TRAIT)
/obj/item/storage/backpack/satchel/flat/PopulateContents()

View File

@@ -21,12 +21,7 @@
/obj/item/storage/bag
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_BULKY
/obj/item/storage/bag/Initialize(mapload)
. = ..()
atom_storage.allow_quick_gather = TRUE
atom_storage.allow_quick_empty = TRUE
atom_storage.numerical_stacking = TRUE
storage_type = /datum/storage/bag
// -----------------------------
// Trash bag
@@ -40,17 +35,13 @@
worn_icon_state = "trashbag"
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
storage_type = /datum/storage/trash
storage_type = /datum/storage/bag/trash
///If true, can be inserted into the janitor cart
var/insertable = TRUE
/obj/item/storage/bag/trash/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.max_total_storage = 30
atom_storage.max_slots = 30
atom_storage.set_holdable(cant_hold_list = /obj/item/disk/nuclear)
atom_storage.supports_smart_equip = FALSE
RegisterSignal(atom_storage, COMSIG_STORAGE_DUMP_POST_TRANSFER, PROC_REF(post_insertion))
/// If you dump a trash bag into something, anything that doesn't get inserted will spill out onto your feet
@@ -89,8 +80,6 @@
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
/obj/item/storage/bag/trash/filled
/obj/item/storage/bag/trash/filled/PopulateContents()
. = ..()
for(var/i in 1 to rand(1, 7))
@@ -103,11 +92,7 @@
icon_state = "bluetrashbag"
inhand_icon_state = "bluetrashbag"
item_flags = NO_MAT_REDEMPTION
/obj/item/storage/bag/trash/bluespace/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 60
atom_storage.max_slots = 60
storage_type = /datum/storage/bag/trash/bluespace
/obj/item/storage/bag/trash/bluespace/cyborg
insertable = FALSE
@@ -124,22 +109,13 @@
worn_icon_state = "satchel"
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS
w_class = WEIGHT_CLASS_NORMAL
storage_type = /datum/storage/bag/ore
///If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
var/spam_protection = FALSE
var/mob/listeningTo
///Cooldown on balloon alerts when picking ore
COOLDOWN_DECLARE(ore_bag_balloon_cooldown)
/obj/item/storage/bag/ore/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_HUGE
atom_storage.max_total_storage = 50
atom_storage.numerical_stacking = TRUE
atom_storage.allow_quick_empty = TRUE
atom_storage.allow_quick_gather = TRUE
atom_storage.set_holdable(/obj/item/stack/ore)
atom_storage.silent_for_user = TRUE
/obj/item/storage/bag/ore/equipped(mob/user)
. = ..()
if(listeningTo == user)
@@ -218,12 +194,7 @@
name = "mining satchel of holding"
desc = "A revolution in convenience, this satchel allows for huge amounts of ore storage. It's been outfitted with anti-malfunction safety measures."
icon_state = "satchel_bspace"
/obj/item/storage/bag/ore/holding/Initialize(mapload)
. = ..()
atom_storage.max_slots = INFINITY
atom_storage.max_specific_storage = INFINITY
atom_storage.max_total_storage = INFINITY
storage_type = /datum/storage/bag/ore/holding
// -----------------------------
// Plant bag
@@ -235,19 +206,7 @@
icon_state = "plantbag"
worn_icon_state = "plantbag"
resistance_flags = FLAMMABLE
/obj/item/storage/bag/plants/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 100
atom_storage.max_slots = 100
atom_storage.set_holdable(list(
/obj/item/food/grown,
/obj/item/graft,
/obj/item/grown,
/obj/item/food/honeycomb,
/obj/item/seeds,
))
storage_type = /datum/storage/bag/plants
/obj/item/storage/bag/plants/portaseeder
name = "portable seed extractor"
@@ -292,24 +251,7 @@
icon = 'icons/obj/mining.dmi'
icon_state = "sheetsnatcher"
worn_icon_state = "satchel"
var/capacity = 300 //the number of sheets it can carry.
/obj/item/storage/bag/sheetsnatcher/Initialize(mapload)
. = ..()
atom_storage.allow_quick_empty = TRUE
atom_storage.allow_quick_gather = TRUE
atom_storage.numerical_stacking = TRUE
atom_storage.set_holdable(
can_hold_list = list(
/obj/item/stack/sheet
),
cant_hold_list = list(
/obj/item/stack/sheet/mineral/sandstone,
/obj/item/stack/sheet/mineral/wood,
),
)
atom_storage.max_total_storage = capacity / 2
storage_type = /datum/storage/bag/sheet_snatcher
// -----------------------------
// Sheet Snatcher (Cyborg)
@@ -318,7 +260,7 @@
/obj/item/storage/bag/sheetsnatcher/borg
name = "sheet snatcher 9000"
desc = ""
capacity = 500//Borgs get more because >specialization
storage_type = /datum/storage/bag/sheet_snatcher/borg
// -----------------------------
@@ -329,8 +271,8 @@
name = "sheet snatcher EXTREME EDITION"
desc = "A Nanotrasen storage system designed which has been given post-market alterations to hold any type of sheet. Comes pre-populated with "
color = "#ff3737" // I'm too lazy to make a unique sprite
capacity = 5000 // Hopefully enough to fit anything you need
w_class = WEIGHT_CLASS_TINY
storage_type = /datum/storage/bag/sheet_snatcher_debug
// Copy-pasted from the former /obj/item/storage/box/material, w/ small additions like rods, cardboard, plastic.
// "Only 20 uranium 'cause of radiation"
@@ -360,24 +302,10 @@
/obj/item/stack/sheet/mineral/abductor = 50,
/obj/item/stack/sheet/cardboard/fifty = null,
)
//This needs to be done here and not in Initialize() because the stacks get merged and fall out when their weight updates if this is set after PopulateContents()
atom_storage.allow_big_nesting = TRUE
atom_storage.max_slots = 99
atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC
atom_storage.max_total_storage = capacity
for(var/obj/item/stack/stack_type as anything in items_inside)
var/amt = items_inside[stack_type]
new stack_type(src, amt, FALSE)
/obj/item/storage/bag/sheetsnatcher/debug/Initialize(mapload)
. = ..()
// Overrides so it can hold all possible sheets
atom_storage.set_holdable(list(
/obj/item/stack/sheet,
/obj/item/stack/sheet/mineral/sandstone,
/obj/item/stack/sheet/mineral/wood,
))
// -----------------------------
// Book bag
// -----------------------------
@@ -389,17 +317,7 @@
icon_state = "bookbag"
worn_icon_state = "bookbag"
resistance_flags = FLAMMABLE
/obj/item/storage/bag/books/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 21
atom_storage.max_slots = 7
atom_storage.set_holdable(list(
/obj/item/book,
/obj/item/spellbook,
/obj/item/poster,
))
storage_type = /datum/storage/bag/books
/*
* Trays - Agouri
@@ -418,34 +336,7 @@
slot_flags = ITEM_SLOT_BELT
custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*1.5)
custom_price = PAYCHECK_CREW * 0.6
/obj/item/storage/bag/tray/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY //Plates are required bulky to keep them out of backpacks
atom_storage.set_holdable(
can_hold_list = list(
/obj/item/cigarette,
/obj/item/food,
/obj/item/kitchen,
/obj/item/lighter,
/obj/item/organ,
/obj/item/plate,
/obj/item/reagent_containers/condiment,
/obj/item/reagent_containers/cup,
/obj/item/rollingpaper,
/obj/item/storage/box/gum,
/obj/item/storage/box/matches,
/obj/item/storage/fancy,
/obj/item/trash,
),
cant_hold_list = list(
/obj/item/plate/oven_tray,
/obj/item/reagent_containers/cup/soup_pot,
),
) //Should cover: Bottles, Beakers, Bowls, Booze, Glasses, Food, Food Containers, Food Trash, Organs, Tobacco Products, Lighters, and Kitchen Tools.
atom_storage.insert_preposition = "on"
atom_storage.max_slots = 8
atom_storage.max_total_storage = 16
storage_type = /datum/storage/bag/tray
/obj/item/storage/bag/tray/attack(mob/living/M, mob/living/user)
. = ..()
@@ -512,22 +403,7 @@
worn_icon_state = "chembag"
desc = "A bag for storing pills, patches, and bottles."
resistance_flags = FLAMMABLE
/obj/item/storage/bag/chemistry/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 200
atom_storage.max_slots = 50
atom_storage.set_holdable(list(
/obj/item/reagent_containers/chem_pack,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/glass/waterbottle,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/medigel,
/obj/item/reagent_containers/applicator,
/obj/item/reagent_containers/syringe,
))
storage_type = /datum/storage/bag/chemistry
/obj/item/storage/bag/bio
@@ -537,24 +413,7 @@
worn_icon_state = "biobag"
desc = "A bag for the safe transportation and disposal of biowaste and other virulent materials."
resistance_flags = FLAMMABLE
/obj/item/storage/bag/bio/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 200
atom_storage.max_slots = 25
atom_storage.set_holdable(list(
/obj/item/bodypart,
/obj/item/food/monkeycube,
/obj/item/healthanalyzer,
/obj/item/organ,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/hypospray/medipen,
/obj/item/reagent_containers/syringe,
))
storage_type = /datum/storage/bag/bio
/*
* Science bag (mostly for xenobiologists)
@@ -567,25 +426,7 @@
worn_icon_state = "xenobag"
desc = "A bag for the storage and transport of anomalous materials."
resistance_flags = FLAMMABLE
/obj/item/storage/bag/xeno/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 200
atom_storage.max_slots = 25
atom_storage.set_holdable(list(
/obj/item/bodypart,
/obj/item/food/deadmouse,
/obj/item/food/monkeycube,
/obj/item/organ,
/obj/item/petri_dish,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/syringe,
/obj/item/slime_extract,
/obj/item/swab,
))
storage_type = /datum/storage/bag/xeno
/*
* Construction bag (for engineering, holds stock parts and electronics)
@@ -599,22 +440,7 @@
desc = "A bag for storing small construction components."
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS
resistance_flags = FLAMMABLE
/obj/item/storage/bag/construction/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 100
atom_storage.max_slots = 50
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.set_holdable(list(
/obj/item/assembly,
/obj/item/circuitboard,
/obj/item/electronics,
/obj/item/reagent_containers/cup/beaker,
/obj/item/stack/cable_coil,
/obj/item/stack/ore/bluespace_crystal,
/obj/item/stock_parts,
/obj/item/wallframe/camera,
))
storage_type = /datum/storage/bag/construction
/obj/item/storage/bag/harpoon_quiver
name = "harpoon quiver"
@@ -623,13 +449,7 @@
icon_state = "quiver"
inhand_icon_state = null
worn_icon_state = "harpoon_quiver"
/obj/item/storage/bag/harpoon_quiver/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
atom_storage.max_slots = 40
atom_storage.max_total_storage = 100
atom_storage.set_holdable(/obj/item/ammo_casing/harpoon)
storage_type = /datum/storage/bag/harpoon_quiver
/obj/item/storage/bag/harpoon_quiver/PopulateContents()
for(var/i in 1 to 40)
@@ -644,20 +464,7 @@
desc = "A oxygen tank cut in half, used for holding sharpened rods for the rebar crossbow."
slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE|ITEM_SLOT_NECK
resistance_flags = FLAMMABLE
/obj/item/storage/bag/rebar_quiver/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
atom_storage.max_slots = 10
atom_storage.max_total_storage = 15
atom_storage.set_holdable(list(
/obj/item/ammo_casing/rebar,
/obj/item/ammo_casing/rebar/syndie,
/obj/item/ammo_casing/rebar/healium,
/obj/item/ammo_casing/rebar/hydrogen,
/obj/item/ammo_casing/rebar/zaukerite,
/obj/item/ammo_casing/rebar/paperball,
))
storage_type = /datum/storage/bag/rebar_quiver
/obj/item/storage/bag/rebar_quiver/syndicate
icon_state = "syndie_quiver_0"
@@ -670,11 +477,10 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
actions_types = list(/datum/action/item_action/reload_rebar)
action_slots = ALL
storage_type = /datum/storage/bag/rebar_quiver/syndicate
/obj/item/storage/bag/rebar_quiver/syndicate/Initialize(mapload)
. = ..()
atom_storage.max_slots = 20
atom_storage.max_total_storage = 20
update_appearance(UPDATE_OVERLAYS)
/obj/item/storage/bag/rebar_quiver/syndicate/PopulateContents()

View File

@@ -5,8 +5,5 @@
icon_state = "basket"
w_class = WEIGHT_CLASS_BULKY
resistance_flags = FLAMMABLE
storage_type = /datum/storage/basket
/obj/item/storage/basket/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 21

View File

@@ -41,17 +41,7 @@
custom_premium_price = PAYCHECK_CREW * 2
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
/obj/item/storage/belt/utility/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 21
atom_storage.set_holdable(GLOB.tool_items + list(
/obj/item/clothing/gloves,
/obj/item/radio,
/obj/item/melee/sickly_blade/lock,
/obj/item/reagent_containers/cup/soda_cans,
))
storage_type = /datum/storage/utility_belt
/obj/item/storage/belt/utility/chief
name = "chief engineer's toolbelt"
@@ -205,67 +195,7 @@
worn_icon_state = "medical"
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
/obj/item/storage/belt/medical/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 21
atom_storage.set_holdable(list(
/obj/item/bikehorn/rubberducky,
/obj/item/blood_filter,
/obj/item/bonesetter,
/obj/item/cautery,
/obj/item/circular_saw,
/obj/item/clothing/glasses,
/obj/item/clothing/gloves,
/obj/item/clothing/neck/stethoscope,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/muzzle,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/head/utility/surgerycap,
/obj/item/construction/plumbing,
/obj/item/dnainjector,
/obj/item/extinguisher/mini,
/obj/item/flashlight/pen,
/obj/item/geiger_counter,
/obj/item/gun/syringe/syndicate,
/obj/item/healthanalyzer,
/obj/item/hemostat,
/obj/item/holosign_creator/medical,
/obj/item/implant,
/obj/item/implantcase,
/obj/item/implanter,
/obj/item/lazarus_injector,
/obj/item/lighter,
/obj/item/pinpointer/crew,
/obj/item/plunger,
/obj/item/radio,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/hypospray,
/obj/item/reagent_containers/medigel,
/obj/item/reagent_containers/applicator,
/obj/item/reagent_containers/spray,
/obj/item/reagent_containers/syringe,
/obj/item/retractor,
/obj/item/scalpel,
/obj/item/shears,
/obj/item/stack/medical,
/obj/item/stack/sticky_tape, //surgical tape
/obj/item/stamp,
/obj/item/sensor_device,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/surgical_drapes, //for true paramedics
/obj/item/surgicaldrill,
/obj/item/tank/internals/emergency_oxygen,
/obj/item/wrench/medical,
/obj/item/knife/ritual,
/obj/item/flesh_shears,
))
storage_type = /datum/storage/medical_belt
/obj/item/storage/belt/medical/paramedic
name = "EMT belt"
@@ -329,31 +259,7 @@
inhand_icon_state = "security"//Could likely use a better one.
worn_icon_state = "security"
content_overlays = TRUE
/obj/item/storage/belt/security/Initialize(mapload)
. = ..()
atom_storage.max_slots = 5
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.set_holdable(list(
/obj/item/ammo_box,
/obj/item/ammo_casing/shotgun,
/obj/item/assembly/flash/handheld,
/obj/item/clothing/glasses,
/obj/item/clothing/gloves,
/obj/item/flashlight/seclite,
/obj/item/food/donut,
/obj/item/grenade,
/obj/item/holosign_creator/security,
/obj/item/knife/combat,
/obj/item/melee/baton,
/obj/item/radio,
/obj/item/reagent_containers/spray/pepper,
/obj/item/restraints/handcuffs,
/obj/item/restraints/legcuffs/bola,
))
atom_storage.open_sound = 'sound/items/handling/holster_open.ogg'
atom_storage.open_sound_vary = TRUE
atom_storage.rustle_sound = null
storage_type = /datum/storage/security_belt
/obj/item/storage/belt/security/full/PopulateContents()
new /obj/item/reagent_containers/spray/pepper(src)
@@ -371,10 +277,7 @@
worn_icon_state = "securitywebbing"
content_overlays = FALSE
custom_premium_price = PAYCHECK_COMMAND * 3
/obj/item/storage/belt/security/webbing/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
storage_type = /datum/storage/security_belt/webbing
/obj/item/storage/belt/mining
name = "explorer's webbing"
@@ -383,54 +286,7 @@
inhand_icon_state = "explorer1"
worn_icon_state = "explorer1"
w_class = WEIGHT_CLASS_BULKY
/obj/item/storage/belt/mining/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 20
atom_storage.set_holdable(list(
/obj/item/analyzer,
/obj/item/clothing/gloves,
/obj/item/crowbar,
/obj/item/extinguisher/mini,
/obj/item/flashlight,
/obj/item/gps,
/obj/item/mining_stabilizer,
/obj/item/key/lasso,
/obj/item/knife,
/obj/item/lighter,
/obj/item/mining_scanner,
/obj/item/multitool,
/obj/item/organ/monster_core,
/obj/item/pickaxe,
/obj/item/radio,
/obj/item/reagent_containers/cup/glass,
/obj/item/reagent_containers/cup/glass/bottle,
/obj/item/reagent_containers/hypospray,
/obj/item/reagent_containers/applicator/pill,
/obj/item/resonator,
/obj/item/screwdriver,
/obj/item/shovel,
/obj/item/stack/cable_coil,
/obj/item/stack/marker_beacon,
/obj/item/stack/medical,
/obj/item/stack/ore,
/obj/item/stack/sheet/animalhide,
/obj/item/stack/sheet/bone,
/obj/item/stack/sheet/sinew,
/obj/item/storage/bag/ore,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/survivalcapsule,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/weldingtool,
/obj/item/wirecutters,
/obj/item/wrench,
/obj/item/wormhole_jaunter,
/obj/item/skeleton_key,
))
storage_type = /datum/storage/mining_belt
/obj/item/storage/belt/mining/vendor/PopulateContents()
new /obj/item/survivalcapsule(src)
@@ -455,10 +311,7 @@
icon_state = "ebelt"
inhand_icon_state = "ebelt"
worn_icon_state = "ebelt"
/obj/item/storage/belt/mining/primitive/Initialize(mapload)
. = ..()
atom_storage.max_slots = 5
storage_type = /datum/storage/mining_belt/primitive
/obj/item/storage/belt/soulstone
name = "soul stone belt"
@@ -468,11 +321,7 @@
worn_icon_state = "soulstonebelt"
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
/obj/item/storage/belt/soulstone/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.set_holdable(/obj/item/soulstone)
storage_type = /datum/storage/soulstone_belt
/obj/item/storage/belt/soulstone/full/PopulateContents()
for(var/i in 1 to 6)
@@ -489,11 +338,11 @@
inhand_icon_state = "championbelt"
worn_icon_state = "championbelt"
custom_materials = list(/datum/material/gold=SMALL_MATERIAL_AMOUNT *4)
storage_type = /datum/storage/champion_belt
/obj/item/storage/belt/champion/Initialize(mapload)
. = ..()
atom_storage.max_slots = 1
atom_storage.set_holdable(/obj/item/clothing/mask/luchador)
AddComponent(/datum/component/adjust_fishing_difficulty, -2)
/obj/item/storage/belt/military
@@ -503,26 +352,16 @@
inhand_icon_state = "militarywebbing"
worn_icon_state = "militarywebbing"
resistance_flags = FIRE_PROOF
/obj/item/storage/belt/military/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
storage_type = /datum/storage/military_belt
/obj/item/storage/belt/military/snack
name = "tactical snack rig"
storage_type = /datum/storage/military_belt/snack
/obj/item/storage/belt/military/snack/Initialize(mapload)
. = ..()
var/sponsor = pick("Donk Co.", "Waffle Corp.", "Roffle Co.", "Gorlex Marauders", "Tiger Cooperative")
desc = "A set of snack-tical webbing worn by athletes of the [sponsor] VR sports division."
atom_storage.max_slots = 6
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.set_holdable(list(
/obj/item/food,
/obj/item/reagent_containers/cup/glass,
))
/obj/item/storage/belt/military/snack/full
/obj/item/storage/belt/military/snack/full/Initialize(mapload)
. = ..()
@@ -586,10 +425,7 @@
icon_state = "assault"
inhand_icon_state = "security"
worn_icon_state = "assault"
/obj/item/storage/belt/military/assault/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
storage_type = /datum/storage/military_belt/assault
/obj/item/storage/belt/military/assault/full/PopulateContents()
generate_items_inside(list(
@@ -605,23 +441,7 @@
worn_icon_state = "grenadebeltnew"
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
/obj/item/storage/belt/grenade/Initialize(mapload)
. = ..()
atom_storage.max_slots = 30
atom_storage.numerical_stacking = TRUE
atom_storage.max_total_storage = 60
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.set_holdable(list(
/obj/item/food/grown/cherry_bomb,
/obj/item/food/grown/firelemon,
/obj/item/grenade,
/obj/item/grenade/c4,
/obj/item/lighter,
/obj/item/multitool,
/obj/item/reagent_containers/cup/glass/bottle/molotov,
/obj/item/screwdriver,
))
storage_type = /datum/storage/grenade_belt
/obj/item/storage/belt/grenade/full/PopulateContents()
generate_items_inside(list(
@@ -643,11 +463,7 @@
icon_state = "soulstonebelt"
inhand_icon_state = "soulstonebelt"
worn_icon_state = "soulstonebelt"
/obj/item/storage/belt/wands/Initialize(mapload)
. = ..()
atom_storage.max_slots = 7
atom_storage.set_holdable(/obj/item/gun/magic/wand)
storage_type = /datum/storage/wands_belt
/obj/item/storage/belt/wands/full/PopulateContents()
new /obj/item/gun/magic/wand/death(src)
@@ -670,29 +486,7 @@
worn_icon_state = "janibelt"
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
/obj/item/storage/belt/janitor/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL // Set to this so the light replacer can fit.
atom_storage.set_holdable(list(
/obj/item/access_key,
/obj/item/assembly/mousetrap,
/obj/item/clothing/gloves,
/obj/item/flashlight,
/obj/item/forcefield_projector,
/obj/item/grenade/chem_grenade,
/obj/item/holosign_creator,
/obj/item/key/janitor,
/obj/item/lightreplacer,
/obj/item/melee/flyswatter,
/obj/item/paint/paint_remover,
/obj/item/plunger,
/obj/item/pushbroom,
/obj/item/reagent_containers/spray,
/obj/item/soap,
/obj/item/wirebrush,
))
storage_type = /datum/storage/janitor_belt
/obj/item/storage/belt/janitor/full/PopulateContents()
new /obj/item/lightreplacer(src)
@@ -707,21 +501,7 @@
icon_state = "bandolier"
inhand_icon_state = "bandolier"
worn_icon_state = "bandolier"
/obj/item/storage/belt/bandolier/Initialize(mapload)
. = ..()
atom_storage.max_slots = 24
atom_storage.max_total_storage = 24
atom_storage.numerical_stacking = TRUE
atom_storage.allow_quick_gather = TRUE
atom_storage.allow_quick_empty = TRUE
atom_storage.numerical_stacking = TRUE
atom_storage.set_holdable(list(
/obj/item/ammo_casing/strilka310,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/c357,
/obj/item/ammo_casing/junk,
))
storage_type = /datum/storage/bandolier_belt
/obj/item/storage/belt/fannypack
name = "fannypack"
@@ -731,12 +511,7 @@
worn_icon_state = "fannypack_leather"
dying_key = DYE_REGISTRY_FANNYPACK
custom_price = PAYCHECK_CREW * 2
/obj/item/storage/belt/fannypack/Initialize(mapload)
. = ..()
atom_storage.max_slots = 3
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.silent = TRUE
storage_type = /datum/storage/fanny_pack
/obj/item/storage/belt/fannypack/black
name = "black fannypack"
@@ -803,17 +578,12 @@
worn_icon_state = "sheath"
w_class = WEIGHT_CLASS_BULKY
interaction_flags_click = parent_type::interaction_flags_click | NEED_DEXTERITY | NEED_HANDS
storage_type = /datum/storage/sabre_belt
/obj/item/storage/belt/sabre/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
atom_storage.max_slots = 1
atom_storage.do_rustle = FALSE
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.set_holdable(/obj/item/melee/sabre)
atom_storage.click_alt_open = FALSE
/obj/item/storage/belt/sabre/examine(mob/user)
. = ..()
if(length(contents))
@@ -851,17 +621,12 @@
worn_icon_state = "grass_sheath"
w_class = WEIGHT_CLASS_BULKY
interaction_flags_click = parent_type::interaction_flags_click | NEED_DEXTERITY | NEED_HANDS
storage_type = /datum/storage/green_sabre_belt
/obj/item/storage/belt/grass_sabre/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
atom_storage.max_slots = 1
atom_storage.do_rustle = FALSE
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.set_holdable(/obj/item/melee/parsnip_sabre)
atom_storage.click_alt_open = FALSE
/obj/item/storage/belt/grass_sabre/examine(mob/user)
. = ..()
if(length(contents))
@@ -894,24 +659,4 @@
inhand_icon_state = "utility"
worn_icon_state = "plantbelt"
content_overlays = TRUE
/obj/item/storage/belt/plant/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.set_holdable(list(
/obj/item/cultivator,
/obj/item/geneshears,
/obj/item/graft,
/obj/item/gun/energy/floragun,
/obj/item/hatchet,
/obj/item/plant_analyzer,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/spray/pestspray,
/obj/item/reagent_containers/spray/plantbgone,
/obj/item/secateurs,
/obj/item/seeds,
/obj/item/shovel/spade,
))
storage_type = /datum/storage/plant_belt

View File

@@ -14,13 +14,11 @@
var/foldable_result = /obj/item/stack/sheet/cardboard
/// What drawing will we get on the face of the box?
var/illustration = "writing"
storage_type = /datum/storage/box
/obj/item/storage/box/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
update_appearance()
atom_storage.open_sound = 'sound/items/handling/cardboard_box/cardboard_box_open.ogg'
atom_storage.rustle_sound = 'sound/items/handling/cardboard_box/cardboard_box_rustle.ogg'
/obj/item/storage/box/suicide_act(mob/living/carbon/user)
var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)

View File

@@ -21,13 +21,7 @@
/obj/item/storage/box/debugtools
name = "box of debug tools"
icon_state = "syndiebox"
/obj/item/storage/box/debugtools/Initialize(mapload)
. = ..()
atom_storage.allow_big_nesting = TRUE
atom_storage.max_slots = 99
atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC
atom_storage.max_total_storage = 99
storage_type = /datum/storage/box/debug
/obj/item/storage/box/debugtools/PopulateContents()
var/static/items_inside = list(

View File

@@ -3,11 +3,11 @@
desc = "A cardboard box folded in a manner that is optimal for concealment, rather than for stowing your belongings."
icon_state = "flat"
illustration = null
storage_type = /datum/storage/box/flat
/obj/item/storage/box/flat/Initialize(mapload)
. = ..()
AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_OBSERVER, use_anchor = TRUE, tilt_tile = TRUE)
atom_storage.max_slots = 3
/obj/item/storage/box/proc/flatten_box()
if(istype(loc, /obj/item/storage) || type != /obj/item/storage/box || contents.len)

View File

@@ -7,15 +7,12 @@
illustration = null
/// What type of donk pocket are we gonna cram into this box?
var/donktype = /obj/item/food/donkpocket
storage_type = /datum/storage/box/donk_pockets
/obj/item/storage/box/donkpockets/PopulateContents()
for(var/i in 1 to 6)
new donktype(src)
/obj/item/storage/box/donkpockets/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/food/donkpocket)
/obj/item/storage/box/donkpockets/donkpocketspicy
name = "box of spicy-flavoured donk-pockets"
icon_state = "donkpocketboxspicy"
@@ -340,16 +337,11 @@
illustration = null
foldable_result = null
custom_price = PAYCHECK_CREW
storage_type = /datum/storage/box/gum
///Typepath of the type of gum that spawns with this box, this is passed to the wrapper for spawning in.
var/spawning_gum_type = /obj/item/food/bubblegum
/obj/item/storage/box/gum/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/storage/bubblegum_wrapper)
atom_storage.max_slots = 4
atom_storage.allow_big_nesting = TRUE
/obj/item/storage/box/gum/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/storage/bubblegum_wrapper(src, spawning_gum_type)
@@ -559,14 +551,10 @@
desc = "A bag containing fresh, dry coffee arabica beans. Ethically sourced and packaged by Waffle Corp."
illustration = null
icon = 'icons/obj/food/containers.dmi'
storage_type = /datum/storage/box/coffee
var/beantype = /obj/item/food/grown/coffee
/obj/item/storage/box/coffeepack/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/food/grown/coffee)
/obj/item/storage/box/coffeepack/PopulateContents()
atom_storage.max_slots = 5
for(var/i in 1 to 5)
var/obj/item/food/grown/coffee/bean = new beantype(src)
ADD_TRAIT(bean, TRAIT_DRIED, ELEMENT_TRAIT(type))

View File

@@ -143,15 +143,7 @@
illustration = null
w_class = WEIGHT_CLASS_SMALL
custom_price = PAYCHECK_CREW * 1.75
/obj/item/storage/box/bandages/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.set_holdable(list(
/obj/item/stack/medical/bandage,
/obj/item/reagent_containers/applicator/pill,
/obj/item/reagent_containers/applicator/patch,
))
storage_type = /datum/storage/box/bandages
/obj/item/storage/box/bandages/PopulateContents()
for(var/i in 1 to 5)

View File

@@ -37,17 +37,10 @@
desc = "Drymate brand monkey cubes. Just add water!"
icon_state = "monkeycubebox"
illustration = null
custom_price = PAYCHECK_CREW * 2
storage_type = /datum/storage/box/monkey_cube
/// Which type of cube are we spawning in this box?
var/cube_type = /obj/item/food/monkeycube
custom_price = PAYCHECK_CREW * 2
/obj/item/storage/box/monkeycubes/Initialize(mapload)
. = ..()
atom_storage.max_slots = 7
atom_storage.set_holdable(
can_hold_list = /obj/item/food/monkeycube,
cant_hold_list = /obj/item/food/monkeycube/gorilla,
)
/obj/item/storage/box/monkeycubes/PopulateContents()
for(var/i in 1 to 5)
@@ -62,11 +55,7 @@
desc = "Waffle Corp. brand gorilla cubes. Do not taunt."
icon_state = "monkeycubebox"
illustration = null
/obj/item/storage/box/gorillacubes/Initialize(mapload)
. = ..()
atom_storage.max_slots = 3
atom_storage.set_holdable(/obj/item/food/monkeycube/gorilla)
storage_type = /datum/storage/box/gorilla_cube_box
/obj/item/storage/box/gorillacubes/PopulateContents()
for(var/i in 1 to 3)
@@ -115,13 +104,7 @@
/obj/item/storage/box/stabilized //every single stabilized extract from xenobiology
name = "box of stabilized extracts"
icon_state = "syndiebox"
/obj/item/storage/box/stabilized/Initialize(mapload)
. = ..()
atom_storage.allow_big_nesting = TRUE
atom_storage.max_slots = 99
atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC
atom_storage.max_total_storage = 99
storage_type = /datum/storage/box/stabilized
/obj/item/storage/box/stabilized/PopulateContents()
var/static/items_inside = list(

View File

@@ -60,11 +60,7 @@
icon = 'icons/obj/toys/toy.dmi'
icon_state = "spbox"
illustration = ""
/obj/item/storage/box/snappops/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/toy/snappop)
atom_storage.max_slots = 8
storage_type = /datum/storage/box/snappops
/obj/item/storage/box/snappops/PopulateContents()
for(var/i in 1 to 8)
@@ -86,11 +82,10 @@
custom_price = PAYCHECK_CREW * 0.4
base_icon_state = "matchbox"
illustration = null
storage_type = /datum/storage/box/match
/obj/item/storage/box/matches/Initialize(mapload)
. = ..()
atom_storage.max_slots = 10
atom_storage.set_holdable(/obj/item/match)
AddElement(/datum/element/ignites_matches)
/obj/item/storage/box/matches/PopulateContents()
@@ -117,16 +112,7 @@
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
foldable_result = /obj/item/stack/sheet/cardboard //BubbleWrap
illustration = "light"
/obj/item/storage/box/lights/Initialize(mapload)
. = ..()
atom_storage.max_slots = 21
atom_storage.set_holdable(list(
/obj/item/light/tube,
/obj/item/light/bulb
))
atom_storage.max_total_storage = 21
atom_storage.allow_quick_gather = FALSE //temp workaround to re-enable filling the light replacer with the box
storage_type = /datum/storage/box/lights
/obj/item/storage/box/lights/bulbs/PopulateContents()
for(var/i in 1 to 21)
@@ -208,13 +194,7 @@
name = "box of long balloons"
desc = "A completely randomized and wacky box of long balloons, harvested straight from balloon farms on the clown planet."
illustration = "balloon"
/obj/item/storage/box/balloons/Initialize(mapload)
. = ..()
atom_storage.max_slots = 24
atom_storage.set_holdable(/obj/item/toy/balloon/long)
atom_storage.max_total_storage = 24
atom_storage.allow_quick_gather = FALSE
storage_type = /datum/storage/box/balloon
/obj/item/storage/box/balloons/PopulateContents()
for(var/i in 1 to 24)
@@ -227,6 +207,8 @@
icon_state = "stickerpack"
illustration = null
w_class = WEIGHT_CLASS_TINY
storage_type = /datum/storage/box/stickers
var/static/list/pack_labels = list(
"smile",
"frown",
@@ -238,9 +220,6 @@
/obj/item/storage/box/stickers/Initialize(mapload)
. = ..()
atom_storage.max_slots = 8
atom_storage.set_holdable(/obj/item/sticker)
atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
if(isnull(illustration))
illustration = pick(pack_labels)
update_appearance()

View File

@@ -16,12 +16,10 @@
attack_verb_simple = list("bash", "batter", "bludgeon", "thrash", "whack")
resistance_flags = FLAMMABLE
max_integrity = 150
var/folder_path = /obj/item/folder //this is the path of the folder that gets spawned in New()
storage_type = /datum/storage/briefcase
/obj/item/storage/briefcase/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 21
/// The path of the folder that gets spawned in New()
var/folder_path = /obj/item/folder
/obj/item/storage/briefcase/PopulateContents()
new /obj/item/pen(src)
@@ -86,8 +84,6 @@
/obj/item/storage/briefcase/secure/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 21
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
AddComponent(/datum/component/lockable_storage)
///Syndie variant of Secure Briefcase. Contains space cash, slightly more robust.

View File

@@ -103,10 +103,7 @@
appearance_flags = KEEP_TOGETHER|LONG_GLIDE
custom_premium_price = PAYCHECK_COMMAND * 1.75
contents_tag = "donut"
/obj/item/storage/fancy/donut_box/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/food/donut)
storage_type = /datum/storage/donut
/obj/item/storage/fancy/donut_box/PopulateContents()
. = ..()
@@ -152,10 +149,7 @@
spawn_type = /obj/item/food/egg
spawn_count = 12
contents_tag = "egg"
/obj/item/storage/fancy/egg_box/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/food/egg)
storage_type = /datum/storage/egg_box
/*
* Fertile Egg Box
@@ -185,10 +179,7 @@
spawn_count = 5
open_status = FANCY_CONTAINER_ALWAYS_OPEN
contents_tag = "candle"
/obj/item/storage/fancy/candle_box/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/flashlight/flare/candle)
storage_type = /datum/storage/fancy_holder
////////////
//CIG PACK//
@@ -209,6 +200,8 @@
custom_price = PAYCHECK_CREW
age_restricted = TRUE
contents_tag = "cigarette"
storage_type = /datum/storage/cigarette_box
///for cigarette overlay
var/candy = FALSE
/// Does this cigarette packet come with a coupon attached?
@@ -234,8 +227,7 @@
/obj/item/storage/fancy/cigarettes/Initialize(mapload)
. = ..()
atom_storage.display_contents = FALSE
atom_storage.set_holdable(list(/obj/item/cigarette, /obj/item/lighter))
register_context()
/obj/item/storage/fancy/cigarettes/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
@@ -404,10 +396,7 @@
spawn_count = 10
custom_price = PAYCHECK_LOWER
has_open_closed_states = FALSE
/obj/item/storage/fancy/rollingpapers/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/rollingpaper)
storage_type = /datum/storage/fancy_holder
/obj/item/storage/fancy/rollingpapers/update_overlays()
. = ..()
@@ -485,11 +474,7 @@
/obj/item/food/bonbon/peanut_butter_cup,
)
spawn_count = 8
/obj/item/storage/fancy/heart_box/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/food/bonbon)
storage_type = /datum/storage/heart_box
/obj/item/storage/fancy/nugget_box
name = "nugget box"
@@ -501,10 +486,7 @@
w_class = WEIGHT_CLASS_SMALL
spawn_type = /obj/item/food/nugget
spawn_count = 6
/obj/item/storage/fancy/nugget_box/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/food/nugget)
storage_type = /datum/storage/fancy_holder
/*
* Jar of pickles
@@ -523,10 +505,7 @@
custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT)
open_status = FANCY_CONTAINER_ALWAYS_OPEN
has_open_closed_states = FALSE
/obj/item/storage/fancy/pickles_jar/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/food/pickle)
storage_type = /datum/storage/fancy_holder
/obj/item/storage/fancy/pickles_jar/update_icon_state()
. = ..()
@@ -554,16 +533,7 @@
foldable_result = /obj/item/stack/sheet/mineral/wood
open_status = FANCY_CONTAINER_ALWAYS_OPEN
has_open_closed_states = FALSE
/obj/item/storage/fancy/coffee_condi_display/Initialize(mapload)
. = ..()
atom_storage.max_slots = 14
atom_storage.set_holdable(list(
/obj/item/reagent_containers/condiment/pack/sugar,
/obj/item/reagent_containers/condiment/creamer,
/obj/item/reagent_containers/condiment/pack/astrotame,
/obj/item/reagent_containers/condiment/chocolate,
))
storage_type = /datum/storage/coffee_condi_display
/obj/item/storage/fancy/coffee_condi_display/update_overlays()
. = ..()

View File

@@ -5,6 +5,7 @@
desc = "A bag for storing extra clothes and shoes."
slot_flags = NONE
resistance_flags = FLAMMABLE
storage_type = /datum/storage/bag/garment
/obj/item/storage/bag/garment/captain
name = "captain's garment bag"
@@ -38,15 +39,6 @@
name = "quartermasters's garment bag"
desc = "A bag for storing extra clothes and shoes. This one belongs to the quartermaster."
/obj/item/storage/bag/garment/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.numerical_stacking = FALSE
atom_storage.max_total_storage = 200
atom_storage.max_slots = 15
atom_storage.insert_preposition = "in"
atom_storage.set_holdable(/obj/item/clothing)
/obj/item/storage/bag/garment/captain/PopulateContents()
new /obj/item/clothing/under/rank/captain(src)
new /obj/item/clothing/under/rank/captain/skirt(src)

View File

@@ -7,6 +7,7 @@
worn_icon_state = "holster"
alternate_worn_layer = UNDER_SUIT_LAYER
w_class = WEIGHT_CLASS_BULKY
storage_type = /datum/storage/holster
/obj/item/storage/belt/holster/equipped(mob/user, slot)
. = ..()
@@ -17,43 +18,10 @@
. = ..()
REMOVE_CLOTHING_TRAIT(user, TRAIT_GUNFLIP)
/obj/item/storage/belt/holster/Initialize(mapload)
. = ..()
atom_storage.max_slots = 1
atom_storage.max_total_storage = 16
atom_storage.set_holdable(list(
/obj/item/gun/ballistic/automatic/pistol,
/obj/item/gun/ballistic/revolver,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/dueling,
/obj/item/food/grown/banana,
/obj/item/gun/energy/laser/thermal,
/obj/item/gun/ballistic/rifle/boltaction, //fits if you make it an obrez
/obj/item/gun/energy/laser/captain,
/obj/item/gun/energy/e_gun/hos,
))
atom_storage.open_sound = 'sound/items/handling/holster_open.ogg'
atom_storage.open_sound_vary = TRUE
/obj/item/storage/belt/holster/energy
name = "energy shoulder holsters"
desc = "A rather plain pair of shoulder holsters with a bit of insulated padding inside. Designed to hold energy weaponry."
/obj/item/storage/belt/holster/energy/Initialize(mapload)
. = ..()
atom_storage.max_slots = 2
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.set_holdable(list(
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/dueling,
/obj/item/food/grown/banana,
/obj/item/gun/energy/laser/thermal,
/obj/item/gun/energy/recharge/ebow,
/obj/item/gun/energy/laser/captain,
/obj/item/gun/energy/e_gun/hos,
))
storage_type = /datum/storage/holster/energy
/obj/item/storage/belt/holster/energy/thermal
name = "thermal shoulder holsters"
@@ -85,31 +53,7 @@
name = "detective's holster"
desc = "A holster able to carry handguns and some ammo. WARNING: Badasses only."
w_class = WEIGHT_CLASS_BULKY
/obj/item/storage/belt/holster/detective/Initialize(mapload)
. = ..()
atom_storage.max_slots = 3
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.set_holdable(list(
/obj/item/gun/ballistic/automatic/pistol,
/obj/item/ammo_box/magazine/m9mm, // Pistol magazines.
/obj/item/ammo_box/magazine/m9mm_aps,
/obj/item/ammo_box/magazine/m10mm,
/obj/item/ammo_box/magazine/m45,
/obj/item/ammo_box/magazine/m50,
/obj/item/gun/ballistic/revolver,
/obj/item/ammo_box/c38, // Revolver speedloaders.
/obj/item/ammo_box/a357,
/obj/item/ammo_box/strilka310,
/obj/item/ammo_box/magazine/toy/pistol,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/dueling,
/obj/item/gun/energy/laser/thermal,
/obj/item/gun/energy/laser/captain,
/obj/item/gun/energy/e_gun/hos,
/obj/item/gun/ballistic/rifle/boltaction, //fits if you make it an obrez
))
storage_type = /datum/storage/holster/detective
/obj/item/storage/belt/holster/detective/full/PopulateContents()
generate_items_inside(list(
@@ -139,32 +83,7 @@
w_class = WEIGHT_CLASS_NORMAL
actions_types = list(/datum/action/item_action/chameleon/change/belt)
action_slots = ALL
/obj/item/storage/belt/holster/chameleon/Initialize(mapload)
. = ..()
atom_storage.max_slots = 2
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.set_holdable(list(
/obj/item/gun/ballistic/automatic/pistol,
/obj/item/ammo_box/magazine/m9mm,
/obj/item/ammo_box/magazine/m9mm_aps,
/obj/item/ammo_box/magazine/m10mm,
/obj/item/ammo_box/magazine/m45,
/obj/item/ammo_box/magazine/m50,
/obj/item/gun/ballistic/revolver,
/obj/item/ammo_box/c38,
/obj/item/ammo_box/a357,
/obj/item/ammo_box/strilka310,
/obj/item/ammo_box/magazine/toy/pistol,
/obj/item/gun/energy/recharge/ebow,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/dueling,
/obj/item/gun/energy/laser/captain,
/obj/item/gun/energy/e_gun/hos,
))
atom_storage.silent = TRUE
storage_type = /datum/storage/holster/chameleon
/obj/item/storage/belt/holster/nukie
name = "operative holster"
@@ -173,28 +92,11 @@
inhand_icon_state = "syndicate_holster"
worn_icon_state = "syndicate_holster"
w_class = WEIGHT_CLASS_BULKY
/obj/item/storage/belt/holster/nukie/Initialize(mapload)
. = ..()
atom_storage.max_slots = 2
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.set_holdable(list(
/obj/item/gun, // ALL guns.
/obj/item/ammo_box/magazine, // ALL magazines.
/obj/item/ammo_box/c38, //There isn't a speedloader parent type, so I just put these three here by hand.
/obj/item/ammo_box/a357, //I didn't want to just use /obj/item/ammo_box, because then this could hold huge boxes of ammo.
/obj/item/ammo_box/strilka310,
/obj/item/ammo_casing, // For shotgun shells, rockets, launcher grenades, and a few other things.
/obj/item/grenade, // All regular grenades, the big grenade launcher fires these.
))
storage_type = /datum/storage/holster/nukie
/obj/item/storage/belt/holster/nukie/cowboy
desc = "A deep shoulder holster capable of holding almost any form of small firearm and its ammo. This one's specialized for handguns."
/obj/item/storage/belt/holster/nukie/cowboy/Initialize(mapload)
. = ..()
atom_storage.max_slots = 3
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
storage_type = /datum/storage/holster/nukie/cowboy
/obj/item/storage/belt/holster/nukie/cowboy/full/PopulateContents()
generate_items_inside(list(

View File

@@ -8,6 +8,8 @@
righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
req_access = list(ACCESS_ARMORY)
storage_type = /datum/storage/lockbox
var/broken = FALSE
var/open = FALSE
var/icon_locked = "lockbox+l"
@@ -17,10 +19,6 @@
/obj/item/storage/lockbox/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 14
atom_storage.max_slots = 4
atom_storage.set_locked(STORAGE_FULLY_LOCKED)
register_context()
@@ -112,13 +110,7 @@
icon_closed = "medalbox"
icon_broken = "medalbox+b"
icon_open = "medalboxopen"
/obj/item/storage/lockbox/medal/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.max_slots = 10
atom_storage.max_total_storage = 20
atom_storage.set_holdable(/obj/item/clothing/accessory/medal)
storage_type = /datum/storage/lockbox/medal
/obj/item/storage/lockbox/medal/examine(mob/user)
. = ..()

View File

@@ -21,70 +21,11 @@
drop_sound = 'sound/items/handling/medkit/medkit_drop.ogg'
pickup_sound = 'sound/items/handling/medkit/medkit_pick_up.ogg'
sound_vary = TRUE
storage_type = /datum/storage/medkit
var/empty = FALSE
/// Defines damage type of the medkit. General ones stay null. Used for medibot healing bonuses
var/damagetype_healed
/// you just type this in holdables list of medkits instead of copypasting bunch of text.
var/static/list/list_of_everything_medkits_can_hold = list(
/obj/item/healthanalyzer,
/obj/item/dnainjector,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/applicator,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/medigel,
/obj/item/reagent_containers/spray,
/obj/item/lighter,
/obj/item/storage/box/bandages,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/stack/medical,
/obj/item/flashlight/pen,
/obj/item/extinguisher/mini,
/obj/item/reagent_containers/hypospray,
/obj/item/sensor_device,
/obj/item/radio,
/obj/item/clothing/gloves,
/obj/item/lazarus_injector,
/obj/item/bikehorn/rubberducky,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/breath/medical,
/obj/item/surgical_drapes,
/obj/item/scalpel,
/obj/item/circular_saw,
/obj/item/bonesetter,
/obj/item/surgicaldrill,
/obj/item/retractor,
/obj/item/cautery,
/obj/item/hemostat,
/obj/item/blood_filter,
/obj/item/shears,
/obj/item/geiger_counter,
/obj/item/clothing/neck/stethoscope,
/obj/item/stamp,
/obj/item/clothing/glasses,
/obj/item/wrench/medical,
/obj/item/clothing/mask/muzzle,
/obj/item/reagent_containers/blood,
/obj/item/tank/internals/emergency_oxygen,
/obj/item/gun/syringe/syndicate,
/obj/item/implantcase,
/obj/item/implant,
/obj/item/implanter,
/obj/item/pinpointer/crew,
/obj/item/holosign_creator/medical,
/obj/item/stack/sticky_tape,
)
/obj/item/storage/medkit/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.open_sound = 'sound/items/handling/medkit/medkit_open.ogg'
atom_storage.open_sound_vary = TRUE
atom_storage.rustle_sound = 'sound/items/handling/medkit/medkit_rustle.ogg'
/obj/item/storage/medkit/regular
icon_state = "medkit"
@@ -130,13 +71,7 @@
icon_state = "medkit_surgery"
inhand_icon_state = "medkit-surgical"
desc = "A high capacity aid kit for doctors, full of medical supplies and basic surgical equipment."
/obj/item/storage/medkit/surgery/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL //holds the same equipment as a medibelt
atom_storage.max_slots = 12
atom_storage.max_total_storage = 24
atom_storage.set_holdable(list_of_everything_medkits_can_hold)
storage_type = /datum/storage/medkit/surgery
/obj/item/storage/medkit/surgery/PopulateContents()
if(empty)
@@ -320,13 +255,7 @@
icon_state = "medkit_tactical"
inhand_icon_state = "medkit-tactical"
damagetype_healed = HEAL_ALL_DAMAGE
/obj/item/storage/medkit/tactical/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_slots = 21
atom_storage.max_total_storage = 24
atom_storage.set_holdable(list_of_everything_medkits_can_hold)
storage_type = /datum/storage/medkit/tactical
/obj/item/storage/medkit/tactical/PopulateContents()
if(empty)
@@ -354,14 +283,7 @@
icon_state = "medkit_tactical_premium"
inhand_icon_state = "medkit-tactical-premium"
grind_results = list(/datum/reagent/lead = 10)
/obj/item/storage/medkit/tactical/premium/Initialize(mapload)
. = ..()
atom_storage.allow_big_nesting = TRUE // so you can put back the box you took out
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_slots = 21
atom_storage.max_total_storage = 34
atom_storage.set_holdable(list_of_everything_medkits_can_hold)
storage_type = /datum/storage/medkit/tactical/premium
/obj/item/storage/medkit/tactical/premium/PopulateContents()
if(empty)
@@ -385,7 +307,6 @@
/obj/item/clothing/glasses/hud/health/night/science = 1,
)
generate_items_inside(items_inside,src)
list_of_everything_medkits_can_hold += items_inside
/obj/item/storage/medkit/coroner
name = "compact coroner's medkit"
@@ -393,25 +314,7 @@
icon = 'icons/obj/storage/medkit.dmi'
icon_state = "compact_coronerkit"
inhand_icon_state = "coronerkit"
/obj/item/storage/medkit/coroner/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_slots = 14
atom_storage.max_total_storage = 24
atom_storage.set_holdable(list(
/obj/item/reagent_containers,
/obj/item/bodybag,
/obj/item/toy/crayon,
/obj/item/pen,
/obj/item/paper,
/obj/item/surgical_drapes,
/obj/item/scalpel,
/obj/item/retractor,
/obj/item/hemostat,
/obj/item/cautery,
/obj/item/autopsy_scanner,
))
storage_type = /datum/storage/medkit/coroner
/obj/item/storage/medkit/coroner/PopulateContents()
if(empty)
@@ -448,248 +351,6 @@
/obj/item/storage/medkit/proc/get_medbot_skin()
return "generic"
/*
* Pill Bottles
*/
/obj/item/storage/pill_bottle
name = "pill bottle"
desc = "It's an airtight container for storing medication."
icon_state = "pill_canister"
icon = 'icons/obj/medical/chemical.dmi'
inhand_icon_state = "contsolid"
worn_icon_state = "nothing"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
pickup_sound = 'sound/items/handling/pill_bottle_pickup.ogg'
drop_sound = 'sound/items/handling/pill_bottle_place.ogg'
/obj/item/storage/pill_bottle/Initialize(mapload)
. = ..()
atom_storage.allow_quick_gather = TRUE
atom_storage.set_holdable(list(
/obj/item/reagent_containers/applicator/pill,
/obj/item/reagent_containers/applicator/patch,
/obj/item/food/bait/natural,
))
atom_storage.open_sound = 'sound/items/handling/pill_bottle_open.ogg'
atom_storage.open_sound_vary = FALSE
/obj/item/storage/pill_bottle/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is trying to get the cap off [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return TOXLOSS
/obj/item/storage/pill_bottle/multiver
name = "bottle of multiver pills"
desc = "Contains pills used to counter toxins."
/obj/item/storage/pill_bottle/multiver/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/multiver(src)
/obj/item/storage/pill_bottle/multiver/less
/obj/item/storage/pill_bottle/multiver/less/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/reagent_containers/applicator/pill/multiver(src)
/obj/item/storage/pill_bottle/epinephrine
name = "bottle of epinephrine pills"
desc = "Contains pills used to stabilize patients."
/obj/item/storage/pill_bottle/epinephrine/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/epinephrine(src)
/obj/item/storage/pill_bottle/mutadone
name = "bottle of mutadone pills"
desc = "Contains pills used to treat genetic abnormalities."
/obj/item/storage/pill_bottle/mutadone/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/mutadone(src)
/obj/item/storage/pill_bottle/potassiodide
name = "bottle of potassium iodide pills"
desc = "Contains pills used to reduce radiation damage."
/obj/item/storage/pill_bottle/potassiodide/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/reagent_containers/applicator/pill/potassiodide(src)
/obj/item/storage/pill_bottle/probital
name = "bottle of probital pills"
desc = "Contains pills used to treat brute damage. The tag in the bottle states 'Eat before ingesting, may cause fatigue'."
/obj/item/storage/pill_bottle/probital/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/reagent_containers/applicator/pill/probital(src)
/obj/item/storage/pill_bottle/iron
name = "bottle of iron pills"
desc = "Contains pills used to reduce blood loss slowly. The tag in the bottle states 'Only take one each five minutes'."
/obj/item/storage/pill_bottle/iron/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/reagent_containers/applicator/pill/iron(src)
/obj/item/storage/pill_bottle/mannitol
name = "bottle of mannitol pills"
desc = "Contains pills used to treat brain damage."
/obj/item/storage/pill_bottle/mannitol/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/mannitol(src)
//Contains 4 pills instead of 7, and 5u pills instead of 50u (50u pills heal 250 brain damage, 5u pills heal 25)
/obj/item/storage/pill_bottle/mannitol/braintumor
desc = "Contains diluted pills used to treat brain tumor symptoms. Take one when feeling lightheaded."
/obj/item/storage/pill_bottle/mannitol/braintumor/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/reagent_containers/applicator/pill/mannitol/braintumor(src)
/obj/item/storage/pill_bottle/stimulant
name = "bottle of stimulant pills"
desc = "Guaranteed to give you that extra burst of energy during a long shift!"
/obj/item/storage/pill_bottle/stimulant/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/stimulant(src)
/obj/item/storage/pill_bottle/sansufentanyl
name = "bottle of experimental medication"
desc = "A bottle of pills developed by Interdyne Pharmaceuticals. They're used to treat Hereditary Manifold Sickness."
/obj/item/storage/pill_bottle/sansufentanyl/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/reagent_containers/applicator/pill/sansufentanyl(src)
/obj/item/storage/pill_bottle/mining
name = "bottle of patches"
desc = "Contains patches used to treat brute and burn damage."
/obj/item/storage/pill_bottle/mining/PopulateContents()
new /obj/item/reagent_containers/applicator/patch/aiuri(src)
for(var/i in 1 to 3)
new /obj/item/reagent_containers/applicator/patch/libital(src)
/obj/item/storage/pill_bottle/zoom
name = "suspicious pill bottle"
desc = "The label is pretty old and almost unreadable, you recognize some chemical compounds."
/obj/item/storage/pill_bottle/zoom/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/zoom(src)
/obj/item/storage/pill_bottle/happy
name = "suspicious pill bottle"
desc = "There is a smiley on the top."
/obj/item/storage/pill_bottle/happy/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/happy(src)
/obj/item/storage/pill_bottle/lsd
name = "suspicious pill bottle"
desc = "There is a crude drawing which could be either a mushroom, or a deformed moon."
/obj/item/storage/pill_bottle/lsd/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/lsd(src)
/obj/item/storage/pill_bottle/aranesp
name = "suspicious pill bottle"
desc = "The label has 'fuck disablers' hastily scrawled in black marker."
/obj/item/storage/pill_bottle/aranesp/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/aranesp(src)
/obj/item/storage/pill_bottle/psicodine
name = "bottle of psicodine pills"
desc = "Contains pills used to treat mental distress and traumas."
/obj/item/storage/pill_bottle/psicodine/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/psicodine(src)
/obj/item/storage/pill_bottle/penacid
name = "bottle of pentetic acid pills"
desc = "Contains pills to expunge radiation and toxins."
/obj/item/storage/pill_bottle/penacid/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/reagent_containers/applicator/pill/penacid(src)
/obj/item/storage/pill_bottle/neurine
name = "bottle of neurine pills"
desc = "Contains pills to treat non-severe mental traumas."
/obj/item/storage/pill_bottle/neurine/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/neurine(src)
/obj/item/storage/pill_bottle/maintenance_pill
name = "bottle of maintenance pills"
desc = "An old pill bottle. It smells musty."
/obj/item/storage/pill_bottle/maintenance_pill/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/applicator/pill/P = locate() in src
name = "bottle of [P.name]s"
/obj/item/storage/pill_bottle/maintenance_pill/PopulateContents()
for(var/i in 1 to rand(1,7))
new /obj/item/reagent_containers/applicator/pill/maintenance(src)
/obj/item/storage/pill_bottle/maintenance_pill/full/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/maintenance(src)
///////////////////////////////////////// Psychologist inventory pillbottles
/obj/item/storage/pill_bottle/happinesspsych
name = "happiness pills"
desc = "Contains pills used as a last resort means to temporarily stabilize depression and anxiety. WARNING: side effects may include slurred speech, drooling, and severe addiction."
/obj/item/storage/pill_bottle/happinesspsych/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/happinesspsych(src)
/obj/item/storage/pill_bottle/lsdpsych
name = "mindbreaker toxin pills"
desc = "!FOR THERAPEUTIC USE ONLY! Contains pills used to alleviate the symptoms of Reality Dissociation Syndrome."
/obj/item/storage/pill_bottle/lsdpsych/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/lsdpsych(src)
/obj/item/storage/pill_bottle/paxpsych
name = "pax pills"
desc = "Contains pills used to temporarily pacify patients that are deemed a harm to themselves or others."
/obj/item/storage/pill_bottle/paxpsych/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/paxpsych(src)
/obj/item/storage/pill_bottle/naturalbait
name = "freshness jar"
desc = "Full of natural fish bait."
/obj/item/storage/pill_bottle/naturalbait/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/food/bait/natural(src)
/obj/item/storage/pill_bottle/ondansetron
name = "ondansetron patches"
desc = "A bottle containing patches of ondansetron, a drug used to treat nausea and vomiting. May cause drowsiness."
/obj/item/storage/pill_bottle/ondansetron/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/patch/ondansetron(src)
/// A box which takes in coolant and uses it to preserve organs and body parts
/obj/item/storage/organbox
name = "organ transport box"
@@ -702,24 +363,15 @@
throw_speed = 3
throw_range = 7
custom_premium_price = PAYCHECK_CREW * 4
storage_type = /datum/storage/organ_box
/// var to prevent it freezing the same things over and over
var/cooling = FALSE
/obj/item/storage/organbox/Initialize(mapload)
. = ..()
create_storage(
storage_type = /datum/storage/organ_box,
max_specific_storage = WEIGHT_CLASS_BULKY,
max_total_storage = 21,
canhold = list(
/obj/item/organ,
/obj/item/bodypart,
/obj/item/food/icecream,
),
)
create_reagents(100, TRANSPARENT)
START_PROCESSING(SSobj, src)
/obj/item/storage/organbox/process(seconds_per_tick)

View File

@@ -0,0 +1,231 @@
/*
* Pill Bottles
*/
/obj/item/storage/pill_bottle
name = "pill bottle"
desc = "It's an airtight container for storing medication."
icon_state = "pill_canister"
icon = 'icons/obj/medical/chemical.dmi'
inhand_icon_state = "contsolid"
worn_icon_state = "nothing"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
pickup_sound = 'sound/items/handling/pill_bottle_pickup.ogg'
drop_sound = 'sound/items/handling/pill_bottle_place.ogg'
storage_type = /datum/storage/pillbottle
/obj/item/storage/pill_bottle/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is trying to get the cap off [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return TOXLOSS
/obj/item/storage/pill_bottle/multiver
name = "bottle of multiver pills"
desc = "Contains pills used to counter toxins."
/obj/item/storage/pill_bottle/multiver/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/multiver(src)
/obj/item/storage/pill_bottle/multiver/less
/obj/item/storage/pill_bottle/multiver/less/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/reagent_containers/applicator/pill/multiver(src)
/obj/item/storage/pill_bottle/epinephrine
name = "bottle of epinephrine pills"
desc = "Contains pills used to stabilize patients."
/obj/item/storage/pill_bottle/epinephrine/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/epinephrine(src)
/obj/item/storage/pill_bottle/mutadone
name = "bottle of mutadone pills"
desc = "Contains pills used to treat genetic abnormalities."
/obj/item/storage/pill_bottle/mutadone/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/mutadone(src)
/obj/item/storage/pill_bottle/potassiodide
name = "bottle of potassium iodide pills"
desc = "Contains pills used to reduce radiation damage."
/obj/item/storage/pill_bottle/potassiodide/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/reagent_containers/applicator/pill/potassiodide(src)
/obj/item/storage/pill_bottle/probital
name = "bottle of probital pills"
desc = "Contains pills used to treat brute damage. The tag in the bottle states 'Eat before ingesting, may cause fatigue'."
/obj/item/storage/pill_bottle/probital/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/reagent_containers/applicator/pill/probital(src)
/obj/item/storage/pill_bottle/iron
name = "bottle of iron pills"
desc = "Contains pills used to reduce blood loss slowly. The tag in the bottle states 'Only take one each five minutes'."
/obj/item/storage/pill_bottle/iron/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/reagent_containers/applicator/pill/iron(src)
/obj/item/storage/pill_bottle/mannitol
name = "bottle of mannitol pills"
desc = "Contains pills used to treat brain damage."
/obj/item/storage/pill_bottle/mannitol/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/mannitol(src)
//Contains 4 pills instead of 7, and 5u pills instead of 50u (50u pills heal 250 brain damage, 5u pills heal 25)
/obj/item/storage/pill_bottle/mannitol/braintumor
desc = "Contains diluted pills used to treat brain tumor symptoms. Take one when feeling lightheaded."
/obj/item/storage/pill_bottle/mannitol/braintumor/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/reagent_containers/applicator/pill/mannitol/braintumor(src)
/obj/item/storage/pill_bottle/stimulant
name = "bottle of stimulant pills"
desc = "Guaranteed to give you that extra burst of energy during a long shift!"
/obj/item/storage/pill_bottle/stimulant/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/stimulant(src)
/obj/item/storage/pill_bottle/sansufentanyl
name = "bottle of experimental medication"
desc = "A bottle of pills developed by Interdyne Pharmaceuticals. They're used to treat Hereditary Manifold Sickness."
/obj/item/storage/pill_bottle/sansufentanyl/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/reagent_containers/applicator/pill/sansufentanyl(src)
/obj/item/storage/pill_bottle/mining
name = "bottle of patches"
desc = "Contains patches used to treat brute and burn damage."
/obj/item/storage/pill_bottle/mining/PopulateContents()
new /obj/item/reagent_containers/applicator/patch/aiuri(src)
for(var/i in 1 to 3)
new /obj/item/reagent_containers/applicator/patch/libital(src)
/obj/item/storage/pill_bottle/zoom
name = "suspicious pill bottle"
desc = "The label is pretty old and almost unreadable, you recognize some chemical compounds."
/obj/item/storage/pill_bottle/zoom/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/zoom(src)
/obj/item/storage/pill_bottle/happy
name = "suspicious pill bottle"
desc = "There is a smiley on the top."
/obj/item/storage/pill_bottle/happy/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/happy(src)
/obj/item/storage/pill_bottle/lsd
name = "suspicious pill bottle"
desc = "There is a crude drawing which could be either a mushroom, or a deformed moon."
/obj/item/storage/pill_bottle/lsd/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/lsd(src)
/obj/item/storage/pill_bottle/aranesp
name = "suspicious pill bottle"
desc = "The label has 'fuck disablers' hastily scrawled in black marker."
/obj/item/storage/pill_bottle/aranesp/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/aranesp(src)
/obj/item/storage/pill_bottle/psicodine
name = "bottle of psicodine pills"
desc = "Contains pills used to treat mental distress and traumas."
/obj/item/storage/pill_bottle/psicodine/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/psicodine(src)
/obj/item/storage/pill_bottle/penacid
name = "bottle of pentetic acid pills"
desc = "Contains pills to expunge radiation and toxins."
/obj/item/storage/pill_bottle/penacid/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/reagent_containers/applicator/pill/penacid(src)
/obj/item/storage/pill_bottle/neurine
name = "bottle of neurine pills"
desc = "Contains pills to treat non-severe mental traumas."
/obj/item/storage/pill_bottle/neurine/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/neurine(src)
/obj/item/storage/pill_bottle/maintenance_pill
name = "bottle of maintenance pills"
desc = "An old pill bottle. It smells musty."
/obj/item/storage/pill_bottle/maintenance_pill/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/applicator/pill/P = locate() in src
name = "bottle of [P.name]s"
/obj/item/storage/pill_bottle/maintenance_pill/PopulateContents()
for(var/i in 1 to rand(1,7))
new /obj/item/reagent_containers/applicator/pill/maintenance(src)
/obj/item/storage/pill_bottle/maintenance_pill/full/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/applicator/pill/maintenance(src)
///////////////////////////////////////// Psychologist inventory pillbottles
/obj/item/storage/pill_bottle/happinesspsych
name = "happiness pills"
desc = "Contains pills used as a last resort means to temporarily stabilize depression and anxiety. WARNING: side effects may include slurred speech, drooling, and severe addiction."
/obj/item/storage/pill_bottle/happinesspsych/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/happinesspsych(src)
/obj/item/storage/pill_bottle/lsdpsych
name = "mindbreaker toxin pills"
desc = "!FOR THERAPEUTIC USE ONLY! Contains pills used to alleviate the symptoms of Reality Dissociation Syndrome."
/obj/item/storage/pill_bottle/lsdpsych/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/lsdpsych(src)
/obj/item/storage/pill_bottle/paxpsych
name = "pax pills"
desc = "Contains pills used to temporarily pacify patients that are deemed a harm to themselves or others."
/obj/item/storage/pill_bottle/paxpsych/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/pill/paxpsych(src)
/obj/item/storage/pill_bottle/naturalbait
name = "freshness jar"
desc = "Full of natural fish bait."
/obj/item/storage/pill_bottle/naturalbait/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/food/bait/natural(src)
/obj/item/storage/pill_bottle/ondansetron
name = "ondansetron patches"
desc = "A bottle containing patches of ondansetron, a drug used to treat nausea and vomiting. May cause drowsiness."
/obj/item/storage/pill_bottle/ondansetron/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/applicator/patch/ondansetron(src)

View File

@@ -8,6 +8,7 @@
righthand_file = 'icons/mob/inhands/items/drinks_righthand.dmi'
custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT*1.2)
max_integrity = 500
storage_type = /datum/storage/sixcan
/obj/item/storage/cans/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins popping open a final cold one with the boys! It looks like [user.p_theyre()] trying to commit suicide!"))
@@ -21,18 +22,6 @@
. = ..()
update_appearance()
/obj/item/storage/cans/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.max_total_storage = 12
atom_storage.max_slots = 6
atom_storage.set_holdable(list(
/obj/item/reagent_containers/cup/soda_cans,
/obj/item/reagent_containers/cup/glass/bottle/beer,
/obj/item/reagent_containers/cup/glass/bottle/ale,
/obj/item/reagent_containers/cup/glass/waterbottle,
))
/obj/item/storage/cans/sixsoda
name = "soda bottle ring"
desc = "Holds six soda cans. Remember to recycle when you're done!"

View File

@@ -20,9 +20,11 @@
drop_sound = 'sound/items/handling/toolbox/toolbox_drop.ogg'
pickup_sound = 'sound/items/handling/toolbox/toolbox_pickup.ogg'
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
wound_bonus = 5
storage_type = /datum/storage/toolbox
var/latches = "single_latch"
var/has_latches = TRUE
wound_bonus = 5
/// How many interactions are we currently performing
var/current_interactions = 0
/// Items we should not interact with when left clicking
@@ -35,7 +37,6 @@
/obj/item/storage/toolbox/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
if(has_latches)
if(prob(10))
latches = "double_latch"
@@ -44,8 +45,6 @@
if(prob(0.1))
latches = "quad_latch" // like winning the lottery, but worse
update_appearance()
atom_storage.open_sound = 'sound/items/handling/toolbox/toolbox_open.ogg'
atom_storage.rustle_sound = 'sound/items/handling/toolbox/toolbox_rustle.ogg'
AddElement(/datum/element/falling_hazard, damage = force, wound_bonus = wound_bonus, hardhat_safety = TRUE, crushes = FALSE, impact_sound = hitsound)
/obj/item/storage/toolbox/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
@@ -176,10 +175,7 @@
desc = "It's seen better days."
force = 5
w_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/toolbox/mechanical/old/heirloom/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
storage_type = /datum/storage/toolbox/heirloom
/obj/item/storage/toolbox/mechanical/old/heirloom/PopulateContents()
return
@@ -252,10 +248,7 @@
force = 15
throwforce = 18
material_flags = NONE
/obj/item/storage/toolbox/syndicate/Initialize(mapload)
. = ..()
atom_storage.silent = TRUE
storage_type = /datum/storage/toolbox/syndicate
/obj/item/storage/toolbox/syndicate/PopulateContents()
new /obj/item/screwdriver/nuke(src)
@@ -289,11 +282,7 @@
inhand_icon_state = "artistic_toolbox"
w_class = WEIGHT_CLASS_GIGANTIC //Holds more than a regular toolbox!
material_flags = NONE
/obj/item/storage/toolbox/artistic/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 20
atom_storage.max_slots = 11
storage_type = /datum/storage/toolbox/artistic
/obj/item/storage/toolbox/artistic/PopulateContents()
new /obj/item/storage/crayons(src)
@@ -322,16 +311,16 @@
/// Tray we steal the og contents from.
var/obj/item/surgery_tray/tray_type = /obj/item/surgery_tray
/obj/item/storage/toolbox/medical/Initialize(mapload)
. = ..()
// what do any of these numbers fucking mean
atom_storage.max_total_storage = 20
atom_storage.max_slots = 11
/obj/item/storage/toolbox/medical/PopulateContents()
var/atom/fake_tray = new tray_type(get_turf(src)) // not in src lest it fill storage that we need for its tools later
for(var/atom/movable/thingy in fake_tray)
thingy.forceMove(src)
atom_storage.max_slots = 0
atom_storage.max_total_storage = 0
var/atom/fake_tray = new tray_type(null)
for(var/obj/item/tool in fake_tray)
tool.forceMove(src)
atom_storage.max_slots += 1
atom_storage.max_total_storage += tool.w_class
qdel(fake_tray)
/obj/item/storage/toolbox/medical/full
@@ -435,15 +424,10 @@
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
inhand_icon_state = "infiltrator_case"
has_latches = FALSE
storage_type = /datum/storage/toolbox/guncase
var/weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol
var/extra_to_spawn = /obj/item/ammo_box/magazine/m9mm
/obj/item/storage/toolbox/guncase/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.max_total_storage = 7 //enough to hold ONE bulky gun and the ammo boxes
atom_storage.max_slots = 4
/obj/item/storage/toolbox/guncase/PopulateContents()
new weapon_to_spawn (src)
for(var/i in 1 to 3)
@@ -615,12 +599,7 @@
name = "double-bladed energy sword weapon case"
weapon_to_spawn = /obj/item/dualsaber
extra_to_spawn = /obj/item/soap/syndie
/obj/item/storage/toolbox/guncase/doublesword/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.max_total_storage = 10 //it'll hold enough
atom_storage.max_slots = 5
storage_type = /datum/storage/toolbox/guncase/doublesword
/obj/item/storage/toolbox/guncase/doublesword/PopulateContents()
new weapon_to_spawn (src)

View File

@@ -437,14 +437,7 @@
/obj/item/storage/box/syndie_kit/space
name = "boxed space suit and helmet"
/obj/item/storage/box/syndie_kit/space/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.set_holdable(list(
/obj/item/clothing/suit/space/syndicate,
/obj/item/clothing/head/helmet/space/syndicate
))
storage_type = /datum/storage/box/syndicate_space
/obj/item/storage/box/syndie_kit/space/PopulateContents()
var/obj/item/clothing/suit/space/syndicate/spess_suit = pick(GLOB.syndicate_space_suits_to_helmets)
@@ -477,10 +470,7 @@
/obj/item/storage/box/syndie_kit/chemical
name = "chemical kit"
/obj/item/storage/box/syndie_kit/chemical/Initialize(mapload)
. = ..()
atom_storage.max_slots = 15
storage_type = /datum/storage/box/syndicate_chemical
/obj/item/storage/box/syndie_kit/chemical/PopulateContents()
new /obj/item/reagent_containers/cup/bottle/polonium(src)
@@ -548,6 +538,9 @@
new /obj/item/gun/energy/laser/chameleon(src)
new /obj/item/chameleon_scanner(src)
/obj/item/storage/box/syndie_kit/throwing_weapons
storage_type = /datum/storage/box/syndicate_throwing
//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars.
//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance)
/obj/item/storage/box/syndie_kit/throwing_weapons/PopulateContents()
@@ -558,17 +551,6 @@
new /obj/item/restraints/legcuffs/bola/tactical(src)
new /obj/item/restraints/legcuffs/bola/tactical(src)
/obj/item/storage/box/syndie_kit/throwing_weapons/Initialize(mapload)
. = ..()
atom_storage.max_slots = 9 // 5 + 2 + 2
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 18 // 5*2 + 2*1 + 3*2
atom_storage.set_holdable(list(
/obj/item/restraints/legcuffs/bola/tactical,
/obj/item/paperplane/syndicate,
/obj/item/throwing_star,
))
/obj/item/storage/box/syndie_kit/cutouts/PopulateContents()
for(var/i in 1 to 3)
new/obj/item/cardboard_cutout/adaptive(src)

View File

@@ -5,51 +5,13 @@
w_class = WEIGHT_CLASS_SMALL
resistance_flags = FLAMMABLE
slot_flags = ITEM_SLOT_ID
storage_type = /datum/storage/wallet
var/obj/item/card/id/front_id = null
var/list/combined_access
var/cached_flat_icon
var/overlay_icon_state = "wallet_overlay"
/obj/item/storage/wallet/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.max_slots = 4
atom_storage.set_holdable(
can_hold_list = list(
/obj/item/stack/spacecash,
/obj/item/holochip,
/obj/item/card,
/obj/item/cigarette,
/obj/item/clothing/accessory/dogtag,
/obj/item/coin,
/obj/item/coupon,
/obj/item/dice,
/obj/item/disk,
/obj/item/flashlight/pen,
/obj/item/folder/biscuit,
/obj/item/food/chococoin,
/obj/item/implanter,
/obj/item/laser_pointer,
/obj/item/lighter,
/obj/item/lipstick,
/obj/item/match,
/obj/item/paper,
/obj/item/pen,
/obj/item/photo,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/applicator,
/obj/item/screwdriver,
/obj/item/seeds,
/obj/item/spess_knife,
/obj/item/stack/medical,
/obj/item/stamp,
/obj/item/toy/crayon
),
cant_hold_list = /obj/item/screwdriver/power
)
/obj/item/storage/wallet/Exited(atom/movable/gone, direction)
. = ..()
if(isidcard(gone))

View File

@@ -427,12 +427,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices)
resistance_flags = FLAMMABLE //burn your enemies' collections, for only you can Collect Them All!
w_class = WEIGHT_CLASS_SMALL
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
/obj/item/storage/card_binder/Initialize(mapload)
. = ..()
atom_storage.set_holdable(/obj/item/tcgcard)
atom_storage.max_total_storage = 120
atom_storage.max_slots = 60
storage_type = /datum/storage/card_binder
///Returns a list of cards ids of card_cnt weighted by rarity from the pack's tables that have matching series, with gnt_cnt of the guaranteed table.
/obj/item/cardpack/proc/buildCardListWithRarity(card_cnt, rarity_cnt)

View File

@@ -200,7 +200,14 @@
if(istype(attacking_item, /obj/item/storage/bag/trash))
if(mybag)
balloon_alert(user, "already has \a [mybag]!")
else if(user.transferItemToLoc(attacking_item, src))
return
var/obj/item/storage/bag/trash/insert = attacking_item
if(!insert.insertable)
balloon_alert(user, "cannot be inserted!")
return
if(user.transferItemToLoc(attacking_item, src))
balloon_alert(user, "attached [attacking_item]")
return

View File

@@ -11,12 +11,8 @@
/obj/structure/toiletbong/Initialize(mapload)
. = ..()
create_storage()
AddComponent(/datum/component/simple_rotation, post_rotation = CALLBACK(src, PROC_REF(post_rotation)))
create_storage(max_total_storage = 100, max_slots = 12, canhold = /obj/item/food)
atom_storage.attack_hand_interact = FALSE
atom_storage.do_rustle = FALSE
atom_storage.animated = FALSE
create_storage(storage_type = /datum/storage/toiletbong)
weed_overlay = mutable_appearance('icons/obj/watercloset.dmi', "[base_icon_state]_overlay")
START_PROCESSING(SSobj, src)

View File

@@ -8,6 +8,8 @@
content_overlays = FALSE
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
storage_type = /datum/storage/unfathomable_curio
//Vars used for the shield component
var/heretic_shield_icon = "unfathomable_shield"
var/max_charges = 1
@@ -17,24 +19,6 @@
/obj/item/storage/belt/unfathomable_curio/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 21
atom_storage.set_holdable(list(
/obj/item/ammo_box/strilka310/lionhunter,
/obj/item/heretic_labyrinth_handbook,
/obj/item/bodypart, // Bodyparts are often used in rituals.
/obj/item/clothing/neck/eldritch_amulet,
/obj/item/clothing/neck/heretic_focus,
/obj/item/codex_cicatrix,
/obj/item/eldritch_potion,
/obj/item/food/grown/poppy, // Used to regain a Living Heart.
/obj/item/food/grown/harebell, // Used to reroll targets
/obj/item/melee/rune_carver,
/obj/item/melee/sickly_blade,
/obj/item/organ, // Organs are also often used in rituals.
/obj/item/reagent_containers/cup/beaker/eldritch,
/obj/item/stack/sheet/glass, // Glass is often used by moon heretics
))
AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \
charge_recovery = charge_recovery, shield_icon = heretic_shield_icon, run_hit_callback = CALLBACK(src, PROC_REF(shield_damaged)))

View File

@@ -73,20 +73,12 @@
/obj/item/storage/bag/quiver/endless
name = "endless quiver"
desc = "Holds arrows for your bow. A deep digital void is contained within."
max_slots = 1
/obj/item/storage/bag/quiver/endless/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_ATOM_EXITED, PROC_REF(handle_removed))
storage_type = /datum/storage/bag/quiver/endless
/obj/item/storage/bag/quiver/endless/PopulateContents()
. = ..()
new arrow_path(src)
/obj/item/storage/bag/quiver/endless/proc/handle_removed(datum/source, obj/item/gone)
new arrow_path(src)
/datum/bitrunning_gimmick/fisher
name = "Fisher"

View File

@@ -23,6 +23,8 @@
/obj/item/storage/lockbox/bitrunning/decrypted
name = "decrypted curiosity"
desc = "Compiled from the virtual domain. An extra reward of a successful bitrunner."
storage_type = /datum/storage/lockbox/bitrunning_decrypted
/// What virtual domain did we come from.
var/datum/lazy_template/virtual_domain/source_domain
@@ -42,10 +44,7 @@
source_domain = completed_domain
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_slots = 1
atom_storage.max_total_storage = 3
atom_storage.locked = STORAGE_NOT_LOCKED
icon_state = icon_closed
playsound(src, 'sound/effects/magic/blink.ogg', 50, TRUE)

View File

@@ -46,28 +46,7 @@
//Easter Baskets
/obj/item/storage/basket/easter
name = "Easter Basket"
/obj/item/storage/basket/easter/Initialize(mapload)
. = ..()
atom_storage.set_holdable(list(
/obj/item/food/egg,
/obj/item/food/chocolateegg,
/obj/item/food/boiledegg,
/obj/item/surprise_egg
))
/obj/item/storage/basket/easter/proc/countEggs()
cut_overlays()
add_overlay("basket-grass")
add_overlay("basket-egg[min(contents.len, 5)]")
/obj/item/storage/basket/easter/Exited(atom/movable/gone, direction)
. = ..()
countEggs()
/obj/item/storage/basket/easter/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
. = ..()
countEggs()
storage_type = /datum/storage/basket/easter
//Bunny Suit
/obj/item/clothing/head/costume/bunnyhead

View File

@@ -331,13 +331,13 @@
inhand_icon_state = "artistic_toolbox"
material_flags = NONE
custom_price = PAYCHECK_CREW * 3
storage_type = /datum/storage/toolbox/fishing
///How much holding this affects fishing difficulty
var/fishing_modifier = -4
/obj/item/storage/toolbox/fishing/Initialize(mapload)
. = ..()
// Can hold fishing rod despite the size
atom_storage.set_holdable(exception_hold_list = /obj/item/fishing_rod)
AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier, ITEM_SLOT_HANDS)
@@ -354,10 +354,7 @@
w_class = WEIGHT_CLASS_NORMAL
force = 5
throwforce = 5
/obj/item/storage/toolbox/fishing/small/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL //It can still hold a fishing rod
storage_type = /datum/storage/toolbox/fishing/small
/obj/item/storage/toolbox/fishing/small/PopulateContents()
new /obj/item/fishing_rod/unslotted(src)
@@ -451,16 +448,13 @@
foldable_result = null
illustration = "fish"
custom_price = PAYCHECK_CREW * 9
storage_type = /datum/storage/box/fishing_lures
/obj/item/storage/box/fishing_lures/PopulateContents()
new /obj/item/paper/lures_instructions(src)
var/list/typesof = typesof(/obj/item/fishing_lure)
for(var/type in typesof)
new type (src)
atom_storage.set_holdable(/obj/item/fishing_lure) //can only hold lures
//adds an extra slot, so we can put back the lures even if we didn't take out the instructions.
atom_storage.max_slots = length(typesof) + 1
atom_storage.max_total_storage = WEIGHT_CLASS_SMALL * (atom_storage.max_slots + 1)
/obj/item/paper/lures_instructions
name = "instructions paper"
@@ -589,15 +583,14 @@
worn_icon_state = "fishing_bag"
resistance_flags = FLAMMABLE
custom_price = PAYCHECK_CREW * 3
storage_type = /datum/storage/bag/fishing
///How much holding this affects fishing difficulty
var/fishing_modifier = -2
/obj/item/storage/bag/fishing/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 24 // Up to 8 normal fish
atom_storage.max_slots = 21
atom_storage.set_holdable(/obj/item/fish)
AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier, ITEM_SLOT_HANDS)
/obj/item/storage/bag/fishing/carpskin
@@ -609,14 +602,3 @@
storage_type = /datum/storage/carpskin_bag
fishing_modifier = -4
/obj/item/storage/bag/fishing/carpskin/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 42 // Up to 14 normal fish, but we're assuming that you'll be storing a bunch of gear as well
atom_storage.set_holdable(list(
/obj/item/fish,
/obj/item/fishing_line,
/obj/item/fishing_hook,
/obj/item/fishing_lure,
/obj/item/fish_analyzer,
/obj/item/bait_can,
))

View File

@@ -492,11 +492,7 @@
open_status = FANCY_CONTAINER_ALWAYS_OPEN
spawn_type = /obj/item/coffee_cartridge
spawn_count = 1
/obj/item/storage/fancy/coffee_cart_rack/Initialize(mapload)
. = ..()
atom_storage.max_slots = 4
atom_storage.set_holdable(/obj/item/coffee_cartridge)
storage_type = /datum/storage/coffee_cart_rack
/*
* impressa coffee maker

View File

@@ -10,18 +10,12 @@
resistance_flags = FLAMMABLE
max_integrity = 100
w_class = WEIGHT_CLASS_BULKY
storage_type = /datum/storage/bag/money
/obj/item/storage/bag/money/Initialize(mapload)
. = ..()
if(prob(20))
icon_state = "moneybagalt"
atom_storage.max_slots = 40
atom_storage.max_specific_storage = 40
atom_storage.set_holdable(list(
/obj/item/coin,
/obj/item/stack/spacecash,
/obj/item/holochip
))
/obj/item/storage/bag/money/vault/PopulateContents()
new /obj/item/coin/silver(src)

View File

@@ -6,20 +6,13 @@
icon_state = "quiver"
inhand_icon_state = null
worn_icon_state = "harpoon_quiver"
storage_type = /datum/storage/bag/quiver
/// type of arrow the quivel should hold
var/arrow_path = /obj/item/ammo_casing/arrow
var/max_slots = 40
/obj/item/storage/bag/quiver/Initialize(mapload)
. = ..()
atom_storage.numerical_stacking = TRUE
atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
atom_storage.max_slots = max_slots
atom_storage.max_total_storage = 100
atom_storage.set_holdable(/obj/item/ammo_casing/arrow)
/obj/item/storage/bag/quiver/lesser
max_slots = 10
storage_type = /datum/storage/bag/quiver/less
/obj/item/storage/bag/quiver/full/PopulateContents()
. = ..()

View File

@@ -367,12 +367,7 @@
icon_broken = "medalbox+b"
base_icon_state = "medalbox"
icon_open = "medalboxopen"
/obj/item/storage/lockbox/dueling/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.max_slots = 2
atom_storage.set_holdable(/obj/item/gun/energy/dueling)
storage_type = /datum/storage/lockbox/dueling
/obj/item/storage/lockbox/dueling/PopulateContents()
. = ..()

View File

@@ -127,56 +127,6 @@
name = "emergency disembarkation tool"
desc = "For extracting yourself from rough landings."
/datum/storage/pod
max_slots = 14
max_total_storage = WEIGHT_CLASS_BULKY * 14
/// If TRUE, we unlock regardless of security level
var/always_unlocked = FALSE
/datum/storage/pod/open_storage(mob/to_show)
if(isliving(to_show) && SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_RED)
to_chat(to_show, span_warning("The storage unit will only unlock during a Red or Delta security alert."))
return FALSE
return ..()
/datum/storage/pod/New(atom/parent, max_slots, max_specific_storage, max_total_storage)
. = ..()
// all of these are a type below what actually spawn with
// (IE all space suits instead of just the emergency ones)
// because an enterprising traitor might be able to hide things,
// like their syndicate toolbox or softsuit. may be fun?
set_holdable(exception_hold_list = list(
/obj/item/clothing/suit/space,
/obj/item/pickaxe,
/obj/item/storage/toolbox,
))
RegisterSignal(SSsecurity_level, COMSIG_SECURITY_LEVEL_CHANGED, PROC_REF(update_lock))
update_lock(new_level = SSsecurity_level.get_current_level_as_number())
/datum/storage/pod/set_parent(atom/new_parent)
. = ..()
RegisterSignal(parent, COMSIG_ATOM_AFTER_SHUTTLE_MOVE, PROC_REF(pod_launch))
/datum/storage/pod/proc/update_lock(datum/source, new_level)
SIGNAL_HANDLER
if(always_unlocked)
return
locked = (new_level < SEC_LEVEL_RED) ? STORAGE_FULLY_LOCKED : STORAGE_NOT_LOCKED
parent.update_appearance(UPDATE_ICON_STATE)
if(locked) // future todo : make `locked` a setter so this behavior can be built in (avoids exploits)
close_all()
/datum/storage/pod/proc/pod_launch(datum/source, turf/old_turf)
SIGNAL_HANDLER
// This check is to ignore the movement of the shuttle from the transit level to the station as it is loaded in.
if(old_turf && is_reserved_level(old_turf.z))
return
// If the pod was launched, the storage will always open.
always_unlocked = TRUE
locked = STORAGE_NOT_LOCKED
parent.update_appearance(UPDATE_ICON_STATE)
/obj/item/storage/pod
name = "emergency space suits"
desc = "A wall mounted safe containing space suits. Will only open in emergencies."

View File

@@ -1984,22 +1984,24 @@
#include "code\datums\status_effects\debuffs\vision\nearsighted.dm"
#include "code\datums\storage\storage.dm"
#include "code\datums\storage\storage_interface.dm"
#include "code\datums\storage\subtypes\backpack.dm"
#include "code\datums\storage\subtypes\bag_of_holding.dm"
#include "code\datums\storage\subtypes\cards.dm"
#include "code\datums\storage\subtypes\carpskin_bag.dm"
#include "code\datums\storage\subtypes\drone.dm"
#include "code\datums\storage\subtypes\duffel_bag.dm"
#include "code\datums\storage\subtypes\extract_inventory.dm"
#include "code\datums\storage\subtypes\fish_case.dm"
#include "code\datums\storage\subtypes\implant.dm"
#include "code\datums\storage\subtypes\organ_box.dm"
#include "code\datums\storage\subtypes\backpacks.dm"
#include "code\datums\storage\subtypes\bags.dm"
#include "code\datums\storage\subtypes\belts.dm"
#include "code\datums\storage\subtypes\boxes.dm"
#include "code\datums\storage\subtypes\dufflebags.dm"
#include "code\datums\storage\subtypes\holsters.dm"
#include "code\datums\storage\subtypes\lockboxes.dm"
#include "code\datums\storage\subtypes\medkits.dm"
#include "code\datums\storage\subtypes\pockets.dm"
#include "code\datums\storage\subtypes\portable_chem_mixer.dm"
#include "code\datums\storage\subtypes\rped.dm"
#include "code\datums\storage\subtypes\surgery_tray.dm"
#include "code\datums\storage\subtypes\test_tube_rack.dm"
#include "code\datums\storage\subtypes\trash.dm"
#include "code\datums\storage\subtypes\toolboxes.dm"
#include "code\datums\storage\subtypes\others\bag_of_holding.dm"
#include "code\datums\storage\subtypes\others\cards.dm"
#include "code\datums\storage\subtypes\others\carpskin_bag.dm"
#include "code\datums\storage\subtypes\others\extract_inventory.dm"
#include "code\datums\storage\subtypes\others\fish_case.dm"
#include "code\datums\storage\subtypes\others\misc.dm"
#include "code\datums\storage\subtypes\others\pod.dm"
#include "code\datums\storage\subtypes\others\rped.dm"
#include "code\datums\votes\_vote_datum.dm"
#include "code\datums\votes\custom_vote.dm"
#include "code\datums\votes\map_vote.dm"
@@ -2732,6 +2734,7 @@
#include "code\game\objects\items\storage\holsters.dm"
#include "code\game\objects\items\storage\lockbox.dm"
#include "code\game\objects\items\storage\medkit.dm"
#include "code\game\objects\items\storage\pillbottles.dm"
#include "code\game\objects\items\storage\sixpack.dm"
#include "code\game\objects\items\storage\storage.dm"
#include "code\game\objects\items\storage\toolbox.dm"