diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 8be3646dec87a..535aa127fc497 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -66,18 +66,20 @@ #define ITEM_SLOT_SOCKS (1<<19) /// Shirt slot #define ITEM_SLOT_SHIRT (1<<20) +/// Bra slot +#define ITEM_SLOT_BRA (1<<21) /// Right ear slot -#define ITEM_SLOT_EARS_RIGHT (1<<21) +#define ITEM_SLOT_EARS_RIGHT (1<<22) /// Wrist slot -#define ITEM_SLOT_WRISTS (1<<22) +#define ITEM_SLOT_WRISTS (1<<23) // SPLURT EDIT END /// Handcuff slot -#define ITEM_SLOT_HANDCUFFED (1<<23) +#define ITEM_SLOT_HANDCUFFED (1<<24) /// Legcuff slot (bolas, beartraps) -#define ITEM_SLOT_LEGCUFFED (1<<24) +#define ITEM_SLOT_LEGCUFFED (1<<25) /// Total amount of slots -#define SLOTS_AMT 25 // Keep this up to date! +#define SLOTS_AMT 26 // Keep this up to date! ///Inventory slots that can be blacklisted by a species from being equipped into DEFINE_BITFIELD(no_equip_flags, list( diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 6d1976449134c..e6639affd9fc1 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -687,31 +687,32 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( /// Total number of layers for mob overlays /// KEEP THIS UP-TO-DATE OR SHIT WILL BREAK /// Also consider updating layers_to_offset -#define TOTAL_LAYERS 46 // SKYRAT EDIT CHANGE - ORIGINAL: 35 +#define TOTAL_LAYERS 47 // SKYRAT EDIT CHANGE - ORIGINAL: 35 /// Mutations layer - Tk headglows, cold resistance glow, etc -#define MUTATIONS_LAYER 46 // SKYRAT EDIT CHANGE - ORIGINAL: 35 +#define MUTATIONS_LAYER 47 // SKYRAT EDIT CHANGE - ORIGINAL: 35 /// Mutantrace features (tail when looking south) that must appear behind the body parts -#define BODY_BEHIND_LAYER 45 // SKYRAT EDIT CHANGE - ORIGINAL: 34 +#define BODY_BEHIND_LAYER 46 // SKYRAT EDIT CHANGE - ORIGINAL: 34 /// Layer for bodyparts that should appear behind every other bodypart - Mostly, legs when facing WEST or EAST -#define BODYPARTS_LOW_LAYER 44 // SKYRAT EDIT CHANGE - ORIGINAL: 33 +#define BODYPARTS_LOW_LAYER 45 // SKYRAT EDIT CHANGE - ORIGINAL: 33 /// Layer for most bodyparts, appears above BODYPARTS_LOW_LAYER and below BODYPARTS_HIGH_LAYER -#define BODYPARTS_LAYER 43 // SKYRAT EDIT CHANGE - ORIGINAL: 32 +#define BODYPARTS_LAYER 44 // SKYRAT EDIT CHANGE - ORIGINAL: 32 /// Mutantrace features (snout, body markings) that must appear above the body parts -#define BODY_ADJ_LAYER 42 // SKYRAT EDIT CHANGE - ORIGINAL: 31 +#define BODY_ADJ_LAYER 43 // SKYRAT EDIT CHANGE - ORIGINAL: 31 /// Underwear, undershirts, socks, eyes, lips(makeup) -#define BODY_LAYER 41 // SKYRAT EDIT CHANGE - ORIGINAL: 30 +#define BODY_LAYER 42 // SKYRAT EDIT CHANGE - ORIGINAL: 30 /// Mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) -#define FRONT_MUTATIONS_LAYER 40 // SKYRAT EDIT CHANGE - ORIGINAL: 29 +#define FRONT_MUTATIONS_LAYER 41 // SKYRAT EDIT CHANGE - ORIGINAL: 29 /// Damage indicators (cuts and burns) -#define DAMAGE_LAYER 39 // SKYRAT EDIT CHANGE - ORIGINAL: 28 +#define DAMAGE_LAYER 40 // SKYRAT EDIT CHANGE - ORIGINAL: 28 // SKYRAT EDIT ADDITION START /// This layer is used for things that shouldn't be over clothes, but should be over mutations -#define BODY_FRONT_UNDER_CLOTHES 38 +#define BODY_FRONT_UNDER_CLOTHES 39 // SKYRAT EDIT ADDITION END // SPLURT EDIT undies -#define UNDERWEAR_LAYER 37 -#define SOCKS_LAYER 36 -#define SHIRT_LAYER 35 +#define UNDERWEAR_LAYER 38 +#define SOCKS_LAYER 37 +#define SHIRT_LAYER 36 +#define BRA_LAYER 35 // SPLURT EDIT END /// Jumpsuit clothing layer #define UNIFORM_LAYER 34 // SKYRAT EDIT CHANGE - ORIGINAL: 27 //SPLURT EDIT undies diff --git a/code/__DEFINES/~~~splurt_defines/hud.dm b/code/__DEFINES/~~~splurt_defines/hud.dm index a91e5b9aa085e..4132426a3b296 100644 --- a/code/__DEFINES/~~~splurt_defines/hud.dm +++ b/code/__DEFINES/~~~splurt_defines/hud.dm @@ -3,5 +3,6 @@ #define ui_boxers "WEST:6,SOUTH+4:13" #define ui_socks "WEST:6,SOUTH+5:15" #define ui_shirt "WEST:6,SOUTH+6:17" +#define ui_bra "WEST+1:8,SOUTH+5:15" #define ui_ears_extra "WEST+2:10,SOUTH+4:13" #define ui_wrists "WEST+1:8,SOUTH+4:13" diff --git a/code/__DEFINES/~~~splurt_defines/mobs.dm b/code/__DEFINES/~~~splurt_defines/mobs.dm index b0a68210074fb..583237e560f72 100644 --- a/code/__DEFINES/~~~splurt_defines/mobs.dm +++ b/code/__DEFINES/~~~splurt_defines/mobs.dm @@ -2,5 +2,6 @@ #define OFFSET_UNDERWEAR "underwear" #define OFFSET_SOCKS "socks" #define OFFSET_SHIRT "shirt" +#define OFFSET_BRA "bra" #define OFFSET_WRISTS "wrist" // diff --git a/code/__DEFINES/~~~splurt_defines/strippable.dm b/code/__DEFINES/~~~splurt_defines/strippable.dm index 176953b2e22c8..a22f2310401b2 100644 --- a/code/__DEFINES/~~~splurt_defines/strippable.dm +++ b/code/__DEFINES/~~~splurt_defines/strippable.dm @@ -2,4 +2,5 @@ #define STRIPPABLE_ITEM_WRISTS "wrists" #define STRIPPABLE_ITEM_SOCKS "socks" #define STRIPPABLE_ITEM_UNDERSHIRT "undershirt" +#define STRIPPABLE_ITEM_BRA "bra" #define STRIPPABLE_ITEM_UNDERWEAR "underwear" diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index e743e58a3a88a..f09dac6b3df9b 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -286,6 +286,14 @@ inv_box.slot_id = ITEM_SLOT_SHIRT extra_inventory += inv_box + inv_box = new /atom/movable/screen/inventory(null, src) + inv_box.name = "bra" + inv_box.icon = extra_inventory_ui_style(ui_style) + inv_box.icon_state = "bra" + inv_box.screen_loc = ui_bra + inv_box.slot_id = ITEM_SLOT_BRA + extra_inventory += inv_box + inv_box = new /atom/movable/screen/inventory(null, src) inv_box.name = "right ear" inv_box.icon = extra_inventory_ui_style(ui_style) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 261e1296e784f..db2d20746a7ea 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -217,7 +217,7 @@ w_shirt = w_shirt || initial(undershirt.shirt_obj) //SPLURT EDIT - Extra inventory - original: user.undershirt = initial(undershirt.name) if(bra) - w_shirt = w_shirt || initial(bra.bra_obj) //SPLURT EDIT - Extra inventory - original: user.bra = initial(bra.name) + w_bra = w_bra || initial(bra.bra_obj) //SPLURT EDIT - Extra inventory - original: user.bra = initial(bra.name) if(underwear) w_underwear = w_underwear || initial(underwear.briefs_obj) //SPLURT EDIT - Extra inventory - original: user.underwear = initial(underwear.name) @@ -234,6 +234,8 @@ EQUIP_OUTFIT_ITEM(w_socks, ITEM_SLOT_SOCKS) if(w_shirt) EQUIP_OUTFIT_ITEM(w_shirt, ITEM_SLOT_SHIRT) + if(w_bra) + EQUIP_OUTFIT_ITEM(w_bra, ITEM_SLOT_BRA) if(wrists) EQUIP_OUTFIT_ITEM(wrists, ITEM_SLOT_WRISTS) // diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 08b1a73d1f291..a9940d475bdab 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -100,18 +100,18 @@ if(new_bra) dressing_human.bra = new_bra // SPLURT EDIT ADDITION - Extra Inventory - dressing_human.dropItemToGround(dressing_human.w_shirt) + dressing_human.dropItemToGround(dressing_human.w_bra) var/datum/sprite_accessory/bra/sprite = SSaccessories.bra_list[new_bra] - dressing_human.equip_to_slot_or_del(new sprite.bra_obj(dressing_human), ITEM_SLOT_SHIRT) + dressing_human.equip_to_slot_or_del(new sprite.bra_obj(dressing_human), ITEM_SLOT_BRA) // SPLURT EDIT END if("Bra Color") var/new_bra_color = input(dressing_human, "Choose your Bra color", "Bra Color", dressing_human.bra_color) as color|null if(new_bra_color) dressing_human.bra_color = sanitize_hexcolor(new_bra_color) // SPLURT EDIT ADDITION - Extra Inventory - var/obj/item/clothing/underwear/shirt/bra = dressing_human.w_shirt + var/obj/item/clothing/underwear/shirt/bra = dressing_human.w_bra dressing_human.dropItemToGround(bra) - dressing_human.equip_to_slot_or_del(bra, ITEM_SLOT_SHIRT) + dressing_human.equip_to_slot_or_del(bra, ITEM_SLOT_BRA) // SPLURT EDIT END //SKYRAT EDIT ADDITION END - Colorable Undershirt/Socks/Bras diff --git a/code/game/objects/structures/mannequin.dm b/code/game/objects/structures/mannequin.dm index dfc1e2192a7cc..871438cd5aed9 100644 --- a/code/game/objects/structures/mannequin.dm +++ b/code/game/objects/structures/mannequin.dm @@ -46,6 +46,7 @@ ITEM_SLOT_UNDERWEAR, ITEM_SLOT_SOCKS, ITEM_SLOT_SHIRT, + ITEM_SLOT_BRA, ITEM_SLOT_WRISTS, // SPLURT EDIT END ) @@ -182,6 +183,9 @@ if(ITEM_SLOT_SHIRT) default_layer = SHIRT_LAYER default_icon = 'icons/mob/clothing/underwear.dmi' + if(ITEM_SLOT_BRA) + default_layer = BRA_LAYER + default_icon = 'icons/mob/clothing/underwear.dmi' if(ITEM_SLOT_WRISTS) default_layer = WRISTS_LAYER //default_icon = 'modular_zzplurt/icons/mob/clothing/wrists.dmi' //No wrists icon yet diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 9e46cea360514..823f776e7180c 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -815,6 +815,7 @@ "w_underwear" = ITEM_SLOT_UNDERWEAR, "w_socks" = ITEM_SLOT_SOCKS, "w_shirt" = ITEM_SLOT_SHIRT, + "w_bra" = ITEM_SLOT_BRA, "ears_extra" = ITEM_SLOT_EARS_RIGHT, "wrists" = ITEM_SLOT_WRISTS, ) diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm index fdbe355002cbc..a8b5b073c5721 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -39,6 +39,8 @@ wrists = item_path if(ITEM_SLOT_SHIRT) w_shirt = item_path + if(ITEM_SLOT_BRA) + w_bra = item_path if(ITEM_SLOT_UNDERWEAR) underwear = item_path if(ITEM_SLOT_SOCKS) @@ -94,7 +96,7 @@ //Copy equipment var/list/result = list() - var/list/slots_to_check = list(ITEM_SLOT_ICLOTHING,ITEM_SLOT_UNDERWEAR,ITEM_SLOT_SHIRT,ITEM_SLOT_SOCKS,ITEM_SLOT_BACK,ITEM_SLOT_OCLOTHING,ITEM_SLOT_BELT,ITEM_SLOT_GLOVES,ITEM_SLOT_WRISTS,ITEM_SLOT_FEET,ITEM_SLOT_HEAD,ITEM_SLOT_MASK,ITEM_SLOT_NECK,ITEM_SLOT_EARS_LEFT,ITEM_SLOT_EARS_RIGHT,ITEM_SLOT_EYES,ITEM_SLOT_ID,ITEM_SLOT_SUITSTORE,ITEM_SLOT_LPOCKET,ITEM_SLOT_RPOCKET) // SPLURT EDIT - Extra inventory + var/list/slots_to_check = list(ITEM_SLOT_ICLOTHING,ITEM_SLOT_UNDERWEAR,ITEM_SLOT_SHIRT,ITEM_SLOT_BRA,ITEM_SLOT_SOCKS,ITEM_SLOT_BACK,ITEM_SLOT_OCLOTHING,ITEM_SLOT_BELT,ITEM_SLOT_GLOVES,ITEM_SLOT_WRISTS,ITEM_SLOT_FEET,ITEM_SLOT_HEAD,ITEM_SLOT_MASK,ITEM_SLOT_NECK,ITEM_SLOT_EARS_LEFT,ITEM_SLOT_EARS_RIGHT,ITEM_SLOT_EYES,ITEM_SLOT_ID,ITEM_SLOT_SUITSTORE,ITEM_SLOT_LPOCKET,ITEM_SLOT_RPOCKET) // SPLURT EDIT - Extra inventory for(var/slot in slots_to_check) var/obj/item/item = get_item_by_slot(slot) var/vedits = collect_vv(item) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 55b463269a55f..d40b016cd5289 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -493,6 +493,7 @@ ITEM_SLOT_UNDERWEAR,\ ITEM_SLOT_SOCKS,\ ITEM_SLOT_SHIRT,\ + ITEM_SLOT_BRA,\ ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ ITEM_SLOT_FEET, ITEM_SLOT_WRISTS, ITEM_SLOT_GLOVES,\ diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 15aeffa342a22..7fc4dbd7645cb 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -900,6 +900,8 @@ GLOBAL_LIST_EMPTY(features_by_species) return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_SHIRT) return equip_delay_self_check(I, H, bypass_equip_delay_self) + if(ITEM_SLOT_BRA) + return equip_delay_self_check(I, H, bypass_equip_delay_self) // if(ITEM_SLOT_ICLOTHING) return equip_delay_self_check(I, H, bypass_equip_delay_self) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 1a254da71b72d..4563d0dd991f6 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -77,6 +77,9 @@ //SPLURT EDIT - shirt if(w_shirt && !(obscured & ITEM_SLOT_SHIRT) && !(w_shirt.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [w_shirt.get_examine_string(user)]." + //SPLURT EDIT - bra + if(w_bra && !(obscured & ITEM_SLOT_BRA) && !(w_bra.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [w_bra.get_examine_string(user)]." //SPLURT EDIT - underwear if(w_underwear && !(obscured & ITEM_SLOT_UNDERWEAR) && !(w_underwear.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [w_underwear.get_examine_string(user)]." diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 625d86e6a2867..0417bea36a793 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -632,6 +632,9 @@ if(!(obscured & ITEM_SLOT_SHIRT) && w_shirt?.wash(clean_types)) update_worn_shirt() . = TRUE + if(!(obscured & ITEM_SLOT_BRA) && w_bra?.wash(clean_types)) + update_worn_bra() + . = TRUE if(!(obscured & ITEM_SLOT_WRISTS) && wrists?.wash(clean_types)) update_worn_wrists() . = TRUE diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm index 277356ec5bcc4..e95a138a91461 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -28,6 +28,8 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/socks, /datum/strippable_item/mob_item_slot/underwear, /datum/strippable_item/mob_item_slot/undershirt, + /datum/strippable_item/mob_item_slot/bra, + // SPLURT EDIT END ))) /mob/living/carbon/human/proc/should_strip(mob/user) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 84f4877f6b784..d64268735689f 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -221,6 +221,11 @@ return w_shirt = equipping update_worn_shirt() + if(ITEM_SLOT_BRA) + if(w_bra) + return + w_bra = equipping + update_worn_bra() if(ITEM_SLOT_SOCKS) if(w_socks) return @@ -297,6 +302,10 @@ w_shirt = null if(!QDELETED(src)) update_worn_shirt() + else if(I == w_bra) + w_bra = null + if(!QDELETED(src)) + update_worn_bra() else if(I == wrists) wrists = null if(!QDELETED(src)) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 6a557ffc9ce29..4ec2a5edc419b 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -27,7 +27,7 @@ obscured |= ITEM_SLOT_HEAD // SPLURT EDIT ADDITION - Extra inventory if(hidden_slots & HIDEUNDERWEAR) - obscured |= ITEM_SLOT_UNDERWEAR | ITEM_SLOT_SHIRT | ITEM_SLOT_SOCKS + obscured |= ITEM_SLOT_UNDERWEAR | ITEM_SLOT_SHIRT | ITEM_SLOT_BRA | ITEM_SLOT_SOCKS if(hidden_slots & HIDEWRISTS) obscured |= ITEM_SLOT_WRISTS // SPLURT EDIT END diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm index fe681f1ce16e1..498665c6d5dae 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm @@ -165,9 +165,9 @@ GLOBAL_LIST_EMPTY(customizable_races) if(species_human.bra && species_human.bra != "Nude") var/datum/sprite_accessory/bra/bra = SSaccessories.bra_list[species_human.bra] - if(bra && !species_human.w_shirt) + if(bra && !species_human.w_bra) var/obj/item/clothing/underwear/shirt/bra/bra_obj = new bra.bra_obj(species_human) - species_human.equip_to_slot_or_del(bra_obj, ITEM_SLOT_SHIRT) + species_human.equip_to_slot_or_del(bra_obj, ITEM_SLOT_BRA) /* if(bra) var/mutable_appearance/bra_overlay diff --git a/modular_zzplurt/code/datums/outfit.dm b/modular_zzplurt/code/datums/outfit.dm index 90af48df88f3b..fb17a14121810 100644 --- a/modular_zzplurt/code/datums/outfit.dm +++ b/modular_zzplurt/code/datums/outfit.dm @@ -3,8 +3,10 @@ var/w_underwear = null ///Slot for socks, yes, the thing that usually goes before your shoes var/w_socks = null - ///Slot for the undershirt (which is quite a foreign concept to me) or bras + ///Slot for the undershirt (which is quite a foreign concept to me) var/w_shirt = null + ///Slot for the bra. + var/w_bra = null ///Slot for the opposite ear. var/ears_extra = null ///Slot for the part of your arms that isn't quite hands yet. diff --git a/modular_zzplurt/code/game/objects/items.dm b/modular_zzplurt/code/game/objects/items.dm index 3c5713a058ecf..551fd4dd38c45 100644 --- a/modular_zzplurt/code/game/objects/items.dm +++ b/modular_zzplurt/code/game/objects/items.dm @@ -15,6 +15,8 @@ owner.update_worn_socks() if(flags & ITEM_SLOT_SHIRT) owner.update_worn_shirt() + if(flags & ITEM_SLOT_BRA) + owner.update_worn_bra() if(flags & ITEM_SLOT_EARS) owner.update_worn_ears_extra() if(flags & ITEM_SLOT_WRISTS) diff --git a/modular_zzplurt/code/modules/asset_cache/assets/inventory.dm b/modular_zzplurt/code/modules/asset_cache/assets/inventory.dm index 0f63b3fc63a6e..61c4ce25ed880 100644 --- a/modular_zzplurt/code/modules/asset_cache/assets/inventory.dm +++ b/modular_zzplurt/code/modules/asset_cache/assets/inventory.dm @@ -6,6 +6,7 @@ "inventory-socks.png" = 'modular_zzplurt/icons/ui/inventory/socks.png', "inventory-undershirt.png" = 'modular_zzplurt/icons/ui/inventory/undershirt.png', "inventory-wrists.png" = 'modular_zzplurt/icons/ui/inventory/wrists.png', + "inventory-bra.png" = 'modular_zzplurt/icons/ui/inventory/bra.png', ) LAZYADD(assets, extra_assets) . = ..() diff --git a/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm b/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm index 06fc9f7fae5a9..490060b4dc479 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm @@ -29,6 +29,13 @@ return TRUE return FALSE +///Proc to check if bra is hidden. +/mob/living/carbon/human/proc/bra_hidden() + for(var/obj/item/I in list(w_uniform, wear_suit)) + if(istype(I) && ((I.body_parts_covered & CHEST) || (I.flags_inv & HIDEUNDERWEAR))) + return TRUE + return FALSE + ///Proc to check if underwear is hidden. /mob/living/carbon/human/proc/underwear_hidden() for(var/obj/item/I in list(w_uniform, wear_suit)) diff --git a/modular_zzplurt/code/modules/clothing/underwear/shirt.dm b/modular_zzplurt/code/modules/clothing/underwear/shirt.dm index d053e2d284e3c..6ed46bccb7a59 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/shirt.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/shirt.dm @@ -8,29 +8,32 @@ /obj/item/clothing/underwear/shirt/equipped(mob/living/user, slot) . = ..() - if(!istype(user, /mob/living/carbon/human)) + if(!istype(user, /mob/living/carbon/human) || istype(src, /obj/item/clothing/underwear/shirt/bra)) return var/mob/living/carbon/human/human = user if(slot == ITEM_SLOT_SHIRT) - if(istype(src, /obj/item/clothing/underwear/shirt/bra)) - human.bra = name - human.undershirt = "Nude" - else - human.undershirt = name - human.bra = "Nude" + human.undershirt = name else - if(istype(src, /obj/item/clothing/underwear/shirt/bra)) - human.bra = "Nude" - else - human.undershirt = "Nude" + human.undershirt = "Nude" /obj/item/clothing/underwear/shirt/bra name = "bra" desc = "A bra." icon_state = "bra" body_parts_covered = CHEST + slot_flags = ITEM_SLOT_BRA female_sprite_flags = NO_FEMALE_UNIFORM +/obj/item/clothing/underwear/shirt/bra/equipped(mob/living/user, slot) + . = ..() + if(!istype(user, /mob/living/carbon/human)) + return + var/mob/living/carbon/human/human = user + if(slot == ITEM_SLOT_BRA) + human.bra = name + else + human.bra = "Nude" + // please make sure they're sorted alphabetically and categorized, above is the only exception /* Old shirt objects, already handled by the sprite accessories diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/human_defines.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/human_defines.dm index a0d6213c147c0..30682d5e24e54 100644 --- a/modular_zzplurt/code/modules/mob/living/carbon/human/human_defines.dm +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/human_defines.dm @@ -3,6 +3,7 @@ var/obj/item/clothing/underwear/briefs/w_underwear = null var/obj/item/clothing/underwear/socks/w_socks = null var/obj/item/clothing/underwear/shirt/w_shirt = null + var/obj/item/clothing/underwear/shirt/bra/w_bra = null var/obj/item/ears_extra = null var/obj/item/wrists = null // diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/human_stripping.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/human_stripping.dm index 762e4be58bf40..24f78f3fc2431 100644 --- a/modular_zzplurt/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/human_stripping.dm @@ -17,3 +17,7 @@ /datum/strippable_item/mob_item_slot/undershirt key = STRIPPABLE_ITEM_UNDERSHIRT item_slot = ITEM_SLOT_SHIRT + +/datum/strippable_item/mob_item_slot/bra + key = STRIPPABLE_ITEM_BRA + item_slot = ITEM_SLOT_BRA diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/human_update_icons.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/human_update_icons.dm index 507ebf6a3eb94..87700f6a52378 100644 --- a/modular_zzplurt/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -156,6 +156,81 @@ update_mutant_bodyparts() + +/mob/living/carbon/human/update_worn_bra(update_obscured = TRUE) + remove_overlay(BRA_LAYER) + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BRA) + 1] + inv.update_icon() + + if(istype(w_bra, /obj/item/clothing/underwear/shirt/bra)) + var/obj/item/clothing/underwear/shirt/bra/bra = w_bra + update_hud_bra(bra) + + if(update_obscured) + update_obscured_slots(bra.flags_inv) + + if((check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_BRA) || bra_hidden()) + return + + var/target_overlay = bra.icon_state + var/mutable_appearance/bra_overlay + var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' + var/handled_by_bodyshape = TRUE + var/digi + var/woman + var/female_sprite_flags = w_bra.female_sprite_flags + var/mutant_styles = NONE + + if((bodyshape & BODYSHAPE_DIGITIGRADE) && (bra.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + icon_file = bra.worn_icon_digi || DIGITIGRADE_SHIRT_FILE + digi = TRUE + + // Edit for legacy sprites + if(bra.worn_icon_digi == bra.worn_icon) + target_overlay += "_d" + + else if(bodyshape & BODYSHAPE_CUSTOM) + icon_file = dna.species.generate_custom_worn_icon(OFFSET_SHIRT, w_bra, src) + + //Female sprites have lower priority than digitigrade sprites + if(!dna.species.no_gender_shaping && dna.species.sexes && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_UNIFORM)) + woman = TRUE + // SKYRAT EDIT ADDITION START - Digi female gender shaping + if(digi) + if(!(female_sprite_flags & FEMALE_UNIFORM_DIGI_FULL)) + female_sprite_flags &= ~FEMALE_UNIFORM_FULL // clear the FEMALE_UNIFORM_DIGI_FULL bit if it was set, we don't want that. + female_sprite_flags |= FEMALE_UNIFORM_TOP_ONLY // And set the FEMALE_UNIFORM_TOP bit if it is unset. + // SKYRAT EDIT ADDITION END + + if(digi) + mutant_styles |= STYLE_DIGI + + if(!icon_exists(icon_file, RESOLVE_ICON_STATE(bra))) + icon_file = DEFAULT_SHIRT_FILE + handled_by_bodyshape = FALSE + + bra_overlay = bra.build_worn_icon( + default_layer = BRA_LAYER, + default_icon_file = icon_file, + isinhands = FALSE, + female_uniform = woman ? female_sprite_flags : null, + override_state = target_overlay, + override_file = handled_by_bodyshape ? icon_file : null, + mutant_styles = mutant_styles, + ) + + if(bra.flags_1 & IS_PLAYER_COLORABLE_1) + bra_overlay.color = bra_color + + var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) + my_chest?.worn_shirt_offset?.apply_offset(bra_overlay) + overlays_standing[BRA_LAYER] = bra_overlay + apply_overlay(BRA_LAYER) + + update_mutant_bodyparts() + /mob/living/carbon/human/update_worn_wrists(update_obscured = TRUE) remove_overlay(WRISTS_LAYER) @@ -304,6 +379,12 @@ client.screen += worn_item update_observer_view(worn_item,TRUE) +/mob/living/carbon/human/proc/update_hud_bra(obj/item/worn_item) + worn_item.screen_loc = ui_bra + if((client && hud_used) && (hud_used.inventory_shown && hud_used.hud_shown && hud_used.extra_shown)) + client.screen += worn_item + update_observer_view(worn_item,TRUE) + /mob/living/carbon/human/proc/update_hud_underwear(obj/item/worn_item) worn_item.screen_loc = ui_boxers if((client && hud_used) && (hud_used.inventory_shown && hud_used.hud_shown && hud_used.extra_shown)) diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm index 1ecbc513a87bc..2956e291c4887 100644 --- a/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm @@ -10,6 +10,8 @@ return w_socks if(ITEM_SLOT_SHIRT) return w_shirt + if(ITEM_SLOT_BRA) + return w_bra . = ..() /mob/living/carbon/human/get_slot_by_item(obj/item/looking_for) diff --git a/modular_zzplurt/code/modules/mob/mob_update_icons.dm b/modular_zzplurt/code/modules/mob/mob_update_icons.dm index 87dd42d19f5d8..f8c317ca95421 100644 --- a/modular_zzplurt/code/modules/mob/mob_update_icons.dm +++ b/modular_zzplurt/code/modules/mob/mob_update_icons.dm @@ -8,6 +8,8 @@ update_worn_underwear() if(slot_flags & ITEM_SLOT_SHIRT) update_worn_shirt() + if(slot_flags & ITEM_SLOT_BRA) + update_worn_bra() /mob/update_obscured_slots(obscured_flags) . = ..() @@ -26,6 +28,10 @@ /mob/proc/update_worn_shirt(update_obscured = FALSE) return +///Updates the bra overlay & HUD element. +/mob/proc/update_worn_bra(update_obscured = FALSE) + return + ///Updates the socks overlay & HUD element. /mob/proc/update_worn_socks(update_obscured = FALSE) return diff --git a/modular_zzplurt/icons/hud/screen_clockwork.dmi b/modular_zzplurt/icons/hud/screen_clockwork.dmi index eefd18fdc5ad9..4816d687e906d 100644 Binary files a/modular_zzplurt/icons/hud/screen_clockwork.dmi and b/modular_zzplurt/icons/hud/screen_clockwork.dmi differ diff --git a/modular_zzplurt/icons/hud/screen_midnight.dmi b/modular_zzplurt/icons/hud/screen_midnight.dmi index 9366925181ae3..dec2e0c09d63e 100644 Binary files a/modular_zzplurt/icons/hud/screen_midnight.dmi and b/modular_zzplurt/icons/hud/screen_midnight.dmi differ diff --git a/modular_zzplurt/icons/hud/screen_operative.dmi b/modular_zzplurt/icons/hud/screen_operative.dmi index a435e1bececb9..3c8335c549d84 100644 Binary files a/modular_zzplurt/icons/hud/screen_operative.dmi and b/modular_zzplurt/icons/hud/screen_operative.dmi differ diff --git a/modular_zzplurt/icons/hud/screen_plasmafire.dmi b/modular_zzplurt/icons/hud/screen_plasmafire.dmi index 61d501dbe21a7..89c978ef4c920 100644 Binary files a/modular_zzplurt/icons/hud/screen_plasmafire.dmi and b/modular_zzplurt/icons/hud/screen_plasmafire.dmi differ diff --git a/modular_zzplurt/icons/hud/screen_retro.dmi b/modular_zzplurt/icons/hud/screen_retro.dmi index a25def4d11e9c..e4bd88d230d90 100644 Binary files a/modular_zzplurt/icons/hud/screen_retro.dmi and b/modular_zzplurt/icons/hud/screen_retro.dmi differ diff --git a/modular_zzplurt/icons/hud/screen_slimecore.dmi b/modular_zzplurt/icons/hud/screen_slimecore.dmi index 1b51613f97ec4..e75202a067ec3 100644 Binary files a/modular_zzplurt/icons/hud/screen_slimecore.dmi and b/modular_zzplurt/icons/hud/screen_slimecore.dmi differ diff --git a/modular_zzplurt/icons/hud/screen_trasenknox.dmi b/modular_zzplurt/icons/hud/screen_trasenknox.dmi index 2cd7d59617b19..066e528d17e09 100644 Binary files a/modular_zzplurt/icons/hud/screen_trasenknox.dmi and b/modular_zzplurt/icons/hud/screen_trasenknox.dmi differ diff --git a/modular_zzplurt/icons/ui/inventory/bra.png b/modular_zzplurt/icons/ui/inventory/bra.png new file mode 100644 index 0000000000000..998fc40b48509 Binary files /dev/null and b/modular_zzplurt/icons/ui/inventory/bra.png differ diff --git a/tgui/packages/tgui/interfaces/StripMenu.tsx b/tgui/packages/tgui/interfaces/StripMenu.tsx index 862a794d40e42..5f774e7fc0b61 100644 --- a/tgui/packages/tgui/interfaces/StripMenu.tsx +++ b/tgui/packages/tgui/interfaces/StripMenu.tsx @@ -88,10 +88,10 @@ const SLOTS: Record< additionalComponent?: JSX.Element; } > = { - undershirt: { - displayName: 'shirt', + socks: { + displayName: 'socks', gridSpot: getGridSpotKey([0, 0]), - image: 'inventory-undershirt.png', + image: 'inventory-socks.png', }, eyes: { @@ -112,10 +112,22 @@ const SLOTS: Record< image: 'inventory-ears_extra.png', }, - socks: { - displayName: 'socks', + undershirt: { + displayName: 'shirt', + gridSpot: getGridSpotKey([0, 4]), + image: 'inventory-undershirt.png', + }, + + underwear: { + displayName: 'underwear', + gridSpot: getGridSpotKey([0, 5]), + image: 'inventory-underwear.png', + }, + + bra: { + displayName: 'bra', gridSpot: getGridSpotKey([1, 0]), - image: 'inventory-socks.png', + image: 'inventory-bra.png', }, neck: { @@ -158,12 +170,6 @@ const SLOTS: Record< gridSpot: getGridSpotKey([1, 5]), }, - underwear: { - displayName: 'underwear', - gridSpot: getGridSpotKey([2, 0]), - image: 'inventory-underwear.png', - }, - jumpsuit: { displayName: 'uniform', gridSpot: getGridSpotKey([2, 1]),