diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 315c7fcf63d..91c2ddb4ac5 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -89700,9 +89700,6 @@ /area/service/theater/abandoned) "uyO" = ( /obj/structure/closet/secure_closet/hos, -/obj/item/clothing/head/hos/beret, -/obj/item/clothing/suit/armor/hos/trenchcoat, -/obj/item/clothing/under/rank/security/head_of_security/grey, /obj/effect/turf_decal/stripes/line{ dir = 9 }, diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index ab332fc6ffa..3ad48b6b6c3 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -67,7 +67,7 @@ /obj/structure/closet/Initialize(mapload) if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents - addtimer(CALLBACK(src, .proc/take_contents), 0) + addtimer(CALLBACK(src, .proc/take_contents, TRUE), 0) . = ..() update_appearance() PopulateContents() @@ -227,14 +227,16 @@ if(throwing) throwing.finalize(FALSE) -/obj/structure/closet/proc/take_contents() - var/atom/L = drop_location() - if(!L) +/obj/structure/closet/proc/take_contents(mapload = FALSE) + var/atom/location = drop_location() + if(!location) return - for(var/atom/movable/AM in L) - if(AM != src && insert(AM) == LOCKER_FULL) // limit reached + for(var/atom/movable/AM in location) + if(AM != src && insert(AM, mapload) == LOCKER_FULL) // limit reached + if(mapload) // Yea, it's a mapping issue. Blame mappers. + WARNING("Closet storage capacity of [type] exceeded on mapload at [AREACOORD(src)]") break - for(var/i in reverse_range(L.get_all_contents())) + for(var/i in reverse_range(location.get_all_contents())) var/atom/movable/thing = i SEND_SIGNAL(thing, COMSIG_TRY_STORAGE_HIDE_ALL) @@ -259,9 +261,12 @@ /obj/structure/closet/proc/after_open(mob/living/user, force = FALSE) return -/obj/structure/closet/proc/insert(atom/movable/inserted) +/obj/structure/closet/proc/insert(atom/movable/inserted, mapload = FALSE) if(length(contents) >= storage_capacity) - return LOCKER_FULL + if(!mapload) + return LOCKER_FULL + //For maploading, we only return LOCKER_FULL if the movable was otherwise insertable. This way we can avoid logging false flags. + return insertion_allowed(inserted) ? LOCKER_FULL : FALSE if(!insertion_allowed(inserted)) return FALSE if(SEND_SIGNAL(src, COMSIG_CLOSET_INSERT, inserted) & COMPONENT_CLOSET_INSERT_INTERRUPT) diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index dfa8da0eea7..73533963b6b 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -95,6 +95,7 @@ /obj/structure/closet/syndicate/resources/everything desc = "It's an emergency storage closet for repairs." + storage_capacity = 60 // This is gonna be used for debug. /obj/structure/closet/syndicate/resources/everything/PopulateContents() var/list/resources = list( diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index bca315340a4..2b09f494733 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -163,8 +163,6 @@ icon_door = "mixed" /obj/structure/closet/wardrobe/mixed/PopulateContents() - if(prob(40)) - new /obj/item/clothing/suit/jacket(src) if(prob(40)) new /obj/item/clothing/suit/jacket(src) new /obj/item/clothing/under/color/white(src) @@ -187,13 +185,8 @@ new /obj/item/clothing/under/color/jumpskirt/teal(src) new /obj/item/clothing/under/color/lightpurple(src) new /obj/item/clothing/under/color/jumpskirt/lightpurple(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/color/jumpskirt/green(src) - new /obj/item/clothing/mask/bandana/red(src) new /obj/item/clothing/mask/bandana/red(src) new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/gold(src) new /obj/item/clothing/mask/bandana/gold(src) new /obj/item/clothing/shoes/sneakers/black(src) new /obj/item/clothing/shoes/sneakers/brown(src) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 0afb6860410..9ef101e0dd0 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -51,6 +51,7 @@ #include "card_mismatch.dm" #include "chain_pull_through_space.dm" #include "chat_filter.dm" +#include "closets.dm" #include "combat.dm" #include "component_tests.dm" #include "connect_loc.dm" diff --git a/code/modules/unit_tests/closets.dm b/code/modules/unit_tests/closets.dm new file mode 100644 index 00000000000..cf21716d8e6 --- /dev/null +++ b/code/modules/unit_tests/closets.dm @@ -0,0 +1,12 @@ +/// Checks that the length of the initial contents of a closet doesn't exceed its storage capacity +/datum/unit_test/closets + +/datum/unit_test/closets/Run() + var/list/all_closets = subtypesof(/obj/structure/closet) + //Supply pods. They are sent, crashed, opened and never closed again. They also cause exceptions in nullspace. + all_closets -= typesof(/obj/structure/closet/supplypod) + + for(var/closet_type in all_closets) + var/obj/structure/closet/closet = allocate(closet_type) + var/contents_len = length(closet.contents) + TEST_ASSERT(contents_len <= closet.storage_capacity, "Initial Contents of [closet.type] ([contents_len]) exceed its storage capacity ([closet.storage_capacity]).")