diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index ccd660e5b6e..35ad6db8677 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -10,6 +10,7 @@
var/burn_point = null
var/burning = null
var/hitsound = null
+ var/storage_cost = null
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
var/no_attack_log = 0 //If it's an item we don't want to log attack_logs with, set this to 1
pass_flags = PASSTABLE
@@ -339,7 +340,7 @@ var/list/global/slot_flags_enumeration = list(
var/allow = 0
if(H.back && istype(H.back, /obj/item/weapon/storage/backpack))
var/obj/item/weapon/storage/backpack/B = H.back
- if(B.contents.len < B.storage_slots && w_class <= B.max_w_class)
+ if(B.can_be_inserted(src,1))
allow = 1
if(!allow)
return 0
@@ -614,6 +615,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
usr.visible_message("[zoomdevicename ? "[usr] looks up from the [src.name]" : "[usr] lowers the [src.name]"].")
return
-
+
/obj/item/proc/pwr_drain()
- return 0 // Process Kill
+ return 0 // Process Kill
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index d3c26d453c7..29a62117f35 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -22,8 +22,8 @@
)
w_class = 4
slot_flags = SLOT_BACK
- max_w_class = 3
- max_storage_space = 28
+ max_w_class = 4
+ max_storage_space = 16
/obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (src.use_sound)
@@ -53,6 +53,7 @@
icon_state = "holdingpack"
max_w_class = 4
max_storage_space = 56
+ storage_cost = 29
New()
..()
@@ -77,7 +78,6 @@
icon_state = "giftbag0"
item_state = "giftbag"
w_class = 4.0
- storage_slots = 20
max_w_class = 3
max_storage_space = 400 // can store a ton of shit!
item_state_slots = null
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 33fa1d6d7ea..476bf1a67eb 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -34,7 +34,6 @@
w_class = 4
max_w_class = 2
- storage_slots = 21
can_hold = list() // any
cant_hold = list(/obj/item/weapon/disk/nuclear)
@@ -61,7 +60,6 @@
w_class = 4
max_w_class = 2
- storage_slots = 21
can_hold = list() // any
cant_hold = list(/obj/item/weapon/disk/nuclear)
@@ -76,8 +74,7 @@
icon_state = "satchel"
slot_flags = SLOT_BELT | SLOT_POCKET
w_class = 3
- storage_slots = 50
- max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
+ max_storage_space = 100
max_w_class = 3
can_hold = list(/obj/item/weapon/ore)
@@ -90,8 +87,7 @@
name = "plant bag"
icon = 'icons/obj/hydroponics_machines.dmi'
icon_state = "plantbag"
- storage_slots = 50; //the number of plant pieces it can carry.
- max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
+ max_storage_space = 100
max_w_class = 3
w_class = 2
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown)
@@ -111,6 +107,7 @@
var/capacity = 300; //the number of sheets it can carry.
w_class = 3
+ storage_slots = 7
allow_quick_empty = 1 // this function is superceded
New()
@@ -193,7 +190,7 @@
var/col_count = min(7,storage_slots) -1
if (adjusted_contents > 7)
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
- src.standard_orient_objs(row_num, col_count, numbered_contents)
+ src.slot_orient_objs(row_num, col_count, numbered_contents)
return
@@ -248,8 +245,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "cashbag"
desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front."
- storage_slots = 50; //the number of cash pieces it can carry.
- max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * cash.w_class
+ max_storage_space = 100
max_w_class = 3
w_class = 2
can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash)
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index d9bf95dd72a..20771cdb069 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -4,6 +4,8 @@
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utilitybelt"
item_state = "utility"
+ storage_slots = 7
+ max_w_class = 3
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
sprite_sheets = list("Resomi" = 'icons/mob/species/resomi/belt.dmi')
@@ -112,7 +114,6 @@
desc = "Can hold security gear like handcuffs and flashes."
icon_state = "securitybelt"
item_state = "security"
- storage_slots = 7
max_w_class = 3
max_storage_space = 28
can_hold = list(
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 1372270bb91..843784345cb 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -478,7 +478,6 @@
desc = "Drymate brand monkey cubes. Just add water!"
icon = 'icons/obj/food.dmi'
icon_state = "monkeycubebox"
- storage_slots = 7
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
New()
..()
@@ -592,11 +591,10 @@
desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children."
icon = 'icons/obj/toy.dmi'
icon_state = "spbox"
- storage_slots = 8
can_hold = list(/obj/item/toy/snappop)
New()
..()
- for(var/i=1; i <= storage_slots; i++)
+ for(var/i=1; i <= 8; i++)
new /obj/item/toy/snappop(src)
/obj/item/weapon/storage/box/matches
@@ -605,14 +603,13 @@
icon = 'icons/obj/cigarettes.dmi'
icon_state = "matchbox"
item_state = "zippo"
- storage_slots = 10
w_class = 1
slot_flags = SLOT_BELT
can_hold = list(/obj/item/weapon/flame/match)
New()
..()
- for(var/i=1; i <= storage_slots; i++)
+ for(var/i=1; i <= 10; i++)
new /obj/item/weapon/flame/match(src)
attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob)
@@ -630,7 +627,7 @@
icon_state = "syringe"
New()
..()
- for (var/i; i < storage_slots; i++)
+ for (var/i; i < 7; i++)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src)
/obj/item/weapon/storage/box/lights
@@ -676,7 +673,6 @@
icon = 'icons/obj/storage.dmi'
icon_state = "portafreezer"
item_state = "medicalpack"
- storage_slots=7
max_w_class = 3
can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/food, /obj/item/weapon/reagent_containers/glass)
max_storage_space = 21
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 29926c4cbef..909cfb502d1 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -69,14 +69,13 @@
icon_state = "candlebox5"
icon_type = "candle"
item_state = "candlebox5"
- storage_slots = 5
throwforce = 2
slot_flags = SLOT_BELT
/obj/item/weapon/storage/fancy/candle_box/New()
..()
- for(var/i=1; i <= storage_slots; i++)
+ for(var/i=1; i <= 5; i++)
new /obj/item/weapon/flame/candle(src)
return
@@ -90,7 +89,6 @@
icon = 'icons/obj/crayons.dmi'
icon_state = "crayonbox"
w_class = 2.0
- storage_slots = 6
icon_type = "crayon"
can_hold = list(
/obj/item/weapon/pen/crayon
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index a76fb4f1a1f..40a05659ec1 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -161,7 +161,6 @@
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper)
allow_quick_gather = 1
use_to_pickup = 1
- storage_slots = 14
use_sound = null
/obj/item/weapon/storage/pill_bottle/antitox
diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm
index c904907f640..c900a2a8c8b 100644
--- a/code/game/objects/items/weapons/storage/lockbox.dm
+++ b/code/game/objects/items/weapons/storage/lockbox.dm
@@ -8,7 +8,6 @@
w_class = 4
max_w_class = 3
max_storage_space = 14 //The sum of the w_classes of all the items in this storage item.
- storage_slots = 4
req_access = list(access_armory)
var/locked = 1
var/broken = 0
diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm
index eb63c96cb8b..e024e6ca5c8 100644
--- a/code/game/objects/items/weapons/storage/misc.dm
+++ b/code/game/objects/items/weapons/storage/misc.dm
@@ -15,7 +15,6 @@
icon = 'icons/obj/food.dmi'
icon_state = "donutbox"
name = "donut box"
- storage_slots = 6
var/startswith = 6
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
foldable = /obj/item/stack/material/cardboard
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 8a9c00ce3bd..c6ee578dcee 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -12,10 +12,16 @@
var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage
- var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set)
- var/max_storage_space = 14 //The sum of the storage costs of all the items in this storage item.
- var/storage_slots = 7 //The number of storage slots in this container.
+ var/max_w_class = 3 //Max size of objects that this object can store (in effect only if can_hold isn't set)
+ var/max_storage_space = 8 //The sum of the storage costs of all the items in this storage item.
+ var/storage_slots = null //The number of storage slots in this container.
var/obj/screen/storage/boxes = null
+ var/obj/screen/storage/storage_start = null //storage UI
+ var/obj/screen/storage/storage_continue = null
+ var/obj/screen/storage/storage_end = null
+ var/obj/screen/storage/stored_start = null
+ var/obj/screen/storage/stored_continue = null
+ var/obj/screen/storage/stored_end = null
var/obj/screen/close/closer = null
var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up.
var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number.
@@ -27,6 +33,12 @@
/obj/item/weapon/storage/Destroy()
close_all()
qdel(boxes)
+ qdel(src.storage_start)
+ qdel(src.storage_continue)
+ qdel(src.storage_end)
+ qdel(src.stored_start)
+ qdel(src.stored_continue)
+ qdel(src.stored_end)
qdel(closer)
..()
@@ -90,11 +102,19 @@
if(user.s_active)
user.s_active.hide_from(user)
user.client.screen -= src.boxes
+ user.client.screen -= src.storage_start
+ user.client.screen -= src.storage_continue
+ user.client.screen -= src.storage_end
user.client.screen -= src.closer
user.client.screen -= src.contents
- user.client.screen += src.boxes
user.client.screen += src.closer
user.client.screen += src.contents
+ if(storage_slots)
+ user.client.screen += src.boxes
+ else
+ user.client.screen += src.storage_start
+ user.client.screen += src.storage_continue
+ user.client.screen += src.storage_end
user.s_active = src
is_seeing |= user
return
@@ -104,6 +124,9 @@
if(!user.client)
return
user.client.screen -= src.boxes
+ user.client.screen -= src.storage_start
+ user.client.screen -= src.storage_continue
+ user.client.screen -= src.storage_end
user.client.screen -= src.closer
user.client.screen -= src.contents
if(user.s_active == src)
@@ -155,7 +178,7 @@
return
//This proc draws out the inventory and places the items on it. It uses the standard position.
-/obj/item/weapon/storage/proc/standard_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents)
+/obj/item/weapon/storage/proc/slot_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents)
var/cx = 4
var/cy = 2+rows
src.boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16"
@@ -181,6 +204,51 @@
src.closer.screen_loc = "[4+cols+1]:16,2:16"
return
+/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents)
+
+ var/baseline_max_storage_space = 16 //should be equal to default backpack capacity
+ var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space
+ var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item
+ var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,284) //length of sprite for the box representing total storage space
+
+ storage_start.overlays.Cut()
+
+ var/matrix/M = matrix()
+ M.Scale((storage_width-storage_cap_width*2+3)/32,1)
+ src.storage_continue.transform = M
+
+ src.storage_start.screen_loc = "4:16,2:16"
+ src.storage_continue.screen_loc = "4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],2:16"
+ src.storage_end.screen_loc = "4:[19+storage_width-storage_cap_width],2:16"
+
+ var/startpoint = 0
+ var/endpoint = 1
+
+ for(var/obj/item/O in contents)
+ startpoint = endpoint + 1
+ endpoint += storage_width * O.get_storage_cost()/max_storage_space
+
+ var/matrix/M_start = matrix()
+ var/matrix/M_continue = matrix()
+ var/matrix/M_end = matrix()
+ M_start.Translate(startpoint,0)
+ M_continue.Scale((endpoint-startpoint-stored_cap_width*2)/32,1)
+ M_continue.Translate(startpoint+stored_cap_width+(endpoint-startpoint-stored_cap_width*2)/2 - 16,0)
+ M_end.Translate(endpoint-stored_cap_width,0)
+ src.stored_start.transform = M_start
+ src.stored_continue.transform = M_continue
+ src.stored_end.transform = M_end
+ storage_start.overlays += src.stored_start
+ storage_start.overlays += src.stored_continue
+ storage_start.overlays += src.stored_end
+
+ O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16"
+ O.maptext = ""
+ O.layer = 20
+
+ src.closer.screen_loc = "4:[storage_width+19],2:16"
+ return
+
/datum/numbered_display
var/obj/item/sample_object
var/number
@@ -212,12 +280,14 @@
adjusted_contents++
numbered_contents.Add( new/datum/numbered_display(I) )
- //var/mob/living/carbon/human/H = user
- var/row_num = 0
- var/col_count = min(7,storage_slots) -1
- if (adjusted_contents > 7)
- row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
- src.standard_orient_objs(row_num, col_count, numbered_contents)
+ if(storage_slots == null)
+ src.space_orient_objs(numbered_contents)
+ else
+ var/row_num = 0
+ var/col_count = min(7,storage_slots) -1
+ if (adjusted_contents > 7)
+ row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
+ src.slot_orient_objs(row_num, col_count, numbered_contents)
return
//This proc return 1 if the item can be picked up and 0 if it can't.
@@ -225,12 +295,12 @@
/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(!istype(W)) return //Not an item
- if(usr.isEquipped(W) && !usr.canUnEquip(W))
+ if(usr && usr.isEquipped(W) && !usr.canUnEquip(W))
return 0
if(src.loc == W)
return 0 //Means the item is already in the storage item
- if(contents.len >= storage_slots)
+ if(storage_slots != null && contents.len >= storage_slots)
if(!stop_messages)
usr << "[src] is full, make some space."
return 0 //Storage item is full
@@ -254,9 +324,9 @@
usr << "[src] cannot hold [W]."
return 0
- if (W.w_class > max_w_class)
+ if (max_w_class != null && W.w_class > max_w_class)
if(!stop_messages)
- usr << "[W] is too big for this [src]."
+ usr << "[W] is too long for this [src]."
return 0
var/total_storage_space = W.get_storage_cost()
@@ -265,7 +335,7 @@
if(total_storage_space > max_storage_space)
if(!stop_messages)
- usr << "[src] is full, make some space."
+ usr << "[src] is too full, make some space."
return 0
if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage)))
@@ -442,12 +512,48 @@
else
verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode
+ spawn(5)
+ var/total_storage_space = 0
+ for(var/obj/item/I in contents)
+ total_storage_space += I.get_storage_cost()
+ max_storage_space = max(total_storage_space,max_storage_space) //prevents spawned containers from being too small for their contents
+
src.boxes = new /obj/screen/storage( )
src.boxes.name = "storage"
src.boxes.master = src
src.boxes.icon_state = "block"
src.boxes.screen_loc = "7,7 to 10,8"
src.boxes.layer = 19
+
+ src.storage_start = new /obj/screen/storage( )
+ src.storage_start.name = "storage"
+ src.storage_start.master = src
+ src.storage_start.icon_state = "storage_start"
+ src.storage_start.screen_loc = "7,7 to 10,8"
+ src.storage_start.layer = 19
+ src.storage_continue = new /obj/screen/storage( )
+ src.storage_continue.name = "storage"
+ src.storage_continue.master = src
+ src.storage_continue.icon_state = "storage_continue"
+ src.storage_continue.screen_loc = "7,7 to 10,8"
+ src.storage_continue.layer = 19
+ src.storage_end = new /obj/screen/storage( )
+ src.storage_end.name = "storage"
+ src.storage_end.master = src
+ src.storage_end.icon_state = "storage_end"
+ src.storage_end.screen_loc = "7,7 to 10,8"
+ src.storage_end.layer = 19
+
+ src.stored_start = new /obj //we just need these to hold the icon
+ src.stored_start.icon_state = "stored_start"
+ src.stored_start.layer = 19
+ src.stored_continue = new /obj
+ src.stored_continue.icon_state = "stored_continue"
+ src.stored_continue.layer = 19
+ src.stored_end = new /obj
+ src.stored_end.icon_state = "stored_end"
+ src.stored_end.layer = 19
+
src.closer = new /obj/screen/close( )
src.closer.master = src
src.closer.icon_state = "x"
@@ -516,4 +622,20 @@
return depth
/obj/item/proc/get_storage_cost()
- return 2**(w_class-1) //1,2,4,8,16,...
+ if (storage_cost)
+ return storage_cost
+ else
+ if(w_class == 1)
+ return 1
+ if(w_class == 2)
+ return 2
+ if(w_class == 3)
+ return 4
+ if(w_class == 4)
+ return 8
+ if(w_class == 5)
+ return 16
+ else
+ return 1000
+
+ //return 2**(w_class-1) //1,2,4,8,16,...
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 02ce84f0726..11dcdc8879a 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -11,7 +11,7 @@
throw_range = 7
w_class = 4
max_w_class = 3
- max_storage_space = 14 //can hold 7 w_class-2 items or up to 3 w_class-3 items (with 1 w_class-2 item as change).
+ max_storage_space = 14 //enough to hold all starting contents
origin_tech = list(TECH_COMBAT = 1)
attack_verb = list("robusted")
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 5b46e990f0b..fcd5693d76d 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -127,7 +127,6 @@
/obj/item/weapon/storage/box/syndie_kit/chameleon
name = "chameleon kit"
desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately."
- storage_slots = 10
/obj/item/weapon/storage/box/syndie_kit/chameleon/New()
..()
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index e1061b09958..904e78adac2 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -77,13 +77,13 @@ var/list/slot_equipment_priority = list( \
// Try put it in their backpack
if(istype(src.back,/obj/item/weapon/storage))
var/obj/item/weapon/storage/backpack = src.back
- if(backpack.contents.len < backpack.storage_slots)
+ if(backpack.can_be_inserted(newitem, 1))
newitem.forceMove(src.back)
return 1
// Try to place it in any item that can store stuff, on the mob.
for(var/obj/item/weapon/storage/S in src.contents)
- if (S.contents.len < S.storage_slots)
+ if(S.can_be_inserted(newitem, 1))
newitem.forceMove(S)
return 1
return 0
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 54415a4990e..9d83c9898bb 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -595,7 +595,7 @@
icon = 'icons/obj/lighting.dmi'
force = 2
throwforce = 5
- w_class = 2
+ w_class = 1
var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
var/base_state
var/switchcount = 0 // number of times switched
diff --git a/code/modules/research/xenoarchaeology/tools/tools.dm b/code/modules/research/xenoarchaeology/tools/tools.dm
index e16db119c55..bc9d0ca21f5 100644
--- a/code/modules/research/xenoarchaeology/tools/tools.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools.dm
@@ -30,7 +30,6 @@
icon_state = "satchel"
slot_flags = SLOT_BELT | SLOT_POCKET
w_class = 3
- storage_slots = 50
- max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
+ max_storage_space = 100
max_w_class = 3
can_hold = list(/obj/item/weapon/fossil)
diff --git a/html/changelogs/RavingManiac-PR-10095.yml b/html/changelogs/RavingManiac-PR-10095.yml
new file mode 100644
index 00000000000..05c9267af93
--- /dev/null
+++ b/html/changelogs/RavingManiac-PR-10095.yml
@@ -0,0 +1,6 @@
+author: RavingManiac
+
+delete-after: True
+
+changes:
+ - rscadd: "Storage in backpacks, boxes and other containers is now capacity-based. Some containers like belts remain slot-based."
diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi
index 8181013f7ee..d2220fffd14 100644
Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ