diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm new file mode 100644 index 0000000000..92dd28c61a --- /dev/null +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -0,0 +1,87 @@ +// ----------------------------- +// Laundry Basket +// ----------------------------- +// An item designed for hauling the belongings of a character. +// So this cannot be abused for other uses, we make it two-handed and inable to have its storage looked into. +/obj/item/weapon/storage/laundry_basket + name = "laundry basket" + icon = 'icons/obj/janitor.dmi' + icon_state = "laundry-empty" + item_state = "laundry" + desc = "The peak of thousands of years of laundry evolution." + + w_class = 5 + max_w_class = 4 + max_storage_space = 25 //20 for clothes + a bit of additional space for non-clothing items that were worn on body + storage_slots = 14 + use_to_pickup = 1 + allow_quick_empty = 1 + allow_quick_gather = 1 + collection_mode = 1 + var/linked + + +/obj/item/weapon/storage/laundry_basket/attack_hand(mob/user as mob) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/organ/external/temp = H.get_organ("r_hand") + if (user.hand) + temp = H.get_organ("l_hand") + if(!temp) + user << "You need two hands to pick this up!" + return + + if(user.get_inactive_hand()) + user << "You need your other hand to be empty" + return + return ..() + +/obj/item/weapon/storage/laundry_basket/attack_self(mob/user as mob) + var/turf/T = get_turf(user) + user << "You dump the [src]'s contents onto \the [T]." + return ..() + +/obj/item/weapon/storage/laundry_basket/pickup(mob/user) + var/obj/item/weapon/storage/laundry_basket/offhand/O = new(user) + O.name = "[name] - second hand" + O.desc = "Your second grip on the [name]." + O.linked = src + user.put_in_inactive_hand(O) + linked = O + return + +/obj/item/weapon/storage/laundry_basket/update_icon() + if(contents.len) + icon_state = "laundry-full" + else + icon_state = "laundry-empty" + return + + +/obj/item/weapon/storage/laundry_basket/MouseDrop(obj/over_object as obj) + if(over_object == usr) + return + else + return ..() + +/obj/item/weapon/storage/laundry_basket/dropped(mob/user as mob) + qdel(linked) + return ..() + +/obj/item/weapon/storage/laundry_basket/show_to(mob/user as mob) + return + +/obj/item/weapon/storage/laundry_basket/open(mob/user as mob) + + +//Offhand +/obj/item/weapon/storage/laundry_basket/offhand + icon = 'icons/obj/weapons.dmi' + icon_state = "offhand" + name = "second hand" + use_to_pickup = 0 + +/obj/item/weapon/storage/laundry_basket/offhand/dropped(mob/user as mob) + user.drop_from_inventory(linked) + return + diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 546621024e..5029e166d2 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -217,6 +217,15 @@ M.show_message("\The [src] has been cut apart by [user] with \the [WT].", 3, "You hear welding.", 2) qdel(src) return + if(istype(W, /obj/item/weapon/storage/laundry_basket) && W.contents.len) + var/obj/item/weapon/storage/laundry_basket/LB = W + var/turf/T = get_turf(src) + for(var/obj/item/I in LB.contents) + LB.remove_from_storage(I, T) + user.visible_message("[user] empties \the [LB] into \the [src].", \ + "You empty \the [LB] into \the [src].", \ + "You hear rustling of clothes.") + return if(isrobot(user)) return if(W.loc != user) // This should stop mounted modules ending up outside the module. diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index e3ea31375e..1ce97a64a7 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -65,6 +65,8 @@ /obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob) if(src.opened) + if(istype(W, /obj/item/weapon/storage/laundry_basket)) + return ..(W,user) if(istype(W, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = W if(src.large) diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index 61b297f9cc..728255c841 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index 6e6d8bdac5..a47ee5d686 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 1b08d9a9a2..7481b918b6 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/polaris.dme b/polaris.dme index 9869a1e55c..001e6f519b 100644 --- a/polaris.dme +++ b/polaris.dme @@ -734,6 +734,7 @@ #include "code\game\objects\items\weapons\storage\fancy.dm" #include "code\game\objects\items\weapons\storage\firstaid.dm" #include "code\game\objects\items\weapons\storage\internal.dm" +#include "code\game\objects\items\weapons\storage\laundry_basket.dm" #include "code\game\objects\items\weapons\storage\lockbox.dm" #include "code\game\objects\items\weapons\storage\misc.dm" #include "code\game\objects\items\weapons\storage\secure.dm"