diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index bc71885c2f7..ada34e076b8 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -17,6 +17,7 @@
/datum/component/storage/concrete/pockets/small
max_items = 1
+ max_w_class = WEIGHT_CLASS_SMALL
attack_hand_interact = FALSE
/datum/component/storage/concrete/pockets/tiny
@@ -24,7 +25,15 @@
max_w_class = WEIGHT_CLASS_TINY
attack_hand_interact = FALSE
-/datum/component/storage/concrete/pockets/small/detective
+/datum/component/storage/concrete/pockets/small/fedora/Initialize()
+ . = ..()
+ var/static/list/exception_cache = typecacheof(list(
+ /obj/item/katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana,
+ /obj/item/energy_katana, /obj/item/gun/ballistic/automatic/tommygun
+ ))
+ exception_hold = exception_cache
+
+/datum/component/storage/concrete/pockets/small/fedora/detective
attack_hand_interact = TRUE // so the detectives would discover pockets in their hats
/datum/component/storage/concrete/pockets/shoes
@@ -79,4 +88,4 @@
/datum/component/storage/concrete/pockets/small/helmet/Initialize()
. = ..()
can_hold = typecacheof(list(/obj/item/reagent_containers/glass/bottle,
- /obj/item/ammo_box/a762))
\ No newline at end of file
+ /obj/item/ammo_box/a762))
diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm
index 9b4d6019f84..0285d83ff52 100644
--- a/code/datums/components/storage/storage.dm
+++ b/code/datums/components/storage/storage.dm
@@ -14,8 +14,9 @@
dupe_mode = COMPONENT_DUPE_UNIQUE
var/datum/component/storage/concrete/master //If not null, all actions act on master and this is just an access point.
- var/list/can_hold //if this is set, only things in this typecache will fit.
+ var/list/can_hold //if this is set, only things in this typecache will fit, if within the size limit.
var/list/cant_hold //if this is set, anything in this typecache will not be able to fit.
+ var/list/exception_hold //if set, these items will be the exception to the max size of object that can fit.
var/list/mob/is_using //lazy list of mobs looking at the contents of this storage.
@@ -576,7 +577,7 @@
if(!stop_messages)
to_chat(M, "[host] cannot hold [I]!")
return FALSE
- if(I.w_class > max_w_class)
+ if(I.w_class > max_w_class && !is_type_in_typecache(I, exception_hold))
if(!stop_messages)
to_chat(M, "[I] is too big for [host]!")
return FALSE
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index ce16de7df08..0e3720d8705 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -59,7 +59,7 @@
icon_state = "nun_hood"
flags_inv = HIDEHAIR
flags_cover = HEADCOVERSEYES
-
+
/obj/item/clothing/head/bishopmitre
name = "bishop mitre"
desc = "An opulent hat that functions as a radio to God. Or as a lightning rod, depending on who you ask."
@@ -72,7 +72,7 @@
armor = list("melee" = 25, "bullet" = 5, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50)
icon_state = "detective"
var/candy_cooldown = 0
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/detective
+ pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/fedora/detective
dog_fashion = /datum/dog_fashion/head/detective
/obj/item/clothing/head/fedora/det_hat/Initialize()
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index f227679b946..ba2026732ca 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -204,7 +204,7 @@
icon_state = "fedora"
item_state = "fedora"
desc = "A really cool hat if you're a mobster. A really lame hat if you're not."
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/small
+ pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/fedora
/obj/item/clothing/head/fedora/suicide_act(mob/user)
if(user.gender == FEMALE)
@@ -367,28 +367,28 @@
if(prob(3))
M += pick(" Honh honh honh!"," Honh!"," Zut Alors!")
return trim(M)
-
+
/obj/item/clothing/head/clownmitre
name = "Hat of the Honkmother"
desc = "It's hard for parishoners to see a banana peel on the floor when they're looking up at your glorious chapeau."
icon_state = "clownmitre"
-
+
/obj/item/clothing/head/kippah
name = "kippah"
- desc = "Signals that you follow the Jewish Halakha. Keeps the head covered and the soul extra-Orthodox."
+ desc = "Signals that you follow the Jewish Halakha. Keeps the head covered and the soul extra-Orthodox."
icon_state = "kippah"
-
+
/obj/item/clothing/head/medievaljewhat
name = "medieval Jew hat"
desc = "A silly looking hat, intended to be placed on the heads of the station's oppressed religious minorities."
icon_state = "medievaljewhat"
-
+
/obj/item/clothing/head/taqiyahwhite
name = "white taqiyah"
desc = "An extra-mustahabb way of showing your devotion to Allah."
icon_state = "taqiyahwhite"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small
-
+
/obj/item/clothing/head/taqiyahred
name = "red taqiyah"
desc = "An extra-mustahabb way of showing your devotion to Allah."