diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index 49941fe5c4a..650dc560a4a 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -66,13 +66,6 @@ #define COMSIG_CARBON_GAIN_ORGAN "carbon_gain_organ" ///from /item/organ/proc/Remove() (/obj/item/organ/) #define COMSIG_CARBON_LOSE_ORGAN "carbon_lose_organ" -///from /mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop, silent) -#define COMSIG_CARBON_EQUIP_HAT "carbon_equip_hat" -///from /mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop, silent) -#define COMSIG_CARBON_UNEQUIP_HAT "carbon_unequip_hat" -///from /mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop, silent) -#define COMSIG_CARBON_UNEQUIP_SHOECOVER "carbon_unequip_shoecover" -#define COMSIG_CARBON_EQUIP_SHOECOVER "carbon_equip_shoecover" ///Called when someone attempts to cuff a carbon #define COMSIG_CARBON_CUFF_ATTEMPTED "carbon_attempt_cuff" #define COMSIG_CARBON_CUFF_PREVENT (1<<0) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 494d3cd7eb7..3ea039b52b8 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -51,23 +51,19 @@ #define ITEM_SLOT_NECK (1<<12) /// A character's hand slots #define ITEM_SLOT_HANDS (1<<13) -/// Inside of a character's backpack -#define ITEM_SLOT_BACKPACK (1<<14) /// Suit Storage slot -#define ITEM_SLOT_SUITSTORE (1<<15) +#define ITEM_SLOT_SUITSTORE (1<<14) /// Left Pocket slot -#define ITEM_SLOT_LPOCKET (1<<16) +#define ITEM_SLOT_LPOCKET (1<<15) /// Right Pocket slot -#define ITEM_SLOT_RPOCKET (1<<17) +#define ITEM_SLOT_RPOCKET (1<<16) /// Handcuff slot -#define ITEM_SLOT_HANDCUFFED (1<<18) +#define ITEM_SLOT_HANDCUFFED (1<<17) /// Legcuff slot (bolas, beartraps) -#define ITEM_SLOT_LEGCUFFED (1<<19) -/// Inside of a character's BELT......... -#define ITEM_SLOT_BELTPACK (1<<20) +#define ITEM_SLOT_LEGCUFFED (1<<18) /// Total amount of slots -#define SLOTS_AMT 20 // Keep this up to date! +#define SLOTS_AMT 19 // Keep this up to date! ///Inventory slots that can be blacklisted by a species from being equipped into DEFINE_BITFIELD(no_equip_flags, list( @@ -350,21 +346,22 @@ GLOBAL_LIST_INIT(tool_items, list( /obj/item/spess_knife, )) -/// String for items placed into the left pocket. +// Keys for equip_in_one_of_slots, if you add new ones update the assoc lists in equip_in_one_of_slots +/// Items placed into the left pocket. #define LOCATION_LPOCKET "in your left pocket" -/// String for items placed into the right pocket +/// Items placed into the right pocket #define LOCATION_RPOCKET "in your right pocket" -/// String for items placed into the backpack. +/// Items placed into the backpack. #define LOCATION_BACKPACK "in your backpack" -/// String for items placed into the hands. +/// Items placed into the hands. #define LOCATION_HANDS "in your hands" -/// String for items placed in the glove slot. +/// Items placed in the glove slot. #define LOCATION_GLOVES "on your hands" -/// String for items placed in the eye/glasses slot. +/// Items placed in the eye/glasses slot. #define LOCATION_EYES "covering your eyes" -/// String for items placed on the head/hat slot. +/// Items placed on the head/hat slot. #define LOCATION_HEAD "on your head" -/// String for items placed in the neck slot. +/// Items placed in the neck slot. #define LOCATION_NECK "around your neck" -/// String for items placed in the id slot +/// Items placed in the id slot #define LOCATION_ID "in your ID slot" diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index ee872c783f2..bd1caf851c5 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -769,10 +769,6 @@ GLOBAL_LIST_INIT(skin_tone_names, list( slot_strings += "hand" if(slot_flags & ITEM_SLOT_DEX_STORAGE) slot_strings += "dextrous storage" - if(slot_flags & ITEM_SLOT_BACKPACK) - slot_strings += "backpack" - if(slot_flags & ITEM_SLOT_BELTPACK) - slot_strings += "belt" // ? return slot_strings ///Returns the direction that the initiator and the target are facing diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 76add21d521..e97be33d6e5 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -853,10 +853,10 @@ SUBSYSTEM_DEF(job) var/paper = new /obj/item/folder/biscuit/confidential/spare_id_safe_code() var/list/slots = list( - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_BACKPACK, + LOCATION_HANDS, ) var/where = new_captain.equip_in_one_of_slots(paper, slots, FALSE, indirect_action = TRUE) || "at your feet" diff --git a/code/datums/components/anti_magic.dm b/code/datums/components/anti_magic.dm index e7d18f82081..a96ad73e93d 100644 --- a/code/datums/components/anti_magic.dm +++ b/code/datums/components/anti_magic.dm @@ -36,7 +36,7 @@ /datum/component/anti_magic/Initialize( antimagic_flags = MAGIC_RESISTANCE, charges = INFINITY, - inventory_flags = ~ITEM_SLOT_BACKPACK, // items in a backpack won't activate, anywhere else is fine + inventory_flags = ALL, datum/callback/drain_antimagic, datum/callback/expiration, ) diff --git a/code/datums/components/bloodysoles.dm b/code/datums/components/bloodysoles.dm index bc2efb11154..4ab1f7354b8 100644 --- a/code/datums/components/bloodysoles.dm +++ b/code/datums/components/bloodysoles.dm @@ -289,8 +289,8 @@ RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(on_clean)) RegisterSignal(parent, COMSIG_STEP_ON_BLOOD, PROC_REF(on_step_blood)) - RegisterSignal(parent, COMSIG_CARBON_UNEQUIP_SHOECOVER, PROC_REF(unequip_shoecover)) - RegisterSignal(parent, COMSIG_CARBON_EQUIP_SHOECOVER, PROC_REF(equip_shoecover)) + RegisterSignal(parent, COMSIG_MOB_EQUIPPED_ITEM, PROC_REF(unequip_shoecover)) + RegisterSignal(parent, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(equip_shoecover)) /datum/component/bloodysoles/feet/update_icon() if(!ishuman(wielder) || HAS_TRAIT(wielder, TRAIT_NO_BLOOD_OVERLAY)) @@ -321,16 +321,12 @@ return wielder.check_covered_slots() & ITEM_SLOT_FEET /datum/component/bloodysoles/feet/on_moved(datum/source, OldLoc, Dir, Forced) - if(wielder.num_legs < 2) - return - - ..() + if(wielder.num_legs >= 2) + return ..() /datum/component/bloodysoles/feet/on_step_blood(datum/source, obj/effect/decal/cleanable/pool) - if(wielder.num_legs < 2) - return - - ..() + if(wielder.num_legs >= 2) + return ..() /datum/component/bloodysoles/feet/share_blood(obj/effect/decal/cleanable/pool) . = ..() @@ -340,14 +336,14 @@ bloody_feet.color = get_blood_dna_color(GET_ATOM_BLOOD_DNA(pool)) update_icon() -/datum/component/bloodysoles/feet/proc/unequip_shoecover(datum/source) +/datum/component/bloodysoles/feet/proc/equip_shoecover(datum/source, obj/item/item) SIGNAL_HANDLER + if ((item.body_parts_covered & FEET) || (item.flags_inv & HIDESHOES)) + update_icon() - update_icon() - -/datum/component/bloodysoles/feet/proc/equip_shoecover(datum/source) +/datum/component/bloodysoles/feet/proc/unequip_shoecover(datum/source, obj/item/item) SIGNAL_HANDLER - - update_icon() + if ((item.body_parts_covered & FEET) || (item.flags_inv & HIDESHOES)) + update_icon() #undef BLOOD_PERCENT_LOSS_ON_STEP diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index c4393f0ae0d..62d82be374e 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -263,7 +263,7 @@ if(!isnum(number))//Default to 1 number = 1 for(var/i in 1 to number) - EQUIP_OUTFIT_ITEM(path, ITEM_SLOT_BACKPACK) + user.equip_to_storage(SSwardrobe.provide_type(path, user), ITEM_SLOT_BACK, indirect_action = TRUE, del_on_fail = TRUE) if(belt_contents) for(var/path in belt_contents) @@ -271,7 +271,7 @@ if(!isnum(number))//Default to 1 number = 1 for(var/i in 1 to number) - EQUIP_OUTFIT_ITEM(path, ITEM_SLOT_BELTPACK) + user.equip_to_storage(SSwardrobe.provide_type(path, user), ITEM_SLOT_BELT, indirect_action = TRUE, del_on_fail = TRUE) post_equip(user, visuals_only) diff --git a/code/datums/quirks/_quirk.dm b/code/datums/quirks/_quirk.dm index 9529cf2befe..7a69d9102e5 100644 --- a/code/datums/quirks/_quirk.dm +++ b/code/datums/quirks/_quirk.dm @@ -217,7 +217,7 @@ * If no valid slot is available for an item, the item is left at the mob's feet. * Arguments: * * quirk_item - The item to give to the quirk holder. If the item is a path, the item will be spawned in first on the player's turf. - * * valid_slots - Assoc list of descriptive location strings to item slots that is fed into [/mob/living/carbon/proc/equip_in_one_of_slots]. list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK) + * * valid_slots - List of LOCATION_X that is fed into [/mob/living/carbon/proc/equip_in_one_of_slots]. * * flavour_text - Optional flavour text to append to the where_items_spawned string after the item's location. * * default_location - If the item isn't possible to equip in a valid slot, this is a description of where the item was spawned. * * notify_player - If TRUE, adds strings to where_items_spawned list to be output to the player in [/datum/quirk/item_quirk/post_add()] diff --git a/code/datums/quirks/negative_quirks/addict.dm b/code/datums/quirks/negative_quirks/addict.dm index e19b8f69bf9..f943ea9bb94 100644 --- a/code/datums/quirks/negative_quirks/addict.dm +++ b/code/datums/quirks/negative_quirks/addict.dm @@ -43,10 +43,10 @@ give_item_to_holder( drug_instance, list( - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_BACKPACK, + LOCATION_HANDS, ), flavour_text = drug_flavour_text, ) @@ -55,10 +55,10 @@ give_item_to_holder( accessory_type, list( - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_BACKPACK, + LOCATION_HANDS, ) ) diff --git a/code/datums/quirks/negative_quirks/allergic.dm b/code/datums/quirks/negative_quirks/allergic.dm index 43bee117c40..3dfb09c88b8 100644 --- a/code/datums/quirks/negative_quirks/allergic.dm +++ b/code/datums/quirks/negative_quirks/allergic.dm @@ -39,7 +39,7 @@ var/mob/living/carbon/human/human_holder = quirk_holder var/obj/item/clothing/accessory/dogtag/allergy/dogtag = new(get_turf(human_holder), allergy_string) - give_item_to_holder(dogtag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS), flavour_text = "Make sure medical staff can see this...") + give_item_to_holder(dogtag, list(LOCATION_BACKPACK, LOCATION_HANDS), flavour_text = "Make sure medical staff can see this...") /datum/quirk/item_quirk/allergic/post_add() quirk_holder.add_mob_memory(/datum/memory/key/quirk_allergy, allergy_string = allergy_string) diff --git a/code/datums/quirks/negative_quirks/blindness.dm b/code/datums/quirks/negative_quirks/blindness.dm index 54a4f154474..8dafede1fe1 100644 --- a/code/datums/quirks/negative_quirks/blindness.dm +++ b/code/datums/quirks/negative_quirks/blindness.dm @@ -18,7 +18,7 @@ var/obj/item/clothing/glasses/blindfold/white/blindfold = new blindfold.add_atom_colour(client_source?.prefs.read_preference(/datum/preference/color/blindfold_color), FIXED_COLOUR_PRIORITY) blindfold.colored_before = TRUE - give_item_to_holder(blindfold, list(LOCATION_EYES = ITEM_SLOT_EYES, LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(blindfold, list(LOCATION_EYES, LOCATION_HANDS)) /datum/quirk/item_quirk/blindness/add(client/client_source) quirk_holder.become_blind(QUIRK_TRAIT) diff --git a/code/datums/quirks/negative_quirks/brain_problems.dm b/code/datums/quirks/negative_quirks/brain_problems.dm index 448835009cd..f3ccf938e2b 100644 --- a/code/datums/quirks/negative_quirks/brain_problems.dm +++ b/code/datums/quirks/negative_quirks/brain_problems.dm @@ -20,10 +20,10 @@ give_item_to_holder( /obj/item/storage/pill_bottle/mannitol/braintumor, list( - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_BACKPACK, + LOCATION_HANDS, ), flavour_text = "These will keep you alive until you can secure a supply of medication. Don't rely on them too much!", ) diff --git a/code/datums/quirks/negative_quirks/chronic_illness.dm b/code/datums/quirks/negative_quirks/chronic_illness.dm index 04a676965db..567db2f4029 100644 --- a/code/datums/quirks/negative_quirks/chronic_illness.dm +++ b/code/datums/quirks/negative_quirks/chronic_illness.dm @@ -14,5 +14,5 @@ quirk_holder.ForceContractDisease(hms) /datum/quirk/item_quirk/chronic_illness/add_unique(client/client_source) - give_item_to_holder(/obj/item/storage/pill_bottle/sansufentanyl, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK),flavour_text = "You've been provided with medication to help manage your condition. Take it regularly to avoid complications.") - give_item_to_holder(/obj/item/healthanalyzer/simple/disease, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK)) + give_item_to_holder(/obj/item/storage/pill_bottle/sansufentanyl, list(LOCATION_BACKPACK), flavour_text = "You've been provided with medication to help manage your condition. Take it regularly to avoid complications.") + give_item_to_holder(/obj/item/healthanalyzer/simple/disease, list(LOCATION_BACKPACK)) diff --git a/code/datums/quirks/negative_quirks/deafness.dm b/code/datums/quirks/negative_quirks/deafness.dm index 077bbe72aa5..01fcd5c8298 100644 --- a/code/datums/quirks/negative_quirks/deafness.dm +++ b/code/datums/quirks/negative_quirks/deafness.dm @@ -11,4 +11,4 @@ mail_goodies = list(/obj/item/clothing/mask/whistle) /datum/quirk/item_quirk/deafness/add_unique(client/client_source) - give_item_to_holder(/obj/item/clothing/accessory/deaf_pin, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(/obj/item/clothing/accessory/deaf_pin, list(LOCATION_BACKPACK, LOCATION_HANDS)) diff --git a/code/datums/quirks/negative_quirks/family_heirloom.dm b/code/datums/quirks/negative_quirks/family_heirloom.dm index d7b2755088a..b1a92999514 100644 --- a/code/datums/quirks/negative_quirks/family_heirloom.dm +++ b/code/datums/quirks/negative_quirks/family_heirloom.dm @@ -34,10 +34,10 @@ give_item_to_holder( new_heirloom, list( - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_BACKPACK, + LOCATION_HANDS, ), flavour_text = "This is a precious family heirloom, passed down from generation to generation. Keep it safe!", ) diff --git a/code/datums/quirks/negative_quirks/fluoride_stare.dm b/code/datums/quirks/negative_quirks/fluoride_stare.dm index 8c2074bbf31..1bd2dd91acf 100644 --- a/code/datums/quirks/negative_quirks/fluoride_stare.dm +++ b/code/datums/quirks/negative_quirks/fluoride_stare.dm @@ -13,17 +13,17 @@ /datum/quirk/item_quirk/fluoride_stare/add_unique(client/client_source) var/obj/item/reagent_containers/cup/bottle/salglu_solution/saline = new(get_turf(quirk_holder)) give_item_to_holder(saline, list( - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_BACKPACK, + LOCATION_HANDS, )) var/obj/item/reagent_containers/dropper/dropper = new(get_turf(quirk_holder)) give_item_to_holder(dropper, list( - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_BACKPACK, + LOCATION_HANDS, )) /datum/quirk/item_quirk/fluoride_stare/add(client/client_source) diff --git a/code/datums/quirks/negative_quirks/food_allergy.dm b/code/datums/quirks/negative_quirks/food_allergy.dm index 0b81dece085..ccf60839d77 100644 --- a/code/datums/quirks/negative_quirks/food_allergy.dm +++ b/code/datums/quirks/negative_quirks/food_allergy.dm @@ -46,4 +46,4 @@ GLOBAL_LIST_INIT(possible_food_allergies, list( to_chat(client_source.mob, span_info("You are allergic to [what_are_we_actually_killed_by]. Watch what you eat!")) var/obj/item/clothing/accessory/dogtag/allergy/dogtag = new(quirk_holder, what_are_we_actually_killed_by) - give_item_to_holder(dogtag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS), flavour_text = "Keep it close around the kitchen.") + give_item_to_holder(dogtag, list(LOCATION_BACKPACK, LOCATION_HANDS), flavour_text = "Keep it close around the kitchen.") diff --git a/code/datums/quirks/negative_quirks/nearsighted.dm b/code/datums/quirks/negative_quirks/nearsighted.dm index 452971a7ad0..a9e945861d7 100644 --- a/code/datums/quirks/negative_quirks/nearsighted.dm +++ b/code/datums/quirks/negative_quirks/nearsighted.dm @@ -22,9 +22,9 @@ glasses_type = GLOB.nearsighted_glasses[glasses_name] give_item_to_holder(glasses_type, list( - LOCATION_EYES = ITEM_SLOT_EYES, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_EYES, + LOCATION_BACKPACK, + LOCATION_HANDS, )) /datum/quirk/item_quirk/nearsighted/add(client/client_source) diff --git a/code/datums/quirks/negative_quirks/scarred_eye.dm b/code/datums/quirks/negative_quirks/scarred_eye.dm index 11b3f16f8aa..3bead4bb248 100644 --- a/code/datums/quirks/negative_quirks/scarred_eye.dm +++ b/code/datums/quirks/negative_quirks/scarred_eye.dm @@ -17,9 +17,9 @@ /datum/quirk/item_quirk/scarred_eye/add_unique(client/client_source) if (client_source?.prefs.read_preference(/datum/preference/choiced/scarred_eye) == "Double") give_item_to_holder(new /obj/item/clothing/glasses/blindfold/white(get_turf(quirk_holder)), list( - LOCATION_EYES = ITEM_SLOT_EYES, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_EYES, + LOCATION_BACKPACK, + LOCATION_HANDS, )) return @@ -28,9 +28,9 @@ if (human_holder.get_eye_scars() & LEFT_EYE_SCAR) eyepatch.flip_eyepatch() give_item_to_holder(eyepatch, list( - LOCATION_EYES = ITEM_SLOT_EYES, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_EYES, + LOCATION_BACKPACK, + LOCATION_HANDS, )) /datum/quirk/item_quirk/scarred_eye/add(client/client_source) diff --git a/code/datums/quirks/neutral_quirks/bald.dm b/code/datums/quirks/neutral_quirks/bald.dm index f08f2e8cc13..89b5c03d5a5 100644 --- a/code/datums/quirks/neutral_quirks/bald.dm +++ b/code/datums/quirks/neutral_quirks/bald.dm @@ -16,8 +16,8 @@ var/mob/living/carbon/human/human_holder = quirk_holder old_hair = human_holder.hairstyle human_holder.set_hairstyle("Bald", update = TRUE) - RegisterSignal(human_holder, COMSIG_CARBON_EQUIP_HAT, PROC_REF(equip_hat)) - RegisterSignal(human_holder, COMSIG_CARBON_UNEQUIP_HAT, PROC_REF(unequip_hat)) + RegisterSignal(human_holder, COMSIG_MOB_EQUIPPED_ITEM, PROC_REF(equip_hat)) + RegisterSignal(human_holder, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(unequip_hat)) /datum/quirk/item_quirk/bald/add_unique(client/client_source) var/obj/item/clothing/head/wig/natural/baldie_wig = new(get_turf(quirk_holder)) @@ -28,7 +28,7 @@ baldie_wig.update_appearance() - give_item_to_holder(baldie_wig, list(LOCATION_HEAD = ITEM_SLOT_HEAD, LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS), notify_player = FALSE) + give_item_to_holder(baldie_wig, list(LOCATION_HEAD, LOCATION_BACKPACK, LOCATION_HANDS), notify_player = FALSE) /datum/quirk/item_quirk/bald/give_item_to_holder(obj/item/quirk_item, list/valid_slots, flavour_text = null, default_location = "at your feet", notify_player = TRUE) var/any_head = FALSE @@ -69,20 +69,24 @@ var/mob/living/carbon/human/human_holder = quirk_holder if(human_holder.hairstyle == "Bald" && old_hair != "Bald") human_holder.set_hairstyle(old_hair, update = TRUE) - UnregisterSignal(human_holder, list(COMSIG_CARBON_EQUIP_HAT, COMSIG_CARBON_UNEQUIP_HAT)) + UnregisterSignal(human_holder, list(COMSIG_MOB_EQUIPPED_ITEM, COMSIG_MOB_UNEQUIPPED_ITEM)) human_holder.clear_mood_event("bad_hair_day") ///Checks if the headgear equipped is a wig and sets the mood event accordingly -/datum/quirk/item_quirk/bald/proc/equip_hat(mob/user, obj/item/hat) +/datum/quirk/item_quirk/bald/proc/equip_hat(mob/user, obj/item/possible_hat, slot) SIGNAL_HANDLER - if(istype(hat, /obj/item/clothing/head/wig)) + if (!(slot & ITEM_SLOT_HEAD)) + return + + if(istype(possible_hat, /obj/item/clothing/head/wig)) quirk_holder.add_mood_event("bad_hair_day", /datum/mood_event/confident_mane) //Our head is covered, but also by a wig so we're happy. else quirk_holder.clear_mood_event("bad_hair_day") //Our head is covered ///Applies a bad moodlet for having an uncovered head -/datum/quirk/item_quirk/bald/proc/unequip_hat(mob/user, obj/item/clothing, force, newloc, no_move, invdrop, silent) +/datum/quirk/item_quirk/bald/proc/unequip_hat(mob/user, obj/item/possible_hat, old_slot, force, newloc, no_move, invdrop, silent) SIGNAL_HANDLER - quirk_holder.add_mood_event("bad_hair_day", /datum/mood_event/bald) + if (old_slot & ITEM_SLOT_HEAD) + quirk_holder.add_mood_event("bad_hair_day", /datum/mood_event/bald) diff --git a/code/datums/quirks/neutral_quirks/borg_ready.dm b/code/datums/quirks/neutral_quirks/borg_ready.dm index f623dd47de0..031e2659d57 100644 --- a/code/datums/quirks/neutral_quirks/borg_ready.dm +++ b/code/datums/quirks/neutral_quirks/borg_ready.dm @@ -11,4 +11,4 @@ if(is_banned_from(client_source.ckey, JOB_CYBORG)) return FALSE var/obj/item/clothing/accessory/dogtag/borg_ready/borgtag = new(get_turf(quirk_holder)) - give_item_to_holder(borgtag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(borgtag, list(LOCATION_BACKPACK, LOCATION_HANDS)) diff --git a/code/datums/quirks/neutral_quirks/photographer.dm b/code/datums/quirks/neutral_quirks/photographer.dm index d2284df240c..85e063c35ae 100644 --- a/code/datums/quirks/neutral_quirks/photographer.dm +++ b/code/datums/quirks/neutral_quirks/photographer.dm @@ -16,14 +16,14 @@ photo_album.persistence_load() photo_album.name = "[human_holder.real_name]'s photo album" - give_item_to_holder(photo_album, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(photo_album, list(LOCATION_BACKPACK, LOCATION_HANDS)) give_item_to_holder( /obj/item/camera, list( - LOCATION_NECK = ITEM_SLOT_NECK, - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS + LOCATION_NECK, + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_BACKPACK, + LOCATION_HANDS ) ) diff --git a/code/datums/quirks/positive_quirks/clown_enjoyer.dm b/code/datums/quirks/positive_quirks/clown_enjoyer.dm index 984b0f7a6e4..79dd6e0c6bf 100644 --- a/code/datums/quirks/positive_quirks/clown_enjoyer.dm +++ b/code/datums/quirks/positive_quirks/clown_enjoyer.dm @@ -24,7 +24,7 @@ ) /datum/quirk/item_quirk/clown_enjoyer/add_unique(client/client_source) - give_item_to_holder(/obj/item/clothing/accessory/clown_enjoyer_pin, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(/obj/item/clothing/accessory/clown_enjoyer_pin, list(LOCATION_BACKPACK, LOCATION_HANDS)) /datum/quirk/item_quirk/clown_enjoyer/add(client/client_source) var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN] diff --git a/code/datums/quirks/positive_quirks/mime_fan.dm b/code/datums/quirks/positive_quirks/mime_fan.dm index 5145b4a2240..fea99220259 100644 --- a/code/datums/quirks/positive_quirks/mime_fan.dm +++ b/code/datums/quirks/positive_quirks/mime_fan.dm @@ -22,7 +22,7 @@ ) /datum/quirk/item_quirk/mime_fan/add_unique(client/client_source) - give_item_to_holder(/obj/item/clothing/accessory/mime_fan_pin, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(/obj/item/clothing/accessory/mime_fan_pin, list(LOCATION_BACKPACK, LOCATION_HANDS)) /datum/quirk/item_quirk/mime_fan/add(client/client_source) var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN] diff --git a/code/datums/quirks/positive_quirks/musician.dm b/code/datums/quirks/positive_quirks/musician.dm index 9d5e10f5f82..5d0078a18f1 100644 --- a/code/datums/quirks/positive_quirks/musician.dm +++ b/code/datums/quirks/positive_quirks/musician.dm @@ -10,4 +10,4 @@ mail_goodies = list(/obj/effect/spawner/random/entertainment/musical_instrument, /obj/item/instrument/piano_synth/headphones) /datum/quirk/item_quirk/musician/add_unique(client/client_source) - give_item_to_holder(/obj/item/choice_beacon/music, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(/obj/item/choice_beacon/music, list(LOCATION_BACKPACK, LOCATION_HANDS)) diff --git a/code/datums/quirks/positive_quirks/poster_boy.dm b/code/datums/quirks/positive_quirks/poster_boy.dm index 4991ebc540b..ba6b9fe19ac 100644 --- a/code/datums/quirks/positive_quirks/poster_boy.dm +++ b/code/datums/quirks/positive_quirks/poster_boy.dm @@ -11,7 +11,7 @@ var/mob/living/carbon/human/posterboy = quirk_holder var/obj/item/storage/box/posterbox/newbox = new() newbox.add_quirk_posters(posterboy.mind) - give_item_to_holder(newbox, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(newbox, list(LOCATION_BACKPACK, LOCATION_HANDS)) /obj/item/storage/box/posterbox name = "Box of Posters" diff --git a/code/datums/quirks/positive_quirks/settler.dm b/code/datums/quirks/positive_quirks/settler.dm index 7164819e1c5..d86190d3fe1 100644 --- a/code/datums/quirks/positive_quirks/settler.dm +++ b/code/datums/quirks/positive_quirks/settler.dm @@ -34,8 +34,8 @@ human_quirkholder.add_traits(settler_traits, QUIRK_TRAIT) /datum/quirk/item_quirk/settler/add_unique(client/client_source) - give_item_to_holder(/obj/item/storage/box/papersack/wheat, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) - give_item_to_holder(/obj/item/storage/toolbox/fishing/small, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(/obj/item/storage/box/papersack/wheat, list(LOCATION_BACKPACK, LOCATION_HANDS)) + give_item_to_holder(/obj/item/storage/toolbox/fishing/small, list(LOCATION_BACKPACK, LOCATION_HANDS)) /datum/quirk/item_quirk/settler/remove() if(QDELING(quirk_holder)) diff --git a/code/datums/quirks/positive_quirks/signer.dm b/code/datums/quirks/positive_quirks/signer.dm index 9e354ec7149..0a7c1c38016 100644 --- a/code/datums/quirks/positive_quirks/signer.dm +++ b/code/datums/quirks/positive_quirks/signer.dm @@ -14,7 +14,7 @@ var/obj/item/clothing/gloves/gloves_type = /obj/item/clothing/gloves/radio if(isplasmaman(quirk_holder)) gloves_type = /obj/item/clothing/gloves/color/plasmaman/radio - give_item_to_holder(gloves_type, list(LOCATION_GLOVES = ITEM_SLOT_GLOVES, LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(gloves_type, list(LOCATION_GLOVES, LOCATION_HANDS)) /datum/quirk/item_quirk/signer/remove() qdel(quirk_holder.GetComponent(/datum/component/sign_language)) diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm index a33f46aae56..13165603f48 100644 --- a/code/datums/quirks/positive_quirks/spacer.dm +++ b/code/datums/quirks/positive_quirks/spacer.dm @@ -64,7 +64,7 @@ // Supply them with some patches to help out on their new assignment var/obj/item/storage/pill_bottle/ondansetron/disgust_killers = new() disgust_killers.desc += " Best to take one when travelling to a planet's surface." - if(quirk_holder.equip_to_slot_if_possible(disgust_killers, ITEM_SLOT_BACKPACK, qdel_on_fail = TRUE, initial = TRUE, indirect_action = TRUE)) + if(quirk_holder.equip_to_storage(disgust_killers, ITEM_SLOT_BACK, indirect_action = TRUE, del_on_fail = TRUE)) to_chat(quirk_holder, span_info("You have[isnull(spacer_account) ? " " : " also "]been given some anti-emetic patches to assist in adjusting to planetary gravity.")) /datum/quirk/spacer_born/remove() diff --git a/code/datums/quirks/positive_quirks/spiritual.dm b/code/datums/quirks/positive_quirks/spiritual.dm index b08fe8b60c6..0552a5c3883 100644 --- a/code/datums/quirks/positive_quirks/spiritual.dm +++ b/code/datums/quirks/positive_quirks/spiritual.dm @@ -16,5 +16,5 @@ ) /datum/quirk/item_quirk/spiritual/add_unique(client/client_source) - give_item_to_holder(/obj/item/storage/fancy/candle_box, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) - give_item_to_holder(/obj/item/storage/box/matches, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(/obj/item/storage/fancy/candle_box, list(LOCATION_BACKPACK, LOCATION_HANDS)) + give_item_to_holder(/obj/item/storage/box/matches, list(LOCATION_BACKPACK, LOCATION_HANDS)) diff --git a/code/datums/quirks/positive_quirks/tagger.dm b/code/datums/quirks/positive_quirks/tagger.dm index c2640081a6d..ff3568fe854 100644 --- a/code/datums/quirks/positive_quirks/tagger.dm +++ b/code/datums/quirks/positive_quirks/tagger.dm @@ -21,4 +21,4 @@ /datum/quirk/item_quirk/tagger/add_unique(client/client_source) var/obj/item/toy/crayon/spraycan/can = new can.set_painting_tool_color(client_source?.prefs.read_preference(/datum/preference/color/paint_color)) - give_item_to_holder(can, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(can, list(LOCATION_BACKPACK, LOCATION_HANDS)) diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index 7fa13d5f534..8d785c7e0a1 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -234,7 +234,7 @@ )) hat = new hat(spawned_mob) if(!spawned_mob.equip_to_slot_if_possible(hat, ITEM_SLOT_HEAD, disable_warning = TRUE)) - spawned_mob.equip_to_slot_or_del(hat, ITEM_SLOT_BACKPACK, indirect_action = TRUE) + spawned_mob.equip_to_storage(hat, ITEM_SLOT_BACK, indirect_action = TRUE) var/obj/item/toy = pick_weight(list( /obj/item/reagent_containers/spray/chemsprayer/party = 4, /obj/item/toy/balloon = 2, @@ -246,12 +246,12 @@ if(istype(toy, /obj/item/toy/balloon)) spawned_mob.equip_to_slot_or_del(toy, ITEM_SLOT_HANDS) //Balloons do not fit inside of backpacks. else - spawned_mob.equip_to_slot_or_del(toy, ITEM_SLOT_BACKPACK, indirect_action = TRUE) + spawned_mob.equip_to_storage(toy, ITEM_SLOT_BACK, indirect_action = TRUE) if(birthday_person_name) //Anyone who joins after the annoucement gets one of these. var/obj/item/birthday_invite/birthday_invite = new(spawned_mob) birthday_invite.setup_card(birthday_person_name) if(!spawned_mob.equip_to_slot_if_possible(birthday_invite, ITEM_SLOT_HANDS, disable_warning = TRUE)) - spawned_mob.equip_to_slot_or_del(birthday_invite, ITEM_SLOT_BACKPACK) //Just incase someone spawns with both hands full. + spawned_mob.equip_to_storage(birthday_invite, ITEM_SLOT_BACK, indirect_action = TRUE) //Just incase someone spawns with both hands full. /obj/item/birthday_invite name = "birthday invitation" @@ -311,9 +311,10 @@ // Put their silly little scarf or necktie somewhere else var/obj/item/silly_little_scarf = humanspawned.wear_neck if(silly_little_scarf) + var/list/backup_slots = list(LOCATION_LPOCKET, LOCATION_RPOCKET, LOCATION_BACKPACK) humanspawned.temporarilyRemoveItemFromInventory(silly_little_scarf) silly_little_scarf.forceMove(get_turf(humanspawned)) - humanspawned.equip_in_one_of_slots(silly_little_scarf, ITEM_SLOT_BACKPACK, ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET, qdel_on_fail = FALSE, indirect_action = TRUE) + humanspawned.equip_in_one_of_slots(silly_little_scarf, backup_slots, qdel_on_fail = FALSE) var/obj/item/clothing/neck/link_scryer/loaded/new_scryer = new(spawned) new_scryer.label = spawned.name @@ -477,7 +478,7 @@ if((skub_stance == RANDOM_SKUB && prob(50)) || skub_stance == PRO_SKUB) var/obj/item/storage/box/stickers/skub/boxie = new(spawned.loc) - spawned.equip_to_slot_if_possible(boxie, ITEM_SLOT_BACKPACK, indirect_action = TRUE) + spawned.equip_to_storage(boxie, ITEM_SLOT_BACK, indirect_action = TRUE) if(ishuman(spawned)) var/obj/item/clothing/suit/costume/wellworn_shirt/skub/shirt = new(spawned.loc) if(!spawned.equip_to_slot_if_possible(shirt, ITEM_SLOT_OCLOTHING, indirect_action = TRUE)) @@ -485,7 +486,7 @@ return var/obj/item/storage/box/stickers/anti_skub/boxie = new(spawned.loc) - spawned.equip_to_slot_if_possible(boxie, ITEM_SLOT_BACKPACK, indirect_action = TRUE) + spawned.equip_to_storage(boxie, ITEM_SLOT_BACK, indirect_action = TRUE) if(!ishuman(spawned)) return var/obj/item/clothing/suit/costume/wellworn_shirt/skub/anti/shirt = new(spawned.loc) diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index 583bac0a9f4..32a91bf609c 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -460,7 +460,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) * Arguments * * obj/item/to_insert - the item we're inserting * * mob/user - (optional) the user who is inserting the item. - * * override - see item_insertion_feedback() + * * override - skip feedback, only do the animation * * force - bypass locked storage up to a certain level. See [code/__DEFINES/storage.dm] * * messages - if TRUE, we will create balloon alerts for the user. */ diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index ad95dffd120..bc8bed1340a 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -190,16 +190,16 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION /datum/objective/proc/give_special_equipment(special_equipment) var/datum/mind/receiver = pick(get_owners()) - if(receiver?.current) - if(ishuman(receiver.current)) - var/mob/living/carbon/human/receiver_current = receiver.current - var/list/slots = list("backpack" = ITEM_SLOT_BACKPACK) - for(var/obj/equipment_path as anything in special_equipment) - var/obj/equipment_object = new equipment_path - if(!receiver_current.equip_in_one_of_slots(equipment_object, slots, indirect_action = TRUE)) - LAZYINITLIST(receiver.failed_special_equipment) - receiver.failed_special_equipment += equipment_path - receiver.try_give_equipment_fallback() + if(!ishuman(receiver?.current)) + return + var/mob/living/carbon/human/receiver_current = receiver.current + for(var/obj/equipment_path as anything in special_equipment) + var/obj/equipment_object = new equipment_path + if(receiver_current.equip_to_storage(equipment_object, ITEM_SLOT_BACK, indirect_action = TRUE)) + continue + LAZYINITLIST(receiver.failed_special_equipment) + receiver.failed_special_equipment += equipment_path + receiver.try_give_equipment_fallback() /datum/action/special_equipment_fallback name = "Request Objective-specific Equipment" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index eb374c6bb39..c4be7baa14f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -807,7 +807,9 @@ /// Sometimes we only want to grant the item's action if it's equipped in a specific slot. /obj/item/proc/item_action_slot_check(slot, mob/user, datum/action/action) - if(slot & (ITEM_SLOT_BACKPACK|ITEM_SLOT_LEGCUFFED)) //these aren't true slots, so avoid granting actions there + if(!slot) // Equipped into storage + return FALSE + if(slot & (ITEM_SLOT_HANDCUFFED|ITEM_SLOT_LEGCUFFED)) // These aren't true slots, so avoid granting actions there return FALSE if(!isnull(action_slots)) return (slot & action_slots) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 119ba863017..eb6a6c0eb4c 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -174,7 +174,7 @@ /obj/item/card/id/equipped(mob/user, slot) . = ..() - if (slot == ITEM_SLOT_ID) + if (slot & ITEM_SLOT_ID) RegisterSignal(user, COMSIG_MOVABLE_POINTED, PROC_REF(on_pointed)) /obj/item/card/id/dropped(mob/user) diff --git a/code/game/objects/items/devices/mulligan_kit.dm b/code/game/objects/items/devices/mulligan_kit.dm index 2f1cb2b8972..0363a028b00 100644 --- a/code/game/objects/items/devices/mulligan_kit.dm +++ b/code/game/objects/items/devices/mulligan_kit.dm @@ -47,11 +47,11 @@ fake_id.update_icon() var/placed_in = user.equip_in_one_of_slots(fake_id, list( - LOCATION_ID = ITEM_SLOT_ID, - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_ID, + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_BACKPACK, + LOCATION_HANDS, ), qdel_on_fail = FALSE, indirect_action = TRUE) if (isnull(placed_in)) fake_id.forceMove(user.drop_location()) @@ -73,10 +73,10 @@ if (original_id) var/returned_to = user.equip_in_one_of_slots(original_id, list( - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_HANDS = ITEM_SLOT_HANDS, + LOCATION_BACKPACK, + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_HANDS, ), qdel_on_fail = FALSE, indirect_action = TRUE) if (isnull(returned_to)) fake_id.forceMove(user.drop_location()) diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm index 8ae742d9749..416e5669b1a 100644 --- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm @@ -213,11 +213,11 @@ lunatic.set_master(user.mind, user) var/obj/item/clothing/neck/heretic_focus/moon_amulet/amulet = new(crewmate.drop_location()) var/static/list/slots = list( - "neck" = ITEM_SLOT_NECK, - "hands" = ITEM_SLOT_HANDS, - "backpack" = ITEM_SLOT_BACKPACK, - "right pocket" = ITEM_SLOT_RPOCKET, - "left pocket" = ITEM_SLOT_RPOCKET, + LOCATION_NECK, + LOCATION_HANDS, + LOCATION_RPOCKET, + LOCATION_LPOCKET, + LOCATION_BACKPACK, ) crewmate.equip_in_one_of_slots(amulet, slots, qdel_on_fail = FALSE) crewmate.emote("laugh") diff --git a/code/modules/antagonists/nukeop/outfits.dm b/code/modules/antagonists/nukeop/outfits.dm index 9ecfbb9f991..690c3d7453a 100644 --- a/code/modules/antagonists/nukeop/outfits.dm +++ b/code/modules/antagonists/nukeop/outfits.dm @@ -54,7 +54,7 @@ radio.use_command = TRUE if(ispath(uplink_type, /obj/item/uplink) || tc) // /obj/item/uplink understands 0 tc var/obj/item/uplink = new uplink_type(nukie, nukie.key, tc) - nukie.equip_to_slot_or_del(uplink, ITEM_SLOT_BACKPACK, indirect_action = TRUE) + nukie.equip_to_storage(uplink, ITEM_SLOT_BACK, indirect_action = TRUE, del_on_fail = TRUE) var/obj/item/implant/weapons_auth/weapons_implant = new/obj/item/implant/weapons_auth(nukie) weapons_implant.implant(nukie) diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index fb618cd831b..740944dd987 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -27,7 +27,7 @@ /datum/outfit/vr/syndicate/post_equip(mob/living/carbon/human/H) . = ..() var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, H.key, 80) - H.equip_to_slot_or_del(U, ITEM_SLOT_BACKPACK, indirect_action = TRUE) + H.equip_to_storage(U, ITEM_SLOT_BACK, indirect_action = TRUE, del_on_fail = TRUE) var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H) W.implant(H) var/obj/item/implant/explosive/E = new/obj/item/implant/explosive(H) diff --git a/code/modules/clothing/under/accessories/_accessories.dm b/code/modules/clothing/under/accessories/_accessories.dm index 56ebdb32ebb..60fcbf97e5c 100644 --- a/code/modules/clothing/under/accessories/_accessories.dm +++ b/code/modules/clothing/under/accessories/_accessories.dm @@ -158,10 +158,8 @@ /obj/item/clothing/accessory/proc/on_uniform_equipped(obj/item/clothing/under/source, mob/living/user, slot) SIGNAL_HANDLER - if(!(slot & source.slot_flags)) - return - - accessory_equipped(source, user) + if(slot & source.slot_flags) + accessory_equipped(source, user) /// Signal proc for [COMSIG_ITEM_DROPPED] on the uniform we're pinned to /obj/item/clothing/accessory/proc/on_uniform_dropped(obj/item/clothing/under/source, mob/living/user) diff --git a/code/modules/jobs/job_types/chaplain/chaplain.dm b/code/modules/jobs/job_types/chaplain/chaplain.dm index 435e4ce7b33..6de60d67004 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain.dm @@ -54,7 +54,7 @@ if(GLOB.bible_inhand_icon_state) holy_bible.inhand_icon_state = GLOB.bible_inhand_icon_state to_chat(human_spawned, span_boldnotice("There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.")) - human_spawned.equip_to_slot_or_del(holy_bible, ITEM_SLOT_BACKPACK, indirect_action = TRUE) + human_spawned.equip_to_storage(holy_bible, ITEM_SLOT_BACK, indirect_action = TRUE, del_on_fail = TRUE) var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod var/obj/item/nullrod/nullrod = new nrt(human_spawned) human_spawned.put_in_hands(nullrod) @@ -105,7 +105,7 @@ GLOB.bible_name = new_bible GLOB.deity = holy_bible.deity_name - human_spawned.equip_to_slot_or_del(holy_bible, ITEM_SLOT_BACKPACK, indirect_action = TRUE) + human_spawned.equip_to_storage(holy_bible, ITEM_SLOT_BACK, indirect_action = TRUE, del_on_fail = TRUE) SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1) SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1) diff --git a/code/modules/loadout/categories/pocket.dm b/code/modules/loadout/categories/pocket.dm index 59e0d5c9d08..db22d7e0765 100644 --- a/code/modules/loadout/categories/pocket.dm +++ b/code/modules/loadout/categories/pocket.dm @@ -309,20 +309,20 @@ return var/obj/item/storage/wallet/wallet = new(equipper) - if(istype(id_card)) - equipper.temporarilyRemoveItemFromInventory(id_card, force = TRUE) - equipper.equip_to_slot_if_possible(wallet, ITEM_SLOT_ID, initial = TRUE) - id_card.forceMove(wallet) - - for(var/obj/item/thing in equipper?.back) - // leaves a slot free for whatever they may want - if(length(wallet.contents) >= wallet.atom_storage.max_slots - 1) - break - if(thing.w_class > wallet.atom_storage.max_specific_storage) - continue - wallet.atom_storage.attempt_insert(thing, override = TRUE, force = STORAGE_FULLY_LOCKED, messages = FALSE) - - else + if(!istype(id_card)) // They must have a PDA or some other thing in their ID slot, abort - if(!equipper.equip_to_slot_if_possible(wallet, slot = ITEM_SLOT_BACKPACK, initial = TRUE)) + if(!equipper.equip_to_storage(wallet, ITEM_SLOT_BACK, indirect_action = TRUE)) wallet.forceMove(equipper.drop_location()) + return + + equipper.temporarilyRemoveItemFromInventory(id_card, force = TRUE) + equipper.equip_to_slot_if_possible(wallet, ITEM_SLOT_ID, initial = TRUE) + id_card.forceMove(wallet) + + for(var/obj/item/thing in equipper?.back) + // leaves a slot free for whatever they may want + if(length(wallet.contents) >= wallet.atom_storage.max_slots - 1) + break + if(thing.w_class > wallet.atom_storage.max_specific_storage) + continue + wallet.atom_storage.attempt_insert(thing, override = TRUE, force = STORAGE_FULLY_LOCKED, messages = FALSE) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index e96c6d1c5bd..b5807c261e9 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -478,6 +478,10 @@ /mob/proc/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) return +/// This proc is called after an item has been successfully handled and equipped to a slot. +/mob/proc/has_equipped(obj/item/item, slot, initial = FALSE) + return item.on_equipped(src, slot, initial) + /** * Equip an item to the slot or delete * @@ -540,22 +544,42 @@ if(user.active_storage?.attempt_insert(src, user, messages = FALSE)) return TRUE - var/list/obj/item/possible = list( - user.get_inactive_held_item(), - user.get_item_by_slot(ITEM_SLOT_BELT), - user.get_item_by_slot(ITEM_SLOT_DEX_STORAGE), - user.get_item_by_slot(ITEM_SLOT_BACK), + var/static/list/equip_priorities = list( + ITEM_SLOT_BELT, + ITEM_SLOT_BACK, + ITEM_SLOT_DEX_STORAGE, + ITEM_SLOT_OCLOTHING, + ITEM_SLOT_ICLOTHING, ) - for(var/thing in possible) - if(isnull(thing)) - continue - var/obj/item/gear = thing - if(gear.atom_storage?.attempt_insert(src, user, messages = FALSE)) + + var/list/possible_storages = user.held_items.Copy() + var/obj/item/active_held = user.get_active_held_item() + possible_storages -= active_held + if(active_held != src) + // If something else is equipping us, just in case, do it into the held item + possible_storages.Insert(1, active_held) + + for(var/slot in equip_priorities) + possible_storages += user.get_item_by_slot(slot) + + for(var/obj/item/gear as anything in possible_storages) + if(gear?.atom_storage?.attempt_insert(src, user, messages = FALSE)) return TRUE to_chat(user, span_warning("You are unable to equip that!")) return FALSE +/// Attempts to put an item into storage located in a given slot +/// indirect_action - ignore "soft-locked" storages that can be easily opened +/// del_on_fail - delete the item upon failure +/mob/proc/equip_to_storage(obj/item/item, slot, indirect_action = FALSE, del_on_fail = FALSE, initial = FALSE) + var/obj/item/worn_item = get_item_by_slot(slot) + if (worn_item?.atom_storage?.attempt_insert(item, src, override = TRUE, force = indirect_action ? STORAGE_SOFT_LOCKED : STORAGE_NOT_LOCKED)) + return TRUE + + if (del_on_fail) + qdel(item) + return FALSE /mob/verb/quick_equip() set name = "quick-equip" diff --git a/code/modules/mob/living/basic/drone/visuals_icons.dm b/code/modules/mob/living/basic/drone/visuals_icons.dm index 401f55751c4..fb89e82c8a1 100644 --- a/code/modules/mob/living/basic/drone/visuals_icons.dm +++ b/code/modules/mob/living/basic/drone/visuals_icons.dm @@ -18,7 +18,7 @@ update_worn_mask() if(slot_flags & ITEM_SLOT_HANDS) update_held_items() - if(slot_flags & (ITEM_SLOT_HANDS|ITEM_SLOT_BACKPACK|ITEM_SLOT_DEX_STORAGE)) + if(slot_flags & (ITEM_SLOT_HANDS|ITEM_SLOT_DEX_STORAGE)) update_inv_internal_storage() /mob/living/basic/drone/proc/update_inv_internal_storage() diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 6cf5adae8d1..1b782b309cf 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -637,7 +637,7 @@ GLOBAL_LIST_EMPTY(features_by_species) // Anything that's small or smaller can fit into a pocket by default if((slot & (ITEM_SLOT_RPOCKET|ITEM_SLOT_LPOCKET)) && I.w_class <= POCKET_WEIGHT_CLASS) excused = TRUE - else if(slot & (ITEM_SLOT_SUITSTORE|ITEM_SLOT_BACKPACK|ITEM_SLOT_BELTPACK|ITEM_SLOT_HANDS)) + else if(slot & (ITEM_SLOT_SUITSTORE|ITEM_SLOT_HANDS)) excused = TRUE if(!excused) return FALSE @@ -674,16 +674,11 @@ GLOBAL_LIST_EMPTY(features_by_species) return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_BELT) var/obj/item/bodypart/O = H.get_bodypart(BODY_ZONE_CHEST) - if(!H.w_uniform && !HAS_TRAIT(H, TRAIT_NO_JUMPSUIT) && (!O || IS_ORGANIC_LIMB(O))) if(!disable_warning) to_chat(H, span_warning("You need a jumpsuit before you can attach this [I.name]!")) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(ITEM_SLOT_BELTPACK) - if(H.belt && H.belt.atom_storage?.can_insert(I, H, messages = TRUE, force = indirect_action ? STORAGE_SOFT_LOCKED : STORAGE_NOT_LOCKED)) - return TRUE - return FALSE if(ITEM_SLOT_EYES) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE @@ -764,10 +759,6 @@ GLOBAL_LIST_EMPTY(features_by_species) if(H.num_legs < 2) return FALSE return TRUE - if(ITEM_SLOT_BACKPACK) - if(H.back && H.back.atom_storage?.can_insert(I, H, messages = TRUE, force = indirect_action ? STORAGE_SOFT_LOCKED : STORAGE_NOT_LOCKED)) - return TRUE - return FALSE return FALSE //Unsupported slot /datum/species/proc/equip_delay_self_check(obj/item/I, mob/living/carbon/human/H, bypass_equip_delay_self) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index e8b847112a5..c9ab87098dc 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -52,9 +52,6 @@ if(looking_for == belt) return ITEM_SLOT_BELT - if(belt && (looking_for in belt)) - return ITEM_SLOT_BELTPACK - if(looking_for == wear_id) return ITEM_SLOT_ID @@ -182,9 +179,7 @@ if(ITEM_SLOT_OCLOTHING) if(wear_suit) return - wear_suit = equipping - if(wear_suit.breakouttime) //when equipping a straightjacket ADD_TRAIT(src, TRAIT_RESTRAINED, SUIT_TRAIT) stop_pulling() //can't pull if restrained @@ -207,20 +202,13 @@ return s_store = equipping update_suit_storage() - if(ITEM_SLOT_BELTPACK) - if(!belt || !belt.atom_storage?.attempt_insert(equipping, src, override = TRUE, force = indirect_action ? STORAGE_SOFT_LOCKED : STORAGE_NOT_LOCKED)) - not_handled = TRUE else to_chat(src, span_danger("You are trying to equip this item to an unsupported inventory slot. Report this to a coder!")) + not_handled = TRUE //Item is handled and in slot, valid to call callback, for this proc should always be true if(!not_handled) has_equipped(equipping, slot, initial) - hud_used?.update_locked_slots() - - // Send a signal for when we equip an item that used to cover our feet/shoes. Used for bloody feet - if(equipping.body_parts_covered & FEET || (equipping.flags_inv | equipping.transparent_protection) & HIDESHOES) - SEND_SIGNAL(src, COMSIG_CARBON_EQUIP_SHOECOVER, equipping, slot, initial, redraw_mob) return not_handled //For future deeper overrides @@ -305,10 +293,6 @@ else not_handled = TRUE - // Send a signal for when we unequip an item that used to cover our feet/shoes. Used for bloody feet - if((I.body_parts_covered & FEET) || (I.flags_inv | I.transparent_protection) & HIDESHOES) - SEND_SIGNAL(src, COMSIG_CARBON_UNEQUIP_SHOECOVER, I, force, newloc, no_move, invdrop, silent) - if(not_handled) return diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 5cbd69c6a2a..b29b05ebacd 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -62,9 +62,6 @@ if(looking_for == back) return ITEM_SLOT_BACK - if(back && (looking_for in back)) - return ITEM_SLOT_BACKPACK - if(looking_for == wear_mask) return ITEM_SLOT_MASK @@ -98,7 +95,6 @@ ITEM_SLOT_BACK, ITEM_SLOT_NECK, ITEM_SLOT_HANDS, - ITEM_SLOT_BACKPACK, ITEM_SLOT_SUITSTORE, ITEM_SLOT_HANDCUFFED, ITEM_SLOT_LEGCUFFED, @@ -116,9 +112,27 @@ return visible_items /mob/living/carbon/proc/equip_in_one_of_slots(obj/item/equipping, list/slots, qdel_on_fail = TRUE, indirect_action = FALSE) + var/static/list/equip_slots = list( + LOCATION_LPOCKET, + LOCATION_RPOCKET, + LOCATION_HANDS, + LOCATION_GLOVES, + LOCATION_EYES, + LOCATION_HEAD, + LOCATION_NECK, + LOCATION_ID, + ) + var/static/list/storage_slots = list( + LOCATION_BACKPACK, + ) + for(var/slot in slots) - if(equip_to_slot_if_possible(equipping, slots[slot], disable_warning = TRUE, indirect_action = indirect_action)) - return slot + if(equip_slots[slot]) + if(equip_to_slot_if_possible(equipping, equip_slots[slot], disable_warning = TRUE, indirect_action = indirect_action)) + return slot + else if (storage_slots[slot]) + if(equip_to_storage(equipping, storage_slots[slot], indirect_action = indirect_action)) + return slot if(qdel_on_fail) qdel(equipping) return null @@ -127,6 +141,7 @@ /mob/living/carbon/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) if(!slot) return + if(!istype(equipping)) return @@ -140,10 +155,12 @@ equipping.screen_loc = null if(client) client.screen -= equipping + if(observers?.len) for(var/mob/dead/observe as anything in observers) if(observe.client) observe.client.screen -= equipping + equipping.forceMove(src) SET_PLANE_EXPLICIT(equipping, ABOVE_HUD_PLANE, src) equipping.appearance_flags |= NO_CLIENT_COLOR @@ -164,7 +181,6 @@ if(head) return head = equipping - SEND_SIGNAL(src, COMSIG_CARBON_EQUIP_HAT, equipping) update_worn_head() if(ITEM_SLOT_NECK) if(wear_neck) @@ -180,9 +196,6 @@ if(ITEM_SLOT_HANDS) put_in_hands(equipping) update_held_items() - if(ITEM_SLOT_BACKPACK) - if(!back || !back.atom_storage?.attempt_insert(equipping, src, override = TRUE, force = indirect_action ? STORAGE_SOFT_LOCKED : STORAGE_NOT_LOCKED)) - not_handled = TRUE else not_handled = TRUE @@ -191,17 +204,16 @@ //in a slot (handled further down inheritance chain, probably living/carbon/human/equip_to_slot if(!not_handled) has_equipped(equipping, slot, initial) - hud_used?.update_locked_slots() return not_handled +/mob/living/carbon/has_equipped(obj/item/item, slot, initial) + . = ..() + hud_used?.update_locked_slots() + /mob/living/carbon/get_equipped_speed_mod_items() return ..() + get_equipped_items() -/// This proc is called after an item has been successfully handled and equipped to a slot. -/mob/living/carbon/proc/has_equipped(obj/item/item, slot, initial = FALSE) - return item.on_equipped(src, slot, initial) - /mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) . = ..() //Sets the default return value to what the parent returns. if(!. || !I) //We don't want to set anything to null if the parent returned 0. @@ -210,7 +222,6 @@ var/not_handled = FALSE //if we actually unequipped an item, this is because we dont want to run this proc twice, once for carbons and once for humans if(I == head) head = null - SEND_SIGNAL(src, COMSIG_CARBON_UNEQUIP_HAT, I, force, newloc, no_move, invdrop, silent) if(!QDELETED(src)) update_worn_head() else if(I == back) @@ -522,13 +533,15 @@ /// in their hands would be a dead giveaway that they are an antagonist. /// Returns the human readable name of where it placed the item, or null otherwise. /mob/living/carbon/proc/equip_conspicuous_item(obj/item/item, delete_item_if_failed = TRUE) - var/list/slots = list ( - "backpack" = ITEM_SLOT_BACKPACK, + var/static/list/pockets = list( "left pocket" = ITEM_SLOT_LPOCKET, "right pocket" = ITEM_SLOT_RPOCKET ) - var/placed_in = equip_in_one_of_slots(item, slots, indirect_action = TRUE) + var/placed_in = equip_in_one_of_slots(item, pockets, indirect_action = TRUE) + + if (!placed_in) + placed_in = equip_to_storage(item, ITEM_SLOT_BACK, indirect_action = TRUE) if (isnull(placed_in) && delete_item_if_failed) qdel(item) diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index 1d129391bbc..121d698ca7d 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -300,9 +300,6 @@ /obj/item/mod/module/proc/on_uninstall(deleting = FALSE) SHOULD_CALL_PARENT(TRUE) - if (deleting) - return - if (mask_worn_overlay) for (var/obj/item/part as anything in mod.get_parts(all = TRUE)) UnregisterSignal(part, COMSIG_ITEM_GET_SEPARATE_WORN_OVERLAYS) diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm index d0de12a7b20..79473a27167 100644 --- a/code/modules/unit_tests/outfit_sanity.dm +++ b/code/modules/unit_tests/outfit_sanity.dm @@ -84,7 +84,7 @@ for (var/path in backpack_contents) var/number = backpack_contents[path] || 1 for (var/_ in 1 to number) - if (!H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BACKPACK, TRUE, indirect_action = TRUE)) + if (!H.equip_to_storage(new path(H), ITEM_SLOT_BACK, indirect_action = TRUE, del_on_fail = TRUE)) TEST_FAIL("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") if (outfit.belt_contents) @@ -92,7 +92,7 @@ for (var/path in belt_contents) var/number = belt_contents[path] || 1 for (var/_ in 1 to number) - if (!H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BELTPACK, TRUE, indirect_action = TRUE)) + if (!H.equip_to_storage(new path(H), ITEM_SLOT_BELT, indirect_action = TRUE, del_on_fail = TRUE)) TEST_FAIL("[outfit.name]'s belt_contents are invalid! Couldn't add [path] to backpack.")