From 18d48c5851a45681767460d96f5a600699e684f4 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Thu, 11 Jul 2024 23:15:26 -0300 Subject: [PATCH 001/117] misery --- code/__DEFINES/inventory.dm | 29 +++++- code/datums/outfit.dm | 33 +++++-- code/game/objects/items.dm | 12 +++ .../antagonists/clown_ops/bananium_bomb.dm | 7 ++ code/modules/clothing/outfits/vv_outfit.dm | 16 +++- code/modules/mob/mob.dm | 95 +++++++++++++++++++ 6 files changed, 180 insertions(+), 12 deletions(-) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index de50b9187d618..9b194eaedf68f 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -32,7 +32,7 @@ /// Glasses slot #define ITEM_SLOT_EYES (1<<3) /// Ear slot (radios, earmuffs) -#define ITEM_SLOT_EARS (1<<4) +#define ITEM_SLOT_EARS_LEFT (1<<4) /// Mask slot #define ITEM_SLOT_MASK (1<<5) /// Head slot (helmets, hats, etc.) @@ -59,13 +59,25 @@ #define ITEM_SLOT_LPOCKET (1<<16) /// Right Pocket slot #define ITEM_SLOT_RPOCKET (1<<17) +// -- Sandstorm edit -- +/// Underwear slot +#define ITEM_SLOT_UNDERWEAR (1<<18) +/// Socks slot +#define ITEM_SLOT_SOCKS (1<<19) +/// Shirt slot +#define ITEM_SLOT_SHIRT (1<<20) +/// Right ear slot +#define ITEM_SLOT_EARS_RIGHT (1<<21) +/// Wrist slot +#define ITEM_SLOT_WRISTS (1<<22) +// -- End edit -- /// Handcuff slot -#define ITEM_SLOT_HANDCUFFED (1<<18) +#define ITEM_SLOT_HANDCUFFED (1<<23) /// Legcuff slot (bolas, beartraps) -#define ITEM_SLOT_LEGCUFFED (1<<19) +#define ITEM_SLOT_LEGCUFFED (1<<24) /// Total amount of slots -#define SLOTS_AMT 20 // Keep this up to date! +#define SLOTS_AMT 25 // Keep this up to date! ///Inventory slots that can be blacklisted by a species from being equipped into DEFINE_BITFIELD(no_equip_flags, list( @@ -83,6 +95,10 @@ DEFINE_BITFIELD(no_equip_flags, list( //SLOT GROUP HELPERS #define ITEM_SLOT_POCKETS (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET) + +//EARS HELPER +#define ITEM_SLOT_EARS (ITEM_SLOT_EARS_LEFT|ITEM_SLOT_EARS_RIGHT) + /// Slots that are physically on you #define ITEM_SLOT_ON_BODY (ITEM_SLOT_ICLOTHING | ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_EYES | ITEM_SLOT_EARS | \ ITEM_SLOT_MASK | ITEM_SLOT_HEAD | ITEM_SLOT_FEET | ITEM_SLOT_ID | ITEM_SLOT_BELT | ITEM_SLOT_BACK | ITEM_SLOT_NECK ) @@ -120,6 +136,11 @@ DEFINE_BITFIELD(no_equip_flags, list( #define HIDETAUR (1<<18) //SKYRAT EDIT ADDITION END +//sandstorm edit +#define HIDEUNDERWEAR (1<<14) //hides underwear, socks and shirt +#define HIDEWRISTS (1<<15) //hides wrists +// + //bitflags for clothing coverage - also used for limbs #define HEAD (1<<0) #define CHEST (1<<1) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 38a67b1baa2c2..831fc28baf897 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -107,6 +107,19 @@ ///ID of the slot containing a gas tank var/internals_slot = null + //sandstorm edit + ///Slot for underwear like boxers and panties + var/underwear = null + ///Slot for socks, yes, the thing that usually goes before your shoes + var/socks = null + ///Slot for the undershirt (which is quite a foreign concept to me) or bras + var/shirt = null + ///Slot for the opposite ear. + var/ears_extra = null + ///Slot for the part of your arms that isn't quite hands yet. + var/wrists = null + // worst feature in the game below + /** * Any skillchips the mob should have in their brain. * @@ -117,11 +130,6 @@ ///Should we preload some of this job's items? var/preload = FALSE - /// Any undershirt. While on humans it is a string, here we use paths to stay consistent with the rest of the equips. - var/datum/sprite_accessory/undershirt = null - var/datum/sprite_accessory/underwear = null - var/datum/sprite_accessory/socks = null - /** * Called at the start of the equip proc * @@ -189,7 +197,7 @@ if(neck) EQUIP_OUTFIT_ITEM(neck, ITEM_SLOT_NECK) if(ears) - EQUIP_OUTFIT_ITEM(ears, ITEM_SLOT_EARS) + EQUIP_OUTFIT_ITEM(ears, ITEM_SLOT_EARS_LEFT) if(glasses) EQUIP_OUTFIT_ITEM(glasses, ITEM_SLOT_EYES) if(back) @@ -211,6 +219,19 @@ if(suit_store) EQUIP_OUTFIT_ITEM(suit_store, ITEM_SLOT_SUITSTORE) + // Sandstorm edit + if(ears_extra) + EQUIP_OUTFIT_ITEM(ears_extra, ITEM_SLOT_EARS_RIGHT) + if(underwear) + EQUIP_OUTFIT_ITEM(underwear, ITEM_SLOT_UNDERWEAR) + if(socks) + EQUIP_OUTFIT_ITEM(socks, ITEM_SLOT_SOCKS) + if(shirt) + EQUIP_OUTFIT_ITEM(shirt, ITEM_SLOT_SHIRT) + if(wrists) + EQUIP_OUTFIT_ITEM(wrists, ITEM_SLOT_WRISTS) + // + if(undershirt) user.undershirt = initial(undershirt.name) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index e4b752670e0b7..5ad05651e8e11 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -932,6 +932,18 @@ owner.update_worn_oversuit() if(flags & ITEM_SLOT_ICLOTHING) owner.update_worn_undersuit() + //skyrat edit + if(flags & ITEM_SLOT_UNDERWEAR) + owner.update_worn_underwear() + if(flags & ITEM_SLOT_SOCKS) + owner.update_worn_socks() + if(flags & ITEM_SLOT_SHIRT) + owner.update_worn_shirt() + if(flags & ITEM_SLOT_EARS) + owner.update_worn_ears_extra() + if(flags & ITEM_SLOT_WRISTS) + owner.update_worn_wrists() + // if(flags & ITEM_SLOT_GLOVES) owner.update_worn_gloves() if(flags & ITEM_SLOT_EYES) diff --git a/code/modules/antagonists/clown_ops/bananium_bomb.dm b/code/modules/antagonists/clown_ops/bananium_bomb.dm index 3381c7bdb95f0..60da8c6013027 100644 --- a/code/modules/antagonists/clown_ops/bananium_bomb.dm +++ b/code/modules/antagonists/clown_ops/bananium_bomb.dm @@ -56,5 +56,12 @@ ADD_TRAIT(clown_mask, TRAIT_NODROP, CLOWN_NUKE_TRAIT) clowned_on.equip_to_slot_or_del(clown_mask, ITEM_SLOT_MASK) + //sandstorm edit + if(!clowned_on.shirt || clowned_on.dropItemToGround(clowned_on.shirt)) + var/obj/item/clothing/clown_undershirt = new /obj/item/clothing/underwear/shirt/clown(clowned_on) + ADD_TRAIT(clown_undershirt, TRAIT_NODROP, CLOWN_NUKE_TRAIT) + clowned_on.equip_to_slot_or_del(clown_undershirt, ITEM_SLOT_SHIRT) + // + clowned_on.dna.add_mutation(/datum/mutation/human/clumsy) clowned_on.gain_trauma(/datum/brain_trauma/mild/phobia/clowns, TRAUMA_RESILIENCE_LOBOTOMY) //MWA HA HA diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm index 6277b5c1dd8c0..7f429937c1c6e 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -30,8 +30,20 @@ mask = item_path if(ITEM_SLOT_NECK) neck = item_path - if(ITEM_SLOT_EARS) + // Sandstorm edit + if(ITEM_SLOT_EARS_LEFT) ears = item_path + if(ITEM_SLOT_EARS_RIGHT) + ears_extra = item_path + if(ITEM_SLOT_WRISTS) + wrists = item_path + if(ITEM_SLOT_SHIRT) + shirt = item_path + if(ITEM_SLOT_UNDERWEAR) + underwear = item_path + if(ITEM_SLOT_SOCKS) + socks = item_path + // if(ITEM_SLOT_EYES) glasses = item_path if(ITEM_SLOT_ID) @@ -82,7 +94,7 @@ //Copy equipment var/list/result = list() - var/list/slots_to_check = list(ITEM_SLOT_ICLOTHING,ITEM_SLOT_BACK,ITEM_SLOT_OCLOTHING,ITEM_SLOT_BELT,ITEM_SLOT_GLOVES,ITEM_SLOT_FEET,ITEM_SLOT_HEAD,ITEM_SLOT_MASK,ITEM_SLOT_NECK,ITEM_SLOT_EARS,ITEM_SLOT_EYES,ITEM_SLOT_ID,ITEM_SLOT_SUITSTORE,ITEM_SLOT_LPOCKET,ITEM_SLOT_RPOCKET) + 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) // Sandstorm edit 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/mob.dm b/code/modules/mob/mob.dm index 16ccf461e2545..e7f44369f824c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -470,6 +470,101 @@ return FALSE +/** + * Try to equip an item to a slot on the mob + * + * This is a SAFE proc. Use this instead of equip_to_slot()! + * + * set qdel_on_fail to have it delete W if it fails to equip + * + * set disable_warning to disable the 'you are unable to equip that' warning. + * + * unset redraw_mob to prevent the mob icons from being redrawn at the end. + * + * Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it + * + * set indirect_action to allow insertions into "soft" locked objects, things that are easily opened by the owning mob + */ +/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE, initial = FALSE, indirect_action = FALSE) + if(!istype(W) || QDELETED(W)) //This qdeleted is to prevent stupid behavior with things that qdel during init, like say stacks + return FALSE + if(!W.mob_can_equip(src, slot, disable_warning, bypass_equip_delay_self, indirect_action = indirect_action)) + if(qdel_on_fail) + qdel(W) + else if(!disable_warning) + to_chat(src, span_warning("You are unable to equip that!")) + return FALSE + equip_to_slot(W, slot, initial, redraw_mob, indirect_action = indirect_action) //This proc should not ever fail. + return TRUE + +/** + * Actually equips an item to a slot (UNSAFE) + * + * This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on + * whether you can or can't equip need to be done before! Use mob_can_equip() for that task. + * + *In most cases you will want to use equip_to_slot_if_possible() + */ +/mob/proc/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) + return + +/** + * Equip an item to the slot or delete + * + * This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to + * equip people when the round starts and when events happen and such. + * + * Also bypasses equip delay checks, since the mob isn't actually putting it on. + * Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it + * set indirect_action to allow insertions into "soft" locked objects, things that are easily opened by the owning mob + */ +/mob/proc/equip_to_slot_or_del(obj/item/W, slot, initial = FALSE, indirect_action = FALSE) + return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE, initial, indirect_action) + +/** + * Auto equip the passed in item the appropriate slot based on equipment priority + * + * puts the item "W" into an appropriate slot in a human's inventory + * + * returns 0 if it cannot, 1 if successful + */ +/mob/proc/equip_to_appropriate_slot(obj/item/W, qdel_on_fail = FALSE, indirect_action = FALSE, blacklist, initial) //SKYRAT EDIT CHANGE + + if(!istype(W)) + return FALSE + var/slot_priority = W.slot_equipment_priority + + if(!slot_priority) + slot_priority = list( \ + ITEM_SLOT_BACK, ITEM_SLOT_ID,\ + ITEM_SLOT_UNDERWEAR,\ + ITEM_SLOT_SOCKS,\ + ITEM_SLOT_SHIRT,\ + ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ + ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ + ITEM_SLOT_FEET, ITEM_SLOT_WRISTS, ITEM_SLOT_GLOVES,\ + ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT,\ + ITEM_SLOT_EYES,\ + ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ + ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\ + ITEM_SLOT_DEX_STORAGE\ + ) + + //SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION + /* + for(var/slot in slot_priority) + if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, FALSE)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE; + */ + if (blacklist) + slot_priority -= blacklist + for(var/slot in slot_priority) + if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, initial, indirect_action = indirect_action)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE; + //SKYRAT EDIT CHANGE END + return TRUE + + if(qdel_on_fail) + qdel(W) + return FALSE /** * Reset the attached clients perspective (viewpoint) * From 539f9474242d3fd1913bee1bb50a069249ca00b0 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sat, 13 Jul 2024 15:17:13 -0300 Subject: [PATCH 002/117] awesome --- code/__DEFINES/hud.dm | 12 +- code/__DEFINES/mobs.dm | 58 ++-- code/_onclick/hud/hud.dm | 50 ++- code/_onclick/hud/human.dm | 127 +++++++- .../subsystem/sprite_accessories.dm | 2 + code/datums/components/caltrop.dm | 6 +- code/datums/components/tackle.dm | 4 + code/datums/outfit.dm | 13 +- code/game/objects/items.dm | 27 +- code/game/objects/structures/dresser.dm | 2 + .../antagonists/changeling/changeling.dm | 16 +- .../antagonists/highlander/highlander.dm | 2 +- .../traitor/contractor/syndicate_contract.dm | 20 ++ code/modules/antagonists/wizard/wizard.dm | 2 +- code/modules/mob/inventory.dm | 10 +- code/modules/mob/living/carbon/carbon.dm | 2 +- .../mob/living/carbon/human/_species.dm | 40 ++- .../mob/living/carbon/human/examine.dm | 28 +- code/modules/mob/living/carbon/human/human.dm | 15 + .../mob/living/carbon/human/human_defines.dm | 10 + .../mob/living/carbon/human/human_say.dm | 19 +- .../living/carbon/human/human_update_icons.dm | 303 +++++++++++++++++- .../mob/living/carbon/human/inventory.dm | 97 +++++- code/modules/mob/living/carbon/human/life.dm | 14 + code/modules/mob/living/carbon/inventory.dm | 4 +- .../code/game/objects/items/holy_weapons.dm | 2 +- .../mob/living/carbon/human/species.dm | 6 +- .../mob/living/carbon/human/species.dm | 3 +- 28 files changed, 811 insertions(+), 83 deletions(-) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index e762b406d1eb4..ac51e395afa29 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -100,12 +100,20 @@ #define ui_iclothing "WEST:6,SOUTH+1:7" #define ui_oclothing "WEST+1:8,SOUTH+1:7" #define ui_gloves "WEST+2:10,SOUTH+1:7" -#define ui_glasses "WEST:6,SOUTH+3:11" +#define ui_glasses "WEST+2:10,SOUTH+2:9" //skyrat edit #define ui_mask "WEST+1:8,SOUTH+2:9" -#define ui_ears "WEST+2:10,SOUTH+2:9" +#define ui_ears "WEST+2:10,SOUTH+3:11" //skyrat edit #define ui_neck "WEST:6,SOUTH+2:9" #define ui_head "WEST+1:8,SOUTH+3:11" +// Extra inventory +#define ui_inventory_extra "WEST:6,SOUTH+3:11" +#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_ears_extra "WEST+2:10,SOUTH+4:13" +#define ui_wrists "WEST+1:8,SOUTH+4:13" + //Generic living #define ui_living_pull "EAST-1:28,CENTER-3:15" #define ui_living_healthdoll "EAST-1:28,CENTER-1:15" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index d113a5a10c4eb..a839bc6d820db 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -439,6 +439,12 @@ #define OFFSET_HELD "held" #define OFFSET_ACCESSORY "accessory" // Skyrat edit - addition #define OFFSET_HAIR "hair" // Skyrat edit - addition - Akulas +//skyrat edit +#define OFFSET_UNDERWEAR "underwear" +#define OFFSET_SOCKS "socks" +#define OFFSET_SHIRT "shirt" +#define OFFSET_WRISTS "wrist" +// //MINOR TWEAKS/MISC //#define AGE_MIN 17 //youngest a character can be //ORIGINAL @@ -685,49 +691,57 @@ 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 41 // SKYRAT EDIT CHANGE - ORIGINAL: 35 +#define TOTAL_LAYERS 46 // SKYRAT EDIT CHANGE - ORIGINAL: 35 /// Mutations layer - Tk headglows, cold resistance glow, etc -#define MUTATIONS_LAYER 41 // SKYRAT EDIT CHANGE - ORIGINAL: 35 +#define MUTATIONS_LAYER 46 // SKYRAT EDIT CHANGE - ORIGINAL: 35 /// Mutantrace features (tail when looking south) that must appear behind the body parts -#define BODY_BEHIND_LAYER 40 // SKYRAT EDIT CHANGE - ORIGINAL: 34 +#define BODY_BEHIND_LAYER 45 // 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 39 // SKYRAT EDIT CHANGE - ORIGINAL: 33 +#define BODYPARTS_LOW_LAYER 44 // SKYRAT EDIT CHANGE - ORIGINAL: 33 /// Layer for most bodyparts, appears above BODYPARTS_LOW_LAYER and below BODYPARTS_HIGH_LAYER -#define BODYPARTS_LAYER 38 // SKYRAT EDIT CHANGE - ORIGINAL: 32 +#define BODYPARTS_LAYER 43 // SKYRAT EDIT CHANGE - ORIGINAL: 32 /// Mutantrace features (snout, body markings) that must appear above the body parts -#define BODY_ADJ_LAYER 37 // SKYRAT EDIT CHANGE - ORIGINAL: 31 +#define BODY_ADJ_LAYER 42 // SKYRAT EDIT CHANGE - ORIGINAL: 31 /// Underwear, undershirts, socks, eyes, lips(makeup) -#define BODY_LAYER 36 // SKYRAT EDIT CHANGE - ORIGINAL: 30 +#define BODY_LAYER 41 // SKYRAT EDIT CHANGE - ORIGINAL: 30 /// Mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) -#define FRONT_MUTATIONS_LAYER 35 // SKYRAT EDIT CHANGE - ORIGINAL: 29 +#define FRONT_MUTATIONS_LAYER 40 // SKYRAT EDIT CHANGE - ORIGINAL: 29 /// Damage indicators (cuts and burns) -#define DAMAGE_LAYER 34 // SKYRAT EDIT CHANGE - ORIGINAL: 28 +#define DAMAGE_LAYER 39 // 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 33 +#define BODY_FRONT_UNDER_CLOTHES 38 // SKYRAT EDIT ADDITION END /// Jumpsuit clothing layer -#define UNIFORM_LAYER 32 // SKYRAT EDIT CHANGE - ORIGINAL: 27 +#define UNIFORM_LAYER 37 // SKYRAT EDIT CHANGE - ORIGINAL: 27 +// undies +#define UNDERWEAR_LAYER 36 +#define SOCKS_LAYER 35 +#define SHIRT_LAYER 34 +// undies // SKYRAT EDIT ADDITION BEGIN - cursed layers under clothing -#define ANUS_LAYER 31 -#define VAGINA_LAYER 30 -#define PENIS_LAYER 29 -#define NIPPLES_LAYER 28 -#define BANDAGE_LAYER 27 +#define ANUS_LAYER 33 +#define VAGINA_LAYER 32 +#define PENIS_LAYER 31 +#define NIPPLES_LAYER 30 +#define BANDAGE_LAYER 29 //SKYRAT EDIT ADDITION END /// ID card layer -#define ID_LAYER 26 +#define ID_LAYER 28 /// ID card layer (might be deprecated) -#define ID_CARD_LAYER 25 +#define ID_CARD_LAYER 27 /// Layer for bodyparts that should appear above every other bodypart - Currently only used for hands -#define BODYPARTS_HIGH_LAYER 24 +#define BODYPARTS_HIGH_LAYER 26 /// Gloves layer -#define GLOVES_LAYER 23 +#define GLOVES_LAYER 25 +/// Wrists layer +#define WRISTS_LAYER 24 /// Shoes layer -#define SHOES_LAYER 22 +#define SHOES_LAYER 23 /// Layer for masks that are worn below ears and eyes (like Balaclavas) (layers below hair, use flagsinv=HIDEHAIR as needed) -#define LOW_FACEMASK_LAYER 21 +#define LOW_FACEMASK_LAYER 22 /// Ears layer (Spessmen have ears? Wow) +#define EARS_EXTRA_LAYER 21 #define EARS_LAYER 20 /// Layer for neck apperal that should appear below the suit slot (like neckties) #define LOW_NECK_LAYER 19 diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 710c8103d9b69..353afe3f8c763 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -32,6 +32,20 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( //SKYRAT EDIT - ADDITION - ERP ICONS FIX - END +// Extra inventory + +GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( + 'icons/mob/screen_midnight.dmi' = 'sandcode/icons/mob/screen_midnight.dmi', + 'icons/mob/screen_retro.dmi' = 'sandcode/icons/mob/screen_retro.dmi', + 'icons/mob/screen_plasmafire.dmi' = 'sandcode/icons/mob/screen_plasmafire.dmi', + 'icons/mob/screen_slimecore.dmi' = 'sandcode/icons/mob/screen_slimecore.dmi', + 'icons/mob/screen_operative.dmi' = 'sandcode/icons/mob/screen_operative.dmi', + 'icons/mob/screen_clockwork.dmi' = 'sandcode/icons/mob/screen_clockwork.dmi', + 'sandcode/icons/mob/screen_liteweb.dmi' = 'sandcode/icons/mob/screen_liteweb.dmi' +)) + +// + /proc/ui_style2icon(ui_style) return GLOB.available_ui_styles[ui_style] || GLOB.available_ui_styles[GLOB.available_ui_styles[1]] @@ -42,12 +56,22 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( //SKYRAT EDIT - ADDITION - ERP ICONS FIX - END +// Extra inventory + +/proc/extra_inventory_ui_style(ui_style) + return GLOB.extra_inventory_ui_styles[ui_style] || GLOB.extra_inventory_ui_styles[GLOB.extra_inventory_ui_styles[1]] + +// + /datum/hud var/mob/mymob var/hud_shown = TRUE //Used for the HUD toggle (F12) var/hud_version = HUD_STYLE_STANDARD //Current displayed version of the HUD var/inventory_shown = FALSE //Equipped item inventory + // Extra inventory + var/extra_shown = FALSE + // var/hotkey_ui_hidden = FALSE //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) var/atom/movable/screen/ammo_counter //SKYRAT EDIT ADDITION @@ -68,6 +92,9 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( var/list/static_inventory = list() //the screen objects which are static var/list/toggleable_inventory = list() //the screen objects which can be hidden + // Extra inventory + var/list/extra_inventory = list() //equipped item screens that don't show up even if using the initial toggle + // var/list/atom/movable/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys var/list/infodisplay = list() //the screen objects that display mob info (health, alien plasma, etc...) /// Screen objects that never exit view. @@ -258,6 +285,9 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( hand_slots.Cut() QDEL_LIST(toggleable_inventory) + // Extra inventory + QDEL_LIST(extra_inventory) + // QDEL_LIST(hotkeybuttons) throw_icon = null QDEL_LIST(infodisplay) @@ -362,6 +392,10 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( screenmob.client.screen += static_inventory if(toggleable_inventory.len && screenmob.hud_used && screenmob.hud_used.inventory_shown) screenmob.client.screen += toggleable_inventory + // Extra inventory + if(extra_inventory.len && screenmob.hud_used && screenmob.hud_used.extra_shown) + screenmob.client.screen += extra_inventory + // if(hotkeybuttons.len && !hotkey_ui_hidden) screenmob.client.screen += hotkeybuttons if(infodisplay.len) @@ -380,6 +414,10 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( screenmob.client.screen -= static_inventory if(toggleable_inventory.len) screenmob.client.screen -= toggleable_inventory + // Extra inventory + if(extra_inventory.len) + screenmob.client.screen -= extra_inventory + // if(hotkeybuttons.len) screenmob.client.screen -= hotkeybuttons if(infodisplay.len) @@ -402,6 +440,10 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( screenmob.client.screen -= static_inventory if(toggleable_inventory.len) screenmob.client.screen -= toggleable_inventory + // Extra inventory + if(extra_inventory.len) + screenmob.client.screen -= extra_inventory + // if(hotkeybuttons.len) screenmob.client.screen -= hotkeybuttons if(infodisplay.len) @@ -453,6 +495,11 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( /datum/hud/proc/hidden_inventory_update() return +// Extra inventory +/datum/hud/proc/extra_inventory_update() + return +// + /datum/hud/proc/persistent_inventory_update(mob/viewer) if(!mymob) return @@ -462,7 +509,8 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( if (initial(ui_style) || ui_style == new_ui_style) return - for(var/atom/item in static_inventory + toggleable_inventory + hotkeybuttons + infodisplay + always_visible_inventory + inv_slots) + // Extra inventory added + for(var/atom/item in static_inventory + toggleable_inventory + extra_inventory + hotkeybuttons + infodisplay + always_visible_inventory + inv_slots) if (item.icon == ui_style) item.icon = new_ui_style diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 39cb742d672bd..506852150768c 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -17,11 +17,44 @@ if(usr.hud_used.inventory_shown && targetmob.hud_used) usr.hud_used.inventory_shown = FALSE usr.client.screen -= targetmob.hud_used.toggleable_inventory + // Extra inventory + usr.client.screen -= targetmob.hud_used.extra_inventory + // else usr.hud_used.inventory_shown = TRUE usr.client.screen += targetmob.hud_used.toggleable_inventory + // Extra inventory + if(usr.hud_used.extra_shown) + usr.client.screen += targetmob.hud_used.extra_inventory + // targetmob.hud_used.hidden_inventory_update(usr) + // Extra inventory + targetmob.hud_used.extra_inventory_update(usr) + // + +//skyrat edit +/obj/screen/human/toggle/extra + name = "toggle extra" + icon_state = "toggle_extra" + +/atom/movable/screen/human/toggle/extra/Click() + var/mob/targetmob = usr + + if(isobserver(usr)) + if(ishuman(usr.client.eye) && (usr.client.eye != usr)) + var/mob/M = usr.client.eye + targetmob = M + + if(usr.hud_used.extra_shown && targetmob.hud_used) + usr.hud_used.extra_shown = FALSE + usr.client.screen -= targetmob.hud_used.extra_inventory + else + usr.hud_used.extra_shown = TRUE + usr.client.screen += targetmob.hud_used.extra_inventory + + targetmob.hud_used.extra_inventory_update(usr) +// /atom/movable/screen/human/equip name = "equip" @@ -220,12 +253,12 @@ toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory(null, src) - inv_box.name = "ears" + inv_box.name = "left ear" // Extra inventory inv_box.icon = ui_style inv_box.icon_state = "ears" inv_box.icon_full = "template" inv_box.screen_loc = ui_ears - inv_box.slot_id = ITEM_SLOT_EARS + inv_box.slot_id = ITEM_SLOT_EARS_LEFT toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory(null, src) @@ -246,6 +279,53 @@ inv_box.slot_id = ITEM_SLOT_FEET toggleable_inventory += inv_box + // Extra inventory + using = new /atom/movable/screen/human/toggle/extra(null, src) + using.icon = extra_inventory_ui_style(ui_style) + using.screen_loc = ui_inventory_extra + toggleable_inventory += using + + inv_box = new /atom/movable/screen/inventory(null, src) + inv_box.name = "underwear" + inv_box.icon = extra_inventory_ui_style(ui_style) + inv_box.icon_state = "underwear" + inv_box.screen_loc = ui_boxers + inv_box.slot_id = ITEM_SLOT_UNDERWEAR + extra_inventory += inv_box + + inv_box = new /atom/movable/screen/inventory(null, src) + inv_box.name = "socks" + inv_box.icon = extra_inventory_ui_style(ui_style) + inv_box.icon_state = "socks" + inv_box.screen_loc = ui_socks + inv_box.slot_id = ITEM_SLOT_SOCKS + extra_inventory += inv_box + + inv_box = new /atom/movable/screen/inventory(null, src) + inv_box.name = "shirt" + inv_box.icon = extra_inventory_ui_style(ui_style) + inv_box.icon_state = "shirt" + inv_box.screen_loc = ui_shirt + inv_box.slot_id = ITEM_SLOT_SHIRT + 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) + inv_box.icon_state = "ears_extra" + inv_box.screen_loc = ui_ears_extra + inv_box.slot_id = ITEM_SLOT_EARS_RIGHT + extra_inventory += inv_box + + inv_box = new /atom/movable/screen/inventory(null, src) + inv_box.name = "wrists" + inv_box.icon = extra_inventory_ui_style(ui_style) + inv_box.icon_state = "wrists" + inv_box.screen_loc = ui_wrists + inv_box.slot_id = ITEM_SLOT_WRISTS + extra_inventory += inv_box + // + inv_box = new /atom/movable/screen/inventory(null, src) inv_box.name = "belt" inv_box.icon = ui_style @@ -298,7 +378,8 @@ ammo_counter = new /atom/movable/screen/ammo_counter(null, src) //SKYRAT EDIT ADDITION infodisplay += ammo_counter //SKYRAT EDIT ADDITION - for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) + // Extra inventory + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) if(inv.slot_id) inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv inv.update_appearance() @@ -312,7 +393,8 @@ if(!istype(H) || !H.dna.species) return var/datum/species/S = H.dna.species - for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) + // Extra inventory + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) if(inv.slot_id) if(S.no_equip_flags & inv.slot_id) inv.alpha = 128 @@ -374,6 +456,43 @@ if(H.head) screenmob.client.screen -= H.head +// Extra inventory +/datum/hud/human/extra_inventory_update(mob/viewer) + if(!mymob) + return + var/mob/living/carbon/human/H = mymob + + var/mob/screenmob = viewer || H + + if(screenmob.hud_used.extra_shown && screenmob.hud_used.inventory_shown && screenmob.hud_used.hud_shown) + if(H.ears_extra) + H.ears_extra.screen_loc = ui_ears_extra + screenmob.client.screen += H.ears_extra + if(H.underwear) + H.w_underwear.screen_loc = ui_boxers + screenmob.client.screen += H.underwear + if(H.socks) + H.socks.screen_loc = ui_socks + screenmob.client.screen += H.socks + if(H.shirt) + H.shirt.screen_loc = ui_shirt + screenmob.client.screen += H.shirt + if(H.wrists) + H.wrists.screen_loc = ui_wrists + screenmob.client.screen += H.wrists + else + if(H.ears_extra) + screenmob.client.screen -= H.ears_extra + if(H.underwear) + screenmob.client.screen -= H.underwear + if(H.socks) + screenmob.client.screen -= H.socks + if(H.shirt) + screenmob.client.screen -= H.shirt + if(H.wrists) + screenmob.client.screen -= H.wrists +// + /datum/hud/human/persistent_inventory_update(mob/viewer) if(!mymob) return diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm index ac83cc018287a..d1972a62f9d0e 100644 --- a/code/controllers/subsystem/sprite_accessories.dm +++ b/code/controllers/subsystem/sprite_accessories.dm @@ -101,6 +101,7 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity facial_hairstyles_male_list = facial_hair_lists[MALE_SPRITE_LIST] facial_hairstyles_female_list = facial_hair_lists[FEMALE_SPRITE_LIST] + /* var/underwear_lists = init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear) underwear_list = underwear_lists[DEFAULT_SPRITE_LIST] underwear_m = underwear_lists[MALE_SPRITE_LIST] @@ -117,6 +118,7 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity bra_m = bra_lists[MALE_SPRITE_LIST] bra_f = bra_lists[FEMALE_SPRITE_LIST] // SKYRAT EDIT ADDITION END + */ socks_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/socks)[DEFAULT_SPRITE_LIST] diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm index a863eb62d1fb9..217feaf56d85c 100644 --- a/code/datums/components/caltrop.dm +++ b/code/datums/components/caltrop.dm @@ -107,7 +107,11 @@ var/damage = rand(min_damage, max_damage) if(HAS_TRAIT(digitigrade_fan, TRAIT_LIGHT_STEP)) damage *= 0.75 - + // Extra inventory + if(digitigrade_fan.socks) + if(digitigrade_fan.socks.body_parts_covered & FEET) + damage *= 0.75 + // if(!(flags & CALTROP_SILENT) && !digitigrade_fan.has_status_effect(/datum/status_effect/caltropped)) digitigrade_fan.apply_status_effect(/datum/status_effect/caltropped) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index e17a6f85bde15..fda491eaeb6f9 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -394,6 +394,10 @@ if(isnull(tackle_target.wear_suit) && isnull(tackle_target.w_uniform)) // who honestly puts all of their effort into tackling a naked guy? defense_mod += 2 + // Extra inventory + if(isnull(tackle_target.underwear) && isnull(tackle_target.socks) && isnull(tackle_target.shirt)) + defense_mod += 1 + // if(tackle_target.mob_negates_gravity()) defense_mod += 1 if(HAS_TRAIT(tackle_target, TRAIT_BRAWLING_KNOCKDOWN_BLOCKED)) // riot armor and such diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 831fc28baf897..fad2c8b930177 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -232,16 +232,6 @@ EQUIP_OUTFIT_ITEM(wrists, ITEM_SLOT_WRISTS) // - if(undershirt) - user.undershirt = initial(undershirt.name) - - if(underwear) - user.underwear = initial(underwear.name) - - if(socks) - user.socks = initial(socks.name) - - // SKYRAT EDIT ADDITION START - Underwear and bra split if(bra) user.bra = initial(bra.name) @@ -399,7 +389,8 @@ /// Return a list of all the types that are required to disguise as this outfit type /datum/outfit/proc/get_chameleon_disguise_info() - var/list/types = list(uniform, suit, back, belt, gloves, shoes, head, mask, neck, ears, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand) + var/list/types = list(uniform, suit, back, belt, gloves, shoes, head, mask, neck, ears, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand, + underwear, socks, shirt, ears_extra, wrists) // Extra inventory types += chameleon_extras types += skillchips list_clear_nulls(types) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 5ad05651e8e11..f72c1ea1d2c3e 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -236,6 +236,9 @@ /// Do we apply a click cooldown when resisting this object if it is restraining them? var/resist_cooldown = CLICK_CD_BREAKOUT + // Extra inventory + var/hide_underwear_examine = FALSE + /obj/item/Initialize(mapload) if(attack_verb_continuous) attack_verb_continuous = string_list(attack_verb_continuous) @@ -932,18 +935,6 @@ owner.update_worn_oversuit() if(flags & ITEM_SLOT_ICLOTHING) owner.update_worn_undersuit() - //skyrat edit - if(flags & ITEM_SLOT_UNDERWEAR) - owner.update_worn_underwear() - if(flags & ITEM_SLOT_SOCKS) - owner.update_worn_socks() - if(flags & ITEM_SLOT_SHIRT) - owner.update_worn_shirt() - if(flags & ITEM_SLOT_EARS) - owner.update_worn_ears_extra() - if(flags & ITEM_SLOT_WRISTS) - owner.update_worn_wrists() - // if(flags & ITEM_SLOT_GLOVES) owner.update_worn_gloves() if(flags & ITEM_SLOT_EYES) @@ -964,6 +955,18 @@ owner.update_worn_back() if(flags & ITEM_SLOT_NECK) owner.update_worn_neck() + // Extra inventory + if(flags & ITEM_SLOT_UNDERWEAR) + owner.update_worn_underwear() + if(flags & ITEM_SLOT_SOCKS) + owner.update_worn_socks() + if(flags & ITEM_SLOT_SHIRT) + owner.update_worn_shirt() + if(flags & ITEM_SLOT_EARS) + owner.update_worn_ears_extra() + if(flags & ITEM_SLOT_WRISTS) + owner.update_worn_wrists() + // ///Returns the temperature of src. If you want to know if an item is hot use this proc. /obj/item/proc/get_temperature() diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index feb9cff2f00c1..a74986c323158 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -21,6 +21,7 @@ /obj/structure/dresser/atom_deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) +/* The way dressers worked was never cool anyways /obj/structure/dresser/attack_hand(mob/user, list/modifiers) . = ..() if(.) @@ -81,3 +82,4 @@ add_fingerprint(dressing_human) dressing_human.update_body() +*/ diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index cef9e88b5d023..afd945c53516b 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -97,6 +97,13 @@ "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling/id, "s_store" = /obj/item/changeling, + + // Extra inventory + "underwear" = /obj/item/changeling, + "socks" = /obj/item/changeling, + "shirt" = /obj/item/changeling, + "ears_extra" = /obj/item/changeling, + "wrists" = /obj/item/changeling, ) /// A list of all memories we've stolen through absorbs. @@ -800,9 +807,16 @@ "belt" = ITEM_SLOT_BELT, "gloves" = ITEM_SLOT_GLOVES, "glasses" = ITEM_SLOT_EYES, - "ears" = ITEM_SLOT_EARS, + "ears" = ITEM_SLOT_EARS_LEFT, "wear_id" = ITEM_SLOT_ID, "s_store" = ITEM_SLOT_SUITSTORE, + + // Extra inventory + "underwear" = ITEM_SLOT_UNDERWEAR, + "socks" = ITEM_SLOT_SOCKS, + "shirt" = ITEM_SLOT_SHIRT, + "ears_extra" = ITEM_SLOT_EARS_RIGHT, + "wrists" = ITEM_SLOT_WRISTS, ) var/datum/dna/chosen_dna = chosen_profile.dna diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm index 077bd2158b8f6..31f1ad32b3fc4 100644 --- a/code/modules/antagonists/highlander/highlander.dm +++ b/code/modules/antagonists/highlander/highlander.dm @@ -57,7 +57,7 @@ H.regenerate_icons() H.revive(ADMIN_HEAL_ALL) H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), ITEM_SLOT_ICLOTHING) - H.equip_to_slot_or_del(new /obj/item/radio/headset/syndicate(H), ITEM_SLOT_EARS) + H.equip_to_slot_or_del(new /obj/item/radio/headset/syndicate(H), pick(ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT)) // Extra inventory H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), ITEM_SLOT_HEAD) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), ITEM_SLOT_FEET) H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), ITEM_SLOT_LPOCKET) diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm index 2c9d45e382dd4..059349bbf187d 100644 --- a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm @@ -109,6 +109,16 @@ continue //So all they're left with are shoes and uniform. if(person_contents == human_sent.shoes) continue + + // Extra inventory - and underwear + if(person_contents == human_sent.underwear) + continue + if(person_contents == human_sent.socks) + continue + if(person_contents == human_sent.shirt) + continue + if(person_contents == human_sent.wrists) // once wrists actually have a danger item, you have my blessing to remove + continue person_sent.transferItemToLoc(person_contents) victim_belongings.Add(WEAKREF(person_contents)) @@ -242,6 +252,16 @@ continue if(belonging == human_victim.shoes) continue + + // Extra inventory - and underwear + if(belonging == human_victim.underwear) + continue + if(belonging == human_victim.socks) + continue + if(belonging == human_victim.shirt) + continue + if(belonging == human_victim.wrists) // once wrists actually have a danger item, you have my blessing to remove + continue belonging.forceMove(dropoff_location) for(var/obj/item/item in victim_belongings) diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 3efb007ab6eaa..2415b2dea6a53 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -355,7 +355,7 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) if(!istype(master_mob) || !istype(H)) return if(master_mob.ears) - H.equip_to_slot_or_del(new master_mob.ears.type, ITEM_SLOT_EARS) + H.equip_to_slot_or_del(new master_mob.ears.type, pick(ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT)) if(master_mob.w_uniform) H.equip_to_slot_or_del(new master_mob.w_uniform.type, ITEM_SLOT_ICLOTHING) if(master_mob.shoes) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index d5abb01fec0a8..e51f3347db839 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -487,16 +487,22 @@ var/slot_priority = W.slot_equipment_priority if(!slot_priority) + // Extra inventory slot_priority = list( \ ITEM_SLOT_BACK, ITEM_SLOT_ID,\ + SLOT_W_UNDERWEAR,\ + SLOT_W_SOCKS,\ + SLOT_W_SHIRT,\ ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ - ITEM_SLOT_FEET, ITEM_SLOT_GLOVES,\ - ITEM_SLOT_EARS, ITEM_SLOT_EYES,\ + ITEM_SLOT_FEET, SLOT_WRISTS, ITEM_SLOT_GLOVES,\ + ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT, \ + ITEM_SLOT_EYES,\ ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\ ITEM_SLOT_DEX_STORAGE\ ) + // // SKYRAT EDIT ADDITION START - CUSTOMIZATION if (blacklist) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a18b0ae3a4c68..d48e52d4b02b7 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1252,7 +1252,7 @@ update_worn_mask() . = TRUE - if(!(obscured & ITEM_SLOT_EARS) && ears?.wash(clean_types)) + if(!(obscured & ITEM_SLOT_EARS_LEFT) && ears?.wash(clean_types)) update_worn_ears() . = TRUE diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 38405bb31b866..331b98d2e8de9 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -849,6 +849,16 @@ GLOBAL_LIST_EMPTY(features_by_species) if(H.num_hands < 2) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) + //extra inventory + if(ITEM_SLOT_WRISTS) + if(H.wrists) + return FALSE + if(!(I.slot_flags & ITEM_SLOT_WRISTS)) + return FALSE + if(num_arms < 2) + return FALSE + return equip_delay_self_check(I, H, bypass_equip_delay_self) + // if(ITEM_SLOT_FEET) if(H.num_legs < 2) return FALSE @@ -879,10 +889,38 @@ GLOBAL_LIST_EMPTY(features_by_species) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(ITEM_SLOT_EARS) + if(ITEM_SLOT_EARS_LEFT) + if(!H.get_bodypart(BODY_ZONE_HEAD)) + return FALSE + return equip_delay_self_check(I, H, bypass_equip_delay_self) + //extra inventory + if(ITEM_SLOT_EARS_RIGHT) + if(H.ears_extra) + return FALSE + if(!(I.slot_flags & ITEM_SLOT_EARS)) + return FALSE if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) + if(ITEM_SLOT_UNDERWEAR) + if(H.underwear) + return FALSE + if( !(I.slot_flags & ITEM_SLOT_UNDERWEAR) ) + return FALSE + return equip_delay_self_check(I, H, bypass_equip_delay_self) + if(ITEM_SLOT_SOCKS) + if(H.socks) + return FALSE + if( !(I.slot_flags & ITEM_SLOT_SOCKS) ) + return FALSE + return equip_delay_self_check(I, H, bypass_equip_delay_self) + if(ITEM_SLOT_SHIRT) + if(H.shirt) + return FALSE + if( !(I.slot_flags & ITEM_SLOT_SHIRT) ) + return FALSE + 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) if(ITEM_SLOT_ID) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 2bd4867166c1e..a3a2d0c482e3f 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -74,6 +74,12 @@ accessory_message = " with [english_list(accessories)] attached" . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_message]." + //shirt + if(shirt && !(obscured & ITEM_SLOT_SHIRT) && !(shirt.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [shirt.get_examine_string(user)]." + //underwear + if(underwear && !(obscured & ITEM_SLOT_UNDERWEAR) && !(underwear.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [underwear.get_examine_string(user)]." //head if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." @@ -100,6 +106,10 @@ if(num_hands) . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a "]blood-stained hand[num_hands > 1 ? "s" : ""]!") + //wrists + if(wrists && !(obscured & ITEM_SLOT_WRISTS) && !(wrists.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [wrists.get_examine_string(user)]." + //handcuffed? if(handcuffed) if(istype(handcuffed, /obj/item/restraints/handcuffs/cable)) @@ -115,6 +125,10 @@ if(shoes && !(obscured & ITEM_SLOT_FEET) && !(shoes.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet." + //socks + if(socks && !(obscured & ITEM_SLOT_SOCKS) && !(socks.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [socks.get_examine_string(user)] on [t_his] feet." + //mask if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !(wear_mask.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face." @@ -132,8 +146,18 @@ . += "[t_His] eyes are bloodshot!" //ears - if(ears && !(obscured & ITEM_SLOT_EARS) && !(ears.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears." + if(ears && !(obscured & ITEM_SLOT_EARS_LEFT) && !(ears.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] left ear." // extra inventory + + //ears extra + if(ears_extra && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [ears_extra.get_examine_string(user)] on [t_his] right ear." + + //wearing two ear items makes you look like an idiot + if((istype(ears, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_LEFT) && !(ears.item_flags & EXAMINE_SKIP)) && (istype(ears_extra, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP))) + . += span_warning("[t_He] looks quite tacky wearing both \an [ears.name] and \an [ears_extra.name] on [t_his] head.") + + // //ID if(wear_id && !(wear_id.item_flags & EXAMINE_SKIP)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 3a2d406afc1b3..e59e1363f68b8 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -622,6 +622,21 @@ if(!is_mouth_covered() && clean_lips()) . = TRUE + // Extra inventory + if(!(obcured & ITEM_SLOT_UNDERWEAR) && underwear?.wash(clean_types)) + update_worn_underwear() + . = TRUE + if(!(obscured & ITEM_SLOT_SOCKS) && socks?.wash(clean_types)) + update_worn_socks() + . = TRUE + if(!(obscured & ITEM_SLOT_SHIRT) && shirt?.wash(clean_types)) + update_worn_shirt() + . = TRUE + if(!(obscured & ITEM_SLOT_WRISTS) && wrists?.wash(clean_types)) + update_worn_wrists() + . = TRUE + // + // Wash hands if exposed if(!gloves && (clean_types & CLEAN_TYPE_BLOOD) && blood_in_hands > 0 && !(obscured & ITEM_SLOT_GLOVES)) blood_in_hands = 0 diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 1e6db319eaa03..35b46a4d6f5db 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -56,10 +56,12 @@ var/physique = MALE //consider updating /mob/living/carbon/human/copy_clothing_prefs() if adding more of these + /* var/underwear = "Nude" //Which underwear the player wants var/underwear_color = COLOR_BLACK var/undershirt = "Nude" //Which undershirt the player wants var/socks = "Nude" //Which socks the player wants + */ var/backpack = DBACKPACK //Which backpack type the player has chosen. var/jumpsuit_style = PREF_SUIT //suit/skirt @@ -75,6 +77,14 @@ var/obj/item/l_store = null var/obj/item/s_store = null + //Extra inventory + var/obj/item/underwear = null + var/obj/item/socks = null + var/obj/item/shirt = null + var/obj/item/ears_extra = null + var/obj/item/wrists = null + // + var/special_voice = "" // For changing our voice. Used by a symptom. var/datum/physiology/physiology diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index 00b703c6c7140..8e6934ffc0c4a 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -80,16 +80,19 @@ return if(message_mods[MODE_HEADSET]) - if(ears) - ears.talk_into(src, message, , spans, language, message_mods) - return ITALICS | REDUCE_RANGE + if(ears && ears.talk_into(src, message, , spans, language, message_mods)) + return ITALICS | REDUCE_RANGE + if(ears_extra && ears_extra.talk_into(src, message, , spans, language, message_mods)) + return ITALICS | REDUCE_RANGE else if(message_mods[RADIO_EXTENSION] == MODE_DEPARTMENT) - if(ears) - ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) - return ITALICS | REDUCE_RANGE + if(ears && ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods)) + return ITALICS | REDUCE_RANGE + if(ears_extra && ears_extra.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods)) + return ITALICS | REDUCE_RANGE else if(GLOB.radiochannels[message_mods[RADIO_EXTENSION]]) - if(ears) - ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) + if(ears && ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods)) + return ITALICS | REDUCE_RANGE + if(ears_extra && ears_extra.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods)) return ITALICS | REDUCE_RANGE return FALSE 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 59abe696d5e40..0ffe6743502dd 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -51,11 +51,16 @@ There are several things that need to be remembered: if(!..()) update_worn_undersuit() + update_worn_shirt() + update_worn_underwear() update_worn_id() update_worn_glasses() update_worn_gloves() + update_worn_wrists() update_worn_ears() + update_worn_ears_extra() update_worn_shoes() + update_worn_socks() update_suit_storage() update_worn_mask() update_worn_head() @@ -163,6 +168,136 @@ There are several things that need to be remembered: update_mutant_bodyparts() +/mob/living/carbon/human/update_worn_underwear(update_obscured = TRUE) + remove_overlay(UNDERWEAR_LAYER) + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_UNDERWEAR) + 1] + inv.update_icon() + + if(istype(underwear, /obj/item/clothing/underwear)) + var/obj/item/clothing/underwear/undies = w_underwear + update_hud_underwear(undies) + + if(update_obscured) + update_obscured_slots(undies.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_UNDERWEAR) + return + + var/target_overlay = undies.icon_state + var/mutable_appearance/underwear_overlay + var/icon_file = 'icons/mob/clothing/underwear.dmi' + var/handled_by_bodyshape = TRUE + var/woman + var/digi + var/female_sprite_flags = undies.female_sprite_flags + var/mutant_styles = NONE + if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undies.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + icon_file = undies.worn_icon_digi || DIGITIGRADE_UNDERWEAR_FILE + digi = TRUE + + else if(bodyshape & BODYSHAPE_CUSTOM) + icon_file = dna.species.generate_custom_worn_icon(OFFSET_UNDERWEAR, underwear, src) + + if(!dna.species.no_gender_shaping && dna.species.sexes && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_UNDERWEAR)) + woman = TRUE + if(digi) + mutant_styles |= STYLE_DIGI + if(!(female_sprite_flags & FEMALE_UNDERWEAR_DIGI_FULL)) + female_sprite_flags &= ~FEMALE_UNDERWEAR_FULL + female_sprite_flags |= FEMALE_UNDERWEAR_TOP_ONLY + + if(!icon_exists(icon_file, RESOLVE_ICON_STATE(undies))) + icon_file = DEFAULT_UNDERWEAR_FILE + handled_by_bodyshape = FALSE + + if(bodyshape & BODYSHAPE_TAUR) + if(istype(undies) && undies.gets_cropped_on_taurs) + mutant_styles |= get_taur_mode() + + underwear_overlay = undies.build_worn_icon( + default_layer = UNDERWEAR_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, + ) + + var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) + my_chest?.worn_underwear_offset?.apply_offset(underwear_overlay) + overlays_standing[UNDERWEAR_LAYER] = underwear_overlay + apply_overlay(UNDERWEAR_LAYER) + + update_mutant_bodyparts() + +/mob/living/carbon/human/update_worn_shirt(update_obscured = TRUE) + remove_overlay(SHIRT_LAYER) + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SHIRT) + 1] + inv.update_icon() + + if(istype(shirt, /obj/item/clothing/shirt)) + var/obj/item/clothing/shirt/undershirt = w_shirt + update_hud_shirt(undershirt) + + if(update_obscured) + update_obscured_slots(undershirt.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SHIRT) + return + + var/target_overlay = undershirt.icon_state + var/mutable_appearance/shirt_overlay + var/icon_file = 'icons/mob/clothing/shirt.dmi' + var/handled_by_bodyshape = TRUE + var/woman + var/digi + var/female_sprite_flags = undershirt.female_sprite_flags + var/mutant_styles = NONE + if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undershirt.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + icon_file = undershirt.worn_icon_digi || DIGITIGRADE_SHIRT_FILE + digi = TRUE + + else if(bodyshape & BODYSHAPE_CUSTOM) + icon_file = dna.species.generate_custom_worn_icon(OFFSET_SHIRT, shirt, src) + + if(!dna.species.no_gender_shaping && dna.species.sexes && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_SHIRT)) + woman = TRUE + if(digi) + mutant_styles |= STYLE_DIGI + if(!(female_sprite_flags & FEMALE_SHIRT_DIGI_FULL)) + female_sprite_flags &= ~FEMALE_SHIRT_FULL + female_sprite_flags |= FEMALE_SHIRT_TOP_ONLY + + if(!icon_exists(icon_file, RESOLVE_ICON_STATE(undershirt))) + icon_file = DEFAULT_SHIRT_FILE + handled_by_bodyshape = FALSE + + if(bodyshape & BODYSHAPE_TAUR) + if(istype(undershirt) && undershirt.gets_cropped_on_taurs) + mutant_styles |= get_taur_mode() + + shirt_overlay = undershirt.build_worn_icon( + default_layer = SHIRT_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, + ) + + var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) + my_chest?.worn_shirt_offset?.apply_offset(shirt_overlay) + overlays_standing[SHIRT_LAYER] = shirt_overlay + apply_overlay(SHIRT_LAYER) + + update_mutant_bodyparts() + /mob/living/carbon/human/update_worn_id(update_obscured = TRUE) remove_overlay(ID_LAYER) @@ -248,6 +383,40 @@ There are several things that need to be remembered: overlays_standing[GLOVES_LAYER] = gloves_overlay apply_overlay(GLOVES_LAYER) +//Extra inventory +/mob/living/carbon/human/update_worn_wrists(update_obscured = TRUE) + remove_overlay(WRISTS_LAYER) + + if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1]) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1] + inv.update_icon() + + if(wrists) + var/obj/item/worn_item = wrists + update_hud_wrists(worn_item) + + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_GLOVES) + return + + var/icon_file = 'icons/mob/clothing/wrists.dmi' + + // SKYRAT EDIT ADDITION + var/mutant_override = FALSE + if(bodyshape & BODYSHAPE_CUSTOM) + var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_WRISTS, wrists, src) + if(species_icon_file) + icon_file = species_icon_file + mutant_override = TRUE + // SKYRAT EDIT END + + var/mutable_appearance/wrists_overlay = wrists.build_worn_icon(default_layer = WRISTS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + + overlays_standing[WRISTS_LAYER] = wrists_overlay + apply_overlay(WRISTS_LAYER) +// /mob/living/carbon/human/update_worn_glasses(update_obscured = TRUE) remove_overlay(GLASSES_LAYER) @@ -299,7 +468,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS) + 1] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_LEFT) + 1] inv.update_icon() if(ears) @@ -309,7 +478,7 @@ There are several things that need to be remembered: if(update_obscured) update_obscured_slots(worn_item.flags_inv) - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS_LEFT) return var/icon_file = 'icons/mob/clothing/ears.dmi' @@ -332,6 +501,47 @@ There are several things that need to be remembered: overlays_standing[EARS_LAYER] = ears_overlay apply_overlay(EARS_LAYER) +/mob/living/carbon/human/update_worn_ears_extra(update_obscured = TRUE) + remove_overlay(EARS_EXTRA_LAYER) + + var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) + if(isnull(my_head)) //decapitated + return + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_RIGHT) + 1] + inv.update_icon() + + if(ears) + var/obj/item/worn_item = ears + update_hud_ears(worn_item) + + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS_RIGHT) + return + + var/icon_file = 'icons/mob/clothing/ears.dmi' + + // SKYRAT EDIT ADDITION + var/mutant_override = FALSE + if(bodyshape & BODYSHAPE_CUSTOM) + var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_EARS, ears, src) + if(species_icon_file) + icon_file = species_icon_file + mutant_override = TRUE + // SKYRAT EDIT END + + var/mutable_appearance/ears_overlay = ears.build_worn_icon(default_layer = EARS_EXTRA_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + + // SKYRAT EDIT ADDITION + if(!mutant_override) + my_head.worn_ears_offset?.apply_offset(ears_overlay) + // SKYRAT EDIT END + overlays_standing[EARS_EXTRA_LAYER] = ears_overlay + apply_overlay(EARS_EXTRA_LAYER) + /mob/living/carbon/human/update_worn_neck(update_obscured = TRUE) remove_overlay(NECK_LAYER) @@ -437,6 +647,65 @@ There are several things that need to be remembered: update_body_parts() +/mob/living/carbon/human/update_worn_socks(update_obscured = TRUE) + remove_overlay(SOCKS_LAYER) + + if(num_legs < 2) + return + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SOCKS) + 1] + inv.update_icon() + + if(socks) + var/obj/item/worn_item = socks + update_hud_socks(worn_item) + + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SOCKS) + return + + var/icon_file = DEFAULT_SOCKS_FILE + + // SKYRAT EDIT ADDITION START + var/mutant_override = FALSE + + if((bodyshape & BODYSHAPE_DIGITIGRADE) && (worn_item.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG) + if(leg.limb_id == "digitigrade" || leg.bodyshape & BODYSHAPE_DIGITIGRADE)//Snowflakey and bad. But it makes it look consistent. + icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SOCKS_FILE // SKYRAT EDIT CHANGE + mutant_override = TRUE // SKYRAT EDIT ADDITION + if(!mutant_override && bodyshape & BODYSHAPE_CUSTOM) + var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_SOCKS, socks, src) + if(species_icon_file) + icon_file = species_icon_file + mutant_override = TRUE + if(bodyshape & BODYSHAPE_HIDE_SHOES) + return // We just don't want socks that float if we're not displaying legs (useful for taurs, for now) + // SKYRAT EDIT END + + var/mutable_appearance/socks_overlay = socks.build_worn_icon(default_layer = SOCKS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + + if(!socks_overlay) + return + + var/feature_y_offset = 0 + for (var/body_zone in list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + var/obj/item/bodypart/leg/my_leg = get_bodypart(body_zone) + if(isnull(my_leg)) + continue + var/list/foot_offset = my_leg.worn_foot_offset?.get_offset() + if (foot_offset && foot_offset["y"] > feature_y_offset) + feature_y_offset = foot_offset["y"] + + socks_overlay.pixel_y += feature_y_offset + overlays_standing[SOCKS_LAYER] = socks_overlay + + apply_overlay(SOCKS_LAYER) + + update_body_parts() /mob/living/carbon/human/update_suit_storage(update_obscured = TRUE) remove_overlay(SUIT_STORE_LAYER) @@ -758,6 +1027,18 @@ There are several things that need to be remembered: client.screen += worn_item update_observer_view(worn_item,TRUE) +/mob/living/carbon/human/proc/update_hud_shirt(obj/item/worn_item) + worn_item.screen_loc = ui_shirt + 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_underwear + 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_id(obj/item/worn_item) worn_item.screen_loc = ui_id if((client && hud_used?.hud_shown)) @@ -770,6 +1051,12 @@ There are several things that need to be remembered: client.screen += worn_item update_observer_view(worn_item,TRUE) +/mob/living/carbon/human/proc/update_hud_wrists(obj/item/worn_item) + worn_item.screen_loc = ui_wrists + 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_glasses(obj/item/worn_item) worn_item.screen_loc = ui_glasses if((client && hud_used) && (hud_used.inventory_shown && hud_used.hud_shown)) @@ -782,12 +1069,24 @@ There are several things that need to be remembered: client.screen += worn_item update_observer_view(worn_item,TRUE) +/mob/living/carbon/human/proc/update_hud_ears_extra(obj/item/worn_item) + worn_item.screen_loc = ui_ears_extra + 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_shoes(obj/item/worn_item) worn_item.screen_loc = ui_shoes if((client && hud_used) && (hud_used.inventory_shown && hud_used.hud_shown)) client.screen += worn_item update_observer_view(worn_item,TRUE) +/mob/living/carbon/human/proc/update_hud_socks(obj/item/worn_item) + worn_item.screen_loc = ui_socks + 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_s_store(obj/item/worn_item) worn_item.screen_loc = ui_sstore1 if(client && hud_used?.hud_shown) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 40dd1d4c05466..e9139b825734a 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -27,18 +27,34 @@ return belt if(ITEM_SLOT_ID) return wear_id - if(ITEM_SLOT_EARS) + if(ITEM_SLOT_EARS_LEFT) // Extra inventory return ears + // Extra inventory + if(ITEM_SLOT_EARS_RIGHT) + return ears_extra + // if(ITEM_SLOT_EYES) return glasses if(ITEM_SLOT_GLOVES) return gloves + // Extra inventory + if(SLOT_WRISTS) + return wrists + // if(ITEM_SLOT_FEET) return shoes if(ITEM_SLOT_OCLOTHING) return wear_suit if(ITEM_SLOT_ICLOTHING) return w_uniform + // Extra inventory + if(ITEM_SLOT_UNDERWEAR) + return underwear + if(ITEM_SLOT_SOCKS) + return socks + if(ITEM_SLOT_SHIRT) + return shirt + // if(ITEM_SLOT_LPOCKET) return l_store if(ITEM_SLOT_RPOCKET) @@ -55,7 +71,10 @@ return ITEM_SLOT_ID if(looking_for == ears) - return ITEM_SLOT_EARS + return ITEM_SLOT_EARS_LEFT + + if(looking_for == ears_extra) + return ITEM_SLOT_EARS_RIGHT if(looking_for == glasses) return ITEM_SLOT_EYES @@ -63,6 +82,9 @@ if(looking_for == gloves) return ITEM_SLOT_GLOVES + if(looking_for == wrists) + return ITEM_SLOT_WRISTS + if(looking_for == head) return ITEM_SLOT_HEAD @@ -75,6 +97,15 @@ if(looking_for == w_uniform) return ITEM_SLOT_ICLOTHING + if(looking_for == underwear) + return ITEM_SLOT_UNDERWEAR + + if(looking_for == shirt) + return ITEM_SLOT_SHIRT + + if(looking_for == wrists) + return ITEM_SLOT_WRISTS + if(looking_for == r_store) return ITEM_SLOT_RPOCKET @@ -94,13 +125,17 @@ legcuffed, wear_suit, gloves, + wrists, shoes, belt, wear_id, l_store, r_store, - w_uniform - ) + w_uniform, + w_underwear, + w_socks, + w_shirt, + ) // extra inventory /mob/living/carbon/human/proc/get_head_slots() return list( @@ -109,7 +144,8 @@ wear_neck, glasses, ears, - ) + ears_extra, + ) // extra inventory /mob/living/carbon/human/proc/get_storage_slots() return list( @@ -146,11 +182,16 @@ wear_id = equipping sec_hud_set_ID() update_worn_id() - if(ITEM_SLOT_EARS) + if(ITEM_SLOT_EARS_LEFT) if(ears) return ears = equipping update_worn_ears() + if(ITEM_SLOT_EARS_RIGHT) + if(ears_extra) + return + ears_extra = equipping + update_worn_ears_extra() if(ITEM_SLOT_EYES) if(glasses) return @@ -170,6 +211,11 @@ update_mob_action_buttons() //SKYRAT EDIT ADDITION END update_worn_gloves() + if(ITEM_SLOT_WRISTS) + if(wrists) + return + wrists = equipping + update_worn_wrists() if(ITEM_SLOT_FEET) if(shoes) return @@ -192,6 +238,21 @@ w_uniform = equipping update_suit_sensors() update_worn_undersuit() + if(ITEM_SLOT_UNDERWEAR) + if(underwear) + return + underwear = equipping + update_worn_underwear() + if(ITEM_SLOT_SHIRT) + if(shirt) + return + shirt = equipping + update_worn_shirt() + if(ITEM_SLOT_SOCKS) + if(socks) + return + socks = equipping + update_worn_socks() if(ITEM_SLOT_LPOCKET) l_store = equipping update_pockets() @@ -249,6 +310,24 @@ dropItemToGround(wear_id) if(belt && !can_equip(belt, ITEM_SLOT_BELT, TRUE, ignore_equipped = TRUE)) dropItemToGround(belt) + // Extra inventory + else if(I == underwear) + underwear = null + if(!QDELETED(src)) + update_worn_underwear() + else if(I == socks) + socks = null + if(!QDELETED(src)) + update_worn_socks() + else if(I == shirt) + shirt = null + if(!QDELETED(src)) + update_worn_shirt() + else if(I == wrists) + wrists = null + if(!QDELETED(src)) + update_worn_wrists() + // else if(I == gloves) //SKYRAT EDIT ADDITION - ERP UPDATE if(gloves.breakouttime) //when unequipping a straightjacket @@ -270,6 +349,12 @@ ears = null if(!QDELETED(src)) update_worn_ears() + // Extra inventory + else if(I == ears_extra) + ears_extra = null + if(!QDELETED(src)) + update_worn_ears_extra() + // else if(I == shoes) shoes = null if(!QDELETED(src)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d8119c6a5279a..90c1a2611f1b4 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -166,6 +166,20 @@ if(w_uniform) if(w_uniform.max_heat_protection_temperature && w_uniform.max_heat_protection_temperature >= temperature) thermal_protection_flags |= w_uniform.heat_protection + //skyrat edit + if(underwear) + if(underwear.max_heat_protection_temperature && underwear.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= underwear.heat_protection + if(socks) + if(socks.max_heat_protection_temperature && socks.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= socks.heat_protection + if(shirt) + if(shirt.max_heat_protection_temperature && shirt.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= shirt.heat_protection + if(wrists) + if(wrists.max_heat_protection_temperature && wrists.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= wrists.heat_protection + // if(shoes) if(shoes.max_heat_protection_temperature && shoes.max_heat_protection_temperature >= temperature) thermal_protection_flags |= shoes.heat_protection diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index e59a6328aa72e..f2b3739d0ed96 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -14,7 +14,7 @@ if(hidden_slots & HIDEEYES) obscured |= ITEM_SLOT_EYES if(hidden_slots & HIDEEARS) - obscured |= ITEM_SLOT_EARS + obscured |= ITEM_SLOT_EARS_LEFT if(hidden_slots & HIDEGLOVES) obscured |= ITEM_SLOT_GLOVES if(hidden_slots & HIDEJUMPSUIT) @@ -76,7 +76,7 @@ ITEM_SLOT_ICLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_EYES, - ITEM_SLOT_EARS, + ITEM_SLOT_EARS_LEFT, ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_FEET, diff --git a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm b/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm index f4fa02707f708..22971d9f13a4c 100644 --- a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm +++ b/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm @@ -123,7 +123,7 @@ throwforce = 0 attack_verb_simple = list("whipped", "repented", "lashed", "flagellated") attack_verb_continuous = list("whipped", "repented", "lashed", "flagellated") - slot_flags = ITEM_SLOT_BELT + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_WRISTS var/praying = FALSE var/deity_name = "Coderbus" // This is the default, hopefully won't actually appear if the religion subsystem is running properly diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm index e3c87270afc76..9efc5b4f684cd 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm @@ -14,8 +14,12 @@ ///Clothing offsets. If a species has a different body than other species, you can offset clothing so they look less weird. var/list/offset_features = list( OFFSET_UNIFORM = list(0,0), + OFFSET_UNDERWEAR = list(0,0), + OFFSET_SOCKS = list(0,0), + OFFSET_SHIRT = list(0,0), OFFSET_ID = list(0,0), OFFSET_GLOVES = list(0,0), + OFFSET_WRISTS = list(0,0), OFFSET_GLASSES = list(0,0), OFFSET_EARS = list(0,0), OFFSET_SHOES = list(0,0), @@ -29,4 +33,4 @@ OFFSET_NECK = list(0,0), OFFSET_ACCESSORY = list(0, 0), OFFSET_HAIR = list(0, 0), - ) + ) //Extra inventory 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 b18187e9fd679..8bbedbfe6ee4f 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 @@ -140,6 +140,7 @@ GLOBAL_LIST_EMPTY(customizable_races) //Underwear, Undershirts & Socks if(!HAS_TRAIT(species_human, TRAIT_NO_UNDERWEAR)) + /* if(species_human.underwear && !(species_human.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) var/datum/sprite_accessory/underwear/underwear = SSaccessories.underwear_list[species_human.underwear] var/mutable_appearance/underwear_overlay @@ -191,7 +192,7 @@ GLOBAL_LIST_EMPTY(customizable_races) if(!socks.use_static) socks_overlay.color = species_human.socks_color standing += socks_overlay - + */ if(standing.len) species_human.overlays_standing[BODY_LAYER] = standing From 68fe808727ca3025786d8008d11dcd5166d95453 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 17 Jul 2024 15:57:27 -0300 Subject: [PATCH 003/117] more things --- code/__DEFINES/inventory.dm | 2 +- code/__DEFINES/species_clothing_paths.dm | 14 + code/_onclick/hud/hud.dm | 13 +- code/_onclick/hud/human.dm | 28 +- .../subsystem/sprite_accessories.dm | 2 - code/datums/components/caltrop.dm | 2 +- code/datums/components/tackle.dm | 2 +- code/datums/outfit.dm | 2 +- .../antagonists/changeling/changeling.dm | 6 +- .../antagonists/clown_ops/bananium_bomb.dm | 2 +- .../traitor/contractor/syndicate_contract.dm | 12 +- code/modules/mob/inventory.dm | 8 +- .../mob/living/carbon/human/_species.dm | 8 +- .../mob/living/carbon/human/examine.dm | 12 +- code/modules/mob/living/carbon/human/human.dm | 6 +- .../mob/living/carbon/human/human_defines.dm | 8 +- .../living/carbon/human/human_update_icons.dm | 28 +- .../mob/living/carbon/human/inventory.dm | 39 +- code/modules/mob/living/carbon/human/life.dm | 18 +- code/modules/mob/mob_update_icons.dm | 34 ++ .../mob/living/carbon/human/species.dm | 2 +- .../modules/clothing/underwear/_underwear.dm | 36 ++ .../code/modules/clothing/underwear/boxers.dm | 125 ++++++ .../code/modules/clothing/underwear/shirts.dm | 358 ++++++++++++++++++ .../code/modules/clothing/underwear/socks.dm | 246 ++++++++++++ .../icons/hud/screen_clockwork.dmi | Bin 0 -> 17406 bytes .../icons/hud/screen_detective.dmi | Bin 0 -> 14949 bytes modular_zzplurt/icons/hud/screen_glass.dmi | Bin 0 -> 13882 bytes modular_zzplurt/icons/hud/screen_midnight.dmi | Bin 0 -> 26389 bytes .../icons/hud/screen_operative.dmi | Bin 0 -> 16740 bytes .../icons/hud/screen_plasmafire.dmi | Bin 0 -> 28452 bytes modular_zzplurt/icons/hud/screen_retro.dmi | Bin 0 -> 12781 bytes .../icons/hud/screen_slimecore.dmi | Bin 0 -> 26972 bytes .../icons/hud/screen_trasenknox.dmi | Bin 0 -> 15767 bytes .../icons/mob/clothing/underwear.dmi | Bin 0 -> 66200 bytes .../icons/mob/clothing/underwear_digi.dmi | Bin 0 -> 70353 bytes modular_zzplurt/icons/mob/clothing/wrists.dmi | Bin 0 -> 249 bytes tgstation.dme | 4 + 38 files changed, 916 insertions(+), 101 deletions(-) create mode 100644 modular_zzplurt/code/modules/clothing/underwear/_underwear.dm create mode 100644 modular_zzplurt/code/modules/clothing/underwear/boxers.dm create mode 100644 modular_zzplurt/code/modules/clothing/underwear/shirts.dm create mode 100644 modular_zzplurt/code/modules/clothing/underwear/socks.dm create mode 100644 modular_zzplurt/icons/hud/screen_clockwork.dmi create mode 100644 modular_zzplurt/icons/hud/screen_detective.dmi create mode 100644 modular_zzplurt/icons/hud/screen_glass.dmi create mode 100644 modular_zzplurt/icons/hud/screen_midnight.dmi create mode 100644 modular_zzplurt/icons/hud/screen_operative.dmi create mode 100644 modular_zzplurt/icons/hud/screen_plasmafire.dmi create mode 100644 modular_zzplurt/icons/hud/screen_retro.dmi create mode 100644 modular_zzplurt/icons/hud/screen_slimecore.dmi create mode 100644 modular_zzplurt/icons/hud/screen_trasenknox.dmi create mode 100644 modular_zzplurt/icons/mob/clothing/underwear.dmi create mode 100644 modular_zzplurt/icons/mob/clothing/underwear_digi.dmi create mode 100644 modular_zzplurt/icons/mob/clothing/wrists.dmi diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 9b194eaedf68f..e3392ac1a9223 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -85,7 +85,7 @@ DEFINE_BITFIELD(no_equip_flags, list( "JUMPSUIT" = ITEM_SLOT_ICLOTHING, "GLOVES" = ITEM_SLOT_GLOVES, "GLASSES" = ITEM_SLOT_EYES, - "EARPIECES" = ITEM_SLOT_EARS, + "EARPIECES" = ITEM_SLOT_EARS_LEFT, "MASKS" = ITEM_SLOT_MASK, "HATS" = ITEM_SLOT_HEAD, "SHOES" = ITEM_SLOT_FEET, diff --git a/code/__DEFINES/species_clothing_paths.dm b/code/__DEFINES/species_clothing_paths.dm index be95aa3a3b0ce..7c6690fa4f604 100644 --- a/code/__DEFINES/species_clothing_paths.dm +++ b/code/__DEFINES/species_clothing_paths.dm @@ -6,6 +6,13 @@ ///The dmi for humanoid oversuits #define DEFAULT_SUIT_FILE 'icons/mob/clothing/suits/default.dmi' +///The dmi for humanoid underwears +#define DEFAULT_UNDERWEAR_FILE 'modular_zzplurt/icons/mob/clothing/underwear.dmi' +///The dmi for humanoid shirts +#define DEFAULT_SHIRT_FILE 'modular_zzplurt/icons/mob/clothing/underwear.dmi' +///The dmi for humanoid socks +#define DEFAULT_SOCKS_FILE 'modular_zzplurt/icons/mob/clothing/underwear.dmi' + //DIGITIGRADE PATHS ///The dmi containing digitigrade uniforms #define DIGITIGRADE_UNIFORM_FILE 'modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi' // SKYRAT EDIT CHANGE @@ -13,3 +20,10 @@ #define DIGITIGRADE_SHOES_FILE 'modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi' // SKYRAT EDIT CHANGE ///The dmi containing digitigrade oversuits #define DIGITIGRADE_SUIT_FILE 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' // SKYRAT EDIT CHANGE + +///The dmi containing digitigrade underwears +#define DIGITIGRADE_UNDERWEAR_FILE 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' +///The dmi containing digitigrade shirts +#define DIGITIGRADE_SHIRT_FILE 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' +///The dmi containing digitigrade socks +#define DIGITIGRADE_SOCKS_FILE 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 353afe3f8c763..49e6a36bf7c27 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -35,13 +35,12 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( // Extra inventory GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( - 'icons/mob/screen_midnight.dmi' = 'sandcode/icons/mob/screen_midnight.dmi', - 'icons/mob/screen_retro.dmi' = 'sandcode/icons/mob/screen_retro.dmi', - 'icons/mob/screen_plasmafire.dmi' = 'sandcode/icons/mob/screen_plasmafire.dmi', - 'icons/mob/screen_slimecore.dmi' = 'sandcode/icons/mob/screen_slimecore.dmi', - 'icons/mob/screen_operative.dmi' = 'sandcode/icons/mob/screen_operative.dmi', - 'icons/mob/screen_clockwork.dmi' = 'sandcode/icons/mob/screen_clockwork.dmi', - 'sandcode/icons/mob/screen_liteweb.dmi' = 'sandcode/icons/mob/screen_liteweb.dmi' + 'icons/hud/screen_midnight.dmi' = 'modular_zzplurt/icons/hud/screen_midnight.dmi', + 'icons/hud/screen_retro.dmi' = 'modular_zzplurt/icons/hud/screen_retro.dmi', + 'icons/hud/screen_plasmafire.dmi' = 'modular_zzplurt/icons/hud/screen_plasmafire.dmi', + 'icons/hud/screen_slimecore.dmi' = 'modular_zzplurt/icons/hud/screen_slimecore.dmi', + 'icons/hud/screen_operative.dmi' = 'modular_zzplurt/icons/hud/screen_operative.dmi', + 'icons/hud/screen_clockwork.dmi' = 'modular_zzplurt/icons/hud/screen_clockwork.dmi', )) // diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 506852150768c..5f80ceb977e21 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -468,27 +468,27 @@ if(H.ears_extra) H.ears_extra.screen_loc = ui_ears_extra screenmob.client.screen += H.ears_extra - if(H.underwear) + if(H.w_underwear) H.w_underwear.screen_loc = ui_boxers - screenmob.client.screen += H.underwear - if(H.socks) - H.socks.screen_loc = ui_socks - screenmob.client.screen += H.socks - if(H.shirt) - H.shirt.screen_loc = ui_shirt - screenmob.client.screen += H.shirt + screenmob.client.screen += H.w_underwear + if(H.w_socks) + H.w_socks.screen_loc = ui_socks + screenmob.client.screen += H.w_socks + if(H.w_shirt) + H.w_shirt.screen_loc = ui_shirt + screenmob.client.screen += H.w_shirt if(H.wrists) H.wrists.screen_loc = ui_wrists screenmob.client.screen += H.wrists else if(H.ears_extra) screenmob.client.screen -= H.ears_extra - if(H.underwear) - screenmob.client.screen -= H.underwear - if(H.socks) - screenmob.client.screen -= H.socks - if(H.shirt) - screenmob.client.screen -= H.shirt + if(H.w_underwear) + screenmob.client.screen -= H.w_underwear + if(H.w_socks) + screenmob.client.screen -= H.w_socks + if(H.w_shirt) + screenmob.client.screen -= H.w_shirt if(H.wrists) screenmob.client.screen -= H.wrists // diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm index d1972a62f9d0e..ac83cc018287a 100644 --- a/code/controllers/subsystem/sprite_accessories.dm +++ b/code/controllers/subsystem/sprite_accessories.dm @@ -101,7 +101,6 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity facial_hairstyles_male_list = facial_hair_lists[MALE_SPRITE_LIST] facial_hairstyles_female_list = facial_hair_lists[FEMALE_SPRITE_LIST] - /* var/underwear_lists = init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear) underwear_list = underwear_lists[DEFAULT_SPRITE_LIST] underwear_m = underwear_lists[MALE_SPRITE_LIST] @@ -118,7 +117,6 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity bra_m = bra_lists[MALE_SPRITE_LIST] bra_f = bra_lists[FEMALE_SPRITE_LIST] // SKYRAT EDIT ADDITION END - */ socks_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/socks)[DEFAULT_SPRITE_LIST] diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm index 217feaf56d85c..d97080810a9c6 100644 --- a/code/datums/components/caltrop.dm +++ b/code/datums/components/caltrop.dm @@ -109,7 +109,7 @@ damage *= 0.75 // Extra inventory if(digitigrade_fan.socks) - if(digitigrade_fan.socks.body_parts_covered & FEET) + if(digitigrade_fan.w_socks.body_parts_covered & FEET) damage *= 0.75 // diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index fda491eaeb6f9..e4fc0de22a7b4 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -395,7 +395,7 @@ if(isnull(tackle_target.wear_suit) && isnull(tackle_target.w_uniform)) // who honestly puts all of their effort into tackling a naked guy? defense_mod += 2 // Extra inventory - if(isnull(tackle_target.underwear) && isnull(tackle_target.socks) && isnull(tackle_target.shirt)) + if(isnull(tackle_target.w_underwear) && isnull(tackle_target.w_socks) && isnull(tackle_target.w_shirt)) defense_mod += 1 // if(tackle_target.mob_negates_gravity()) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index fad2c8b930177..0cdbddbe04e7c 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -390,7 +390,7 @@ /// Return a list of all the types that are required to disguise as this outfit type /datum/outfit/proc/get_chameleon_disguise_info() var/list/types = list(uniform, suit, back, belt, gloves, shoes, head, mask, neck, ears, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand, - underwear, socks, shirt, ears_extra, wrists) // Extra inventory + w_underwear, w_socks, w_shirt, ears_extra, wrists) // Extra inventory types += chameleon_extras types += skillchips list_clear_nulls(types) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index afd945c53516b..4be9d8c75d08a 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -99,9 +99,9 @@ "s_store" = /obj/item/changeling, // Extra inventory - "underwear" = /obj/item/changeling, - "socks" = /obj/item/changeling, - "shirt" = /obj/item/changeling, + "w_underwear" = /obj/item/changeling, + "w_socks" = /obj/item/changeling, + "w_shirt" = /obj/item/changeling, "ears_extra" = /obj/item/changeling, "wrists" = /obj/item/changeling, ) diff --git a/code/modules/antagonists/clown_ops/bananium_bomb.dm b/code/modules/antagonists/clown_ops/bananium_bomb.dm index 60da8c6013027..092c03821db75 100644 --- a/code/modules/antagonists/clown_ops/bananium_bomb.dm +++ b/code/modules/antagonists/clown_ops/bananium_bomb.dm @@ -57,7 +57,7 @@ clowned_on.equip_to_slot_or_del(clown_mask, ITEM_SLOT_MASK) //sandstorm edit - if(!clowned_on.shirt || clowned_on.dropItemToGround(clowned_on.shirt)) + if(!clowned_on.w_shirt || clowned_on.dropItemToGround(clowned_on.w_shirt)) var/obj/item/clothing/clown_undershirt = new /obj/item/clothing/underwear/shirt/clown(clowned_on) ADD_TRAIT(clown_undershirt, TRAIT_NODROP, CLOWN_NUKE_TRAIT) clowned_on.equip_to_slot_or_del(clown_undershirt, ITEM_SLOT_SHIRT) diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm index 059349bbf187d..816cf9125db24 100644 --- a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm @@ -111,11 +111,11 @@ continue // Extra inventory - and underwear - if(person_contents == human_sent.underwear) + if(person_contents == human_sent.w_underwear) continue - if(person_contents == human_sent.socks) + if(person_contents == human_sent.w_socks) continue - if(person_contents == human_sent.shirt) + if(person_contents == human_sent.w_shirt) continue if(person_contents == human_sent.wrists) // once wrists actually have a danger item, you have my blessing to remove continue @@ -254,11 +254,11 @@ continue // Extra inventory - and underwear - if(belonging == human_victim.underwear) + if(belonging == human_victim.w_underwear) continue - if(belonging == human_victim.socks) + if(belonging == human_victim.w_socks) continue - if(belonging == human_victim.shirt) + if(belonging == human_victim.w_shirt) continue if(belonging == human_victim.wrists) // once wrists actually have a danger item, you have my blessing to remove continue diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index e51f3347db839..8a9c78de4f210 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -490,12 +490,12 @@ // Extra inventory slot_priority = list( \ ITEM_SLOT_BACK, ITEM_SLOT_ID,\ - SLOT_W_UNDERWEAR,\ - SLOT_W_SOCKS,\ - SLOT_W_SHIRT,\ + ITEM_SLOT_UNDERWEAR,\ + ITEM_SLOT_SOCKS,\ + ITEM_SLOT_SHIRT,\ ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ - ITEM_SLOT_FEET, SLOT_WRISTS, ITEM_SLOT_GLOVES,\ + ITEM_SLOT_FEET, ITEM_SLOT_WRISTS, ITEM_SLOT_GLOVES,\ ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT, \ ITEM_SLOT_EYES,\ ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 331b98d2e8de9..99c4413c1201a 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -855,7 +855,7 @@ GLOBAL_LIST_EMPTY(features_by_species) return FALSE if(!(I.slot_flags & ITEM_SLOT_WRISTS)) return FALSE - if(num_arms < 2) + if(H.num_hands < 2) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) // @@ -903,19 +903,19 @@ GLOBAL_LIST_EMPTY(features_by_species) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_UNDERWEAR) - if(H.underwear) + if(H.w_underwear) return FALSE if( !(I.slot_flags & ITEM_SLOT_UNDERWEAR) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_SOCKS) - if(H.socks) + if(H.w_socks) return FALSE if( !(I.slot_flags & ITEM_SLOT_SOCKS) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_SHIRT) - if(H.shirt) + if(H.w_shirt) return FALSE if( !(I.slot_flags & ITEM_SLOT_SHIRT) ) return FALSE diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index a3a2d0c482e3f..608038bebdc0f 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -75,11 +75,11 @@ . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_message]." //shirt - if(shirt && !(obscured & ITEM_SLOT_SHIRT) && !(shirt.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [shirt.get_examine_string(user)]." + if(w_shirt && !(obscured & ITEM_SLOT_SHIRT) && !(w_shirt.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [w_shirt.get_examine_string(user)]." //underwear - if(underwear && !(obscured & ITEM_SLOT_UNDERWEAR) && !(underwear.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [underwear.get_examine_string(user)]." + if(w_underwear && !(obscured & ITEM_SLOT_UNDERWEAR) && !(w_underwear.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [w_underwear.get_examine_string(user)]." //head if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." @@ -126,8 +126,8 @@ . += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet." //socks - if(socks && !(obscured & ITEM_SLOT_SOCKS) && !(socks.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [socks.get_examine_string(user)] on [t_his] feet." + if(w_socks && !(obscured & ITEM_SLOT_SOCKS) && !(w_socks.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [w_socks.get_examine_string(user)] on [t_his] feet." //mask if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !(wear_mask.item_flags & EXAMINE_SKIP)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e59e1363f68b8..0373244402426 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -623,13 +623,13 @@ . = TRUE // Extra inventory - if(!(obcured & ITEM_SLOT_UNDERWEAR) && underwear?.wash(clean_types)) + if(!(obscured & ITEM_SLOT_UNDERWEAR) && w_underwear?.wash(clean_types)) update_worn_underwear() . = TRUE - if(!(obscured & ITEM_SLOT_SOCKS) && socks?.wash(clean_types)) + if(!(obscured & ITEM_SLOT_SOCKS) && w_socks?.wash(clean_types)) update_worn_socks() . = TRUE - if(!(obscured & ITEM_SLOT_SHIRT) && shirt?.wash(clean_types)) + if(!(obscured & ITEM_SLOT_SHIRT) && w_shirt?.wash(clean_types)) update_worn_shirt() . = TRUE if(!(obscured & ITEM_SLOT_WRISTS) && wrists?.wash(clean_types)) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 35b46a4d6f5db..8b2a93e0454bf 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -56,12 +56,10 @@ var/physique = MALE //consider updating /mob/living/carbon/human/copy_clothing_prefs() if adding more of these - /* var/underwear = "Nude" //Which underwear the player wants var/underwear_color = COLOR_BLACK var/undershirt = "Nude" //Which undershirt the player wants var/socks = "Nude" //Which socks the player wants - */ var/backpack = DBACKPACK //Which backpack type the player has chosen. var/jumpsuit_style = PREF_SUIT //suit/skirt @@ -78,9 +76,9 @@ var/obj/item/s_store = null //Extra inventory - var/obj/item/underwear = null - var/obj/item/socks = null - var/obj/item/shirt = null + var/obj/item/w_underwear = null + var/obj/item/w_socks = null + var/obj/item/w_shirt = null var/obj/item/ears_extra = null var/obj/item/wrists = null // 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 0ffe6743502dd..d784f977b424c 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -175,8 +175,8 @@ There are several things that need to be remembered: var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_UNDERWEAR) + 1] inv.update_icon() - if(istype(underwear, /obj/item/clothing/underwear)) - var/obj/item/clothing/underwear/undies = w_underwear + if(istype(w_underwear, /obj/item/clothing/underwear/briefs)) + var/obj/item/clothing/underwear/briefs/undies = w_underwear update_hud_underwear(undies) if(update_obscured) @@ -187,7 +187,7 @@ There are several things that need to be remembered: var/target_overlay = undies.icon_state var/mutable_appearance/underwear_overlay - var/icon_file = 'icons/mob/clothing/underwear.dmi' + var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' var/handled_by_bodyshape = TRUE var/woman var/digi @@ -198,7 +198,7 @@ There are several things that need to be remembered: digi = TRUE else if(bodyshape & BODYSHAPE_CUSTOM) - icon_file = dna.species.generate_custom_worn_icon(OFFSET_UNDERWEAR, underwear, src) + icon_file = dna.species.generate_custom_worn_icon(OFFSET_UNDERWEAR, w_underwear, src) if(!dna.species.no_gender_shaping && dna.species.sexes && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_UNDERWEAR)) woman = TRUE @@ -240,8 +240,8 @@ There are several things that need to be remembered: var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SHIRT) + 1] inv.update_icon() - if(istype(shirt, /obj/item/clothing/shirt)) - var/obj/item/clothing/shirt/undershirt = w_shirt + if(istype(w_shirt, /obj/item/clothing/underwear/shirt)) + var/obj/item/clothing/underwear/shirt/undershirt = w_shirt update_hud_shirt(undershirt) if(update_obscured) @@ -252,7 +252,7 @@ There are several things that need to be remembered: var/target_overlay = undershirt.icon_state var/mutable_appearance/shirt_overlay - var/icon_file = 'icons/mob/clothing/shirt.dmi' + var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' var/handled_by_bodyshape = TRUE var/woman var/digi @@ -263,7 +263,7 @@ There are several things that need to be remembered: digi = TRUE else if(bodyshape & BODYSHAPE_CUSTOM) - icon_file = dna.species.generate_custom_worn_icon(OFFSET_SHIRT, shirt, src) + icon_file = dna.species.generate_custom_worn_icon(OFFSET_SHIRT, w_shirt, src) if(!dna.species.no_gender_shaping && dna.species.sexes && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_SHIRT)) woman = TRUE @@ -401,7 +401,7 @@ There are several things that need to be remembered: if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_GLOVES) return - var/icon_file = 'icons/mob/clothing/wrists.dmi' + var/icon_file = 'modular_zzplurt/icons/mob/clothing/wrists.dmi' // SKYRAT EDIT ADDITION var/mutant_override = FALSE @@ -657,8 +657,8 @@ There are several things that need to be remembered: var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SOCKS) + 1] inv.update_icon() - if(socks) - var/obj/item/worn_item = socks + if(w_socks) + var/obj/item/worn_item = w_socks update_hud_socks(worn_item) if(update_obscured) @@ -678,7 +678,7 @@ There are several things that need to be remembered: icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SOCKS_FILE // SKYRAT EDIT CHANGE mutant_override = TRUE // SKYRAT EDIT ADDITION if(!mutant_override && bodyshape & BODYSHAPE_CUSTOM) - var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_SOCKS, socks, src) + var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_SOCKS, w_socks, src) if(species_icon_file) icon_file = species_icon_file mutant_override = TRUE @@ -686,7 +686,7 @@ There are several things that need to be remembered: return // We just don't want socks that float if we're not displaying legs (useful for taurs, for now) // SKYRAT EDIT END - var/mutable_appearance/socks_overlay = socks.build_worn_icon(default_layer = SOCKS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + var/mutable_appearance/socks_overlay = w_socks.build_worn_icon(default_layer = SOCKS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE if(!socks_overlay) return @@ -1034,7 +1034,7 @@ There are several things that need to be remembered: update_observer_view(worn_item,TRUE) /mob/living/carbon/human/proc/update_hud_underwear(obj/item/worn_item) - worn_item.screen_loc = ui_underwear + worn_item.screen_loc = ui_boxers 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) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index e9139b825734a..c487c7d893fde 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -38,7 +38,7 @@ if(ITEM_SLOT_GLOVES) return gloves // Extra inventory - if(SLOT_WRISTS) + if(ITEM_SLOT_WRISTS) return wrists // if(ITEM_SLOT_FEET) @@ -49,11 +49,11 @@ return w_uniform // Extra inventory if(ITEM_SLOT_UNDERWEAR) - return underwear + return w_underwear if(ITEM_SLOT_SOCKS) - return socks + return w_socks if(ITEM_SLOT_SHIRT) - return shirt + return w_shirt // if(ITEM_SLOT_LPOCKET) return l_store @@ -91,16 +91,19 @@ if(looking_for == shoes) return ITEM_SLOT_FEET + if(looking_for == w_socks) + return ITEM_SLOT_SOCKS + if(looking_for == wear_suit) return ITEM_SLOT_OCLOTHING if(looking_for == w_uniform) return ITEM_SLOT_ICLOTHING - if(looking_for == underwear) + if(looking_for == w_underwear) return ITEM_SLOT_UNDERWEAR - if(looking_for == shirt) + if(looking_for == w_shirt) return ITEM_SLOT_SHIRT if(looking_for == wrists) @@ -239,19 +242,19 @@ update_suit_sensors() update_worn_undersuit() if(ITEM_SLOT_UNDERWEAR) - if(underwear) + if(w_underwear) return - underwear = equipping + w_underwear = equipping update_worn_underwear() if(ITEM_SLOT_SHIRT) - if(shirt) + if(w_shirt) return - shirt = equipping + w_shirt = equipping update_worn_shirt() if(ITEM_SLOT_SOCKS) - if(socks) + if(w_socks) return - socks = equipping + w_socks = equipping update_worn_socks() if(ITEM_SLOT_LPOCKET) l_store = equipping @@ -311,16 +314,16 @@ if(belt && !can_equip(belt, ITEM_SLOT_BELT, TRUE, ignore_equipped = TRUE)) dropItemToGround(belt) // Extra inventory - else if(I == underwear) - underwear = null + else if(I == w_underwear) + w_underwear = null if(!QDELETED(src)) update_worn_underwear() - else if(I == socks) - socks = null + else if(I == w_socks) + w_socks = null if(!QDELETED(src)) update_worn_socks() - else if(I == shirt) - shirt = null + else if(I == w_shirt) + w_shirt = null if(!QDELETED(src)) update_worn_shirt() else if(I == wrists) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 90c1a2611f1b4..8b77403c373a1 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -167,15 +167,15 @@ if(w_uniform.max_heat_protection_temperature && w_uniform.max_heat_protection_temperature >= temperature) thermal_protection_flags |= w_uniform.heat_protection //skyrat edit - if(underwear) - if(underwear.max_heat_protection_temperature && underwear.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= underwear.heat_protection - if(socks) - if(socks.max_heat_protection_temperature && socks.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= socks.heat_protection - if(shirt) - if(shirt.max_heat_protection_temperature && shirt.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= shirt.heat_protection + if(w_underwear) + if(w_underwear.max_heat_protection_temperature && w_underwear.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= w_underwear.heat_protection + if(w_socks) + if(w_socks.max_heat_protection_temperature && w_socks.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= w_socks.heat_protection + if(w_shirt) + if(w_shirt.max_heat_protection_temperature && w_shirt.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= w_shirt.heat_protection if(wrists) if(wrists.max_heat_protection_temperature && wrists.max_heat_protection_temperature >= temperature) thermal_protection_flags |= wrists.heat_protection diff --git a/code/modules/mob/mob_update_icons.dm b/code/modules/mob/mob_update_icons.dm index a355a385d9faa..f63d444a914bd 100644 --- a/code/modules/mob/mob_update_icons.dm +++ b/code/modules/mob/mob_update_icons.dm @@ -27,14 +27,22 @@ update_worn_glasses() if(slot_flags & ITEM_SLOT_GLOVES) update_worn_gloves() + if(slot_flags & ITEM_SLOT_WRISTS) + update_worn_wrists() if(slot_flags & ITEM_SLOT_HEAD) update_worn_head() if(slot_flags & ITEM_SLOT_FEET) update_worn_shoes() + if(slot_flags & ITEM_SLOT_SOCKS) + update_worn_socks() if(slot_flags & ITEM_SLOT_OCLOTHING) update_worn_oversuit() if(slot_flags & ITEM_SLOT_ICLOTHING) update_worn_undersuit() + if(slot_flags & ITEM_SLOT_UNDERWEAR) + update_worn_underwear() + if(slot_flags & ITEM_SLOT_SHIRT) + update_worn_shirt() if(slot_flags & ITEM_SLOT_SUITSTORE) update_suit_storage() if(slot_flags & (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET)) @@ -46,10 +54,16 @@ /mob/proc/update_obscured_slots(obscured_flags) if(obscured_flags & HIDEGLOVES) update_worn_gloves(update_obscured = FALSE) + if(obscured_flags & HIDEWRISTS) + update_worn_wrists(update_obscured = FALSE) if(obscured_flags & HIDESUITSTORAGE) update_suit_storage(update_obscured = FALSE) if(obscured_flags & HIDEJUMPSUIT) update_worn_undersuit(update_obscured = FALSE) + if(obscured_flags & HIDEUNDERWEAR) + update_worn_underwear(update_obscured = FALSE) + update_worn_shirt(update_obscured = FALSE) + update_worn_socks(update_obscured = FALSE) if(obscured_flags & HIDESHOES) update_worn_shoes(update_obscured = FALSE) if(obscured_flags & HIDEMASK) @@ -99,6 +113,14 @@ /mob/proc/update_worn_undersuit(update_obscured = FALSE) return +///Updates the underwear overlay & HUD element. +/mob/proc/update_worn_underwear(update_obscured = FALSE) + return + +///Updates the shirt overlay & HUD element. +/mob/proc/update_worn_shirt(update_obscured = FALSE) + return + ///Updates the belt overlay & HUD element. /mob/proc/update_worn_belt(update_obscured = FALSE) return @@ -126,10 +148,18 @@ /mob/proc/update_worn_shoes(update_obscured = FALSE) return +///Updates the socks overlay & HUD element. +/mob/proc/update_worn_socks(update_obscured = FALSE) + return + ///Updates the glasses overlay & HUD element. /mob/proc/update_worn_gloves(update_obscured = FALSE) return +///Updates the wrists overlay & HUD element. +/mob/proc/update_worn_wrists(update_obscured = FALSE) + return + ///Updates the suit storage overlay & HUD element. /mob/proc/update_suit_storage(update_obscured = FALSE) return @@ -141,3 +171,7 @@ ///Updates the headset overlay & HUD element. /mob/proc/update_worn_ears(update_obscured = FALSE) return + +///Updates the headset on the other side overlay & HUD element. +/mob/proc/update_worn_ears_extra(update_obscured = FALSE) + return 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 8bbedbfe6ee4f..231450ab2e8b2 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 @@ -139,8 +139,8 @@ GLOBAL_LIST_EMPTY(customizable_races) standing += eye_organ.generate_body_overlay(species_human) //Underwear, Undershirts & Socks + /* if(!HAS_TRAIT(species_human, TRAIT_NO_UNDERWEAR)) - /* if(species_human.underwear && !(species_human.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) var/datum/sprite_accessory/underwear/underwear = SSaccessories.underwear_list[species_human.underwear] var/mutable_appearance/underwear_overlay diff --git a/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm b/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm new file mode 100644 index 0000000000000..4dcb79bfe777d --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm @@ -0,0 +1,36 @@ +//Fuck it we making underwear actual items +/obj/item/clothing/underwear + name = "Underwear" + desc = "If you're reading this, something went wrong." + icon = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' //if someone is willing to make proper inventory sprites that'd be very cash money + worn_icon = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' + worn_icon_digi = 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' + body_parts_covered = GROIN + slot_flags = ITEM_SLOT_UNDERWEAR + + w_class = WEIGHT_CLASS_SMALL + +/obj/item/clothing/underwear/Move() + ..() + setDir(SOUTH) //should prevent underwear from facing any direction but south while on the floor, uses same code as pipes, PLEASE, THIS IS A BAD SOLUTION, SOMEONE MAKE ME UNDERWEAR SPRITES ASAP + +///Proc to check if undershirt is hidden. +/mob/living/carbon/human/proc/undershirt_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)) + if(istype(I) && ((I.body_parts_covered & GROIN) || (I.flags_inv & HIDEUNDERWEAR))) + return TRUE + return FALSE + +///Proc to check if socks are hidden. +/mob/living/carbon/human/proc/socks_hidden() + for(var/obj/item/I in list(shoes, wear_suit)) + if(istype(I) && ((I.body_parts_covered & FEET) || (I.flags_inv & HIDEUNDERWEAR))) + return TRUE + return FALSE diff --git a/modular_zzplurt/code/modules/clothing/underwear/boxers.dm b/modular_zzplurt/code/modules/clothing/underwear/boxers.dm new file mode 100644 index 0000000000000..7214f1a38eff6 --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/boxers.dm @@ -0,0 +1,125 @@ +/obj/item/clothing/underwear/briefs + name = "briefs" + desc = "Not going commando." + icon_state = "briefs" + body_parts_covered = GROIN + slot_flags = ITEM_SLOT_UNDERWEAR + +// please make sure they're sorted alphabetically and categorized, above is the only exception + +/obj/item/clothing/underwear/briefs/boxer_briefs //this typepath jesus + name = "boxer briefs" + icon_state = "boxer_briefs" + +/obj/item/clothing/underwear/briefs/boxers + name = "boxers" + icon_state = "boxers" + +/obj/item/clothing/underwear/briefs/boxers/bee_shorts + name = "bee shorts" + desc = "It's hip to..." + icon_state = "bee_shorts" + +/obj/item/clothing/underwear/briefs/boxers/commie + name = "commie boxers" + desc = "Seize the means of reproduction." + icon_state = "boxers_commie" + +/obj/item/clothing/underwear/briefs/boxers/heart + name = "heart boxers" + icon_state = "boxers_heart" + +/obj/item/clothing/underwear/briefs/boxers/long + name = "long boxers" + icon_state = "boxers_long" + +/obj/item/clothing/underwear/briefs/boxers/striped + name = "striped boxers" + icon_state = "boxers_striped" + +/obj/item/clothing/underwear/briefs/boxers/uk + name = "uk boxers" + desc = "You got a loicense for that dong?" + icon_state = "boxers_uk" + +/obj/item/clothing/underwear/briefs/boxers/usa + name = "usa boxers" + desc = "Not as free as going commando." + icon_state = "boxers_assblastusa" + +/obj/item/clothing/underwear/briefs/jockstrap + name = "jockstrap" + icon_state = "jockstrap" + +/obj/item/clothing/underwear/briefs/mankini + name = "mankini" + desc = "Kinky." + icon_state = "mankini" + +/obj/item/clothing/underwear/briefs/panties + name = "panties" + desc = "Panties." + body_parts_covered = GROIN + icon_state = "panties" + +/obj/item/clothing/underwear/briefs/panties/alt + name = "panties (alt)" + icon_state = "panties_alt" + +/obj/item/clothing/underwear/briefs/panties/beekini + name = "bee-kini panties" + icon_state = "panties_bee-kini" + +/obj/item/clothing/underwear/briefs/panties/commie + name = "commie panties" + desc = "Seize the means of reproduction." + icon_state = "panties_commie" + +/obj/item/clothing/underwear/briefs/panties/fishnet + name = "fishnet panties" + desc = "They don't hide much of anything..." + icon_state = "panties_fishnet" + +/obj/item/clothing/underwear/briefs/panties/kinky + name = "kinky panties" + icon_state = "panties_kinky" + +/obj/item/clothing/underwear/briefs/panties/neko + name = "neko panties" + desc = "Favored by cat \"girls\"." + icon_state = "panties_neko" + +/obj/item/clothing/underwear/briefs/panties/slim + name = "slim panties" + icon_state = "panties_slim" + +/obj/item/clothing/underwear/briefs/panties/striped + name = "striped panties" + icon_state = "panties_striped" + +/obj/item/clothing/underwear/briefs/panties/swimming + name = "swimming panties" + icon_state = "panties_swimming" + +/obj/item/clothing/underwear/briefs/panties/thin + name = "thin panties" + icon_state = "panties_slim" + +/obj/item/clothing/underwear/briefs/panties/thong + name = "thong" + desc = "More revealing than your average panties." + icon_state = "thong" + +/obj/item/clothing/underwear/briefs/panties/thong/babydoll + name = "babydoll thong" + icon_state = "thong_babydoll" + +/obj/item/clothing/underwear/briefs/panties/uk + name = "uk panties" + desc = "Insert loicense joke here." + icon_state = "panties_uk" + +/obj/item/clothing/underwear/briefs/panties/usa + name = "usa panties" + desc = "Not nearly as free as not wearing any." + icon_state = "panties_assblastusa" diff --git a/modular_zzplurt/code/modules/clothing/underwear/shirts.dm b/modular_zzplurt/code/modules/clothing/underwear/shirts.dm new file mode 100644 index 0000000000000..731b780485c68 --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/shirts.dm @@ -0,0 +1,358 @@ +/obj/item/clothing/underwear/shirt + name = "shirt" + desc = "A shirt." + icon_state = "undershirt" + body_parts_covered = CHEST | ARMS + slot_flags = ITEM_SLOT_SHIRT + +// please make sure they're sorted alphabetically and categorized, above is the only exception + +/obj/item/clothing/underwear/shirt/alien + name = "alien shirt" + desc = "I regret nothing." + icon_state = "undershirt_alien" + +/obj/item/clothing/underwear/shirt/band + name = "band shirt" + icon_state = "undershirt_band" + +/obj/item/clothing/underwear/shirt/bee + name = "bee shirt" + desc = "Bee yourself!" + icon_state = "undershirt_bee" + +/obj/item/clothing/underwear/shirt/corset + name = "corset" + desc = "A support garment commonly worn to hold and train the torso into a desired shape, traditionally a smaller waist or larger bottom, for aesthetic or medical purposes, or support the breasts." + body_parts_covered = CHEST + icon_state = "corset" + +/obj/item/clothing/underwear/shirt/bluejersey + name = "blue jersey shirt" + icon_state = "undershirt_bluejersey" + +/obj/item/clothing/underwear/shirt/bowling + name = "red bowling shirt" + icon_state = "undershirt_bowling_red" + +/obj/item/clothing/underwear/shirt/bowling/cyan + name = "cyan bowling shirt" + icon_state = "undershirt_bowling_cyan" + +/obj/item/clothing/underwear/shirt/bowling/grey + name = "grey bowling shirt" + icon_state = "undershirt_bowling_grey" + +/obj/item/clothing/underwear/shirt/bowling/pink + name = "pink bowling shirt" + icon_state = "undershirt_bowling_pink" + +/obj/item/clothing/underwear/shirt/bra + name = "bra" + desc = "A bra." + body_parts_covered = CHEST + icon_state = "bra" + +/obj/item/clothing/underwear/shirt/bra/alt + name = "bra (alt)" + icon_state = "bra_alt" + +/obj/item/clothing/underwear/shirt/bra/babydoll + name = "babydoll" + desc = "A babydoll." + icon_state = "babydoll" + +/obj/item/clothing/underwear/shirt/bra/beekini + name = "bee-kini bra" + desc = "Buzz buzz." + icon_state = "bra_bee-kini" + +/obj/item/clothing/underwear/shirt/bra/bikini + name = "bikini" + desc = "A bikini." + body_parts_covered = CHEST | GROIN + icon_state = "swimming" + +/obj/item/clothing/underwear/shirt/bra/bikini/black + name = "black bikini" + icon_state = "swimming_black" + +/obj/item/clothing/underwear/shirt/bra/bikini/blue + name = "blue bikini" + icon_state = "swimming_blue" + +/obj/item/clothing/underwear/shirt/bra/bikini/red + name = "red bikini" + icon_state = "swimming_red" + +/obj/item/clothing/underwear/shirt/top/bra_binder + name = "Bra (binder)" + icon_state = "bra_binder" + body_parts_covered = CHEST + +/obj/item/clothing/underwear/shirt/top/bra_binder/strapless + name = "Bra (binder, strapless)" + icon_state = "bra_binder_strapless" + +/obj/item/clothing/underwear/shirt/bra/commie + name = "commie bra" + desc = "Seize the mammaries of production." + icon_state = "bra_commie" + +/obj/item/clothing/underwear/shirt/bra/fishnet + name = "fishnet bra" + icon_state = "bra_fishnet" + +/obj/item/clothing/underwear/shirt/bra/fishnet/sleeves + name = "sleeved fishnet bra" + body_parts_covered = CHEST | ARMS + icon_state = "bra_fishnet_sleeves" + +/obj/item/clothing/underwear/shirt/bra/fishnet/sleeves/gloves + name = "gloved fishnet bra" + body_parts_covered = CHEST | ARMS | HANDS + icon_state = "bra_fishnet_gloves" + +/obj/item/clothing/underwear/shirt/bra/halterneck + name = "halterneck bra" + icon_state = "bra_halterneck" + +/obj/item/clothing/underwear/shirt/bra/kinky + name = "kinky bra" + desc = "Kinky." + icon_state = "bra_kinky" + +/obj/item/clothing/underwear/shirt/bra/neko + name = "neko bra" + desc = "Favored by cat \"girls\"." + icon_state = "bra_neko" + +/obj/item/clothing/underwear/shirt/bra/sports + name = "sports bra" + icon_state = "bra_sports" + +/obj/item/clothing/underwear/shirt/bra/sports/alt + name = "sports bra (alt)" + icon_state = "bra_sports_alt" + +/obj/item/clothing/underwear/shirt/bra/strapless + name = "strapless bra" + icon_state = "bra_strapless" + +/obj/item/clothing/underwear/shirt/bra/strapless/alt + name = "strapless bra (alt)" + icon_state = "bra_strapless_alt" + +/obj/item/clothing/underwear/shirt/bra/striped + name = "striped bra" + icon_state = "bra_striped" + +/obj/item/clothing/underwear/shirt/bra/swimming + name = "swimming bra" + icon_state = "bra_swimming" + +/obj/item/clothing/underwear/shirt/bra/swimming/alt + name = "swimming bra (alt)" + icon_state = "bra_swimming_alt" + +/obj/item/clothing/underwear/shirt/bra/thin + name = "thin bra" + icon_state = "bra_thin" + +/obj/item/clothing/underwear/shirt/bra/tubetop + name = "tubetop bra" + icon_state = "bra_tubetop" + +/obj/item/clothing/underwear/shirt/bra/uk + name = "uk bra" + desc = "You got a loicense for those tiddies?" + icon_state = "bra_uk" + +/obj/item/clothing/underwear/shirt/bra/usa + name = "usa bra" + desc = "Not nearly as free as letting them bounce." + icon_state = "bra_assblastusa" + +/obj/item/clothing/underwear/shirt/clown + name = "clown shirt" + desc = "HONK!" + icon_state = "undershirt_clown" + +/obj/item/clothing/underwear/shirt/commie + name = "commie shirt" + icon_state = "undershirt_commie" + +/obj/item/clothing/underwear/shirt/cowboy + name = "cowboy shirt" + desc = "Yee haw." + icon_state = "undershirt_cowboy" + +/obj/item/clothing/underwear/shirt/cowboy/navy + name = "navy cowboy shirt" + icon_state = "undershirt_cowboy_navy" + +/obj/item/clothing/underwear/shirt/cowboy/red + name = "red cowboy shirt" + icon_state = "undershirt_cowboy_red" + +/obj/item/clothing/underwear/shirt/cowboy/short + name = "short sleeved cowboy shirt" + icon_state = "undershirt_cowboy_short" + +/obj/item/clothing/underwear/shirt/cowboy/short/navy + name = "short sleeved navy cowboy shirt" + icon_state = "undershirt_cowboy_short_navy" + +/obj/item/clothing/underwear/shirt/cowboy/short/red + name = "short sleeved red cowboy shirt" + icon_state = "undershirt_cowboy_short_red" + +/obj/item/clothing/underwear/shirt/cowboy/short/white + name = "short sleeved white cowboy shirt" + icon_state = "undershirt_cowboy_short_white" + +/obj/item/clothing/underwear/shirt/cowboy/white + name = "white cowboy shirt" + icon_state = "undershirt_cowboy_white" + +/obj/item/clothing/underwear/shirt/ian + name = "ian shirt" + icon_state = "undershirt_ian" + +/obj/item/clothing/underwear/shirt/ilovent + name = "\"I love NT\" shirt" + icon_state = "undershirt_ilovent" + +/obj/item/clothing/underwear/shirt/long + name = "longsleeved shirt" + body_parts_covered = CHEST | ARMS + icon_state = "undershirt_long" + +/obj/item/clothing/underwear/shirt/long/striped + name = "striped longsleeved shirt" + icon_state = "undershirt_long_striped" + +/obj/item/clothing/underwear/shirt/long/striped/blue + name = "blue striped longsleeved shirt" + icon_state = "undershirt_long_striped_blue" + +/obj/item/clothing/underwear/shirt/lover + name = "lover shirt" + icon_state = "undershirt_lover" + +/obj/item/clothing/underwear/shirt/matroska + name = "matroska shirt" + icon_state = "undershirt_matroska" + +/obj/item/clothing/underwear/shirt/meat + name = "meat shirt" + icon_state = "undershirt_meat" + +/obj/item/clothing/underwear/shirt/nano + name = "NT shirt" + icon_state = "undershirt_nano" + +/obj/item/clothing/underwear/shirt/peace + name = "peace shirt" + icon_state = "undershirt_peace" + +/obj/item/clothing/underwear/shirt/pogoman + name = "pogoman shirt" + icon_state = "undershirt_pogoman" + +/obj/item/clothing/underwear/shirt/polo + name = "polo shirt" + icon_state = "undershirt_polo" + +/obj/item/clothing/underwear/shirt/question + name = "question shirt" + icon_state = "undershirt_question" + +/obj/item/clothing/underwear/shirt/redjersey + name = "red jersey shirt" + icon_state = "undershirt_redjersey" + +/obj/item/clothing/underwear/shirt/shortsleeve + name = "shortsleeve shirt" + body_parts_covered = CHEST + icon_state = "undershirt_short" + +/obj/item/clothing/underwear/shirt/skull + name = "skull shirt" + icon_state = "undershirt_skull" + +/obj/item/clothing/underwear/shirt/sportblue + name = "blue sports shirt" + icon_state = "undershirt_sport_blue" + +/obj/item/clothing/underwear/shirt/sportgreen + name = "green sports shirt" + icon_state = "undershirt_sport_green" + +/obj/item/clothing/underwear/shirt/sportred + name = "red sports shirt" + icon_state = "undershirt_sport_red" + +/obj/item/clothing/underwear/shirt/ss13 + name = "SS13 shirt" + icon_state = "undershirt_ss13" + +/obj/item/clothing/underwear/shirt/striped + name = "striped shirt" + icon_state = "undershirt_striped" + +/obj/item/clothing/underwear/shirt/tanktop + name = "tanktop shirt" + body_parts_covered = CHEST + icon_state = "undershirt_tanktop" + +/obj/item/clothing/underwear/shirt/tanktop/alt + name = "tanktop shirt (alt)" + icon_state = "undershirt_tanktop_alt" + +/obj/item/clothing/underwear/shirt/tanktop/fire + name = "fire tanktop shirt" + icon_state = "undershirt_tanktop_fire" + +/obj/item/clothing/underwear/shirt/tanktop/midriff + name = "midriff tanktop shirt" + icon_state = "undershirt_tanktop_midriff" + +/obj/item/clothing/underwear/shirt/tanktop/midriff/alt + name = "midriff tanktop shirt (alt)" + icon_state = "undershirt_tanktop_midriff_alt" + +/obj/item/clothing/underwear/shirt/tanktop/rainbow + name = "rainbow tanktop shirt" + icon_state = "undershirt_tanktop_rainbow" + +/obj/item/clothing/underwear/shirt/tanktop/striped + name = "striped tanktop shirt" + icon_state = "undershirt_tanktop_striped" + +/obj/item/clothing/underwear/shirt/tanktop/sun + name = "sun tanktop shirt" + icon_state = "undershirt_tanktop_sun" + +/obj/item/clothing/underwear/shirt/tiedye + name = "tiedye shirt" + icon_state = "undershirt_tiedye" + +/obj/item/clothing/underwear/shirt/top/shibari + name = "Shibari Ropes" + body_parts_covered = CHEST + icon_state = "shibari" + +/obj/item/clothing/underwear/shirt/top/shibari_sleeved + name = "Shibari Ropes - sleeves" + icon_state = "shibari_sleeves" + +/obj/item/clothing/underwear/shirt/uk + name = "uk shirt" + desc = "I'm running out of UK jokes." + icon_state = "undershirt_uk" + +/obj/item/clothing/underwear/shirt/usa + name = "usa shirt" + desc = "Freedom and obesity." + icon_state = "undershirt_assblastusa" diff --git a/modular_zzplurt/code/modules/clothing/underwear/socks.dm b/modular_zzplurt/code/modules/clothing/underwear/socks.dm new file mode 100644 index 0000000000000..c121cf2f2e277 --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/socks.dm @@ -0,0 +1,246 @@ +/obj/item/clothing/underwear/socks + name = "socks" + desc = "A pair of socks." + icon_state = "socks" + body_parts_covered = FEET + slot_flags = ITEM_SLOT_SOCKS + +// please make sure they're sorted alphabetically and categorized, above is the only exception + +/obj/item/clothing/underwear/socks/bee + name = "bee socks" + icon_state = "socks_bee" + +/obj/item/clothing/underwear/socks/candycane + name = "candy cane socks" + icon_state = "socks_candycane" + +/obj/item/clothing/underwear/socks/candycane/green + name = "green candy cane socks" + icon_state = "socks_candycanegreen" + +/obj/item/clothing/underwear/socks/christmas + name = "christmas socks" + icon_state = "socks_christmas" + +/obj/item/clothing/underwear/socks/garter + name = "garter" + icon_state = "garter" + +/obj/item/clothing/underwear/socks/knee + name = "knee socks" + icon_state = "socks_knee" + +/obj/item/clothing/underwear/socks/knee/bee + name = "bee knee socks" + desc = "You like jazz?" + icon_state = "socks_knee_bee" + +/obj/item/clothing/underwear/socks/knee/candycane + name = "candy cane knee socks" + desc = "Jingle bell." + icon_state = "socks_knee_candycane" + +/obj/item/clothing/underwear/socks/knee/candycane/green + name = "green candy cane knee socks" + desc = "Jingle bell." + icon_state = "socks_knee_candycanegreen" + +/obj/item/clothing/underwear/socks/knee/christmas + name = "christmas knee socks" + desc = "Jingle bell." + icon_state = "socks_knee_christmas" + +/obj/item/clothing/underwear/socks/knee/commie + name = "commie knee socks" + desc = "Karl Marx or something." + icon_state = "socks_knee_commie" + +/obj/item/clothing/underwear/socks/knee/rainbow + name = "rainbow knee socks" + icon_state = "socks_knee_rainbow" + +/obj/item/clothing/underwear/socks/knee/striped + name = "striped knee socks" + icon_state = "socks_knee_striped" + +/obj/item/clothing/underwear/socks/knee/thin + name = "thin knee socks" + icon_state = "socks_knee_thin" + +/obj/item/clothing/underwear/socks/knee/uk + name = "uk knee socks" + desc = "Brexit or something." + icon_state = "socks_knee_uk" + +/obj/item/clothing/underwear/socks/knee/usa + name = "usa knee socks" + desc = "I'm running out of america jokes." + icon_state = "socks_knee_assblastusa" + +/obj/item/clothing/underwear/socks/latex + name = "latex socks" + desc = "A pair of latex socks." + icon_state = "socks_latex" + +/obj/item/clothing/underwear/socks/pantyhose + name = "pantyhose" + desc = "Pantyhose." + body_parts_covered = FEET | LEGS | GROIN + icon_state = "socks_pantyhose" + +/obj/item/clothing/underwear/socks/pantyhose_ripped + name = "Pantyhose - Ripped" + body_parts_covered = FEET + icon = 'icons/mob/clothing/underwear.dmi' + icon_state = "pantyhose_ripped" + +/obj/item/clothing/underwear/socks/short + name = "short socks" + icon_state = "socks_short" + +/obj/item/clothing/underwear/socks/thigh + name = "thigh high socks" + icon_state = "socks_thigh" + +/obj/item/clothing/underwear/socks/thigh/bee + name = "bee thigh high socks" + desc = "Bee socks." + icon_state = "socks_thigh_bee" + +/obj/item/clothing/underwear/socks/thigh/candycane + name = "candy cane thigh high socks" + desc = "Santa claus or something." + icon_state = "socks_thigh_candycane" + +/obj/item/clothing/underwear/socks/thigh/candycane/green + name = "green candy cane thigh high socks" + desc = "Santa claus or something." + icon_state = "socks_thigh_candycanegreen" + +/obj/item/clothing/underwear/socks/thigh/christmas + name = "christmas thigh high socks" + desc = "Santa claus or something." + icon_state = "socks_thigh_christmas" + +/obj/item/clothing/underwear/socks/thigh/commie + name = "commie thigh high socks" + desc = "Something something the USSR." + icon_state = "socks_thigh_commie" + +/obj/item/clothing/underwear/socks/thigh/rainbow + name = "rainbow thigh high socks" + icon_state = "socks_thigh_rainbow" + +/obj/item/clothing/underwear/socks/thigh/stockings + name = "pink stockings" + desc = "A pair of stockings." + body_parts_covered = LEGS | FEET + icon_state = "stockings_lpink" + +/obj/item/clothing/underwear/socks/thigh/stockings/blue + name = "blue stockings" + icon_state = "stockings_blue" + +/obj/item/clothing/underwear/socks/thigh/stockings/cyan + name = "cyan stockings" + icon_state = "stockings_cyan" + +/obj/item/clothing/underwear/socks/thigh/stockings/fishnet + name = "fishnet stockings" + icon_state = "stockings_fishnet" + +/obj/item/clothing/underwear/socks/thigh/stockings/fishnet/alt + name = "fishnet stockings (alt)" + icon_state = "fishnet_alt" + +/obj/item/clothing/underwear/socks/thigh/stockings/green + name = "green stockings" + icon_state = "stockings_green" + +/obj/item/clothing/underwear/socks/thigh/stockings/orange + name = "orange stockings" + icon_state = "stockings_orange" + +/obj/item/clothing/underwear/socks/thigh/stockings/pink2 + name = "deep pink stockings" + icon_state = "stockings_dpink" + +/obj/item/clothing/underwear/socks/thigh/stockings/purple + name = "purple stockings" + icon_state = "stockings_purple" + +/obj/item/clothing/underwear/socks/thigh/stockings/yellow + name = "yellow stockings" + icon_state = "stockings_yellow" + +/obj/item/clothing/underwear/socks/thigh/thin + name = "thin thigh high socks" + icon_state = "socks_thigh_thin" + +/obj/item/clothing/underwear/socks/thigh/striped + name = "striped thigh high socks" + icon_state = "socks_thigh_striped" + +/obj/item/clothing/underwear/socks/thigh/uk + name = "uk thigh high socks" + desc = "Something something british people have bad teeth." + icon_state = "socks_thigh_uk" + +/obj/item/clothing/underwear/socks/thigh/usa + name = "usa thigh high socks" + desc = "McDonald's or something." + icon_state = "socks_thigh_assblastusa" + +/obj/item/clothing/underwear/socks/stir + name = "polychromatic stirrups" + desc = "A type of close-fitting ladies' pant that tapers at the ankle, similar to leggings, except that the material extends to a band, or strap, that is worn under the arch of the foot to hold the pant leg in place." + body_parts_covered = NONE + icon_state = "socks_norm-stir" + var/polychromic = TRUE + +/obj/item/clothing/underwear/socks/stir/knee + name = "polychromatic knee-high stirrups" + icon_state = "socks_knee-stir" + +/obj/item/clothing/underwear/socks/stir/knee/rainbow + name = "knee-high rainbow stirrups" + icon_state = "rainbow_knee-stir" + polychromic = FALSE + +/obj/item/clothing/underwear/socks/stir/leggings + name = "leggings stirrups" + body_parts_covered = LEGS | GROIN + icon_state = "leggings-stir" + polychromic = FALSE + +/obj/item/clothing/underwear/socks/stir/leggings/pantyhose + name = "pantyhose stirrups" + icon_state = "pantyhose-stir" + polychromic = FALSE + +/obj/item/clothing/underwear/socks/stir/leggings/pantyhose/ripped + name = "ripped pantyhose stirrups" + body_parts_covered = NONE + icon_state = "pantyhose_ripped-stir" + polychromic = FALSE + +/obj/item/clothing/underwear/socks/stir/thigh + name = "polychromatic thigh-high stirrups" + body_parts_covered = LEGS + icon_state = "socks_thigh-stir" + +/obj/item/clothing/underwear/socks/stir/thigh/striped + name = "thigh-high striped stirrups" + icon_state = "striped_thigh-stir" + polychromic = FALSE + +/obj/item/clothing/underwear/socks/stir/thigh/gym + name = "thigh-high stirrups (black with stripe)" + icon_state = "striped_thigh-stir" + polychromic = FALSE + +/obj/item/clothing/underwear/socks/stir/thigh/rainbow + name = "thigh-high rainbow stirrups" + icon_state = "rainbow_thigh-stir" + polychromic = FALSE diff --git a/modular_zzplurt/icons/hud/screen_clockwork.dmi b/modular_zzplurt/icons/hud/screen_clockwork.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d84503c7681666c0666af23535638940eff1f104 GIT binary patch literal 17406 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 Y0fttO#;*r~-T(jq07*qoM6N<$f~eP8%>V!Z literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/hud/screen_detective.dmi b/modular_zzplurt/icons/hud/screen_detective.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5de29ad1e81c09a8e20f9e90a1fdfef7a952d9b0 GIT binary patch literal 14949 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 be1n0VoHv$8Xo-dXPZ&T>N?Ec7XdLu^KA?|v literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/hud/screen_midnight.dmi b/modular_zzplurt/icons/hud/screen_midnight.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c180ed4f37961f9efcf24c24f34ab43b06947511 GIT binary patch literal 26389 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 z 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 LNkvXXu0mjf07F0p literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/hud/screen_operative.dmi b/modular_zzplurt/icons/hud/screen_operative.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8e2eeaa3159d7ec986740901a9dcb4a34b3edd0f GIT binary patch literal 16740 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 E7h}2)*8l(j literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/hud/screen_plasmafire.dmi b/modular_zzplurt/icons/hud/screen_plasmafire.dmi new file mode 100644 index 0000000000000000000000000000000000000000..18f99515b95889813b007007dcc3b4d97365f798 GIT binary patch literal 28452 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 WF0#`n`u@8FPebLka*ZM=`u_nc&pUen literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/hud/screen_retro.dmi b/modular_zzplurt/icons/hud/screen_retro.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8c8b92090822990033280be21d3ad63eaec94ec9 GIT binary patch literal 12781 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 X&#pXVHQ?UAw>gyM)#WN=EW-W=uz`sj literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/hud/screen_slimecore.dmi b/modular_zzplurt/icons/hud/screen_slimecore.dmi new file mode 100644 index 0000000000000000000000000000000000000000..91b01910e3d811d4d5464ef6ecaa1310f7e42e67 GIT binary patch literal 26972 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 literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/hud/screen_trasenknox.dmi b/modular_zzplurt/icons/hud/screen_trasenknox.dmi new file mode 100644 index 0000000000000000000000000000000000000000..bf229f7bada10b64c640a48718c291bd36a1d4d8 GIT binary patch literal 15767 zcmXwAbyQo;)5hJ3yA-$L?oeoP_u@`)cc&CD#oda#LveSvBE^GyuweP}{?7USNOI5K z+1%Z^yEC)%JQJ;^@&yx(6b%Lj22=j)XAS7@&VL^iB=dQI)OLFe*zs%l{SN(9B+m^-8B}Y!qaX?5*1|v+370FPOAR>UzMMv#B2;mYx z<|zb!>CnobC}IkeQ7?~+VL%+4`ISJQq#kl!Q0JOdM<-?mxDjV|@>RJdDXdHTNjrHF z(qr(&N~52&yt)-*kVhDhXy|QU5%whXrQ?&aS))IN2vf1XFEXMUTV;s+r#{)0p<4uj z4>dn8x%_=m4s-Y}t1O%2ZeuS{kz{pI`-?OkuFy`LRzqTz2u7Kuw3Uvro7bb???uDR zZBa?=q=t1aD}Gzr3~vN|)m;gWasjBU77H2ATnMOMF{Bq+%%j4&K7`Lx9DFK}_0H{C%#6OBec!ZJth6qkwH5d%O{M_>h5&NTBmE4N%1& zJapF1-?oyVX$YS5ob*gD@xS2Y!dpwD$i$V^_$8~b5*}e`U|=^bz#hGa4j%>sJB3l& zIr~;zhHOLn50rNTJ1;>9m=hCw%M}mo0p)^nN6W}XeSV6mO3*tQx5W6l?H$Osirru$ zUK<64^gg}4zopc@rbC|iTtSuEn*r{*crJT%j4F8ueX8J4+~-)MCmR5G@c{2$VJI4p z(P$RTOm(V>cc}Ti# z+_p5?%vfW;A6^CNr6V{52cW~)%;rF!-=oA1kmi^a$p+3o+?Elvd#$KXX3fC+7Uc_ zy^0!=;C>+TgRluZnw3wD$&Z?VGH-I`(`N#a)rCJ7`0z(}l_fN$r(&Jj5oO+zSCN_N zN3yI1i*PwxT=%)40Cu!qJVTYjt15cPT>`D_cAe)2v)rSo{C4XmRoZEUTR= zboT)#rX26d$JM2e9&5DOf@h9uBDc-te59Hbj+u765UHtjHNl%X98hhJmkvh1-2%^8 zm{FV*+`GJW#~+zntoBN5OMF7B;vEpqb>?oiEEZ>U*PrWMLF`KdSDdu?Y9liaVERd& z#uXnSIOvPZ2HpNMKmqP7U)9nZyD8kjb!wR7{k8iSQ=-9o47^W!!tH;4wig*st9F@3caWOAg2ib->N;A(klOc&GnCw-Cs)2VN-7p(KY)@%a*yr~mNo%kP$jLKI9_GG6738BOnZf@X2 zAGmv?!H`s;*5IH0zTfg3*t+;HVnf;iAZXPb>1X=j@F#LsuUfzdN((-(k{8#3h;b=WJ@2z{PU+SD2MeVuUn~GafJ<~*Mcf1 zU+S9K4qgKJCiLaem~2`XUstlEWiangk(cpQCp~xZ9YkcE57lNM(5csed~>uTT_$A= zVRPDBg1WW_*$IBr=%TWl44oEl2yJz;ZfNC1U-jB@l)L}b3_3A(+_kr0E!3?MS>%?W zx_4M73U3(ep`lQ@SvS`_LSqjkaD78^DxRbuGPCXa}V&AUJ4Q z(nn-&-)FdL&fCX#8HJt8hwq7H8OJa>zo^B%+VkKY5XsPBA1HlPlSK8GDf0BLJ!tVR zea=*oWs5Kj)$=}@ASWpqt3%?E3SyqJEJ+?`F%=V-aIHdpOLJ~=0CUge31zc$0_$rR z-(DMmlW6a)q_?1do$A0BsM-HjC*=qbXLRB#+`e^$N=`y0Vpz(7zpi9wb-+Qr!4g2$ z#D{IhbBsD&_MMcYvRCJzGygS;tl;Z6=UBh7bgPLeIk3djdz+0XSd;RiS9Of>ED~h) z_UlTU82&W8=B}ybl^GeEvf6O^Xz0^x&?NRX5!4^#-}2QrZzn$4@&`>miiqcKKfS&F z?`gBoPa)7ILsT380P$WR@(nE6XK{oZ=t_U37B>wa!`=f;tAM2f`jCEd;0+yhiXUu{ zd3Ic+sI@$WfcZaRG9}8z&FY@*h^&%zygX>NvlphrWb_E~qfBax$CKvIvNNe(Cv>}B zG8-`ID2$_Ja40C_q@6tvIEJsAn_D92;Wz0zj^Dt7WGfol67%Kf?cg?V)?*g72tOwz zedq$jYJ|002Wy^A=W=|$beP~GuVtiXW5D?$78a2vP2UK*fCsFe{_Io(`}wXe_if=% zcF5#zAoUZ7nC0Y7`#F9vspA|TM%XLY{W+&mZe=p5zV-!b>ulr_spuE`LXyjJ^poxG}A!0Pe-yqhGnB3+F-M1dYZMqNF&w2p^!T0KN* z#F{nqGIh-z>U-t9bp%vs4*aOl)lcO5z+pFI>LE4WL6+<9Ie{Bq?#=#I%V<5iv7@yP z=zQ}4edZ%g@fWaFpvz@~uDW)|^YH^Ydz(4Qk~N2-P;z%lfYv&5m5zcQ2GkTv)tN{T9hnt!H}zKR{vt<=018xIiuo3qY$lz(GstLu?Sy6E!L@N-65kfBcAJC zt{5cONv~C9m*lkg=^uXGW&lTLWy(J9lFVAE?AM9Ar~_O1R42_#3`x7-iKNg?w(RWT z`#({OnE%EEUwXV`Z44=1C{jA%+sRZo+Ri=PSi0j^TT+GLyGxCP2|9l%)D^YHWZy2+ zs&tXlswE)MjiRuXjqh5?CwkT0=@K>Cr!J&bUwV&t%;+QE56R(I$Nuo8M|N;pBh%`ja_Z$ zoU1+|1S`X#oN|4u6x3e$HTPNDz$7E~D^Yf9Ry?A@;&jduEjC&_ z;tH+C&l;D;kL!dI*ra-*KsbZ;-`tU4jIZJN*$ZjH?Ii(6P$8m>eqaSse z_V|ln&Mv6X6>a!ll6LgS9ZT_VQaF%s&i;0&HD9Woge1Gt?=iMxZ0!yWzm9(@;wiuh z-OVbNdRE49C{3Mf%qY$v{k~`)UU)Q|r7&r)i7zG~I};~=wu4&tQ_k&Nh;E_d(5r<1 zA=|S^S?PTPpwP!^6uElD)UtTk27mzO=V2Gm*WI1cwI$<%yrtx~gtS!q=C%{muYH1K zZ$IbVhF=96E)C+g%SPV5fNiQ?^{J@lu-Dv3U$K%_P;S7lQ^CCpI77$|)Zn1~N6@S_ zxF?b^yh0B#Xxu5{+BB%?=%fr`$1tF4Ef3NY!Po@k3p)_Wq!SJmk;DBB%EJ^R-gX$uO^xwZ^`*{eHacpA@kni6`DX>5HV8^y@U4?8DnM*bx4^d#vkwF`LI6?~j}q(M z-2Q>|X&X)xeA3BIrDm)qAp)|gQ__ZS%fbmhLXWdI`na8 zyri!q#G>1n5JV5)B5cAZF@E$;Hc~za%HB+LZ?ay#_Sy2@?(TYj&W2f=wRhhRd|Wx` z0cyBacx=>euqOD>8^ZIu<=mR11@onFZeIc0<02O{J{iy8we=X$AhJhv6L(OeEii>& zs};em06H(tuUS=mi{l#B#$t}!aMKjUh-fFd&luRSt(=v&nU;8U^`p{*8di4V$^(Dw=7}x4B((n52J4}=7P=9 zqE+#2VJp-G$Jjk+50Vlz+CO;TdbTu2aJwzu`4L}%0Al9yrA1p@uq@G<#^^EHL-s5o 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
;=|b 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 literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/mob/clothing/underwear_digi.dmi b/modular_zzplurt/icons/mob/clothing/underwear_digi.dmi new file mode 100644 index 0000000000000000000000000000000000000000..81b2f9704ba3d8cb009921bf66d55de94c979efb GIT binary patch literal 70353 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 literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/mob/clothing/wrists.dmi b/modular_zzplurt/icons/mob/clothing/wrists.dmi new file mode 100644 index 0000000000000000000000000000000000000000..89abc1d336ac4286cde58f0fb60cbc9463461059 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSoB=)|t_Kbrn3N`UewX_Uw$EZf zLB^6GzhDN3XE)M-oZ_mGh!U67;^d;tf|AVqJO+k}Il*BCMWx@r1Q&e#`b5iHSL@uF z^T8WJ4K5l#c%*aQNAn~@QBUs<3*#W;%f?;`a~@4PGATqMSkqG7-g39iehuq=7V3tc zo!!Q&n^#CIncZ!?R>RO-^oZG$ps<3k#f-E08FKSv@1-WJhy_|N@9E+gV$qwNAi?Uw s;Hi+tBaso_)8xpv%!+3V_X}PI5j#eQkEc$)0xD(jboFyt=akR{05K?4_W%F@ literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 57eac54201ee4..3914253f0f811 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9110,6 +9110,10 @@ #include "modular_zzplurt\code\modules\client\preferences\player_panel.dm" #include "modular_zzplurt\code\modules\client\verbs\looc.dm" #include "modular_zzplurt\code\modules\client\verbs\ooc.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\_underwear.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\boxers.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\shirts.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\socks.dm" #include "modular_zzplurt\code\modules\discord\tgs_commands.dm" #include "modular_zzplurt\code\modules\discord\verbs.dm" #include "modular_zzplurt\code\modules\mob\mob.dm" From 206715f1678cc71bba5425ae8e40dd28652244cc Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 17 Jul 2024 17:16:33 -0300 Subject: [PATCH 004/117] compile --- code/datums/outfit.dm | 72 ++++++++-- .../antagonists/changeling/changeling.dm | 6 +- code/modules/clothing/outfits/vv_outfit.dm | 2 +- .../living/carbon/human/human_update_icons.dm | 130 +++++++----------- code/modules/mob/mob.dm | 95 ------------- code/modules/surgery/bodyparts/parts.dm | 5 + 6 files changed, 125 insertions(+), 185 deletions(-) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 0cdbddbe04e7c..6d657fc2f9f32 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -109,11 +109,11 @@ //sandstorm edit ///Slot for underwear like boxers and panties - var/underwear = null + var/w_underwear = null ///Slot for socks, yes, the thing that usually goes before your shoes - var/socks = null + var/w_socks = null ///Slot for the undershirt (which is quite a foreign concept to me) or bras - var/shirt = null + var/w_shirt = null ///Slot for the opposite ear. var/ears_extra = null ///Slot for the part of your arms that isn't quite hands yet. @@ -130,6 +130,11 @@ ///Should we preload some of this job's items? var/preload = FALSE + /// Any undershirt. While on humans it is a string, here we use paths to stay consistent with the rest of the equips. + var/datum/sprite_accessory/undershirt = null + var/datum/sprite_accessory/underwear = null + var/datum/sprite_accessory/socks = null + /** * Called at the start of the equip proc * @@ -219,15 +224,24 @@ if(suit_store) EQUIP_OUTFIT_ITEM(suit_store, ITEM_SLOT_SUITSTORE) + if(undershirt) + user.undershirt = initial(undershirt.name) + + if(underwear) + user.underwear = initial(underwear.name) + + if(socks) + user.socks = initial(socks.name) + // Sandstorm edit if(ears_extra) EQUIP_OUTFIT_ITEM(ears_extra, ITEM_SLOT_EARS_RIGHT) - if(underwear) - EQUIP_OUTFIT_ITEM(underwear, ITEM_SLOT_UNDERWEAR) - if(socks) - EQUIP_OUTFIT_ITEM(socks, ITEM_SLOT_SOCKS) - if(shirt) - EQUIP_OUTFIT_ITEM(shirt, ITEM_SLOT_SHIRT) + if(w_underwear) + EQUIP_OUTFIT_ITEM(w_underwear, ITEM_SLOT_UNDERWEAR) + if(w_socks) + EQUIP_OUTFIT_ITEM(w_socks, ITEM_SLOT_SOCKS) + if(w_shirt) + EQUIP_OUTFIT_ITEM(w_shirt, ITEM_SLOT_SHIRT) if(wrists) EQUIP_OUTFIT_ITEM(wrists, ITEM_SLOT_WRISTS) // @@ -323,6 +337,10 @@ user.wear_id.add_fingerprint(user, ignoregloves = TRUE) if(user.w_uniform) user.w_uniform.add_fingerprint(user, ignoregloves = TRUE) + if(user.w_underwear) + user.w_underwear.add_fingerprint(user, ignoregloves = TRUE) + if(user.w_shirt) + user.w_shirt.add_fingerprint(user, ignoregloves = TRUE) if(user.wear_suit) user.wear_suit.add_fingerprint(user, ignoregloves = TRUE) if(user.wear_mask) @@ -333,10 +351,16 @@ user.head.add_fingerprint(user, ignoregloves = TRUE) if(user.shoes) user.shoes.add_fingerprint(user, ignoregloves = TRUE) + if(user.w_socks) + user.w_socks.add_fingerprint(user, ignoregloves = TRUE) if(user.gloves) user.gloves.add_fingerprint(user, ignoregloves = TRUE) + if(user.wrists) + user.wrists.add_fingerprint(user, ignoregloves = TRUE) if(user.ears) user.ears.add_fingerprint(user, ignoregloves = TRUE) + if(user.ears_extra) + user.ears_extra.add_fingerprint(user, ignoregloves = TRUE) if(user.glasses) user.glasses.add_fingerprint(user, ignoregloves = TRUE) if(user.belt) @@ -366,6 +390,10 @@ id = H.wear_id.type if(H.w_uniform) uniform = H.w_uniform.type + if(H.w_underwear) + w_underwear = H.w_underwear.type + if(H.w_shirt) + w_shirt = H.w_shirt.type if(H.wear_suit) suit = H.wear_suit.type if(H.wear_mask) @@ -376,10 +404,16 @@ head = H.head.type if(H.shoes) shoes = H.shoes.type + if(H.w_socks) + w_socks = H.w_socks.type if(H.gloves) gloves = H.gloves.type + if(H.wrists) + wrists = H.wrists.type if(H.ears) ears = H.ears.type + if(H.ears_extra) + ears_extra = H.ears_extra.type if(H.glasses) glasses = H.glasses.type if(H.belt) @@ -402,6 +436,8 @@ var/list/preload = list() preload += id preload += uniform + preload += w_underwear + preload += w_shirt preload += suit preload += suit_store preload += back @@ -411,12 +447,15 @@ preload += type_to_load preload += belt preload += ears + preload += ears_extra preload += glasses preload += gloves + preload += wrists preload += head preload += mask preload += neck preload += shoes + preload += w_socks preload += l_pocket preload += r_pocket preload += l_hand @@ -438,15 +477,20 @@ .["outfit_type"] = type .["name"] = name .["uniform"] = uniform + .["w_underwear"] = w_underwear + .["w_shirt"] = w_shirt .["suit"] = suit .["back"] = back .["belt"] = belt .["gloves"] = gloves + .["wrists"] = wrists .["shoes"] = shoes + .["w_socks"] = w_socks .["head"] = head .["mask"] = mask .["neck"] = neck .["ears"] = ears + .["ears_extra"] = ears_extra .["glasses"] = glasses .["id"] = id .["id_trim"] = id_trim @@ -465,15 +509,20 @@ /datum/outfit/proc/copy_from(datum/outfit/target) name = target.name uniform = target.uniform + w_underwear = target.w_underwear + w_shirt = target.w_shirt suit = target.suit back = target.back belt = target.belt gloves = target.gloves + wrists = target.wrists shoes = target.shoes + w_socks = target.w_socks head = target.head mask = target.mask neck = target.neck ears = target.ears + ears_extra = target.ears_extra glasses = target.glasses id = target.id id_trim = target.id_trim @@ -503,15 +552,20 @@ //This could probably use more strict validation name = outfit_data["name"] uniform = text2path(outfit_data["uniform"]) + w_underwear = text2path(outfit_data["w_underwear"]) + w_shirt = text2path(outfit_data["w_shirt"]) suit = text2path(outfit_data["suit"]) back = text2path(outfit_data["back"]) belt = text2path(outfit_data["belt"]) gloves = text2path(outfit_data["gloves"]) + wrists = text2path(outfit_data["wrists"]) shoes = text2path(outfit_data["shoes"]) + w_socks = text2path(outfit_data["w_socks"]) head = text2path(outfit_data["head"]) mask = text2path(outfit_data["mask"]) neck = text2path(outfit_data["neck"]) ears = text2path(outfit_data["ears"]) + ears_extra = text2path(outfit_data["ears_extra"]) glasses = text2path(outfit_data["glasses"]) id = text2path(outfit_data["id"]) id_trim = text2path(outfit_data["id_trim"]) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 4be9d8c75d08a..ea55e95832048 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -812,9 +812,9 @@ "s_store" = ITEM_SLOT_SUITSTORE, // Extra inventory - "underwear" = ITEM_SLOT_UNDERWEAR, - "socks" = ITEM_SLOT_SOCKS, - "shirt" = ITEM_SLOT_SHIRT, + "w_underwear" = ITEM_SLOT_UNDERWEAR, + "w_socks" = ITEM_SLOT_SOCKS, + "w_shirt" = ITEM_SLOT_SHIRT, "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 7f429937c1c6e..bda7ea7251083 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -38,7 +38,7 @@ if(ITEM_SLOT_WRISTS) wrists = item_path if(ITEM_SLOT_SHIRT) - shirt = item_path + w_shirt = item_path if(ITEM_SLOT_UNDERWEAR) underwear = item_path if(ITEM_SLOT_SOCKS) 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 d784f977b424c..25bd1d3d4cb27 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -189,9 +189,7 @@ There are several things that need to be remembered: var/mutable_appearance/underwear_overlay var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' var/handled_by_bodyshape = TRUE - var/woman var/digi - var/female_sprite_flags = undies.female_sprite_flags var/mutant_styles = NONE if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undies.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) icon_file = undies.worn_icon_digi || DIGITIGRADE_UNDERWEAR_FILE @@ -200,27 +198,17 @@ There are several things that need to be remembered: else if(bodyshape & BODYSHAPE_CUSTOM) icon_file = dna.species.generate_custom_worn_icon(OFFSET_UNDERWEAR, w_underwear, src) - if(!dna.species.no_gender_shaping && dna.species.sexes && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_UNDERWEAR)) - woman = TRUE - if(digi) - mutant_styles |= STYLE_DIGI - if(!(female_sprite_flags & FEMALE_UNDERWEAR_DIGI_FULL)) - female_sprite_flags &= ~FEMALE_UNDERWEAR_FULL - female_sprite_flags |= FEMALE_UNDERWEAR_TOP_ONLY + if(digi) + mutant_styles |= STYLE_DIGI if(!icon_exists(icon_file, RESOLVE_ICON_STATE(undies))) icon_file = DEFAULT_UNDERWEAR_FILE handled_by_bodyshape = FALSE - if(bodyshape & BODYSHAPE_TAUR) - if(istype(undies) && undies.gets_cropped_on_taurs) - mutant_styles |= get_taur_mode() - underwear_overlay = undies.build_worn_icon( default_layer = UNDERWEAR_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, @@ -234,69 +222,57 @@ There are several things that need to be remembered: update_mutant_bodyparts() /mob/living/carbon/human/update_worn_shirt(update_obscured = TRUE) - remove_overlay(SHIRT_LAYER) - - if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SHIRT) + 1] - inv.update_icon() - - if(istype(w_shirt, /obj/item/clothing/underwear/shirt)) - var/obj/item/clothing/underwear/shirt/undershirt = w_shirt - update_hud_shirt(undershirt) - - if(update_obscured) - update_obscured_slots(undershirt.flags_inv) - - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SHIRT) - return - - var/target_overlay = undershirt.icon_state - var/mutable_appearance/shirt_overlay - var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' - var/handled_by_bodyshape = TRUE - var/woman - var/digi - var/female_sprite_flags = undershirt.female_sprite_flags - var/mutant_styles = NONE - if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undershirt.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) - icon_file = undershirt.worn_icon_digi || DIGITIGRADE_SHIRT_FILE - digi = TRUE - - else if(bodyshape & BODYSHAPE_CUSTOM) - icon_file = dna.species.generate_custom_worn_icon(OFFSET_SHIRT, w_shirt, src) - - if(!dna.species.no_gender_shaping && dna.species.sexes && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_SHIRT)) - woman = TRUE - if(digi) - mutant_styles |= STYLE_DIGI - if(!(female_sprite_flags & FEMALE_SHIRT_DIGI_FULL)) - female_sprite_flags &= ~FEMALE_SHIRT_FULL - female_sprite_flags |= FEMALE_SHIRT_TOP_ONLY - - if(!icon_exists(icon_file, RESOLVE_ICON_STATE(undershirt))) - icon_file = DEFAULT_SHIRT_FILE - handled_by_bodyshape = FALSE - - if(bodyshape & BODYSHAPE_TAUR) - if(istype(undershirt) && undershirt.gets_cropped_on_taurs) - mutant_styles |= get_taur_mode() - - shirt_overlay = undershirt.build_worn_icon( - default_layer = SHIRT_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, - ) - - var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) - my_chest?.worn_shirt_offset?.apply_offset(shirt_overlay) - overlays_standing[SHIRT_LAYER] = shirt_overlay - apply_overlay(SHIRT_LAYER) - - update_mutant_bodyparts() + remove_overlay(SHIRT_LAYER) + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SHIRT) + 1] + inv.update_icon() + + if(istype(w_shirt, /obj/item/clothing/underwear/shirt)) + var/obj/item/clothing/underwear/shirt/undershirt = w_shirt + update_hud_shirt(undershirt) + + if(update_obscured) + update_obscured_slots(undershirt.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SHIRT) + return + + var/target_overlay = undershirt.icon_state + var/mutable_appearance/shirt_overlay + var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' + var/handled_by_bodyshape = TRUE + var/digi + var/mutant_styles = NONE + if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undershirt.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + icon_file = undershirt.worn_icon_digi || DIGITIGRADE_SHIRT_FILE + digi = TRUE + + else if(bodyshape & BODYSHAPE_CUSTOM) + icon_file = dna.species.generate_custom_worn_icon(OFFSET_SHIRT, w_shirt, src) + + if(digi) + mutant_styles |= STYLE_DIGI + + if(!icon_exists(icon_file, RESOLVE_ICON_STATE(undershirt))) + icon_file = DEFAULT_SHIRT_FILE + handled_by_bodyshape = FALSE + + shirt_overlay = undershirt.build_worn_icon( + default_layer = SHIRT_LAYER, + default_icon_file = icon_file, + isinhands = FALSE, + override_state = target_overlay, + override_file = handled_by_bodyshape ? icon_file : null, + mutant_styles = mutant_styles, + ) + + var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) + my_chest?.worn_shirt_offset?.apply_offset(shirt_overlay) + overlays_standing[SHIRT_LAYER] = shirt_overlay + apply_overlay(SHIRT_LAYER) + + update_mutant_bodyparts() /mob/living/carbon/human/update_worn_id(update_obscured = TRUE) remove_overlay(ID_LAYER) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index e7f44369f824c..16ccf461e2545 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -470,101 +470,6 @@ return FALSE -/** - * Try to equip an item to a slot on the mob - * - * This is a SAFE proc. Use this instead of equip_to_slot()! - * - * set qdel_on_fail to have it delete W if it fails to equip - * - * set disable_warning to disable the 'you are unable to equip that' warning. - * - * unset redraw_mob to prevent the mob icons from being redrawn at the end. - * - * Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it - * - * set indirect_action to allow insertions into "soft" locked objects, things that are easily opened by the owning mob - */ -/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE, initial = FALSE, indirect_action = FALSE) - if(!istype(W) || QDELETED(W)) //This qdeleted is to prevent stupid behavior with things that qdel during init, like say stacks - return FALSE - if(!W.mob_can_equip(src, slot, disable_warning, bypass_equip_delay_self, indirect_action = indirect_action)) - if(qdel_on_fail) - qdel(W) - else if(!disable_warning) - to_chat(src, span_warning("You are unable to equip that!")) - return FALSE - equip_to_slot(W, slot, initial, redraw_mob, indirect_action = indirect_action) //This proc should not ever fail. - return TRUE - -/** - * Actually equips an item to a slot (UNSAFE) - * - * This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on - * whether you can or can't equip need to be done before! Use mob_can_equip() for that task. - * - *In most cases you will want to use equip_to_slot_if_possible() - */ -/mob/proc/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) - return - -/** - * Equip an item to the slot or delete - * - * This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to - * equip people when the round starts and when events happen and such. - * - * Also bypasses equip delay checks, since the mob isn't actually putting it on. - * Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it - * set indirect_action to allow insertions into "soft" locked objects, things that are easily opened by the owning mob - */ -/mob/proc/equip_to_slot_or_del(obj/item/W, slot, initial = FALSE, indirect_action = FALSE) - return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE, initial, indirect_action) - -/** - * Auto equip the passed in item the appropriate slot based on equipment priority - * - * puts the item "W" into an appropriate slot in a human's inventory - * - * returns 0 if it cannot, 1 if successful - */ -/mob/proc/equip_to_appropriate_slot(obj/item/W, qdel_on_fail = FALSE, indirect_action = FALSE, blacklist, initial) //SKYRAT EDIT CHANGE - - if(!istype(W)) - return FALSE - var/slot_priority = W.slot_equipment_priority - - if(!slot_priority) - slot_priority = list( \ - ITEM_SLOT_BACK, ITEM_SLOT_ID,\ - ITEM_SLOT_UNDERWEAR,\ - ITEM_SLOT_SOCKS,\ - ITEM_SLOT_SHIRT,\ - ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ - ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ - ITEM_SLOT_FEET, ITEM_SLOT_WRISTS, ITEM_SLOT_GLOVES,\ - ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT,\ - ITEM_SLOT_EYES,\ - ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ - ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\ - ITEM_SLOT_DEX_STORAGE\ - ) - - //SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION - /* - for(var/slot in slot_priority) - if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, FALSE)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE; - */ - if (blacklist) - slot_priority -= blacklist - for(var/slot in slot_priority) - if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, initial, indirect_action = indirect_action)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE; - //SKYRAT EDIT CHANGE END - return TRUE - - if(qdel_on_fail) - qdel(W) - return FALSE /** * Reset the attached clients perspective (viewpoint) * diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 6e3b5ca921bc4..afc73df55f816 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -34,6 +34,11 @@ var/datum/worn_feature_offset/worn_suit_offset /// Offset to apply to equipment worn on the neck var/datum/worn_feature_offset/worn_neck_offset + + /// Offset to apply to equipment worn as underwear + var/datum/worn_feature_offset/worn_underwear_offset + /// Offset to apply to equipment worn as a shirt + var/datum/worn_feature_offset/worn_shirt_offset /// Which functional (i.e. flightpotion) wing types (if any) does this bodypart support? If count is >1 a radial menu is used to choose between all icons in list var/list/wing_types = list(/obj/item/organ/external/wings/functional/angel) From 95c851aa504070227b9b37f72436115ec2c67285 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 17 Jul 2024 17:43:42 -0300 Subject: [PATCH 005/117] oopsie wrong files :)))) --- .../icons/hud/screen_clockwork.dmi | Bin 17406 -> 2800 bytes .../icons/hud/screen_detective.dmi | Bin 14949 -> 0 bytes modular_zzplurt/icons/hud/screen_glass.dmi | Bin 13882 -> 0 bytes modular_zzplurt/icons/hud/screen_midnight.dmi | Bin 26389 -> 4473 bytes .../icons/hud/screen_operative.dmi | Bin 16740 -> 4488 bytes .../icons/hud/screen_plasmafire.dmi | Bin 28452 -> 4414 bytes modular_zzplurt/icons/hud/screen_retro.dmi | Bin 12781 -> 2299 bytes .../icons/hud/screen_slimecore.dmi | Bin 26972 -> 4307 bytes .../icons/hud/screen_trasenknox.dmi | Bin 15767 -> 926 bytes 9 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 modular_zzplurt/icons/hud/screen_detective.dmi delete mode 100644 modular_zzplurt/icons/hud/screen_glass.dmi diff --git a/modular_zzplurt/icons/hud/screen_clockwork.dmi b/modular_zzplurt/icons/hud/screen_clockwork.dmi index d84503c7681666c0666af23535638940eff1f104..eefd18fdc5ad9801fe009b467719cd273ea43542 100644 GIT binary patch literal 2800 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 Y0fttO#;*r~-T(jq07*qoM6N<$f~eP8%>V!Z diff --git a/modular_zzplurt/icons/hud/screen_detective.dmi b/modular_zzplurt/icons/hud/screen_detective.dmi deleted file mode 100644 index 5de29ad1e81c09a8e20f9e90a1fdfef7a952d9b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14949 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 be1n0VoHv$8Xo-dXPZ&T>N?Ec7XdLu^KA?|v diff --git a/modular_zzplurt/icons/hud/screen_midnight.dmi b/modular_zzplurt/icons/hud/screen_midnight.dmi index c180ed4f37961f9efcf24c24f34ab43b06947511..9366925181ae352b8e9bc94b08679dfce6af7b3c 100644 GIT binary patch literal 4473 zcmV-<5r*!GP)V=-0C=2*&CLqJFc1XbbMh2Rdl&z%xkyXNp?w7jW=(=^BfG2d@jVngn%fL~ z%(QUn2RlJGTKz`ilvglt-tDz2$x8$Sr=wO8Q;4z^7AFV>8o}i`JHbXPpNPT0L908t z1-JZzuhktS ze6WFBbICEcAV31-=u40s9UXE|4)GyQ5FdgC62-E26?<)ISK8HD>qy$28P1F3aM*lw zRSwPW;iH?coka$m)G5x44pgvumTE&M^-MEV`*t6GINu{&d#>Az5UQy zS=s2|IZggT;gQu{3De^5P(UJ)a*M?xN~wW25`Yi_0IfB82y!VUiA2f;B3s%h{Nvy( z@^@5#<2WZq-kyn_o$bhTr^Ua!TR1cP9Tm`B`%=mi%}h5=vh@Y%_e|5^f1(s1TP6=c zX+7|G9RIiqI0^o~3J5MZEyT4z0T?6X!&54@PdW_+2pF1wpaP^218a2@jH3W^j7HFm zDado(2PmaRZh`Ic9+@wq;hZ)8z6uaP!j#mTlWP^DD!??33n1AXJWr~d$HVxh7hM1| z1;n6-zpeFIo{e|unSnLnesb5X8`WdZu2wiM|F{^$-&X-r2rSR$NFF_QM%ptltO9}p zu#`o0ZOzK$76%htdcm6C+;m;(D1-{CyQ503l0} znLP=_wZNKJC%LvprL;TTeGW>vEfq{c0hVW@FFliKPuuw9ZpAg-jMcO%N0*+>v}>jQ z$=%AZ`~ycprj)TGig7Ti0!%|-Hd0i9VH8j)?c(HfWD+Two_=fvwDYfDcnN?<_wV53 zb0kEflGb+QxncRw{7l#of|O^ITw4RcSy_$0etXORe^8=kRPiP-3JUpGS1A>?$t|yh z9IokR8qG!}xwdwEPV15Q&-^?<3gPzw5$TKDTagvw zZufSMZUqD;(8=d;$aRdA;`q<>JOFxIVDOL~*L5A6lmgN!P4&{V;pj)SnV~2J1m~-3 zYZ>rIO5H>Fk>>#^&!#%1c|ec{0Bdv8t#mD<*fGbLPmm-L=@1)M0cmYhU0cg^kGx6+ zKkspUKqj{scGQm`<7{qL+LbVd0;V?)2=gHXMT%GlrHt)Rf*!{gBZct)B$##oIhsiqrF=)&Nk&Hl z;B|gIat}yb`Hp)G;&1l^jN}WN1jhBn1TJZ_X^}QH@|7!=7KVRM?cx3Urdw?anx;Fk z=;)}l>2zlhR@%yUELE1v<=Fd2VI&1iD?VQUh9O8Ri~2LqTT+_Ltt}vQ%LEC{p}b}# zRFmX`d+w2R@w{lW^ws2>uV2=ttYBz1wulyaoj5E6KsKDCZ!~; zQ#4+E#ma3gBeXyWfoLf}zBVKr{uaF0YSGMHfGHR-PO-3mBz53nrFnHMg9nvQxyke>)s4co!~PndNy7xA!oAdnfkcg9jQlE+^^PaN(krZ56&0 z5|A8K_W(%S3kV5HHOX!)qq$<)_dj#%5exI<@VDPX1dBit8oEXzWz*CyLI{!);?Mzhl#j>Dhzl9|J& zpC`NIN2rAP5R$+SYvmz?KkH#alQY^tXcMp8gprSY!5X306pTzbhb{4jH( zXCstAkg*myR6BSVE?bQoAGm|!V*2q*A+SB0>{CX|?i(Cc_x!>~QFF`aia=yEDJzT8 z3Mpimwo<6|#0QO|fNX9VA^rZQUh5xqk+L#j+V1{fBn7m${A^~K;?@?q)fFW151@3D z()JF{>MCUl32%5fZ0MzW^@M&Y+S8&DmM zZO&fmxURTez*$-5u)5D$t(TET$1U02>mL^r z#}CI*aXEtL@<>~Gj;aUPX@`3Kh{i#K^lBb7tKmNc5Ywe+h zZuLK{0@U<`qyT88sci3)`M-N^GwVcl!lR6WOey2{oDRTaDFFPqnDmX3o4%+a8{NnZWqGO-FR#T1R1D# zb>;;mQ)z@SXi^72dm7}iDM(s#G>Zr9?D;!HCNU2HFlCAKtpitZ)t`(Z&_a{87dWc! zVVX$*lvd$L?XWbS0-`YArwf~AEV37wi;AJF!w;baLP$Yo zb)J&9?PfL6XAI+;rQYf15%#Nu0E?L$NSAqn%Pt(8xg%dmN&G0jVJw!QtXo5FdMobH#Rd=!mo-hyly!gEgRgrOe?>z zHJbg$oCmb;k0?{F@W21bYGyg3FTTXwS{}klsiLw~r1qDk*bDu2)Z2qkzu%PKzQ*f$LIG$poH|TqN}-Lg=+)aqk8LR?4r!D{Bh~xR>ZW{G_}G#$rZ6lV3P6q zqIEy@#Yb+UwLaWPx|n&3IhFkVSrMBgP9i>kln9B(;TJ$U+ujjtj@%-4D%bj^2kx~# z6Z-?sQhff%{9e1s6&(=~?f2-%AFF`#7@t2Xe|I0yjY0mO?)?!Rv7x6On%5nhc^>&^ z`va!TKieNLWqxt}`t@mWhj{bNH>b)!ZOk@kOc`Mx@Xp(B>HV7jc|HZf=SiadzVj(~ z?_YoV_^%~=!eN46_@$=7Pu7;m2|-C~auaxEV>^O-2LHFV3%v98TV0;^^9K|BRv8rj zpH?4+CwD5al!?7|XmsD_uMZ^N+A0g~7TZ(l{>~0U6BHEwepT@F%is2owax`I!+uRQ z%ITGA1@pEq+TFkVU;K$`@cx7q_N2lD-yWA*Ud;U0FL(Gv0@rWGvj;|JRE%ne2ht(U z8{hvyN1E!pMIL?jAtkNZ8|6J@zo!UIP+;@hJ%UCnGFd!-2`MEa6W?leMUz$veeV;3 zsANl}`S4$U48R}#*`KrX@Bwz#_m$*?V8Lc)g4)0AR6w^{zu9W_^0jXDOMzzWWIPul@0N`H#Q*Vc7ERti$dJ3~`@S znB518#UfH@GG3iIDUpWB{+ExK-&jXVGd3(yNyYvbUm*<>DJ5T(A949R-{U9m{ykDk zvdZGW-~Go^c%&x_Jr&@zDF7i!BvW|J1_zs)WY=PXkTjIPDj=k21xZQPvg>UA?BB>c z4q^(gKYLQpR{>cesMl*WYE@EphVo|gLIwZ=YSjvflua_3rdlpiF{&s%8*cVPPX*+2 zIg*}@eDS5$MmP~hd)2Cy=!j&kNu@L4BE1lT%#~}{pWdNvRMBnM+_>>S{Ago3?`AlQ z=&68Gx#-(}A*j`k3*4<7B7|V!nXmc%K;T3Wu>1KJxRvAaWX-LRNTk@VY$1h4X~FJp zf!*Ehu<-xJ-Qpkq`KMy$4edfM>tJV{R`?xc*B6mevh>_jeq|^yNrr!@RxIXoPx+ng zy8otGAq`eCtK_l{j^jiY{^>sI*+fqTcn5XVg$sCIqr=?neg382>J>;#q%e_~ewc=C zoo_)1;fIS{xPW(1r(8M+&&>+I6Fnv<`O2&0HkPRFl+nuHh_~?6*ZgxbeLM_pnV_VR zX6@M*sH>y!xDW!b*&w&EL{Ytp{rLmn_NhG3lZKuO5YlM1{Nt@aVZjG~0opz%MH&Rh z6(J-7fsh8(^2z=#!IO+06C{M7vei{!y6b;8V$N5#izE`Ma27m6FM2A#G?O%&^>Eio zh(WHKuJgftfSCgNAaaV@zRM%Tpl&lFeefEWnF8X`(+4Q!@9@yd3oAkih17CjB`BI< z!3XzHO3f6|2R-g+=l(CTE`AHo^H5%s(!(8c8%x9Ol@(BWxPw+6p68KFrBR>W!N@0B z?A1=eLVwWA1s#oW zNitXw%jWWErTq8ge0m3fM9VMKzA3E-TA{VZyYmqMM&93}n;{WK1+T(v8L|uEl4P(Z z{M%o@&*IZBw^qekJ0ounZ^J9C-%xD-DcSumZUcfXV4;6-@wr1sRKyRhb-uIrh~2v% z1F)E4Y}3(st>8x+>%{*E;rT^qg0{8`l$MwH_l#zP z4HNtj!FS$%OE0*7k?&O}XDZt7wP()45xWt#$63Kl2eZZ6DdYbEp8!ZZdDe+y00000 LNkvXXu0mjfKCPbY literal 26389 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 z zjaeheSajjI!by|Hbq~Js>4~h_!xU8Uc0)jh_X)gaZH2ea^`PIjYZ9=6>{`<~bfp8- zc0hX`qCczO;aOM=Q)CU@-qPvh50zL@=x-i{1D&imrHL5V6r6d}*7zT*zk5lZ`Q zXYvF>&}cg)Z=>(l7&%^VnuRPAh{0YrrEEpD8PX2%uUGSTStpFRpXb?ljln5aey2p9 z-N>D!VU##7z#ydLacj=cfa>-Yg>L~;#uqS%)EvBOT2fY~+TX`!B|k{#wyF=uL~L2PT-|QHYiR#&wX0hm;tl=2PJ%tJz}1Q@p1-$*PkJmtOgEB^&on1HPXTt z&&y(7unty>9Oblzn%5I(G)2Oc@k1KQPfxZW_%syeT$!f#BDaDFvS?ueFIEN%)?K=n z_;uK+HJ$wmbfwu4XrsKwc+-GPhIZr<$Rh5C7Mam*)AfqhBF&E46uFR`e;|s@`q#mU zy$j(FnH?2%}zex`ftv)szc`33cHqoyoO@Co{KaA(| z#-o{`L+g%V_%qmfY@}`P-?%P*B$$TdD9@{TF%nbj$apqs=G}B zMBxfbzgm6t>uylhg)Zu!~rYXFIo;r!Y=GIwrpB zv*>W=zrYwtOaRZ7W|~}uhZ@Xb5xW(I{_z=9WQ7QrJRFi4WwK|48b84sbUZer|FNCF zzvTW082^UML#WE=GO@lrH}+IvB9_M?l6Eei=Xx|!7b;@bzy)NHbBWgd1vwp*ddD}G z@H;A*bm#H=!{XKN{R#C1<%mr_iI!vrY7H)B=pyIA9{t%nr}^>d-ymLHKF67tb6>}v z3zKw~qXQi$=hjIs4P*so!-`Ziy;b^P^O|<-gmYYB|KGAk?6S3_GchA)~ zYTl33h0P$gh06_wp5a6pfQfbS)QXA3C%0YGts^ z$aemncxyW-qK3`=ur)_AAe8q=M?a*evOzUxw{eTkw|{y7;Sty%+>aESZZDyyA|1%OPI2969;17A{B((MlFdvtkDN|E)F<%Z1b)AJKsm56YGd(2qxZNF~Je(w%8K0OcE6bZhMp*$(T%S8$51@RCH zmft+EhtMA^F}+M-QThZQd`}bvdL!FGVMRAH<(fYbOpzN`TvLN57ML!gK&KK(^l zK@`mGm;U(%VX)JjAgom%V@D?+M;L%ZBuAYTCARpNL1Edb?-ZJ!Ai|qo~H9YlCYSa}zDL)eq^|cr~bp)B47aoO3 zL}hk8_dP)m`QFe%mpdp8?;%iQjkG7fH>mbf$?d!+o8}D<5U^ujLT{U5JtuEB=FZJ?U^~wzztebu26o2QUzMll&LGyqfm&KLlJG>{y zh;zvni$L^+vt-7lTP-iip`3UcnnI-8cCBba=kY{5Ye}lD+}I_1a z#+YJ6jFLdk&j^Ng94LAH3*YcOM|Jb&7`<4Vxc4()Rks7@Xw{=p}5VxX^+RlKj zuMxa8T1|1!%*rf@QIx-iW7%7bt;u9nv4@*%`}@W4SGb~Bn03@+v{!(Ib^9InE> z@s2GRYsv2YHt3A(70Y}i6yv5ep_ryshqCtP=+R$&hWD<9WRJN%diF{HZd(VmGOHe!1cCApd2$Ak6s?PK?_3>hcPMB0BP`CNk6mDk3nPlEmd_5RR z&hr=#dBQrWuDb|(o;p!&q!x1gljJ}e{*ULPX>Qa`g+}BbholTXw{?L=;y zY!K9h1G5`NTOh~*`d++k)%9yfZ4`ER-SQfSUe(I+{Qs_iNYNkrzZDQ)n6MwNaxRWU zA9kK}XEuBf&bEE>9_mE$5;)0Gj?D(r>WZB4scEY#{OdJ<{lcrEa}^~2Jf`m-;{peGUiKi zb?81KtS+J*w^zEZ*=smiJRZtld`Ga$h$7NwPmeDR)j zcFBw5x$4$_he5_^eP^T~O>hE<#BNniTbO!Zf2=5|3aZ%2ulg_1amfzb%7tpG^9MhybzPNBS zn18*rsDYI1YQfNw1+Us5X>yGyJ!U`st!_)V&p-c|G%Uiy>`(GPOm6!s;mm~p*(Qpm z{v8ovJwO7-@)u0{J3Nh!DM;X8Ou3OIp|aD5XW@8&d@RHD(&w~l+4ZqBp=OZOCwU1O zG3HeTyqHo3Hh-pqce6d}Cz0s$=o-NEn7?za%58NPMQA@S0AVMoKXMVBeUNXGM=j;z zWsad9%>z5rG?T+fDA~Y&Or@aKD(ICJ`kIE?9uHkr&d6EO zqwGeGpXFI=rg;8q!WnQ8LDAB(y~OwS<6A*c*lr?7e#BMf=+ATz`qHVVA$DJ~m@xMy zsTHnt7+wRXB@*93{nKAN376bv#f!jS(n9g#s3l(_A6X*xLpEzEYegAKX2xzscw{vt z{IURKgKPx<4}-YQi{5HzWKQV2<ndsENFM0@3nqw&yN*{cj3zy*T{cuCk4go;8@3Jf;AXVvzW~4>`0g zhl7yRFaSR!6B9uul&MWBVvR2O{58x{5eVA_qTztAAzjpZ089v1USb0JSKFXw?+^RVJng_>VYz1%=(fw(e?!wb8nXNk zL?Iqi)m;Q5mRw4R`&_IWKnR~e_55Ym4PtYLc1Ppw&u(p`vsmVu&N`9Ay+C%Q4W=nB z!>qSe3qj1mkAtclwsFJc#jkWILL0;tG#Fbu5)^U5*nV7;k_Tkl65oAK>xPkYqNt-< zP1Rgt(c95D7Rq4lfd6SwG@KuDSn^eDtjsG7o}Y2g2k%bF|G>$r42 z3@V~eg4~I^-$%IC`WU&_p1#`G>qC#e@`f$>+hsv;JK{C;J&CjaDC5Hhbj>*%N@g3- z4R!jZ0Q0FlUV|vl@YCO4VSzT^X*8wzrtWa)Oi-{!N1M*tzD$!~*)NjOh+5G>>;p0{ zlnIvK0vD3A;l#)D7;e;sB4p-Yi34C$6pflsjv_V>C1z9O9mGZ)!*L=yf?7>Yv*EQ8CmfIVrXD^&S$q1O>P`0Kzn=L2NnB-sJ@_z}* zlYW-_%((nr_WIe6n!vq+L6{WVVX>J!V$c=qpy0lJfasDlG)prRB!E z|G&z8UYJY)PSqZNuN=>#z?<>VgYjTKI|LJDQ^Bo3c}7Q`a6kV4UzdTm?QIg~G=*gg z3p^Mv)!p?umWAC$*HFm9iJl(4v_%K@-e`@N^H^rUaVv7_3G?cC^$>`ez6%F+k_(u^ z}q#z_Y`@u>b8CUug9#t*pw=_#*%{Hp^&?g97PS%PLF_N9)C0 zkl>4_hafpC_gkCbcn#=_S2360V`Ydg)a2)oQkh`JFPPc#jYLT9|9~<)~ ztr;`@?%)E>AMx2kZn4V09%yquI?g1#=93}rFVRxmtzMT4AfCggD_)=UIAHpmmGul7 zzM%(%R*GIb*i423VFUj^3!^p{ez7Y@cD?n zpje~FCFJ?rTx@&p(?JcMO7T<$2C5{o;rIVnScvBp5m5()1wG8cmv7U@*Ze|NYhP!y zk&&8tJ~&6g*St;CEJ8xZOZ?KIZz{(V`yq&@6`Z?^d5=7>L7rAn^rW4l4D>A#3B3gO z#uw(d8CHL6dma#dSqt+X3^`KlscX(;VEB?TlW2_$MQK5~?%g7jS3n_!!r}R&?Uy=b=5Eqh5qhU1Fiu703Q+W!f=?7p0 zm%P*EoonVO_F>WAWOAi37H0=gY1U-~Zz{ui3tbs>s3UjN@{E! zzkFyqNrbCx+R$jac$Xhe73aLNPia97G8&LEEr1ulg!*DBw2_D0EhEB3j6rv%MFKYO zLte*S9@wGhISuiMkus=iA%vTIl)j5{|5p6^Ue6MMF5q}5y$U5Fsqzdc7`v$vmHN1C zzMAwHvY=nnKq58s)*HbgF~T6Wm)PAm*C@3EOi6BLRS?4;(O-v)lZTM`H4;Bu^f<<* z#~-^oa{y`qrZ0)zVUHIV;tC{-{U4+zMQ<3k)DR`59gc7Tp9sw~c0gAG=Dx_k0Wqn# zU@s02H0)IJcn4BIk=btaAjdaDusD#(k@|%FJI=2O*uC>ut1*Nb>i+kl_e(xYuUmMp23MLO6mpw0-ABf(&UqCtFA}Iq=UegQxlO0!hZ_};MeqEH>W-$y? zzx8wv^-G8U>kt(?+OtsuuTLD~C34=$Ziu};2ORrtut8rt-__1qhJ9(AyfDsH?0CUi z+34~hWIk3Z!o@{r7eLNmU_buXSx(K&J^nJ|0?xwKUI)6XPW4mx={~oZ{ucuiwfi&I9CxG zsTixTsGkTt71x$dTf2B<5p;o~2dv-oYfHsY+y~`0o#Kvr@Lw(e*Vgv*wrW3l9)1s# zlTYeQI!l|nv#H%hbo6fk+MDe1hPMOL_4hJnSREbg_-)mVsO%&3qipx1O5EyOu(mos z-Fa(l8~sO%^O)g`)*UuX6`iC~`TaKf+3M}d%TNE^Z4-Qjh|AZN!Y%p;Z*lPm=VJ6J zyCSRa#bnCz*bf-;=zPPz5&sw|s3*TCuzxQzU84BL*C%T2XBQ(uH~gj|B4@{_;%tTy zz(2hnAUd7(r*?-1tN!3M&ju`vRj8LKUkm7p;Q6L<0rzfM=VOUJBR4$9bSw65V~yERmfR<2(8-? z#l*y^SO*(JMkYy_ZkVdR|M1i)!aEI(l&UsfXCRZsuQ7_VmVTQZUnXQy5T=OCcKyBI z(Z6}T2jk#3h~e`nbfnzn%`0V+D*Ub`4e_Z&ay5a=id3q)8wW_h%*-68j}zzMjL`YZ z$;v8HjT+U+kD}giYl#N>txeT*^$WkpHc~)MYdSZ*axHWvTX&o#xsDXRB`40Ov4(&O zsgydJ-;HgKBlvo_6A{0v%9`Ze9C-CTE~fC+!8iL6Ab~0~ue$Cj!cPRdQopAkUQXT=R4yWj-lI0N5@J6MD4FqN@N@V-C7W(_1AFF z51Ne^`cla5z2>h2+zKaya~fzQHZd+5V=RRj8*B+BzTkd;+ndhp8;5dIxjj;>U+e0L zJ4|Al7W|a0(M;+$=i~6+k>$T(4^g&rOABWL=TPIQcsFjKsRa-*2~4uRi&5M_>Akw* zvglRdohGjBtY3KmahQym9yl5s|IK7 zef~Lk2Z)~=^5e>Z{VG8vFskVw7nP%QICm!{#TF$ z?al^Q=@7k)Y#L*rdXQUkO8VqYEaCZc<%AXCD3Wn#JhAFd7g9{zkTmYpZ~i^4Go*>> zJTpy+r*=W{-V-b+V+sPD%QF&OP4EuX;&14qq%6Zyc!ipT1A7)Y9zJa+zv&aqHg1&! zm_fJHrR#I8eCt1+Q(7J#WAF^`j!@u8pPetyF-%MKt|BX9!nj2qM@ltUPUay zXZLMyZzczuqEHf)^GB`Vr(018hsg)_-lKVXd6SDE*oTn?dnBkCd4fY3fXGPcAO0Tb za%V;i>;|X)l;lrSc^=EM!7*UUHw`+ZIKzu~eT0Pj#Fbr?JGlG%>ALf0mHFb&h!;^0 zSI`Ga@J09e3XwMSph&aS!OWU8c_JeeH~ecB3&OkNS$r>=F_LE1LFu3W4AAhzwL^cT zb110&Y`T7_h70}IX}zm+zPtN@edF#!W{8m2(?HKFD5fSj$CgFgM~spBR3=6*OX1ss z7#v?E`H}he)dX3NU+43?( zL_&zd;m1dWxK!49RQ8o<8TeRK&tj>S=3|`g4y)I!^>Sp4g(YY3wbd+>KDlNMDLmut(0>`KnoakYWNGObFo!V zYw8ksynXT6wm=RrzB8+^t+-xlwj(l5V-G6{c4sham<|dbdf1VF<_@tHp;3GVCz=C? zxxveZ;)fR<;Yh-82`Oy7`BbmuxT7=)ftr)W8e?Kr(5Z|jVCjJXE>-zsaeI}k68kCz z3nY98>s2Hl)LrO|t}E{9cxGuakmVCd=L)TCdcMD~fsd|45)C@@tM0y%fqgcvA<|Y2 zrYu1`ZBXridIM)bFD?o`;~pc8hN2muZw{nalYUJ&i0Taox0)>%E_f2A+B5+4FhWu= z!PnBR^R~tS!dEV;nL{YX4Z8w0YGv&&WDEjXjoS^3#qOHg#kXenUXVbm$<^n0ROX$O zd^1NzN#*6%3bjV!<{@YiT{Ilj>lUNhP-vh`V0T4ZwaG9|#%$Qy0praNAs1EzKL&Tw*l;I@5)*H2#{%#-8k>*s6dN|JU#I^1^-i z`Qm>ClqGB0q*5-CkmIb3je~&ErA6{?c^wOHbpLJBy+Jy3?cT*{I_CfYAOJ~3K~xMW zNg7cv4K$8fmxey=w?fKhTS5rNmKMpWGLGwd9rRtEML%u8b_gIF9@{r(6 z(%^$1xDTx~-~Q)^D7<=zvSHfdl2~e(iTn&(*v6=*PTv@gv{-JJw!#jglyJ zefeQ?4A?0R)vI^$(T{z$uQa?Z7*Nn~fN$)_K$U3ZMKv>PvCml9YhuY@%XgJ?QRB^<$Z%KY&0 zZ!;xr3X_wp>B3n#U@r{VdjC&9^CNEkh4)~F!dx=DpKm?+2$5JEx$`0}FKfz`HL`{Q z8lHOQhZvy{JEkXC)AssETptY7DIL-<*|}q!Qds~BLxLPNC`T*=f+wDO3@IfOQ)85| zoAc`|7_igmz-h%+FyPsw;cdZyQV2{_VyB~|Bl~eGHcveL zuY^JoiisJt*4%Z6*FUGxd_ilfxpr3yc6{9*`B@x+&Q}Nn; zN-Gu?GUuEDw;~POo&o(*H!h--cFb_c9UrfcnN!+xIDp3<`!-Isf>W(9>a1dh!(_+y z@`0LTKK8>$Fn3(S9x+E=+c-*rqGJg>S?j|Jxls~3EbOp_Aq8m9(LQ|FCwb)Cit+I| zN(&Cv+KO3*l+D49TAQccq|ja%uvEK1{l@j5#(z z+}PLw&xQfFA`RP`0sWUWheEJXoDjLJuc^M!2 z(7hfjX?V}=ck%rnJWOVElpF@ ztGe?1@7#J<=~YrmvV?3vHYVV4h7evh0c>nzy9qcAiIdKA)^w)Vtjt<7)2rw4eb#)L zOlEcWtkvoCtYp?C0YV6b*ajQFu#GW(VL}52Vq+O&Te4IysZ^@>y=Ok$x>xnMRjQID ztBmXK4=Uf+-uK+Q&;Oo%_Su`&4?N16wO>U_$(wKPVa?jFB7`6zz$I)v^3X;EdNj#~ zO;59H$8VT??{pCh)#QaN(ZlC*qX;;1^Z={wU&})eZZtc>lc$aV8fzcfT-58>9ZrJn zex^P+L(Z12X$)QsiUK~7A7^fU8o~5xiC{2DGL$J}dn;TG1I~pG4b6at$F0lZ)q9x7 zbR#%^>L`lMNiq?oEfs?C6xkfKIylcA+jC zWKnpMj4cTx6&NrO&^@1hJ!~`@7m12Qu{(L=%{_eO!N>AO2whzx*d`?t-Q8?@{9C&7 zL;i-oD?v-=M=cCk@&4aFg3amT(BWO=ayg`?q9{5atzG;0^hG2bK9;}#FRwPof|FXZ zrZKRoYpEXVpF|+AJKel_Y#(YitFJt;>nlUP^1ymD32z;nZhON$+#LvzwWp?8VFvkz zm(lR97J6B|9bU3-F9N+&I`Y3@riM4QOWSY9__T&EH_> zj^{|6{+P6q%HM;6E$2kD>r0xnybjeEu#$W!b&q>3I;1}Q6DcKSUZa})hBCnJJOi{U z9#Rfxkr7BFQ?V#Eo50z(oVGv&MX?e0bhBa8(;Rqx2ND4SGN}~a)($;-BAcO8jWLWJ zId}^_;W$dznt{3l0a}Hdsr>rAlW!kIMK{1)CPiy1gx&67&#o8Qu<2>+PAA<1ORza| zyz$0sC^iL$(}izYFTRN+IaMth3(UlTGu?lDBBC3ke}MMHC`uf>qr>dn{v3+kPCz6G z(SpO{D>9fspbK|lhcFWZ<@L1ELz5b@@E9H0al*bHHb3%b?A!Z$x|kv;eWg^^;3Lyk8oGkg;_qe$48FDd6M(Cfx$ti0FtR`R8G=$K-!KoQ^ z==DBzkU`bPg2%CHCx+Y}oWPhYr4qA`~8ZWHXA;okXwge1YUA@0GD&O$<2G z{c9SV9^cB2mwriVcnH;z#&KyBhYc>Y3EYeCM9W8hA3OC1xm=FXu^@?pseqXn&~Uz# z>XDNgs+uL6PIK|{1suIgd3D>fh{$JLvD>jPx(!cjJ5orFoqB_8Hp`XKV%b!Y9}b0Z zsvbPO8CI_S5odP&iY!UgaDsFeGOh%k#ro2)lkXhG?r?MD_@tBpf20 zleis_>GE=B*RNRq*!OvV+fPYe(Z^?Ak2M2UlAnttNN9Q|kj}SBB^~zcevvB~y&YY` zGo$>5GQdE-2lCrJOy#%T`{h*}J#~b5G?e#tPVmYfp24q95Vf_lbNh1y#1wYFpK)g= zYu7%(iFe;Jd+J;^LyyzX6|WCOzLyV8S z1c)do(;PVTDo&4=Y&uP6XE&g+_^I#dE@KI3u<~m^;=;CPNXjIM3Jh3H{?PA# zjjCj56$Nc#p+hc{p}V`Afk*TJftlpnVPWg7^?$`!pe6~2!Z=kAYQKulruPk+gw#|_ z?|Cz6uAI3My{lBS@tF@?|oJvuC)J1wjaL%T0_z`!zYcHWD-eWwMB$w07*wxAmSo{5_b1-S2o?sXGz;So)GCDfCkWw-g4Wp?! z)X^b=A(f1+HZQ25qm>?sc#K>&N8)^l1ZnI!HyvIZO5XtM*ME)Ur;Y$H83~e0XAqx! z!l=xk=3{rwXI@3VQ}q!0!%tbcmvG#zr)t$!Qt}g4D^Sek{qqhfT2(bhvsH-+t2tHPySmz+4l^YR01`e zAg<{~leM|=EM9D_!$cH$<_x2%#>Dx*MRfUay1gu0|6M-V_A{nNlVp`tF#|SAeK;Wm zi+X$Mu)7)W>1W;gCv?Zc;a#LtNwVoIJ>yX(yIV~UlMn(gZW4Wctbgn&jvhZmVsc!c zfR_@fskHk8I7M1#pkxf$)deHglQdmjdR(Co7Za%zP2!MKCq48=t0XDBZWxZ;z4`nHlFn4KJ+2X0y~In@uA%6@OO%uSn}(3;jK8*!Z+% z+qd}xI7GV48C6MsS73S!cJaV7EZ_WnE^hxdnO2|PG4?u1DYpDg>r1#)RVA0r&=n3b z8EC(XklX z$|Y>t{B<-5`}e#|ZghxjTOXR5V|X+~Qlw39k}V%1kmc+2ONf+xk#!3KB^$ z7$%wj`~v;FK3QQ564q0OPib!Koql9i^4X;!oK6>eU(;B>@hR*sH&GdfSd#Hu22nH> z+t_&$c02Bt7LK1f$^-YT2Egg|GA?3dgDFz^B{2YAkEckk5X!9XAEw7^Ud@f8yBh#a z%b{L5hwNI6q9}wrI#ADkLaLT|(1LlcGCkV+P*s(1FihH(#)}KzlA9{FeJJ1dr3P4u z0fS=&UdV`G_-B8MmS0`q6K=ALzsRQbPoip)0|$1H$!1V<`ufJwwow$_3p$d&MonJO zU>HS#7U9OJr04}gkuaHvhGx&;#f5hB%sNOZajG61Qs}iNA`vp7DcvWafzLag*Vr_` zU~t5J%PoWRTK~Q|L&jPa z56OHun5O1vZSkUJ!%Rp&Qj>IbcabXXg=ZK8xuuJV{Gjb7S0}0zDCrQd@88b4^;_8U zT9%YQj?Ag})d?p31K1o69=vZIC*L{3@wbm~-#x2wI9+&eSxKfZMc337)TktDOB0Vz zfAJfJRPX(p?1$bC9_b>6KK@g)D&008G8$p5!;hjU$YrhVt&t^mKwVifB*xAMA^pMta{+QTk3eZq)YeTUqOhm%O zNt>TiicOGK@(c(_O(pi}D5|QW4YnhtWNa)%##a0iRE-6d5|`%2nNKk=+}e(E?i|?^ zwA|{?&u?kO&Yy-@nwUqS`_3*Nd3ZAbQ}GF0ZXcS2haTFf8<>E-dtM@Ci<9~I6YTcs zF`zM-UeEoT>+tf|u-OD&>B14{(mkM3V`MahstLT|FxkOnNKFz7g~-{`EULhO;b0gy zZq%N|mGw{*V$l%EEM%N<+;z77OzmI#&IloJ<0jWVVCs~-_#qR)6atBI+ieITDz=Rk zDluR<6v8JwEPLW#g9@GZeAVm;-hJtR<8j`>rYbtbq9GC)fx{-b?XUj2$O+W<@HhG6 zFaC}xS;Y%lsoG4vsHZ-gVe(Q=Cp67w(gYMAu?{ba5X3YU6a{VYR{Fj0Vd6sgHHv2*{-t{u8DB`=@F)qfj%cE5;FY-X_b`VCL9bNh4j z_6CSX6GgITbN|Lmttgn|)~J-k!y(jMmUe#tRfCCkHzJ$CJ9Y)y1rE&(G3)0R=!Si28JftZ@ZW_MV&O(j%f zz^*_5r|Mz&(DU>^{4K&KcaY7dVLZtqcPCLztEz)~>mZB9V@P0l+cPMgZX6C5UH3l0 z@S*2v>j>bsB^Qzb%j>h*XhGN%f;S1==PvN-wrBOo6Ss%d=qGw~MZ^uuZUG?Vb(6k$ z*-X|Nzj+ysRFYS>KZ`tjmJ2D(G)~o#X0&8=vH)(U(@5N7s_DqMiH^rnoq7a=J>tZk z|AbLBxGV+su^?(b^~6X%wlSHU!lQVJzyA&jph`(%@@;H3J17Dzr_$Qq#?I|=G&M&g z6vpnD{tTB=&hGy6;~8Vj6koCwTP}-Ga!j56XM!?|CMC8@4qSF8F`NE>k#?}y?I}u4 zsMzhaAvqh2px7d)6Bl?@)2iw*>T5x00$UbOQa zKSs421H!doz|#6`<5Eik+_dotF7Mt!*O|{yfUF7`tph2+t_bWyqX?nr+{oqps1j@f z9G`}9*mSnfs%~^&q#nSfW;|d9%j#rPm>ONvw4{*a06ks&bGylEUZg9DNP7_ZbO?5- z=b|zHuLy)ozn<6Q(TyPGMhc0;NWhfOdt?&=B?k7X3p&d=-E@6ZPfaf*IVokL-uut0 zepD5VuFhry=Y?w=tpWpTmwSdgQ;F zQNVP^r)y~Y()KTue`)yBs;S{Mn+@gir-+mrn=^si<1^nYWo+2gNAb4In3}wI(U5G(c9*O=l>C#bbwF8BkdqXk$ln9({Gli^835y z#0gVv3|Ls7?fu{W6Rv-GXLn(75UCcoo|Kwp)JnDO)zIk0S?ale1NF2+EyY>tY42KO zR+C>(aTc>CM9CPh()MbYsW^)<{;XA&)%Hr)D3o7hfb;DIH54tZ!}jAJ|MwP)@>o_j zJe%#7Scvjunnc(n`eIc{PAE)ODNi=r`>d%Q>L^cEO^-s<)m~Rqp6tMyHOkt92g@wI z()Rhl!8L2dnu7<+?zz(TY7hqx9%Sp*Z_oJ)R|{Tv;W+^d7m4%23(qZRp~)t6EcEj? z-+!e#!_T?==bsUxr>9>oR3uC=I07)Wkn)>GxUg8rNUUIR1Qf;B-Fwr*$RE927724r z1XpVCYZZxOlv-}0v9Qq3KR9ynT8O8+Z?XBiFcOBgwl)HR9?O%;&^s{wd-PJ}<4O<; zjS&ovlo?^Z<~M;r&%7E(C^Y5{21ndYBWx_x^Zd1viAAN3Psd8nKR9xc*0wg*J^ygc z*P0FXf9nl`BNt60EMh>1!$mY2W!1m>8*^BF^q2pu>>~aztmKI&zhnM?$M$E5e*Avf zajU-fHyr)7e!kI24u^I6@BF^h#Kc5d1J4x{MZw{4rGRT5^V-DBSm@_}?@#U`b}7au z^0j%9zf5f6-k;pX>woozxvgv-P}B59V@4gc(z!vUZ%L8y0X*^Kci6$RXd|DM2`xKc zQ3!{FmI|8k=K$WNcl!Vm=iVt={8vqW6AO#EeEyYC?fJJ2wDCsw@0qVzSdcVHA*ZMko7BQ8H;9YvR zZ{(c=rV-Zjxzfb7#eA}#fojh`b}2^7MeE8@bA^~Fjsvu2z=Aqxr3`lZ+!2b%*qr#XD3q~5&G_4>ob_J$$*WEMqt2r_xvV_XbZL#{ok4a z#dICCKYdUz2Ap`Gp@QRgY=4%)758%b+!=;WpDZ5-+ThMV{~-WJ|6lP~&V{ld1k<=Oaz~^ z6I?JA90$PH-9bx_o2*RHd)Fhr@ctLos}j=0yr9W|6?&l3c|S0Wt{j!Tp$2BdfJRh# zAtdN)Z1R;2%5B4o!i7~apmyVv@R^YRSXoCj<`G#SvM2P$Mf!vk6g z#{O#ag7d+E-lcaJIbO2k84~B-nQCuur}eITeQn+zVu>*(-#t0i-rn9E12!m{3~12< z`STHDJGMWIJHL|G$_P)NJHzn#j~F_A(ll7B754Kn2J`~)REQRLz#RWgOiVEF$a)_@ zEHTEVL;K8Wh$b2nO$IFKfeiLD=J-;HIK$^ZV)*<=Y*@d=JZ|s4ZRUQ^jj<97*1~|b zF77iNEA}@1HnK9sRB+s6zsYw`nhuwy7qs!wWWbUh$Y4KXj?e#vm9%sO%Eo^i)^FkH z+eb(x;zU2z=L!v$tTz%yYTAs(XN>6#!*jV>NT=hZ({W3gwaT9@X1AVF@WKnvmM(0) zq2)Ijuu2bPFi7e2gMl`GH=*HAuPPFzwbeRVj)79fD>OWptEGtjDq*e}aO>9Z)V-e4 zNbj(9>$jz`DEWGpf9tJF%>+^Po%?MG6n&*M8PI|O2Upx%6aiBWO5YMQJk7Xf(f%qu zP<(RI%pP3`gYkUbdah1~a1&33Ov6j3<4gs|DUA87sNbA3pfq!#ghHb=oe>E1ey-$C zOibwM9PQ4lx>Az?tMovFEAD0J^vR-ad-rWC8Vef7tysFeVr=M4W57}aG(4OzJ;#@o zDbwL%7-5d_nzFjh&lpe;3SGfqf|>B?r$ZGNCC^s=zyllji+fgD?mhf=`IOM*<8zmT zs;#ZKS3iILT*YGt2bY<@gC&ol$$%CNXiP2a*#2zU#Y&A2FpYG@(&Y@DK3Nw7MxxQ8 z{}--m@Hsp6;OYV+bO^UO;a&^-%_M&|5JH%rUIr6%uDHkY*vRR(=Tx>Kf8c=){JZaL zVavMJ=JpfseQf^z;_ZWF=luf^eC5}3BHwt%cDs|Yv0=vYDf+C?)6-99XL$l%Xfj|~ z4`jrB4xK)UHu4!t-;x;xl%7)$1N!}b$d~bQ4Svbz=+HlD3JuTr?R0oeuV?1dKTZX@ z{AH=SfP5o-=bQn}GT0O|LGR+*ijEt-c-Cx-Xf!;h@&UH2`#PcM1OfjYgrXl2 z@V9f~y^k3QM%c3P2LNo_{Y$oN`~gq=@SAfgzoSF1MtuJKxvItoFg7+!PftICgUia= zp~-+&JdB8rb4bSK7#Od&wVP+%m9GIGE=wFn-ah@3v zpmU&9DngF*&0m_WUBmf=fh zu?^@fs9rj2-XF{l1A@*x1_S#u!@&SJSyPf>-8-E5sz~9cc{cjPBjGLdIrIEzXfmLVx*0GQ4Fb!} z-2(`a|^Rq#UD2lXcu|Xolfg8DKn~sCunx z&%Yj{tj2QHp8x)Dy}`Xdxr@6ltuNbGPptflw{5dmn zodGohf!>-!!R9gw#*lyM*q(~=drB%&&$axHjtFg`iD-@~4^=F1X%xm@ZzJ zb@LXc$jHLWkH-_H0nWs7)v(adzp!S*wL(qh$*kB9VCd+)PH(xE^$Dq8yeCIM%xvKI-@m#jw6D>0zmZ{Sfb$WRKHF6YSL+z6XRKL` zMH-!9tn|C@zEzw!akSxezmZ{Sfb$WRKATkthVjkTITQ?z)aCFgWD$e?3};0t3pN^y zlro?YMx1K-zDCpiMn=Okpb?{I{GG3JU}lzUWF{%qO-dt9w6XQR(J>O9PzkIy__EYG`O^#`&vg zG>qThWintrFqq=>=~L$Cr{6!l-s9M@H(9ab%k|&DHGmZZMxzr=25fLtWk3OlydfFC z0n2@oX``#O?`q)px8wJ>bK$};H{aaPg$u>$4~%UFOU@>$rIxug@w&&au1ZQs?bM2|-Gv<_`;K1(Jvwi(CG28B#fDZy-`vWXP~8h;yA z=O(T*1_Vr&GnlZ_wyR-4!`o?iLdV92ue*6bAz*ww(qzB}$8|9VglPs;)fCa_gvo?} z$$ZAX*`nTgz($B^HKuB;y`W77Y;;@~UQn23z*uam=y#=kb3F!ZbQZDpf;Pv1jgIS< z0S#{_OppJrH3Kd*`x!cH-TLi#lL4n$xO8^MO*9D`k#CG#ZOo>3-tGTRy9MXf)k#WRw};d{wEL>#9Wa zf$NzmtaNX(U*p4)0UO;=<_p(zZcQuQD=~PZ>3$=_G(f}QaV>;4LJVaotfFhKC)A^R zGb?uEpojq*(J)oaOpNvpP~9&GKYTECl{Pdp-1;y!GOK00000 LNkvXXu0mjf07F0p diff --git a/modular_zzplurt/icons/hud/screen_operative.dmi b/modular_zzplurt/icons/hud/screen_operative.dmi index 8e2eeaa3159d7ec986740901a9dcb4a34b3edd0f..a435e1bececb9856221de2b98dad38e4a48a695b 100644 GIT binary patch literal 4488 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 aW&A%iVj_{U2ax*!0000+eV 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 E7h}2)*8l(j diff --git a/modular_zzplurt/icons/hud/screen_plasmafire.dmi b/modular_zzplurt/icons/hud/screen_plasmafire.dmi index 18f99515b95889813b007007dcc3b4d97365f798..61d501dbe21a72e9c18b889fc5cb7fb5e70b0d78 100644 GIT binary patch literal 4414 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 Eg4RiW?EnA( literal 28452 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 WF0#`n`u@8FPebLka*ZM=`u_nc&pUen diff --git a/modular_zzplurt/icons/hud/screen_retro.dmi b/modular_zzplurt/icons/hud/screen_retro.dmi index 8c8b92090822990033280be21d3ad63eaec94ec9..a25def4d11e9ce4f79a78f2362d6a3def2164717 100644 GIT binary patch literal 2299 zcmVV=-0C=2*kjo0fFc3x8$ybDSFTS>Jq(!>0zaYVk$za>a%(U_I4HjIQ-MPcz zUYOdP+e_D*=Gy56h%rv)WR9DyRtcSi91eS}0-z7F1{N!ju@V?xL*_~=hs61`)9OKX zgq45dJUO5QmWn3F`;*I7K$4=B_xJ{HAzM@vAxn8zqW1&*@2pMRH{W-D093$Z6d)0x zd;kCl8A(JzRCt{2oXc+;MI6UxZRa67ZBjdssF6~o4Qi!uXc8m?2YR7rBrZtw)Eg2) z;sm!=?E$HR6A==B0FBg3&q(C}9DqvAL#UAmrHxvtQG=W`PVJDyv6uOcch<8H@6J9a zo1ITJjdyo;e(T?N=efVNg5J9E2a*UQNB&o@m4#SWZr)G3{hWD6EQY&%;S}2M2tbX0 z_+_-l@7`+LGCLuq_Kh`w8t>nY#`s>oZ38aCjuhI@STaRroVV>Ecx5U&DpD^XrVx0sxi+V2Peky;S3<#d5zVHX;h zQv11X2ZWG9`-%)t7mFMP2}ZsjAlSZqKR~d3`F?;O`*&}Rj=cZQi|p&?^j+)oKaApY zUwE}I-wz1WzT0{7{ebZ8uiri!$bNE1K|RH?AqnF2l_!DDPo4mp!!A``ZaH2oWQmnjjmz2~a4OZJ+q(wf*@Bzr5yrfI7aqqLO45A}$e{|2{?|m+z6k ze&K&6JWwo8pUWXd#lu+q9hV*#%NhK+g+I@n&5?ag{NJB=KdNsMdlQ6m< zQKDeyIwg;I>H}I;=L(}%y_ydII6dD^%75{Otg~U>jkhPYJ|XHpz=nlSZanqte89aAz-{@`gHpMLdtasHQpK|^wD17` z%_u@&6#{`mZT};Ls}pYRwws0Ws@av5bODupO};qxS*DN8i2L z(tdBE*o)8>-)~fSf-RSPe&f><;af=-L;&jiJDG`rK}A8;Llq6${4P%rswytCiObI5 zzu3n9!IRomY!{(RsTP3B&ZK zf~fPsS(Tg5mgxRUNQP)R!(UyP{-Ckj`=fvmlA}nw3Bv6$G&=z6{4kh(&$v>#fVS?V zFUF^#N!pC?U5uolH$hCB|E48Zp~&A5)wk;G=EARJ`=MC~sBxtTR~(XpVHjGe+vLE` zpPtN+pj)>D`Rv33=VKxCY5s6OLVv4bLP?GqhNTGTa1CufcIL!$?9@q!3+0oEc zEP_@Ou=5M7^MT49{?GZ@ern))AhZ1oLPL1Mni*_$%>x2KJ{HaSdc86WA>k0<*?@w^ zYbtT>iHqGM9$qc0dVUJ)e2G1-0)X=yn+obFsk)Q90r|#}iq>pmM@7Z8-cE zCJ1CXziv|l@DTLdzA5*gp-l;nJuB&eHK_B4-nAz7xcNMt`8k90=T5HG9*xPhAlIQy z;e5yOl%7#lPZWBb=C`o?wRFA>wgO}iUn^v*#twJ;H|8Wf8luVWI9rZ+pLD(vivZxX zsY&BL+SH6(ZKA&O#@Cc!8}_r!5h(`?2<6y`AnCw04=_93DbN0D48gg_2-_xT<)3g0 zhjN;O?&75xOAP>rwU-lc`(E?^#8NLu&Iufm&x8fTB>?Y29B)2J2SXD?mZS0Pm8@oJ z)K^thfM0@m!PmJ$ehO*EwAnB$K}Y-UQZms6fG1S&+?FgyYfhs=Osw+X*~IBg85Fq$ zZIAv)5+W8Xn1tZMZv97N1Sk0z(un>@62e7*;cMePmgmCttw2WLK|Iu~4V>UHWU$hX z7lx>a8?~w4kM>s%V9^ZrLAy7TI2u# literal 12781 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 X&#pXVHQ?UAw>gyM)#WN=EW-W=uz`sj diff --git a/modular_zzplurt/icons/hud/screen_slimecore.dmi b/modular_zzplurt/icons/hud/screen_slimecore.dmi index 91b01910e3d811d4d5464ef6ecaa1310f7e42e67..1b51613f97ec46d578526e24c3b0fac47e19c081 100644 GIT binary patch literal 4307 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 diff --git a/modular_zzplurt/icons/hud/screen_trasenknox.dmi b/modular_zzplurt/icons/hud/screen_trasenknox.dmi index bf229f7bada10b64c640a48718c291bd36a1d4d8..2cd7d59617b1907d23ade64b518f0f6f579ef78e 100644 GIT binary patch literal 926 zcmV;P17ZA$P) z!HmgZ+sMqc@$(H9T$>=}PUd8eo2^y}orD|?d#wVX53&Xp zE0D1g7+*u?N-KxN`LxsOL3V_df8snjpahnRCdd1e%T_>=qLugf25%u-R1+afc~_$M z1N`r-P1`r$cYXj=z+)635ukhk00MSNL_t(oh3%J1j?^#^hK{FU;x47bdpVI8^F-P&{kkbEwDWRw!D1cNDW<5~UzJkUT z#kJy(0bf8NK&tv$aa9G-vO4J)0Kb+P;EgEbKqZJk^HYEvv|sfiU@=hC!UI+>A6%m} zIyfm{#6M;cD6O$}((+_&nzke_An3PRZ6per$0zB7{l__0Oz6s;9P{~uc%e}RKI~AV@RW`wbng%t-IHUW znE}#bVC*<}TjfckgM+_=*++q*HX*>H75o&$4B#g@bi9pvNkOr~~HnPhu4LrG^_`Cv`|9_B*d={zvuQo}g7Bn4>y#N3J07*qoM6N<$f=(8u ADgXcg literal 15767 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%0Al9yrA1p@uq@G<#^^EHL-s5o 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 Date: Wed, 17 Jul 2024 18:07:56 -0300 Subject: [PATCH 006/117] oops, it did help to port from my original pr on sandstorm though --- code/_onclick/hud/human.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 5f80ceb977e21..3fce23a2bd480 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -34,7 +34,7 @@ // //skyrat edit -/obj/screen/human/toggle/extra +/atom/movable/screen/human/toggle/extra name = "toggle extra" icon_state = "toggle_extra" From c84639d2d6bfc6756bd3643abaed0138157425b7 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 17 Jul 2024 18:59:34 -0300 Subject: [PATCH 007/117] stripping plus a requested frame for adding underwear to places --- .../__DEFINES/~~~splurt_defines/strippable.dm | 5 +++ code/modules/asset_cache/assets/inventory.dm | 7 ++++ .../living/carbon/human/human_stripping.dm | 7 ++++ .../modular_vending/code/clothesmate.dm | 15 ++++++++ .../living/carbon/human/human_stripping.dm | 19 +++++++++++ .../icons/ui/inventory/ears_extra.png | Bin 0 -> 620 bytes modular_zzplurt/icons/ui/inventory/socks.png | Bin 0 -> 266 bytes .../icons/ui/inventory/undershirt.png | Bin 0 -> 351 bytes .../icons/ui/inventory/underwear.png | Bin 0 -> 405 bytes modular_zzplurt/icons/ui/inventory/wrists.png | Bin 0 -> 294 bytes tgstation.dme | 2 ++ tgui/packages/tgui/interfaces/StripMenu.tsx | 32 +++++++++++++++++- 12 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 code/__DEFINES/~~~splurt_defines/strippable.dm create mode 100644 modular_zzplurt/code/modules/mob/living/carbon/human/human_stripping.dm create mode 100644 modular_zzplurt/icons/ui/inventory/ears_extra.png create mode 100644 modular_zzplurt/icons/ui/inventory/socks.png create mode 100644 modular_zzplurt/icons/ui/inventory/undershirt.png create mode 100644 modular_zzplurt/icons/ui/inventory/underwear.png create mode 100644 modular_zzplurt/icons/ui/inventory/wrists.png diff --git a/code/__DEFINES/~~~splurt_defines/strippable.dm b/code/__DEFINES/~~~splurt_defines/strippable.dm new file mode 100644 index 0000000000000..176953b2e22c8 --- /dev/null +++ b/code/__DEFINES/~~~splurt_defines/strippable.dm @@ -0,0 +1,5 @@ +#define STRIPPABLE_ITEM_EARS_EXTRA "ears_extra" +#define STRIPPABLE_ITEM_WRISTS "wrists" +#define STRIPPABLE_ITEM_SOCKS "socks" +#define STRIPPABLE_ITEM_UNDERSHIRT "undershirt" +#define STRIPPABLE_ITEM_UNDERWEAR "underwear" diff --git a/code/modules/asset_cache/assets/inventory.dm b/code/modules/asset_cache/assets/inventory.dm index 0883dbd7515e5..8ae8ea6e9c88e 100644 --- a/code/modules/asset_cache/assets/inventory.dm +++ b/code/modules/asset_cache/assets/inventory.dm @@ -17,4 +17,11 @@ "inventory-back.png" = 'icons/ui/inventory/back.png', "inventory-pocket.png" = 'icons/ui/inventory/pocket.png', "inventory-collar.png" = 'icons/ui/inventory/collar.png', + + ///Extra inventory + "inventory-ears_extra.png" = 'modular_zzplurt/icons/ui/inventory/ears_extra.png', + "inventory-underwear.png" = 'modular_zzplurt/icons/ui/inventory/underwear.png', + "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', ) diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm index 6dccf98e5d52e..0fdb5019a7200 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -21,6 +21,13 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/hand/right, /datum/strippable_item/mob_item_slot/handcuffs, /datum/strippable_item/mob_item_slot/legcuffs, + + // Extra inventory + /datum/strippable_item/mob_item_slot/ears_extra, + /datum/strippable_item/mob_item_slot/wrists, + /datum/strippable_item/mob_item_slot/socks, + /datum/strippable_item/mob_item_slot/underwear, + /datum/strippable_item/mob_item_slot/undershirt, ))) /mob/living/carbon/human/proc/should_strip(mob/user) diff --git a/modular_skyrat/modules/modular_vending/code/clothesmate.dm b/modular_skyrat/modules/modular_vending/code/clothesmate.dm index 50ce6f46ec0d6..acba98c55412c 100644 --- a/modular_skyrat/modules/modular_vending/code/clothesmate.dm +++ b/modular_skyrat/modules/modular_vending/code/clothesmate.dm @@ -166,3 +166,18 @@ /obj/item/clothing/suit/blackfurrich = 1, /obj/item/clothing/suit/frenchtrench = 1, ) + +/obj/machinery/vending/clothing/Initialize(mapload) + var/list/underwears = list() + for(var/obj/item/clothing/underwear/briefs/briefs in typesof(/obj/item/clothing/underwear/briefs)) + underwears[briefs] = 5 + + product_categories += list( + list( + "name" = "Underwear", + "icon" = "socks", + "products" = underwears + ), + ) + + return ..() 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 new file mode 100644 index 0000000000000..762e4be58bf40 --- /dev/null +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/human_stripping.dm @@ -0,0 +1,19 @@ +/datum/strippable_item/mob_item_slot/ears_extra + key = STRIPPABLE_ITEM_EARS_EXTRA + item_slot = ITEM_SLOT_EARS_RIGHT + +/datum/strippable_item/mob_item_slot/wrists + key = STRIPPABLE_ITEM_WRISTS + item_slot = ITEM_SLOT_WRISTS + +/datum/strippable_item/mob_item_slot/socks + key = STRIPPABLE_ITEM_SOCKS + item_slot = ITEM_SLOT_SOCKS + +/datum/strippable_item/mob_item_slot/underwear + key = STRIPPABLE_ITEM_UNDERWEAR + item_slot = ITEM_SLOT_UNDERWEAR + +/datum/strippable_item/mob_item_slot/undershirt + key = STRIPPABLE_ITEM_UNDERSHIRT + item_slot = ITEM_SLOT_SHIRT diff --git a/modular_zzplurt/icons/ui/inventory/ears_extra.png b/modular_zzplurt/icons/ui/inventory/ears_extra.png new file mode 100644 index 0000000000000000000000000000000000000000..fddee44cb16e5f7dca84eb360dc6f5165189c1fd GIT binary patch literal 620 zcmV-y0+aoTP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0s%=xK~z{r)t5U` z!!Qtr{m2tS!3;Gm!vTB?&OmxfXvhgd10{Vp1Gn%27+Pv(C=wD9VhR0{7Gzm6PMRoR zW@A~S*sFin>rEVO$mQ*Qfnyy1{giVqk56|usT^!TBL{HPI8NlaGw9}W;9xadW}GuQ zww)P2J|B;+EFY2m0q*j5Umb-J*_wL%qYP!g9oMZq3e%^;+%_q^;KP zx}x~jBgJ~I)}5c8odl_X(*a~WWj%o%n}%JJ(VSjd!gVc^N(dmoOM1G2DYpwd1O!6i zsuSUbz^rhDDY>4KbL)jNGX!bcmS*F+E(lM7|DfGMjaFY7Te1kY4UHTyGo3=g7|W1Y zu=ZgmhhZ&}(3Obv!m09x?NIrx%cU;{gAdM9~k}DKaz{3rNTS0000T^vI!{NJ9x$md|d)A}%M_ul`?*0!N)LNOiEb>gqL z={J4puA5-Xo{~A|)1t7s6WAh_?^*Gc&%it3o85zWS%(k@WoK3cS56ljzZ+~b9?Mo- x*}L@_UpRxbT%vqJ2M~%M(5rirIiF$g`AdSr!bjAW3j(cW@O1TaS?83{1OPzqS2h3u literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/ui/inventory/undershirt.png b/modular_zzplurt/icons/ui/inventory/undershirt.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff410e90b5d1ac64fccbd5c47600a9de2e9758b GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCim11AIbU&HbWd%DSB63o={h0L5B_T>b+o){-E<;Qv6t@Ov9yFi?QAz$3Dl zfr0NZ2s0kfUy%Y7JmKl$7-HeSbW*g?Q3Vd?j~oA+#tS)J&00Qp=g$mHnME0E_rEYs zxFYB8pvf$;kzsRGOlXphN@Gxzx6&g{hx)}Ax{MBg;BYwU`e{Q%{7Kh`j1OX_xBtpb z?mF3g;9XN*{g25@4c)o+HrBGO(h8Dg=wMfPmCtbgA&-K*`b+uczDoVOA6S_)Z%?q& zKmB&f{v&^1nl)hy}h|B=ZT6*U$TIHV(@hJb6Mw<&;$V3=zi7! literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/ui/inventory/underwear.png b/modular_zzplurt/icons/ui/inventory/underwear.png new file mode 100644 index 0000000000000000000000000000000000000000..1862bee7ca0c1882f03d808041a31e9ce74e50aa GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!1}#q)$B+p3x6{124jBlv{T6U_WO=W!HmBjyApI-d>Y0QBLb)|{6oDvPw z?&gQ_UY~ivEn#0wE&Jk)0e3~tAJ?^&{U%y}i=&}9LP38oWAv4_9!rJ1ibqqKIaC(= zK0YMGz_ySpM=HD}kiqIY!BgHnT%kK4}Ar#AF6@D%kFJy(pgSNV~*edcN> wHwG~kPoKJ;Q*4@#8E&komgCqmSK}AsRmrpR_bXnU1_mXAr>mdKI;Vst0D?1}=>Px# literal 0 HcmV?d00001 diff --git a/modular_zzplurt/icons/ui/inventory/wrists.png b/modular_zzplurt/icons/ui/inventory/wrists.png new file mode 100644 index 0000000000000000000000000000000000000000..501504ae233c18433cf92d3cb5ec586f696cd072 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}_dQ)4Ln7Rh zQxq62+{FK}Yd#kjZhigh(_h{hXAf&0`tb2;wn6p(OLcBZy{b`)CmeG49JXboSS1`- zoNz$aVY&%}cg>MyIWw%1ikJg;CLEA)(6}wgC785H^`3x4317p~3MV`Esa*;VUj-N} z8PY6vDLYJS?8- = { + undershirt: { + displayName: 'shirt', + gridSpot: getGridSpotKey([0, 0]), + image: 'inventory-undershirt.png', + }, + eyes: { displayName: 'eyewear', gridSpot: getGridSpotKey([0, 1]), @@ -100,6 +106,18 @@ const SLOTS: Record< image: 'inventory-head.png', }, + ears_extra: { + displayName: 'right ear', + gridSpot: getGridSpotKey([0, 3]), + image: 'inventory-ears_extra.png', + }, + + socks: { + displayName: 'socks', + gridSpot: getGridSpotKey([1, 0]), + image: 'inventory-socks.png', + }, + neck: { displayName: 'neckwear', gridSpot: getGridSpotKey([1, 1]), @@ -119,7 +137,7 @@ const SLOTS: Record< }, ears: { - displayName: 'earwear', + displayName: 'left ear', gridSpot: getGridSpotKey([1, 3]), image: 'inventory-ears.png', }, @@ -140,6 +158,12 @@ 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]), @@ -178,6 +202,12 @@ const SLOTS: Record< image: 'inventory-shoes.png', }, + wrists: { + displayName: 'wrists', + gridSpot: getGridSpotKey([3, 3]), + image: 'inventory-wrists.png', + }, + suit_storage: { displayName: 'suit storage item', gridSpot: getGridSpotKey([4, 0]), From 2425c451df771715055e491a50bfc380e2c5da3d Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Thu, 18 Jul 2024 19:00:20 -0500 Subject: [PATCH 008/117] MODULARIZE schizophrenia --- code/__DEFINES/hud.dm | 12 +- code/__DEFINES/inventory.dm | 18 +- code/__DEFINES/mobs.dm | 21 +- code/__DEFINES/species_clothing_paths.dm | 14 - code/__DEFINES/~~~splurt_defines/hud.dm | 7 + code/__DEFINES/~~~splurt_defines/mobs.dm | 6 + .../species_clothing_paths.dm | 14 + code/_onclick/hud/hud.dm | 40 +-- code/_onclick/hud/human.dm | 76 +---- code/datums/components/caltrop.dm | 2 +- code/datums/components/tackle.dm | 2 +- code/datums/outfit.dm | 54 +--- code/game/objects/items.dm | 15 - code/game/objects/structures/dresser.dm | 2 +- .../antagonists/changeling/changeling.dm | 6 +- .../antagonists/clown_ops/bananium_bomb.dm | 2 +- .../antagonists/highlander/highlander.dm | 2 +- .../traitor/contractor/syndicate_contract.dm | 4 +- code/modules/antagonists/wizard/wizard.dm | 2 +- code/modules/asset_cache/assets/inventory.dm | 7 - code/modules/clothing/outfits/vv_outfit.dm | 4 +- code/modules/mob/inventory.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 2 +- .../mob/living/carbon/human/_species.dm | 4 +- .../mob/living/carbon/human/examine.dm | 11 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/human/human_defines.dm | 8 - .../mob/living/carbon/human/human_say.dm | 1 + .../living/carbon/human/human_stripping.dm | 2 +- .../living/carbon/human/human_update_icons.dm | 281 +---------------- .../mob/living/carbon/human/inventory.dm | 59 +--- code/modules/mob/living/carbon/human/life.dm | 14 - code/modules/mob/living/carbon/inventory.dm | 4 +- code/modules/mob/mob_update_icons.dm | 34 --- code/modules/surgery/bodyparts/parts.dm | 5 - .../code/game/objects/items/holy_weapons.dm | 2 +- .../mob/living/carbon/human/species.dm | 4 - .../mob/living/carbon/human/species.dm | 2 +- modular_zzplurt/code/_onclick/hud/hud.dm | 22 ++ modular_zzplurt/code/_onclick/hud/human.dm | 55 ++++ modular_zzplurt/code/datums/outfit.dm | 75 +++++ modular_zzplurt/code/game/objects/items.dm | 22 ++ .../modules/asset_cache/assets/inventory.dm | 12 + .../mob/living/carbon/human/human_defines.dm | 9 + .../living/carbon/human/human_update_icons.dm | 283 ++++++++++++++++++ .../mob/living/carbon/human/inventory.dm | 48 +++ .../modules/mob/living/carbon/human/life.dm | 16 + .../mob/living/carbon/human/species.dm | 9 + .../code/modules/mob/mob_update_icons.dm | 39 +++ .../code/modules/surgery/bodyparts/parts.dm | 5 + tgstation.dme | 15 + 51 files changed, 720 insertions(+), 637 deletions(-) create mode 100644 code/__DEFINES/~~~splurt_defines/hud.dm create mode 100644 code/__DEFINES/~~~splurt_defines/mobs.dm create mode 100644 code/__DEFINES/~~~splurt_defines/species_clothing_paths.dm create mode 100644 modular_zzplurt/code/_onclick/hud/hud.dm create mode 100644 modular_zzplurt/code/_onclick/hud/human.dm create mode 100644 modular_zzplurt/code/datums/outfit.dm create mode 100644 modular_zzplurt/code/game/objects/items.dm create mode 100644 modular_zzplurt/code/modules/asset_cache/assets/inventory.dm create mode 100644 modular_zzplurt/code/modules/mob/living/carbon/human/human_defines.dm create mode 100644 modular_zzplurt/code/modules/mob/living/carbon/human/human_update_icons.dm create mode 100644 modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm create mode 100644 modular_zzplurt/code/modules/mob/living/carbon/human/life.dm create mode 100644 modular_zzplurt/code/modules/mob/living/carbon/human/species.dm create mode 100644 modular_zzplurt/code/modules/mob/mob_update_icons.dm create mode 100644 modular_zzplurt/code/modules/surgery/bodyparts/parts.dm diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index ac51e395afa29..56f120a5121ba 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -100,20 +100,12 @@ #define ui_iclothing "WEST:6,SOUTH+1:7" #define ui_oclothing "WEST+1:8,SOUTH+1:7" #define ui_gloves "WEST+2:10,SOUTH+1:7" -#define ui_glasses "WEST+2:10,SOUTH+2:9" //skyrat edit +#define ui_glasses "WEST+2:10,SOUTH+2:9" //SPLURT EDIT #define ui_mask "WEST+1:8,SOUTH+2:9" -#define ui_ears "WEST+2:10,SOUTH+3:11" //skyrat edit +#define ui_ears "WEST+2:10,SOUTH+3:11" //SPLURT EDIT #define ui_neck "WEST:6,SOUTH+2:9" #define ui_head "WEST+1:8,SOUTH+3:11" -// Extra inventory -#define ui_inventory_extra "WEST:6,SOUTH+3:11" -#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_ears_extra "WEST+2:10,SOUTH+4:13" -#define ui_wrists "WEST+1:8,SOUTH+4:13" - //Generic living #define ui_living_pull "EAST-1:28,CENTER-3:15" #define ui_living_healthdoll "EAST-1:28,CENTER-1:15" diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index e3392ac1a9223..8be3646dec87a 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -32,7 +32,7 @@ /// Glasses slot #define ITEM_SLOT_EYES (1<<3) /// Ear slot (radios, earmuffs) -#define ITEM_SLOT_EARS_LEFT (1<<4) +#define ITEM_SLOT_EARS_LEFT (1<<4) //SPLURT EDIT /// Mask slot #define ITEM_SLOT_MASK (1<<5) /// Head slot (helmets, hats, etc.) @@ -59,7 +59,7 @@ #define ITEM_SLOT_LPOCKET (1<<16) /// Right Pocket slot #define ITEM_SLOT_RPOCKET (1<<17) -// -- Sandstorm edit -- +// SPLURT EDIT underwear, socks, shirt, right ear, wrists /// Underwear slot #define ITEM_SLOT_UNDERWEAR (1<<18) /// Socks slot @@ -70,7 +70,7 @@ #define ITEM_SLOT_EARS_RIGHT (1<<21) /// Wrist slot #define ITEM_SLOT_WRISTS (1<<22) -// -- End edit -- +// SPLURT EDIT END /// Handcuff slot #define ITEM_SLOT_HANDCUFFED (1<<23) /// Legcuff slot (bolas, beartraps) @@ -96,7 +96,7 @@ DEFINE_BITFIELD(no_equip_flags, list( //SLOT GROUP HELPERS #define ITEM_SLOT_POCKETS (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET) -//EARS HELPER +// SPLURT EDIT - EARS HELPER #define ITEM_SLOT_EARS (ITEM_SLOT_EARS_LEFT|ITEM_SLOT_EARS_RIGHT) /// Slots that are physically on you @@ -136,10 +136,12 @@ DEFINE_BITFIELD(no_equip_flags, list( #define HIDETAUR (1<<18) //SKYRAT EDIT ADDITION END -//sandstorm edit -#define HIDEUNDERWEAR (1<<14) //hides underwear, socks and shirt -#define HIDEWRISTS (1<<15) //hides wrists -// +//SPLURT EDIT +/// hides underwear, socks and shirt +#define HIDEUNDERWEAR (1<<19) +/// hides wrists +#define HIDEWRISTS (1<<20) +// SPLURT EDIT END //bitflags for clothing coverage - also used for limbs #define HEAD (1<<0) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index a839bc6d820db..d37127e1670e6 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -439,12 +439,6 @@ #define OFFSET_HELD "held" #define OFFSET_ACCESSORY "accessory" // Skyrat edit - addition #define OFFSET_HAIR "hair" // Skyrat edit - addition - Akulas -//skyrat edit -#define OFFSET_UNDERWEAR "underwear" -#define OFFSET_SOCKS "socks" -#define OFFSET_SHIRT "shirt" -#define OFFSET_WRISTS "wrist" -// //MINOR TWEAKS/MISC //#define AGE_MIN 17 //youngest a character can be //ORIGINAL @@ -712,13 +706,13 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( /// This layer is used for things that shouldn't be over clothes, but should be over mutations #define BODY_FRONT_UNDER_CLOTHES 38 // SKYRAT EDIT ADDITION END +// SPLURT EDIT undies +#define UNDERWEAR_LAYER 37 +#define SOCKS_LAYER 36 +#define SHIRT_LAYER 35 +// SPLURT EDIT END /// Jumpsuit clothing layer -#define UNIFORM_LAYER 37 // SKYRAT EDIT CHANGE - ORIGINAL: 27 -// undies -#define UNDERWEAR_LAYER 36 -#define SOCKS_LAYER 35 -#define SHIRT_LAYER 34 -// undies +#define UNIFORM_LAYER 34 // SKYRAT EDIT CHANGE - ORIGINAL: 27 //SPLURT EDIT undies // SKYRAT EDIT ADDITION BEGIN - cursed layers under clothing #define ANUS_LAYER 33 #define VAGINA_LAYER 32 @@ -740,8 +734,9 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( #define SHOES_LAYER 23 /// Layer for masks that are worn below ears and eyes (like Balaclavas) (layers below hair, use flagsinv=HIDEHAIR as needed) #define LOW_FACEMASK_LAYER 22 -/// Ears layer (Spessmen have ears? Wow) +/// SPLURT EDIT - Extra ears layer #define EARS_EXTRA_LAYER 21 +/// Ears layer (Spessmen have ears? Wow) #define EARS_LAYER 20 /// Layer for neck apperal that should appear below the suit slot (like neckties) #define LOW_NECK_LAYER 19 diff --git a/code/__DEFINES/species_clothing_paths.dm b/code/__DEFINES/species_clothing_paths.dm index 7c6690fa4f604..be95aa3a3b0ce 100644 --- a/code/__DEFINES/species_clothing_paths.dm +++ b/code/__DEFINES/species_clothing_paths.dm @@ -6,13 +6,6 @@ ///The dmi for humanoid oversuits #define DEFAULT_SUIT_FILE 'icons/mob/clothing/suits/default.dmi' -///The dmi for humanoid underwears -#define DEFAULT_UNDERWEAR_FILE 'modular_zzplurt/icons/mob/clothing/underwear.dmi' -///The dmi for humanoid shirts -#define DEFAULT_SHIRT_FILE 'modular_zzplurt/icons/mob/clothing/underwear.dmi' -///The dmi for humanoid socks -#define DEFAULT_SOCKS_FILE 'modular_zzplurt/icons/mob/clothing/underwear.dmi' - //DIGITIGRADE PATHS ///The dmi containing digitigrade uniforms #define DIGITIGRADE_UNIFORM_FILE 'modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi' // SKYRAT EDIT CHANGE @@ -20,10 +13,3 @@ #define DIGITIGRADE_SHOES_FILE 'modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi' // SKYRAT EDIT CHANGE ///The dmi containing digitigrade oversuits #define DIGITIGRADE_SUIT_FILE 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' // SKYRAT EDIT CHANGE - -///The dmi containing digitigrade underwears -#define DIGITIGRADE_UNDERWEAR_FILE 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' -///The dmi containing digitigrade shirts -#define DIGITIGRADE_SHIRT_FILE 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' -///The dmi containing digitigrade socks -#define DIGITIGRADE_SOCKS_FILE 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' diff --git a/code/__DEFINES/~~~splurt_defines/hud.dm b/code/__DEFINES/~~~splurt_defines/hud.dm new file mode 100644 index 0000000000000..a91e5b9aa085e --- /dev/null +++ b/code/__DEFINES/~~~splurt_defines/hud.dm @@ -0,0 +1,7 @@ +// Extra inventory +#define ui_inventory_extra "WEST:6,SOUTH+3:11" +#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_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 new file mode 100644 index 0000000000000..b0a68210074fb --- /dev/null +++ b/code/__DEFINES/~~~splurt_defines/mobs.dm @@ -0,0 +1,6 @@ +//UNDERWEAR +#define OFFSET_UNDERWEAR "underwear" +#define OFFSET_SOCKS "socks" +#define OFFSET_SHIRT "shirt" +#define OFFSET_WRISTS "wrist" +// diff --git a/code/__DEFINES/~~~splurt_defines/species_clothing_paths.dm b/code/__DEFINES/~~~splurt_defines/species_clothing_paths.dm new file mode 100644 index 0000000000000..809378702811a --- /dev/null +++ b/code/__DEFINES/~~~splurt_defines/species_clothing_paths.dm @@ -0,0 +1,14 @@ + +///The dmi for humanoid underwears +#define DEFAULT_UNDERWEAR_FILE 'modular_zzplurt/icons/mob/clothing/underwear.dmi' +///The dmi for humanoid shirts +#define DEFAULT_SHIRT_FILE 'modular_zzplurt/icons/mob/clothing/underwear.dmi' +///The dmi for humanoid socks +#define DEFAULT_SOCKS_FILE 'modular_zzplurt/icons/mob/clothing/underwear.dmi' + +///The dmi containing digitigrade underwears +#define DIGITIGRADE_UNDERWEAR_FILE 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' +///The dmi containing digitigrade shirts +#define DIGITIGRADE_SHIRT_FILE 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' +///The dmi containing digitigrade socks +#define DIGITIGRADE_SOCKS_FILE 'modular_zzplurt/icons/mob/clothing/underwear_digi.dmi' diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 49e6a36bf7c27..e0afd1d6a05ce 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -32,19 +32,6 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( //SKYRAT EDIT - ADDITION - ERP ICONS FIX - END -// Extra inventory - -GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( - 'icons/hud/screen_midnight.dmi' = 'modular_zzplurt/icons/hud/screen_midnight.dmi', - 'icons/hud/screen_retro.dmi' = 'modular_zzplurt/icons/hud/screen_retro.dmi', - 'icons/hud/screen_plasmafire.dmi' = 'modular_zzplurt/icons/hud/screen_plasmafire.dmi', - 'icons/hud/screen_slimecore.dmi' = 'modular_zzplurt/icons/hud/screen_slimecore.dmi', - 'icons/hud/screen_operative.dmi' = 'modular_zzplurt/icons/hud/screen_operative.dmi', - 'icons/hud/screen_clockwork.dmi' = 'modular_zzplurt/icons/hud/screen_clockwork.dmi', -)) - -// - /proc/ui_style2icon(ui_style) return GLOB.available_ui_styles[ui_style] || GLOB.available_ui_styles[GLOB.available_ui_styles[1]] @@ -55,12 +42,6 @@ GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( //SKYRAT EDIT - ADDITION - ERP ICONS FIX - END -// Extra inventory - -/proc/extra_inventory_ui_style(ui_style) - return GLOB.extra_inventory_ui_styles[ui_style] || GLOB.extra_inventory_ui_styles[GLOB.extra_inventory_ui_styles[1]] - -// /datum/hud var/mob/mymob @@ -68,9 +49,6 @@ GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( var/hud_shown = TRUE //Used for the HUD toggle (F12) var/hud_version = HUD_STYLE_STANDARD //Current displayed version of the HUD var/inventory_shown = FALSE //Equipped item inventory - // Extra inventory - var/extra_shown = FALSE - // var/hotkey_ui_hidden = FALSE //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) var/atom/movable/screen/ammo_counter //SKYRAT EDIT ADDITION @@ -91,9 +69,6 @@ GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( var/list/static_inventory = list() //the screen objects which are static var/list/toggleable_inventory = list() //the screen objects which can be hidden - // Extra inventory - var/list/extra_inventory = list() //equipped item screens that don't show up even if using the initial toggle - // var/list/atom/movable/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys var/list/infodisplay = list() //the screen objects that display mob info (health, alien plasma, etc...) /// Screen objects that never exit view. @@ -284,7 +259,7 @@ GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( hand_slots.Cut() QDEL_LIST(toggleable_inventory) - // Extra inventory + // SPLURT EDIT - Extra inventory QDEL_LIST(extra_inventory) // QDEL_LIST(hotkeybuttons) @@ -391,7 +366,7 @@ GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( screenmob.client.screen += static_inventory if(toggleable_inventory.len && screenmob.hud_used && screenmob.hud_used.inventory_shown) screenmob.client.screen += toggleable_inventory - // Extra inventory + // SPLURT EDIT - Extra inventory if(extra_inventory.len && screenmob.hud_used && screenmob.hud_used.extra_shown) screenmob.client.screen += extra_inventory // @@ -413,7 +388,7 @@ GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( screenmob.client.screen -= static_inventory if(toggleable_inventory.len) screenmob.client.screen -= toggleable_inventory - // Extra inventory + // SPLURT EDIT - Extra inventory if(extra_inventory.len) screenmob.client.screen -= extra_inventory // @@ -439,7 +414,7 @@ GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( screenmob.client.screen -= static_inventory if(toggleable_inventory.len) screenmob.client.screen -= toggleable_inventory - // Extra inventory + // SPLURT EDIT - Extra inventory if(extra_inventory.len) screenmob.client.screen -= extra_inventory // @@ -494,11 +469,6 @@ GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( /datum/hud/proc/hidden_inventory_update() return -// Extra inventory -/datum/hud/proc/extra_inventory_update() - return -// - /datum/hud/proc/persistent_inventory_update(mob/viewer) if(!mymob) return @@ -508,7 +478,7 @@ GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( if (initial(ui_style) || ui_style == new_ui_style) return - // Extra inventory added + // SPLURT EDIT - Extra inventory added for(var/atom/item in static_inventory + toggleable_inventory + extra_inventory + hotkeybuttons + infodisplay + always_visible_inventory + inv_slots) if (item.icon == ui_style) item.icon = new_ui_style diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 3fce23a2bd480..e743e58a3a88a 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -17,45 +17,22 @@ if(usr.hud_used.inventory_shown && targetmob.hud_used) usr.hud_used.inventory_shown = FALSE usr.client.screen -= targetmob.hud_used.toggleable_inventory - // Extra inventory + // SPLURT EDIT - Extra inventory usr.client.screen -= targetmob.hud_used.extra_inventory // else usr.hud_used.inventory_shown = TRUE usr.client.screen += targetmob.hud_used.toggleable_inventory - // Extra inventory + // SPLURT EDIT - Extra inventory if(usr.hud_used.extra_shown) usr.client.screen += targetmob.hud_used.extra_inventory // targetmob.hud_used.hidden_inventory_update(usr) - // Extra inventory + // SPLURT EDIT - Extra inventory targetmob.hud_used.extra_inventory_update(usr) // -//skyrat edit -/atom/movable/screen/human/toggle/extra - name = "toggle extra" - icon_state = "toggle_extra" - -/atom/movable/screen/human/toggle/extra/Click() - var/mob/targetmob = usr - - if(isobserver(usr)) - if(ishuman(usr.client.eye) && (usr.client.eye != usr)) - var/mob/M = usr.client.eye - targetmob = M - - if(usr.hud_used.extra_shown && targetmob.hud_used) - usr.hud_used.extra_shown = FALSE - usr.client.screen -= targetmob.hud_used.extra_inventory - else - usr.hud_used.extra_shown = TRUE - usr.client.screen += targetmob.hud_used.extra_inventory - - targetmob.hud_used.extra_inventory_update(usr) -// - /atom/movable/screen/human/equip name = "equip" icon_state = "act_equip" @@ -253,12 +230,12 @@ toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory(null, src) - inv_box.name = "left ear" // Extra inventory + inv_box.name = "left ear" // SPLURT EDIT - Extra inventory inv_box.icon = ui_style inv_box.icon_state = "ears" inv_box.icon_full = "template" inv_box.screen_loc = ui_ears - inv_box.slot_id = ITEM_SLOT_EARS_LEFT + inv_box.slot_id = ITEM_SLOT_EARS_LEFT // SPLURT EDIT - Extra inventory toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory(null, src) @@ -279,7 +256,7 @@ inv_box.slot_id = ITEM_SLOT_FEET toggleable_inventory += inv_box - // Extra inventory + // SPLURT EDIT - Extra inventory using = new /atom/movable/screen/human/toggle/extra(null, src) using.icon = extra_inventory_ui_style(ui_style) using.screen_loc = ui_inventory_extra @@ -378,7 +355,7 @@ ammo_counter = new /atom/movable/screen/ammo_counter(null, src) //SKYRAT EDIT ADDITION infodisplay += ammo_counter //SKYRAT EDIT ADDITION - // Extra inventory + // SPLURT EDIT - Extra inventory for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) if(inv.slot_id) inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv @@ -393,7 +370,7 @@ if(!istype(H) || !H.dna.species) return var/datum/species/S = H.dna.species - // Extra inventory + // SPLURT EDIT - Extra inventory for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) if(inv.slot_id) if(S.no_equip_flags & inv.slot_id) @@ -456,43 +433,6 @@ if(H.head) screenmob.client.screen -= H.head -// Extra inventory -/datum/hud/human/extra_inventory_update(mob/viewer) - if(!mymob) - return - var/mob/living/carbon/human/H = mymob - - var/mob/screenmob = viewer || H - - if(screenmob.hud_used.extra_shown && screenmob.hud_used.inventory_shown && screenmob.hud_used.hud_shown) - if(H.ears_extra) - H.ears_extra.screen_loc = ui_ears_extra - screenmob.client.screen += H.ears_extra - if(H.w_underwear) - H.w_underwear.screen_loc = ui_boxers - screenmob.client.screen += H.w_underwear - if(H.w_socks) - H.w_socks.screen_loc = ui_socks - screenmob.client.screen += H.w_socks - if(H.w_shirt) - H.w_shirt.screen_loc = ui_shirt - screenmob.client.screen += H.w_shirt - if(H.wrists) - H.wrists.screen_loc = ui_wrists - screenmob.client.screen += H.wrists - else - if(H.ears_extra) - screenmob.client.screen -= H.ears_extra - if(H.w_underwear) - screenmob.client.screen -= H.w_underwear - if(H.w_socks) - screenmob.client.screen -= H.w_socks - if(H.w_shirt) - screenmob.client.screen -= H.w_shirt - if(H.wrists) - screenmob.client.screen -= H.wrists -// - /datum/hud/human/persistent_inventory_update(mob/viewer) if(!mymob) return diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm index d97080810a9c6..ebd17307e4125 100644 --- a/code/datums/components/caltrop.dm +++ b/code/datums/components/caltrop.dm @@ -107,7 +107,7 @@ var/damage = rand(min_damage, max_damage) if(HAS_TRAIT(digitigrade_fan, TRAIT_LIGHT_STEP)) damage *= 0.75 - // Extra inventory + // SPLURT EDIT - Extra inventory if(digitigrade_fan.socks) if(digitigrade_fan.w_socks.body_parts_covered & FEET) damage *= 0.75 diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index e4fc0de22a7b4..ba51a78510039 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -394,7 +394,7 @@ if(isnull(tackle_target.wear_suit) && isnull(tackle_target.w_uniform)) // who honestly puts all of their effort into tackling a naked guy? defense_mod += 2 - // Extra inventory + // SPLURT EDIT - Extra inventory if(isnull(tackle_target.w_underwear) && isnull(tackle_target.w_socks) && isnull(tackle_target.w_shirt)) defense_mod += 1 // diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 6d657fc2f9f32..9c4fee7baeedf 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -107,19 +107,6 @@ ///ID of the slot containing a gas tank var/internals_slot = null - //sandstorm edit - ///Slot for underwear like boxers and panties - 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 - var/w_shirt = null - ///Slot for the opposite ear. - var/ears_extra = null - ///Slot for the part of your arms that isn't quite hands yet. - var/wrists = null - // worst feature in the game below - /** * Any skillchips the mob should have in their brain. * @@ -202,7 +189,7 @@ if(neck) EQUIP_OUTFIT_ITEM(neck, ITEM_SLOT_NECK) if(ears) - EQUIP_OUTFIT_ITEM(ears, ITEM_SLOT_EARS_LEFT) + EQUIP_OUTFIT_ITEM(ears, ITEM_SLOT_EARS_LEFT) // SPLURT EDIT - Extra inventory if(glasses) EQUIP_OUTFIT_ITEM(glasses, ITEM_SLOT_EYES) if(back) @@ -233,7 +220,7 @@ if(socks) user.socks = initial(socks.name) - // Sandstorm edit + // SPLURT EDIT - Extra inventory if(ears_extra) EQUIP_OUTFIT_ITEM(ears_extra, ITEM_SLOT_EARS_RIGHT) if(w_underwear) @@ -337,10 +324,6 @@ user.wear_id.add_fingerprint(user, ignoregloves = TRUE) if(user.w_uniform) user.w_uniform.add_fingerprint(user, ignoregloves = TRUE) - if(user.w_underwear) - user.w_underwear.add_fingerprint(user, ignoregloves = TRUE) - if(user.w_shirt) - user.w_shirt.add_fingerprint(user, ignoregloves = TRUE) if(user.wear_suit) user.wear_suit.add_fingerprint(user, ignoregloves = TRUE) if(user.wear_mask) @@ -351,16 +334,10 @@ user.head.add_fingerprint(user, ignoregloves = TRUE) if(user.shoes) user.shoes.add_fingerprint(user, ignoregloves = TRUE) - if(user.w_socks) - user.w_socks.add_fingerprint(user, ignoregloves = TRUE) if(user.gloves) user.gloves.add_fingerprint(user, ignoregloves = TRUE) - if(user.wrists) - user.wrists.add_fingerprint(user, ignoregloves = TRUE) if(user.ears) user.ears.add_fingerprint(user, ignoregloves = TRUE) - if(user.ears_extra) - user.ears_extra.add_fingerprint(user, ignoregloves = TRUE) if(user.glasses) user.glasses.add_fingerprint(user, ignoregloves = TRUE) if(user.belt) @@ -390,10 +367,6 @@ id = H.wear_id.type if(H.w_uniform) uniform = H.w_uniform.type - if(H.w_underwear) - w_underwear = H.w_underwear.type - if(H.w_shirt) - w_shirt = H.w_shirt.type if(H.wear_suit) suit = H.wear_suit.type if(H.wear_mask) @@ -404,16 +377,10 @@ head = H.head.type if(H.shoes) shoes = H.shoes.type - if(H.w_socks) - w_socks = H.w_socks.type if(H.gloves) gloves = H.gloves.type - if(H.wrists) - wrists = H.wrists.type if(H.ears) ears = H.ears.type - if(H.ears_extra) - ears_extra = H.ears_extra.type if(H.glasses) glasses = H.glasses.type if(H.belt) @@ -424,7 +391,7 @@ /// Return a list of all the types that are required to disguise as this outfit type /datum/outfit/proc/get_chameleon_disguise_info() var/list/types = list(uniform, suit, back, belt, gloves, shoes, head, mask, neck, ears, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand, - w_underwear, w_socks, w_shirt, ears_extra, wrists) // Extra inventory + w_underwear, w_socks, w_shirt, ears_extra, wrists) // SPLURT EDIT - Extra inventory types += chameleon_extras types += skillchips list_clear_nulls(types) @@ -436,8 +403,6 @@ var/list/preload = list() preload += id preload += uniform - preload += w_underwear - preload += w_shirt preload += suit preload += suit_store preload += back @@ -447,15 +412,12 @@ preload += type_to_load preload += belt preload += ears - preload += ears_extra preload += glasses preload += gloves - preload += wrists preload += head preload += mask preload += neck preload += shoes - preload += w_socks preload += l_pocket preload += r_pocket preload += l_hand @@ -509,20 +471,15 @@ /datum/outfit/proc/copy_from(datum/outfit/target) name = target.name uniform = target.uniform - w_underwear = target.w_underwear - w_shirt = target.w_shirt suit = target.suit back = target.back belt = target.belt gloves = target.gloves - wrists = target.wrists shoes = target.shoes - w_socks = target.w_socks head = target.head mask = target.mask neck = target.neck ears = target.ears - ears_extra = target.ears_extra glasses = target.glasses id = target.id id_trim = target.id_trim @@ -552,20 +509,15 @@ //This could probably use more strict validation name = outfit_data["name"] uniform = text2path(outfit_data["uniform"]) - w_underwear = text2path(outfit_data["w_underwear"]) - w_shirt = text2path(outfit_data["w_shirt"]) suit = text2path(outfit_data["suit"]) back = text2path(outfit_data["back"]) belt = text2path(outfit_data["belt"]) gloves = text2path(outfit_data["gloves"]) - wrists = text2path(outfit_data["wrists"]) shoes = text2path(outfit_data["shoes"]) - w_socks = text2path(outfit_data["w_socks"]) head = text2path(outfit_data["head"]) mask = text2path(outfit_data["mask"]) neck = text2path(outfit_data["neck"]) ears = text2path(outfit_data["ears"]) - ears_extra = text2path(outfit_data["ears_extra"]) glasses = text2path(outfit_data["glasses"]) id = text2path(outfit_data["id"]) id_trim = text2path(outfit_data["id_trim"]) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f72c1ea1d2c3e..e4b752670e0b7 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -236,9 +236,6 @@ /// Do we apply a click cooldown when resisting this object if it is restraining them? var/resist_cooldown = CLICK_CD_BREAKOUT - // Extra inventory - var/hide_underwear_examine = FALSE - /obj/item/Initialize(mapload) if(attack_verb_continuous) attack_verb_continuous = string_list(attack_verb_continuous) @@ -955,18 +952,6 @@ owner.update_worn_back() if(flags & ITEM_SLOT_NECK) owner.update_worn_neck() - // Extra inventory - if(flags & ITEM_SLOT_UNDERWEAR) - owner.update_worn_underwear() - if(flags & ITEM_SLOT_SOCKS) - owner.update_worn_socks() - if(flags & ITEM_SLOT_SHIRT) - owner.update_worn_shirt() - if(flags & ITEM_SLOT_EARS) - owner.update_worn_ears_extra() - if(flags & ITEM_SLOT_WRISTS) - owner.update_worn_wrists() - // ///Returns the temperature of src. If you want to know if an item is hot use this proc. /obj/item/proc/get_temperature() diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index a74986c323158..cdf7cfbceef99 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -21,7 +21,7 @@ /obj/structure/dresser/atom_deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) -/* The way dressers worked was never cool anyways +/* SPLURT EDIT - Handled in modular. The way dressers worked was never cool anyways /obj/structure/dresser/attack_hand(mob/user, list/modifiers) . = ..() if(.) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index ea55e95832048..9e46cea360514 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -98,7 +98,7 @@ "wear_id" = /obj/item/changeling/id, "s_store" = /obj/item/changeling, - // Extra inventory + // SPLURT EDIT - Extra inventory "w_underwear" = /obj/item/changeling, "w_socks" = /obj/item/changeling, "w_shirt" = /obj/item/changeling, @@ -807,11 +807,11 @@ "belt" = ITEM_SLOT_BELT, "gloves" = ITEM_SLOT_GLOVES, "glasses" = ITEM_SLOT_EYES, - "ears" = ITEM_SLOT_EARS_LEFT, + "ears" = ITEM_SLOT_EARS_LEFT, // SPLURT EDIT - Extra inventory "wear_id" = ITEM_SLOT_ID, "s_store" = ITEM_SLOT_SUITSTORE, - // Extra inventory + // SPLURT EDIT - Extra inventory "w_underwear" = ITEM_SLOT_UNDERWEAR, "w_socks" = ITEM_SLOT_SOCKS, "w_shirt" = ITEM_SLOT_SHIRT, diff --git a/code/modules/antagonists/clown_ops/bananium_bomb.dm b/code/modules/antagonists/clown_ops/bananium_bomb.dm index 092c03821db75..274ace0657b88 100644 --- a/code/modules/antagonists/clown_ops/bananium_bomb.dm +++ b/code/modules/antagonists/clown_ops/bananium_bomb.dm @@ -56,7 +56,7 @@ ADD_TRAIT(clown_mask, TRAIT_NODROP, CLOWN_NUKE_TRAIT) clowned_on.equip_to_slot_or_del(clown_mask, ITEM_SLOT_MASK) - //sandstorm edit + // SPLURT EDIT - Extra inventory if(!clowned_on.w_shirt || clowned_on.dropItemToGround(clowned_on.w_shirt)) var/obj/item/clothing/clown_undershirt = new /obj/item/clothing/underwear/shirt/clown(clowned_on) ADD_TRAIT(clown_undershirt, TRAIT_NODROP, CLOWN_NUKE_TRAIT) diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm index 31f1ad32b3fc4..098e470fc29d8 100644 --- a/code/modules/antagonists/highlander/highlander.dm +++ b/code/modules/antagonists/highlander/highlander.dm @@ -57,7 +57,7 @@ H.regenerate_icons() H.revive(ADMIN_HEAL_ALL) H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), ITEM_SLOT_ICLOTHING) - H.equip_to_slot_or_del(new /obj/item/radio/headset/syndicate(H), pick(ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT)) // Extra inventory + H.equip_to_slot_or_del(new /obj/item/radio/headset/syndicate(H), pick(ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT)) // SPLURT EDIT - Extra inventory H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), ITEM_SLOT_HEAD) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), ITEM_SLOT_FEET) H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), ITEM_SLOT_LPOCKET) diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm index 816cf9125db24..653e8f30304d1 100644 --- a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm @@ -110,7 +110,7 @@ if(person_contents == human_sent.shoes) continue - // Extra inventory - and underwear + // SPLURT EDIT - Extra inventory - and underwear if(person_contents == human_sent.w_underwear) continue if(person_contents == human_sent.w_socks) @@ -253,7 +253,7 @@ if(belonging == human_victim.shoes) continue - // Extra inventory - and underwear + // SPLURT EDIT - Extra inventory - and underwear if(belonging == human_victim.w_underwear) continue if(belonging == human_victim.w_socks) diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 2415b2dea6a53..e039248c773ae 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -355,7 +355,7 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) if(!istype(master_mob) || !istype(H)) return if(master_mob.ears) - H.equip_to_slot_or_del(new master_mob.ears.type, pick(ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT)) + H.equip_to_slot_or_del(new master_mob.ears.type, pick(ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT)) //SPLURT EDIT - Extra inventory if(master_mob.w_uniform) H.equip_to_slot_or_del(new master_mob.w_uniform.type, ITEM_SLOT_ICLOTHING) if(master_mob.shoes) diff --git a/code/modules/asset_cache/assets/inventory.dm b/code/modules/asset_cache/assets/inventory.dm index 8ae8ea6e9c88e..0883dbd7515e5 100644 --- a/code/modules/asset_cache/assets/inventory.dm +++ b/code/modules/asset_cache/assets/inventory.dm @@ -17,11 +17,4 @@ "inventory-back.png" = 'icons/ui/inventory/back.png', "inventory-pocket.png" = 'icons/ui/inventory/pocket.png', "inventory-collar.png" = 'icons/ui/inventory/collar.png', - - ///Extra inventory - "inventory-ears_extra.png" = 'modular_zzplurt/icons/ui/inventory/ears_extra.png', - "inventory-underwear.png" = 'modular_zzplurt/icons/ui/inventory/underwear.png', - "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', ) diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm index bda7ea7251083..fdbe355002cbc 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -30,7 +30,7 @@ mask = item_path if(ITEM_SLOT_NECK) neck = item_path - // Sandstorm edit + // SPLURT EDIT - Extra inventory if(ITEM_SLOT_EARS_LEFT) ears = item_path if(ITEM_SLOT_EARS_RIGHT) @@ -94,7 +94,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) // Sandstorm edit + 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 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 8a9c78de4f210..55b463269a55f 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -487,7 +487,7 @@ var/slot_priority = W.slot_equipment_priority if(!slot_priority) - // Extra inventory + // SPLURT EDIT - Extra inventory slot_priority = list( \ ITEM_SLOT_BACK, ITEM_SLOT_ID,\ ITEM_SLOT_UNDERWEAR,\ diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index d48e52d4b02b7..d8d5372643916 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1252,7 +1252,7 @@ update_worn_mask() . = TRUE - if(!(obscured & ITEM_SLOT_EARS_LEFT) && ears?.wash(clean_types)) + if(!(obscured & ITEM_SLOT_EARS_LEFT) && ears?.wash(clean_types)) // SPLURT EDIT - Extra inventory update_worn_ears() . = TRUE diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 99c4413c1201a..2c2797ab5c923 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -849,7 +849,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(H.num_hands < 2) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - //extra inventory + // SPLURT EDIT - Extra inventory if(ITEM_SLOT_WRISTS) if(H.wrists) return FALSE @@ -893,7 +893,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - //extra inventory + // SPLURT EDIT - Extra inventory if(ITEM_SLOT_EARS_RIGHT) if(H.ears_extra) return FALSE diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 608038bebdc0f..1a254da71b72d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -74,10 +74,10 @@ accessory_message = " with [english_list(accessories)] attached" . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_message]." - //shirt + //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)]." - //underwear + //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)]." //head @@ -106,7 +106,7 @@ if(num_hands) . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a "]blood-stained hand[num_hands > 1 ? "s" : ""]!") - //wrists + //SPLURT EDIT - wrists if(wrists && !(obscured & ITEM_SLOT_WRISTS) && !(wrists.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wrists.get_examine_string(user)]." @@ -125,7 +125,7 @@ if(shoes && !(obscured & ITEM_SLOT_FEET) && !(shoes.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet." - //socks + //SPLURT EDIT - socks if(w_socks && !(obscured & ITEM_SLOT_SOCKS) && !(w_socks.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [w_socks.get_examine_string(user)] on [t_his] feet." @@ -149,10 +149,11 @@ if(ears && !(obscured & ITEM_SLOT_EARS_LEFT) && !(ears.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] left ear." // extra inventory - //ears extra + //SPLURT EDIT - ears extra if(ears_extra && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_has] [ears_extra.get_examine_string(user)] on [t_his] right ear." + //SPLURT EDIT - ears extra //wearing two ear items makes you look like an idiot if((istype(ears, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_LEFT) && !(ears.item_flags & EXAMINE_SKIP)) && (istype(ears_extra, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP))) . += span_warning("[t_He] looks quite tacky wearing both \an [ears.name] and \an [ears_extra.name] on [t_his] head.") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0373244402426..d5dd1fdac1996 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -622,7 +622,7 @@ if(!is_mouth_covered() && clean_lips()) . = TRUE - // Extra inventory + // SPLURT EDIT - Extra inventory if(!(obscured & ITEM_SLOT_UNDERWEAR) && w_underwear?.wash(clean_types)) update_worn_underwear() . = TRUE diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 8b2a93e0454bf..1e6db319eaa03 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -75,14 +75,6 @@ var/obj/item/l_store = null var/obj/item/s_store = null - //Extra inventory - var/obj/item/w_underwear = null - var/obj/item/w_socks = null - var/obj/item/w_shirt = null - var/obj/item/ears_extra = null - var/obj/item/wrists = null - // - var/special_voice = "" // For changing our voice. Used by a symptom. var/datum/physiology/physiology diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index 8e6934ffc0c4a..f6e96865e5581 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -79,6 +79,7 @@ if(.) return + //SPLURT EDIT - Extra inventory if(message_mods[MODE_HEADSET]) if(ears && ears.talk_into(src, message, , spans, language, message_mods)) return ITALICS | REDUCE_RANGE diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm index 0fdb5019a7200..277356ec5bcc4 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/handcuffs, /datum/strippable_item/mob_item_slot/legcuffs, - // Extra inventory + // SPLURT EDIT - Extra inventory /datum/strippable_item/mob_item_slot/ears_extra, /datum/strippable_item/mob_item_slot/wrists, /datum/strippable_item/mob_item_slot/socks, 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 25bd1d3d4cb27..5cf4bc64133eb 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -51,16 +51,11 @@ There are several things that need to be remembered: if(!..()) update_worn_undersuit() - update_worn_shirt() - update_worn_underwear() update_worn_id() update_worn_glasses() update_worn_gloves() - update_worn_wrists() update_worn_ears() - update_worn_ears_extra() update_worn_shoes() - update_worn_socks() update_suit_storage() update_worn_mask() update_worn_head() @@ -168,112 +163,6 @@ There are several things that need to be remembered: update_mutant_bodyparts() -/mob/living/carbon/human/update_worn_underwear(update_obscured = TRUE) - remove_overlay(UNDERWEAR_LAYER) - - if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_UNDERWEAR) + 1] - inv.update_icon() - - if(istype(w_underwear, /obj/item/clothing/underwear/briefs)) - var/obj/item/clothing/underwear/briefs/undies = w_underwear - update_hud_underwear(undies) - - if(update_obscured) - update_obscured_slots(undies.flags_inv) - - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_UNDERWEAR) - return - - var/target_overlay = undies.icon_state - var/mutable_appearance/underwear_overlay - var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' - var/handled_by_bodyshape = TRUE - var/digi - var/mutant_styles = NONE - if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undies.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) - icon_file = undies.worn_icon_digi || DIGITIGRADE_UNDERWEAR_FILE - digi = TRUE - - else if(bodyshape & BODYSHAPE_CUSTOM) - icon_file = dna.species.generate_custom_worn_icon(OFFSET_UNDERWEAR, w_underwear, src) - - if(digi) - mutant_styles |= STYLE_DIGI - - if(!icon_exists(icon_file, RESOLVE_ICON_STATE(undies))) - icon_file = DEFAULT_UNDERWEAR_FILE - handled_by_bodyshape = FALSE - - underwear_overlay = undies.build_worn_icon( - default_layer = UNDERWEAR_LAYER, - default_icon_file = icon_file, - isinhands = FALSE, - override_state = target_overlay, - override_file = handled_by_bodyshape ? icon_file : null, - mutant_styles = mutant_styles, - ) - - var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) - my_chest?.worn_underwear_offset?.apply_offset(underwear_overlay) - overlays_standing[UNDERWEAR_LAYER] = underwear_overlay - apply_overlay(UNDERWEAR_LAYER) - - update_mutant_bodyparts() - -/mob/living/carbon/human/update_worn_shirt(update_obscured = TRUE) - remove_overlay(SHIRT_LAYER) - - if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SHIRT) + 1] - inv.update_icon() - - if(istype(w_shirt, /obj/item/clothing/underwear/shirt)) - var/obj/item/clothing/underwear/shirt/undershirt = w_shirt - update_hud_shirt(undershirt) - - if(update_obscured) - update_obscured_slots(undershirt.flags_inv) - - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SHIRT) - return - - var/target_overlay = undershirt.icon_state - var/mutable_appearance/shirt_overlay - var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' - var/handled_by_bodyshape = TRUE - var/digi - var/mutant_styles = NONE - if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undershirt.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) - icon_file = undershirt.worn_icon_digi || DIGITIGRADE_SHIRT_FILE - digi = TRUE - - else if(bodyshape & BODYSHAPE_CUSTOM) - icon_file = dna.species.generate_custom_worn_icon(OFFSET_SHIRT, w_shirt, src) - - if(digi) - mutant_styles |= STYLE_DIGI - - if(!icon_exists(icon_file, RESOLVE_ICON_STATE(undershirt))) - icon_file = DEFAULT_SHIRT_FILE - handled_by_bodyshape = FALSE - - shirt_overlay = undershirt.build_worn_icon( - default_layer = SHIRT_LAYER, - default_icon_file = icon_file, - isinhands = FALSE, - override_state = target_overlay, - override_file = handled_by_bodyshape ? icon_file : null, - mutant_styles = mutant_styles, - ) - - var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) - my_chest?.worn_shirt_offset?.apply_offset(shirt_overlay) - overlays_standing[SHIRT_LAYER] = shirt_overlay - apply_overlay(SHIRT_LAYER) - - update_mutant_bodyparts() - /mob/living/carbon/human/update_worn_id(update_obscured = TRUE) remove_overlay(ID_LAYER) @@ -359,41 +248,6 @@ There are several things that need to be remembered: overlays_standing[GLOVES_LAYER] = gloves_overlay apply_overlay(GLOVES_LAYER) -//Extra inventory -/mob/living/carbon/human/update_worn_wrists(update_obscured = TRUE) - remove_overlay(WRISTS_LAYER) - - if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1]) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1] - inv.update_icon() - - if(wrists) - var/obj/item/worn_item = wrists - update_hud_wrists(worn_item) - - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_GLOVES) - return - - var/icon_file = 'modular_zzplurt/icons/mob/clothing/wrists.dmi' - - // SKYRAT EDIT ADDITION - var/mutant_override = FALSE - if(bodyshape & BODYSHAPE_CUSTOM) - var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_WRISTS, wrists, src) - if(species_icon_file) - icon_file = species_icon_file - mutant_override = TRUE - // SKYRAT EDIT END - - var/mutable_appearance/wrists_overlay = wrists.build_worn_icon(default_layer = WRISTS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE - - overlays_standing[WRISTS_LAYER] = wrists_overlay - apply_overlay(WRISTS_LAYER) -// - /mob/living/carbon/human/update_worn_glasses(update_obscured = TRUE) remove_overlay(GLASSES_LAYER) @@ -444,7 +298,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_LEFT) + 1] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_LEFT) + 1] // SPLURT EDIT - Extra inventory inv.update_icon() if(ears) @@ -454,7 +308,7 @@ There are several things that need to be remembered: if(update_obscured) update_obscured_slots(worn_item.flags_inv) - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS_LEFT) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS_LEFT) // SPLURT EDIT - Extra inventory return var/icon_file = 'icons/mob/clothing/ears.dmi' @@ -477,47 +331,6 @@ There are several things that need to be remembered: overlays_standing[EARS_LAYER] = ears_overlay apply_overlay(EARS_LAYER) -/mob/living/carbon/human/update_worn_ears_extra(update_obscured = TRUE) - remove_overlay(EARS_EXTRA_LAYER) - - var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) - if(isnull(my_head)) //decapitated - return - - if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_RIGHT) + 1] - inv.update_icon() - - if(ears) - var/obj/item/worn_item = ears - update_hud_ears(worn_item) - - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS_RIGHT) - return - - var/icon_file = 'icons/mob/clothing/ears.dmi' - - // SKYRAT EDIT ADDITION - var/mutant_override = FALSE - if(bodyshape & BODYSHAPE_CUSTOM) - var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_EARS, ears, src) - if(species_icon_file) - icon_file = species_icon_file - mutant_override = TRUE - // SKYRAT EDIT END - - var/mutable_appearance/ears_overlay = ears.build_worn_icon(default_layer = EARS_EXTRA_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE - - // SKYRAT EDIT ADDITION - if(!mutant_override) - my_head.worn_ears_offset?.apply_offset(ears_overlay) - // SKYRAT EDIT END - overlays_standing[EARS_EXTRA_LAYER] = ears_overlay - apply_overlay(EARS_EXTRA_LAYER) - /mob/living/carbon/human/update_worn_neck(update_obscured = TRUE) remove_overlay(NECK_LAYER) @@ -623,66 +436,6 @@ There are several things that need to be remembered: update_body_parts() -/mob/living/carbon/human/update_worn_socks(update_obscured = TRUE) - remove_overlay(SOCKS_LAYER) - - if(num_legs < 2) - return - - if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SOCKS) + 1] - inv.update_icon() - - if(w_socks) - var/obj/item/worn_item = w_socks - update_hud_socks(worn_item) - - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SOCKS) - return - - var/icon_file = DEFAULT_SOCKS_FILE - - // SKYRAT EDIT ADDITION START - var/mutant_override = FALSE - - if((bodyshape & BODYSHAPE_DIGITIGRADE) && (worn_item.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) - var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG) - if(leg.limb_id == "digitigrade" || leg.bodyshape & BODYSHAPE_DIGITIGRADE)//Snowflakey and bad. But it makes it look consistent. - icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SOCKS_FILE // SKYRAT EDIT CHANGE - mutant_override = TRUE // SKYRAT EDIT ADDITION - if(!mutant_override && bodyshape & BODYSHAPE_CUSTOM) - var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_SOCKS, w_socks, src) - if(species_icon_file) - icon_file = species_icon_file - mutant_override = TRUE - if(bodyshape & BODYSHAPE_HIDE_SHOES) - return // We just don't want socks that float if we're not displaying legs (useful for taurs, for now) - // SKYRAT EDIT END - - var/mutable_appearance/socks_overlay = w_socks.build_worn_icon(default_layer = SOCKS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE - - if(!socks_overlay) - return - - var/feature_y_offset = 0 - for (var/body_zone in list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - var/obj/item/bodypart/leg/my_leg = get_bodypart(body_zone) - if(isnull(my_leg)) - continue - var/list/foot_offset = my_leg.worn_foot_offset?.get_offset() - if (foot_offset && foot_offset["y"] > feature_y_offset) - feature_y_offset = foot_offset["y"] - - socks_overlay.pixel_y += feature_y_offset - overlays_standing[SOCKS_LAYER] = socks_overlay - - apply_overlay(SOCKS_LAYER) - - update_body_parts() - /mob/living/carbon/human/update_suit_storage(update_obscured = TRUE) remove_overlay(SUIT_STORE_LAYER) @@ -1003,18 +756,6 @@ There are several things that need to be remembered: client.screen += worn_item update_observer_view(worn_item,TRUE) -/mob/living/carbon/human/proc/update_hud_shirt(obj/item/worn_item) - worn_item.screen_loc = ui_shirt - 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)) - client.screen += worn_item - update_observer_view(worn_item,TRUE) - /mob/living/carbon/human/proc/update_hud_id(obj/item/worn_item) worn_item.screen_loc = ui_id if((client && hud_used?.hud_shown)) @@ -1027,12 +768,6 @@ There are several things that need to be remembered: client.screen += worn_item update_observer_view(worn_item,TRUE) -/mob/living/carbon/human/proc/update_hud_wrists(obj/item/worn_item) - worn_item.screen_loc = ui_wrists - 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_glasses(obj/item/worn_item) worn_item.screen_loc = ui_glasses if((client && hud_used) && (hud_used.inventory_shown && hud_used.hud_shown)) @@ -1045,24 +780,12 @@ There are several things that need to be remembered: client.screen += worn_item update_observer_view(worn_item,TRUE) -/mob/living/carbon/human/proc/update_hud_ears_extra(obj/item/worn_item) - worn_item.screen_loc = ui_ears_extra - 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_shoes(obj/item/worn_item) worn_item.screen_loc = ui_shoes if((client && hud_used) && (hud_used.inventory_shown && hud_used.hud_shown)) client.screen += worn_item update_observer_view(worn_item,TRUE) -/mob/living/carbon/human/proc/update_hud_socks(obj/item/worn_item) - worn_item.screen_loc = ui_socks - 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_s_store(obj/item/worn_item) worn_item.screen_loc = ui_sstore1 if(client && hud_used?.hud_shown) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index c487c7d893fde..84f4877f6b784 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -27,34 +27,18 @@ return belt if(ITEM_SLOT_ID) return wear_id - if(ITEM_SLOT_EARS_LEFT) // Extra inventory + if(ITEM_SLOT_EARS_LEFT) // SPLURT EDIT - Extra inventory return ears - // Extra inventory - if(ITEM_SLOT_EARS_RIGHT) - return ears_extra - // if(ITEM_SLOT_EYES) return glasses if(ITEM_SLOT_GLOVES) return gloves - // Extra inventory - if(ITEM_SLOT_WRISTS) - return wrists - // if(ITEM_SLOT_FEET) return shoes if(ITEM_SLOT_OCLOTHING) return wear_suit if(ITEM_SLOT_ICLOTHING) return w_uniform - // Extra inventory - if(ITEM_SLOT_UNDERWEAR) - return w_underwear - if(ITEM_SLOT_SOCKS) - return w_socks - if(ITEM_SLOT_SHIRT) - return w_shirt - // if(ITEM_SLOT_LPOCKET) return l_store if(ITEM_SLOT_RPOCKET) @@ -71,10 +55,7 @@ return ITEM_SLOT_ID if(looking_for == ears) - return ITEM_SLOT_EARS_LEFT - - if(looking_for == ears_extra) - return ITEM_SLOT_EARS_RIGHT + return ITEM_SLOT_EARS_LEFT // SPLURT EDIT - Extra inventory if(looking_for == glasses) return ITEM_SLOT_EYES @@ -91,24 +72,12 @@ if(looking_for == shoes) return ITEM_SLOT_FEET - if(looking_for == w_socks) - return ITEM_SLOT_SOCKS - if(looking_for == wear_suit) return ITEM_SLOT_OCLOTHING if(looking_for == w_uniform) return ITEM_SLOT_ICLOTHING - if(looking_for == w_underwear) - return ITEM_SLOT_UNDERWEAR - - if(looking_for == w_shirt) - return ITEM_SLOT_SHIRT - - if(looking_for == wrists) - return ITEM_SLOT_WRISTS - if(looking_for == r_store) return ITEM_SLOT_RPOCKET @@ -134,11 +103,8 @@ wear_id, l_store, r_store, - w_uniform, - w_underwear, - w_socks, - w_shirt, - ) // extra inventory + w_uniform + ) /mob/living/carbon/human/proc/get_head_slots() return list( @@ -146,9 +112,8 @@ wear_mask, wear_neck, glasses, - ears, - ears_extra, - ) // extra inventory + ears + ) /mob/living/carbon/human/proc/get_storage_slots() return list( @@ -185,16 +150,18 @@ wear_id = equipping sec_hud_set_ID() update_worn_id() - if(ITEM_SLOT_EARS_LEFT) + if(ITEM_SLOT_EARS_LEFT) // SPLURT EDIT - Extra inventory if(ears) return ears = equipping update_worn_ears() + // SPLURT EDIT - Extra inventory if(ITEM_SLOT_EARS_RIGHT) if(ears_extra) return ears_extra = equipping update_worn_ears_extra() + // if(ITEM_SLOT_EYES) if(glasses) return @@ -214,11 +181,13 @@ update_mob_action_buttons() //SKYRAT EDIT ADDITION END update_worn_gloves() + // SPLURT EDIT - Extra inventory if(ITEM_SLOT_WRISTS) if(wrists) return wrists = equipping update_worn_wrists() + // if(ITEM_SLOT_FEET) if(shoes) return @@ -241,6 +210,7 @@ w_uniform = equipping update_suit_sensors() update_worn_undersuit() + // SPLURT EDIT - Extra inventory if(ITEM_SLOT_UNDERWEAR) if(w_underwear) return @@ -256,6 +226,7 @@ return w_socks = equipping update_worn_socks() + // if(ITEM_SLOT_LPOCKET) l_store = equipping update_pockets() @@ -313,7 +284,7 @@ dropItemToGround(wear_id) if(belt && !can_equip(belt, ITEM_SLOT_BELT, TRUE, ignore_equipped = TRUE)) dropItemToGround(belt) - // Extra inventory + // SPLURT EDIT - Extra inventory else if(I == w_underwear) w_underwear = null if(!QDELETED(src)) @@ -352,7 +323,7 @@ ears = null if(!QDELETED(src)) update_worn_ears() - // Extra inventory + // SPLURT EDIT - Extra inventory else if(I == ears_extra) ears_extra = null if(!QDELETED(src)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 8b77403c373a1..d8119c6a5279a 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -166,20 +166,6 @@ if(w_uniform) if(w_uniform.max_heat_protection_temperature && w_uniform.max_heat_protection_temperature >= temperature) thermal_protection_flags |= w_uniform.heat_protection - //skyrat edit - if(w_underwear) - if(w_underwear.max_heat_protection_temperature && w_underwear.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= w_underwear.heat_protection - if(w_socks) - if(w_socks.max_heat_protection_temperature && w_socks.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= w_socks.heat_protection - if(w_shirt) - if(w_shirt.max_heat_protection_temperature && w_shirt.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= w_shirt.heat_protection - if(wrists) - if(wrists.max_heat_protection_temperature && wrists.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= wrists.heat_protection - // if(shoes) if(shoes.max_heat_protection_temperature && shoes.max_heat_protection_temperature >= temperature) thermal_protection_flags |= shoes.heat_protection diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index f2b3739d0ed96..6cb13bb0caa09 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -14,7 +14,7 @@ if(hidden_slots & HIDEEYES) obscured |= ITEM_SLOT_EYES if(hidden_slots & HIDEEARS) - obscured |= ITEM_SLOT_EARS_LEFT + obscured |= ITEM_SLOT_EARS_LEFT // SPLURT EDIT - Extra inventory if(hidden_slots & HIDEGLOVES) obscured |= ITEM_SLOT_GLOVES if(hidden_slots & HIDEJUMPSUIT) @@ -76,7 +76,7 @@ ITEM_SLOT_ICLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_EYES, - ITEM_SLOT_EARS_LEFT, + ITEM_SLOT_EARS_LEFT, // SPLURT EDIT - Extra inventory ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_FEET, diff --git a/code/modules/mob/mob_update_icons.dm b/code/modules/mob/mob_update_icons.dm index f63d444a914bd..a355a385d9faa 100644 --- a/code/modules/mob/mob_update_icons.dm +++ b/code/modules/mob/mob_update_icons.dm @@ -27,22 +27,14 @@ update_worn_glasses() if(slot_flags & ITEM_SLOT_GLOVES) update_worn_gloves() - if(slot_flags & ITEM_SLOT_WRISTS) - update_worn_wrists() if(slot_flags & ITEM_SLOT_HEAD) update_worn_head() if(slot_flags & ITEM_SLOT_FEET) update_worn_shoes() - if(slot_flags & ITEM_SLOT_SOCKS) - update_worn_socks() if(slot_flags & ITEM_SLOT_OCLOTHING) update_worn_oversuit() if(slot_flags & ITEM_SLOT_ICLOTHING) update_worn_undersuit() - if(slot_flags & ITEM_SLOT_UNDERWEAR) - update_worn_underwear() - if(slot_flags & ITEM_SLOT_SHIRT) - update_worn_shirt() if(slot_flags & ITEM_SLOT_SUITSTORE) update_suit_storage() if(slot_flags & (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET)) @@ -54,16 +46,10 @@ /mob/proc/update_obscured_slots(obscured_flags) if(obscured_flags & HIDEGLOVES) update_worn_gloves(update_obscured = FALSE) - if(obscured_flags & HIDEWRISTS) - update_worn_wrists(update_obscured = FALSE) if(obscured_flags & HIDESUITSTORAGE) update_suit_storage(update_obscured = FALSE) if(obscured_flags & HIDEJUMPSUIT) update_worn_undersuit(update_obscured = FALSE) - if(obscured_flags & HIDEUNDERWEAR) - update_worn_underwear(update_obscured = FALSE) - update_worn_shirt(update_obscured = FALSE) - update_worn_socks(update_obscured = FALSE) if(obscured_flags & HIDESHOES) update_worn_shoes(update_obscured = FALSE) if(obscured_flags & HIDEMASK) @@ -113,14 +99,6 @@ /mob/proc/update_worn_undersuit(update_obscured = FALSE) return -///Updates the underwear overlay & HUD element. -/mob/proc/update_worn_underwear(update_obscured = FALSE) - return - -///Updates the shirt overlay & HUD element. -/mob/proc/update_worn_shirt(update_obscured = FALSE) - return - ///Updates the belt overlay & HUD element. /mob/proc/update_worn_belt(update_obscured = FALSE) return @@ -148,18 +126,10 @@ /mob/proc/update_worn_shoes(update_obscured = FALSE) return -///Updates the socks overlay & HUD element. -/mob/proc/update_worn_socks(update_obscured = FALSE) - return - ///Updates the glasses overlay & HUD element. /mob/proc/update_worn_gloves(update_obscured = FALSE) return -///Updates the wrists overlay & HUD element. -/mob/proc/update_worn_wrists(update_obscured = FALSE) - return - ///Updates the suit storage overlay & HUD element. /mob/proc/update_suit_storage(update_obscured = FALSE) return @@ -171,7 +141,3 @@ ///Updates the headset overlay & HUD element. /mob/proc/update_worn_ears(update_obscured = FALSE) return - -///Updates the headset on the other side overlay & HUD element. -/mob/proc/update_worn_ears_extra(update_obscured = FALSE) - return diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index afc73df55f816..6e3b5ca921bc4 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -34,11 +34,6 @@ var/datum/worn_feature_offset/worn_suit_offset /// Offset to apply to equipment worn on the neck var/datum/worn_feature_offset/worn_neck_offset - - /// Offset to apply to equipment worn as underwear - var/datum/worn_feature_offset/worn_underwear_offset - /// Offset to apply to equipment worn as a shirt - var/datum/worn_feature_offset/worn_shirt_offset /// Which functional (i.e. flightpotion) wing types (if any) does this bodypart support? If count is >1 a radial menu is used to choose between all icons in list var/list/wing_types = list(/obj/item/organ/external/wings/functional/angel) diff --git a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm b/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm index 22971d9f13a4c..b18708987f2ae 100644 --- a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm +++ b/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm @@ -123,7 +123,7 @@ throwforce = 0 attack_verb_simple = list("whipped", "repented", "lashed", "flagellated") attack_verb_continuous = list("whipped", "repented", "lashed", "flagellated") - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_WRISTS + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_WRISTS // SPLURT EDIT - Extra inventory var/praying = FALSE var/deity_name = "Coderbus" // This is the default, hopefully won't actually appear if the religion subsystem is running properly diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm index 9efc5b4f684cd..beec134424720 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm @@ -14,12 +14,8 @@ ///Clothing offsets. If a species has a different body than other species, you can offset clothing so they look less weird. var/list/offset_features = list( OFFSET_UNIFORM = list(0,0), - OFFSET_UNDERWEAR = list(0,0), - OFFSET_SOCKS = list(0,0), - OFFSET_SHIRT = list(0,0), OFFSET_ID = list(0,0), OFFSET_GLOVES = list(0,0), - OFFSET_WRISTS = list(0,0), OFFSET_GLASSES = list(0,0), OFFSET_EARS = list(0,0), OFFSET_SHOES = list(0,0), 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 231450ab2e8b2..323adb4c52adb 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 @@ -139,7 +139,7 @@ GLOBAL_LIST_EMPTY(customizable_races) standing += eye_organ.generate_body_overlay(species_human) //Underwear, Undershirts & Socks - /* + /* SPLURT EDIT - Extra inventory if(!HAS_TRAIT(species_human, TRAIT_NO_UNDERWEAR)) if(species_human.underwear && !(species_human.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) var/datum/sprite_accessory/underwear/underwear = SSaccessories.underwear_list[species_human.underwear] diff --git a/modular_zzplurt/code/_onclick/hud/hud.dm b/modular_zzplurt/code/_onclick/hud/hud.dm new file mode 100644 index 0000000000000..e3f8d422ab907 --- /dev/null +++ b/modular_zzplurt/code/_onclick/hud/hud.dm @@ -0,0 +1,22 @@ +// SPLURT EDIT - Extra inventory + +GLOBAL_LIST_INIT(extra_inventory_ui_styles, list( + 'icons/hud/screen_midnight.dmi' = 'modular_zzplurt/icons/hud/screen_midnight.dmi', + 'icons/hud/screen_retro.dmi' = 'modular_zzplurt/icons/hud/screen_retro.dmi', + 'icons/hud/screen_plasmafire.dmi' = 'modular_zzplurt/icons/hud/screen_plasmafire.dmi', + 'icons/hud/screen_slimecore.dmi' = 'modular_zzplurt/icons/hud/screen_slimecore.dmi', + 'icons/hud/screen_operative.dmi' = 'modular_zzplurt/icons/hud/screen_operative.dmi', + 'icons/hud/screen_clockwork.dmi' = 'modular_zzplurt/icons/hud/screen_clockwork.dmi', +)) + + +/proc/extra_inventory_ui_style(ui_style) + return GLOB.extra_inventory_ui_styles[ui_style] || GLOB.extra_inventory_ui_styles[GLOB.extra_inventory_ui_styles[1]] + +/datum/hud + // Extra inventory + var/extra_shown = FALSE + var/list/extra_inventory = list() + +/datum/hud/proc/extra_inventory_update() + return diff --git a/modular_zzplurt/code/_onclick/hud/human.dm b/modular_zzplurt/code/_onclick/hud/human.dm new file mode 100644 index 0000000000000..317ae04200e46 --- /dev/null +++ b/modular_zzplurt/code/_onclick/hud/human.dm @@ -0,0 +1,55 @@ +/atom/movable/screen/human/toggle/extra + name = "toggle extra" + icon_state = "toggle_extra" + +/atom/movable/screen/human/toggle/extra/Click() + var/mob/targetmob = usr + + if(isobserver(usr)) + if(ishuman(usr.client.eye) && (usr.client.eye != usr)) + var/mob/M = usr.client.eye + targetmob = M + + if(usr.hud_used.extra_shown && targetmob.hud_used) + usr.hud_used.extra_shown = FALSE + usr.client.screen -= targetmob.hud_used.extra_inventory + else + usr.hud_used.extra_shown = TRUE + usr.client.screen += targetmob.hud_used.extra_inventory + + targetmob.hud_used.extra_inventory_update(usr) + +/datum/hud/human/extra_inventory_update(mob/viewer) + if(!mymob) + return + var/mob/living/carbon/human/H = mymob + + var/mob/screenmob = viewer || H + + if(screenmob.hud_used.extra_shown && screenmob.hud_used.inventory_shown && screenmob.hud_used.hud_shown) + if(H.ears_extra) + H.ears_extra.screen_loc = ui_ears_extra + screenmob.client.screen += H.ears_extra + if(H.w_underwear) + H.w_underwear.screen_loc = ui_boxers + screenmob.client.screen += H.w_underwear + if(H.w_socks) + H.w_socks.screen_loc = ui_socks + screenmob.client.screen += H.w_socks + if(H.w_shirt) + H.w_shirt.screen_loc = ui_shirt + screenmob.client.screen += H.w_shirt + if(H.wrists) + H.wrists.screen_loc = ui_wrists + screenmob.client.screen += H.wrists + else + if(H.ears_extra) + screenmob.client.screen -= H.ears_extra + if(H.w_underwear) + screenmob.client.screen -= H.w_underwear + if(H.w_socks) + screenmob.client.screen -= H.w_socks + if(H.w_shirt) + screenmob.client.screen -= H.w_shirt + if(H.wrists) + screenmob.client.screen -= H.wrists diff --git a/modular_zzplurt/code/datums/outfit.dm b/modular_zzplurt/code/datums/outfit.dm new file mode 100644 index 0000000000000..90af48df88f3b --- /dev/null +++ b/modular_zzplurt/code/datums/outfit.dm @@ -0,0 +1,75 @@ +/datum/outfit + ///Slot for underwear like boxers and panties + 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 + var/w_shirt = null + ///Slot for the opposite ear. + var/ears_extra = null + ///Slot for the part of your arms that isn't quite hands yet. + var/wrists = null + +/datum/outfit/apply_fingerprints(mob/living/carbon/human/user) + . = ..() + if(!.) + return + + if(user.w_underwear) + user.w_underwear.add_fingerprint(user, ignoregloves = TRUE) + if(user.w_shirt) + user.w_shirt.add_fingerprint(user, ignoregloves = TRUE) + if(user.w_socks) + user.w_socks.add_fingerprint(user, ignoregloves = TRUE) + if(user.wrists) + user.wrists.add_fingerprint(user, ignoregloves = TRUE) + if(user.ears_extra) + user.ears_extra.add_fingerprint(user, ignoregloves = TRUE) + +/datum/outfit/copy_outfit_from_target(mob/living/carbon/human/H) + . = ..() + if(!.) + return + + if(H.w_underwear) + w_underwear = H.w_underwear.type + if(H.w_shirt) + w_shirt = H.w_shirt.type + if(H.w_socks) + w_socks = H.w_socks.type + if(H.wrists) + wrists = H.wrists.type + if(H.ears_extra) + ears_extra = H.ears_extra.type + +/datum/outfit/get_types_to_preload() + . = ..() + . += w_underwear + . += w_shirt + . += ears_extra + . += wrists + . += w_socks + +/datum/outfit/get_json_data() + . = ..() + .["w_underwear"] = w_underwear + .["w_shirt"] = w_shirt + .["ears_extra"] = ears_extra + .["wrists"] = wrists + .["w_socks"] = w_socks + +/datum/outfit/copy_from(datum/outfit/target) + . = ..() + w_underwear = target.w_underwear + w_shirt = target.w_shirt + wrists = target.wrists + ears_extra = target.ears_extra + w_socks = target.w_socks + +/datum/outfit/load_from(list/outfit_data) + . = ..() + w_underwear = text2path(outfit_data["w_underwear"]) + w_shirt = text2path(outfit_data["w_shirt"]) + wrists = text2path(outfit_data["wrists"]) + w_socks = text2path(outfit_data["w_socks"]) + ears_extra = text2path(outfit_data["ears_extra"]) diff --git a/modular_zzplurt/code/game/objects/items.dm b/modular_zzplurt/code/game/objects/items.dm new file mode 100644 index 0000000000000..3c5713a058ecf --- /dev/null +++ b/modular_zzplurt/code/game/objects/items.dm @@ -0,0 +1,22 @@ +/obj/item + // Extra inventory + var/hide_underwear_examine = FALSE + +/obj/item/update_slot_icon() + . = ..() + if(!ismob(loc)) + return + var/mob/owner = loc + var/flags = slot_flags + // Extra inventory + if(flags & ITEM_SLOT_UNDERWEAR) + owner.update_worn_underwear() + if(flags & ITEM_SLOT_SOCKS) + owner.update_worn_socks() + if(flags & ITEM_SLOT_SHIRT) + owner.update_worn_shirt() + if(flags & ITEM_SLOT_EARS) + owner.update_worn_ears_extra() + if(flags & ITEM_SLOT_WRISTS) + owner.update_worn_wrists() + // diff --git a/modular_zzplurt/code/modules/asset_cache/assets/inventory.dm b/modular_zzplurt/code/modules/asset_cache/assets/inventory.dm new file mode 100644 index 0000000000000..0f63b3fc63a6e --- /dev/null +++ b/modular_zzplurt/code/modules/asset_cache/assets/inventory.dm @@ -0,0 +1,12 @@ +/datum/asset/simple/inventory/New() + var/list/extra_assets = list( + ///Extra inventory + "inventory-ears_extra.png" = 'modular_zzplurt/icons/ui/inventory/ears_extra.png', + "inventory-underwear.png" = 'modular_zzplurt/icons/ui/inventory/underwear.png', + "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', + ) + LAZYADD(assets, extra_assets) + . = ..() + 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 new file mode 100644 index 0000000000000..6c45a10a5d1f9 --- /dev/null +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/human_defines.dm @@ -0,0 +1,9 @@ +/mob/living/carbon/human + //Extra inventory + var/obj/item/w_underwear = null + var/obj/item/w_socks = null + var/obj/item/w_shirt = null + var/obj/item/ears_extra = null + var/obj/item/wrists = null + // + 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 new file mode 100644 index 0000000000000..8cf577a8a41d1 --- /dev/null +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -0,0 +1,283 @@ +#define RESOLVE_ICON_STATE(worn_item) (worn_item.worn_icon_state || worn_item.icon_state) + +/mob/living/carbon/human/regenerate_icons() + . = ..() + if(.) + return + update_worn_shirt() + update_worn_underwear() + update_worn_wrists() + update_worn_ears_extra() + update_worn_socks() + +/mob/living/carbon/human/update_worn_underwear(update_obscured = TRUE) + remove_overlay(UNDERWEAR_LAYER) + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_UNDERWEAR) + 1] + inv.update_icon() + + if(istype(w_underwear, /obj/item/clothing/underwear/briefs)) + var/obj/item/clothing/underwear/briefs/undies = w_underwear + update_hud_underwear(undies) + + if(update_obscured) + update_obscured_slots(undies.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_UNDERWEAR) + return + + var/target_overlay = undies.icon_state + var/mutable_appearance/underwear_overlay + var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' + var/handled_by_bodyshape = TRUE + var/digi + var/mutant_styles = NONE + if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undies.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + icon_file = undies.worn_icon_digi || DIGITIGRADE_UNDERWEAR_FILE + digi = TRUE + + else if(bodyshape & BODYSHAPE_CUSTOM) + icon_file = dna.species.generate_custom_worn_icon(OFFSET_UNDERWEAR, w_underwear, src) + + if(digi) + mutant_styles |= STYLE_DIGI + + if(!icon_exists(icon_file, RESOLVE_ICON_STATE(undies))) + icon_file = DEFAULT_UNDERWEAR_FILE + handled_by_bodyshape = FALSE + + underwear_overlay = undies.build_worn_icon( + default_layer = UNDERWEAR_LAYER, + default_icon_file = icon_file, + isinhands = FALSE, + override_state = target_overlay, + override_file = handled_by_bodyshape ? icon_file : null, + mutant_styles = mutant_styles, + ) + + var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) + my_chest?.worn_underwear_offset?.apply_offset(underwear_overlay) + overlays_standing[UNDERWEAR_LAYER] = underwear_overlay + apply_overlay(UNDERWEAR_LAYER) + + update_mutant_bodyparts() + +/mob/living/carbon/human/update_worn_shirt(update_obscured = TRUE) + remove_overlay(SHIRT_LAYER) + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SHIRT) + 1] + inv.update_icon() + + if(istype(w_shirt, /obj/item/clothing/underwear/shirt)) + var/obj/item/clothing/underwear/shirt/undershirt = w_shirt + update_hud_shirt(undershirt) + + if(update_obscured) + update_obscured_slots(undershirt.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SHIRT) + return + + var/target_overlay = undershirt.icon_state + var/mutable_appearance/shirt_overlay + var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' + var/handled_by_bodyshape = TRUE + var/digi + var/mutant_styles = NONE + if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undershirt.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + icon_file = undershirt.worn_icon_digi || DIGITIGRADE_SHIRT_FILE + digi = TRUE + + else if(bodyshape & BODYSHAPE_CUSTOM) + icon_file = dna.species.generate_custom_worn_icon(OFFSET_SHIRT, w_shirt, src) + + if(digi) + mutant_styles |= STYLE_DIGI + + if(!icon_exists(icon_file, RESOLVE_ICON_STATE(undershirt))) + icon_file = DEFAULT_SHIRT_FILE + handled_by_bodyshape = FALSE + + shirt_overlay = undershirt.build_worn_icon( + default_layer = SHIRT_LAYER, + default_icon_file = icon_file, + isinhands = FALSE, + override_state = target_overlay, + override_file = handled_by_bodyshape ? icon_file : null, + mutant_styles = mutant_styles, + ) + + var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) + my_chest?.worn_shirt_offset?.apply_offset(shirt_overlay) + overlays_standing[SHIRT_LAYER] = shirt_overlay + apply_overlay(SHIRT_LAYER) + + update_mutant_bodyparts() + +/mob/living/carbon/human/update_worn_wrists(update_obscured = TRUE) + remove_overlay(WRISTS_LAYER) + + if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1]) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1] + inv.update_icon() + + if(wrists) + var/obj/item/worn_item = wrists + update_hud_wrists(worn_item) + + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_GLOVES) + return + + var/icon_file = 'modular_zzplurt/icons/mob/clothing/wrists.dmi' + + // SKYRAT EDIT ADDITION + var/mutant_override = FALSE + if(bodyshape & BODYSHAPE_CUSTOM) + var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_WRISTS, wrists, src) + if(species_icon_file) + icon_file = species_icon_file + mutant_override = TRUE + // SKYRAT EDIT END + + var/mutable_appearance/wrists_overlay = wrists.build_worn_icon(default_layer = WRISTS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + + overlays_standing[WRISTS_LAYER] = wrists_overlay + apply_overlay(WRISTS_LAYER) + +/mob/living/carbon/human/update_worn_ears_extra(update_obscured = TRUE) + remove_overlay(EARS_EXTRA_LAYER) + + var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) + if(isnull(my_head)) //decapitated + return + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_RIGHT) + 1] + inv.update_icon() + + if(ears) + var/obj/item/worn_item = ears + update_hud_ears(worn_item) + + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS_RIGHT) + return + + var/icon_file = 'icons/mob/clothing/ears.dmi' + + // SKYRAT EDIT ADDITION + var/mutant_override = FALSE + if(bodyshape & BODYSHAPE_CUSTOM) + var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_EARS, ears, src) + if(species_icon_file) + icon_file = species_icon_file + mutant_override = TRUE + // SKYRAT EDIT END + + var/mutable_appearance/ears_overlay = ears.build_worn_icon(default_layer = EARS_EXTRA_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + + // SKYRAT EDIT ADDITION + if(!mutant_override) + my_head.worn_ears_offset?.apply_offset(ears_overlay) + // SKYRAT EDIT END + overlays_standing[EARS_EXTRA_LAYER] = ears_overlay + apply_overlay(EARS_EXTRA_LAYER) + +/mob/living/carbon/human/update_worn_socks(update_obscured = TRUE) + remove_overlay(SOCKS_LAYER) + + if(num_legs < 2) + return + + if(client && hud_used) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SOCKS) + 1] + inv.update_icon() + + if(w_socks) + var/obj/item/worn_item = w_socks + update_hud_socks(worn_item) + + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SOCKS) + return + + var/icon_file = DEFAULT_SOCKS_FILE + + // SKYRAT EDIT ADDITION START + var/mutant_override = FALSE + + if((bodyshape & BODYSHAPE_DIGITIGRADE) && (worn_item.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG) + if(leg.limb_id == "digitigrade" || leg.bodyshape & BODYSHAPE_DIGITIGRADE)//Snowflakey and bad. But it makes it look consistent. + icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SOCKS_FILE // SKYRAT EDIT CHANGE + mutant_override = TRUE // SKYRAT EDIT ADDITION + if(!mutant_override && bodyshape & BODYSHAPE_CUSTOM) + var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_SOCKS, w_socks, src) + if(species_icon_file) + icon_file = species_icon_file + mutant_override = TRUE + if(bodyshape & BODYSHAPE_HIDE_SHOES) + return // We just don't want socks that float if we're not displaying legs (useful for taurs, for now) + // SKYRAT EDIT END + + var/mutable_appearance/socks_overlay = w_socks.build_worn_icon(default_layer = SOCKS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + + if(!socks_overlay) + return + + var/feature_y_offset = 0 + for (var/body_zone in list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + var/obj/item/bodypart/leg/my_leg = get_bodypart(body_zone) + if(isnull(my_leg)) + continue + var/list/foot_offset = my_leg.worn_foot_offset?.get_offset() + if (foot_offset && foot_offset["y"] > feature_y_offset) + feature_y_offset = foot_offset["y"] + + socks_overlay.pixel_y += feature_y_offset + overlays_standing[SOCKS_LAYER] = socks_overlay + + apply_overlay(SOCKS_LAYER) + + update_body_parts() + +/mob/living/carbon/human/proc/update_hud_shirt(obj/item/worn_item) + worn_item.screen_loc = ui_shirt + 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)) + client.screen += worn_item + update_observer_view(worn_item,TRUE) + +/mob/living/carbon/human/proc/update_hud_wrists(obj/item/worn_item) + worn_item.screen_loc = ui_wrists + 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_ears_extra(obj/item/worn_item) + worn_item.screen_loc = ui_ears_extra + 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_socks(obj/item/worn_item) + worn_item.screen_loc = ui_socks + 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) + +#undef RESOLVE_ICON_STATE diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm new file mode 100644 index 0000000000000..1ecbc513a87bc --- /dev/null +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm @@ -0,0 +1,48 @@ +/mob/living/carbon/human/get_item_by_slot(slot_id) + switch(slot_id) + if(ITEM_SLOT_EARS_RIGHT) + return ears_extra + if(ITEM_SLOT_WRISTS) + return wrists + if(ITEM_SLOT_UNDERWEAR) + return w_underwear + if(ITEM_SLOT_SOCKS) + return w_socks + if(ITEM_SLOT_SHIRT) + return w_shirt + . = ..() + +/mob/living/carbon/human/get_slot_by_item(obj/item/looking_for) + if(looking_for == ears_extra) + return ITEM_SLOT_EARS_RIGHT + + if(looking_for == wrists) + return ITEM_SLOT_WRISTS + + if(looking_for == w_underwear) + return ITEM_SLOT_UNDERWEAR + + if(looking_for == w_socks) + return ITEM_SLOT_SOCKS + + if(looking_for == w_shirt) + return ITEM_SLOT_SHIRT + + . = ..() + +/mob/living/carbon/human/get_body_slots() + . = ..() + var/list/extra_body_slots = list( + w_uniform, + w_underwear, + w_socks, + w_shirt, + ) + LAZYADD(., extra_body_slots) + +/mob/living/carbon/human/get_head_slots() + . = ..() + var/list/extra_head_slots = list( + ears_extra, + ) + LAZYADD(., extra_head_slots) diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/life.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/life.dm new file mode 100644 index 0000000000000..10700f280439d --- /dev/null +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/life.dm @@ -0,0 +1,16 @@ +/mob/living/carbon/human/get_heat_protection_flags(temperature) + . = ..() + // SPLURT EDIT - Extra inventory + if(w_underwear) + if(w_underwear.max_heat_protection_temperature && w_underwear.max_heat_protection_temperature >= temperature) + . |= w_underwear.heat_protection + if(w_socks) + if(w_socks.max_heat_protection_temperature && w_socks.max_heat_protection_temperature >= temperature) + . |= w_socks.heat_protection + if(w_shirt) + if(w_shirt.max_heat_protection_temperature && w_shirt.max_heat_protection_temperature >= temperature) + . |= w_shirt.heat_protection + if(wrists) + if(wrists.max_heat_protection_temperature && wrists.max_heat_protection_temperature >= temperature) + . |= wrists.heat_protection + // diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/species.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/species.dm new file mode 100644 index 0000000000000..b7772669f08bb --- /dev/null +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/species.dm @@ -0,0 +1,9 @@ +/datum/species/New() + var/list/extra_offset_features = list( + OFFSET_UNDERWEAR = list(0,0), + OFFSET_SOCKS = list(0,0), + OFFSET_SHIRT = list(0,0), + OFFSET_WRISTS = list(0,0) + ) + LAZYADD(offset_features, extra_offset_features) + . = ..() diff --git a/modular_zzplurt/code/modules/mob/mob_update_icons.dm b/modular_zzplurt/code/modules/mob/mob_update_icons.dm new file mode 100644 index 0000000000000..87dd42d19f5d8 --- /dev/null +++ b/modular_zzplurt/code/modules/mob/mob_update_icons.dm @@ -0,0 +1,39 @@ +/mob/update_clothing(slot_flags) + . = ..() + if(slot_flags & ITEM_SLOT_WRISTS) + update_worn_wrists() + if(slot_flags & ITEM_SLOT_SOCKS) + update_worn_socks() + if(slot_flags & ITEM_SLOT_UNDERWEAR) + update_worn_underwear() + if(slot_flags & ITEM_SLOT_SHIRT) + update_worn_shirt() + +/mob/update_obscured_slots(obscured_flags) + . = ..() + if(obscured_flags & HIDEWRISTS) + update_worn_wrists(update_obscured = FALSE) + if(obscured_flags & HIDEUNDERWEAR) + update_worn_underwear(update_obscured = FALSE) + update_worn_shirt(update_obscured = FALSE) + update_worn_socks(update_obscured = FALSE) + +///Updates the underwear overlay & HUD element. +/mob/proc/update_worn_underwear(update_obscured = FALSE) + return + +///Updates the shirt overlay & HUD element. +/mob/proc/update_worn_shirt(update_obscured = FALSE) + return + +///Updates the socks overlay & HUD element. +/mob/proc/update_worn_socks(update_obscured = FALSE) + return + +///Updates the wrists overlay & HUD element. +/mob/proc/update_worn_wrists(update_obscured = FALSE) + return + +///Updates the headset on the other side overlay & HUD element. +/mob/proc/update_worn_ears_extra(update_obscured = FALSE) + return diff --git a/modular_zzplurt/code/modules/surgery/bodyparts/parts.dm b/modular_zzplurt/code/modules/surgery/bodyparts/parts.dm new file mode 100644 index 0000000000000..ac16c61d1e606 --- /dev/null +++ b/modular_zzplurt/code/modules/surgery/bodyparts/parts.dm @@ -0,0 +1,5 @@ +/obj/item/bodypart/chest + /// Offset to apply to equipment worn as underwear + var/datum/worn_feature_offset/worn_underwear_offset + /// Offset to apply to equipment worn as a shirt + var/datum/worn_feature_offset/worn_shirt_offset diff --git a/tgstation.dme b/tgstation.dme index b71aa5487a09d..7ba78003758bc 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -507,6 +507,9 @@ #include "code\__DEFINES\~~bubber_defines\transport.dm" #include "code\__DEFINES\~~bubber_defines\___HELPERS\global_lists.dm" #include "code\__DEFINES\~~bubber_defines\research\techweb_nodes.dm" +#include "code\__DEFINES\~~~splurt_defines\hud.dm" +#include "code\__DEFINES\~~~splurt_defines\mobs.dm" +#include "code\__DEFINES\~~~splurt_defines\species_clothing_paths.dm" #include "code\__DEFINES\~~~splurt_defines\strippable.dm" #include "code\__HELPERS\_auxtools_api.dm" #include "code\__HELPERS\_lists.dm" @@ -9100,13 +9103,18 @@ #include "modular_zubbers\master_files\code\modules\research\designs\weapon_designs.dm" #include "modular_zubbers\master_files\skyrat\modules\blueshield\code\blueshield.dm" #include "modular_zubbers\master_files\skyrat\modules\cortical_borer\code\cortical_borer_antag.dm" +#include "modular_zzplurt\code\_onclick\hud\hud.dm" #include "modular_zubbers\master_files\skyrat\modules\opposing_force\code\opposing_force_subsystem.dm" #include "modular_zubbers\master_files\skyrat\modules\verbs\code\subtle.dm" #include "modular_zzplurt\code\_globalvars\mobs.dm" +#include "modular_zzplurt\code\_onclick\hud\human.dm" #include "modular_zzplurt\code\controllers\configuration\entries\discord.dm" #include "modular_zzplurt\code\controllers\subsystem\discord.dm" +#include "modular_zzplurt\code\datums\outfit.dm" +#include "modular_zzplurt\code\game\objects\items.dm" #include "modular_zzplurt\code\modules\admin\player_panel.dm" #include "modular_zzplurt\code\modules\admin\transform.dm" +#include "modular_zzplurt\code\modules\asset_cache\assets\inventory.dm" #include "modular_zzplurt\code\modules\client\client_procs.dm" #include "modular_zzplurt\code\modules\client\preferences\player_panel.dm" #include "modular_zzplurt\code\modules\client\verbs\looc.dm" @@ -9119,8 +9127,15 @@ #include "modular_zzplurt\code\modules\discord\verbs.dm" #include "modular_zzplurt\code\modules\mob\mob.dm" #include "modular_zzplurt\code\modules\mob\mob_defines.dm" +#include "modular_zzplurt\code\modules\mob\mob_update_icons.dm" #include "modular_zzplurt\code\modules\mob\dead\new_player\new_player.dm" #include "modular_zzplurt\code\modules\mob\living\living.dm" #include "modular_zzplurt\code\modules\mob\living\living_defines.dm" +#include "modular_zzplurt\code\modules\mob\living\carbon\human\human_defines.dm" #include "modular_zzplurt\code\modules\mob\living\carbon\human\human_stripping.dm" +#include "modular_zzplurt\code\modules\mob\living\carbon\human\human_update_icons.dm" +#include "modular_zzplurt\code\modules\mob\living\carbon\human\inventory.dm" +#include "modular_zzplurt\code\modules\mob\living\carbon\human\life.dm" +#include "modular_zzplurt\code\modules\mob\living\carbon\human\species.dm" +#include "modular_zzplurt\code\modules\surgery\bodyparts\parts.dm" // END_INCLUDE From 1cf56fb126437a7fe6cee0f43d39341c0bfce9ba Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Thu, 18 Jul 2024 19:05:27 -0500 Subject: [PATCH 009/117] Update tgstation.dme --- tgstation.dme | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tgstation.dme b/tgstation.dme index 0c38725b3a5f7..461afa6e52eb6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9130,16 +9130,16 @@ #include "modular_zubbers\master_files\code\modules\research\designs\weapon_designs.dm" #include "modular_zubbers\master_files\skyrat\modules\blueshield\code\blueshield.dm" #include "modular_zubbers\master_files\skyrat\modules\cortical_borer\code\cortical_borer_antag.dm" -#include "modular_zzplurt\code\_onclick\hud\hud.dm" #include "modular_zubbers\master_files\skyrat\modules\opposing_force\code\opposing_force_subsystem.dm" #include "modular_zubbers\master_files\skyrat\modules\verbs\code\subtle.dm" #include "modular_zzplurt\code\_globalvars\mobs.dm" +#include "modular_zzplurt\code\_onclick\hud\hud.dm" #include "modular_zzplurt\code\_onclick\hud\human.dm" #include "modular_zzplurt\code\controllers\configuration\entries\discord.dm" #include "modular_zzplurt\code\controllers\subsystem\discord.dm" #include "modular_zzplurt\code\datums\outfit.dm" -#include "modular_zzplurt\code\game\objects\items.dm" #include "modular_zzplurt\code\datums\components\crafting\crafting.dm" +#include "modular_zzplurt\code\game\objects\items.dm" #include "modular_zzplurt\code\game\objects\items\devices\transfer_valve.dm" #include "modular_zzplurt\code\modules\admin\player_panel.dm" #include "modular_zzplurt\code\modules\admin\playtimes.dm" @@ -9168,7 +9168,7 @@ #include "modular_zzplurt\code\modules\mob\living\carbon\human\inventory.dm" #include "modular_zzplurt\code\modules\mob\living\carbon\human\life.dm" #include "modular_zzplurt\code\modules\mob\living\carbon\human\species.dm" -#include "modular_zzplurt\code\modules\surgery\bodyparts\parts.dm" #include "modular_zzplurt\code\modules\reagents\chemistry\machinery\chem_dispenser.dm" +#include "modular_zzplurt\code\modules\surgery\bodyparts\parts.dm" #include "modular_zzplurt\code\modules\wiremod\core\integrated_circuit.dm" // END_INCLUDE From dbd545f86c3a4bd391aedfd3506357ab760b8645 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Fri, 19 Jul 2024 20:44:57 -0500 Subject: [PATCH 010/117] TG underwear parity So, this commit creates a new unit test that generates underwear objects for each of the underwear sprite accessories already in TG, this is so we can use their current underwear selection systems while using our object underwears. It still requires to edit the way underwear is handled so it's the same as the sprite accessories, though --- code/__DEFINES/~~~splurt_defines/underwear.dm | 65 ++++++++++ .../antagonists/clown_ops/bananium_bomb.dm | 2 +- code/modules/unit_tests/_unit_tests.dm | 3 + .../unit_tests/~splurt/underwear_items.dm | 61 ++++++++++ .../modules/clothing/underwear/_underwear.dm | 3 + .../underwear/{boxers.dm => briefs.dm} | 2 + .../underwear/{shirts.dm => shirt.dm} | 10 ++ .../code/modules/clothing/underwear/socks.dm | 3 + .../underwear/~generated_files/briefs.dm | 46 +++++++ .../~generated_files/briefs_edits.dm | 25 ++++ .../underwear/~generated_files/shirt.dm | 115 ++++++++++++++++++ .../underwear/~generated_files/shirt_edits.dm | 40 ++++++ .../underwear/~generated_files/socks.dm | 74 +++++++++++ .../underwear/~generated_files/socks_edits.dm | 82 +++++++++++++ .../mob/living/carbon/human/human_defines.dm | 6 +- .../living/carbon/human/human_update_icons.dm | 43 ++++++- tgstation.dme | 11 +- 17 files changed, 583 insertions(+), 8 deletions(-) create mode 100644 code/__DEFINES/~~~splurt_defines/underwear.dm create mode 100644 code/modules/unit_tests/~splurt/underwear_items.dm rename modular_zzplurt/code/modules/clothing/underwear/{boxers.dm => briefs.dm} (98%) rename modular_zzplurt/code/modules/clothing/underwear/{shirts.dm => shirt.dm} (97%) create mode 100644 modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs.dm create mode 100644 modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs_edits.dm create mode 100644 modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt.dm create mode 100644 modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt_edits.dm create mode 100644 modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm create mode 100644 modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks_edits.dm diff --git a/code/__DEFINES/~~~splurt_defines/underwear.dm b/code/__DEFINES/~~~splurt_defines/underwear.dm new file mode 100644 index 0000000000000..113c3463a6756 --- /dev/null +++ b/code/__DEFINES/~~~splurt_defines/underwear.dm @@ -0,0 +1,65 @@ +/// Create briefs from underwear sprite accessories +#define BRIEFS_FROM_SPRITE_ACCESSORY(class_name) \ +/obj/item/clothing/underwear/briefs/##class_name{\ + name = /datum/sprite_accessory/underwear/##class_name::name; \ + icon = /datum/sprite_accessory/underwear/##class_name::icon; \ + worn_icon = /datum/sprite_accessory/underwear/##class_name::icon; \ + worn_icon_digi = /datum/sprite_accessory/underwear/##class_name::icon; \ + icon_state = /datum/sprite_accessory/underwear/##class_name::icon_state; \ + gender = /datum/sprite_accessory/underwear/##class_name::gender; \ + flags_1 = /obj/item/clothing/underwear/briefs::flags_1 | (IS_PLAYER_COLORABLE_1 * !(/datum/sprite_accessory/underwear/##class_name::use_static)); \ + supports_variations_flags = /datum/sprite_accessory/underwear/##class_name::has_digitigrade * CLOTHING_DIGITIGRADE_VARIATION || CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON; \ + body_parts_covered = /obj/item/clothing/underwear/briefs::body_parts_covered | /datum/sprite_accessory/underwear/##class_name::hides_breasts * CHEST; \ +};\ +/obj/item/clothing/underwear/briefs/##class_name/Initialize(mapload){\ + if(isnull(female_sprite_flags)) {\ + female_sprite_flags = NO_FEMALE_UNIFORM;\ + } else if(female_sprite_flags == /obj/item/clothing/underwear::female_sprite_flags) {\ + female_sprite_flags = gender == MALE ? (FEMALE_UNIFORM_FULL | FEMALE_UNIFORM_DIGI_FULL) : NO_FEMALE_UNIFORM; \ + };\ + . = ..();\ +}; + +/// Create shirt from undershirt sprite accessories +#define SHIRT_FROM_SPRITE_ACCESSORY(class_name) \ +/obj/item/clothing/underwear/shirt/##class_name {\ + name = /datum/sprite_accessory/undershirt/##class_name::name; \ + icon = /datum/sprite_accessory/undershirt/##class_name::icon; \ + worn_icon = /datum/sprite_accessory/undershirt/##class_name::icon; \ + worn_icon_digi = /datum/sprite_accessory/undershirt/##class_name::icon; \ + icon_state = /datum/sprite_accessory/undershirt/##class_name::icon_state; \ + gender = /datum/sprite_accessory/undershirt/##class_name::gender; \ + flags_1 = /obj/item/clothing/underwear/shirt::flags_1 | (IS_PLAYER_COLORABLE_1 * !(/datum/sprite_accessory/undershirt/##class_name::use_static)); \ + body_parts_covered = /obj/item/clothing/underwear/shirt::body_parts_covered | GROIN * /datum/sprite_accessory/undershirt/##class_name::hides_groin; \ +};\ +/obj/item/clothing/underwear/shirt/##class_name/Initialize(mapload) {\ + if(isnull(female_sprite_flags)) {\ + female_sprite_flags = NO_FEMALE_UNIFORM;\ + } else if(female_sprite_flags == /obj/item/clothing/underwear::female_sprite_flags) {\ + female_sprite_flags = gender == MALE ? (FEMALE_UNIFORM_FULL | FEMALE_UNIFORM_DIGI_FULL) : NO_FEMALE_UNIFORM;\ + };\ + . = ..();\ +}; + +/// Create bra from bra sprite accessories +#define BRA_FROM_SPRITE_ACCESSORY(class_name) \ +/obj/item/clothing/underwear/shirt/bra/##class_name {\ + name = /datum/sprite_accessory/bra/##class_name::name; \ + icon = /datum/sprite_accessory/bra/##class_name::icon; \ + worn_icon = /datum/sprite_accessory/bra/##class_name::icon; \ + worn_icon_digi = /datum/sprite_accessory/bra/##class_name::icon; \ + icon_state = /datum/sprite_accessory/bra/##class_name::icon_state; \ + gender = /datum/sprite_accessory/bra/##class_name::gender; \ + flags_1 = /obj/item/clothing/underwear/shirt/bra::flags_1 | (IS_PLAYER_COLORABLE_1 * !(/datum/sprite_accessory/bra/##class_name::use_static)); \ +}; + +/// Create socks from socks sprite accessories +#define SOCKS_FROM_SPRITE_ACCESSORY(class_name) \ +/obj/item/clothing/underwear/socks/##class_name {\ + name = /datum/sprite_accessory/socks/##class_name::name; \ + icon = /datum/sprite_accessory/socks/##class_name::icon; \ + worn_icon = /datum/sprite_accessory/socks/##class_name::icon; \ + worn_icon_digi = /datum/sprite_accessory/socks/##class_name::icon; \ + icon_state = /datum/sprite_accessory/socks/##class_name::icon_state; \ + flags_1 = /obj/item/clothing/underwear/socks::flags_1 | (IS_PLAYER_COLORABLE_1 * !(/datum/sprite_accessory/socks/##class_name::use_static)); \ +}; diff --git a/code/modules/antagonists/clown_ops/bananium_bomb.dm b/code/modules/antagonists/clown_ops/bananium_bomb.dm index 274ace0657b88..6bea8e7faf740 100644 --- a/code/modules/antagonists/clown_ops/bananium_bomb.dm +++ b/code/modules/antagonists/clown_ops/bananium_bomb.dm @@ -58,7 +58,7 @@ // SPLURT EDIT - Extra inventory if(!clowned_on.w_shirt || clowned_on.dropItemToGround(clowned_on.w_shirt)) - var/obj/item/clothing/clown_undershirt = new /obj/item/clothing/underwear/shirt/clown(clowned_on) + var/obj/item/clothing/clown_undershirt = new /obj/item/clothing/underwear/shirt/clownshirt(clowned_on) ADD_TRAIT(clown_undershirt, TRAIT_NODROP, CLOWN_NUKE_TRAIT) clowned_on.equip_to_slot_or_del(clown_undershirt, ITEM_SLOT_SHIRT) // diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index d6917605cf59a..e74dd40a7e5ec 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -293,6 +293,9 @@ #include "~skyrat\automapper.dm" #include "~skyrat\opposing_force.dm" // SKYRAT EDIT END +// SPLURT EDIT START +#include "~splurt\underwear_items.dm" +// SPLURT EDIT END // END_INCLUDE #ifdef REFERENCE_TRACKING_DEBUG //Don't try and parse this file if ref tracking isn't turned on. IE: don't parse ref tracking please mr linter #include "find_reference_sanity.dm" diff --git a/code/modules/unit_tests/~splurt/underwear_items.dm b/code/modules/unit_tests/~splurt/underwear_items.dm new file mode 100644 index 0000000000000..e01b932db8448 --- /dev/null +++ b/code/modules/unit_tests/~splurt/underwear_items.dm @@ -0,0 +1,61 @@ +#define PATH_REGEX regex("\\/datum\\/sprite_accessory\\/(underwear|undershirt|socks|bra)\\/") + +/** + * This unit test tests underwear items in the game, and makes sure each legacy sprite item corresponds to an underwear item. + */ +/datum/unit_test/underwear_items + + var/list/sprites_to_items_names = list( + /datum/sprite_accessory/underwear = "BRIEFS", + /datum/sprite_accessory/undershirt = "SHIRT", + /datum/sprite_accessory/bra = "BRA", + /datum/sprite_accessory/socks = "SOCKS" + ) + + var/list/outputs = list( + briefs = list(), + shirt = list(), + socks = list() + ) + +/datum/unit_test/underwear_items/Run() + outputs["briefs"] = generate_objects_file(/datum/sprite_accessory/underwear) + outputs["shirt"] = generate_objects_file(/datum/sprite_accessory/undershirt) + generate_objects_file(/datum/sprite_accessory/bra, FALSE) + outputs["socks"] = generate_objects_file(/datum/sprite_accessory/socks) + + var/fail = FALSE + for(var/object_type in outputs) + var/list/lines = outputs[object_type] + var/output_file = "[lines.Join("\n")]" + rustg_file_write(output_file, "data/~generated_files/[object_type].dm") + var/current = rustg_file_read("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm") + if(current != output_file) + fail = TRUE + + if(fail) + TEST_FAIL("Underwear items generated files are out of date. Run locally by enabling unit tests, (see _compile_options.dm) and copy 'data/~generated_files' to 'modular_zzplurt/code/modules/clothing/underwear/~generated_files'") + +/datum/unit_test/underwear_items/proc/generate_objects_file(datum/sprite_accessory/sprite_type, header = TRUE) + var/clothing_name = sprites_to_items_names[sprite_type] + + var/list/output = list() + if(header) + output += "/* This file is automatically generated by the unit test. Do not edit it manually, use the [lowertext(clothing_name)]_edits.dm file instead." + output += " * Generating this file is done by running the unit test locally, see the fail message for more details." + output += " * All items corresponding to [sprite_type] should be here." + output += " */" + else + output += "/// [lowertext(clothing_name)] section" + + output += "" + + for(var/sprite in subtypesof(sprite_type)) + var/sprite_name = "[sprite]" + sprite_name = replacetext(sprite_name, PATH_REGEX, "") + output += "[clothing_name]_FROM_SPRITE_ACCESSORY([sprite_name])" + + output += "" + + return output + +#undef PATH_REGEX diff --git a/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm b/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm index 4dcb79bfe777d..71af1fbc0dbff 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm @@ -10,6 +10,9 @@ w_class = WEIGHT_CLASS_SMALL + // Adding support for female sprites + var/female_sprite_flags = NO_FEMALE_UNIFORM + /obj/item/clothing/underwear/Move() ..() setDir(SOUTH) //should prevent underwear from facing any direction but south while on the floor, uses same code as pipes, PLEASE, THIS IS A BAD SOLUTION, SOMEONE MAKE ME UNDERWEAR SPRITES ASAP diff --git a/modular_zzplurt/code/modules/clothing/underwear/boxers.dm b/modular_zzplurt/code/modules/clothing/underwear/briefs.dm similarity index 98% rename from modular_zzplurt/code/modules/clothing/underwear/boxers.dm rename to modular_zzplurt/code/modules/clothing/underwear/briefs.dm index 7214f1a38eff6..5ed762e93f6ee 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/boxers.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/briefs.dm @@ -7,6 +7,7 @@ // please make sure they're sorted alphabetically and categorized, above is the only exception +/* Old briefs objects, already handled by the sprite accessories /obj/item/clothing/underwear/briefs/boxer_briefs //this typepath jesus name = "boxer briefs" icon_state = "boxer_briefs" @@ -123,3 +124,4 @@ name = "usa panties" desc = "Not nearly as free as not wearing any." icon_state = "panties_assblastusa" +*/ diff --git a/modular_zzplurt/code/modules/clothing/underwear/shirts.dm b/modular_zzplurt/code/modules/clothing/underwear/shirt.dm similarity index 97% rename from modular_zzplurt/code/modules/clothing/underwear/shirts.dm rename to modular_zzplurt/code/modules/clothing/underwear/shirt.dm index 731b780485c68..b14975d16cccc 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/shirts.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/shirt.dm @@ -4,9 +4,18 @@ icon_state = "undershirt" body_parts_covered = CHEST | ARMS slot_flags = ITEM_SLOT_SHIRT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/underwear/shirt/bra + name = "bra" + desc = "A bra." + icon_state = "bra" + body_parts_covered = CHEST + female_sprite_flags = NO_FEMALE_UNIFORM // please make sure they're sorted alphabetically and categorized, above is the only exception +/* Old shirt objects, already handled by the sprite accessories /obj/item/clothing/underwear/shirt/alien name = "alien shirt" desc = "I regret nothing." @@ -356,3 +365,4 @@ name = "usa shirt" desc = "Freedom and obesity." icon_state = "undershirt_assblastusa" +*/ diff --git a/modular_zzplurt/code/modules/clothing/underwear/socks.dm b/modular_zzplurt/code/modules/clothing/underwear/socks.dm index c121cf2f2e277..d06a110cbd004 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/socks.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/socks.dm @@ -4,9 +4,11 @@ icon_state = "socks" body_parts_covered = FEET slot_flags = ITEM_SLOT_SOCKS + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION // please make sure they're sorted alphabetically and categorized, above is the only exception +/* Old socks items, already handled by sprite accessories /obj/item/clothing/underwear/socks/bee name = "bee socks" icon_state = "socks_bee" @@ -244,3 +246,4 @@ name = "thigh-high rainbow stirrups" icon_state = "rainbow_thigh-stir" polychromic = FALSE +*/ diff --git a/modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs.dm b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs.dm new file mode 100644 index 0000000000000..db8160c2bb322 --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs.dm @@ -0,0 +1,46 @@ +/* This file is automatically generated by the unit test. Do not edit it manually, use the briefs_edits.dm file instead. + * Generating this file is done by running the unit test locally, see the fail message for more details. + * All items corresponding to /datum/sprite_accessory/underwear should be here. + */ + +BRIEFS_FROM_SPRITE_ACCESSORY(nude) +BRIEFS_FROM_SPRITE_ACCESSORY(male_briefs) +BRIEFS_FROM_SPRITE_ACCESSORY(male_boxers) +BRIEFS_FROM_SPRITE_ACCESSORY(male_stripe) +BRIEFS_FROM_SPRITE_ACCESSORY(male_midway) +BRIEFS_FROM_SPRITE_ACCESSORY(male_longjohns) +BRIEFS_FROM_SPRITE_ACCESSORY(male_kinky) +BRIEFS_FROM_SPRITE_ACCESSORY(male_mankini) +BRIEFS_FROM_SPRITE_ACCESSORY(male_hearts) +BRIEFS_FROM_SPRITE_ACCESSORY(male_commie) +BRIEFS_FROM_SPRITE_ACCESSORY(male_usastripe) +BRIEFS_FROM_SPRITE_ACCESSORY(male_uk) +BRIEFS_FROM_SPRITE_ACCESSORY(male_bee) +BRIEFS_FROM_SPRITE_ACCESSORY(panties_basic) +BRIEFS_FROM_SPRITE_ACCESSORY(female_beekini) +BRIEFS_FROM_SPRITE_ACCESSORY(fishnet_lower) +BRIEFS_FROM_SPRITE_ACCESSORY(fishnet_lower/alt) +BRIEFS_FROM_SPRITE_ACCESSORY(female_commie) +BRIEFS_FROM_SPRITE_ACCESSORY(female_usastripe) +BRIEFS_FROM_SPRITE_ACCESSORY(female_kinky) +BRIEFS_FROM_SPRITE_ACCESSORY(panties_uk) +BRIEFS_FROM_SPRITE_ACCESSORY(panties_neko) +BRIEFS_FROM_SPRITE_ACCESSORY(panties_slim) +BRIEFS_FROM_SPRITE_ACCESSORY(striped_panties) +BRIEFS_FROM_SPRITE_ACCESSORY(panties_swimsuit) +BRIEFS_FROM_SPRITE_ACCESSORY(panties_thin) +BRIEFS_FROM_SPRITE_ACCESSORY(swimsuit_red) +BRIEFS_FROM_SPRITE_ACCESSORY(swimsuit) +BRIEFS_FROM_SPRITE_ACCESSORY(swimsuit_blue) +BRIEFS_FROM_SPRITE_ACCESSORY(thong) +BRIEFS_FROM_SPRITE_ACCESSORY(thong_babydoll) +BRIEFS_FROM_SPRITE_ACCESSORY(chastbelt) +BRIEFS_FROM_SPRITE_ACCESSORY(chastcage) +BRIEFS_FROM_SPRITE_ACCESSORY(latex) +BRIEFS_FROM_SPRITE_ACCESSORY(lizared) +BRIEFS_FROM_SPRITE_ACCESSORY(boyshorts) +BRIEFS_FROM_SPRITE_ACCESSORY(boyshorts_alt) +BRIEFS_FROM_SPRITE_ACCESSORY(swimsuit_onepiece) +BRIEFS_FROM_SPRITE_ACCESSORY(swimsuit_strapless_onepiece) +BRIEFS_FROM_SPRITE_ACCESSORY(swimsuit_stripe) +BRIEFS_FROM_SPRITE_ACCESSORY(cowprint) diff --git a/modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs_edits.dm b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs_edits.dm new file mode 100644 index 0000000000000..9e4fa6afcce8c --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs_edits.dm @@ -0,0 +1,25 @@ +// Use this file to edit any of the items generated in briefs.dm + +/obj/item/clothing/underwear/briefs/male_bee + desc = "It's hip to..." + +/obj/item/clothing/underwear/briefs/male_commie + desc = "Seize the means of reproduction." + +/obj/item/clothing/underwear/briefs/male_uk + desc = "You got a loicense for that dong?" + +/obj/item/clothing/underwear/briefs/male_usastripe + desc = "Not as free as going commando." + +/obj/item/clothing/underwear/briefs/female_commie + desc = "Seize the means of reproduction." + +/obj/item/clothing/underwear/briefs/panties_uk + desc = "Insert loicense joke here." + +/obj/item/clothing/underwear/briefs/panties_neko + desc = "Favored by cat \"girls\"." + +/obj/item/clothing/underwear/briefs/female_usastripe + desc = "Not nearly as free as not wearing any." diff --git a/modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt.dm b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt.dm new file mode 100644 index 0000000000000..d441eb5a0dee0 --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt.dm @@ -0,0 +1,115 @@ +/* This file is automatically generated by the unit test. Do not edit it manually, use the shirt_edits.dm file instead. + * Generating this file is done by running the unit test locally, see the fail message for more details. + * All items corresponding to /datum/sprite_accessory/undershirt should be here. + */ + +SHIRT_FROM_SPRITE_ACCESSORY(nude) +SHIRT_FROM_SPRITE_ACCESSORY(bluejersey) +SHIRT_FROM_SPRITE_ACCESSORY(redjersey) +SHIRT_FROM_SPRITE_ACCESSORY(bluepolo) +SHIRT_FROM_SPRITE_ACCESSORY(grayyellowpolo) +SHIRT_FROM_SPRITE_ACCESSORY(redpolo) +SHIRT_FROM_SPRITE_ACCESSORY(whitepolo) +SHIRT_FROM_SPRITE_ACCESSORY(alienshirt) +SHIRT_FROM_SPRITE_ACCESSORY(mondmondjaja) +SHIRT_FROM_SPRITE_ACCESSORY(shirt_black) +SHIRT_FROM_SPRITE_ACCESSORY(blueshirt) +SHIRT_FROM_SPRITE_ACCESSORY(clownshirt) +SHIRT_FROM_SPRITE_ACCESSORY(commie) +SHIRT_FROM_SPRITE_ACCESSORY(greenshirt) +SHIRT_FROM_SPRITE_ACCESSORY(shirt_grey) +SHIRT_FROM_SPRITE_ACCESSORY(ian) +SHIRT_FROM_SPRITE_ACCESSORY(ilovent) +SHIRT_FROM_SPRITE_ACCESSORY(lover) +SHIRT_FROM_SPRITE_ACCESSORY(matroska) +SHIRT_FROM_SPRITE_ACCESSORY(meat) +SHIRT_FROM_SPRITE_ACCESSORY(nano) +SHIRT_FROM_SPRITE_ACCESSORY(peace) +SHIRT_FROM_SPRITE_ACCESSORY(pacman) +SHIRT_FROM_SPRITE_ACCESSORY(question) +SHIRT_FROM_SPRITE_ACCESSORY(redshirt) +SHIRT_FROM_SPRITE_ACCESSORY(skull) +SHIRT_FROM_SPRITE_ACCESSORY(ss13) +SHIRT_FROM_SPRITE_ACCESSORY(stripe) +SHIRT_FROM_SPRITE_ACCESSORY(tiedye) +SHIRT_FROM_SPRITE_ACCESSORY(uk) +SHIRT_FROM_SPRITE_ACCESSORY(usa) +SHIRT_FROM_SPRITE_ACCESSORY(shirt_white) +SHIRT_FROM_SPRITE_ACCESSORY(blackshortsleeve) +SHIRT_FROM_SPRITE_ACCESSORY(blueshortsleeve) +SHIRT_FROM_SPRITE_ACCESSORY(greenshortsleeve) +SHIRT_FROM_SPRITE_ACCESSORY(purpleshortsleeve) +SHIRT_FROM_SPRITE_ACCESSORY(whiteshortsleeve) +SHIRT_FROM_SPRITE_ACCESSORY(blueshirtsport) +SHIRT_FROM_SPRITE_ACCESSORY(greenshirtsport) +SHIRT_FROM_SPRITE_ACCESSORY(redshirtsport) +SHIRT_FROM_SPRITE_ACCESSORY(tank_black) +SHIRT_FROM_SPRITE_ACCESSORY(tankfire) +SHIRT_FROM_SPRITE_ACCESSORY(tank_grey) +SHIRT_FROM_SPRITE_ACCESSORY(female_midriff) +SHIRT_FROM_SPRITE_ACCESSORY(tank_red) +SHIRT_FROM_SPRITE_ACCESSORY(tankstripe) +SHIRT_FROM_SPRITE_ACCESSORY(tank_white) +SHIRT_FROM_SPRITE_ACCESSORY(redtop) +SHIRT_FROM_SPRITE_ACCESSORY(whitetop) +SHIRT_FROM_SPRITE_ACCESSORY(tshirt_blue) +SHIRT_FROM_SPRITE_ACCESSORY(tshirt_green) +SHIRT_FROM_SPRITE_ACCESSORY(tshirt_red) +SHIRT_FROM_SPRITE_ACCESSORY(yellowshirt) +SHIRT_FROM_SPRITE_ACCESSORY(lizared) +SHIRT_FROM_SPRITE_ACCESSORY(tanktop_alt) +SHIRT_FROM_SPRITE_ACCESSORY(tanktop_midriff) +SHIRT_FROM_SPRITE_ACCESSORY(tanktop_midriff_alt) +SHIRT_FROM_SPRITE_ACCESSORY(tank_top_sun) +SHIRT_FROM_SPRITE_ACCESSORY(babydoll) +SHIRT_FROM_SPRITE_ACCESSORY(corset) +SHIRT_FROM_SPRITE_ACCESSORY(bulletclub) +SHIRT_FROM_SPRITE_ACCESSORY(striped) +SHIRT_FROM_SPRITE_ACCESSORY(striped/blue) +SHIRT_FROM_SPRITE_ACCESSORY(turtleneck) +SHIRT_FROM_SPRITE_ACCESSORY(turtleneck/smooth) +SHIRT_FROM_SPRITE_ACCESSORY(turtleneck/sleeveless) +SHIRT_FROM_SPRITE_ACCESSORY(offshoulder) +SHIRT_FROM_SPRITE_ACCESSORY(buttondown) +SHIRT_FROM_SPRITE_ACCESSORY(buttondown/short_sleeve) +SHIRT_FROM_SPRITE_ACCESSORY(leotard) +SHIRT_FROM_SPRITE_ACCESSORY(leotard/turtleneck) +SHIRT_FROM_SPRITE_ACCESSORY(leotard/turtleneck/sleeveless) +SHIRT_FROM_SPRITE_ACCESSORY(dogborgshirt) + +/// bra section + +BRA_FROM_SPRITE_ACCESSORY(nude) +BRA_FROM_SPRITE_ACCESSORY(bra) +BRA_FROM_SPRITE_ACCESSORY(bra_alt) +BRA_FROM_SPRITE_ACCESSORY(bra_thin) +BRA_FROM_SPRITE_ACCESSORY(bra_kinky) +BRA_FROM_SPRITE_ACCESSORY(bra_freedom) +BRA_FROM_SPRITE_ACCESSORY(bra_commie) +BRA_FROM_SPRITE_ACCESSORY(bra_beekini) +BRA_FROM_SPRITE_ACCESSORY(bra_uk) +BRA_FROM_SPRITE_ACCESSORY(bra_neko) +BRA_FROM_SPRITE_ACCESSORY(hi_vis_bra) +BRA_FROM_SPRITE_ACCESSORY(halterneck_bra) +BRA_FROM_SPRITE_ACCESSORY(halterneck_alt) +BRA_FROM_SPRITE_ACCESSORY(sports_bra) +BRA_FROM_SPRITE_ACCESSORY(sports_bra_alt) +BRA_FROM_SPRITE_ACCESSORY(bra_strapless) +BRA_FROM_SPRITE_ACCESSORY(bra_latex) +BRA_FROM_SPRITE_ACCESSORY(striped_bra) +BRA_FROM_SPRITE_ACCESSORY(sarashi) +BRA_FROM_SPRITE_ACCESSORY(fishnet_sleeves) +BRA_FROM_SPRITE_ACCESSORY(fishnet_sleeves/alt) +BRA_FROM_SPRITE_ACCESSORY(fishnet_base) +BRA_FROM_SPRITE_ACCESSORY(fishnet_base/alt) +BRA_FROM_SPRITE_ACCESSORY(chastbra) +BRA_FROM_SPRITE_ACCESSORY(pasties) +BRA_FROM_SPRITE_ACCESSORY(pasties_alt) +BRA_FROM_SPRITE_ACCESSORY(shibari) +BRA_FROM_SPRITE_ACCESSORY(shibari_sleeves) +BRA_FROM_SPRITE_ACCESSORY(swimsuit) +BRA_FROM_SPRITE_ACCESSORY(strapless_swimsuit) +BRA_FROM_SPRITE_ACCESSORY(strapless_swimsuit_alt) +BRA_FROM_SPRITE_ACCESSORY(binder) +BRA_FROM_SPRITE_ACCESSORY(binder/strapless) +BRA_FROM_SPRITE_ACCESSORY(cowprint) diff --git a/modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt_edits.dm b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt_edits.dm new file mode 100644 index 0000000000000..8d6a841ea56c2 --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt_edits.dm @@ -0,0 +1,40 @@ +// Use this file to edit any of the shirts generated in shirt.dm + +/obj/item/clothing/underwear/shirt/alienshirt + desc = "I regret nothing." + +/obj/item/clothing/underwear/shirt/bee + desc = "Bee yourself!" + +/obj/item/clothing/underwear/shirt/clownshirt + desc = "HONK!" + +/obj/item/clothing/underwear/shirt/ilovent + desc = "\"I love NT\" shirt." + +/obj/item/clothing/underwear/shirt/uk + desc = "I'm running out of UK jokes." + +/obj/item/clothing/underwear/shirt/usa + desc = "Freedom and obesity." + +/obj/item/clothing/underwear/shirt/bra/babydoll + desc = "A babydoll." + +/obj/item/clothing/underwear/shirt/bra/bra_beekini + desc = "Buzz buzz." + +/obj/item/clothing/underwear/shirt/bra/bra_commie + desc = "Seize the mammaries of production." + +/obj/item/clothing/underwear/shirt/bra/bra_kinky + desc = "Kinky." + +/obj/item/clothing/underwear/shirt/bra/bra_neko + desc = "Favored by cat \"girls\"." + +/obj/item/clothing/underwear/shirt/bra/bra_uk + desc = "You got a loicense for those tiddies?" + +/obj/item/clothing/underwear/shirt/bra/bra_freedom + desc = "Not nearly as free as letting them bounce." diff --git a/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm new file mode 100644 index 0000000000000..160b23e0e0c88 --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm @@ -0,0 +1,74 @@ +/* This file is automatically generated by the unit test. Do not edit it manually, use the socks_edits.dm file instead. + * Generating this file is done by running the unit test locally, see the fail message for more details. + * All items corresponding to /datum/sprite_accessory/socks should be here. + */ + +SOCKS_FROM_SPRITE_ACCESSORY(nude) +SOCKS_FROM_SPRITE_ACCESSORY(ace_knee) +SOCKS_FROM_SPRITE_ACCESSORY(bee_knee) +SOCKS_FROM_SPRITE_ACCESSORY(black_knee) +SOCKS_FROM_SPRITE_ACCESSORY(commie_knee) +SOCKS_FROM_SPRITE_ACCESSORY(usa_knee) +SOCKS_FROM_SPRITE_ACCESSORY(rainbow_knee) +SOCKS_FROM_SPRITE_ACCESSORY(rainbow_knee/stirrups) +SOCKS_FROM_SPRITE_ACCESSORY(striped_knee) +SOCKS_FROM_SPRITE_ACCESSORY(thin_knee) +SOCKS_FROM_SPRITE_ACCESSORY(trans_knee) +SOCKS_FROM_SPRITE_ACCESSORY(uk_knee) +SOCKS_FROM_SPRITE_ACCESSORY(white_knee) +SOCKS_FROM_SPRITE_ACCESSORY(fishnet_knee) +SOCKS_FROM_SPRITE_ACCESSORY(black_norm) +SOCKS_FROM_SPRITE_ACCESSORY(white_norm) +SOCKS_FROM_SPRITE_ACCESSORY(pantyhose) +SOCKS_FROM_SPRITE_ACCESSORY(pantyhose/stirrups) +SOCKS_FROM_SPRITE_ACCESSORY(black_short) +SOCKS_FROM_SPRITE_ACCESSORY(white_short) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_blue) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_cyan) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_dpink) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_green) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_orange) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_programmer) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_purple) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_yellow) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_fishnet) +SOCKS_FROM_SPRITE_ACCESSORY(ace_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(bee_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(black_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(commie_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(usa_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(rainbow_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(rainbow_thigh/stirrups) +SOCKS_FROM_SPRITE_ACCESSORY(striped_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(striped_thigh/stirrups) +SOCKS_FROM_SPRITE_ACCESSORY(thin_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(trans_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(uk_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(white_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(fishnet_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(fishnet_thigh/alt) +SOCKS_FROM_SPRITE_ACCESSORY(thocks) +SOCKS_FROM_SPRITE_ACCESSORY(socks_norm) +SOCKS_FROM_SPRITE_ACCESSORY(stirrups_norm) +SOCKS_FROM_SPRITE_ACCESSORY(socks_short) +SOCKS_FROM_SPRITE_ACCESSORY(socks_knee) +SOCKS_FROM_SPRITE_ACCESSORY(stirrups_knee) +SOCKS_FROM_SPRITE_ACCESSORY(socks_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(stirrups_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(leggings) +SOCKS_FROM_SPRITE_ACCESSORY(leggings/stirrups) +SOCKS_FROM_SPRITE_ACCESSORY(leggings/stirrups/gym) +SOCKS_FROM_SPRITE_ACCESSORY(leggings/latex) +SOCKS_FROM_SPRITE_ACCESSORY(christmas_norm) +SOCKS_FROM_SPRITE_ACCESSORY(candycaner_norm) +SOCKS_FROM_SPRITE_ACCESSORY(candycaneg_norm) +SOCKS_FROM_SPRITE_ACCESSORY(christmas_knee) +SOCKS_FROM_SPRITE_ACCESSORY(candycaner_knee) +SOCKS_FROM_SPRITE_ACCESSORY(candycaneg_knee) +SOCKS_FROM_SPRITE_ACCESSORY(christmas_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(candycaner_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(candycaneg_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(fishnet_thigh_sr) +SOCKS_FROM_SPRITE_ACCESSORY(pantyhose_ripped) +SOCKS_FROM_SPRITE_ACCESSORY(pantyhose_ripped/stirrups) +SOCKS_FROM_SPRITE_ACCESSORY(stockings_ripped) diff --git a/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks_edits.dm b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks_edits.dm new file mode 100644 index 0000000000000..487c6815314d8 --- /dev/null +++ b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks_edits.dm @@ -0,0 +1,82 @@ +// Use this file to edit any of the socks generated in socks.dm + +/obj/item/clothing/underwear/socks/bee_knee + desc = "You like jazz?" + +/obj/item/clothing/underwear/socks/candycaner_norm + desc = "Jingle bell." + +/obj/item/clothing/underwear/socks/candycaneg_norm + desc = "Jingle bell." + +/obj/item/clothing/underwear/socks/christmas_norm + desc = "Jingle bell." + +/obj/item/clothing/underwear/socks/commie_knee + desc = "Karl Marx or something." + +/obj/item/clothing/underwear/socks/usa_knee + desc = "I'm running out of america jokes." + +/obj/item/clothing/underwear/socks/uk_knee + desc = "Brexit or something." + +/obj/item/clothing/underwear/socks/leggings/latex + desc = "A pair of latex socks." + +/obj/item/clothing/underwear/socks/pantyhose + desc = "Pantyhose." + +/obj/item/clothing/underwear/socks/bee_thigh + desc = "Bee socks." + +/obj/item/clothing/underwear/socks/candycaner_thigh + desc = "Santa claus or something." + +/obj/item/clothing/underwear/socks/candycaneg_thigh + desc = "Santa claus or something." + +/obj/item/clothing/underwear/socks/christmas_thigh + desc = "Santa claus or something." + +/obj/item/clothing/underwear/socks/commie_thigh + desc = "Something something the USSR." + +/obj/item/clothing/underwear/socks/stockings_programmer + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/stockings_blue + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/stockings_cyan + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/stockings_fishnet + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/stockings_green + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/stockings_orange + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/stockings_dpink + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/stockings_purple + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/stockings_yellow + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/thin_thigh + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/striped_thigh + desc = "A pair of stockings." + +/obj/item/clothing/underwear/socks/uk_thigh + desc = "Something something british people have bad teeth." + +/obj/item/clothing/underwear/socks/usa_thigh + desc = "McDonald's or something." 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 6c45a10a5d1f9..a0d6213c147c0 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 @@ -1,8 +1,8 @@ /mob/living/carbon/human //Extra inventory - var/obj/item/w_underwear = null - var/obj/item/w_socks = null - var/obj/item/w_shirt = null + 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/ears_extra = null var/obj/item/wrists = null // 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 8cf577a8a41d1..0770c0d94a4a0 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 @@ -32,14 +32,30 @@ var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' var/handled_by_bodyshape = TRUE var/digi + var/woman + var/female_sprite_flags = w_underwear.female_sprite_flags var/mutant_styles = NONE if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undies.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) icon_file = undies.worn_icon_digi || DIGITIGRADE_UNDERWEAR_FILE digi = TRUE + // Edit for legacy sprites + if(undies.worn_icon_digi == undies.worn_icon) + target_overlay += "_d" + else if(bodyshape & BODYSHAPE_CUSTOM) icon_file = dna.species.generate_custom_worn_icon(OFFSET_UNDERWEAR, w_underwear, 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 @@ -51,6 +67,7 @@ default_layer = UNDERWEAR_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, @@ -85,14 +102,30 @@ var/icon_file = 'modular_zzplurt/icons/mob/clothing/underwear.dmi' var/handled_by_bodyshape = TRUE var/digi + var/woman + var/female_sprite_flags = w_shirt.female_sprite_flags var/mutant_styles = NONE if((bodyshape & BODYSHAPE_DIGITIGRADE) && (undershirt.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) icon_file = undershirt.worn_icon_digi || DIGITIGRADE_SHIRT_FILE digi = TRUE + // Edit for legacy sprites + if(undershirt.worn_icon_digi == undershirt.worn_icon) + target_overlay += "_d" + else if(bodyshape & BODYSHAPE_CUSTOM) icon_file = dna.species.generate_custom_worn_icon(OFFSET_SHIRT, w_shirt, 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 @@ -104,6 +137,7 @@ default_layer = SHIRT_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, @@ -200,8 +234,8 @@ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SOCKS) + 1] inv.update_icon() - if(w_socks) - var/obj/item/worn_item = w_socks + if(istype(w_socks, /obj/item/clothing/underwear/socks)) + var/obj/item/clothing/underwear/socks/worn_item = w_socks update_hud_socks(worn_item) if(update_obscured) @@ -210,6 +244,7 @@ if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SOCKS) return + var/target_overlay = worn_item.icon_state var/icon_file = DEFAULT_SOCKS_FILE // SKYRAT EDIT ADDITION START @@ -220,6 +255,10 @@ if(leg.limb_id == "digitigrade" || leg.bodyshape & BODYSHAPE_DIGITIGRADE)//Snowflakey and bad. But it makes it look consistent. icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SOCKS_FILE // SKYRAT EDIT CHANGE mutant_override = TRUE // SKYRAT EDIT ADDITION + + // Edit for legacy sprites + if(worn_item.worn_icon_digi == worn_item.worn_icon) + target_overlay += "_d" if(!mutant_override && bodyshape & BODYSHAPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(OFFSET_SOCKS, w_socks, src) if(species_icon_file) diff --git a/tgstation.dme b/tgstation.dme index 461afa6e52eb6..eaeff37111040 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -512,6 +512,7 @@ #include "code\__DEFINES\~~~splurt_defines\mobs.dm" #include "code\__DEFINES\~~~splurt_defines\species_clothing_paths.dm" #include "code\__DEFINES\~~~splurt_defines\strippable.dm" +#include "code\__DEFINES\~~~splurt_defines\underwear.dm" #include "code\__HELPERS\_auxtools_api.dm" #include "code\__HELPERS\_lists.dm" #include "code\__HELPERS\_planes.dm" @@ -9151,9 +9152,15 @@ #include "modular_zzplurt\code\modules\client\verbs\looc.dm" #include "modular_zzplurt\code\modules\client\verbs\ooc.dm" #include "modular_zzplurt\code\modules\clothing\underwear\_underwear.dm" -#include "modular_zzplurt\code\modules\clothing\underwear\boxers.dm" -#include "modular_zzplurt\code\modules\clothing\underwear\shirts.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\briefs.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\shirt.dm" #include "modular_zzplurt\code\modules\clothing\underwear\socks.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\~generated_files\briefs.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\~generated_files\briefs_edits.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\~generated_files\shirt.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\~generated_files\shirt_edits.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\~generated_files\socks.dm" +#include "modular_zzplurt\code\modules\clothing\underwear\~generated_files\socks_edits.dm" #include "modular_zzplurt\code\modules\discord\tgs_commands.dm" #include "modular_zzplurt\code\modules\discord\verbs.dm" #include "modular_zzplurt\code\modules\mob\mob.dm" From d7e662326b61851d6e4ad49c934e5718838c3701 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Fri, 19 Jul 2024 20:46:03 -0500 Subject: [PATCH 011/117] Update tgstation.dme --- tgstation.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tgstation.dme b/tgstation.dme index 1dcd5a2f3d9a1..383f98e7987d4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8641,7 +8641,6 @@ #include "modular_zubbers\code\game\turfs\open\openspace.dm" #include "modular_zubbers\code\game\turfs\open\sand.dm" #include "modular_zubbers\code\modules\_defines.dm" -#include "modular_zubbers\code\modules\autolathe_components_adv/advpartdisks.dm" #include "modular_zubbers\code\modules\admin\verbs\debug.dm" #include "modular_zubbers\code\modules\alternative_job_titles\code\alt_job_titles.dm" #include "modular_zubbers\code\modules\antagonists\modglue.dm" @@ -8715,6 +8714,7 @@ #include "modular_zubbers\code\modules\ashwalkers\code\effects\ash_rituals.dm" #include "modular_zubbers\code\modules\atmospherics\gasmixtures\gas_types.dm" #include "modular_zubbers\code\modules\atmospherics\machinery\portable\canister.dm" +#include "modular_zubbers\code\modules\autolathe_components_adv\advpartdisks.dm" #include "modular_zubbers\code\modules\automapper\code\area_spawn_entries.dm" #include "modular_zubbers\code\modules\automapper\code\overrides\area_spawn_subsystem.dm" #include "modular_zubbers\code\modules\bitrunning\disks.dm" From d4fe3c599507eecb7d7cdba790b52e16ff769229 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sat, 20 Jul 2024 13:31:50 -0300 Subject: [PATCH 012/117] push --- code/modules/unit_tests/outfit_sanity.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm index 36fc4570540f4..07ea54b3b22df 100644 --- a/code/modules/unit_tests/outfit_sanity.dm +++ b/code/modules/unit_tests/outfit_sanity.dm @@ -66,7 +66,7 @@ CHECK_OUTFIT_SLOT(head, ITEM_SLOT_HEAD) CHECK_OUTFIT_SLOT(mask, ITEM_SLOT_MASK) CHECK_OUTFIT_SLOT(neck, ITEM_SLOT_NECK) - CHECK_OUTFIT_SLOT(ears, ITEM_SLOT_EARS) + CHECK_OUTFIT_SLOT(ears, ITEM_SLOT_EARS_LEFT) CHECK_OUTFIT_SLOT(glasses, ITEM_SLOT_EYES) CHECK_OUTFIT_SLOT(back, ITEM_SLOT_BACK) CHECK_OUTFIT_SLOT(id, ITEM_SLOT_ID) From 8bb688f4b7f5e33f069d6b73a07f6a21cd29a8db Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sun, 21 Jul 2024 01:08:05 -0500 Subject: [PATCH 013/117] unix fixes apparently the test fails because unix doesn't like rustg file procs. I'll still keep it for windows just because I can. --- code/modules/unit_tests/~splurt/underwear_items.dm | 3 ++- tools/ticked_file_enforcement/ticked_file_enforcement.py | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/code/modules/unit_tests/~splurt/underwear_items.dm b/code/modules/unit_tests/~splurt/underwear_items.dm index e01b932db8448..4da7ded1a0d9b 100644 --- a/code/modules/unit_tests/~splurt/underwear_items.dm +++ b/code/modules/unit_tests/~splurt/underwear_items.dm @@ -28,8 +28,9 @@ var/list/lines = outputs[object_type] var/output_file = "[lines.Join("\n")]" rustg_file_write(output_file, "data/~generated_files/[object_type].dm") - var/current = rustg_file_read("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm") + var/current = world.system_type == UNIX ? file2text("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm") : rustg_file_read("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm") //Apparently unix doesn't like rustg file procs if(current != output_file) + log("[object_type] is out of date.") fail = TRUE if(fail) diff --git a/tools/ticked_file_enforcement/ticked_file_enforcement.py b/tools/ticked_file_enforcement/ticked_file_enforcement.py index 758dfb491b06b..70c28f4647291 100644 --- a/tools/ticked_file_enforcement/ticked_file_enforcement.py +++ b/tools/ticked_file_enforcement/ticked_file_enforcement.py @@ -61,6 +61,10 @@ def post_error(string): elif line == "// SKYRAT EDIT END": continue # SKYRAT EDIT END + # SPLURT EDIT START - Modular unit tests + elif line == "// SPLURT EDIT START" or line == "// SPLURT EDIT END": + continue + # SPLURT EDIT END lines.append(line) @@ -88,6 +92,10 @@ def post_error(string): if("~skyrat/" in code_file): dm_path = "~skyrat\\" + dm_path # SKYRAT EDIT END + # SPLURT EDIT START - Modular unit tests - guess + if("~splurt/" in code_file): + dm_path = "~splurt\\" + dm_path + # SPLURT EDIT END included = f"#include \"{dm_path}\"" in lines From 6bc292e8c1aa7e1c211e8b3078e0f1c4cf0a349e Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sun, 21 Jul 2024 01:39:10 -0500 Subject: [PATCH 014/117] fixes the errors --- code/__DEFINES/~~~splurt_defines/underwear.dm | 44 +++++++++---------- .../unit_tests/~splurt/underwear_items.dm | 4 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/code/__DEFINES/~~~splurt_defines/underwear.dm b/code/__DEFINES/~~~splurt_defines/underwear.dm index 113c3463a6756..5459129a4b1c0 100644 --- a/code/__DEFINES/~~~splurt_defines/underwear.dm +++ b/code/__DEFINES/~~~splurt_defines/underwear.dm @@ -23,43 +23,43 @@ /// Create shirt from undershirt sprite accessories #define SHIRT_FROM_SPRITE_ACCESSORY(class_name) \ /obj/item/clothing/underwear/shirt/##class_name {\ - name = /datum/sprite_accessory/undershirt/##class_name::name; \ - icon = /datum/sprite_accessory/undershirt/##class_name::icon; \ - worn_icon = /datum/sprite_accessory/undershirt/##class_name::icon; \ - worn_icon_digi = /datum/sprite_accessory/undershirt/##class_name::icon; \ - icon_state = /datum/sprite_accessory/undershirt/##class_name::icon_state; \ - gender = /datum/sprite_accessory/undershirt/##class_name::gender; \ + name = /datum/sprite_accessory/undershirt/##class_name::name; \ + icon = /datum/sprite_accessory/undershirt/##class_name::icon; \ + worn_icon = /datum/sprite_accessory/undershirt/##class_name::icon; \ + worn_icon_digi = /datum/sprite_accessory/undershirt/##class_name::icon; \ + icon_state = /datum/sprite_accessory/undershirt/##class_name::icon_state; \ + gender = /datum/sprite_accessory/undershirt/##class_name::gender; \ flags_1 = /obj/item/clothing/underwear/shirt::flags_1 | (IS_PLAYER_COLORABLE_1 * !(/datum/sprite_accessory/undershirt/##class_name::use_static)); \ - body_parts_covered = /obj/item/clothing/underwear/shirt::body_parts_covered | GROIN * /datum/sprite_accessory/undershirt/##class_name::hides_groin; \ + body_parts_covered = /obj/item/clothing/underwear/shirt::body_parts_covered | GROIN * /datum/sprite_accessory/undershirt/##class_name::hides_groin; \ };\ /obj/item/clothing/underwear/shirt/##class_name/Initialize(mapload) {\ if(isnull(female_sprite_flags)) {\ - female_sprite_flags = NO_FEMALE_UNIFORM;\ - } else if(female_sprite_flags == /obj/item/clothing/underwear::female_sprite_flags) {\ - female_sprite_flags = gender == MALE ? (FEMALE_UNIFORM_FULL | FEMALE_UNIFORM_DIGI_FULL) : NO_FEMALE_UNIFORM;\ - };\ - . = ..();\ + female_sprite_flags = NO_FEMALE_UNIFORM;\ + } else if(female_sprite_flags == /obj/item/clothing/underwear::female_sprite_flags) {\ + female_sprite_flags = gender == MALE ? (FEMALE_UNIFORM_FULL | FEMALE_UNIFORM_DIGI_FULL) : NO_FEMALE_UNIFORM;\ + };\ + . = ..();\ }; /// Create bra from bra sprite accessories #define BRA_FROM_SPRITE_ACCESSORY(class_name) \ /obj/item/clothing/underwear/shirt/bra/##class_name {\ - name = /datum/sprite_accessory/bra/##class_name::name; \ - icon = /datum/sprite_accessory/bra/##class_name::icon; \ - worn_icon = /datum/sprite_accessory/bra/##class_name::icon; \ + name = /datum/sprite_accessory/bra/##class_name::name; \ + icon = /datum/sprite_accessory/bra/##class_name::icon; \ + worn_icon = /datum/sprite_accessory/bra/##class_name::icon; \ worn_icon_digi = /datum/sprite_accessory/bra/##class_name::icon; \ - icon_state = /datum/sprite_accessory/bra/##class_name::icon_state; \ - gender = /datum/sprite_accessory/bra/##class_name::gender; \ + icon_state = /datum/sprite_accessory/bra/##class_name::icon_state; \ + gender = /datum/sprite_accessory/bra/##class_name::gender; \ flags_1 = /obj/item/clothing/underwear/shirt/bra::flags_1 | (IS_PLAYER_COLORABLE_1 * !(/datum/sprite_accessory/bra/##class_name::use_static)); \ }; /// Create socks from socks sprite accessories #define SOCKS_FROM_SPRITE_ACCESSORY(class_name) \ /obj/item/clothing/underwear/socks/##class_name {\ - name = /datum/sprite_accessory/socks/##class_name::name; \ - icon = /datum/sprite_accessory/socks/##class_name::icon; \ - worn_icon = /datum/sprite_accessory/socks/##class_name::icon; \ - worn_icon_digi = /datum/sprite_accessory/socks/##class_name::icon; \ - icon_state = /datum/sprite_accessory/socks/##class_name::icon_state; \ + name = /datum/sprite_accessory/socks/##class_name::name; \ + icon = /datum/sprite_accessory/socks/##class_name::icon; \ + worn_icon = /datum/sprite_accessory/socks/##class_name::icon; \ + worn_icon_digi = /datum/sprite_accessory/socks/##class_name::icon; \ + icon_state = /datum/sprite_accessory/socks/##class_name::icon_state; \ flags_1 = /obj/item/clothing/underwear/socks::flags_1 | (IS_PLAYER_COLORABLE_1 * !(/datum/sprite_accessory/socks/##class_name::use_static)); \ }; diff --git a/code/modules/unit_tests/~splurt/underwear_items.dm b/code/modules/unit_tests/~splurt/underwear_items.dm index 4da7ded1a0d9b..f992ce0b7ca85 100644 --- a/code/modules/unit_tests/~splurt/underwear_items.dm +++ b/code/modules/unit_tests/~splurt/underwear_items.dm @@ -41,12 +41,12 @@ var/list/output = list() if(header) - output += "/* This file is automatically generated by the unit test. Do not edit it manually, use the [lowertext(clothing_name)]_edits.dm file instead." + output += "/* This file is automatically generated by the unit test. Do not edit it manually, use the [LOWER_TEXT(clothing_name)]_edits.dm file instead." output += " * Generating this file is done by running the unit test locally, see the fail message for more details." output += " * All items corresponding to [sprite_type] should be here." output += " */" else - output += "/// [lowertext(clothing_name)] section" + output += "/// [LOWER_TEXT(clothing_name)] section" output += "" From 23584e3a5e46478f7db210978a77f85f1df3e637 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sun, 21 Jul 2024 02:15:01 -0500 Subject: [PATCH 015/117] Update underwear_items.dm what --- code/modules/unit_tests/~splurt/underwear_items.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/unit_tests/~splurt/underwear_items.dm b/code/modules/unit_tests/~splurt/underwear_items.dm index f992ce0b7ca85..e0fd5ceb2a7e3 100644 --- a/code/modules/unit_tests/~splurt/underwear_items.dm +++ b/code/modules/unit_tests/~splurt/underwear_items.dm @@ -28,9 +28,9 @@ var/list/lines = outputs[object_type] var/output_file = "[lines.Join("\n")]" rustg_file_write(output_file, "data/~generated_files/[object_type].dm") - var/current = world.system_type == UNIX ? file2text("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm") : rustg_file_read("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm") //Apparently unix doesn't like rustg file procs + var/current = world.system_type == UNIX ? file2text(file("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm")) : rustg_file_read("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm") //Apparently unix doesn't like rustg file procs if(current != output_file) - log("[object_type] is out of date.") + log_test("[object_type] is out of date.") fail = TRUE if(fail) From 74f07b8dfef1532e604d95e4b9c3c81446ba69b7 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sun, 21 Jul 2024 02:46:50 -0500 Subject: [PATCH 016/117] idk --- code/modules/unit_tests/~splurt/underwear_items.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/unit_tests/~splurt/underwear_items.dm b/code/modules/unit_tests/~splurt/underwear_items.dm index e0fd5ceb2a7e3..0f59cd7e3333d 100644 --- a/code/modules/unit_tests/~splurt/underwear_items.dm +++ b/code/modules/unit_tests/~splurt/underwear_items.dm @@ -28,9 +28,9 @@ var/list/lines = outputs[object_type] var/output_file = "[lines.Join("\n")]" rustg_file_write(output_file, "data/~generated_files/[object_type].dm") - var/current = world.system_type == UNIX ? file2text(file("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm")) : rustg_file_read("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm") //Apparently unix doesn't like rustg file procs + var/current = file2text(file("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm")) //Apparently unix doesn't like rustg file procs if(current != output_file) - log_test("[object_type] is out of date.") + log_test("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm is out of date.") fail = TRUE if(fail) From 0e7e0e7236fdee0d46a2916443df98b4f425bd04 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sun, 21 Jul 2024 02:58:27 -0500 Subject: [PATCH 017/117] Update underwear_items.dm let's see --- code/modules/unit_tests/~splurt/underwear_items.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/unit_tests/~splurt/underwear_items.dm b/code/modules/unit_tests/~splurt/underwear_items.dm index 0f59cd7e3333d..dd4d8a9a9689e 100644 --- a/code/modules/unit_tests/~splurt/underwear_items.dm +++ b/code/modules/unit_tests/~splurt/underwear_items.dm @@ -31,6 +31,7 @@ var/current = file2text(file("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm")) //Apparently unix doesn't like rustg file procs if(current != output_file) log_test("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm is out of date.") + log_test(current) fail = TRUE if(fail) From 9b1a32b2b4d53aab8bbab593a0e78624cf52bc59 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sun, 21 Jul 2024 03:13:32 -0500 Subject: [PATCH 018/117] Update underwear_items.dm --- code/modules/unit_tests/~splurt/underwear_items.dm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/modules/unit_tests/~splurt/underwear_items.dm b/code/modules/unit_tests/~splurt/underwear_items.dm index dd4d8a9a9689e..cbe53c0ff62f5 100644 --- a/code/modules/unit_tests/~splurt/underwear_items.dm +++ b/code/modules/unit_tests/~splurt/underwear_items.dm @@ -18,6 +18,12 @@ socks = list() ) + var/list/files_by_type = list( + briefs = 'modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs.dm', + shirt = 'modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt.dm', + socks = 'modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm' + ) + /datum/unit_test/underwear_items/Run() outputs["briefs"] = generate_objects_file(/datum/sprite_accessory/underwear) outputs["shirt"] = generate_objects_file(/datum/sprite_accessory/undershirt) + generate_objects_file(/datum/sprite_accessory/bra, FALSE) @@ -28,10 +34,10 @@ var/list/lines = outputs[object_type] var/output_file = "[lines.Join("\n")]" rustg_file_write(output_file, "data/~generated_files/[object_type].dm") - var/current = file2text(file("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm")) //Apparently unix doesn't like rustg file procs + var/current = file2text(files_by_type[object_type]) + log_test("[files_by_type[object_type]]: [current]") if(current != output_file) - log_test("modular_zzplurt/code/modules/clothing/underwear/~generated_files/[object_type].dm is out of date.") - log_test(current) + log_test("[files_by_type[object_type]] is out of date.") fail = TRUE if(fail) From 5c294ef79704668d4f6b7105cb67ebab79719bec Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sun, 21 Jul 2024 03:47:29 -0500 Subject: [PATCH 019/117] Update underwear_items.dm ANULO MUFA --- code/modules/unit_tests/~splurt/underwear_items.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/unit_tests/~splurt/underwear_items.dm b/code/modules/unit_tests/~splurt/underwear_items.dm index cbe53c0ff62f5..d4ea471bc8273 100644 --- a/code/modules/unit_tests/~splurt/underwear_items.dm +++ b/code/modules/unit_tests/~splurt/underwear_items.dm @@ -18,7 +18,7 @@ socks = list() ) - var/list/files_by_type = list( + var/list/files_by_type = list( // thanks linux for not using the fucking root directory briefs = 'modular_zzplurt/code/modules/clothing/underwear/~generated_files/briefs.dm', shirt = 'modular_zzplurt/code/modules/clothing/underwear/~generated_files/shirt.dm', socks = 'modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm' @@ -35,7 +35,6 @@ var/output_file = "[lines.Join("\n")]" rustg_file_write(output_file, "data/~generated_files/[object_type].dm") var/current = file2text(files_by_type[object_type]) - log_test("[files_by_type[object_type]]: [current]") if(current != output_file) log_test("[files_by_type[object_type]] is out of date.") fail = TRUE From b7030836c25d24ea39c3ea09333654eea37c8d52 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Mon, 22 Jul 2024 01:51:03 -0500 Subject: [PATCH 020/117] outfits makes outfits use the underwear objects instead of the sprites --- code/__DEFINES/~~~splurt_defines/underwear.dm | 12 ++++++++++++ code/datums/outfit.dm | 19 +++++++++++++------ .../master_files/code/datums/outfit.dm | 2 +- .../code/datums/sprite_accessories.dm | 18 ++++++++++++++++++ tgstation.dme | 1 + 5 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 modular_zzplurt/code/datums/sprite_accessories.dm diff --git a/code/__DEFINES/~~~splurt_defines/underwear.dm b/code/__DEFINES/~~~splurt_defines/underwear.dm index 5459129a4b1c0..772894c8bcd5e 100644 --- a/code/__DEFINES/~~~splurt_defines/underwear.dm +++ b/code/__DEFINES/~~~splurt_defines/underwear.dm @@ -18,6 +18,9 @@ female_sprite_flags = gender == MALE ? (FEMALE_UNIFORM_FULL | FEMALE_UNIFORM_DIGI_FULL) : NO_FEMALE_UNIFORM; \ };\ . = ..();\ +};\ +/datum/sprite_accessory/underwear/##class_name{\ + briefs_obj = /obj/item/clothing/underwear/briefs/##class_name; \ }; /// Create shirt from undershirt sprite accessories @@ -39,6 +42,9 @@ female_sprite_flags = gender == MALE ? (FEMALE_UNIFORM_FULL | FEMALE_UNIFORM_DIGI_FULL) : NO_FEMALE_UNIFORM;\ };\ . = ..();\ +};\ +/datum/sprite_accessory/undershirt/##class_name {\ + shirt_obj = /obj/item/clothing/underwear/shirt/##class_name; \ }; /// Create bra from bra sprite accessories @@ -51,6 +57,9 @@ icon_state = /datum/sprite_accessory/bra/##class_name::icon_state; \ gender = /datum/sprite_accessory/bra/##class_name::gender; \ flags_1 = /obj/item/clothing/underwear/shirt/bra::flags_1 | (IS_PLAYER_COLORABLE_1 * !(/datum/sprite_accessory/bra/##class_name::use_static)); \ +};\ +/datum/sprite_accessory/bra/##class_name {\ + bra_obj = /obj/item/clothing/underwear/shirt/bra/##class_name; \ }; /// Create socks from socks sprite accessories @@ -62,4 +71,7 @@ worn_icon_digi = /datum/sprite_accessory/socks/##class_name::icon; \ icon_state = /datum/sprite_accessory/socks/##class_name::icon_state; \ flags_1 = /obj/item/clothing/underwear/socks::flags_1 | (IS_PLAYER_COLORABLE_1 * !(/datum/sprite_accessory/socks/##class_name::use_static)); \ +};\ +/datum/sprite_accessory/socks/##class_name {\ + socks_obj = /obj/item/clothing/underwear/socks/##class_name; \ }; diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 9c4fee7baeedf..261e1296e784f 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -118,9 +118,11 @@ var/preload = FALSE /// Any undershirt. While on humans it is a string, here we use paths to stay consistent with the rest of the equips. - var/datum/sprite_accessory/undershirt = null - var/datum/sprite_accessory/underwear = null - var/datum/sprite_accessory/socks = null + // SPLURT EDIT - Extra Inventory - use the correct paths + var/datum/sprite_accessory/undershirt/undershirt = null + var/datum/sprite_accessory/underwear/underwear = null + var/datum/sprite_accessory/socks/socks = null + // SPLURT EDIT END /** * Called at the start of the equip proc @@ -212,13 +214,16 @@ EQUIP_OUTFIT_ITEM(suit_store, ITEM_SLOT_SUITSTORE) if(undershirt) - user.undershirt = initial(undershirt.name) + 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) if(underwear) - user.underwear = initial(underwear.name) + w_underwear = w_underwear || initial(underwear.briefs_obj) //SPLURT EDIT - Extra inventory - original: user.underwear = initial(underwear.name) if(socks) - user.socks = initial(socks.name) + w_socks = w_socks || initial(socks.socks_obj) //SPLURT EDIT - Extra inventory - original: user.socks = initial(socks.name) // SPLURT EDIT - Extra inventory if(ears_extra) @@ -233,10 +238,12 @@ EQUIP_OUTFIT_ITEM(wrists, ITEM_SLOT_WRISTS) // + /* SPLURT EDIT - Extra inventory // SKYRAT EDIT ADDITION START - Underwear and bra split if(bra) user.bra = initial(bra.name) // SKYRAT EDIT END + */ if(accessory) var/obj/item/clothing/under/U = user.w_uniform diff --git a/modular_skyrat/master_files/code/datums/outfit.dm b/modular_skyrat/master_files/code/datums/outfit.dm index 6fd3e7afb15c8..5fc62f0b2f358 100644 --- a/modular_skyrat/master_files/code/datums/outfit.dm +++ b/modular_skyrat/master_files/code/datums/outfit.dm @@ -2,4 +2,4 @@ /// Bitflag-based variable to store which parts of the uniform have been modified by the loadout, to avoid them being overriden again. var/modified_outfit_slots = NONE /// Underwear and bras are separated now - var/datum/sprite_accessory/bra = null + var/datum/sprite_accessory/bra/bra = null // SPLURT EDIT - Extra Inventory - use the correct path diff --git a/modular_zzplurt/code/datums/sprite_accessories.dm b/modular_zzplurt/code/datums/sprite_accessories.dm new file mode 100644 index 0000000000000..3c5dca04688eb --- /dev/null +++ b/modular_zzplurt/code/datums/sprite_accessories.dm @@ -0,0 +1,18 @@ +// Core code edits + +// Extra Inventory stuff +/datum/sprite_accessory/underwear + /// Briefs object to which the accessory is linked + var/obj/item/clothing/underwear/briefs/briefs_obj + +/datum/sprite_accessory/undershirt + /// Shirt object to which the accessory is linked + var/obj/item/clothing/underwear/shirt/shirt_obj + +/datum/sprite_accessory/bra + /// Bra object to which the accessory is linked + var/obj/item/clothing/underwear/shirt/bra/bra_obj + +/datum/sprite_accessory/socks + /// Socks object to which the accessory is linked + var/obj/item/clothing/underwear/socks/socks_obj diff --git a/tgstation.dme b/tgstation.dme index 9e11275d96c97..fe724eccf9c26 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9141,6 +9141,7 @@ #include "modular_zzplurt\code\controllers\configuration\entries\discord.dm" #include "modular_zzplurt\code\controllers\subsystem\discord.dm" #include "modular_zzplurt\code\datums\outfit.dm" +#include "modular_zzplurt\code\datums\sprite_accessories.dm" #include "modular_zzplurt\code\datums\components\crafting\crafting.dm" #include "modular_zzplurt\code\game\objects\items.dm" #include "modular_zzplurt\code\game\objects\items\devices\transfer_valve.dm" From ecd0cb122781304d419970ed3da6f5ca1374e9cd Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Mon, 22 Jul 2024 02:21:34 -0500 Subject: [PATCH 021/117] Mannequin makes mannequins use the new inventory system --- code/game/objects/structures/mannequin.dm | 27 ++++++++++++++++++- .../code/game/objects/structures/mannequin.dm | 2 +- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/mannequin.dm b/code/game/objects/structures/mannequin.dm index c529688376339..dfc1e2192a7cc 100644 --- a/code/game/objects/structures/mannequin.dm +++ b/code/game/objects/structures/mannequin.dm @@ -20,12 +20,14 @@ var/body_type /// Material we're used of, wood or plastic? var/material + /* SPLURT EDIT REMOVAL - Extra Inventory /// String for the underwear we use. var/underwear_name /// String for the undershirt we use. var/undershirt_name /// String for the socks we use. var/socks_name + */ /// Static list of slot flags we have clothing slots for. var/static/list/slot_flags = list( ITEM_SLOT_HEAD, @@ -40,6 +42,12 @@ ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, + // SPLURT EDIT ADDITION - Extra Inventory + ITEM_SLOT_UNDERWEAR, + ITEM_SLOT_SOCKS, + ITEM_SLOT_SHIRT, + ITEM_SLOT_WRISTS, + // SPLURT EDIT END ) /// Assoc list of all item slots (turned to strings) to the items they hold. var/list/worn_items = list() @@ -95,6 +103,7 @@ var/mutable_appearance/pedestal = mutable_appearance(icon, "pedestal_[material]") pedestal.pixel_y = -3 . += pedestal + /* SPLURT EDIT REMOVAL - Extra Inventory var/datum/sprite_accessory/underwear/underwear = SSaccessories.underwear_list[underwear_name] if(underwear) if(body_type == FEMALE && underwear.gender == MALE) @@ -115,7 +124,7 @@ if(bra) . += mutable_appearance(bra.icon, bra.icon_state, -BODY_LAYER) //SKYRAT EDIT END - + */ for(var/slot_flag in worn_items) var/obj/item/worn_item = worn_items[slot_flag] if(!worn_item) @@ -163,8 +172,23 @@ if(ITEM_SLOT_FEET) default_layer = SHOES_LAYER default_icon = DEFAULT_SHOES_FILE + // SPLURT EDIT ADDITION - Extra Inventory + if(ITEM_SLOT_UNDERWEAR) + default_layer = UNDERWEAR_LAYER + default_icon = 'icons/mob/clothing/underwear.dmi' + if(ITEM_SLOT_SOCKS) + default_layer = SOCKS_LAYER + default_icon = 'icons/mob/clothing/underwear.dmi' + if(ITEM_SLOT_SHIRT) + default_layer = SHIRT_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 + // SPLURT EDIT END . += worn_item.build_worn_icon(default_layer, default_icon, female_uniform = female_icon) +/* SPLURT EDIT REMOVAL - Extra Inventory /obj/structure/mannequin/attack_hand_secondary(mob/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) @@ -192,6 +216,7 @@ bra_name = new_bra //SKYRAT EDIT END update_appearance() +*/ /obj/structure/mannequin/wood material = MANNEQUIN_WOOD diff --git a/modular_skyrat/master_files/code/game/objects/structures/mannequin.dm b/modular_skyrat/master_files/code/game/objects/structures/mannequin.dm index 9604fb7ac5f7b..bc9293330b6b0 100644 --- a/modular_skyrat/master_files/code/game/objects/structures/mannequin.dm +++ b/modular_skyrat/master_files/code/game/objects/structures/mannequin.dm @@ -1,3 +1,3 @@ /obj/structure/mannequin /// String for the bra we use. - var/bra_name + //var/bra_name // SPLURT EDIT REMOVAL - Extra Inventory From 33e36b2c5a5faa5c5cc772e4e116bebfbeaccc99 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Tue, 23 Jul 2024 15:46:04 -0500 Subject: [PATCH 022/117] makes it compatible with tg's current systems --- code/game/objects/structures/dresser.dm | 53 +++++++++++++++---- .../mob/living/carbon/human/_species.dm | 20 ------- code/modules/mob/living/carbon/inventory.dm | 6 +++ .../new_player/sprite_accessories/genitals.dm | 3 +- .../mob/living/carbon/human/species.dm | 42 ++++++++++++--- .../modules/clothing/underwear/_underwear.dm | 5 ++ .../code/modules/clothing/underwear/briefs.dm | 10 ++++ .../code/modules/clothing/underwear/shirt.dm | 18 +++++++ .../code/modules/clothing/underwear/socks.dm | 10 ++++ .../living/carbon/human/human_update_icons.dm | 15 ++++-- 10 files changed, 141 insertions(+), 41 deletions(-) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index cdf7cfbceef99..08b1a73d1f291 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -21,7 +21,6 @@ /obj/structure/dresser/atom_deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) -/* SPLURT EDIT - Handled in modular. The way dressers worked was never cool anyways /obj/structure/dresser/attack_hand(mob/user, list/modifiers) . = ..() if(.) @@ -46,40 +45,76 @@ var/new_undies = tgui_input_list(user, "Select your underwear", "Changing", SSaccessories.underwear_list) if(new_undies) dressing_human.underwear = new_undies + // SPLURT EDIT ADDITION - Extra Inventory + dressing_human.dropItemToGround(dressing_human.w_underwear) + var/datum/sprite_accessory/underwear/sprite = SSaccessories.underwear_list[new_undies] + dressing_human.equip_to_slot_or_del(new sprite.briefs_obj(dressing_human), ITEM_SLOT_UNDERWEAR) + // SPLURT EDIT END if("Underwear Color") var/new_underwear_color = input(dressing_human, "Choose your underwear color", "Underwear Color", dressing_human.underwear_color) as color|null if(new_underwear_color) dressing_human.underwear_color = sanitize_hexcolor(new_underwear_color) + // SPLURT EDIT ADDITION - Extra Inventory + var/obj/item/clothing/underwear/briefs/briefs = dressing_human.w_underwear + dressing_human.dropItemToGround(briefs) + dressing_human.equip_to_slot_or_del(briefs, ITEM_SLOT_UNDERWEAR) + // SPLURT EDIT END if("Undershirt") var/new_undershirt = tgui_input_list(user, "Select your undershirt", "Changing", SSaccessories.undershirt_list) if(new_undershirt) dressing_human.undershirt = new_undershirt - if("Socks") - var/new_socks = tgui_input_list(user, "Select your socks", "Changing", SSaccessories.socks_list) - if(new_socks) - dressing_human.socks = new_socks - //SKYRAT EDIT ADDITION BEGIN - Colorable Undershirt/Socks/Bras + // SPLURT EDIT ADDITION - Extra Inventory + dressing_human.dropItemToGround(dressing_human.w_shirt) + var/datum/sprite_accessory/undershirt/sprite = SSaccessories.undershirt_list[new_undershirt] + dressing_human.equip_to_slot_or_del(new sprite.shirt_obj(dressing_human), ITEM_SLOT_SHIRT) + // SPLURT EDIT END if("Undershirt Color") var/new_undershirt_color = input(dressing_human, "Choose your undershirt color", "Undershirt Color", dressing_human.undershirt_color) as color|null if(new_undershirt_color) dressing_human.undershirt_color = sanitize_hexcolor(new_undershirt_color) + // SPLURT EDIT ADDITION - Extra Inventory + var/obj/item/clothing/underwear/shirt/shirt = dressing_human.w_shirt + dressing_human.dropItemToGround(shirt) + dressing_human.equip_to_slot_or_del(shirt, ITEM_SLOT_SHIRT) + // SPLURT EDIT END + if("Socks") + var/new_socks = tgui_input_list(user, "Select your socks", "Changing", SSaccessories.socks_list) + if(new_socks) + dressing_human.socks = new_socks + // SPLURT EDIT ADDITION - Extra Inventory + dressing_human.dropItemToGround(dressing_human.w_socks) + var/datum/sprite_accessory/socks/sprite = SSaccessories.socks_list[new_socks] + dressing_human.equip_to_slot_or_del(new sprite.socks_obj(dressing_human), ITEM_SLOT_SOCKS) + // SPLURT EDIT END if("Socks Color") var/new_socks_color = input(dressing_human, "Choose your socks color", "Socks Color", dressing_human.socks_color) as color|null if(new_socks_color) dressing_human.socks_color = sanitize_hexcolor(new_socks_color) - + // SPLURT EDIT ADDITION - Extra Inventory + var/obj/item/clothing/underwear/socks/socks = dressing_human.w_socks + dressing_human.dropItemToGround(socks) + dressing_human.equip_to_slot_or_del(socks, ITEM_SLOT_SOCKS) + // SPLURT EDIT END if("Bra") var/new_bra = tgui_input_list(user, "Select your Bra", "Changing", SSaccessories.bra_list) if(new_bra) dressing_human.bra = new_bra - + // SPLURT EDIT ADDITION - Extra Inventory + dressing_human.dropItemToGround(dressing_human.w_shirt) + 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) + // 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 + dressing_human.dropItemToGround(bra) + dressing_human.equip_to_slot_or_del(bra, ITEM_SLOT_SHIRT) + // SPLURT EDIT END //SKYRAT EDIT ADDITION END - Colorable Undershirt/Socks/Bras add_fingerprint(dressing_human) dressing_human.update_body() -*/ diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 2c2797ab5c923..15aeffa342a22 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -851,10 +851,6 @@ GLOBAL_LIST_EMPTY(features_by_species) return equip_delay_self_check(I, H, bypass_equip_delay_self) // SPLURT EDIT - Extra inventory if(ITEM_SLOT_WRISTS) - if(H.wrists) - return FALSE - if(!(I.slot_flags & ITEM_SLOT_WRISTS)) - return FALSE if(H.num_hands < 2) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) @@ -895,30 +891,14 @@ GLOBAL_LIST_EMPTY(features_by_species) return equip_delay_self_check(I, H, bypass_equip_delay_self) // SPLURT EDIT - Extra inventory if(ITEM_SLOT_EARS_RIGHT) - if(H.ears_extra) - return FALSE - if(!(I.slot_flags & ITEM_SLOT_EARS)) - return FALSE if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_UNDERWEAR) - if(H.w_underwear) - return FALSE - if( !(I.slot_flags & ITEM_SLOT_UNDERWEAR) ) - return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_SOCKS) - if(H.w_socks) - return FALSE - if( !(I.slot_flags & ITEM_SLOT_SOCKS) ) - return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_SHIRT) - if(H.w_shirt) - return FALSE - if( !(I.slot_flags & ITEM_SLOT_SHIRT) ) - return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) // if(ITEM_SLOT_ICLOTHING) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 6cb13bb0caa09..6a557ffc9ce29 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -25,6 +25,12 @@ obscured |= ITEM_SLOT_SUITSTORE if(hidden_slots & HIDEHEADGEAR) obscured |= ITEM_SLOT_HEAD + // SPLURT EDIT ADDITION - Extra inventory + if(hidden_slots & HIDEUNDERWEAR) + obscured |= ITEM_SLOT_UNDERWEAR | ITEM_SLOT_SHIRT | ITEM_SLOT_SOCKS + if(hidden_slots & HIDEWRISTS) + obscured |= ITEM_SLOT_WRISTS + // SPLURT EDIT END return obscured diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm index 090af1bbaaa67..86dcbefbf0ac3 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm @@ -23,6 +23,7 @@ if(istype(target_mob.wear_suit, /obj/item/clothing/suit/toggle/labcoat/hospitalgown)) return TRUE + /* SPLURT EDIT REMOVAL - Extra Inventory //Are they wearing an Undershirt? if(target_mob.undershirt != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_SHIRT)) var/datum/sprite_accessory/undershirt/worn_undershirt = SSaccessories.undershirt_list[target_mob.undershirt] @@ -50,7 +51,7 @@ //Nothing they're wearing will cover them else return FALSE - + */ //If not always shown or hidden by clothes, then it defaults to always hidden else return TRUE 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 323adb4c52adb..c87fa77595879 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 @@ -139,10 +139,16 @@ GLOBAL_LIST_EMPTY(customizable_races) standing += eye_organ.generate_body_overlay(species_human) //Underwear, Undershirts & Socks - /* SPLURT EDIT - Extra inventory + //SPLURT EDIT - Extra Inventory if(!HAS_TRAIT(species_human, TRAIT_NO_UNDERWEAR)) - if(species_human.underwear && !(species_human.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) + if(species_human.underwear && species_human.underwear != "Nude") var/datum/sprite_accessory/underwear/underwear = SSaccessories.underwear_list[species_human.underwear] + if(underwear && !species_human.w_underwear) + var/obj/item/clothing/underwear/briefs/briefs_obj = new underwear.briefs_obj(species_human) + species_human.equip_to_slot_or_del(briefs_obj, ITEM_SLOT_UNDERWEAR) + if(!(underwear == species_human.w_underwear)) + qdel(underwear) + /* var/mutable_appearance/underwear_overlay var/female_sprite_flags = FEMALE_UNIFORM_FULL // the default gender shaping if(underwear) @@ -157,10 +163,16 @@ GLOBAL_LIST_EMPTY(customizable_races) if(!underwear.use_static) underwear_overlay.color = species_human.underwear_color standing += underwear_overlay + */ - if(species_human.bra && !(species_human.underwear_visibility & UNDERWEAR_HIDE_BRA)) + 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) + 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) + if(!(bra == species_human.w_shirt)) + qdel(bra) + /* if(bra) var/mutable_appearance/bra_overlay var/icon_state = bra.icon_state @@ -168,9 +180,16 @@ GLOBAL_LIST_EMPTY(customizable_races) if(!bra.use_static) bra_overlay.color = species_human.bra_color standing += bra_overlay + */ - if(species_human.undershirt && !(species_human.underwear_visibility & UNDERWEAR_HIDE_SHIRT)) + if(species_human.undershirt && !species_human.undershirt != "Nude") var/datum/sprite_accessory/undershirt/undershirt = SSaccessories.undershirt_list[species_human.undershirt] + if(undershirt && !species_human.w_shirt) + var/obj/item/clothing/underwear/shirt/shirt_obj = new undershirt.shirt_obj(species_human) + species_human.equip_to_slot_or_del(shirt_obj, ITEM_SLOT_SHIRT) + if(!(undershirt == species_human.w_shirt)) + qdel(undershirt) + /* if(undershirt) var/mutable_appearance/undershirt_overlay if(species_human.dna.species.sexes && species_human.physique == FEMALE) @@ -180,9 +199,15 @@ GLOBAL_LIST_EMPTY(customizable_races) if(!undershirt.use_static) undershirt_overlay.color = species_human.undershirt_color standing += undershirt_overlay - - if(species_human.socks && species_human.num_legs >= 2 && !(mutant_bodyparts["taur"]) && !(species_human.underwear_visibility & UNDERWEAR_HIDE_SOCKS)) + */ + if(species_human.socks && species_human.num_legs >= 2 && !(mutant_bodyparts["taur"]) && !species_human.socks != "Nude") var/datum/sprite_accessory/socks/socks = SSaccessories.socks_list[species_human.socks] + if(socks && !species_human.w_socks) + var/obj/item/clothing/underwear/socks/socks_obj = new socks.socks_obj(species_human) + species_human.equip_to_slot_or_del(socks_obj, ITEM_SLOT_SOCKS) + if(!(socks == species_human.w_socks)) + qdel(socks) + /* if(socks) var/mutable_appearance/socks_overlay var/icon_state = socks.icon_state @@ -192,7 +217,8 @@ GLOBAL_LIST_EMPTY(customizable_races) if(!socks.use_static) socks_overlay.color = species_human.socks_color standing += socks_overlay - */ + */ + // SPLURT EDIT END if(standing.len) species_human.overlays_standing[BODY_LAYER] = standing diff --git a/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm b/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm index 71af1fbc0dbff..06fc9f7fae5a9 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/_underwear.dm @@ -13,6 +13,11 @@ // Adding support for female sprites var/female_sprite_flags = NO_FEMALE_UNIFORM +/obj/item/clothing/underwear/mob_can_equip(mob/living/user, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) + . = ..() + if(HAS_TRAIT(user, TRAIT_NO_UNDERWEAR)) + return FALSE + /obj/item/clothing/underwear/Move() ..() setDir(SOUTH) //should prevent underwear from facing any direction but south while on the floor, uses same code as pipes, PLEASE, THIS IS A BAD SOLUTION, SOMEONE MAKE ME UNDERWEAR SPRITES ASAP diff --git a/modular_zzplurt/code/modules/clothing/underwear/briefs.dm b/modular_zzplurt/code/modules/clothing/underwear/briefs.dm index 5ed762e93f6ee..407636ef03542 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/briefs.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/briefs.dm @@ -5,6 +5,16 @@ body_parts_covered = GROIN slot_flags = ITEM_SLOT_UNDERWEAR +/obj/item/clothing/underwear/briefs/equipped(mob/living/user, slot) + . = ..() + if(!istype(user, /mob/living/carbon/human)) + return + var/mob/living/carbon/human/human = user + if(slot == ITEM_SLOT_UNDERWEAR) + human.underwear = name + else + human.underwear = "Nude" + // please make sure they're sorted alphabetically and categorized, above is the only exception /* Old briefs objects, already handled by the sprite accessories diff --git a/modular_zzplurt/code/modules/clothing/underwear/shirt.dm b/modular_zzplurt/code/modules/clothing/underwear/shirt.dm index b14975d16cccc..d053e2d284e3c 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/shirt.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/shirt.dm @@ -6,6 +6,24 @@ slot_flags = ITEM_SLOT_SHIRT supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON +/obj/item/clothing/underwear/shirt/equipped(mob/living/user, slot) + . = ..() + if(!istype(user, /mob/living/carbon/human)) + 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" + else + if(istype(src, /obj/item/clothing/underwear/shirt/bra)) + human.bra = "Nude" + else + human.undershirt = "Nude" + /obj/item/clothing/underwear/shirt/bra name = "bra" desc = "A bra." diff --git a/modular_zzplurt/code/modules/clothing/underwear/socks.dm b/modular_zzplurt/code/modules/clothing/underwear/socks.dm index d06a110cbd004..84172b9720fd7 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/socks.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/socks.dm @@ -6,6 +6,16 @@ slot_flags = ITEM_SLOT_SOCKS supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION +/obj/item/clothing/underwear/socks/equipped(mob/living/user, slot) + . = ..() + if(!istype(user, /mob/living/carbon/human)) + return + var/mob/living/carbon/human/human = user + if(slot == ITEM_SLOT_SOCKS) + human.socks = name + else + human.socks = "Nude" + // please make sure they're sorted alphabetically and categorized, above is the only exception /* Old socks items, already handled by sprite accessories 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 0770c0d94a4a0..507ebf6a3eb94 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 @@ -24,7 +24,7 @@ if(update_obscured) update_obscured_slots(undies.flags_inv) - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_UNDERWEAR) + if((check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_UNDERWEAR) || underwear_hidden()) return var/target_overlay = undies.icon_state @@ -73,6 +73,9 @@ mutant_styles = mutant_styles, ) + if(undies.flags_1 & IS_PLAYER_COLORABLE_1) + underwear_overlay.color = underwear_color + var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) my_chest?.worn_underwear_offset?.apply_offset(underwear_overlay) overlays_standing[UNDERWEAR_LAYER] = underwear_overlay @@ -94,7 +97,7 @@ if(update_obscured) update_obscured_slots(undershirt.flags_inv) - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SHIRT) + if((check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SHIRT) || undershirt_hidden()) return var/target_overlay = undershirt.icon_state @@ -143,6 +146,9 @@ mutant_styles = mutant_styles, ) + if(undershirt.flags_1 & IS_PLAYER_COLORABLE_1) + shirt_overlay.color = undershirt_color + var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) my_chest?.worn_shirt_offset?.apply_offset(shirt_overlay) overlays_standing[SHIRT_LAYER] = shirt_overlay @@ -241,7 +247,7 @@ if(update_obscured) update_obscured_slots(worn_item.flags_inv) - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SOCKS) + if((check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SOCKS) || socks_hidden()) return var/target_overlay = worn_item.icon_state @@ -282,6 +288,9 @@ if (foot_offset && foot_offset["y"] > feature_y_offset) feature_y_offset = foot_offset["y"] + if(worn_item.flags_1 & IS_PLAYER_COLORABLE_1) + socks_overlay.color = socks_color + socks_overlay.pixel_y += feature_y_offset overlays_standing[SOCKS_LAYER] = socks_overlay From cf0eed9e6214bc8790fbf1f07f34c18320c490e8 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Tue, 23 Jul 2024 18:03:18 -0500 Subject: [PATCH 023/117] Update species.dm --- .../modules/mob/living/carbon/human/species.dm | 8 -------- 1 file changed, 8 deletions(-) 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 c87fa77595879..fe681f1ce16e1 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 @@ -146,8 +146,6 @@ GLOBAL_LIST_EMPTY(customizable_races) if(underwear && !species_human.w_underwear) var/obj/item/clothing/underwear/briefs/briefs_obj = new underwear.briefs_obj(species_human) species_human.equip_to_slot_or_del(briefs_obj, ITEM_SLOT_UNDERWEAR) - if(!(underwear == species_human.w_underwear)) - qdel(underwear) /* var/mutable_appearance/underwear_overlay var/female_sprite_flags = FEMALE_UNIFORM_FULL // the default gender shaping @@ -170,8 +168,6 @@ GLOBAL_LIST_EMPTY(customizable_races) if(bra && !species_human.w_shirt) 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) - if(!(bra == species_human.w_shirt)) - qdel(bra) /* if(bra) var/mutable_appearance/bra_overlay @@ -187,8 +183,6 @@ GLOBAL_LIST_EMPTY(customizable_races) if(undershirt && !species_human.w_shirt) var/obj/item/clothing/underwear/shirt/shirt_obj = new undershirt.shirt_obj(species_human) species_human.equip_to_slot_or_del(shirt_obj, ITEM_SLOT_SHIRT) - if(!(undershirt == species_human.w_shirt)) - qdel(undershirt) /* if(undershirt) var/mutable_appearance/undershirt_overlay @@ -205,8 +199,6 @@ GLOBAL_LIST_EMPTY(customizable_races) if(socks && !species_human.w_socks) var/obj/item/clothing/underwear/socks/socks_obj = new socks.socks_obj(species_human) species_human.equip_to_slot_or_del(socks_obj, ITEM_SLOT_SOCKS) - if(!(socks == species_human.w_socks)) - qdel(socks) /* if(socks) var/mutable_appearance/socks_overlay From e75e12e5e2459351885c49effa46bd9524cc77db Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:09:15 -0500 Subject: [PATCH 024/117] bra (has bugs) - bras don't appear when spawning with them in the hud although they're selectable - bras spawn twice when spawning in as a player --- code/__DEFINES/inventory.dm | 12 +-- code/__DEFINES/mobs.dm | 27 +++--- code/__DEFINES/~~~splurt_defines/hud.dm | 1 + code/__DEFINES/~~~splurt_defines/mobs.dm | 1 + .../__DEFINES/~~~splurt_defines/strippable.dm | 1 + code/_onclick/hud/human.dm | 8 ++ code/datums/outfit.dm | 4 +- code/game/objects/structures/dresser.dm | 8 +- code/game/objects/structures/mannequin.dm | 4 + .../antagonists/changeling/changeling.dm | 1 + code/modules/clothing/outfits/vv_outfit.dm | 4 +- code/modules/mob/inventory.dm | 1 + .../mob/living/carbon/human/_species.dm | 2 + .../mob/living/carbon/human/examine.dm | 3 + code/modules/mob/living/carbon/human/human.dm | 3 + .../living/carbon/human/human_stripping.dm | 2 + .../mob/living/carbon/human/inventory.dm | 9 ++ code/modules/mob/living/carbon/inventory.dm | 2 +- .../mob/living/carbon/human/species.dm | 4 +- modular_zzplurt/code/datums/outfit.dm | 4 +- modular_zzplurt/code/game/objects/items.dm | 2 + .../modules/asset_cache/assets/inventory.dm | 1 + .../modules/clothing/underwear/_underwear.dm | 7 ++ .../code/modules/clothing/underwear/shirt.dm | 25 +++--- .../mob/living/carbon/human/human_defines.dm | 1 + .../living/carbon/human/human_stripping.dm | 4 + .../living/carbon/human/human_update_icons.dm | 81 ++++++++++++++++++ .../mob/living/carbon/human/inventory.dm | 2 + .../code/modules/mob/mob_update_icons.dm | 6 ++ .../icons/hud/screen_clockwork.dmi | Bin 2800 -> 3141 bytes modular_zzplurt/icons/hud/screen_midnight.dmi | Bin 4473 -> 4882 bytes .../icons/hud/screen_operative.dmi | Bin 4488 -> 4874 bytes .../icons/hud/screen_plasmafire.dmi | Bin 4414 -> 4742 bytes modular_zzplurt/icons/hud/screen_retro.dmi | Bin 2299 -> 2580 bytes .../icons/hud/screen_slimecore.dmi | Bin 4307 -> 4572 bytes .../icons/hud/screen_trasenknox.dmi | Bin 926 -> 982 bytes modular_zzplurt/icons/ui/inventory/bra.png | Bin 0 -> 134 bytes tgui/packages/tgui/interfaces/StripMenu.tsx | 30 ++++--- 38 files changed, 209 insertions(+), 51 deletions(-) create mode 100644 modular_zzplurt/icons/ui/inventory/bra.png 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 eefd18fdc5ad9801fe009b467719cd273ea43542..4816d687e906d6dc8e3ee6aa9f30498e9d4fb98a 100644 GIT binary patch delta 3136 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 Eg7VpX2><{9 literal 4473 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 LNkvXXu0mjfKCPbY diff --git a/modular_zzplurt/icons/hud/screen_operative.dmi b/modular_zzplurt/icons/hud/screen_operative.dmi index a435e1bececb9856221de2b98dad38e4a48a695b..3c8335c549d84e3915c65d266b11131a75d07b3f 100644 GIT binary patch literal 4874 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 literal 4488 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 Up7{N9N&o-=07*qoM6N<$g51{%L;wH) literal 4414 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 Eg4RiW?EnA( diff --git a/modular_zzplurt/icons/hud/screen_retro.dmi b/modular_zzplurt/icons/hud/screen_retro.dmi index a25def4d11e9ce4f79a78f2362d6a3def2164717..e4bd88d230d90f9a2dba79286f9e4d7793859e79 100644 GIT binary patch delta 2571 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 delta 2287 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 diff --git a/modular_zzplurt/icons/ui/inventory/bra.png b/modular_zzplurt/icons/ui/inventory/bra.png new file mode 100644 index 0000000000000000000000000000000000000000..998fc40b485091ea353ceae45bf0f18607b3c719 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^*8>L*SOz7!WtI69Hat3T z?iNs-u_VYZn8D%MjWi%f!_&nvL}F@k!UENTgo8&Davro8%#eHGC}~~pxO7^YlPG(~ dg)5~;7#K{Ku=*SCc>yw?!PC{xWt~$(697YVD4_rV literal 0 HcmV?d00001 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]), From d74ca63a7256119d4d9ff0a730683f8b5b915867 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Fri, 26 Jul 2024 00:40:00 -0500 Subject: [PATCH 025/117] Update tgstation.dme --- tgstation.dme | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tgstation.dme b/tgstation.dme index 7925ce23306cc..d0d939be6099d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -509,12 +509,12 @@ #include "code\__DEFINES\~~bubber_defines\___HELPERS\global_lists.dm" #include "code\__DEFINES\~~bubber_defines\research\techweb_nodes.dm" #include "code\__DEFINES\~~~splurt_defines\hud.dm" +#include "code\__DEFINES\~~~splurt_defines\intents.dm" +#include "code\__DEFINES\~~~splurt_defines\keybinding.dm" #include "code\__DEFINES\~~~splurt_defines\mobs.dm" #include "code\__DEFINES\~~~splurt_defines\species_clothing_paths.dm" #include "code\__DEFINES\~~~splurt_defines\strippable.dm" #include "code\__DEFINES\~~~splurt_defines\underwear.dm" -#include "code\__DEFINES\~~~splurt_defines\intents.dm" -#include "code\__DEFINES\~~~splurt_defines\keybinding.dm" #include "code\__DEFINES\~~~splurt_defines\traits\declarations.dm" #include "code\__HELPERS\_auxtools_api.dm" #include "code\__HELPERS\_lists.dm" @@ -9150,8 +9150,8 @@ #include "modular_zzplurt\code\datums\outfit.dm" #include "modular_zzplurt\code\datums\sprite_accessories.dm" #include "modular_zzplurt\code\datums\components\crafting\crafting.dm" -#include "modular_zzplurt\code\game\objects\items.dm" #include "modular_zzplurt\code\datums\keybinding\human.dm" +#include "modular_zzplurt\code\game\objects\items.dm" #include "modular_zzplurt\code\game\objects\items\devices\transfer_valve.dm" #include "modular_zzplurt\code\modules\admin\player_panel.dm" #include "modular_zzplurt\code\modules\admin\playtimes.dm" From 0f71723b053a1b2f6e907ea73bbf4ceccd222867 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Fri, 26 Jul 2024 01:14:14 -0500 Subject: [PATCH 026/117] Update inventory.dm --- .../code/modules/mob/living/carbon/human/inventory.dm | 3 +++ 1 file changed, 3 insertions(+) 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 2956e291c4887..cac108f52a898 100644 --- a/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm @@ -30,6 +30,9 @@ if(looking_for == w_shirt) return ITEM_SLOT_SHIRT + if(looking_for == w_bra) + return ITEM_SLOT_BRA + . = ..() /mob/living/carbon/human/get_body_slots() From 6384f618c3d178adda2e84a7bb189fe657fae1b2 Mon Sep 17 00:00:00 2001 From: Mosley <93835010+MosleyTheMalO@users.noreply.github.com> Date: Wed, 31 Jul 2024 23:51:15 -0500 Subject: [PATCH 027/117] almost there all ui updates runtime for some reason --- code/__DEFINES/inventory.dm | 18 +--- code/__DEFINES/mobs.dm | 4 +- code/__DEFINES/~~~splurt_defines/inventory.dm | 27 ++++++ code/_onclick/hud/human.dm | 58 +------------ code/datums/outfit.dm | 7 +- .../antagonists/changeling/changeling.dm | 1 + .../traitor/contractor/syndicate_contract.dm | 6 ++ .../mob/living/carbon/human/_species.dm | 20 ----- .../mob/living/carbon/human/examine.dm | 14 ++-- code/modules/mob/living/carbon/human/human.dm | 10 +-- .../living/carbon/human/human_stripping.dm | 2 +- modular_zzplurt/code/_onclick/hud/human.dm | 82 +++++++++++++++++++ modular_zzplurt/code/datums/outfit.dm | 20 +++-- modular_zzplurt/code/game/objects/items.dm | 12 +-- .../mob/living/carbon/human/_species.dm | 47 +++++++++++ .../living/carbon/human/human_update_icons.dm | 32 +++++--- .../mob/living/carbon/human/inventory.dm | 1 + .../modules/mob/living/carbon/human/life.dm | 3 + .../code/modules/mob/mob_update_icons.dm | 10 +-- tgstation.dme | 2 + 20 files changed, 232 insertions(+), 144 deletions(-) create mode 100644 code/__DEFINES/~~~splurt_defines/inventory.dm create mode 100644 modular_zzplurt/code/modules/mob/living/carbon/human/_species.dm diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 535aa127fc497..7382868da56f0 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -59,24 +59,10 @@ #define ITEM_SLOT_LPOCKET (1<<16) /// Right Pocket slot #define ITEM_SLOT_RPOCKET (1<<17) -// SPLURT EDIT underwear, socks, shirt, right ear, wrists -/// Underwear slot -#define ITEM_SLOT_UNDERWEAR (1<<18) -/// Socks slot -#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<<22) -/// Wrist slot -#define ITEM_SLOT_WRISTS (1<<23) -// SPLURT EDIT END /// Handcuff slot -#define ITEM_SLOT_HANDCUFFED (1<<24) +#define ITEM_SLOT_HANDCUFFED (1<<18) /// Legcuff slot (bolas, beartraps) -#define ITEM_SLOT_LEGCUFFED (1<<25) +#define ITEM_SLOT_LEGCUFFED (1<<19) /// Total amount of slots #define SLOTS_AMT 26 // Keep this up to date! diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 63b4969837d5c..267c3218678ca 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -715,8 +715,8 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( // SPLURT EDIT undies #define UNDERWEAR_LAYER 38 #define SOCKS_LAYER 37 -#define SHIRT_LAYER 36 -#define BRA_LAYER 35 +#define BRA_LAYER 36 +#define SHIRT_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/inventory.dm b/code/__DEFINES/~~~splurt_defines/inventory.dm new file mode 100644 index 0000000000000..ed111c471709d --- /dev/null +++ b/code/__DEFINES/~~~splurt_defines/inventory.dm @@ -0,0 +1,27 @@ +//Underwear and extra slots +/// Slot to indicate it's an extra slot +#define ITEM_SLOT_EXTRA (1<<23) //this will work until TG decides to use this value for a slot for some reason +/// Underwear slot +#define ITEM_SLOT_UNDERWEAR ITEM_SLOT_EXTRA | (1<<0) +/// Socks slot +#define ITEM_SLOT_SOCKS ITEM_SLOT_EXTRA | (1<<1) +/// Shirt slot +#define ITEM_SLOT_SHIRT ITEM_SLOT_EXTRA | (1<<2) +/// Bra slot +#define ITEM_SLOT_BRA ITEM_SLOT_EXTRA | (1<<3) +/// Right ear slot +#define ITEM_SLOT_EARS_RIGHT ITEM_SLOT_EXTRA | (1<<4) +/// Wrist slot +#define ITEM_SLOT_WRISTS ITEM_SLOT_EXTRA | (1<<5) + +/datum/bitfield/no_equip_flags/New() + var/list/extra_flags = list( + "BRIEFS" = ITEM_SLOT_UNDERWEAR, + "SOCKS" = ITEM_SLOT_SOCKS, + "SHIRT" = ITEM_SLOT_SHIRT, + "BRA" = ITEM_SLOT_BRA, + "EARPIECES_R" = ITEM_SLOT_EARS_RIGHT, + "WRISTS" = ITEM_SLOT_WRISTS, + ) + flags += extra_flags + . = ..() diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index f09dac6b3df9b..73685812c868d 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -256,61 +256,6 @@ inv_box.slot_id = ITEM_SLOT_FEET toggleable_inventory += inv_box - // SPLURT EDIT - Extra inventory - using = new /atom/movable/screen/human/toggle/extra(null, src) - using.icon = extra_inventory_ui_style(ui_style) - using.screen_loc = ui_inventory_extra - toggleable_inventory += using - - inv_box = new /atom/movable/screen/inventory(null, src) - inv_box.name = "underwear" - inv_box.icon = extra_inventory_ui_style(ui_style) - inv_box.icon_state = "underwear" - inv_box.screen_loc = ui_boxers - inv_box.slot_id = ITEM_SLOT_UNDERWEAR - extra_inventory += inv_box - - inv_box = new /atom/movable/screen/inventory(null, src) - inv_box.name = "socks" - inv_box.icon = extra_inventory_ui_style(ui_style) - inv_box.icon_state = "socks" - inv_box.screen_loc = ui_socks - inv_box.slot_id = ITEM_SLOT_SOCKS - extra_inventory += inv_box - - inv_box = new /atom/movable/screen/inventory(null, src) - inv_box.name = "shirt" - inv_box.icon = extra_inventory_ui_style(ui_style) - inv_box.icon_state = "shirt" - inv_box.screen_loc = ui_shirt - 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) - inv_box.icon_state = "ears_extra" - inv_box.screen_loc = ui_ears_extra - inv_box.slot_id = ITEM_SLOT_EARS_RIGHT - extra_inventory += inv_box - - inv_box = new /atom/movable/screen/inventory(null, src) - inv_box.name = "wrists" - inv_box.icon = extra_inventory_ui_style(ui_style) - inv_box.icon_state = "wrists" - inv_box.screen_loc = ui_wrists - inv_box.slot_id = ITEM_SLOT_WRISTS - extra_inventory += inv_box - // - inv_box = new /atom/movable/screen/inventory(null, src) inv_box.name = "belt" inv_box.icon = ui_style @@ -363,8 +308,7 @@ ammo_counter = new /atom/movable/screen/ammo_counter(null, src) //SKYRAT EDIT ADDITION infodisplay += ammo_counter //SKYRAT EDIT ADDITION - // SPLURT EDIT - Extra inventory - for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv inv.update_appearance() diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index db2d20746a7ea..df179131d9a7d 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -400,7 +400,7 @@ /// Return a list of all the types that are required to disguise as this outfit type /datum/outfit/proc/get_chameleon_disguise_info() var/list/types = list(uniform, suit, back, belt, gloves, shoes, head, mask, neck, ears, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand, - w_underwear, w_socks, w_shirt, ears_extra, wrists) // SPLURT EDIT - Extra inventory + w_underwear, w_socks, w_shirt, w_bra, ears_extra, wrists) // SPLURT EDIT - Extra inventory types += chameleon_extras types += skillchips list_clear_nulls(types) @@ -448,20 +448,15 @@ .["outfit_type"] = type .["name"] = name .["uniform"] = uniform - .["w_underwear"] = w_underwear - .["w_shirt"] = w_shirt .["suit"] = suit .["back"] = back .["belt"] = belt .["gloves"] = gloves - .["wrists"] = wrists .["shoes"] = shoes - .["w_socks"] = w_socks .["head"] = head .["mask"] = mask .["neck"] = neck .["ears"] = ears - .["ears_extra"] = ears_extra .["glasses"] = glasses .["id"] = id .["id_trim"] = id_trim diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 823f776e7180c..61f2358b438b0 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -102,6 +102,7 @@ "w_underwear" = /obj/item/changeling, "w_socks" = /obj/item/changeling, "w_shirt" = /obj/item/changeling, + "w_bra" = /obj/item/changeling, "ears_extra" = /obj/item/changeling, "wrists" = /obj/item/changeling, ) diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm index 653e8f30304d1..b88e5180ec71d 100644 --- a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm @@ -117,8 +117,11 @@ continue if(person_contents == human_sent.w_shirt) continue + if(person_contents == human_sent.w_bra) + continue if(person_contents == human_sent.wrists) // once wrists actually have a danger item, you have my blessing to remove continue + // SPLURT EDIT END person_sent.transferItemToLoc(person_contents) victim_belongings.Add(WEAKREF(person_contents)) @@ -260,8 +263,11 @@ continue if(belonging == human_victim.w_shirt) continue + if(belonging == human_victim.w_bra) + continue if(belonging == human_victim.wrists) // once wrists actually have a danger item, you have my blessing to remove continue + // SPLURT EDIT END belonging.forceMove(dropoff_location) for(var/obj/item/item in victim_belongings) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 7fc4dbd7645cb..b904882d20261 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -849,12 +849,6 @@ GLOBAL_LIST_EMPTY(features_by_species) if(H.num_hands < 2) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - // SPLURT EDIT - Extra inventory - if(ITEM_SLOT_WRISTS) - if(H.num_hands < 2) - return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) - // if(ITEM_SLOT_FEET) if(H.num_legs < 2) return FALSE @@ -889,20 +883,6 @@ GLOBAL_LIST_EMPTY(features_by_species) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - // SPLURT EDIT - Extra inventory - if(ITEM_SLOT_EARS_RIGHT) - if(!H.get_bodypart(BODY_ZONE_HEAD)) - return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(ITEM_SLOT_UNDERWEAR) - return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(ITEM_SLOT_SOCKS) - 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) if(ITEM_SLOT_ID) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 4563d0dd991f6..fef9be4bdcc1d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -75,13 +75,13 @@ . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_message]." //SPLURT EDIT - shirt - if(w_shirt && !(obscured & ITEM_SLOT_SHIRT) && !(w_shirt.item_flags & EXAMINE_SKIP)) + if(w_shirt && !((obscured & ITEM_SLOT_SHIRT) && (obscured & ITEM_SLOT_EXTRA)) && !(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)) + if(w_bra && !(obscured & ITEM_SLOT_BRA) && !(w_bra.item_flags & EXAMINE_SKIP) && !(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)) + if(w_underwear && !((obscured & ITEM_SLOT_UNDERWEAR) && (obscured & ITEM_SLOT_EXTRA)) && !(w_underwear.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [w_underwear.get_examine_string(user)]." //head if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP)) @@ -110,7 +110,7 @@ . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a "]blood-stained hand[num_hands > 1 ? "s" : ""]!") //SPLURT EDIT - wrists - if(wrists && !(obscured & ITEM_SLOT_WRISTS) && !(wrists.item_flags & EXAMINE_SKIP)) + if(wrists && !((obscured & ITEM_SLOT_WRISTS) && (obscured & ITEM_SLOT_EXTRA)) && !(wrists.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wrists.get_examine_string(user)]." //handcuffed? @@ -129,7 +129,7 @@ . += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet." //SPLURT EDIT - socks - if(w_socks && !(obscured & ITEM_SLOT_SOCKS) && !(w_socks.item_flags & EXAMINE_SKIP)) + if(w_socks && !((obscured & ITEM_SLOT_SOCKS) && (obscured & ITEM_SLOT_EXTRA)) && !(w_socks.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [w_socks.get_examine_string(user)] on [t_his] feet." //mask @@ -153,12 +153,12 @@ . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] left ear." // extra inventory //SPLURT EDIT - ears extra - if(ears_extra && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP)) + if(ears_extra && !((obscured & ITEM_SLOT_EARS_RIGHT) && (obscured & ITEM_SLOT_EXTRA)) && !(ears_extra.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_has] [ears_extra.get_examine_string(user)] on [t_his] right ear." //SPLURT EDIT - ears extra //wearing two ear items makes you look like an idiot - if((istype(ears, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_LEFT) && !(ears.item_flags & EXAMINE_SKIP)) && (istype(ears_extra, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP))) + if((istype(ears, /obj/item/radio/headset) && !((obscured & ITEM_SLOT_EARS_LEFT) && (obscured & ITEM_SLOT_EXTRA)) && !(ears.item_flags & EXAMINE_SKIP)) && (istype(ears_extra, /obj/item/radio/headset) && !((obscured & ITEM_SLOT_EARS_RIGHT) && (obscured & ITEM_SLOT_EXTRA)) && !(ears_extra.item_flags & EXAMINE_SKIP))) . += span_warning("[t_He] looks quite tacky wearing both \an [ears.name] and \an [ears_extra.name] on [t_his] head.") // diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1b803e4e37fe6..294cbe4b7d666 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -623,19 +623,19 @@ . = TRUE // SPLURT EDIT - Extra inventory - if(!(obscured & ITEM_SLOT_UNDERWEAR) && w_underwear?.wash(clean_types)) + if(!((obscured & ITEM_SLOT_UNDERWEAR) && (obscured & ITEM_SLOT_EXTRA)) && w_underwear?.wash(clean_types)) update_worn_underwear() . = TRUE - if(!(obscured & ITEM_SLOT_SOCKS) && w_socks?.wash(clean_types)) + if(!((obscured & ITEM_SLOT_SOCKS) && (obscured & ITEM_SLOT_EXTRA)) && w_socks?.wash(clean_types)) update_worn_socks() . = TRUE - if(!(obscured & ITEM_SLOT_SHIRT) && w_shirt?.wash(clean_types)) + if(!((obscured & ITEM_SLOT_SHIRT) && (obscured & ITEM_SLOT_EXTRA)) && w_shirt?.wash(clean_types)) update_worn_shirt() . = TRUE - if(!(obscured & ITEM_SLOT_BRA) && w_bra?.wash(clean_types)) + if(!((obscured & ITEM_SLOT_BRA) && (obscured & ITEM_SLOT_EXTRA)) && w_bra?.wash(clean_types)) update_worn_bra() . = TRUE - if(!(obscured & ITEM_SLOT_WRISTS) && wrists?.wash(clean_types)) + if(!((obscured & ITEM_SLOT_WRISTS) && (obscured & ITEM_SLOT_EXTRA)) && 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 e95a138a91461..22ce2d348655e 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -48,7 +48,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/ears key = STRIPPABLE_ITEM_EARS - item_slot = ITEM_SLOT_EARS + item_slot = ITEM_SLOT_EARS_LEFT //SPLURT EDIT - Extra inventory /datum/strippable_item/mob_item_slot/jumpsuit key = STRIPPABLE_ITEM_JUMPSUIT diff --git a/modular_zzplurt/code/_onclick/hud/human.dm b/modular_zzplurt/code/_onclick/hud/human.dm index 317ae04200e46..8d73f10d8e366 100644 --- a/modular_zzplurt/code/_onclick/hud/human.dm +++ b/modular_zzplurt/code/_onclick/hud/human.dm @@ -1,3 +1,80 @@ +/datum/hud/human/New(mob/living/carbon/human/owner) + var/atom/movable/screen/using + var/atom/movable/screen/inventory/inv_box + + // SPLURT EDIT - Extra inventory + using = new /atom/movable/screen/human/toggle/extra(null, src) + using.icon = extra_inventory_ui_style(ui_style) + using.screen_loc = ui_inventory_extra + toggleable_inventory += using + + inv_box = new /atom/movable/screen/inventory(null, src) + inv_box.name = "underwear" + inv_box.icon = extra_inventory_ui_style(ui_style) + inv_box.icon_state = "underwear" + inv_box.icon_full = "template" + inv_box.icon_empty = "underwear" + inv_box.screen_loc = ui_boxers + inv_box.slot_id = ITEM_SLOT_UNDERWEAR + extra_inventory += inv_box + + inv_box = new /atom/movable/screen/inventory(null, src) + inv_box.name = "socks" + inv_box.icon = extra_inventory_ui_style(ui_style) + inv_box.icon_state = "socks" + inv_box.icon_full = "template" + inv_box.icon_empty = "socks" + inv_box.screen_loc = ui_socks + inv_box.slot_id = ITEM_SLOT_SOCKS + extra_inventory += inv_box + + inv_box = new /atom/movable/screen/inventory(null, src) + inv_box.name = "shirt" + inv_box.icon = extra_inventory_ui_style(ui_style) + inv_box.icon_state = "shirt" + inv_box.icon_full = "template" + inv_box.icon_empty = "shirt" + inv_box.screen_loc = ui_shirt + 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.icon_full = "template" + inv_box.icon_empty = "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) + inv_box.icon_state = "ears_extra" + inv_box.icon_full = "template" + inv_box.icon_empty = "ears_extra" + inv_box.screen_loc = ui_ears_extra + inv_box.slot_id = ITEM_SLOT_EARS_RIGHT + extra_inventory += inv_box + + inv_box = new /atom/movable/screen/inventory(null, src) + inv_box.name = "wrists" + inv_box.icon = extra_inventory_ui_style(ui_style) + inv_box.icon_state = "wrists" + inv_box.icon_full = "template" + inv_box.icon_empty = "wrists" + inv_box.screen_loc = ui_wrists + inv_box.slot_id = ITEM_SLOT_WRISTS + extra_inventory += inv_box + // + + for(var/atom/movable/screen/inventory/inv in extra_inventory) + if(inv.slot_id) + inv_slots[TOBITSHIFT(inv.slot_id & ~ITEM_SLOT_EXTRA) + 21] = inv + inv.update_appearance() + . = ..() + /atom/movable/screen/human/toggle/extra name = "toggle extra" icon_state = "toggle_extra" @@ -39,6 +116,9 @@ if(H.w_shirt) H.w_shirt.screen_loc = ui_shirt screenmob.client.screen += H.w_shirt + if(H.w_bra) + H.w_bra.screen_loc = ui_bra + screenmob.client.screen += H.w_bra if(H.wrists) H.wrists.screen_loc = ui_wrists screenmob.client.screen += H.wrists @@ -51,5 +131,7 @@ screenmob.client.screen -= H.w_socks if(H.w_shirt) screenmob.client.screen -= H.w_shirt + if(H.w_bra) + screenmob.client.screen -= H.w_bra if(H.wrists) screenmob.client.screen -= H.wrists diff --git a/modular_zzplurt/code/datums/outfit.dm b/modular_zzplurt/code/datums/outfit.dm index fb17a14121810..8482268df6074 100644 --- a/modular_zzplurt/code/datums/outfit.dm +++ b/modular_zzplurt/code/datums/outfit.dm @@ -1,15 +1,15 @@ /datum/outfit - ///Slot for underwear like boxers and panties + /// Slot for underwear like boxers and panties var/w_underwear = null - ///Slot for socks, yes, the thing that usually goes before your shoes + /// 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) + /// Slot for the undershirt (which is quite a foreign concept to me) var/w_shirt = null - ///Slot for the bra. + /// Slot for the bra. var/w_bra = null - ///Slot for the opposite ear. + /// Slot for the opposite ear. var/ears_extra = null - ///Slot for the part of your arms that isn't quite hands yet. + /// Slot for the part of your arms that isn't quite hands yet. var/wrists = null /datum/outfit/apply_fingerprints(mob/living/carbon/human/user) @@ -21,6 +21,8 @@ user.w_underwear.add_fingerprint(user, ignoregloves = TRUE) if(user.w_shirt) user.w_shirt.add_fingerprint(user, ignoregloves = TRUE) + if(user.w_bra) + user.w_bra.add_fingerprint(user, ignoregloves = TRUE) if(user.w_socks) user.w_socks.add_fingerprint(user, ignoregloves = TRUE) if(user.wrists) @@ -37,6 +39,8 @@ w_underwear = H.w_underwear.type if(H.w_shirt) w_shirt = H.w_shirt.type + if(H.w_bra) + w_bra = H.w_bra.type if(H.w_socks) w_socks = H.w_socks.type if(H.wrists) @@ -48,6 +52,7 @@ . = ..() . += w_underwear . += w_shirt + . += w_bra . += ears_extra . += wrists . += w_socks @@ -56,6 +61,7 @@ . = ..() .["w_underwear"] = w_underwear .["w_shirt"] = w_shirt + .["w_bra"] = w_bra .["ears_extra"] = ears_extra .["wrists"] = wrists .["w_socks"] = w_socks @@ -64,6 +70,7 @@ . = ..() w_underwear = target.w_underwear w_shirt = target.w_shirt + w_bra = target.w_bra wrists = target.wrists ears_extra = target.ears_extra w_socks = target.w_socks @@ -72,6 +79,7 @@ . = ..() w_underwear = text2path(outfit_data["w_underwear"]) w_shirt = text2path(outfit_data["w_shirt"]) + w_bra = text2path(outfit_data["w_bra"]) wrists = text2path(outfit_data["wrists"]) w_socks = text2path(outfit_data["w_socks"]) ears_extra = text2path(outfit_data["ears_extra"]) diff --git a/modular_zzplurt/code/game/objects/items.dm b/modular_zzplurt/code/game/objects/items.dm index 551fd4dd38c45..090c01b0e9728 100644 --- a/modular_zzplurt/code/game/objects/items.dm +++ b/modular_zzplurt/code/game/objects/items.dm @@ -9,16 +9,16 @@ var/mob/owner = loc var/flags = slot_flags // Extra inventory - if(flags & ITEM_SLOT_UNDERWEAR) + if((flags & ITEM_SLOT_UNDERWEAR) && (flags & ITEM_SLOT_EXTRA)) owner.update_worn_underwear() - if(flags & ITEM_SLOT_SOCKS) + if((flags & ITEM_SLOT_SOCKS) && (flags & ITEM_SLOT_EXTRA)) owner.update_worn_socks() - if(flags & ITEM_SLOT_SHIRT) + if((flags & ITEM_SLOT_SHIRT) && (flags & ITEM_SLOT_EXTRA)) owner.update_worn_shirt() - if(flags & ITEM_SLOT_BRA) + if((flags & ITEM_SLOT_BRA) && (flags & ITEM_SLOT_EXTRA)) owner.update_worn_bra() - if(flags & ITEM_SLOT_EARS) + if((flags & ITEM_SLOT_EARS) && (flags & ITEM_SLOT_EXTRA)) owner.update_worn_ears_extra() - if(flags & ITEM_SLOT_WRISTS) + if((flags & ITEM_SLOT_WRISTS) && (flags & ITEM_SLOT_EXTRA)) owner.update_worn_wrists() // diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/_species.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/_species.dm new file mode 100644 index 0000000000000..a6d1578431d18 --- /dev/null +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/_species.dm @@ -0,0 +1,47 @@ +/datum/species/can_equip(obj/item/I, slot, disable_warning, mob/living/carbon/human/H, bypass_equip_delay_self, ignore_equipped, indirect_action) + if(!(slot & ITEM_SLOT_EXTRA)) + //If it's an extra item it should only be handled in this override + if((I.slot_flags & ITEM_SLOT_EXTRA) && !(I.slot_flags & ITEM_SLOT_EARS & ~ITEM_SLOT_EXTRA)) + slot = NONE + return ..() + + if((no_equip_flags & slot) && (no_equip_flags & ITEM_SLOT_EXTRA) && !(I.is_mod_shell_component() && (modsuit_slot_exceptions & slot))) // SKYRAT EDIT ADDITION - ORIGINAL: if(no_equip_flags & slot) + if(!I.species_exception || !is_type_in_list(src, I.species_exception)) + return FALSE + + // if there's an item in the slot we want, fail + if(!ignore_equipped) + if(H.get_item_by_slot(slot)) + return FALSE + + // this check prevents us from equipping something to a slot it doesn't support, WITH the exceptions of storage slots (pockets, suit storage, and backpacks) + // we don't require having those slots defined in the item's slot_flags, so we'll rely on their own checks further down + if(!(I.slot_flags & (slot & ~ITEM_SLOT_EXTRA)) || !(I.slot_flags & ITEM_SLOT_EXTRA)) + var/excused = FALSE + // 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_HANDS)) + excused = TRUE + if(!excused) + return FALSE + + switch(slot) + if(ITEM_SLOT_WRISTS) + if(H.num_hands < 2) + return FALSE + return equip_delay_self_check(I, H, bypass_equip_delay_self) + if(ITEM_SLOT_EARS_RIGHT) + if(!H.get_bodypart(BODY_ZONE_HEAD)) + return FALSE + return equip_delay_self_check(I, H, bypass_equip_delay_self) + if(ITEM_SLOT_UNDERWEAR) + return equip_delay_self_check(I, H, bypass_equip_delay_self) + if(ITEM_SLOT_SOCKS) + 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) + + return FALSE //Unsupported slot 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 87700f6a52378..5675f042919c4 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 @@ -14,7 +14,7 @@ remove_overlay(UNDERWEAR_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_UNDERWEAR) + 1] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[21] inv.update_icon() if(istype(w_underwear, /obj/item/clothing/underwear/briefs)) @@ -24,7 +24,8 @@ if(update_obscured) update_obscured_slots(undies.flags_inv) - if((check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_UNDERWEAR) || underwear_hidden()) + var/obscured_slots = check_obscured_slots(transparent_protection = TRUE) + if(((obscured_slots & ITEM_SLOT_UNDERWEAR) && (obscured_slots & ITEM_SLOT_EXTRA)) || underwear_hidden()) return var/target_overlay = undies.icon_state @@ -87,7 +88,7 @@ remove_overlay(SHIRT_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SHIRT) + 1] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[23] inv.update_icon() if(istype(w_shirt, /obj/item/clothing/underwear/shirt)) @@ -97,7 +98,8 @@ if(update_obscured) update_obscured_slots(undershirt.flags_inv) - if((check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SHIRT) || undershirt_hidden()) + var/obscured_slots = check_obscured_slots(transparent_protection = TRUE) + if(((obscured_slots & ITEM_SLOT_SHIRT) && (obscured_slots & ITEM_SLOT_EXTRA)) || undershirt_hidden()) return var/target_overlay = undershirt.icon_state @@ -161,7 +163,7 @@ remove_overlay(BRA_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BRA) + 1] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[24] inv.update_icon() if(istype(w_bra, /obj/item/clothing/underwear/shirt/bra)) @@ -171,7 +173,8 @@ if(update_obscured) update_obscured_slots(bra.flags_inv) - if((check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_BRA) || bra_hidden()) + var/obscured_slots = check_obscured_slots(transparent_protection = TRUE) + if(((obscured_slots & ITEM_SLOT_BRA) && (obscured_slots & ITEM_SLOT_EXTRA)) || bra_hidden()) return var/target_overlay = bra.icon_state @@ -234,8 +237,8 @@ /mob/living/carbon/human/update_worn_wrists(update_obscured = TRUE) remove_overlay(WRISTS_LAYER) - if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1]) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1] + if(client && hud_used && hud_used.inv_slots[26]) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS & ~ITEM_SLOT_EXTRA) + 21] inv.update_icon() if(wrists) @@ -245,7 +248,8 @@ if(update_obscured) update_obscured_slots(worn_item.flags_inv) - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_GLOVES) + var/obscured_slots = check_obscured_slots(transparent_protection = TRUE) + if((obscured_slots & ITEM_SLOT_GLOVES) && (obscured_slots & ITEM_SLOT_EXTRA)) return var/icon_file = 'modular_zzplurt/icons/mob/clothing/wrists.dmi' @@ -272,7 +276,7 @@ return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_RIGHT) + 1] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[25] inv.update_icon() if(ears) @@ -282,7 +286,8 @@ if(update_obscured) update_obscured_slots(worn_item.flags_inv) - if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS_RIGHT) + var/obscured_slots = check_obscured_slots(transparent_protection = TRUE) + if((obscured_slots & ITEM_SLOT_EARS_RIGHT) && (obscured_slots & ITEM_SLOT_EXTRA)) return var/icon_file = 'icons/mob/clothing/ears.dmi' @@ -312,7 +317,7 @@ return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SOCKS) + 1] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[22] inv.update_icon() if(istype(w_socks, /obj/item/clothing/underwear/socks)) @@ -322,7 +327,8 @@ if(update_obscured) update_obscured_slots(worn_item.flags_inv) - if((check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SOCKS) || socks_hidden()) + var/obscured_slots = check_obscured_slots(transparent_protection = TRUE) + if(((obscured_slots & ITEM_SLOT_SOCKS) && (obscured_slots & ITEM_SLOT_EXTRA)) || socks_hidden()) return var/target_overlay = worn_item.icon_state 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 cac108f52a898..d8dd105664713 100644 --- a/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/inventory.dm @@ -42,6 +42,7 @@ w_underwear, w_socks, w_shirt, + w_bra, ) LAZYADD(., extra_body_slots) diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/life.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/life.dm index 10700f280439d..903663d5e7351 100644 --- a/modular_zzplurt/code/modules/mob/living/carbon/human/life.dm +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/life.dm @@ -10,6 +10,9 @@ if(w_shirt) if(w_shirt.max_heat_protection_temperature && w_shirt.max_heat_protection_temperature >= temperature) . |= w_shirt.heat_protection + if(w_bra) + if(w_bra.max_heat_protection_temperature && w_bra.max_heat_protection_temperature >= temperature) + . |= w_bra.heat_protection if(wrists) if(wrists.max_heat_protection_temperature && wrists.max_heat_protection_temperature >= temperature) . |= wrists.heat_protection diff --git a/modular_zzplurt/code/modules/mob/mob_update_icons.dm b/modular_zzplurt/code/modules/mob/mob_update_icons.dm index f8c317ca95421..c367c6ce57e00 100644 --- a/modular_zzplurt/code/modules/mob/mob_update_icons.dm +++ b/modular_zzplurt/code/modules/mob/mob_update_icons.dm @@ -1,14 +1,14 @@ /mob/update_clothing(slot_flags) . = ..() - if(slot_flags & ITEM_SLOT_WRISTS) + if((slot_flags & ITEM_SLOT_WRISTS) && (slot_flags & ITEM_SLOT_EXTRA)) update_worn_wrists() - if(slot_flags & ITEM_SLOT_SOCKS) + if((slot_flags & ITEM_SLOT_SOCKS) && (slot_flags & ITEM_SLOT_EXTRA)) update_worn_socks() - if(slot_flags & ITEM_SLOT_UNDERWEAR) + if((slot_flags & ITEM_SLOT_UNDERWEAR) && (slot_flags & ITEM_SLOT_EXTRA)) update_worn_underwear() - if(slot_flags & ITEM_SLOT_SHIRT) + if((slot_flags & ITEM_SLOT_SHIRT) && (slot_flags & ITEM_SLOT_EXTRA)) update_worn_shirt() - if(slot_flags & ITEM_SLOT_BRA) + if((slot_flags & ITEM_SLOT_BRA) && (slot_flags & ITEM_SLOT_EXTRA)) update_worn_bra() /mob/update_obscured_slots(obscured_flags) diff --git a/tgstation.dme b/tgstation.dme index 4ddb9d5931541..bb79f1f1728c7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -511,6 +511,7 @@ #include "code\__DEFINES\~~bubber_defines\research\techweb_nodes.dm" #include "code\__DEFINES\~~~splurt_defines\hud.dm" #include "code\__DEFINES\~~~splurt_defines\intents.dm" +#include "code\__DEFINES\~~~splurt_defines\inventory.dm" #include "code\__DEFINES\~~~splurt_defines\keybinding.dm" #include "code\__DEFINES\~~~splurt_defines\mobs.dm" #include "code\__DEFINES\~~~splurt_defines\species_clothing_paths.dm" @@ -9211,6 +9212,7 @@ #include "modular_zzplurt\code\modules\mob\dead\new_player\new_player.dm" #include "modular_zzplurt\code\modules\mob\living\living.dm" #include "modular_zzplurt\code\modules\mob\living\living_defines.dm" +#include "modular_zzplurt\code\modules\mob\living\carbon\human\_species.dm" #include "modular_zzplurt\code\modules\mob\living\carbon\human\human_defines.dm" #include "modular_zzplurt\code\modules\mob\living\carbon\human\human_stripping.dm" #include "modular_zzplurt\code\modules\mob\living\carbon\human\human_update_icons.dm" From 26649cec734090ee32783c7fa3872af1fd068ad4 Mon Sep 17 00:00:00 2001 From: Mosley <93835010+MosleyTheMalO@users.noreply.github.com> Date: Sun, 4 Aug 2024 14:55:50 -0500 Subject: [PATCH 028/117] works? perhaps? --- modular_zzplurt/code/_onclick/hud/human.dm | 2 +- .../modules/mob/living/carbon/human/_species.dm | 4 ++-- .../mob/living/carbon/human/human_update_icons.dm | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modular_zzplurt/code/_onclick/hud/human.dm b/modular_zzplurt/code/_onclick/hud/human.dm index 8d73f10d8e366..293d4bb751a4c 100644 --- a/modular_zzplurt/code/_onclick/hud/human.dm +++ b/modular_zzplurt/code/_onclick/hud/human.dm @@ -1,4 +1,5 @@ /datum/hud/human/New(mob/living/carbon/human/owner) + . = ..() var/atom/movable/screen/using var/atom/movable/screen/inventory/inv_box @@ -73,7 +74,6 @@ if(inv.slot_id) inv_slots[TOBITSHIFT(inv.slot_id & ~ITEM_SLOT_EXTRA) + 21] = inv inv.update_appearance() - . = ..() /atom/movable/screen/human/toggle/extra name = "toggle extra" diff --git a/modular_zzplurt/code/modules/mob/living/carbon/human/_species.dm b/modular_zzplurt/code/modules/mob/living/carbon/human/_species.dm index a6d1578431d18..5587240e1d09c 100644 --- a/modular_zzplurt/code/modules/mob/living/carbon/human/_species.dm +++ b/modular_zzplurt/code/modules/mob/living/carbon/human/_species.dm @@ -1,7 +1,7 @@ /datum/species/can_equip(obj/item/I, slot, disable_warning, mob/living/carbon/human/H, bypass_equip_delay_self, ignore_equipped, indirect_action) if(!(slot & ITEM_SLOT_EXTRA)) - //If it's an extra item it should only be handled in this override - if((I.slot_flags & ITEM_SLOT_EXTRA) && !(I.slot_flags & ITEM_SLOT_EARS & ~ITEM_SLOT_EXTRA)) + //If it's an extra item it should only be handled in this override. THIS CHECK WILL ONLY WORK AS LONG AS TG DOESN'T USE SLOTS UNDER 1<<6 FOR ANY OF THESE SLOTS + if((I.slot_flags & ITEM_SLOT_EXTRA) && !((I.slot_flags & slot & ITEM_SLOT_EARS & ~ITEM_SLOT_EXTRA) || (slot & ITEM_SLOT_RPOCKET|ITEM_SLOT_LPOCKET|ITEM_SLOT_SUITSTORE|ITEM_SLOT_BACKPACK|ITEM_SLOT_HANDS))) slot = NONE return ..() 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 5675f042919c4..665041acf9145 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 @@ -14,7 +14,7 @@ remove_overlay(UNDERWEAR_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[21] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_UNDERWEAR & ~ITEM_SLOT_EXTRA) + 21] inv.update_icon() if(istype(w_underwear, /obj/item/clothing/underwear/briefs)) @@ -88,7 +88,7 @@ remove_overlay(SHIRT_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[23] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SHIRT & ~ITEM_SLOT_EXTRA) + 21] inv.update_icon() if(istype(w_shirt, /obj/item/clothing/underwear/shirt)) @@ -163,7 +163,7 @@ remove_overlay(BRA_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[24] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BRA & ~ITEM_SLOT_EXTRA) + 21] inv.update_icon() if(istype(w_bra, /obj/item/clothing/underwear/shirt/bra)) @@ -237,7 +237,7 @@ /mob/living/carbon/human/update_worn_wrists(update_obscured = TRUE) remove_overlay(WRISTS_LAYER) - if(client && hud_used && hud_used.inv_slots[26]) + if(client && hud_used) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS & ~ITEM_SLOT_EXTRA) + 21] inv.update_icon() @@ -276,12 +276,12 @@ return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[25] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_RIGHT & ~ITEM_SLOT_EXTRA) + 21] inv.update_icon() if(ears) var/obj/item/worn_item = ears - update_hud_ears(worn_item) + update_hud_ears_extra(worn_item) if(update_obscured) update_obscured_slots(worn_item.flags_inv) @@ -317,7 +317,7 @@ return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[22] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SOCKS & ~ITEM_SLOT_EXTRA) + 21] inv.update_icon() if(istype(w_socks, /obj/item/clothing/underwear/socks)) From a87c667d2f4133028913bbdb3bba299ec671781f Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Thu, 8 Aug 2024 20:18:23 +0300 Subject: [PATCH 029/117] Circuit UI scale no longer suffers from FPEs and doesnt get covered by component menu (#85653) ## About The Pull Request Added rounding to 1 number after point to prevent FPEs and made the scale bar shrink when component menu gets open as to prevent it from getting covered by the menu, which made it impossible to see or increase current scale ## Changelog :cl: fix: Circuit UI scale no longer has weird rounding fix: Circuit UI no longer gets covered by components menu /:cl: --- .../tgui/components/InfinitePlane.jsx | 37 ++++++++++--------- .../interfaces/IntegratedCircuit/index.jsx | 1 + 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/tgui/packages/tgui/components/InfinitePlane.jsx b/tgui/packages/tgui/components/InfinitePlane.jsx index 5277f2ad79682..3be047f1a0361 100644 --- a/tgui/packages/tgui/components/InfinitePlane.jsx +++ b/tgui/packages/tgui/components/InfinitePlane.jsx @@ -123,6 +123,7 @@ export class InfinitePlane extends Component { imageWidth, initialLeft = 0, initialTop = 0, + scalePadding, ...rest } = this.props; const { left, top, zoom } = this.state; @@ -169,23 +170,25 @@ export class InfinitePlane extends Component { {children} - - -