Belts & Trashbags (#7443)

requires #6644 

Entirely replaces how (most) belts perform insertion checks.

This pretty much allows belts to hold most things.

Armor vests are next.

Trashbags will also use the systems we use on main.

Closes #7256 and #7435

---------

Co-authored-by: silicons <silicons@silicons.dev>
This commit is contained in:
silicons
2025-12-28 22:05:06 -05:00
committed by GitHub
co-authored by silicons
parent 7707f9e881
commit 30fbcfe9b4
124 changed files with 1176 additions and 1086 deletions
@@ -13,6 +13,7 @@ GLOBAL_LIST_EMPTY(PDAs)
slot_flags = SLOT_ID | SLOT_BELT
rad_flags = RAD_BLOCK_CONTENTS
item_flags = ITEM_NO_BLUDGEON
belt_storage_class = BELT_CLASS_SMALL
//Main variables
var/pdachoice = 1
+1
View File
@@ -11,6 +11,7 @@
origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1)
worth_intrinsic = 45
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
var/times_used = 0 //Number of times it's been used.
var/broken = FALSE //Is the flash burnt out?
@@ -10,6 +10,8 @@
light_wedge = LIGHT_WIDE
worth_intrinsic = 25
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_MEDIUM
belt_storage_size = BELT_SIZE_FOR_FLASHLIGHT
var/on = FALSE
/// Luminosity when on
@@ -18,6 +18,7 @@
rad_flags = RAD_NO_CONTAMINATE | RAD_BLOCK_CONTENTS
materials_base = list(MAT_STEEL = 200, MAT_GLASS = 100)
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
var/grace = RAD_GRACE_PERIOD
var/datum/looping_sound/geiger/soundloop
+1
View File
@@ -28,6 +28,7 @@
materials_base = list(MAT_STEEL = 500)
worth_intrinsic = 40
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
/// our GPS tag
var/gps_tag = "GEN0"
@@ -6,6 +6,7 @@
item_state = "flashtool"
item_flags = ITEM_NO_BLUDGEON | ITEM_ENCUMBERS_WHILE_HELD
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
throw_force = 5
w_class = WEIGHT_CLASS_SMALL
throw_speed = 4
@@ -5,6 +5,7 @@
icon_state = "megaphone"
w_class = WEIGHT_CLASS_SMALL
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
var/spamcheck = 0
var/emagged = 0
@@ -12,6 +12,7 @@
icon_state = "multitool"
damage_force = 5.0
w_class = WEIGHT_CLASS_SMALL
belt_storage_class = BELT_CLASS_SMALL
throw_force = 5.0
throw_range = 15
throw_speed = 3
@@ -5,6 +5,7 @@
icon_state = "beacon"
item_state = "beacon"
base_icon_state = "beacon"
belt_storage_class = BELT_CLASS_SMALL
var/code = "electronic"
var/functioning = TRUE
var/identifier
@@ -8,6 +8,7 @@
subspace_transmission = 1
canhear_range = 0 // Can't hear headsets from very far away
slot_flags = SLOT_EARS
belt_storage_class = BELT_CLASS_SMALL
var/translate_binary = 0
var/translate_hive = 0
@@ -11,6 +11,7 @@
materials_base = list(MAT_STEEL = 150)
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
var/scan_range = 1
@@ -11,6 +11,7 @@
throw_range = 20
materials_base = list(MAT_STEEL = 60, MAT_GLASS = 30)
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR
belt_storage_class = BELT_CLASS_SMALL
/// inserted tape
var/obj/item/cassette_tape/tape = /obj/item/cassette_tape/random
@@ -7,6 +7,7 @@
w_class = WEIGHT_CLASS_TINY
slot_flags = SLOT_EARS
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
var/use_message = "Halt! Security!"
var/spamcheck = 0
@@ -15,6 +15,7 @@
throw_range = 20
slot_flags = SLOT_MASK|SLOT_BELT
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
// todo: legacy var
var/loadable = TRUE
@@ -9,6 +9,7 @@
atom_flags = NOCONDUCT
w_class = WEIGHT_CLASS_SMALL
slot_flags = SLOT_HOLSTER
belt_storage_class = BELT_CLASS_SMALL
throw_force = 0
throw_speed = 4
throw_range = 20
@@ -14,6 +14,7 @@
drop_sound = 'sound/items/drop/sword.ogg'
pickup_sound = 'sound/items/pickup/sword.ogg'
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
var/can_combine = TRUE
active_damage_force = 30
@@ -12,6 +12,7 @@
materials_base = list(MAT_STEEL = 30, MAT_GLASS = 20)
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
/obj/item/atmos_analyzer/apidean
name = "\improper Apidean analyzer"
@@ -6,6 +6,7 @@
item_state = "healthanalyzer"
slot_flags = SLOT_BELT
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
throw_force = 3
w_class = WEIGHT_CLASS_SMALL
throw_speed = 5
@@ -4,6 +4,7 @@
icon_state = "hydro"
item_state = "analyzer"
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
var/datum/seed/last_seed
var/list/last_reagents
w_class = WEIGHT_CLASS_SMALL
@@ -11,6 +11,7 @@
throw_range = 20
materials_base = list(MAT_STEEL = 30, MAT_GLASS = 20)
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
var/details = 0
@@ -9,6 +9,7 @@
throw_force = 5
throw_speed = 4
throw_range = 20
belt_storage_class = BELT_CLASS_SMALL
materials_base = list(MAT_STEEL = 30, MAT_GLASS = 20)
@@ -12,6 +12,7 @@
w_class = WEIGHT_CLASS_TINY
active_weight_class = WEIGHT_CLASS_BULKY
belt_storage_class = BELT_CLASS_SMALL
throw_force = 5.0
throw_speed = 1
@@ -28,6 +28,7 @@ var/list/marker_beacon_colors = list(
w_class = WEIGHT_CLASS_SMALL
skip_legacy_icon_update = TRUE
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
var/picked_color = "random"
/obj/item/stack/marker_beacon/ten
@@ -10,6 +10,7 @@
throw_speed = 4
throw_range = 20
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
var/heal_brute = 0
var/heal_burn = 0
var/apply_sounds
@@ -16,7 +16,7 @@
max_single_weight_class = WEIGHT_CLASS_NORMAL
max_items = 100
max_combined_volume = 200
ui_expand_when_needed = TRUE
ui_expand_when_needed = 5
materials_base = list(
MAT_STEEL = 8000,
MAT_GLASS = 2500,
+2 -9
View File
@@ -9,15 +9,14 @@
icon_state = "backpack"
w_class = WEIGHT_CLASS_BULKY
slot_flags = SLOT_BACK
max_single_weight_class = WEIGHT_CLASS_BULKY
weight = ITEM_WEIGHT_STORAGE_BACKPACK
encumbrance = ITEM_ENCUMBRANCE_STORAGE_BACKPACK
max_combined_volume = STORAGE_VOLUME_BACKPACK
var/flippable = 0
var/side = 0 //0 = right, 1 = left
var/hide_under_tail = 1
drop_sound = 'sound/items/drop/backpack.ogg'
pickup_sound = 'sound/items/pickup/backpack.ogg'
storage_datum_path = /datum/object_system/storage/backpack
/*
* Backpack Types
@@ -28,7 +27,6 @@
desc = "A backpack that opens into a localized pocket of Blue Space."
origin_tech = list(TECH_BLUESPACE = 4)
icon_state = "holdingpack"
max_single_weight_class = WEIGHT_CLASS_BULKY
max_combined_volume = WEIGHT_VOLUME_NORMAL * 14 // 56
/obj/item/storage/backpack/holding/duffle
@@ -153,7 +151,7 @@
flat_encumbrance = ITEM_FLAT_ENCUMBRANCE_DUFFLEBAG
// todo: remove when weight system is used
slowdown = 0.25
max_combined_volume = STORAGE_VOLUME_DUFFLEBAG
storage_datum_path = /datum/object_system/storage/backpack/dufflebag
/obj/item/storage/backpack/dufflebag/syndie
name = "black dufflebag"
@@ -356,10 +354,8 @@
worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL
worn_bodytypes = BODYTYPE_DEFAULT
icon_override = null
max_single_weight_class = WEIGHT_CLASS_BULKY
weight = ITEM_WEIGHT_STORAGE_BACKPACK
encumbrance = ITEM_ENCUMBRANCE_STORAGE_BACKPACK
max_combined_volume = STORAGE_VOLUME_BACKPACK
drop_sound = 'sound/items/drop/backpack.ogg'
pickup_sound = 'sound/items/pickup/backpack.ogg'
@@ -596,8 +592,6 @@
item_state = "saddlebag"
icon_state = "saddlebag"
var/icon_base = "saddlebag"
encumbrance = ITEM_ENCUMBRANCE_STORAGE_DUFFLEBAG
max_combined_volume = STORAGE_VOLUME_DUFFLEBAG //Saddlebags can hold more, like dufflebags
var/no_message = "You aren't the appropriate taur type to wear this!"
hide_under_tail = -1
@@ -652,7 +646,6 @@
item_state = "taurvest"
icon_state = "taurvest"
icon_base = "taurvest"
max_combined_volume = STORAGE_VOLUME_BACKPACK
encumbrance = ITEM_ENCUMBRANCE_STORAGE_BACKPACK
/obj/item/storage/backpack/dufflebag/fluff //Black dufflebag without syndie buffs.
@@ -0,0 +1,54 @@
/obj/item/storage/bag/trash
name = "trash bag"
desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"
icon = 'icons/obj/janitor.dmi'
icon_state = "trashbag"
item_state_slots = list(SLOT_ID_RIGHT_HAND = "trashbag", SLOT_ID_LEFT_HAND = "trashbag")
drop_sound = 'sound/items/drop/wrapper.ogg'
pickup_sound = 'sound/items/pickup/wrapper.ogg'
w_class = WEIGHT_CLASS_NORMAL
storage_datum_path = /datum/object_system/storage/trash_bag
max_combined_volume = WEIGHT_VOLUME_SMALL * 48
/obj/item/storage/bag/trash/initialize_storage()
. = ..()
obj_storage.update_icon_on_item_change = TRUE
// TODO: this is fucking broken, fix it.
/obj/item/storage/bag/trash/update_icon_state()
switch(w_class)
if(3)
icon_state = "[initial(icon_state)]1"
if(4)
icon_state = "[initial(icon_state)]2"
if(5 to INFINITY)
icon_state = "[initial(icon_state)]3"
else
icon_state = "[initial(icon_state)]"
return ..()
/obj/item/storage/bag/trash/throw_land(atom/A, datum/thrownthing/TT)
. = ..()
// let them shuffle the contents so they can grab other stuff with this if they really want
obj_storage?.hide()
var/list/athena_event_balancing_patch = contents.Copy()
shuffle_inplace(athena_event_balancing_patch)
contents = athena_event_balancing_patch
/obj/item/storage/bag/trash/bluespace
name = "trash bag of holding"
w_class = WEIGHT_CLASS_NORMAL
max_combined_volume = WEIGHT_VOLUME_SMALL * 48 * 3
desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
icon_state = "bluetrashbag"
/obj/item/storage/bag/trash/plasticbag
name = "plastic bag"
desc = "It's a very flimsy, very noisy alternative to a bag."
icon = 'icons/obj/trash.dmi'
icon_state = "plasticbag"
drop_sound = 'sound/items/drop/wrapper.ogg'
pickup_sound = 'sound/items/pickup/wrapper.ogg'
w_class = WEIGHT_CLASS_BULKY
max_combined_volume = WEIGHT_VOLUME_NORMAL * 3
+2 -67
View File
@@ -62,71 +62,6 @@
staged = max(staged, contained.get_weight_class())
set_weight_class(staged)
// -----------------------------
// Trash bag
// -----------------------------
/obj/item/storage/bag/trash
name = "trash bag"
desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"
icon = 'icons/obj/janitor.dmi'
icon_state = "trashbag"
item_state_slots = list(SLOT_ID_RIGHT_HAND = "trashbag", SLOT_ID_LEFT_HAND = "trashbag")
drop_sound = 'sound/items/drop/wrapper.ogg'
pickup_sound = 'sound/items/pickup/wrapper.ogg'
w_class = WEIGHT_CLASS_SMALL
max_single_weight_class = WEIGHT_CLASS_NORMAL
max_combined_volume = WEIGHT_CLASS_SMALL * 21
insertion_whitelist = list() // any
insertion_blacklist = list(/obj/item/disk/nuclear)
/obj/item/storage/bag/trash/initialize_storage()
. = ..()
obj_storage.update_icon_on_item_change = TRUE
/obj/item/storage/bag/trash/update_icon_state()
switch(w_class)
if(3)
icon_state = "[initial(icon_state)]1"
if(4)
icon_state = "[initial(icon_state)]2"
if(5 to INFINITY)
icon_state = "[initial(icon_state)]3"
else
icon_state = "[initial(icon_state)]"
return ..()
/obj/item/storage/bag/trash/bluespace
name = "trash bag of holding"
max_single_weight_class = WEIGHT_CLASS_HUGE
max_combined_volume = WEIGHT_CLASS_SMALL * 56
desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
icon_state = "bluetrashbag"
/obj/item/storage/bag/trash/bluespace/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/storage/backpack/holding) || istype(W, /obj/item/storage/bag/trash/bluespace))
to_chat(user, "<span class='warning'>The Bluespace interfaces of the two devices conflict and malfunction.</span>")
qdel(W)
return 1
return ..()
// -----------------------------
// Plastic Bag
// -----------------------------
/obj/item/storage/bag/plasticbag
name = "plastic bag"
desc = "It's a very flimsy, very noisy alternative to a bag."
icon = 'icons/obj/trash.dmi'
icon_state = "plasticbag"
drop_sound = 'sound/items/drop/wrapper.ogg'
pickup_sound = 'sound/items/pickup/wrapper.ogg'
w_class = WEIGHT_CLASS_BULKY
max_single_weight_class = WEIGHT_CLASS_SMALL
insertion_whitelist = list() // any
insertion_blacklist = list(/obj/item/disk/nuclear)
// -----------------------------
// Mining Satchel
// -----------------------------
@@ -147,7 +82,7 @@
max_items = 300
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
storage_datum_path = /datum/object_system/storage/stack
ui_expand_when_needed = TRUE
ui_expand_when_needed = 5
insertion_whitelist = list(/obj/item/stack/ore)
auto_fit_weight_class_to_largest_contained = FALSE
@@ -251,7 +186,7 @@
allow_mass_gather = TRUE
allow_mass_gather_mode_switch = FALSE
auto_fit_weight_class_to_largest_contained = FALSE
ui_expand_when_needed = TRUE
ui_expand_when_needed = 5
// -----------------------------
// Sheet Snatcher (Cyborg)
+30 -500
View File
@@ -3,18 +3,33 @@
desc = "Can hold various things."
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utility"
max_items = 7
max_combined_volume = WEIGHT_VOLUME_NORMAL * 7 //This should ensure belts always have enough room to store whatever.
max_single_weight_class = WEIGHT_CLASS_NORMAL
ui_force_slot_mode = TRUE
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
equip_sound = 'sound/items/toolbelt_equip.ogg'
drop_sound = 'sound/items/drop/toolbelt.ogg'
pickup_sound = 'sound/items/pickup/toolbelt.ogg'
worth_intrinsic = 50
storage_datum_path = /datum/object_system/storage/belt
max_single_weight_class = WEIGHT_CLASS_NORMAL
var/set_max_combined_belt_small
var/set_max_combined_belt_medium
var/set_max_combined_belt_large
var/show_above_suit = 0
/obj/item/storage/belt/Initialize(mapload, empty)
. = ..()
if(istype(obj_storage, /datum/object_system/storage/belt))
var/datum/object_system/storage/belt/casted_obj_storage = obj_storage
if(set_max_combined_belt_large != null)
casted_obj_storage.max_combined_belt_large = set_max_combined_belt_large
if(set_max_combined_belt_medium != null)
casted_obj_storage.max_combined_belt_medium = set_max_combined_belt_medium
if(set_max_combined_belt_small != null)
casted_obj_storage.max_combined_belt_small = set_max_combined_belt_small
/obj/item/storage/belt/verb/toggle_layer()
set name = "Switch Belt Layer"
set category = VERB_CATEGORY_OBJECT
@@ -45,148 +60,10 @@
var/mob/M = src.loc
M.update_inv_belt()
/obj/item/storage/belt/utility
name = "tool-belt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
desc = "Can hold various tools."
icon_state = "utility"
item_state = "utility"
insertion_whitelist = list(
///obj/item/combitool,
/obj/item/tool/crowbar,
/obj/item/tool/screwdriver,
/obj/item/weldingtool,
/obj/item/tool/wirecutters,
/obj/item/tool/wrench,
/obj/item/multitool,
/obj/item/flashlight,
// TODO: PLEASE FOR THE LOVE OF GOD REFACTOR FUCKING BELTS ALREADY
/obj/item/cell/basic/tier_1/weapon,
/obj/item/cell/basic/tier_2/weapon,
/obj/item/cell/basic/tier_3/weapon,
/obj/item/cell/basic/tier_4/weapon,
/obj/item/cell/basic/tier_5/weapon,
/obj/item/cell/regen/weapon,
/obj/item/cell/regen/fractal/weapon,
/obj/item/cell/infinite/weapon,
/obj/item/cell/microfission/weapon,
/obj/item/cell/basic/tier_1/small,
/obj/item/cell/basic/tier_2/small,
/obj/item/cell/basic/tier_3/small,
/obj/item/cell/basic/tier_4/small,
/obj/item/cell/basic/tier_5/small,
/obj/item/cell/regen/small,
/obj/item/cell/regen/fractal/small,
/obj/item/cell/infinite/small,
/obj/item/cell/microfission/small,
/obj/item/stack/cable_coil,
/obj/item/t_scanner,
/obj/item/atmos_analyzer,
/obj/item/clothing/glasses,
/obj/item/clothing/gloves,
/obj/item/pda,
/obj/item/megaphone,
/obj/item/barrier_tape_roll,
/obj/item/radio/headset,
/obj/item/robotanalyzer,
/obj/item/material/minihoe,
/obj/item/material/knife/machete/hatchet,
/obj/item/plant_analyzer,
/obj/item/extinguisher/mini,
/obj/item/duct_tape_roll,
/obj/item/switchtool,
/obj/item/integrated_electronics/wirer,
/obj/item/integrated_electronics/debugger,
)
/obj/item/storage/belt/utility/full
starts_with = list(
/obj/item/tool/screwdriver,
/obj/item/tool/wrench,
/obj/item/weldingtool,
/obj/item/tool/crowbar,
/obj/item/tool/wirecutters,
/obj/item/stack/cable_coil/random_belt
)
/obj/item/storage/belt/utility/atmostech
starts_with = list(
/obj/item/tool/screwdriver,
/obj/item/tool/wrench,
/obj/item/weldingtool,
/obj/item/tool/crowbar,
/obj/item/tool/wirecutters,
)
/obj/item/storage/belt/utility/chief
name = "chief engineer's toolbelt"
desc = "Holds tools, looks snazzy."
icon_state = "utilitybelt_ce"
item_state = "utility_ce"
/obj/item/storage/belt/utility/chief/full
starts_with = list(
/obj/item/tool/screwdriver/power,
/obj/item/tool/crowbar/power,
/obj/item/weldingtool/experimental,
/obj/item/multitool,
/obj/item/stack/cable_coil/random_belt,
/obj/item/extinguisher/mini,
/obj/item/atmos_analyzer/longrange
)
/obj/item/storage/belt/medical
name = "medical belt"
desc = "Can hold various medical equipment."
icon_state = "medical"
insertion_whitelist = list(
/obj/item/healthanalyzer,
/obj/item/dnainjector,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/glass/bottle,
/obj/item/reagent_containers/pill,
/obj/item/reagent_containers/syringe,
/obj/item/storage/quickdraw/syringe_case,
/obj/item/flame/lighter/zippo,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/stack/medical,
/obj/item/radio/headset,
/obj/item/pda,
/obj/item/barrier_tape_roll,
/obj/item/megaphone,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/head/surgery,
/obj/item/clothing/gloves,
/obj/item/reagent_containers/hypospray,
/obj/item/hypospray,
/obj/item/reagent_containers/glass/hypovial,
/obj/item/clothing/glasses,
/obj/item/tool/crowbar,
/obj/item/flashlight,
// TODO: PLEASE FOR THE LOVE OF GOD REFACTOR FUCKING BELTS ALREADY
/obj/item/cell/basic/tier_1/weapon,
/obj/item/cell/basic/tier_2/weapon,
/obj/item/cell/basic/tier_3/weapon,
/obj/item/cell/basic/tier_4/weapon,
/obj/item/cell/basic/tier_5/weapon,
/obj/item/cell/regen/weapon,
/obj/item/cell/regen/fractal/weapon,
/obj/item/cell/infinite/weapon,
/obj/item/cell/microfission/weapon,
/obj/item/cell/basic/tier_1/small,
/obj/item/cell/basic/tier_2/small,
/obj/item/cell/basic/tier_3/small,
/obj/item/cell/basic/tier_4/small,
/obj/item/cell/basic/tier_5/small,
/obj/item/cell/regen/small,
/obj/item/cell/regen/fractal/small,
/obj/item/cell/infinite/small,
/obj/item/cell/microfission/small,
/obj/item/extinguisher/mini,
/obj/item/switchtool/surgery,
/obj/item/storage/quickdraw/syringe_case
)
/obj/item/storage/belt/medical/emt
name = "EMT utility belt"
@@ -199,60 +76,6 @@
icon_state = "security"
max_items = 7
max_single_weight_class = WEIGHT_CLASS_NORMAL
insertion_whitelist = list(
/obj/item/tape_recorder,
/obj/item/barrier_tape_roll,
/obj/item/clothing/glasses,
/obj/item/flashlight,
// TODO: PLEASE FOR THE LOVE OF GOD REFACTOR FUCKING BELTS ALREADY
/obj/item/cell/basic/tier_1/weapon,
/obj/item/cell/basic/tier_2/weapon,
/obj/item/cell/basic/tier_3/weapon,
/obj/item/cell/basic/tier_4/weapon,
/obj/item/cell/basic/tier_5/weapon,
/obj/item/cell/regen/weapon,
/obj/item/cell/regen/fractal/weapon,
/obj/item/cell/infinite/weapon,
/obj/item/cell/microfission/weapon,
/obj/item/cell/basic/tier_1/small,
/obj/item/cell/basic/tier_2/small,
/obj/item/cell/basic/tier_3/small,
/obj/item/cell/basic/tier_4/small,
/obj/item/cell/basic/tier_5/small,
/obj/item/cell/regen/small,
/obj/item/cell/regen/fractal/small,
/obj/item/cell/infinite/small,
/obj/item/cell/microfission/small,
/obj/item/reagent_containers/spray/luminol,
/obj/item/sample,
/obj/item/forensics/sample_kit/powder,
/obj/item/forensics/swab,
/obj/item/uv_light,
/obj/item/forensics/sample_kit,
/obj/item/photo,
/obj/item/camera_film,
/obj/item/camera,
/obj/item/autopsy_scanner,
/obj/item/mass_spectrometer,
/obj/item/clothing/accessory/badge,
/obj/item/reagent_scanner,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/syringe,
/obj/item/pda,
/obj/item/hailer,
/obj/item/megaphone,
/obj/item/radio/headset,
/obj/item/clothing/gloves,
/obj/item/barrier_tape_roll,
/obj/item/reagent_containers/spray/pepper,
/obj/item/handcuffs,
/obj/item/flash,
/obj/item/flame/lighter,
/obj/item/reagent_containers/food/snacks/donut/,
/obj/item/ammo_magazine,
/obj/item/gun/projectile/ballistic/colt/detective,
/obj/item/holowarrant
)
/obj/item/storage/belt/explorer
name = "pathfinder's bandolier"
@@ -261,102 +84,16 @@
max_items = 7
max_combined_volume = WEIGHT_VOLUME_NORMAL * 7
show_above_suit = 1
insertion_whitelist = list(
/obj/item/grenade,
/obj/item/tool/crowbar,
/obj/item/tool/screwdriver,
/obj/item/weldingtool,
/obj/item/tool/wirecutters,
/obj/item/tool/wrench,
/obj/item/pickaxe/,
/obj/item/multitool,
/obj/item/stack/cable_coil,
/obj/item/t_scanner,
/obj/item/atmos_analyzer,
/obj/item/flashlight,
// TODO: PLEASE FOR THE LOVE OF GOD REFACTOR FUCKING BELTS ALREADY
/obj/item/cell/basic/tier_1/weapon,
/obj/item/cell/basic/tier_2/weapon,
/obj/item/cell/basic/tier_3/weapon,
/obj/item/cell/basic/tier_4/weapon,
/obj/item/cell/basic/tier_5/weapon,
/obj/item/cell/regen/weapon,
/obj/item/cell/regen/fractal/weapon,
/obj/item/cell/infinite/weapon,
/obj/item/cell/microfission/weapon,
/obj/item/cell/basic/tier_1/small,
/obj/item/cell/basic/tier_2/small,
/obj/item/cell/basic/tier_3/small,
/obj/item/cell/basic/tier_4/small,
/obj/item/cell/basic/tier_5/small,
/obj/item/cell/regen/small,
/obj/item/cell/regen/fractal/small,
/obj/item/cell/infinite/small,
/obj/item/cell/microfission/small,
/obj/item/material/butterfly,
/obj/item/material/knife,
/obj/item/melee/transforming/energy/sword,
/obj/item/shield/transforming/energy,
/obj/item/ammo_casing/,
/obj/item/ammo_magazine/,
/obj/item/storage/box/beanbags,
/obj/item/storage/box/shotgunammo,
/obj/item/storage/box/shotgunshells,
/obj/item/healthanalyzer,
/obj/item/robotanalyzer,
/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/glass/bottle,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/hypospray,
/obj/item/hypospray,
/obj/item/storage/pill_bottle,
/obj/item/stack/medical,
/obj/item/stack/marker_beacon,
/obj/item/flashlight,
/obj/item/extinguisher/mini,
/obj/item/storage/quickdraw/syringe_case,
/obj/item/photo,
/obj/item/camera_film,
/obj/item/camera,
/obj/item/tape_recorder,
/obj/item/barrier_tape_roll,
/obj/item/healthanalyzer,
/obj/item/geiger_counter,
/obj/item/gps,
/obj/item/switchtool,
/obj/item/ano_scanner
)
/obj/item/storage/belt/soulstone
name = "soul stone belt"
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
icon_state = "soulstone"
max_items = 6
insertion_whitelist = list(
/obj/item/soulstone
)
/obj/item/storage/belt/soulstone/full
starts_with = list(/obj/item/soulstone = 6)
/obj/item/storage/belt/utility/alien
name = "alien belt"
desc = "A belt(?) that can hold things."
icon = 'icons/obj/abductor.dmi'
icon_state = "belt"
item_state = "security"
/obj/item/storage/belt/utility/alien/full
starts_with = list(
/obj/item/tool/screwdriver/alien,
/obj/item/tool/wrench/alien,
/obj/item/weldingtool/alien,
/obj/item/tool/crowbar/alien,
/obj/item/tool/wirecutters/alien,
/obj/item/multitool/alien,
/obj/item/stack/cable_coil/alien
)
/obj/item/storage/belt/medical/alien
name = "alien belt"
desc = "A belt(?) that can hold things."
@@ -364,52 +101,6 @@
icon_state = "belt"
item_state = "security"
max_items = 8
insertion_whitelist = list(
/obj/item/healthanalyzer,
/obj/item/dnainjector,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/glass/bottle,
/obj/item/reagent_containers/pill,
/obj/item/reagent_containers/syringe,
/obj/item/flame/lighter/zippo,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/stack/medical,
/obj/item/radio/headset,
/obj/item/pda,
/obj/item/barrier_tape_roll,
/obj/item/megaphone,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/head/surgery,
/obj/item/clothing/gloves,
/obj/item/reagent_containers/hypospray,
/obj/item/hypospray,
/obj/item/clothing/glasses,
/obj/item/tool/crowbar,
/obj/item/flashlight,
// TODO: PLEASE FOR THE LOVE OF GOD REFACTOR FUCKING BELTS ALREADY
/obj/item/cell/basic/tier_1/weapon,
/obj/item/cell/basic/tier_2/weapon,
/obj/item/cell/basic/tier_3/weapon,
/obj/item/cell/basic/tier_4/weapon,
/obj/item/cell/basic/tier_5/weapon,
/obj/item/cell/regen/weapon,
/obj/item/cell/regen/fractal/weapon,
/obj/item/cell/infinite/weapon,
/obj/item/cell/microfission/weapon,
/obj/item/cell/basic/tier_1/small,
/obj/item/cell/basic/tier_2/small,
/obj/item/cell/basic/tier_3/small,
/obj/item/cell/basic/tier_4/small,
/obj/item/cell/basic/tier_5/small,
/obj/item/cell/regen/small,
/obj/item/cell/regen/fractal/small,
/obj/item/cell/infinite/small,
/obj/item/cell/microfission/small,
/obj/item/extinguisher/mini,
/obj/item/surgical
)
/obj/item/storage/belt/medical/alien
starts_with = list(
@@ -428,22 +119,6 @@
desc = "Proves to the world that you are the strongest!"
icon_state = "champion"
max_items = 1
insertion_whitelist = list(
"/obj/item/clothing/mask/luchador"
)
/obj/item/storage/belt/security/tactical
name = "combat belt"
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
icon_state = "swat"
max_items = 9
max_single_weight_class = WEIGHT_CLASS_NORMAL
max_combined_volume = WEIGHT_VOLUME_NORMAL * 7
/obj/item/storage/belt/security/tactical/bandolier
name = "combat belt"
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
icon_state = "bandolier"
/obj/item/storage/belt/spike_bandolier
name = "spike bandolier"
@@ -462,95 +137,12 @@
max_items = 7
max_single_weight_class = WEIGHT_CLASS_NORMAL
worth_intrinsic = 35
insertion_whitelist = list(
/obj/item/clothing/glasses,
/obj/item/flashlight,
// TODO: PLEASE FOR THE LOVE OF GOD REFACTOR FUCKING BELTS ALREADY
/obj/item/cell/basic/tier_1/weapon,
/obj/item/cell/basic/tier_2/weapon,
/obj/item/cell/basic/tier_3/weapon,
/obj/item/cell/basic/tier_4/weapon,
/obj/item/cell/basic/tier_5/weapon,
/obj/item/cell/regen/weapon,
/obj/item/cell/regen/fractal/weapon,
/obj/item/cell/infinite/weapon,
/obj/item/cell/microfission/weapon,
/obj/item/cell/basic/tier_1/small,
/obj/item/cell/basic/tier_2/small,
/obj/item/cell/basic/tier_3/small,
/obj/item/cell/basic/tier_4/small,
/obj/item/cell/basic/tier_5/small,
/obj/item/cell/regen/small,
/obj/item/cell/regen/fractal/small,
/obj/item/cell/infinite/small,
/obj/item/cell/microfission/small,
/obj/item/grenade,
/obj/item/pda,
/obj/item/radio/headset,
/obj/item/clothing/gloves,
/obj/item/clothing/mask/surgical, //sterile mask,
/obj/item/assembly/mousetrap,
/obj/item/light/bulb,
/obj/item/light/tube,
/obj/item/flame/lighter,
/obj/item/megaphone,
/obj/item/barrier_tape_roll,
/obj/item/reagent_containers/spray,
/obj/item/soap
)
/obj/item/storage/belt/archaeology
name = "excavation gear-belt"
desc = "Can hold various excavation gear."
icon_state = "gear"
worth_intrinsic = 65
insertion_whitelist = list(
/obj/item/storage/box/samplebags,
/obj/item/core_sampler,
/obj/item/beacon_locator,
/obj/item/radio/beacon,
/obj/item/gps,
/obj/item/measuring_tape,
/obj/item/flashlight,
// TODO: PLEASE FOR THE LOVE OF GOD REFACTOR FUCKING BELTS ALREADY
/obj/item/cell/basic/tier_1/weapon,
/obj/item/cell/basic/tier_2/weapon,
/obj/item/cell/basic/tier_3/weapon,
/obj/item/cell/basic/tier_4/weapon,
/obj/item/cell/basic/tier_5/weapon,
/obj/item/cell/regen/weapon,
/obj/item/cell/regen/fractal/weapon,
/obj/item/cell/infinite/weapon,
/obj/item/cell/microfission/weapon,
/obj/item/cell/basic/tier_1/small,
/obj/item/cell/basic/tier_2/small,
/obj/item/cell/basic/tier_3/small,
/obj/item/cell/basic/tier_4/small,
/obj/item/cell/basic/tier_5/small,
/obj/item/cell/regen/small,
/obj/item/cell/regen/fractal/small,
/obj/item/cell/infinite/small,
/obj/item/cell/microfission/small,
/obj/item/pickaxe,
/obj/item/depth_scanner,
/obj/item/camera,
/obj/item/paper,
/obj/item/photo,
/obj/item/folder,
/obj/item/pen,
/obj/item/folder,
/obj/item/clipboard,
/obj/item/anodevice,
/obj/item/clothing/glasses,
/obj/item/tool/wrench,
/obj/item/storage/excavation,
/obj/item/anobattery,
/obj/item/ano_scanner,
/obj/item/pickaxe/hand,
/obj/item/hand_labeler,
/obj/item/xenoarch_multi_tool,
/obj/item/pickaxe/excavationdrill
)
/obj/item/storage/belt/fannypack
name = "leather fannypack"
@@ -611,13 +203,14 @@
desc = "An ornate sheath designed to hold an officer's blade."
icon_state = "sheath-sabre"
max_items = 1
storage_datum_path = /datum/object_system/storage
insertion_whitelist = list(
/obj/item/material/sword/sabre,
/obj/item/melee/baton/stunsword,
)
)
starts_with = list(
/obj/item/material/sword/sabre,
)
)
/obj/item/storage/belt/sheath/initialize_storage()
. = ..()
@@ -644,93 +237,30 @@
name = "dual holster gunbelt"
desc = "Belts like these were popular on old Earth, but were largely supplanted by modular holsters. This gunbelt is too bulky to be comfortably anchored to clothes without support."
icon_state = "dual_holster"
max_items = 2
max_single_weight_class = WEIGHT_CLASS_NORMAL
insertion_whitelist = list(
/obj/item/gun/projectile/energy/alien,
/obj/item/gun/projectile/energy/captain,
/obj/item/gun/projectile/energy/crossbow,
/obj/item/gun/projectile/energy/decloner,
/obj/item/gun/projectile/energy/floragun,
/obj/item/gun/projectile/energy/gun,
/obj/item/gun/projectile/energy/gun/nuclear,
/obj/item/gun/projectile/energy/ionrifle/pistol,
/obj/item/gun/projectile/energy/lasertag,
/obj/item/gun/projectile/energy/netgun,
/obj/item/gun/projectile/energy/phasegun/pistol,
/obj/item/gun/projectile/energy/nt_pulse/carbine,
/obj/item/gun/projectile/energy/retro,
/obj/item/gun/projectile/energy/nt_pmd/service_revolver,
/obj/item/gun/projectile/energy/stunrevolver,
/obj/item/gun/projectile/energy/taser,
/obj/item/gun/projectile/energy/toxgun,
/obj/item/gun/projectile/energy/zip,
/obj/item/gun/projectile/ballistic/colt,
/obj/item/gun/projectile/ballistic/contender,
/obj/item/gun/projectile/ballistic/dartgun,
/obj/item/gun/projectile/ballistic/deagle,
/obj/item/gun/projectile/ballistic/derringer,
/obj/item/gun/projectile/ballistic/gyropistol,
/obj/item/gun/projectile/ballistic/luger,
/obj/item/gun/projectile/ballistic/r9,
/obj/item/gun/projectile/ballistic/revolver,
/obj/item/gun/projectile/ballistic/sec,
/obj/item/gun/projectile/ballistic/shotgun/doublebarrel/sawn,
/obj/item/gun/projectile/ballistic/shotgun/flare,
/obj/item/gun/projectile/ballistic/silenced,
/obj/item/gun/projectile/ballistic/p92x,
/obj/item/gun/projectile/ballistic/pistol,
/obj/item/gun/projectile/ballistic/pirate
)
set_max_combined_belt_large = 2
/obj/item/storage/belt/quiver
name = "leather quiver"
desc = "A quiver made from the hide of some animal. Used to hold arrows."
icon_state = "quiver"
max_items = 15
max_single_weight_class = WEIGHT_CLASS_NORMAL
set_max_combined_belt_small = 30
insertion_whitelist = list(
/obj/item/ammo_casing/arrow
)
/obj/item/ammo_casing/arrow,
)
/obj/item/storage/belt/quiver/full
name = "leather quiver"
desc = "A quiver made from the hide of some animal. Used to hold arrows."
icon_state = "quiver"
max_items = 15
max_single_weight_class = WEIGHT_CLASS_NORMAL
insertion_whitelist = list(
/obj/item/ammo_casing/arrow
)
starts_with = list(
/obj/item/ammo_casing/arrow = 15
)
/obj/item/ammo_casing/arrow = /obj/item/storage/belt/quiver::set_max_combined_belt_small,
)
/obj/item/storage/belt/quiver/full/ash
name = "leather quiver"
desc = "A quiver made from the hide of some animal. Used to hold arrows."
icon_state = "quiver"
max_items = 15
max_single_weight_class = WEIGHT_CLASS_NORMAL
insertion_whitelist = list(
/obj/item/ammo_casing/arrow
)
starts_with = list(
/obj/item/ammo_casing/arrow/bone = 15
)
/obj/item/storage/belt/utility/crystal
name = "crystalline tool harness"
desc = "A segmented belt of strange crystalline material."
icon_state = "utilitybelt_crystal"
item_state = "utilitybelt_crystal"
/obj/item/storage/belt/utility/crystal/Initialize()
new /obj/item/multitool/crystal(src)
new /obj/item/tool/wrench/crystal(src)
new /obj/item/tool/crowbar/crystal(src)
new /obj/item/tool/screwdriver/crystal(src)
new /obj/item/tool/wirecutters/crystal(src)
new /obj/item/weldingtool/electric/crystal(src)
update_icon()
. = ..()
/obj/item/ammo_casing/arrow/bone = /obj/item/storage/belt/quiver::set_max_combined_belt_small,
)
@@ -5,63 +5,26 @@
desc = "Standard issue belt capable of storing many kinds of tactical gear."
icon_state = "security"
max_single_weight_class = WEIGHT_CLASS_NORMAL
insertion_whitelist = list(
/obj/item/grenade,
/obj/item/reagent_containers/spray/pepper,
/obj/item/handcuffs,
/obj/item/flash,
/obj/item/clothing/glasses,
/obj/item/ammo_casing/a10g,
/obj/item/ammo_casing/a12g,
/obj/item/ammo_magazine,
// TODO: PLEASE FOR THE LOVE OF GOD REFACTOR FUCKING BELTS ALREADY
/obj/item/cell/basic/tier_1/weapon,
/obj/item/cell/basic/tier_2/weapon,
/obj/item/cell/basic/tier_3/weapon,
/obj/item/cell/basic/tier_4/weapon,
/obj/item/cell/basic/tier_5/weapon,
/obj/item/cell/regen/weapon,
/obj/item/cell/regen/fractal/weapon,
/obj/item/cell/infinite/weapon,
/obj/item/cell/microfission/weapon,
/obj/item/cell/basic/tier_1/small,
/obj/item/cell/basic/tier_2/small,
/obj/item/cell/basic/tier_3/small,
/obj/item/cell/basic/tier_4/small,
/obj/item/cell/basic/tier_5/small,
/obj/item/cell/regen/small,
/obj/item/cell/regen/fractal/small,
/obj/item/cell/infinite/small,
/obj/item/cell/microfission/small,
/obj/item/melee/baton,
/obj/item/gun/projectile/energy/taser,
/obj/item/gun/projectile/energy/stunrevolver,
/obj/item/gun/projectile/energy/gun,
/obj/item/flame/lighter,
/obj/item/flashlight,
/obj/item/tape_recorder,
/obj/item/barrier_tape_roll,
/obj/item/pda,
/obj/item/radio/headset,
/obj/item/clothing/gloves,
/obj/item/hailer,
/obj/item/megaphone,
/obj/item/melee,
/obj/item/clothing/accessory/badge,
/obj/item/gun/projectile/ballistic/sec,
/obj/item/gun/projectile/ballistic/p92x,
/obj/item/barrier_tape_roll,
/obj/item/gun/projectile/ballistic/colt/detective,
/obj/item/holowarrant,
/obj/item/gun/projectile/energy/nt_isd/sidearm,
)
set_max_combined_belt_large = /datum/object_system/storage/belt::max_combined_belt_large + 1
set_max_combined_belt_medium = /datum/object_system/storage/belt::max_combined_belt_medium
/obj/item/storage/belt/security/nt_isd_preload
starts_with = list(
/obj/item/handcuffs,
/obj/item/flash,
/obj/item/gun/projectile/energy/nt_isd/sidearm/with_light,
/obj/item/melee/baton,
/obj/item/melee/baton/loaded,
/obj/item/cell/basic/tier_2/weapon,
/obj/item/reagent_containers/spray/pepper,
)
/obj/item/storage/belt/security/tactical
name = "combat belt"
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
icon_state = "swat"
set_max_combined_belt_medium = /obj/item/storage/belt/security::set_max_combined_belt_medium + 2
/obj/item/storage/belt/security/tactical/bandolier
name = "combat belt"
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
icon_state = "bandolier"
@@ -0,0 +1,76 @@
/obj/item/storage/belt/utility
name = "tool-belt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
desc = "Can hold various tools."
icon_state = "utility"
item_state = "utility"
/obj/item/storage/belt/utility/full
starts_with = list(
/obj/item/tool/screwdriver,
/obj/item/tool/wrench,
/obj/item/weldingtool,
/obj/item/tool/crowbar,
/obj/item/tool/wirecutters,
/obj/item/stack/cable_coil/random_belt
)
/obj/item/storage/belt/utility/atmostech
starts_with = list(
/obj/item/tool/screwdriver,
/obj/item/tool/wrench,
/obj/item/weldingtool,
/obj/item/tool/crowbar,
/obj/item/tool/wirecutters,
)
/obj/item/storage/belt/utility/chief
name = "chief engineer's toolbelt"
desc = "Holds tools, looks snazzy."
icon_state = "utilitybelt_ce"
item_state = "utility_ce"
/obj/item/storage/belt/utility/chief/full
starts_with = list(
/obj/item/tool/screwdriver/power,
/obj/item/tool/crowbar/power,
/obj/item/weldingtool/experimental,
/obj/item/multitool,
/obj/item/stack/cable_coil/random_belt,
/obj/item/extinguisher/mini,
/obj/item/atmos_analyzer/longrange
)
/obj/item/storage/belt/utility/alien
name = "alien belt"
desc = "A belt(?) that can hold things."
icon = 'icons/obj/abductor.dmi'
icon_state = "belt"
item_state = "security"
/obj/item/storage/belt/utility/alien/full
starts_with = list(
/obj/item/tool/screwdriver/alien,
/obj/item/tool/wrench/alien,
/obj/item/weldingtool/alien,
/obj/item/tool/crowbar/alien,
/obj/item/tool/wirecutters/alien,
/obj/item/multitool/alien,
/obj/item/stack/cable_coil/alien
)
/obj/item/storage/belt/utility/crystal
name = "crystalline tool harness"
desc = "A segmented belt of strange crystalline material."
icon_state = "utilitybelt_crystal"
item_state = "utilitybelt_crystal"
/obj/item/storage/belt/utility/crystal/Initialize()
new /obj/item/multitool/crystal(src)
new /obj/item/tool/wrench/crystal(src)
new /obj/item/tool/crowbar/crystal(src)
new /obj/item/tool/screwdriver/crystal(src)
new /obj/item/tool/wirecutters/crystal(src)
new /obj/item/weldingtool/electric/crystal(src)
update_icon()
. = ..()
@@ -5,6 +5,7 @@
inhand_icon = 'icons/items/storage/firstaid.dmi'
icon_state = "normal"
slot_flags = SLOT_BELT
storage_datum_path = /datum/object_system/storage/hypokit
max_combined_volume = STORAGE_VOLUME_BOX
weight_volume = ITEM_VOLUME_BOX
insertion_whitelist = list(
@@ -7,17 +7,15 @@
pickup_sound = 'sound/items/pickup/pillbottle.ogg'
item_state_slots = list(SLOT_ID_RIGHT_HAND = "contsolid", SLOT_ID_LEFT_HAND = "contsolid")
w_class = WEIGHT_CLASS_SMALL
insertion_whitelist = list(/obj/item/reagent_containers/pill,/obj/item/dice,/obj/item/paper)
allow_quick_empty = TRUE
allow_mass_gather = TRUE
sfx_insert = null
sfx_remove = null
sfx_open = null
max_combined_volume = WEIGHT_VOLUME_TINY * 14
max_single_weight_class = WEIGHT_CLASS_TINY
materials_base = list(MAT_PLASTIC = 80)
item_flags = ITEM_CAREFUL_BLUDGEON | ITEM_ENCUMBERS_WHILE_HELD | ITEM_EASY_LATHE_DECONSTRUCT
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR
belt_storage_class = BELT_CLASS_SMALL
storage_datum_path = /datum/object_system/storage/pill_bottle
insertion_whitelist = list(/obj/item/reagent_containers/pill,/obj/item/dice,/obj/item/paper)
var/label_text = ""
var/labeled = 0
@@ -239,6 +239,7 @@
icon_state = "cigpacket"
item_state_slots = list(SLOT_ID_RIGHT_HAND = "cigpacket", SLOT_ID_LEFT_HAND = "cigpacket")
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR
belt_storage_class = BELT_CLASS_SMALL
w_class = WEIGHT_CLASS_TINY
throw_force = 2
slot_flags = SLOT_BELT | SLOT_EARS
@@ -67,6 +67,7 @@
w_class = WEIGHT_CLASS_SMALL
max_single_weight_class = WEIGHT_CLASS_TINY
max_combined_volume = WEIGHT_CLASS_TINY * 6 //Capable of holding six syringes
belt_storage_class = BELT_CLASS_SMALL
//Can hold syringes and autoinjectors, but also pills if you really wanted. Syringe-shaped objects like pens and cigarettes also fit, but why would you do that?
insertion_whitelist = list(/obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray/autoinjector,
+48 -27
View File
@@ -20,29 +20,32 @@
var/list/insertion_blacklist
var/list/insertion_allow
var/max_single_weight_class = WEIGHT_CLASS_SMALL
var/max_single_weight_class
var/max_combined_weight_class
var/max_combined_volume = WEIGHT_VOLUME_SMALL * 4
var/max_combined_volume
var/max_items
var/weight_propagation
// always set on base type for :: purposes
var/weight_subtract = 0
// always set on base type for :: purposes
var/weight_multiply = 1
var/allow_mass_gather = FALSE
var/allow_mass_gather_mode_switch = TRUE
var/mass_gather_mode = STORAGE_QUICK_GATHER_COLLECT_ALL
var/allow_mass_gather
var/allow_mass_gather_mode_switch
var/mass_gather_mode
var/allow_quick_empty = TRUE
var/allow_quick_empty_via_clickdrag = TRUE
var/allow_quick_empty_via_attack_self = FALSE
var/allow_quick_empty
var/allow_quick_empty_via_clickdrag
var/allow_quick_empty_via_attack_self
var/sfx_open = "rustle"
var/sfx_insert = "rustle"
var/sfx_remove = "rustle"
var/ui_numerical_mode = FALSE
var/ui_expand_when_needed = FALSE
var/ui_force_slot_mode = FALSE
var/ui_numerical_mode
var/ui_expand_when_needed
var/ui_force_slot_mode
//* Initialization *//
@@ -98,26 +101,44 @@
obj_storage.set_insertion_whitelist(insertion_whitelist)
obj_storage.set_insertion_blacklist(insertion_blacklist)
obj_storage.max_single_weight_class = max_single_weight_class
obj_storage.max_combined_weight_class = max_combined_weight_class
obj_storage.max_combined_volume = max_combined_volume
obj_storage.max_items = max_items
if(!isnull(max_single_weight_class))
obj_storage.max_single_weight_class = max_single_weight_class
if(!isnull(max_combined_weight_class))
obj_storage.max_combined_weight_class = max_combined_weight_class
if(!isnull(max_combined_volume))
obj_storage.max_combined_volume = max_combined_volume
if(!isnull(max_items))
obj_storage.max_items = max_items
if(!isnull(weight_propagation))
obj_storage.weight_propagation = weight_propagation
obj_storage.weight_subtract = weight_subtract
obj_storage.weight_multiply = weight_multiply
obj_storage.allow_mass_gather = allow_mass_gather
obj_storage.allow_mass_gather_mode_switch = allow_mass_gather_mode_switch
obj_storage.mass_gather_mode = mass_gather_mode
if(!isnull(allow_mass_gather))
obj_storage.allow_mass_gather = allow_mass_gather
if(!isnull(allow_mass_gather_mode_switch))
obj_storage.allow_mass_gather_mode_switch = allow_mass_gather_mode_switch
if(!isnull(mass_gather_mode))
obj_storage.mass_gather_mode = mass_gather_mode
obj_storage.allow_quick_empty = allow_quick_empty
obj_storage.allow_quick_empty_via_clickdrag = allow_quick_empty_via_clickdrag
obj_storage.allow_quick_empty_via_attack_self = allow_quick_empty_via_attack_self
if(!isnull(allow_quick_empty))
obj_storage.allow_quick_empty = allow_quick_empty
if(!isnull(allow_quick_empty_via_clickdrag))
obj_storage.allow_quick_empty_via_clickdrag = allow_quick_empty_via_clickdrag
if(!isnull(allow_quick_empty_via_attack_self))
obj_storage.allow_quick_empty_via_attack_self = allow_quick_empty_via_attack_self
obj_storage.sfx_open = sfx_open
obj_storage.sfx_insert = sfx_insert
obj_storage.sfx_remove = sfx_remove
if(!isnull(sfx_open))
obj_storage.sfx_open = sfx_open
if(!isnull(sfx_insert))
obj_storage.sfx_insert = sfx_insert
if(!isnull(sfx_remove))
obj_storage.sfx_remove = sfx_remove
obj_storage.ui_numerical_mode = ui_numerical_mode
obj_storage.ui_expand_when_needed = ui_expand_when_needed
obj_storage.ui_force_slot_mode = ui_force_slot_mode
if(!isnull(ui_numerical_mode))
obj_storage.ui_numerical_mode = ui_numerical_mode
if(!isnull(ui_expand_when_needed))
obj_storage.ui_expand_when_needed = ui_expand_when_needed
if(!isnull(ui_force_slot_mode))
obj_storage.ui_force_slot_mode = ui_force_slot_mode
@@ -5,6 +5,8 @@
icon = 'icons/obj/wallet.dmi'
icon_state = "wallet-orange"
w_class = WEIGHT_CLASS_SMALL
max_combined_volume = WEIGHT_VOLUME_SMALL * 4
max_single_weight_class = WEIGHT_CLASS_SMALL
insertion_whitelist = list(
/obj/item/spacecash,
/obj/item/card,
+1
View File
@@ -6,6 +6,7 @@
/obj/item/tool
item_flags = ITEM_CAREFUL_BLUDGEON | ITEM_ENCUMBERS_WHILE_HELD
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
/obj/item/tool/get_description_info()
. = ..()
@@ -10,6 +10,7 @@
icon_state = "switchtool"
item_state = "switchtool"
desc = "A multi-deployable, multi-instrument, finely crafted multi-purpose tool. The envy of engineers everywhere."
belt_storage_class = BELT_CLASS_SMALL
siemens_coefficient = 1
damage_force = 3
w_class = WEIGHT_CLASS_SMALL
@@ -10,6 +10,7 @@
slot_flags = SLOT_BELT
tool_behavior = TOOL_WELDER
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_MEDIUM
//Amount of OUCH when it's thrown
damage_force = 3.0
@@ -10,6 +10,7 @@
item_state = "autopsy_scanner"
w_class = WEIGHT_CLASS_SMALL
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
belt_storage_class = BELT_CLASS_SMALL
var/list/datum/autopsy_data_scanner/wdata = list()
var/list/datum/autopsy_data_scanner/chemtraces = list()
var/target_name = null
@@ -5,6 +5,7 @@
icon_state = "tape"
w_class = WEIGHT_CLASS_SMALL
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
tool_speed = 3 //You can use it in surgery. It's stupid, but you can.
@@ -587,6 +587,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
w_class = WEIGHT_CLASS_TINY
throw_force = 4
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR
belt_storage_class = BELT_CLASS_SMALL
slot_flags = SLOT_BELT
attack_verb = list("burnt", "singed")
var/base_state
@@ -5,6 +5,7 @@
icon_state = "taperoll"
damage_force = 0
w_class = WEIGHT_CLASS_TINY
belt_storage_class = BELT_CLASS_SMALL
drop_sound = 'sound/items/drop/cardboardbox.ogg'
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
var/amount = 20
@@ -37,6 +37,7 @@
spray_particles = 3
sprite_name = "miniFE"
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR
belt_storage_class = BELT_CLASS_MEDIUM
/obj/item/extinguisher/mini/plasman
name = "emergency phoronoid extinguisher"
@@ -8,6 +8,7 @@
worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL
slot_flags = SLOT_BELT
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
throw_force = 5
w_class = WEIGHT_CLASS_SMALL
throw_speed = 2
@@ -8,6 +8,7 @@
attack_verb = list("patted", "tapped")
force_multiplier = 0.1
throw_force_multiplier = 1.5
belt_storage_class = BELT_CLASS_SMALL
drop_sound = 'sound/items/drop/knife.ogg'
pickup_sound = 'sound/items/pickup/knife.ogg'
var/active = FALSE
@@ -75,6 +76,7 @@
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
damage_mode = DAMAGE_MODE_SHARP | DAMAGE_MODE_EDGE
material_significance = MATERIAL_SIGNIFICANCE_WEAPON_LIGHT
belt_storage_class = BELT_CLASS_MEDIUM
materials_base = list(MAT_STEEL = 12000)
origin_tech = list(TECH_MATERIAL = 1)
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
@@ -22,6 +22,7 @@
material_significance = MATERIAL_SIGNIFICANCE_WEAPON_HEAVY
damage_mode = DAMAGE_MODE_SHARP | DAMAGE_MODE_EDGE
w_class = WEIGHT_CLASS_SMALL
belt_storage_class = BELT_CLASS_MEDIUM
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1)
attack_verb = list("chopped", "torn", "cut")
material_color = 0
@@ -80,6 +81,7 @@
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("slashed", "sliced", "cut", "clawed")
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_SMALL
/obj/item/material/minihoe/plasteel
material_parts = /datum/prototype/material/plasteel
@@ -12,6 +12,7 @@
throw_force = 7
atom_flags = NOCONDUCT
w_class = WEIGHT_CLASS_NORMAL
belt_storage_class = BELT_CLASS_LARGE
drop_sound = 'sound/items/drop/metalweapon.ogg'
pickup_sound = 'sound/items/pickup/metalweapon.ogg'
origin_tech = list(TECH_COMBAT = 2)
@@ -15,6 +15,7 @@
w_class = WEIGHT_CLASS_SMALL
item_flags = ITEM_CAREFUL_BLUDGEON | ITEM_ENCUMBERS_WHILE_HELD
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR
belt_storage_class = BELT_CLASS_SMALL
var/helpforce = 0 //For help intent things
drop_sound = 'sound/items/drop/weldingtool.ogg'
pickup_sound = 'sound/items/pickup/weldingtool.ogg'
@@ -65,6 +66,7 @@
w_class = WEIGHT_CLASS_NORMAL
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
attack_verb = list("drilled")
belt_storage_class = BELT_CLASS_MEDIUM
/*
* Scalpel
@@ -139,6 +141,7 @@
materials_base = list(MAT_STEEL = 20000, MAT_GLASS = 10000)
attack_verb = list("attacked", "slashed", "sawed", "cut")
damage_mode = DAMAGE_MODE_SHARP | DAMAGE_MODE_EDGE
belt_storage_class = BELT_CLASS_MEDIUM
/obj/item/surgical/circular_saw/manager
name = "energetic bone diverter"