diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index de8cae597278..69b1d7a6d50e 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -188,6 +188,33 @@ DEFINE_BITFIELD(no_equip_flags, list( /// The index of the entry in 'afk_thefts' with the time it happened #define AFK_THEFT_TIME 3 +/// A list of things that any suit storage can hold +/// Should consist of ubiquitous, non-specialized items +/// or items that are meant to be "suit storage agnostic" as +/// a benefit, which of the time of this commit only applies +/// to the captain's jetpack, here +GLOBAL_LIST_INIT(any_suit_storage, typecacheof(list( + /obj/item/clipboard, + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/lighter, + /obj/item/pen, + /obj/item/modular_computer/pda, + /obj/item/toy, + /obj/item/radio, + /obj/item/storage/bag/books, + /obj/item/storage/fancy/cigarettes, + /obj/item/tank/jetpack/oxygen/captain, + /obj/item/stack/spacecash, + /obj/item/storage/wallet, + /obj/item/folder, + /obj/item/storage/box/matches, + /obj/item/clothing/mask/cigarette, + /obj/item/storage/belt/holster, + /obj/item/storage/pouch, +))) + //Allowed equipment lists for security vests. GLOBAL_LIST_INIT(detective_vest_allowed, list( diff --git a/code/controllers/subsystem/wardrobe.dm b/code/controllers/subsystem/wardrobe.dm index ac435cc9a6dd..e5ba0ca331d6 100644 --- a/code/controllers/subsystem/wardrobe.dm +++ b/code/controllers/subsystem/wardrobe.dm @@ -313,6 +313,10 @@ SUBSYSTEM_DEF(wardrobe) play_with[WARDROBE_CALLBACK_REMOVE] = CALLBACK(null, TYPE_PROC_REF(/obj/item/storage/box/survival, wardrobe_removal)) initial_callbacks[/obj/item/storage/box/survival] = play_with + play_with = new /list(WARDROBE_CALLBACK_REMOVE) + play_with[WARDROBE_CALLBACK_REMOVE] = CALLBACK(null, TYPE_PROC_REF(/obj/item/storage/pouch/survival, wardrobe_removal)) + initial_callbacks[/obj/item/storage/pouch/survival] = play_with + /datum/controller/subsystem/wardrobe/proc/load_outfits() for(var/datum/outfit/to_stock as anything in subtypesof(/datum/outfit)) if(!initial(to_stock.preload)) // Clearly not interested diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index 5ddaae1be956..db0c759eea6e 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -437,7 +437,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) if(!can_insert(to_insert, user, messages = messages, force = force)) return FALSE - SEND_SIGNAL(parent, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force) + SEND_SIGNAL(parent, COMSIG_ATOM_STORED_ITEM, to_insert, user, force) SEND_SIGNAL(src, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force) RegisterSignal(to_insert, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(mousedrop_receive)) to_insert.forceMove(real_location) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 1053c923b9b7..f2b951031cad 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -24,6 +24,8 @@ ///Icon file for mob worn overlays. var/icon/worn_icon + ///Icon file used in occasional cases where the item must be mirrored + var/mirror_icon ///Icon state for mob worn overlays, if null the normal icon_state will be used. var/worn_icon_state ///Icon state for the belt overlay, if null the normal icon_state will be used. diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 0b5e5a76849c..d81c46d70015 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -9,7 +9,7 @@ item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) - w_class = WEIGHT_CLASS_SMALL + w_class = WEIGHT_CLASS_TINY ///Currently stored blulespace crystal, if any. Required to use the pointer through walls var/obj/item/stack/ore/bluespace_crystal/crystal_lens ///Currently stored micro-laser diode diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 196ff512e57c..55047416b049 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -20,7 +20,7 @@ item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT throwforce = 3 - w_class = WEIGHT_CLASS_TINY + w_class = WEIGHT_CLASS_SMALL throw_speed = 3 throw_range = 7 custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT *2) @@ -604,6 +604,7 @@ desc = "A helpful, child-proofed, and most importantly, extremely cheap MeLo-Tech medical scanner used to diagnose injuries and recommend treatment for serious wounds. While it might not sound very informative for it to be able to tell you if you have a gaping hole in your body or not, it applies a temporary holoimage near the wound with information that is guaranteed to double the efficacy and speed of treatment." mode = SCANNER_NO_MODE give_wound_treatment_bonus = TRUE + w_class = WEIGHT_CLASS_TINY /// Cooldown for when the analyzer will allow you to ask it for encouragement. Don't get greedy! var/next_encouragement diff --git a/code/game/objects/items/devices/scanners/sequence_scanner.dm b/code/game/objects/items/devices/scanners/sequence_scanner.dm index 921b22e29630..e4ac0bab0125 100644 --- a/code/game/objects/items/devices/scanners/sequence_scanner.dm +++ b/code/game/objects/items/devices/scanners/sequence_scanner.dm @@ -11,7 +11,7 @@ item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT throwforce = 3 - w_class = WEIGHT_CLASS_TINY + w_class = WEIGHT_CLASS_SMALL throw_speed = 3 throw_range = 7 custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2) diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 3350a0bce113..105487479a7a 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -496,6 +496,7 @@ /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/syringe, + /obj/item/food/meat/slab, )) /* @@ -556,6 +557,7 @@ /obj/item/stack/ore/bluespace_crystal, /obj/item/stock_parts, /obj/item/wallframe/camera, + /obj/item/stack/sheet, )) /obj/item/storage/bag/harpoon_quiver diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index 377ba144c40c..4b54391acacf 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -797,7 +797,7 @@ inhand_icon_state = "contsolid" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL + w_class = WEIGHT_CLASS_NORMAL /obj/item/storage/test_tube_rack/Initialize(mapload) . = ..() diff --git a/code/modules/antagonists/clown_ops/outfits.dm b/code/modules/antagonists/clown_ops/outfits.dm index 7dc84b56d856..a689330d0a24 100644 --- a/code/modules/antagonists/clown_ops/outfits.dm +++ b/code/modules/antagonists/clown_ops/outfits.dm @@ -16,7 +16,7 @@ /obj/item/reagent_containers/spray/waterflower/lube = 1, /obj/item/mod/skin_applier/honkerative = 1, ) - box = /obj/item/storage/box/survival/syndie + box = /obj/item/storage/pouch/survival/syndie implants = list(/obj/item/implant/sad_trombone) uplink_type = /obj/item/uplink/clownop diff --git a/code/modules/antagonists/nukeop/outfits.dm b/code/modules/antagonists/nukeop/outfits.dm index a3c97a764688..47ba79d53b17 100644 --- a/code/modules/antagonists/nukeop/outfits.dm +++ b/code/modules/antagonists/nukeop/outfits.dm @@ -12,7 +12,7 @@ belt = /obj/item/gun/ballistic/automatic/pistol/clandestine skillchips = list(/obj/item/skillchip/disk_verifier) - box = /obj/item/storage/box/survival/syndie + box = /obj/item/storage/pouch/survival/syndie /// Amount of TC to automatically store in this outfit's uplink. var/tc = 25 /// Enables big voice on this outfit's headset, used for nukie leaders. diff --git a/code/modules/antagonists/traitor/contractor/contract_teammate.dm b/code/modules/antagonists/traitor/contractor/contract_teammate.dm index 7612914f6b06..eaea35f806bc 100644 --- a/code/modules/antagonists/traitor/contractor/contract_teammate.dm +++ b/code/modules/antagonists/traitor/contractor/contract_teammate.dm @@ -59,7 +59,7 @@ id_trim = /datum/id_trim/chameleon/operative backpack_contents = list( - /obj/item/storage/box/survival, + /obj/item/storage/pouch/survival, /obj/item/implanter/uplink, /obj/item/clothing/mask/chameleon, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm index ad0c9c8b2413..799454473225 100644 --- a/code/modules/bitrunning/server/obj_generation.dm +++ b/code/modules/bitrunning/server/obj_generation.dm @@ -48,7 +48,7 @@ QDEL_LIST(bag.contents) bag.contents += list( - new /obj/item/storage/box/survival, + new /obj/item/storage/pouch/survival, new /obj/item/storage/medkit/regular, new /obj/item/flashlight, ) diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index 303dc201532d..56f44909cf0e 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -23,6 +23,7 @@ resistance_flags = FLAMMABLE custom_price = PAYCHECK_COMMAND * 1.5 flags_cover = EARS_COVERED + w_class = WEIGHT_CLASS_SMALL /obj/item/clothing/ears/earmuffs/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index db20562039b2..99d828681e6e 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -41,7 +41,7 @@ id = /obj/item/card/id/advanced/centcom/ert back = /obj/item/mod/control/pre_equipped/responsory/commander l_hand = /obj/item/gun/energy/e_gun - box = /obj/item/storage/box/survival/centcom + box = /obj/item/storage/pouch/survival/centcom backpack_contents = list( /obj/item/melee/baton/security/loaded = 1, ) @@ -66,7 +66,7 @@ id = /obj/item/card/id/advanced/centcom/ert/security back = /obj/item/mod/control/pre_equipped/responsory/security l_hand = /obj/item/gun/energy/e_gun/stun - box = /obj/item/storage/box/survival/centcom + box = /obj/item/storage/pouch/survival/centcom backpack_contents = list( /obj/item/melee/baton/security/loaded = 1, /obj/item/storage/box/handcuffs = 1, @@ -90,7 +90,7 @@ id = /obj/item/card/id/advanced/centcom/ert/medical back = /obj/item/mod/control/pre_equipped/responsory/medic - box = /obj/item/storage/box/survival/centcom + box = /obj/item/storage/pouch/survival/centcom backpack_contents = list( /obj/item/gun/medbeam = 1, /obj/item/melee/baton/security/loaded = 1, @@ -122,7 +122,7 @@ id = /obj/item/card/id/advanced/centcom/ert/engineer back = /obj/item/mod/control/pre_equipped/responsory/engineer l_hand = /obj/item/gun/energy/e_gun - box = /obj/item/storage/box/survival/centcom + box = /obj/item/storage/pouch/survival/centcom backpack_contents = list( /obj/item/construction/rcd/loaded/upgraded = 1, /obj/item/melee/baton/security/loaded = 1, @@ -150,7 +150,7 @@ id_trim = /datum/id_trim/centcom/official uniform = /obj/item/clothing/under/rank/centcom/official back = /obj/item/storage/backpack/satchel - box = /obj/item/storage/box/survival + box = /obj/item/storage/pouch/survival backpack_contents = list( /obj/item/stamp/centcom = 1, ) @@ -212,7 +212,7 @@ l_hand = /obj/item/gun/energy/e_gun belt = /obj/item/storage/belt/soulstone glasses = /obj/item/clothing/glasses/hud/health - box = /obj/item/storage/box/survival/centcom + box = /obj/item/storage/pouch/survival/centcom backpack_contents = list( /obj/item/nullrod = 1, ) @@ -233,7 +233,7 @@ id = /obj/item/card/id/advanced/centcom/ert/janitor back = /obj/item/mod/control/pre_equipped/responsory/janitor - box = /obj/item/storage/box/survival/centcom + box = /obj/item/storage/pouch/survival/centcom backpack_contents = list( /obj/item/grenade/clusterbuster/cleaner = 1, /obj/item/melee/baton/security/loaded = 1, @@ -263,7 +263,7 @@ id = /obj/item/card/id/advanced/centcom/ert/clown back = /obj/item/mod/control/pre_equipped/responsory/clown - box = /obj/item/storage/box/survival/centcom + box = /obj/item/storage/pouch/survival/centcom backpack_contents = list( /obj/item/gun/ballistic/revolver/reverse = 1, /obj/item/melee/energy/sword/bananium = 1, @@ -293,7 +293,7 @@ id_trim = /datum/id_trim/centcom/intern uniform = /obj/item/clothing/under/rank/centcom/intern back = /obj/item/storage/backpack/satchel - box = /obj/item/storage/box/survival + box = /obj/item/storage/pouch/survival belt = /obj/item/melee/baton ears = /obj/item/radio/headset/headset_cent glasses = /obj/item/clothing/glasses/sunglasses @@ -427,7 +427,7 @@ id_trim = /datum/id_trim/centcom/deathsquad uniform = /obj/item/clothing/under/rank/centcom/commander back = /obj/item/mod/control/pre_equipped/apocryphal - box = /obj/item/storage/box/survival/centcom + box = /obj/item/storage/pouch/survival/centcom backpack_contents = list( /obj/item/ammo_box/a357 = 1, /obj/item/flashlight = 1, @@ -545,7 +545,7 @@ shoes = /obj/item/clothing/shoes/cowboy gloves = /obj/item/clothing/gloves/combat back = /obj/item/storage/backpack/satchel/leather - box = /obj/item/storage/box/survival + box = /obj/item/storage/pouch/survival l_pocket = /obj/item/switchblade r_pocket = /obj/item/reagent_containers/hypospray/medipen/salacid ears = /obj/item/radio/headset diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm index fc94adb9ff55..5c9da2b230c7 100644 --- a/code/modules/clothing/outfits/event.dm +++ b/code/modules/clothing/outfits/event.dm @@ -12,7 +12,7 @@ shoes = /obj/item/clothing/shoes/sneakers/red r_pocket = /obj/item/flashlight - box = /obj/item/storage/box/survival/engineer + box = /obj/item/storage/pouch/survival/engineer /datum/outfit/santa/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE) if(visualsOnly) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index a22691495ccc..43053b0143bc 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -296,7 +296,7 @@ backpack_contents = list( /obj/item/spellbook = 1, ) - box = /obj/item/storage/box/survival + box = /obj/item/storage/pouch/survival ears = /obj/item/radio/headset head = /obj/item/clothing/head/wizard shoes = /obj/item/clothing/shoes/sandal/magic diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index fb618cd831b6..f1012822f223 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -17,7 +17,7 @@ id_trim = /datum/id_trim/vr/operative uniform = /obj/item/clothing/under/syndicate back = /obj/item/storage/backpack - box = /obj/item/storage/box/survival/syndie + box = /obj/item/storage/pouch/survival/syndie belt = /obj/item/gun/ballistic/automatic/pistol/clandestine gloves = /obj/item/clothing/gloves/combat shoes = /obj/item/clothing/shoes/combat diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index c9400ccfc573..34c0ec9a1b58 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -3,6 +3,7 @@ name = "attorney's badge" desc = "Fills you with the conviction of JUSTICE. Lawyers tend to want to show it to everyone they meet." icon_state = "lawyerbadge" + w_class = WEIGHT_CLASS_TINY /obj/item/clothing/accessory/lawyers_badge/interact(mob/user) . = ..() @@ -28,6 +29,7 @@ name = "\improper Clown Pin" desc = "A pin to show off your appreciation for clowns and clowning!" icon_state = "clown_enjoyer_pin" + w_class = WEIGHT_CLASS_TINY /obj/item/clothing/accessory/clown_enjoyer_pin/can_attach_accessory(obj/item/clothing/under/attach_to, mob/living/user) . = ..() @@ -56,6 +58,7 @@ name = "\improper Mime Pin" desc = "A pin to show off your appreciation for mimes and miming!" icon_state = "mime_fan_pin" + w_class = WEIGHT_CLASS_TINY /obj/item/clothing/accessory/mime_fan_pin/can_attach_accessory(obj/item/clothing/under/attach_to, mob/living/user) . = ..() @@ -198,18 +201,21 @@ name = "deaf personnel pin" desc = "Indicates that the wearer is deaf." icon_state = "deaf_pin" + w_class = WEIGHT_CLASS_TINY ///Awarded for being dutiful and extinguishing the debt from the "Indebted" quirk. /obj/item/clothing/accessory/debt_payer_pin name = "debt payer pin" desc = "I've paid my debt and all I've got was this pin." icon_state = "debt_payer_pin" + w_class = WEIGHT_CLASS_TINY /// Self-identify as a dangerous subversive /obj/item/clothing/accessory/anti_sec_pin name = "subversive pin" desc = "A badge which loudly and proudly proclaims your hostility to the Nanotrasen Security Team, and authority in general." icon_state = "anti_sec" + w_class = WEIGHT_CLASS_TINY /obj/item/clothing/accessory/anti_sec_pin/Initialize(mapload) . = ..() @@ -244,6 +250,7 @@ desc_controls = "Click person with it to show them it" icon_state = "press_badge" attachment_slot = NONE // actually NECK but that doesn't make sense + w_class = WEIGHT_CLASS_TINY /// The name of the person in the badge var/journalist_name /// The name of the press person is working for diff --git a/code/modules/clothing/under/accessories/medals.dm b/code/modules/clothing/under/accessories/medals.dm index be47784d6b28..bc6f48f8bfaf 100644 --- a/code/modules/clothing/under/accessories/medals.dm +++ b/code/modules/clothing/under/accessories/medals.dm @@ -4,6 +4,7 @@ icon_state = "bronze" custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) resistance_flags = FIRE_PROOF + w_class = WEIGHT_CLASS_TINY /// Sprite used for medalbox var/medaltype = "medal" /// Has this been use for a commendation? diff --git a/code/modules/clothing/under/accessories/tribal.dm b/code/modules/clothing/under/accessories/tribal.dm index ad55b26fa89f..d3efb11d5cf2 100644 --- a/code/modules/clothing/under/accessories/tribal.dm +++ b/code/modules/clothing/under/accessories/tribal.dm @@ -10,6 +10,7 @@ desc = "A skull shaped ornament, intended to protect the important things in life." icon_state = "skull" attachment_slot = GROIN + w_class = WEIGHT_CLASS_NORMAL /obj/item/clothing/accessory/skilt name = "Sinew Skirt" @@ -17,3 +18,4 @@ icon_state = "skilt" minimize_when_attached = FALSE attachment_slot = GROIN + w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/clothing/under/accessories/vests.dm b/code/modules/clothing/under/accessories/vests.dm index 83bbc789bdd0..5c058c63b11a 100644 --- a/code/modules/clothing/under/accessories/vests.dm +++ b/code/modules/clothing/under/accessories/vests.dm @@ -12,6 +12,7 @@ greyscale_config_worn = /datum/greyscale_config/waistcoat/worn greyscale_colors = "#414344" flags_1 = IS_PLAYER_COLORABLE_1 + w_class = WEIGHT_CLASS_NORMAL /obj/item/clothing/accessory/vest_sheriff name = "sheriff vest" @@ -22,6 +23,7 @@ inhand_icon_state = "vest_sheriff" minimize_when_attached = TRUE attachment_slot = NONE + w_class = WEIGHT_CLASS_NORMAL /obj/item/clothing/accessory/maidcorset name = "maid corset" @@ -32,6 +34,7 @@ righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' minimize_when_attached = FALSE attachment_slot = NONE + w_class = WEIGHT_CLASS_NORMAL /obj/item/clothing/accessory/maidapron name = "maid apron" @@ -42,3 +45,4 @@ righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' minimize_when_attached = FALSE attachment_slot = NONE + w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index c96312d0f057..d59c3dba05c8 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -672,14 +672,14 @@ /obj/machinery/smartfridge/organ name = "smart organ storage" desc = "A refrigerated storage unit for organ storage." - max_n_of_items = 20 //vastly lower to prevent processing too long + max_n_of_items = 100 //vastly lower to prevent processing too long base_build_path = /obj/machinery/smartfridge/organ contents_overlay_icon = "organ" /// The rate at which this fridge will repair damaged organs var/repair_rate = 0 /obj/machinery/smartfridge/organ/accept_check(obj/item/O) - return (isorgan(O) || isbodypart(O)) + return (isorgan(O) || isbodypart(O) || istype(O, /obj/item/food/meat/slab)) /obj/machinery/smartfridge/organ/load(obj/item/item, mob/user) . = ..() @@ -698,7 +698,7 @@ /obj/machinery/smartfridge/organ/RefreshParts() . = ..() for(var/datum/stock_part/matter_bin/matter_bin in component_parts) - max_n_of_items = 20 * matter_bin.tier + max_n_of_items = initial(max_n_of_items) * matter_bin.tier repair_rate = max(0, STANDARD_ORGAN_HEALING * (matter_bin.tier - 1) * 0.5) /obj/machinery/smartfridge/organ/process(seconds_per_tick) diff --git a/code/modules/instruments/piano_synth.dm b/code/modules/instruments/piano_synth.dm index 8e107d494c77..44b9c8601af4 100644 --- a/code/modules/instruments/piano_synth.dm +++ b/code/modules/instruments/piano_synth.dm @@ -55,6 +55,7 @@ strip_delay = 100 //air pods don't fall out instrument_range = 0 //you're paying for quality here custom_premium_price = PAYCHECK_CREW * 36 //Save up 5 shifts worth of pay just to lose it down a drainpipe on the sidewalk + w_class = WEIGHT_CLASS_TINY /obj/item/circuit_component/synth display_name = "Synthesizer" diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index b94ccc2f9730..47a646285bef 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -357,7 +357,7 @@ belt = /obj/item/modular_computer/pda back = /obj/item/storage/backpack shoes = /obj/item/clothing/shoes/sneakers/black - box = /obj/item/storage/box/survival + box = /obj/item/storage/pouch/survival preload = TRUE // These are used by the prefs ui, and also just kinda could use the extra help at roundstart diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index 5991ec156544..e099c7750e7f 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -55,7 +55,7 @@ duffelbag = /obj/item/storage/backpack/duffelbag/engineering messenger = /obj/item/storage/backpack/messenger/eng - box = /obj/item/storage/box/survival/engineer + box = /obj/item/storage/pouch/survival/engineer pda_slot = ITEM_SLOT_LPOCKET /datum/outfit/job/atmos/mod diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index c48db3a8a668..6a99abc53d5b 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -60,5 +60,5 @@ duffelbag = /obj/item/storage/backpack/duffelbag/chemistry messenger = /obj/item/storage/backpack/messenger/chem - box = /obj/item/storage/box/survival/medical + box = /obj/item/storage/pouch/survival/medical chameleon_extras = /obj/item/gun/syringe diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 70b685247a56..3181f6115399 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -80,7 +80,7 @@ duffelbag = /obj/item/storage/backpack/duffelbag/engineering messenger = /obj/item/storage/backpack/messenger/eng - box = /obj/item/storage/box/survival/engineer + box = /obj/item/storage/pouch/survival/engineer chameleon_extras = /obj/item/stamp/head/ce skillchips = list(/obj/item/skillchip/job/engineer) pda_slot = ITEM_SLOT_LPOCKET diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index da1b5e8793ed..a044c32e7f8c 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -75,7 +75,7 @@ duffelbag = /obj/item/storage/backpack/duffelbag/med messenger = /obj/item/storage/backpack/messenger/med - box = /obj/item/storage/box/survival/medical + box = /obj/item/storage/pouch/survival/medical chameleon_extras = list( /obj/item/gun/syringe, /obj/item/stamp/head/cmo, diff --git a/code/modules/jobs/job_types/coroner.dm b/code/modules/jobs/job_types/coroner.dm index 48f577939c24..673053d58db7 100644 --- a/code/modules/jobs/job_types/coroner.dm +++ b/code/modules/jobs/job_types/coroner.dm @@ -48,7 +48,7 @@ jobtype = /datum/job/coroner id_trim = /datum/id_trim/job/coroner - box = /obj/item/storage/box/survival/medical + box = /obj/item/storage/pouch/survival/medical backpack_contents = list( /obj/item/storage/box/bodybags = 1, /obj/item/autopsy_scanner = 1, diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 3b615e6afb37..f28dd63c3bd8 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -70,7 +70,7 @@ duffelbag = /obj/item/storage/backpack/duffelbag/sec messenger = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/security + box = /obj/item/storage/pouch/survival/security chameleon_extras = list( /obj/item/gun/energy/e_gun/hos, /obj/item/stamp/head/hos, diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index 6719e1c07842..bca7e581ff8b 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -62,7 +62,7 @@ duffelbag = /obj/item/storage/backpack/duffelbag/med messenger = /obj/item/storage/backpack/messenger/med - box = /obj/item/storage/box/survival/medical + box = /obj/item/storage/pouch/survival/medical chameleon_extras = /obj/item/gun/syringe skillchips = list(/obj/item/skillchip/entrails_reader) diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index ad9f4a84aae5..2de3450da4b3 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -64,6 +64,6 @@ duffelbag = /obj/item/storage/backpack/duffelbag/med messenger = /obj/item/storage/backpack/messenger/med - box = /obj/item/storage/box/survival/medical + box = /obj/item/storage/pouch/survival/medical chameleon_extras = /obj/item/gun/syringe pda_slot = ITEM_SLOT_LPOCKET diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index a5327ae77155..f6b85e7ff7c5 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -229,7 +229,7 @@ GLOBAL_LIST_EMPTY(security_officer_distribution) duffelbag = /obj/item/storage/backpack/duffelbag/sec messenger = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/security + box = /obj/item/storage/pouch/survival/security chameleon_extras = list( /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet, diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 0e0c9f5191c6..2e25c850c0a1 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -53,7 +53,7 @@ duffelbag = /obj/item/storage/backpack/duffelbag/explorer messenger = /obj/item/storage/backpack/messenger/explorer - box = /obj/item/storage/box/survival/mining + box = /obj/item/storage/pouch/survival/mining chameleon_extras = /obj/item/gun/energy/recharge/kinetic_accelerator /datum/outfit/job/miner/equipped @@ -90,7 +90,7 @@ /obj/item/kinetic_crusher/compact = 1, /obj/item/resonator/upgraded = 1, ) - box = /obj/item/storage/box/survival/mining/bonus + box = /obj/item/storage/pouch/survival/mining/bonus l_pocket = /obj/item/modular_computer/pda/shaftminer r_pocket = /obj/item/extinguisher/mini belt = /obj/item/storage/belt/mining/healing diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 5e6657b1c2a8..c54cc6de4958 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -66,7 +66,7 @@ /obj/item/construction/rcd/loaded, ) - box = /obj/item/storage/box/survival/engineer + box = /obj/item/storage/pouch/survival/engineer pda_slot = ITEM_SLOT_LPOCKET skillchips = list(/obj/item/skillchip/job/engineer) diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index 646d7f19772b..f3f1cd0a45d2 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -60,4 +60,4 @@ duffelbag = /obj/item/storage/backpack/duffelbag/virology messenger = /obj/item/storage/backpack/messenger/vir - box = /obj/item/storage/box/survival/medical + box = /obj/item/storage/pouch/survival/medical diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index a875dd57a387..304d1af0cfc6 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -67,5 +67,5 @@ duffelbag = /obj/item/storage/backpack/duffelbag/sec messenger = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/security + box = /obj/item/storage/pouch/survival/security implants = list(/obj/item/implant/mindshield) diff --git a/code/modules/library/skill_learning/skillchip.dm b/code/modules/library/skill_learning/skillchip.dm index 9133ee7b5eb1..d69b366e405d 100644 --- a/code/modules/library/skill_learning/skillchip.dm +++ b/code/modules/library/skill_learning/skillchip.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "skillchip" custom_price = PAYCHECK_CREW * 3 - w_class = WEIGHT_CLASS_SMALL + w_class = WEIGHT_CLASS_TINY /// Traits automatically granted by this chip, optional. Lazylist. var/list/auto_traits diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 7476d2d6fbbf..7f0cc6d2cf5d 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -951,15 +951,14 @@ GLOBAL_LIST_EMPTY(features_by_species) if(!disable_warning) to_chat(H, span_warning("You need a suit before you can attach this [I.name]!")) return FALSE - if(!H.wear_suit.allowed) - if(!disable_warning) - to_chat(H, span_warning("You somehow have a suit with no defined allowed items for suit storage, stop that.")) - return FALSE + var/any_suit_storage = (is_type_in_typecache(I, GLOB.any_suit_storage) || I.w_class == WEIGHT_CLASS_TINY) + if(any_suit_storage) + return TRUE if(I.w_class > WEIGHT_CLASS_BULKY) if(!disable_warning) to_chat(H, span_warning("The [I.name] is too big to attach!")) //should be src? return FALSE - if( istype(I, /obj/item/modular_computer/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed) ) + if( is_type_in_list(I, H.wear_suit.allowed) ) return TRUE return FALSE if(ITEM_SLOT_HANDCUFFED) diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 13a6983253e8..3cd89472bd24 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -366,7 +366,7 @@ There are several things that need to be remembered: if(check_obscured_slots() & ITEM_SLOT_SUITSTORE) return - var/mutable_appearance/s_store_overlay = worn_item.build_worn_icon(default_layer = SUIT_STORE_LAYER, default_icon_file = 'icons/mob/clothing/belt_mirror.dmi') + var/mutable_appearance/s_store_overlay = worn_item.build_worn_icon(default_layer = SUIT_STORE_LAYER, default_icon_file = worn_item.mirror_icon || 'icons/mob/clothing/belt_mirror.dmi') var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) my_chest?.worn_suit_storage_offset?.apply_offset(s_store_overlay) overlays_standing[SUIT_STORE_LAYER] = s_store_overlay diff --git a/code/modules/mob_spawn/ghost_roles/space_roles.dm b/code/modules/mob_spawn/ghost_roles/space_roles.dm index 764d20c9a76c..ca09eecd7a36 100644 --- a/code/modules/mob_spawn/ghost_roles/space_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/space_roles.dm @@ -138,7 +138,7 @@ l_pocket = /obj/item/gun/ballistic/automatic/pistol/clandestine r_pocket = /obj/item/knife/combat/survival - box = /obj/item/storage/box/survival/syndie + box = /obj/item/storage/pouch/survival/syndie /obj/effect/mob_spawn/ghost_role/human/syndicate/battlecruiser/assault name = "Syndicate Battlecruiser Assault Operative" diff --git a/code/modules/projectiles/boxes_magazines/external/grenade.dm b/code/modules/projectiles/boxes_magazines/external/grenade.dm index 4ba7d43efae4..c8106d3e1577 100644 --- a/code/modules/projectiles/boxes_magazines/external/grenade.dm +++ b/code/modules/projectiles/boxes_magazines/external/grenade.dm @@ -5,4 +5,4 @@ caliber = CALIBER_75 multiple_sprites = AMMO_BOX_FULL_EMPTY max_ammo = 8 - + w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/projectiles/boxes_magazines/external/lmg.dm b/code/modules/projectiles/boxes_magazines/external/lmg.dm index 5af59b037770..769810e177bf 100644 --- a/code/modules/projectiles/boxes_magazines/external/lmg.dm +++ b/code/modules/projectiles/boxes_magazines/external/lmg.dm @@ -4,6 +4,7 @@ ammo_type = /obj/item/ammo_casing/m7mm caliber = CALIBER_A7MM max_ammo = 50 + w_class = WEIGHT_CLASS_SMALL /obj/item/ammo_box/magazine/m7mm/hollow name = "box magazine (Hollow-Point 7mm)" diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm index 3a841c605a18..077a4ee95f8a 100644 --- a/code/modules/projectiles/boxes_magazines/external/toy.dm +++ b/code/modules/projectiles/boxes_magazines/external/toy.dm @@ -48,6 +48,7 @@ base_icon_state = "a7mm" ammo_type = /obj/item/ammo_casing/foam_dart max_ammo = 50 + w_class = WEIGHT_CLASS_SMALL /obj/item/ammo_box/magazine/toy/m762/update_icon_state() . = ..() diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index ead8d1fb7901..bdf55a150d9e 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -12,6 +12,7 @@ px_y = 0 grind_results = null wound_resistance = 10 + w_class = WEIGHT_CLASS_BULKY bodypart_trait_source = CHEST_TRAIT ///The bodytype(s) allowed to attach to this chest. var/acceptable_bodytype = BODYTYPE_HUMANOID diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 913c570d77dc..739a9ed17bfb 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -9,7 +9,7 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 1.5) obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL - w_class = WEIGHT_CLASS_TINY + w_class = WEIGHT_CLASS_SMALL tool_behaviour = TOOL_RETRACTOR toolspeed = 1 drop_sound = 'maplestation_modules/sound/items/drop/knife3.ogg' @@ -40,7 +40,7 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 1.25) obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL - w_class = WEIGHT_CLASS_TINY + w_class = WEIGHT_CLASS_SMALL attack_verb_continuous = list("attacks", "pinches") attack_verb_simple = list("attack", "pinch") tool_behaviour = TOOL_HEMOSTAT @@ -73,7 +73,7 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/glass = SMALL_MATERIAL_AMOUNT*7.5) obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL - w_class = WEIGHT_CLASS_TINY + w_class = WEIGHT_CLASS_SMALL attack_verb_continuous = list("burns") attack_verb_simple = list("burn") tool_behaviour = TOOL_CAUTERY @@ -212,7 +212,7 @@ item_flags = SURGICAL_TOOL force = 10 demolition_mod = 0.25 - w_class = WEIGHT_CLASS_TINY + w_class = WEIGHT_CLASS_SMALL throwforce = 5 throw_speed = 3 throw_range = 5 @@ -323,7 +323,7 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' inhand_icon_state = "drapes" - w_class = WEIGHT_CLASS_TINY + w_class = WEIGHT_CLASS_SMALL attack_verb_continuous = list("slaps") attack_verb_simple = list("slap") drop_sound = 'maplestation_modules/sound/items/drop/generic2.ogg' diff --git a/maplestation.dme b/maplestation.dme index d61fe738b457..425c7c4e790d 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6298,6 +6298,7 @@ #include "maplestation_modules\code\game\objects\items\storage\boxes.dm" #include "maplestation_modules\code\game\objects\items\storage\garment.dm" #include "maplestation_modules\code\game\objects\items\storage\medkit.dm" +#include "maplestation_modules\code\game\objects\items\storage\pouch.dm" #include "maplestation_modules\code\game\objects\items\storage\storage.dm" #include "maplestation_modules\code\game\objects\items\tcg\tdatet.dm" #include "maplestation_modules\code\game\objects\spawners\cycle_helper.dm" diff --git a/maplestation_modules/code/game/objects/items/storage/pouch.dm b/maplestation_modules/code/game/objects/items/storage/pouch.dm new file mode 100644 index 000000000000..a2e71677e3f8 --- /dev/null +++ b/maplestation_modules/code/game/objects/items/storage/pouch.dm @@ -0,0 +1,263 @@ +/datum/storage/pouch + max_specific_storage = WEIGHT_CLASS_SMALL + max_slots = 5 + max_total_storage = 10 + storage_sound = 'maplestation_modules/sound/items/storage/briefcase.ogg' + +/datum/storage/pouch/survival + max_specific_storage = WEIGHT_CLASS_TINY + max_slots = 5 + max_total_storage = 8 + +/datum/storage/pouch/survival/New(atom/parent, max_slots, max_specific_storage, max_total_storage) + . = ..() + var/static/list/survival_typecache = typecacheof(list( + /obj/item/analyzer, + /obj/item/assembly/flash, + /obj/item/chameleon, + /obj/item/climbing_hook/emergency, + /obj/item/clipboard, + /obj/item/clockwork_slab, + /obj/item/clothing/accessory/medal, + /obj/item/clothing/glasses, + /obj/item/clothing/gloves, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/gas/explorer, + /obj/item/clothing/mask/gas/sechailer, + /obj/item/clothing/mask/gas/syndicate, + /obj/item/clothing/mask/muzzle, + /obj/item/clothing/neck/eldritch_amulet, + /obj/item/clothing/neck/fake_heretic_amulet, + /obj/item/clothing/neck/heretic_focus, + /obj/item/codex_cicatrix, + /obj/item/crowbar, // ehhhhhh + /obj/item/desynchronizer, + /obj/item/extinguisher/mini, + /obj/item/flashlight, + /obj/item/folder, + /obj/item/food/donkpocket, + /obj/item/geiger_counter, + /obj/item/gps, + /obj/item/grenade, + /obj/item/hand_tele, + /obj/item/implanter, + /obj/item/instrument/harmonica, + /obj/item/instrument/piano_synth/headphones, + /obj/item/knife, + /obj/item/laser_pointer, + /obj/item/melee/baton/telescopic, + /obj/item/melee/cultblade/advanced_dagger, + /obj/item/melee/cultblade/dagger, + /obj/item/melee/energy, + /obj/item/melee/rune_carver, + /obj/item/mining_scanner, + /obj/item/multitool, + /obj/item/pinpointer, + /obj/item/radio, + /obj/item/restraints/handcuffs, + /obj/item/stock_parts/power_store/cell, + /obj/item/storage/pill_bottle, + /obj/item/storage/wallet, + /obj/item/swapper, + /obj/item/syndicate_teleporter, + /obj/item/t_scanner, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman/belt, + /obj/item/teleportation_scroll, + /obj/item/tome, + /obj/item/toy/clockwork_watch, + )) + + exception_hold = survival_typecache + +/datum/storage/pouch/survival/can_insert(obj/item/to_insert, mob/user, messages = TRUE, force = STORAGE_NOT_LOCKED) + . = ..() + if(!.) + return FALSE + // items in the exception list are still limited to max storage + 2 + if(to_insert.w_class >= max_specific_storage + 2) + if(messages) + to_insert.balloon_alert(user, "too big!") + return FALSE + return TRUE + +/datum/storage/pouch/open_storage(mob/to_show) + if(parent.loc?.atom_storage) + if(!silent) + parent.balloon_alert(to_show, "[LOWER_TEXT(parent.loc)] is in the way!") + return FALSE + + return ..() + +/obj/item/storage/pouch + name = "pouch" + desc = "A pocket sized pouch." + icon = 'maplestation_modules/icons/obj/storage/pouch.dmi' + worn_icon = 'maplestation_modules/icons/mob/storage/pouch.dmi' + mirror_icon = 'maplestation_modules/icons/mob/storage/pouch_mirror.dmi' + icon_state = "pouch" + base_icon_state = "pouch" + inhand_icon_state = "syringe_kit" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + resistance_flags = FLAMMABLE + drop_sound = 'maplestation_modules/sound/items/drop/generic2.ogg' + pickup_sound = 'maplestation_modules/sound/items/pickup/generic3.ogg' + w_class = POCKET_WEIGHT_CLASS + storage_type = /datum/storage/pouch + slot_flags = ITEM_SLOT_BELT + /// Overlay to apply to the pouch + var/overlay_state = "" + /// Changes the icon state if an item was recently added or removed to storage + VAR_PRIVATE/recently_opened = FALSE + +/obj/item/storage/pouch/Initialize(mapload) + . = ..() + update_appearance() + RegisterSignals(src, list(COMSIG_ATOM_STORED_ITEM, COMSIG_ATOM_REMOVED_ITEM), PROC_REF(animate_icon)) + +/obj/item/storage/pouch/update_overlays() + . = ..() + if(overlay_state) + . += overlay_state + +/obj/item/storage/pouch/update_icon_state() + . = ..() + icon_state = "[base_icon_state][recently_opened ? "_open" : ""]" + +/obj/item/storage/pouch/proc/animate_icon(...) + SIGNAL_HANDLER + recently_opened = TRUE + update_appearance(UPDATE_ICON_STATE) + addtimer(CALLBACK(src, PROC_REF(reset_recently_opened)), 2 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) + +/obj/item/storage/pouch/proc/reset_recently_opened() + recently_opened = FALSE + update_appearance(UPDATE_ICON_STATE) + +/obj/item/storage/pouch/tools + name = "tool pouch" + desc = "A pocket sized pouch, perfectly capable of holding a few tools." + overlay_state = "wrench" + custom_price = PAYCHECK_COMMAND + custom_premium_price = PAYCHECK_COMMAND + +/obj/item/storage/pouch/survival + name = "surival pouch" + desc = "A pocket sized pouch, assigned to members of the crew to use in emergencies." + icon_state = "pouch_em" + base_icon_state = "pouch_em" + overlay_state = "emergencytank" + storage_type = /datum/storage/pouch/survival + /// What type of mask are we going to use for this box? + var/mask_type = /obj/item/clothing/mask/breath + /// Which internals tank are we going to use for this box? + var/internal_type = /obj/item/tank/internals/emergency_oxygen + /// What medipen should be present in this box? + var/medipen_type = /obj/item/reagent_containers/hypospray/medipen + /// Whether or not this pouch should contain a radio + var/radio = FALSE + +/obj/item/storage/pouch/survival/Initialize(mapload) + if(isplasmaman(loc)) + internal_type = /obj/item/tank/internals/plasmaman/belt + . = ..() + + var/extra_slots_needed = length(contents) - atom_storage.max_slots + if(extra_slots_needed > 0) + atom_storage.max_slots += extra_slots_needed + atom_storage.max_total_storage += extra_slots_needed * 2 + if(HAS_TRAIT(SSstation, STATION_TRAIT_PREMIUM_INTERNALS)) + atom_storage.max_slots += 2 + atom_storage.max_total_storage += 4 + name = "large [name]" + transform = transform.Scale(1.25, 1) + +/obj/item/storage/pouch/survival/proc/wardrobe_removal() + if(!isplasmaman(loc)) //We need to specially fill the box with plasmaman gear, since it's intended for one + return + var/obj/item/mask = locate(mask_type) in src + var/obj/item/internals = locate(internal_type) in src + new /obj/item/tank/internals/plasmaman/belt(src) + qdel(mask) // Get rid of the items that shouldn't be + qdel(internals) + +/obj/item/storage/pouch/survival/PopulateContents() + if(!isnull(mask_type)) + new mask_type(src) + + if(!isnull(internal_type)) + new internal_type(src) + + if(!isnull(medipen_type)) + new medipen_type(src) + + if(HAS_TRAIT(SSstation, STATION_TRAIT_PREMIUM_INTERNALS)) + new /obj/item/flashlight/flare(src) + if(radio || HAS_TRAIT(SSstation, STATION_TRAIT_PREMIUM_INTERNALS)) + new /obj/item/radio/off(src) + + if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) + new /obj/item/storage/pill_bottle/potassiodide(src) + + if(SSmapping.is_planetary() && LAZYLEN(SSmapping.multiz_levels)) + new /obj/item/climbing_hook/emergency(src) + +/obj/item/storage/pouch/survival/engineer + internal_type = /obj/item/tank/internals/emergency_oxygen/engi + radio = TRUE + +/obj/item/storage/pouch/survival/mining + mask_type = /obj/item/clothing/mask/gas/explorer/folded + +/obj/item/storage/pouch/survival/mining/bonus + mask_type = null + internal_type = /obj/item/tank/internals/emergency_oxygen/double + +/obj/item/storage/pouch/survival/mining/bonus/PopulateContents() + . = ..() + new /obj/item/gps/mining(src) + new /obj/item/t_scanner/adv_mining_scanner(src) + +/obj/item/storage/pouch/survival/medical + mask_type = /obj/item/clothing/mask/breath/medical + +/obj/item/storage/pouch/survival/security + mask_type = /obj/item/clothing/mask/gas/sechailer + radio = TRUE + +/obj/item/storage/pouch/survival/syndie + // icon_state = "syndiebox" + mask_type = /obj/item/clothing/mask/gas/syndicate + internal_type = /obj/item/tank/internals/emergency_oxygen/engi + medipen_type = /obj/item/reagent_containers/hypospray/medipen/atropine + radio = TRUE + +/obj/item/storage/pouch/survival/syndie/PopulateContents() + . = ..() + new /obj/item/crowbar/red(src) + new /obj/item/screwdriver/red(src) + new /obj/item/weldingtool/mini(src) + new /obj/item/paper/fluff/operative(src) + +/obj/item/storage/pouch/survival/centcom + internal_type = /obj/item/tank/internals/emergency_oxygen/double + radio = TRUE + +/obj/item/storage/pouch/survival/centcom/PopulateContents() + . = ..() + new /obj/item/crowbar(src) + +/obj/structure/closet/secure_closet/engineering_personal/PopulateContents() + . = ..() + new /obj/item/storage/pouch/tools(src) + +/obj/machinery/vending/tool + added_premium = list( + /obj/item/storage/pouch/tools = 3, + ) + +/obj/machinery/vending/engivend + added_premium = list( + /obj/item/storage/pouch/tools = 5, + ) diff --git a/maplestation_modules/code/modules/antagonists/infiltrator/infiltrator.dm b/maplestation_modules/code/modules/antagonists/infiltrator/infiltrator.dm index 1b11750065c8..86d42e93c7c4 100644 --- a/maplestation_modules/code/modules/antagonists/infiltrator/infiltrator.dm +++ b/maplestation_modules/code/modules/antagonists/infiltrator/infiltrator.dm @@ -160,7 +160,7 @@ id = /obj/item/card/id/advanced/black id_trim = /datum/id_trim/syndicom/infiltrator skillchips = list(/obj/item/skillchip/disk_verifier) - backpack_contents = list(/obj/item/storage/box/survival/syndie = 1, /obj/item/knife/combat/survival) + backpack_contents = list(/obj/item/storage/pouch/survival/syndie = 1, /obj/item/knife/combat/survival) /datum/outfit/syndicate_infiltrator/post_equip(mob/living/carbon/human/human_equipper, visualsOnly) . = ..() diff --git a/maplestation_modules/code/modules/jobs/job_types/asset_protection.dm b/maplestation_modules/code/modules/jobs/job_types/asset_protection.dm index 4085e8378ee2..30ec205cc196 100644 --- a/maplestation_modules/code/modules/jobs/job_types/asset_protection.dm +++ b/maplestation_modules/code/modules/jobs/job_types/asset_protection.dm @@ -65,7 +65,7 @@ suit = /obj/item/clothing/suit/armor/vest/asset_protection suit_store = /obj/item/gun/energy/disabler id_trim = /datum/id_trim/job/asset_protection - box = /obj/item/storage/box/survival/security + box = /obj/item/storage/pouch/survival/security implants = list(/obj/item/implant/mindshield) diff --git a/maplestation_modules/code/modules/jobs/job_types/bridge_officer.dm b/maplestation_modules/code/modules/jobs/job_types/bridge_officer.dm index 03f4b96d2997..9b078fd56a20 100644 --- a/maplestation_modules/code/modules/jobs/job_types/bridge_officer.dm +++ b/maplestation_modules/code/modules/jobs/job_types/bridge_officer.dm @@ -76,7 +76,7 @@ shoes = /obj/item/clothing/shoes/laceup head = /obj/item/clothing/head/beret/black/bridge_officer id_trim = /datum/id_trim/job/bridge_officer - box = /obj/item/storage/box/survival + box = /obj/item/storage/pouch/survival backpack_contents = list(/obj/item/melee/baton/telescopic = 1, /obj/item/gun/energy/disabler = 1) diff --git a/maplestation_modules/code/modules/jobs/job_types/noble_ambassador.dm b/maplestation_modules/code/modules/jobs/job_types/noble_ambassador.dm index 343136b18212..4cb8e591a3d2 100644 --- a/maplestation_modules/code/modules/jobs/job_types/noble_ambassador.dm +++ b/maplestation_modules/code/modules/jobs/job_types/noble_ambassador.dm @@ -64,7 +64,7 @@ suit = /obj/item/clothing/suit/toggle/noble shoes = /obj/item/clothing/shoes/noble id_trim = /datum/id_trim/job/noble_ambassador - box = /obj/item/storage/box/survival + box = /obj/item/storage/pouch/survival backpack_contents = list(/obj/item/melee/baton/telescopic = 1) diff --git a/maplestation_modules/icons/mob/storage/pouch.dmi b/maplestation_modules/icons/mob/storage/pouch.dmi new file mode 100644 index 000000000000..38a7b26cb5f6 Binary files /dev/null and b/maplestation_modules/icons/mob/storage/pouch.dmi differ diff --git a/maplestation_modules/icons/mob/storage/pouch_mirror.dmi b/maplestation_modules/icons/mob/storage/pouch_mirror.dmi new file mode 100644 index 000000000000..7cfe7676c4ac Binary files /dev/null and b/maplestation_modules/icons/mob/storage/pouch_mirror.dmi differ diff --git a/maplestation_modules/icons/obj/storage/pouch.dmi b/maplestation_modules/icons/obj/storage/pouch.dmi new file mode 100644 index 000000000000..10c6fe34630b Binary files /dev/null and b/maplestation_modules/icons/obj/storage/pouch.dmi differ