diff --git a/code/__DEFINES/combat/block.dm b/code/__DEFINES/combat/block.dm index bc85947d71..b8d9f9f7e0 100644 --- a/code/__DEFINES/combat/block.dm +++ b/code/__DEFINES/combat/block.dm @@ -73,8 +73,11 @@ // THESE MUST NEVER BE 0! Block code uses ! instead of isnull for the speed boost. #define BLOCK_PRIORITY_ACTIVE_BLOCK 200 #define BLOCK_PRIORITY_HELD_ITEM 100 -#define BLOCK_PRIORITY_CLOTHING 50 #define BLOCK_PRIORITY_WEAR_SUIT 75 +//SKYRAT EDIT +#define BLOCK_PRIORITY_CLOTHING 50 #define BLOCK_PRIORITY_UNIFORM 25 +#define BLOCK_PRIORITY_UNDERWEAR 20 +//SKYRAT EDIT END #define BLOCK_PRIORITY_DEFAULT BLOCK_PRIORITY_HELD_ITEM diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 649e0a029b..3f8a85d8c0 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -23,6 +23,12 @@ #define ITEM_SLOT_HANDS (1<<14) #define ITEM_SLOT_BACKPACK (1<<15) #define ITEM_SLOT_SUITSTORE (1<<16) +//skyrat edit +#define ITEM_SLOT_UNDERWEAR (1<<17) +#define ITEM_SLOT_SOCKS (1<<18) +#define ITEM_SLOT_SHIRT (1<<19) +#define ITEM_SLOT_WRISTS (1<<20) +// //SLOTS #define SLOT_BACK 1 @@ -32,7 +38,7 @@ //SLOT_HANDS as a slot will pick ANY available hand #define SLOT_BELT 5 #define SLOT_WEAR_ID 6 -#define SLOT_EARS 7 +#define SLOT_EARS_LEFT 7 //skyrat edit #define SLOT_GLASSES 8 #define SLOT_GLOVES 9 #define SLOT_NECK 10 @@ -46,9 +52,16 @@ #define SLOT_IN_BACKPACK 18 #define SLOT_LEGCUFFED 19 #define SLOT_GENERC_DEXTROUS_STORAGE 20 +//skyrat edit +#define SLOT_W_UNDERWEAR 21 +#define SLOT_W_SOCKS 22 +#define SLOT_W_SHIRT 23 +#define SLOT_EARS_RIGHT 24 +#define SLOT_WRISTS 25 +// -#define SLOTS_AMT 20 // Keep this up to date! +#define SLOTS_AMT 25 // Keep this up to date! //skyrat edit - extra slots //I hate that this has to exist /proc/slotdefine2slotbit(slotdefine) //Keep this up to date with the value of SLOT BITMASKS and SLOTS (the two define sections above) @@ -64,12 +77,20 @@ . = ITEM_SLOT_BELT if(SLOT_WEAR_ID) . = ITEM_SLOT_ID - if(SLOT_EARS) + //skyrat edit + if(SLOT_EARS_RIGHT) . = ITEM_SLOT_EARS + if(SLOT_EARS_LEFT) + . = ITEM_SLOT_EARS + // if(SLOT_GLASSES) . = ITEM_SLOT_EYES if(SLOT_GLOVES) . = ITEM_SLOT_GLOVES + //skyrat edit + if(SLOT_WRISTS) + . = ITEM_SLOT_WRISTS + // if(SLOT_HEAD) . = ITEM_SLOT_HEAD if(SLOT_SHOES) @@ -86,6 +107,14 @@ . = ITEM_SLOT_BACKPACK if(SLOT_S_STORE) . = ITEM_SLOT_SUITSTORE + //skyrat edit + if(SLOT_W_UNDERWEAR) + . = ITEM_SLOT_UNDERWEAR + if(SLOT_W_SOCKS) + . = ITEM_SLOT_SOCKS + if(SLOT_W_SHIRT) + . = ITEM_SLOT_SHIRT + // //Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. @@ -103,6 +132,10 @@ #define HIDETAUR (1<<11) //gotta hide that snowflake #define HIDESNOUT (1<<12) //or do we actually hide our snoots #define HIDEACCESSORY (1<<13) //hides the jumpsuit accessory. +//skyrat 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) diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm index 767894050d..655f800b15 100644 --- a/code/__DEFINES/loadout.dm +++ b/code/__DEFINES/loadout.dm @@ -66,4 +66,12 @@ #define LOADOUT_LIMB_PROSTHETIC "Prosthetic" #define LOADOUT_LIMB_AMPUTATED "Amputated" -#define LOADOUT_LIMBS list(LOADOUT_LIMB_NORMAL,LOADOUT_LIMB_PROSTHETIC,LOADOUT_LIMB_AMPUTATED) //you can amputate your legs/arms though \ No newline at end of file +#define LOADOUT_LIMBS list(LOADOUT_LIMB_NORMAL,LOADOUT_LIMB_PROSTHETIC,LOADOUT_LIMB_AMPUTATED) //you can amputate your legs/arms though + +//Special thing that i had to make it myself because skyrat uses old loadout +//Underwear Sandcode changes +#define LOADOUT_CATEGORY_GENERAL_UNDER "General Underwear" +#define LOADOUT_SUBCATEGORY_UNDERWEAR "Underwear" +#define LOADOUT_SUBCATEGORY_SHIRT "Shirt" +#define LOADOUT_SUBCATEGORY_SOCKS "Socks" +// diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index ec343b4893..b6024f72aa 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -30,23 +30,30 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s //Human Overlays Indexes///////// //LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS -#define MUTATIONS_LAYER 33 //mutations. Tk headglows, cold resistance glow, etc -#define GENITALS_BEHIND_LAYER 32 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer -#define BODY_BEHIND_LAYER 31 //certain mutantrace features (tail when looking south) that must appear behind the body parts -#define BODYPARTS_LAYER 30 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag -#define MARKING_LAYER 29 //Matrixed body markings because clashing with snouts? -#define BODY_ADJ_LAYER 28 //certain mutantrace features (snout, body markings) that must appear above the body parts -#define GENITALS_FRONT_LAYER 27 //Draws some genitalia above clothes and the TAUR body if need be. -#define BODY_LAYER 26 //underwear, undershirts, socks, eyes, lips(makeup) -#define BODY_ADJ_UPPER_LAYER 25 -#define FRONT_MUTATIONS_LAYER 24 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) -#define DAMAGE_LAYER 23 //damage indicators (cuts and burns) -#define UNIFORM_LAYER 22 -#define ID_LAYER 21 -#define HANDS_PART_LAYER 20 -#define SHOES_LAYER 19 -#define GLOVES_LAYER 18 -#define EARS_LAYER 17 +#define MUTATIONS_LAYER 40 //mutations. Tk headglows, cold resistance glow, etc +#define GENITALS_BEHIND_LAYER 39 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer +#define BODY_BEHIND_LAYER 38 //certain mutantrace features (tail when looking south) that must appear behind the body parts +#define BODYPARTS_LAYER 37 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag +#define MARKING_LAYER 36 //Matrixed body markings because clashing with snouts? +#define BODY_ADJ_LAYER 35 //certain mutantrace features (snout, body markings) that must appear above the body parts +#define GENITALS_FRONT_LAYER 34 //Draws some genitalia above clothes and the TAUR body if need be. +#define BODY_LAYER 33 //underwear, undershirts, socks, eyes, lips(makeup) +#define BODY_ADJ_UPPER_LAYER 32 +#define FRONT_MUTATIONS_LAYER 31 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) +#define UNDERWEAR_LAYER 30 +#define SOCKS_LAYER 29 +#define SHIRT_LAYER 28 +#define UNIFORM_LAYER 27 +#define ID_LAYER 26 +#define HANDS_PART_LAYER 25 +#define DAMAGE_LAYER 24 //damage indicators (cuts and burns) +#define LOWER_MEDICINE_LAYER 23 //Medicine, like gauze and tourniquets +#define MEDICINE_LAYER 22 //Medicine, like gauze and tourniquets +#define SHOES_LAYER 21 +#define GLOVES_LAYER 20 +#define WRISTS_LAYER 19 +#define EAR_RIGHT_LAYER 18 +#define EAR_LEFT_LAYER 17 #define SUIT_LAYER 16 #define GENITALS_EXPOSED_LAYER 15 #define GLASSES_LAYER 14 @@ -63,7 +70,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s #define HANDS_LAYER 3 #define BODY_FRONT_LAYER 2 #define FIRE_LAYER 1 //If you're on fire -#define TOTAL_LAYERS 33 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; +#define TOTAL_LAYERS 40 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; //Human Overlay Index Shortcuts for alternate_worn_layer, layers //Because I *KNOW* somebody will think layer+1 means "above" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 9c39446a67..3f291c3de5 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -280,6 +280,12 @@ #define OFFSET_HAIR "hair" #define OFFSET_FHAIR "fhair" #define OFFSET_MUTPARTS "mutantparts" +//skyrat edit +#define OFFSET_UNDERWEAR "underwear" +#define OFFSET_SOCKS "socks" +#define OFFSET_SHIRT "shirt" +#define OFFSET_WRISTS "wrist" +// //MINOR TWEAKS/MISC #define AGE_MIN 18 //youngest a character can be //CITADEL EDIT - 17 --> 18 diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index 453650108c..dfca7c5f42 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -131,7 +131,7 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE) L = get_equipped_items() for(var/A in L) var/obj/item/I = A - if(I.body_parts_covered & GROIN) + if(istype(I) && (I.body_parts_covered & GROIN)) return FALSE return TRUE diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 1119ef44ed..bf9e415699 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -7,12 +7,14 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, GLOB.hair_styles_list, GLOB.hair_styles_male_list, GLOB.hair_styles_female_list) //facial hair init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, GLOB.facial_hair_styles_list, GLOB.facial_hair_styles_male_list, GLOB.facial_hair_styles_female_list) + /* skyrat edit - actual underwear items now //underwear init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/bottom, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f) //undershirt init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/top, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f) //socks init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list) + */ //bodypart accessories (blizzard intensifies) init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index bbbf99c9de..24ee84595f 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -413,10 +413,10 @@ if(SLOT_BACK, SLOT_WEAR_SUIT, SLOT_W_UNIFORM, SLOT_BELT, SLOT_WEAR_ID) return BODY_ZONE_CHEST - if(SLOT_GLOVES, SLOT_HANDS, SLOT_HANDCUFFED) + if(SLOT_GLOVES, SLOT_HANDS, SLOT_HANDCUFFED, SLOT_WRISTS) //SKYRAT EDIT return pick(BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND) - if(SLOT_HEAD, SLOT_NECK, SLOT_NECK, SLOT_EARS) + if(SLOT_HEAD, SLOT_NECK, SLOT_NECK, SLOT_EARS_LEFT, SLOT_EARS_RIGHT) //skyrat edit return BODY_ZONE_HEAD if(SLOT_WEAR_MASK) @@ -658,8 +658,20 @@ return "Hands" if(SLOT_BELT) return "Belt" - if(SLOT_EARS) - return "Ears" + //skyrat edit + if(SLOT_EARS_LEFT) + return "Left ear" + if(SLOT_EARS_RIGHT) + return "Right ear" + if(SLOT_W_UNDERWEAR) + return "Underwear" + if(SLOT_W_SOCKS) + return "Socks" + if(SLOT_W_SHIRT) + return "Shirt" + if(SLOT_WRISTS) + return "Wrist" + // if(SLOT_GLASSES) return "Glasses" if(SLOT_GLOVES) diff --git a/code/_globalvars/lists/loadout_categories.dm b/code/_globalvars/lists/loadout_categories.dm index 0f0ac52214..ef744ea2f1 100644 --- a/code/_globalvars/lists/loadout_categories.dm +++ b/code/_globalvars/lists/loadout_categories.dm @@ -9,5 +9,6 @@ GLOBAL_LIST_INIT(loadout_categories, list( LOADOUT_CATEGORY_SHOES = LOADOUT_SUBCATEGORIES_NONE, LOADOUT_CATEGORY_GLOVES = LOADOUT_SUBCATEGORIES_NONE, LOADOUT_CATEGORY_GLASSES = LOADOUT_SUBCATEGORIES_NONE, - LOADOUT_CATEGORY_DONATOR = LOADOUT_SUBCATEGORIES_NONE + LOADOUT_CATEGORY_DONATOR = LOADOUT_SUBCATEGORIES_NONE, + LOADOUT_CATEGORY_GENERAL_UNDER = list(LOADOUT_SUBCATEGORY_UNDERWEAR, LOADOUT_SUBCATEGORY_SHIRT, LOADOUT_SUBCATEGORY_SOCKS) //DIDN'T NOTICE THIS )) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 467c67e0c3..fdaad20084 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -150,12 +150,21 @@ #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" +//skyrat slots +#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" +// + //Ghosts #define ui_ghost_jumptomob "SOUTH:6,CENTER-2:24" diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 91bed044b7..7a3277a5a0 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -15,6 +15,26 @@ GLOBAL_LIST_INIT(available_ui_styles, list( "Liteweb" = 'sandcode/icons/mob/screen_liteweb.dmi' )) +//skyrat edit +GLOBAL_LIST_INIT(modular_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' +)) +// + +//skyrat edit +/proc/ui_style_modular(ui_style) + if(isfile(ui_style)) + return GLOB.modular_ui_styles[ui_style] || GLOB.modular_ui_styles[GLOB.modular_ui_styles[1]] + else + return GLOB.modular_ui_styles[ui_style] || GLOB.modular_ui_styles[GLOB.modular_ui_styles[1]] +// + /proc/ui_style2icon(ui_style) return GLOB.available_ui_styles[ui_style] || GLOB.available_ui_styles[GLOB.available_ui_styles[1]] @@ -24,6 +44,9 @@ GLOBAL_LIST_INIT(available_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 + //skyrat edit + 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/obj/screen/ling/chems/lingchemdisplay @@ -45,6 +68,9 @@ GLOBAL_LIST_INIT(available_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 + //skyrat edit + var/list/extra_inventory = list() //equipped item screens that don't show up even if using the initial toggle + // var/list/obj/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...) var/list/screenoverlays = list() //the screen objects used as whole screen overlays (flash, damageoverlay, etc...) @@ -95,6 +121,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list( pull_icon = null QDEL_LIST(toggleable_inventory) + //skyrat edit + QDEL_LIST(extra_inventory) + // QDEL_LIST(hotkeybuttons) throw_icon = null QDEL_LIST(infodisplay) @@ -147,6 +176,10 @@ GLOBAL_LIST_INIT(available_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 + //skyrat edit + 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) @@ -163,6 +196,10 @@ GLOBAL_LIST_INIT(available_ui_styles, list( screenmob.client.screen -= static_inventory if(toggleable_inventory.len) screenmob.client.screen -= toggleable_inventory + //skyrat edit + if(extra_inventory.len) + screenmob.client.screen -= extra_inventory + // if(hotkeybuttons.len) screenmob.client.screen -= hotkeybuttons if(infodisplay.len) @@ -183,6 +220,10 @@ GLOBAL_LIST_INIT(available_ui_styles, list( screenmob.client.screen -= static_inventory if(toggleable_inventory.len) screenmob.client.screen -= toggleable_inventory + //skyrat edit + if(extra_inventory.len) + screenmob.client.screen -= extra_inventory + // if(hotkeybuttons.len) screenmob.client.screen -= hotkeybuttons if(infodisplay.len) @@ -228,6 +269,11 @@ GLOBAL_LIST_INIT(available_ui_styles, list( /datum/hud/proc/hidden_inventory_update() return +//skyrat edit +/datum/hud/proc/extra_inventory_update() + return +// + /datum/hud/proc/persistent_inventory_update(mob/viewer) if(!mymob) return @@ -237,7 +283,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list( if (initial(ui_style) || ui_style == new_ui_style) return - for(var/atom/item in static_inventory + toggleable_inventory + hotkeybuttons + infodisplay + screenoverlays + inv_slots) + for(var/atom/item in static_inventory + toggleable_inventory + extra_inventory + hotkeybuttons + infodisplay + screenoverlays + inv_slots) //skyrat edit 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 04141becf2..fd72dc9efa 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -17,11 +17,45 @@ if(usr.hud_used.inventory_shown && targetmob.hud_used) usr.hud_used.inventory_shown = FALSE usr.client.screen -= targetmob.hud_used.toggleable_inventory + //SKYRAT EDIT + usr.client.screen -= targetmob.hud_used.extra_inventory + //SKYRAT EDIT END else usr.hud_used.inventory_shown = TRUE usr.client.screen += targetmob.hud_used.toggleable_inventory + //SKYRAT EDIT + if(usr.hud_used.extra_shown) + usr.client.screen += targetmob.hud_used.extra_inventory + //SKYRAT EDIT END targetmob.hud_used.hidden_inventory_update(usr) + //SKYRAT EDIT + targetmob.hud_used.extra_inventory_update(usr) + //SKYRAT EDIT END + +//skyrat edit +/obj/screen/human/toggle/extra + name = "toggle extra" + icon_state = "toggle_extra" + +/obj/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) +// /obj/screen/human/equip name = "equip" @@ -288,11 +322,11 @@ toggleable_inventory += inv_box inv_box = new /obj/screen/inventory() - inv_box.name = "ears" + inv_box.name = "left ear" //skyrat edit inv_box.icon = ui_style inv_box.icon_state = "ears" inv_box.screen_loc = ui_ears - inv_box.slot_id = SLOT_EARS + inv_box.slot_id = SLOT_EARS_LEFT //skyrat edit toggleable_inventory += inv_box inv_box = new /obj/screen/inventory() @@ -311,6 +345,54 @@ inv_box.slot_id = SLOT_SHOES toggleable_inventory += inv_box + //skyrat edit + using = new /obj/screen/human/toggle/extra() + using.icon = ui_style_modular(ui_style) + using.screen_loc = ui_inventory_extra + using.hud = src + toggleable_inventory += using + + inv_box = new /obj/screen/inventory() + inv_box.name = "underwear" + inv_box.icon = ui_style_modular(ui_style) + inv_box.icon_state = "underwear" + inv_box.screen_loc = ui_boxers + inv_box.slot_id = SLOT_W_UNDERWEAR //skyrat edit + extra_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "socks" + inv_box.icon = ui_style_modular(ui_style) + inv_box.icon_state = "socks" + inv_box.screen_loc = ui_socks + inv_box.slot_id = SLOT_W_SOCKS //skyrat edit + extra_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "shirt" + inv_box.icon = ui_style_modular(ui_style) + inv_box.icon_state = "shirt" + inv_box.screen_loc = ui_shirt + inv_box.slot_id = SLOT_W_SHIRT //skyrat edit + extra_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "right ear" + inv_box.icon = ui_style_modular(ui_style) + inv_box.icon_state = "ears_extra" + inv_box.screen_loc = ui_ears_extra + inv_box.slot_id = SLOT_EARS_RIGHT //skyrat edit + extra_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "wrists" + inv_box.icon = ui_style_modular(ui_style) + inv_box.icon_state = "wrists" + inv_box.screen_loc = ui_wrists + inv_box.slot_id = SLOT_WRISTS + extra_inventory += inv_box + // + inv_box = new /obj/screen/inventory() inv_box.name = "belt" inv_box.icon = ui_style @@ -385,7 +467,7 @@ zone_select.update_icon() static_inventory += zone_select - for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) //skyrat edit if(inv.slot_id) inv.hud = src inv_slots[inv.slot_id] = inv @@ -400,7 +482,7 @@ if(!istype(H) || !H.dna.species) return var/datum/species/S = H.dna.species - for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) //skyrat edit if(inv.slot_id) if(inv.slot_id in S.no_equip) inv.alpha = 128 @@ -454,6 +536,42 @@ if(H.head) screenmob.client.screen -= H.head +//skyrat edit +/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) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 126cc18907..80f93de4f1 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -187,7 +187,6 @@ user.swap_hand(held_index) return TRUE - /obj/screen/drop name = "drop" icon = 'icons/mob/screen_midnight.dmi' diff --git a/code/controllers/subsystem/dcs.dm b/code/controllers/subsystem/dcs.dm index 3243a8d8c8..b42c6ed79d 100644 --- a/code/controllers/subsystem/dcs.dm +++ b/code/controllers/subsystem/dcs.dm @@ -8,6 +8,10 @@ PROCESSING_SUBSYSTEM_DEF(dcs) comp_lookup = SSdcs.comp_lookup /datum/controller/subsystem/processing/dcs/proc/GetElement(list/arguments) + //skyrat edit + if(!istype(arguments) || !arguments.len) + return + // var/datum/element/eletype = arguments[1] var/element_id = eletype diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 4f59992ace..7eaec101a3 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -689,6 +689,11 @@ SUBSYSTEM_DEF(job) if(!permitted) continue var/obj/item/I = new G.path + //skyrat edit + if(G.has_colors) + if(the_mob.client.prefs.color_gear[G.name]) + I.color = the_mob.client.prefs.color_gear[G.name] + // if(!M.equip_to_slot_if_possible(I, G.slot, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // If the job's dresscode compliant, try to put it in its slot, first if(iscarbon(M)) var/mob/living/carbon/C = M diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm index d138cf1971..f832d748f6 100644 --- a/code/datums/components/caltrop.dm +++ b/code/datums/components/caltrop.dm @@ -48,6 +48,11 @@ var/damage = rand(min_damage, max_damage) if(HAS_TRAIT(H, TRAIT_LIGHT_STEP)) damage *= 0.75 + //skyrat edit + if(H.w_socks) + if(H.w_socks.body_parts_covered & FEET) + damage *= 0.75 + // H.apply_damage(damage, BRUTE, picked_def_zone, wound_bonus = CANT_WOUND) if(cooldown < world.time - 10) //cooldown to avoid message spam. diff --git a/code/datums/components/explodable.dm b/code/datums/components/explodable.dm index 2e5834c025..f5c8bf1642 100644 --- a/code/datums/components/explodable.dm +++ b/code/datums/components/explodable.dm @@ -77,7 +77,7 @@ equipment_items += list(C.head, C.wear_mask, C.back, C.gloves, C.shoes, C.glasses, C.ears) if(ishuman(C)) var/mob/living/carbon/human/H = C - equipment_items += list(H.wear_suit, H.w_uniform, H.belt, H.s_store, H.wear_id) + equipment_items += list(H.wear_suit, H.w_uniform, H.belt, H.s_store, H.wear_id, H.w_socks, H.w_underwear, H.w_shirt, H.ears_extra) //skyrat edit for(var/bp in equipment_items) if(!bp) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index a5f9271f4b..bd6c25c436 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -254,13 +254,16 @@ if(isnull(T.wear_suit) && isnull(T.w_uniform)) // who honestly puts all of their effort into tackling a naked guy? defense_mod += 2 + //skyrat edit + if(isnull(T.w_underwear) && isnull(T.w_socks) && isnull(T.w_shirt)) + defense_mod += 1 + // if(suit_slot && (istype(suit_slot,/obj/item/clothing/suit/space/hardsuit))) defense_mod += 1 if(T.is_shove_knockdown_blocked()) // riot armor and such defense_mod += 5 if(T.is_holding_item_of_type(/obj/item/shield)) defense_mod += 2 - if(islizard(T)) if(!T.getorganslot(ORGAN_SLOT_TAIL)) // lizards without tails are off-balance defense_mod -= 1 diff --git a/code/datums/elements/cleaning.dm b/code/datums/elements/cleaning.dm index d86fe22632..d7d8e66179 100644 --- a/code/datums/elements/cleaning.dm +++ b/code/datums/elements/cleaning.dm @@ -37,6 +37,24 @@ SEND_SIGNAL(cleaned_human.w_uniform, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) cleaned_human.w_uniform.clean_blood() cleaned_human.update_inv_w_uniform() + //skyrat edit + else if(cleaned_human.w_underwear) + SEND_SIGNAL(cleaned_human.w_underwear, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + cleaned_human.w_underwear.clean_blood() + cleaned_human.update_inv_w_underwear() + else if(cleaned_human.w_socks) + SEND_SIGNAL(cleaned_human.w_socks, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + cleaned_human.w_socks.clean_blood() + cleaned_human.update_inv_w_socks() + else if(cleaned_human.w_shirt) + SEND_SIGNAL(cleaned_human.w_shirt, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + cleaned_human.w_shirt.clean_blood() + cleaned_human.update_inv_w_shirt() + else if(cleaned_human.wrists) + SEND_SIGNAL(cleaned_human.wrists, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + cleaned_human.w_shirt.clean_blood() + cleaned_human.update_inv_wrists() + // if(cleaned_human.shoes) SEND_SIGNAL(cleaned_human.shoes, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) cleaned_human.shoes.clean_blood() diff --git a/code/datums/elements/earhealing.dm b/code/datums/elements/earhealing.dm index 91c2120fc2..b414dd2eef 100644 --- a/code/datums/elements/earhealing.dm +++ b/code/datums/elements/earhealing.dm @@ -19,7 +19,7 @@ user_by_item -= target /datum/element/earhealing/proc/equippedChanged(datum/source, mob/living/carbon/user, slot) - if(slot == SLOT_EARS && istype(user)) + if(((slot == SLOT_EARS_LEFT) || (slot == SLOT_EARS_RIGHT)) && istype(user)) //skyrat edit user_by_item[source] = user else user_by_item -= source diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index da379b9851..98bd0afcf4 100755 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -28,6 +28,14 @@ var/can_be_admin_equipped = TRUE // Set to FALSE if your outfit requires runtime parameters var/list/chameleon_extras //extra types for chameleon outfit changes, mostly guns + //skyrat edit + var/underwear = null + var/socks = null + var/shirt = null + var/ears_extra = null + var/wrists = null + // + /datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) //to be overridden for customization depending on client prefs,species etc return @@ -59,13 +67,25 @@ if(neck) H.equip_to_slot_or_del(new neck(H),SLOT_NECK) if(ears) - H.equip_to_slot_or_del(new ears(H),SLOT_EARS) + H.equip_to_slot_or_del(new ears(H),SLOT_EARS_LEFT) //skyrat edit if(glasses) H.equip_to_slot_or_del(new glasses(H),SLOT_GLASSES) if(id) H.equip_to_slot_or_del(new id(H),SLOT_WEAR_ID) if(suit_store) H.equip_to_slot_or_del(new suit_store(H),SLOT_S_STORE) + //skyrat edit + if(ears_extra) + H.equip_to_slot_or_del(new ears(H),SLOT_EARS_RIGHT) + if(underwear) + H.equip_to_slot_or_del(new underwear(H),SLOT_W_UNDERWEAR) + if(socks) + H.equip_to_slot_or_del(new socks(H),SLOT_W_SOCKS) + if(shirt) + H.equip_to_slot_or_del(new shirt(H),SLOT_W_SHIRT) + if(wrists) + H.equip_to_slot_or_del(new wrists(H),SLOT_WRISTS) + // if(accessory) var/obj/item/clothing/under/U = H.w_uniform @@ -141,6 +161,18 @@ H.shoes.add_fingerprint(H,1) if(H.gloves) H.gloves.add_fingerprint(H,1) + //skyrat edit + if(H.wrists) + H.wrists.add_fingerprint(H,1) + if(H.w_socks) + H.w_socks.add_fingerprint(H,1) + if(H.w_underwear) + H.w_underwear.add_fingerprint(H,1) + if(H.w_shirt) + H.w_shirt.add_fingerprint(H,1) + if(H.ears_extra) + H.ears_extra.add_fingerprint(H,1) + // if(H.ears) H.ears.add_fingerprint(H,1) if(H.glasses) @@ -160,7 +192,7 @@ return 1 /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, underwear, socks, shirt, ears_extra, suit, back, belt, gloves, wrists, shoes, head, mask, neck, ears, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand) //skyrat edit types += chameleon_extras listclearnulls(types) return types diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 62d7512e29..2b08ad6c18 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -576,6 +576,20 @@ else if(w_uniform) w_uniform.add_blood_DNA(blood_dna, diseases) update_inv_w_uniform() + //skyrat edit + else if(w_underwear) + w_underwear.add_blood_DNA(blood_dna, diseases) + update_inv_w_underwear() + else if(w_socks) + w_socks.add_blood_DNA(blood_dna, diseases) + update_inv_w_socks() + else if(w_shirt) + w_shirt.add_blood_DNA(blood_dna, diseases) + update_inv_w_shirt() + else if(wrists) + wrists.add_blood_DNA(blood_dna, diseases) + update_inv_wrists() + // if(gloves) var/obj/item/clothing/gloves/G = gloves G.add_blood_DNA(blood_dna, diseases) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 8029685bf7..2f4cb84944 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,7 +1,7 @@ GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")) -GLOBAL_LIST_INIT(slots, list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")) -GLOBAL_LIST_INIT(slot2slot, list("head" = SLOT_HEAD, "wear_mask" = SLOT_WEAR_MASK, "neck" = SLOT_NECK, "back" = SLOT_BACK, "wear_suit" = SLOT_WEAR_SUIT, "w_uniform" = SLOT_W_UNIFORM, "shoes" = SLOT_SHOES, "belt" = SLOT_BELT, "gloves" = SLOT_GLOVES, "glasses" = SLOT_GLASSES, "ears" = SLOT_EARS, "wear_id" = SLOT_WEAR_ID, "s_store" = SLOT_S_STORE)) -GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_suit" = /obj/item/clothing/suit/changeling, "w_uniform" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling, "s_store" = /obj/item/changeling)) +GLOBAL_LIST_INIT(slots, list("head", "wear_mask", "back", "wear_suit", "w_uniform", "w_underwear", "w_socks", "w_shirt", "shoes", "belt", "gloves", "glasses", "ears", "ears_extra", "wear_id", "s_store")) //skyrat edit +GLOBAL_LIST_INIT(slot2slot, list("head" = SLOT_HEAD, "wear_mask" = SLOT_WEAR_MASK, "neck" = SLOT_NECK, "back" = SLOT_BACK, "wear_suit" = SLOT_WEAR_SUIT, "w_uniform" = SLOT_W_UNIFORM, "w_underwear" = SLOT_W_UNDERWEAR, "w_socks" = SLOT_W_SOCKS, "w_shirt" = SLOT_W_SHIRT, "ears_extra" = SLOT_EARS_RIGHT, "shoes" = SLOT_SHOES, "belt" = SLOT_BELT, "gloves" = SLOT_GLOVES, "glasses" = SLOT_GLASSES, "ears" = SLOT_EARS_LEFT, "wear_id" = SLOT_WEAR_ID, "s_store" = SLOT_S_STORE, "wrists" = SLOT_WRISTS)) //skyrat edit +GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_suit" = /obj/item/clothing/suit/changeling, "w_uniform" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling, "s_store" = /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)) //skyrat edit GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our this objective to all lings diff --git a/code/game/gamemodes/clown_ops/bananium_bomb.dm b/code/game/gamemodes/clown_ops/bananium_bomb.dm index 695fc79169..9ce9bff6ac 100644 --- a/code/game/gamemodes/clown_ops/bananium_bomb.dm +++ b/code/game/gamemodes/clown_ops/bananium_bomb.dm @@ -39,6 +39,13 @@ ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) H.equip_to_slot_or_del(C, SLOT_W_UNIFORM) + //skyrat edit + if(!H.w_shirt || H.dropItemToGround(H.w_shirt)) + C = new /obj/item/clothing/underwear/shirt/clown(H) + ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) + H.equip_to_slot_or_del(C, SLOT_W_SHIRT) + // + if(!H.shoes || H.dropItemToGround(H.shoes)) C = new /obj/item/clothing/shoes/clown_shoes(H) ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b4c114eb6a..743c88728a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -155,6 +155,9 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb var/canMouseDown = FALSE + //SKYRAT CHANGE + var/hide_underwear_examine = FALSE + //and no, i'm not taking self-equip delays, period. /obj/item/Initialize() @@ -365,7 +368,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb if(throwing) throwing.finalize(FALSE) if(loc == user) - if(!allow_attack_hand_drop(user) || !user.temporarilyRemoveItemFromInventory(src)) + if(!user.temporarilyRemoveItemFromInventory(I = src)) return pickup(user) @@ -699,6 +702,18 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb owner.update_inv_wear_suit() if(flags & ITEM_SLOT_ICLOTHING) owner.update_inv_w_uniform() + //skyrat edit + if(flags & ITEM_SLOT_UNDERWEAR) + owner.update_inv_w_underwear() + if(flags & ITEM_SLOT_SOCKS) + owner.update_inv_w_socks() + if(flags & ITEM_SLOT_SHIRT) + owner.update_inv_w_shirt() + if(flags & ITEM_SLOT_EARS) + owner.update_inv_ears_extra() + if(flags & ITEM_SLOT_WRISTS) + owner.update_inv_wrists() + // if(flags & ITEM_SLOT_GLOVES) owner.update_inv_gloves() if(flags & ITEM_SLOT_EYES) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 6ac2d310a1..fd636fddfd 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -56,7 +56,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset/ComponentInitialize() . = ..() if (bowman) - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) + AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS_LEFT, SLOT_EARS_RIGHT)) //skyrat edit /obj/item/radio/headset/Initialize() . = ..() @@ -76,6 +76,10 @@ GLOBAL_LIST_INIT(channel_tokens, list( var/mob/living/carbon/human/H = src.loc if(H.ears == src) return ..(freq, level) + //skyrat edit + else if(H.ears_extra == src) + return ..(freq, level) + // else if(AIuser) return ..(freq, level) return FALSE @@ -364,4 +368,4 @@ GLOBAL_LIST_INIT(channel_tokens, list( name = replacetext(name,"headset", "bowman headset") desc = "[desc] Protects ears from flashbangs." bowman = TRUE - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) + AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS_LEFT, SLOT_EARS_RIGHT)) //skyrat edit diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 58146be20f..9e7bb5a0db 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -803,6 +803,9 @@ force = 4 throwforce = 0 attack_verb = list("whipped", "repented", "lashed", "flagellated") + //skyrat edit - wowie the first wrist slot item + slot_flags = 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/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 7fdec9b3d9..5eea3eff60 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -19,6 +19,7 @@ new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) qdel(src) +/* skyrat edit - the dresser is useless with our inventory system /obj/structure/dresser/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(. || !ishuman(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) @@ -80,3 +81,4 @@ if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return default_color return sanitize_hexcolor(n_color, 3, FALSE, default_color) +*/ diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index c52249686a..bbcdbbfd9d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -412,6 +412,14 @@ H.update_inv_wear_suit() else if(H.w_uniform && wash_obj(H.w_uniform)) H.update_inv_w_uniform() + //skyrat edit + else if(H.w_underwear && wash_obj(H.w_underwear)) + H.update_inv_w_underwear() + else if(H.w_socks && wash_obj(H.w_socks)) + H.update_inv_w_socks() + else if(H.w_underwear && wash_obj(H.w_shirt)) + H.update_inv_w_shirt() + // if(washgloves) H.clean_blood() SEND_SIGNAL(H, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) @@ -424,8 +432,11 @@ H.update_body() if(H.glasses && washglasses && wash_obj(H.glasses)) H.update_inv_glasses() - if(H.ears && washears && wash_obj(H.ears)) + if(H.ears && washears && wash_obj(H.ears) && wash_obj(H.ears_extra)) //skyrat edit H.update_inv_ears() + //skyrat edit + H.update_inv_ears_extra() + // if(H.belt && wash_obj(H.belt)) H.update_inv_belt() else diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm index ffca67b882..70d7fdd3fe 100644 --- a/code/modules/antagonists/highlander/highlander.dm +++ b/code/modules/antagonists/highlander/highlander.dm @@ -46,7 +46,7 @@ for(var/obj/item/I in H.held_items) qdel(I) H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), SLOT_W_UNIFORM) - H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), SLOT_EARS) + H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), SLOT_EARS_LEFT) //skyrat edit H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), SLOT_HEAD) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), SLOT_SHOES) H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), SLOT_L_STORE) diff --git a/code/modules/antagonists/traitor/syndicate_contract.dm b/code/modules/antagonists/traitor/syndicate_contract.dm index 0f67616a32..8742ab5ac3 100644 --- a/code/modules/antagonists/traitor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/syndicate_contract.dm @@ -99,12 +99,8 @@ for(var/obj/item/W in M) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(W == H.w_uniform) + if(W == H.w_uniform || W == H.shoes || W == H.w_underwear || W == H.w_socks || W == H.w_shirt) //skyrat edit continue //So all they're left with are shoes and uniform. - if(W == H.shoes) - continue - - M.transferItemToLoc(W) victim_belongings.Add(W) @@ -190,10 +186,8 @@ for(var/obj/item/W in M) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(W == H.w_uniform) + if(W == H.w_uniform || W == H.shoes || W == H.w_underwear || W == H.w_socks || W == H.w_shirt) //skyrat edit continue //So all they're left with are shoes and uniform. - if(W == H.shoes) - continue M.dropItemToGround(W) for(var/obj/item/W in victim_belongings) W.forceMove(return_pod) diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 42954c3542..f217e623cc 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -207,7 +207,7 @@ if(!istype(master_mob) || !istype(H)) return if(master_mob.ears) - H.equip_to_slot_or_del(new master_mob.ears.type, SLOT_EARS) + H.equip_to_slot_or_del(new master_mob.ears.type, SLOT_EARS_LEFT) //skyrat edit if(master_mob.w_uniform) H.equip_to_slot_or_del(new master_mob.w_uniform.type, SLOT_W_UNIFORM) if(master_mob.shoes) diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index 65eeca75fe..09359f9662 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -52,6 +52,7 @@ /obj/item/organ/genital/proc/is_exposed() if(!owner || genital_flags & (GENITAL_INTERNAL|GENITAL_HIDDEN)) return FALSE + /* skyrat edit if(genital_flags & GENITAL_UNDIES_HIDDEN && ishuman(owner)) var/mob/living/carbon/human/H = owner if(!(NO_UNDERWEAR in H.dna.species.species_traits)) @@ -59,6 +60,7 @@ var/datum/sprite_accessory/underwear/bottom/B = H.hidden_underwear ? null : GLOB.underwear_list[H.underwear] if(zone == BODY_ZONE_CHEST ? (T?.covers_chest || B?.covers_chest) : (T?.covers_groin || B?.covers_groin)) return FALSE + */ if(genital_flags & GENITAL_THROUGH_CLOTHES) return TRUE diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 3426208fae..b686fbdea1 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -511,7 +511,7 @@ no_drops += H.get_item_by_slot(SLOT_GLOVES) no_drops += H.get_item_by_slot(SLOT_SHOES) no_drops += H.get_item_by_slot(SLOT_W_UNIFORM) - no_drops += H.get_item_by_slot(SLOT_EARS) + no_drops += H.get_item_by_slot(SLOT_EARS_LEFT) //skyrat edit for(var/i in no_drops) var/obj/item/I = i ADD_TRAIT(I, TRAIT_NODROP, CAPTURE_THE_FLAG_TRAIT) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 5d5370eaba..9e6dc8708c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -93,6 +93,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/see_chat_emotes = TRUE var/enable_personal_chat_color = FALSE var/personal_chat_color = "#ffffff" + var/list/color_gear = list() //SKYRAT CHANGES END var/underwear = "Nude" //underwear type var/undie_color = "FFFFFF" @@ -581,6 +582,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" dat += "" + //skyrat edit + if(gear.has_colors && (gear.name in color_gear)) + var/colore = "Color   " + dat += "" + else + dat += "" + // dat += "" - if(SLOT_EARS in obscured) - dat += "" + //skyrat edit + if(SLOT_EARS_LEFT in obscured) + dat += "" else - dat += "" + dat += "" + + if(SLOT_EARS_RIGHT in obscured) + dat += "" + else + dat += "" + // dat += "" @@ -179,6 +186,13 @@ else dat += "" + //skyrat edit + if(SLOT_WRISTS in obscured) + dat += "" + else + dat += "" + // + if(SLOT_W_UNIFORM in obscured) dat += "" else @@ -197,6 +211,23 @@ dat += " [(r_store && !(r_store.item_flags & ABSTRACT)) ? "Right (Full)" : "Right (Empty)"]" dat += "" + //skyrat edit + dat += "" + var/undies_hidden = underwear_hidden() + if((SLOT_W_UNDERWEAR in obscured) || undies_hidden) + dat += "" + else + dat += "" + if((SLOT_W_SOCKS in obscured) || undies_hidden) + dat += "" + else + dat += "" + if((SLOT_W_SHIRT in obscured) || undies_hidden) + dat += "" + else + dat += "" + // + if(handcuffed) dat += "" if(legcuffed) @@ -552,10 +583,18 @@ if(wear_suit) if(wear_suit.flags_inv & HIDEGLOVES) LAZYOR(., SLOT_GLOVES) + LAZYOR(., SLOT_WRISTS) if(wear_suit.flags_inv & HIDEJUMPSUIT) LAZYOR(., SLOT_W_UNIFORM) + LAZYOR(., SLOT_W_SHIRT) + LAZYOR(., SLOT_W_UNDERWEAR) if(wear_suit.flags_inv & HIDESHOES) LAZYOR(., SLOT_SHOES) + LAZYOR(., SLOT_W_SOCKS) + if(w_uniform) + if(underwear_hidden()) + LAZYOR(., SLOT_W_SHIRT) + LAZYOR(., SLOT_W_UNDERWEAR) /mob/living/carbon/human/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) if(judgement_criteria & JUDGE_EMAGGED) diff --git a/code/modules/mob/living/carbon/human/human_block.dm b/code/modules/mob/living/carbon/human/human_block.dm index 4ba7e95564..defd549624 100644 --- a/code/modules/mob/living/carbon/human/human_block.dm +++ b/code/modules/mob/living/carbon/human/human_block.dm @@ -6,6 +6,20 @@ if(w_uniform) if(!.[w_uniform]) .[w_uniform] = w_uniform.block_priority + //skyrat edit + if(w_underwear) + if(!.[w_underwear]) + .[w_underwear] = w_underwear.block_priority + if(w_socks) + if(!.[w_socks]) + .[w_socks] = w_socks.block_priority + if(w_shirt) + if(!.[w_shirt]) + .[w_shirt] = w_shirt.block_priority + if(wrists) + if(!.[wrists]) + .[wrists] = wrists.block_priority + // if(wear_neck) if(!.[wear_neck]) .[wear_neck] = wear_neck.block_priority diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 18501b4ca2..c01f3eed13 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -23,7 +23,7 @@ if(!d_type || !def_zone) return 0 var/protection = 0 - var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, back, gloves, shoes, belt, s_store, glasses, ears, wear_id, wear_neck) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor) + var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, w_underwear, w_socks, w_shirt, back, gloves, wrists, shoes, belt, s_store, glasses, ears, ears_extra, wear_id, wear_neck) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor) //skyrat edit for(var/bp in body_parts) if(!bp) continue diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 13456ed61c..7ad2c18557 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -49,6 +49,14 @@ var/obj/item/l_store = null var/obj/item/s_store = null + //skyrat slots + 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/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 523369d10a..7dcb1a6820 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -31,12 +31,20 @@ return belt if(SLOT_WEAR_ID) return wear_id - if(SLOT_EARS) + if(SLOT_EARS_LEFT) //skyrat edit return ears + //skyrat edit + if(SLOT_EARS_RIGHT) + return ears_extra + // if(SLOT_GLASSES) return glasses if(SLOT_GLOVES) return gloves + //skyrat edit + if(SLOT_WRISTS) + return wrists + // if(SLOT_HEAD) return head if(SLOT_SHOES) @@ -45,6 +53,14 @@ return wear_suit if(SLOT_W_UNIFORM) return w_uniform + //skyrat edit + if(SLOT_W_UNDERWEAR) + return w_underwear + if(SLOT_W_SOCKS) + return w_socks + if(SLOT_W_SHIRT) + return w_shirt + // if(SLOT_L_STORE) return l_store if(SLOT_R_STORE) @@ -64,13 +80,17 @@ legcuffed, wear_suit, gloves, + wrists, shoes, belt, wear_id, l_store, r_store, - w_uniform - ) + w_uniform, + w_underwear, + w_socks, + w_shirt, + ) //skyrat edit /mob/living/carbon/human/proc/get_head_slots() return list( @@ -79,7 +99,8 @@ wear_neck, glasses, ears, - ) + ears_extra, + ) //skyrat edit /mob/living/carbon/human/proc/get_storage_slots() return list( @@ -105,9 +126,14 @@ wear_id = I sec_hud_set_ID() update_inv_wear_id() - if(SLOT_EARS) + //skyrat edit + if(SLOT_EARS_LEFT) ears = I update_inv_ears() + if(SLOT_EARS_RIGHT) + ears_extra = I + update_inv_ears_extra() + // if(SLOT_GLASSES) glasses = I var/obj/item/clothing/glasses/G = I @@ -124,6 +150,11 @@ if(SLOT_GLOVES) gloves = I update_inv_gloves() + //skyrat edit + if(SLOT_WRISTS) + wrists = I + update_inv_wrists() + // if(SLOT_SHOES) shoes = I update_inv_shoes() @@ -139,6 +170,17 @@ w_uniform = I update_suit_sensors() update_inv_w_uniform() + //skyrat edit + if(SLOT_W_UNDERWEAR) + w_underwear = I + update_inv_w_underwear() + if(SLOT_W_SOCKS) + w_socks = I + update_inv_w_socks() + if(SLOT_W_SHIRT) + w_shirt = I + update_inv_w_shirt() + // if(SLOT_L_STORE) l_store = I update_inv_pockets() @@ -196,6 +238,24 @@ update_suit_sensors() if(!QDELETED(src)) update_inv_w_uniform() + //skyrat edit + else if(I == w_underwear) + w_underwear = null + if(!QDELETED(src)) + update_inv_w_underwear() + else if(I == w_socks) + w_socks = null + if(!QDELETED(src)) + update_inv_w_socks() + else if(I == w_shirt) + w_shirt = null + if(!QDELETED(src)) + update_inv_w_shirt() + else if(I == wrists) + wrists = null + if(!QDELETED(src)) + update_inv_wrists() + // else if(I == gloves) gloves = null if(!QDELETED(src)) @@ -218,6 +278,12 @@ ears = null if(!QDELETED(src)) update_inv_ears() + //skyrat edit + else if(I == ears_extra) + ears_extra = null + if(!QDELETED(src)) + update_inv_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 56ab1f1b10..f5c7fbe2e2 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -163,6 +163,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(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/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 22cb10026b..10590b5f70 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -72,17 +72,30 @@ if(MODE_HEADSET) if (ears) ears.talk_into(src, message, , spans, language) + //skyrat edit + else if (ears_extra) + ears_extra.talk_into(src, message, , spans, language) + // return ITALICS | REDUCE_RANGE if(MODE_DEPARTMENT) if (ears) ears.talk_into(src, message, message_mode, spans, language) + //skyrat edit + else if (ears_extra) + ears_extra.talk_into(src, message, message_mode, spans, language) + // return ITALICS | REDUCE_RANGE if(message_mode in GLOB.radiochannels) if(ears) ears.talk_into(src, message, message_mode, spans, language) return ITALICS | REDUCE_RANGE + //skyrat edit + else if (ears_extra) + ears_extra.talk_into(src, message, , spans, language) + return ITALICS | REDUCE_RANGE + // return 0 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index e62b8c1619..8df6444854 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -13,10 +13,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/has_field_of_vision = TRUE //Species Icon Drawing Offsets - Pixel X, Pixel Y, Aka X = Horizontal and Y = Vertical, from bottom left corner - var/list/offset_features = list( + var/list/offset_features = list( //skyrat edit 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), @@ -611,6 +615,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) standing += eye_overlay + /* skyrat edit //Underwear, Undershirts & Socks if(!(NO_UNDERWEAR in species_traits)) var/datum/sprite_accessory/taur/TA @@ -655,6 +660,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(T.has_color) MA.color = "#[H.shirt_color]" standing += MA + */ if(standing.len) H.overlays_standing[BODY_LAYER] = standing @@ -705,6 +711,17 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(H.w_uniform && !H.wear_suit) if(!(H.w_uniform.mutantrace_variation & STYLE_DIGITIGRADE)) should_be_squished = TRUE + //skyrat edit + if(H.w_underwear && !H.wear_suit && !H.w_uniform) + if(!(H.w_underwear.mutantrace_variation & STYLE_DIGITIGRADE)) + should_be_squished = TRUE + if(H.w_socks && !H.wear_suit && !H.w_uniform) + if(!(H.w_socks.mutantrace_variation & STYLE_DIGITIGRADE)) + should_be_squished = TRUE + if(H.w_shirt && !H.wear_suit && !H.w_uniform) + if(!(H.w_shirt.mutantrace_variation & STYLE_DIGITIGRADE)) + should_be_squished = TRUE + // if(O.use_digitigrade == FULL_DIGITIGRADE && should_be_squished) O.use_digitigrade = SQUISHED_DIGITIGRADE update_needed = TRUE @@ -1022,6 +1039,16 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(num_arms < 2) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) + //skyrat edit + if(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(SLOT_SHOES) if(H.shoes) return FALSE @@ -1063,7 +1090,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_EARS) + if(SLOT_EARS_LEFT) //skyrat edit if(H.ears) return FALSE if(!(I.slot_flags & ITEM_SLOT_EARS)) @@ -1071,6 +1098,34 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) + //skyrat edit + if(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(SLOT_W_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(SLOT_W_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(SLOT_W_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(SLOT_W_UNIFORM) if(H.w_uniform) return FALSE @@ -1202,6 +1257,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) REMOVE_TRAIT(H, TRAIT_FAT, OBESITY) H.remove_movespeed_modifier(/datum/movespeed_modifier/obesity) H.update_inv_w_uniform() + //skyrat edit + H.update_inv_w_underwear() + H.update_inv_w_socks() + H.update_inv_w_shirt() + // H.update_inv_wear_suit() else if(H.overeatduration >= 100) @@ -1209,6 +1269,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) ADD_TRAIT(H, TRAIT_FAT, OBESITY) H.add_movespeed_modifier(/datum/movespeed_modifier/obesity) H.update_inv_w_uniform() + //skyrat edit + H.update_inv_w_underwear() + H.update_inv_w_socks() + H.update_inv_w_shirt() + // H.update_inv_wear_suit() // nutrition decrease and satiety @@ -1548,6 +1613,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(target.w_uniform) target.w_uniform.add_fingerprint(user) + //skyrat edit + else if(target.w_underwear) + target.w_underwear.add_fingerprint(user) + else if(target.w_socks) + target.w_socks.add_fingerprint(user) + else if(target.w_shirt) + target.w_shirt.add_fingerprint(user) + // //var/randomized_zone = ran_zone(user.zone_selected) CIT CHANGE - comments out to prevent compiling errors SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected) if(target.pulling == user) @@ -1720,6 +1793,17 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) H.visible_message("[H] has been knocked down!", \ "[H] has been knocked down!") H.apply_effect(60, EFFECT_KNOCKDOWN, armor_block) + //skyrat edit + if(H.w_underwear) + H.w_underwear.add_mob_blood(H) + H.update_inv_w_underwear() + if(H.w_socks) + H.w_socks.add_mob_blood(H) + H.update_inv_w_socks() + if(H.w_shirt) + H.w_underwear.add_mob_blood(H) + H.update_inv_w_shirt() + // if(bloody) if(H.wear_suit) @@ -1804,6 +1888,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(target.w_uniform) target.w_uniform.add_fingerprint(user) + //skyrat edit + else if(target.w_shirt) + target.w_shirt.add_fingerprint(user) + else if(target.w_socks) + target.w_socks.add_fingerprint(user) + else if(target.w_underwear) + target.w_underwear.add_fingerprint(user) + // SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected) if(CHECK_MOBILITY(target, MOBILITY_STAND)) @@ -2107,6 +2199,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) //CHEST// var/obj/item/clothing/chest_clothes = null + //skyrat edit + if(H.w_underwear && (H.w_underwear.body_parts_covered & CHEST)) + chest_clothes = H.w_underwear + if(H.w_socks && (H.w_socks.body_parts_covered & CHEST)) + chest_clothes = H.w_socks + if(H.w_shirt && (H.w_shirt.body_parts_covered & CHEST)) + chest_clothes = H.w_shirt + // if(H.w_uniform) chest_clothes = H.w_uniform if(H.wear_suit) @@ -2117,6 +2217,16 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) //ARMS & HANDS// var/obj/item/clothing/arm_clothes = null + //skyrat edit + if(H.wrists) + arm_clothes = H.wrists + if(H.w_underwear && (H.w_underwear.body_parts_covered & ARMS)) + arm_clothes = H.w_underwear + if(H.w_socks && (H.w_socks.body_parts_covered & ARMS)) + arm_clothes = H.w_socks + if(H.w_shirt && (H.w_shirt.body_parts_covered & ARMS)) + arm_clothes = H.w_shirt + // if(H.gloves) arm_clothes = H.gloves if(H.w_uniform && ((H.w_uniform.body_parts_covered & HANDS) || (H.w_uniform.body_parts_covered & ARMS))) @@ -2128,6 +2238,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) //LEGS & FEET// var/obj/item/clothing/leg_clothes = null + //skyrat edit + if(H.w_underwear && (H.w_underwear.body_parts_covered & LEGS)) + leg_clothes = H.w_underwear + if(H.w_socks && (H.w_socks.body_parts_covered & LEGS)) + leg_clothes = H.w_socks + if(H.w_shirt && (H.w_shirt.body_parts_covered & LEGS)) + leg_clothes = H.w_shirt + // if(H.shoes) leg_clothes = H.shoes if(H.w_uniform && ((H.w_uniform.body_parts_covered & FEET) || (H.w_uniform.body_parts_covered & LEGS))) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 9b39438563..9bd7c44aab 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -77,6 +77,13 @@ There are several things that need to be remembered: update_body(TRUE) update_hair() update_inv_w_uniform() + //skyrat edit + update_inv_w_underwear() + update_inv_w_socks() + update_inv_w_shirt() + update_inv_ears_extra() + update_inv_wrists() + // update_inv_wear_id() update_inv_gloves() update_inv_glasses() @@ -150,6 +157,145 @@ There are several things that need to be remembered: apply_overlay(UNIFORM_LAYER) update_mutant_bodyparts() +//skyrat edit +/mob/living/carbon/human/update_inv_w_underwear() + remove_overlay(UNDERWEAR_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNDERWEAR] + inv.update_icon() + + if(istype(w_underwear, /obj/item/clothing/underwear)) + var/obj/item/clothing/underwear/U = w_underwear + U.screen_loc = ui_boxers + if(client && hud_used && hud_used.hud_shown && hud_used.extra_shown) + if(hud_used.inventory_shown) + client.screen += w_underwear + update_observer_view(w_underwear,1) + + if(w_uniform && (w_uniform.flags_inv & HIDEUNDERWEAR)) + return + + var/alt_worn = U.mob_overlay_icon || 'sandcode/icons/mob/clothing/underwear.dmi' + var/variant_flag = NONE + + if((DIGITIGRADE in dna.species.species_traits) && U.mutantrace_variation & STYLE_DIGITIGRADE && !(U.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) + alt_worn = U.anthro_mob_worn_overlay || 'sandcode/icons/mob/clothing/underwear_digi.dmi' + variant_flag |= STYLE_DIGITIGRADE + + var/mask + if(dna.species.mutant_bodyparts["taur"]) + var/datum/sprite_accessory/taur/T = GLOB.taur_list[dna.features["taur"]] + var/clip_flag = U.mutantrace_variation & T?.hide_legs + if(clip_flag) + variant_flag |= clip_flag + mask = T.alpha_mask_state + + var/mutable_appearance/underwear_overlay + + var/gendered = (dna?.species.sexes && dna.features["body_model"] == FEMALE) ? U.fitted : NO_FEMALE_UNIFORM + underwear_overlay = U.build_worn_icon(UNDERWEAR_LAYER, alt_worn, FALSE, gendered, null, variant_flag, FALSE, mask) + + if(OFFSET_UNDERWEAR in dna.species.offset_features) + underwear_overlay.pixel_x += dna.species.offset_features[OFFSET_UNDERWEAR][1] + underwear_overlay.pixel_y += dna.species.offset_features[OFFSET_UNDERWEAR][2] + overlays_standing[UNDERWEAR_LAYER] = underwear_overlay + + apply_overlay(UNDERWEAR_LAYER) + update_mutant_bodyparts() + +/mob/living/carbon/human/update_inv_w_socks() + remove_overlay(SOCKS_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_SOCKS] + inv.update_icon() + + if(istype(w_socks, /obj/item/clothing/underwear)) + var/obj/item/clothing/underwear/U = w_socks + U.screen_loc = ui_socks + if(client && hud_used && hud_used.hud_shown && hud_used.extra_shown) + if(hud_used.inventory_shown) + client.screen += w_socks + update_observer_view(w_socks,1) + + if(w_uniform && (w_uniform.flags_inv & HIDEUNDERWEAR)) + return + + var/alt_worn = U.mob_overlay_icon || 'sandcode/icons/mob/clothing/underwear.dmi' + var/variant_flag = NONE + + if((DIGITIGRADE in dna.species.species_traits) && U.mutantrace_variation & STYLE_DIGITIGRADE && !(U.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) + alt_worn = U.anthro_mob_worn_overlay || 'sandcode/icons/mob/clothing/underwear_digi.dmi' + variant_flag |= STYLE_DIGITIGRADE + + var/mask + if(dna.species.mutant_bodyparts["taur"]) + var/datum/sprite_accessory/taur/T = GLOB.taur_list[dna.features["taur"]] + var/clip_flag = U.mutantrace_variation & T?.hide_legs + if(clip_flag) + variant_flag |= clip_flag + mask = T.alpha_mask_state + + var/mutable_appearance/underwear_overlay + + var/gendered = (dna?.species.sexes && dna.features["body_model"] == FEMALE) ? U.fitted : NO_FEMALE_UNIFORM + underwear_overlay = U.build_worn_icon(SOCKS_LAYER, alt_worn, FALSE, gendered, null, variant_flag, FALSE, mask) + + if(OFFSET_SOCKS in dna.species.offset_features) + underwear_overlay.pixel_x += dna.species.offset_features[OFFSET_SOCKS][1] + underwear_overlay.pixel_y += dna.species.offset_features[OFFSET_SOCKS][2] + overlays_standing[SOCKS_LAYER] = underwear_overlay + + apply_overlay(SOCKS_LAYER) + update_mutant_bodyparts() + +/mob/living/carbon/human/update_inv_w_shirt() + remove_overlay(SHIRT_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_SHIRT] + inv.update_icon() + + if(istype(w_shirt, /obj/item/clothing/underwear)) + var/obj/item/clothing/underwear/U = w_shirt + U.screen_loc = ui_shirt + if(client && hud_used && hud_used.hud_shown && hud_used.extra_shown) + if(hud_used.inventory_shown) + client.screen += w_shirt + update_observer_view(w_shirt,1) + + if(w_uniform && (w_uniform.flags_inv & HIDEUNDERWEAR)) + return + + var/alt_worn = U.mob_overlay_icon || 'sandcode/icons/mob/clothing/underwear.dmi' + var/variant_flag = NONE + + if((DIGITIGRADE in dna.species.species_traits) && U.mutantrace_variation & STYLE_DIGITIGRADE && !(U.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) + alt_worn = U.anthro_mob_worn_overlay || 'sandcode/icons/mob/clothing/underwear_digi.dmi' + variant_flag |= STYLE_DIGITIGRADE + + var/mask + if(dna.species.mutant_bodyparts["taur"]) + var/datum/sprite_accessory/taur/T = GLOB.taur_list[dna.features["taur"]] + var/clip_flag = U.mutantrace_variation & T?.hide_legs + if(clip_flag) + variant_flag |= clip_flag + mask = T.alpha_mask_state + + var/mutable_appearance/underwear_overlay + + var/gendered = (dna?.species.sexes && dna.features["body_model"] == FEMALE) ? U.fitted : NO_FEMALE_UNIFORM + underwear_overlay = U.build_worn_icon(SHIRT_LAYER, alt_worn, FALSE, gendered, null, variant_flag, FALSE, mask) + + if(OFFSET_UNDERWEAR in dna.species.offset_features) + underwear_overlay.pixel_x += dna.species.offset_features[OFFSET_SHIRT][1] + underwear_overlay.pixel_y += dna.species.offset_features[OFFSET_SHIRT][2] + overlays_standing[SHIRT_LAYER] = underwear_overlay + + apply_overlay(SHIRT_LAYER) + update_mutant_bodyparts() +// /mob/living/carbon/human/update_inv_wear_id() remove_overlay(ID_LAYER) @@ -207,6 +353,39 @@ There are several things that need to be remembered: overlays_standing[GLOVES_LAYER] = gloves_overlay apply_overlay(GLOVES_LAYER) +//skyrat edit +/mob/living/carbon/human/update_inv_wrists() + remove_overlay(WRISTS_LAYER) + + if(client && hud_used && hud_used.inv_slots[SLOT_WRISTS]) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WRISTS] + inv.update_icon() + + if(!wrists && bloody_hands) + var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -WRISTS_LAYER, color = blood_DNA_to_color()) + if(get_num_arms(FALSE) < 2) + if(has_left_hand(FALSE)) + bloody_overlay.icon_state = "bloodyhands_left" + else if(has_right_hand(FALSE)) + bloody_overlay.icon_state = "bloodyhands_right" + + overlays_standing[WRISTS_LAYER] = bloody_overlay + + var/mutable_appearance/wrists_overlay = overlays_standing[WRISTS_LAYER] + if(wrists) + wrists.screen_loc = ui_wrists + if(client && hud_used && hud_used.hud_shown && hud_used.extra_shown) + if(hud_used.inventory_shown) + client.screen += wrists + update_observer_view(wrists,1) + overlays_standing[WRISTS_LAYER] = gloves.build_worn_icon(default_layer = WRISTS_LAYER, default_icon_file = 'sandcode/icons/mob/clothing/wrists.dmi') + wrists_overlay = overlays_standing[WRISTS_LAYER] + if(OFFSET_WRISTS in dna.species.offset_features) + wrists_overlay.pixel_x += dna.species.offset_features[OFFSET_WRISTS][1] + wrists_overlay.pixel_y += dna.species.offset_features[OFFSET_WRISTS][2] + overlays_standing[WRISTS_LAYER] = wrists_overlay + apply_overlay(WRISTS_LAYER) +// /mob/living/carbon/human/update_inv_glasses() remove_overlay(GLASSES_LAYER) @@ -236,13 +415,13 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_ears() - remove_overlay(EARS_LAYER) + remove_overlay(EAR_LEFT_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated return if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS] + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS_LEFT] inv.update_icon() if(ears) @@ -252,14 +431,38 @@ There are several things that need to be remembered: client.screen += ears //add it to the client's screen update_observer_view(ears,1) - overlays_standing[EARS_LAYER] = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi') - var/mutable_appearance/ears_overlay = overlays_standing[EARS_LAYER] + overlays_standing[EAR_LEFT_LAYER] = ears.build_worn_icon(default_layer = EAR_LEFT_LAYER, default_icon_file = 'sandcode/icons/mob/clothing/ears.dmi', use_mob_overlay_icon = FALSE) + var/mutable_appearance/ears_overlay = overlays_standing[EAR_LEFT_LAYER] if(OFFSET_EARS in dna.species.offset_features) ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] ears_overlay.pixel_y += dna.species.offset_features[OFFSET_EARS][2] - overlays_standing[EARS_LAYER] = ears_overlay - apply_overlay(EARS_LAYER) + overlays_standing[EAR_LEFT_LAYER] = ears_overlay + apply_overlay(EAR_LEFT_LAYER) +/mob/living/carbon/human/update_inv_ears_extra() + remove_overlay(EAR_RIGHT_LAYER) + + if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated + return + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS_RIGHT] + inv.update_icon() + + if(ears_extra) + ears_extra.screen_loc = ui_ears_extra //move the item to the appropriate screen loc + if(client && hud_used && hud_used.hud_shown && hud_used.extra_shown) + if(hud_used.inventory_shown) //if the inventory is open + client.screen += ears_extra //add it to the client's screen + update_observer_view(ears_extra,1) + + overlays_standing[EAR_RIGHT_LAYER] = ears_extra.build_worn_icon(default_layer = EAR_RIGHT_LAYER, default_icon_file = 'sandcode/icons/mob/clothing/ears_extra.dmi', use_mob_overlay_icon = FALSE) + var/mutable_appearance/ears_overlay = overlays_standing[EAR_RIGHT_LAYER] + if(OFFSET_EARS in dna.species.offset_features) + ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] + ears_overlay.pixel_y += dna.species.offset_features[OFFSET_EARS][2] + overlays_standing[EAR_RIGHT_LAYER] = ears_overlay + apply_overlay(EAR_RIGHT_LAYER) /mob/living/carbon/human/update_inv_shoes() remove_overlay(SHOES_LAYER) diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index 581584912d..231f972fb3 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -34,6 +34,20 @@ /mob/proc/update_inv_w_uniform() return +//skyrat edit +/mob/proc/update_inv_w_underwear() + return + +/mob/proc/update_inv_w_socks() + return + +/mob/proc/update_inv_w_shirt() + return + +/mob/proc/update_inv_wrists() + return +// + /mob/proc/update_inv_belt() return @@ -67,5 +81,10 @@ /mob/proc/update_inv_pockets() return +//skyrat edit /mob/proc/update_inv_ears() - return \ No newline at end of file + return + +/mob/proc/update_inv_ears_extra() + return +// diff --git a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm index c0ee68cdee..fb069c1a57 100644 --- a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm +++ b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm @@ -53,7 +53,7 @@ It is possible to destroy the net by the occupant or someone else. if(ishuman(affecting)) var/mob/living/carbon/human/H = affecting for(var/obj/item/W in H) - if(W == H.w_uniform || W == H.shoes) + if(W == H.w_uniform || W == H.shoes || W == H.w_underwear) //skyrat edit continue//So all they're left with are shoes and uniform. H.dropItemToGround(W) H.dna.species.give_important_for_life(H) // After we remove items, at least give them what they need to live. diff --git a/code/modules/projectiles/boxes_magazines/external/rechargable.dm b/code/modules/projectiles/boxes_magazines/external/rechargable.dm index 7a3c82489c..64918907a3 100644 --- a/code/modules/projectiles/boxes_magazines/external/rechargable.dm +++ b/code/modules/projectiles/boxes_magazines/external/rechargable.dm @@ -54,7 +54,7 @@ desc = "A miniature battery for an energy weapon." icon = 'icons/obj/ammo.dmi' icon_state = "mws_batt" - slot_flags = SLOT_BELT | SLOT_EARS + slot_flags = SLOT_BELT | SLOT_EARS_LEFT | SLOT_EARS_RIGHT //skyrat edit throwforce = 1 caliber = "mws" @@ -113,4 +113,4 @@ name = "'MWS' microbattery - ION" type_color = "#d084d6" type_name = "ION" - projectile_type = /obj/item/projectile/ion \ No newline at end of file + projectile_type = /obj/item/projectile/ion diff --git a/code/modules/projectiles/projectile/bullets/smg.dm b/code/modules/projectiles/projectile/bullets/smg.dm index 5c9d5b92a3..691aa7c801 100644 --- a/code/modules/projectiles/projectile/bullets/smg.dm +++ b/code/modules/projectiles/projectile/bullets/smg.dm @@ -39,6 +39,24 @@ SEND_SIGNAL(cleaned_human.w_uniform, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) cleaned_human.w_uniform.clean_blood() cleaned_human.update_inv_w_uniform() + //skyrat edit + else if(cleaned_human.w_underwear) + SEND_SIGNAL(cleaned_human.w_underwear, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + cleaned_human.w_underwear.clean_blood() + cleaned_human.update_inv_w_underwear() + else if(cleaned_human.w_socks) + SEND_SIGNAL(cleaned_human.w_socks, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + cleaned_human.w_socks.clean_blood() + cleaned_human.update_inv_w_socks() + else if(cleaned_human.w_shirt) + SEND_SIGNAL(cleaned_human.w_shirt, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + cleaned_human.w_shirt.clean_blood() + cleaned_human.update_inv_w_shirt() + else if(cleaned_human.wrists) + SEND_SIGNAL(cleaned_human.wrists, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + cleaned_human.wrists.clean_blood() + cleaned_human.update_inv_wrists() + // if(cleaned_human.shoes) SEND_SIGNAL(cleaned_human.shoes, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) cleaned_human.shoes.clean_blood() diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index ec26182813..4679d5bd72 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -304,11 +304,12 @@ SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\ SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\ SLOT_SHOES, SLOT_GLOVES,\ - SLOT_EARS, SLOT_GLASSES,\ + SLOT_EARS_LEFT, SLOT_EARS_RIGHT,\ + SLOT_GLASSES,\ SLOT_BELT, SLOT_S_STORE,\ SLOT_L_STORE, SLOT_R_STORE,\ SLOT_GENERC_DEXTROUS_STORAGE - ) + ) //skyrat edit container_flags = APTFT_ALTCLICK|APTFT_VERB container_HP = 1 diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 3161419449..73fdcc2a64 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -269,6 +269,14 @@ if(ishuman(src)) var/mob/living/carbon/human/H = src + //skyrat edit + if(H.w_shirt) + H.update_inv_w_shirt() + if(H.w_socks) + H.update_inv_w_socks() + if(H.w_underwear) + H.update_inv_w_underwear() + // if(H.w_uniform) H.update_inv_w_uniform() if(H.shoes) @@ -290,4 +298,4 @@ . |= HAND_LEFT if(ARM_RIGHT) . |= HAND_RIGHT - . |= L.body_part \ No newline at end of file + . |= L.body_part diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 7a92b39692..80ace47dd6 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -131,7 +131,7 @@ eyesmouth_covered |= I.flags_cover if(ishuman(C)) var/mob/living/carbon/human/H = C - for(var/obj/item/I in list(H.wear_suit, H.w_uniform, H.shoes, H.belt, H.gloves, H.glasses, H.ears)) + for(var/obj/item/I in list(H.wear_suit, H.w_uniform, H.w_underwear, H.w_socks, H.w_shirt, H.shoes, H.belt, H.gloves, H.wrists, H.glasses, H.ears, H.ears_extra)) //skyrat edit covered_locations |= I.body_parts_covered face_covered |= I.flags_inv eyesmouth_covered |= I.flags_cover diff --git a/icons/mob/inhands/__inhand_template.dmi b/icons/mob/inhands/__inhand_template.dmi index 283428495c..88f794b742 100644 Binary files a/icons/mob/inhands/__inhand_template.dmi and b/icons/mob/inhands/__inhand_template.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/_loadout.dm b/modular_citadel/code/modules/client/loadout/_loadout.dm index 0ebfa060f2..a76ae96778 100644 --- a/modular_citadel/code/modules/client/loadout/_loadout.dm +++ b/modular_citadel/code/modules/client/loadout/_loadout.dm @@ -67,6 +67,11 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids) var/restricted_desc + //skyrat edit + var/has_colors = FALSE + var/color = "#FFFFFF" + // + /datum/gear/New() if(isnull(donoritem)) if(donator_group_id || ckeywhitelist) diff --git a/modular_citadel/code/modules/mob/living/carbon/reindex_screams.dm b/modular_citadel/code/modules/mob/living/carbon/reindex_screams.dm index 7f5d625f62..ff7a83e33a 100644 --- a/modular_citadel/code/modules/mob/living/carbon/reindex_screams.dm +++ b/modular_citadel/code/modules/mob/living/carbon/reindex_screams.dm @@ -15,10 +15,22 @@ //More slots in humans. if(ears) add_screams(ears.alternate_screams) + //skyrat edit + if(ears_extra) + add_screams(ears_extra.alternate_screams) + // if(wear_suit) add_screams(wear_suit.alternate_screams) if(w_uniform) add_screams(w_uniform.alternate_screams) + //skyrat edit + if(w_underwear) + add_screams(w_underwear.alternate_screams) + if(w_socks) + add_screams(w_socks.alternate_screams) + if(w_shirt) + add_screams(w_shirt.alternate_screams) + // if(glasses) add_screams(glasses.alternate_screams) if(gloves) @@ -42,4 +54,4 @@ /mob/living/proc/clear_screams() LAZYINITLIST(alternate_screams) - LAZYCLEARLIST(alternate_screams) \ No newline at end of file + LAZYCLEARLIST(alternate_screams) diff --git a/sandcode/code/game/objects/items/devices/radio/radio.dm b/sandcode/code/game/objects/items/devices/radio/radio.dm new file mode 100644 index 0000000000..c9d96d786b --- /dev/null +++ b/sandcode/code/game/objects/items/devices/radio/radio.dm @@ -0,0 +1,2 @@ +/obj/item/radio/headset + slot_flags = ITEM_SLOT_EARS diff --git a/sandcode/code/game/objects/items/items.dm b/sandcode/code/game/objects/items/items.dm new file mode 100644 index 0000000000..b61a8a9ed3 --- /dev/null +++ b/sandcode/code/game/objects/items/items.dm @@ -0,0 +1,2 @@ +/obj/item + hide_underwear_examine = TRUE diff --git a/sandcode/code/modules/client/loadout/boxers.dm b/sandcode/code/modules/client/loadout/boxers.dm new file mode 100644 index 0000000000..1ba7ea6053 --- /dev/null +++ b/sandcode/code/modules/client/loadout/boxers.dm @@ -0,0 +1,138 @@ +/datum/gear/underwear + name = "Briefs" + category = LOADOUT_CATEGORY_GENERAL_UNDER + subcategory = LOADOUT_SUBCATEGORY_UNDERWEAR + slot = SLOT_W_UNDERWEAR + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs + cost = 0 + +/datum/gear/underwear/jockstrap + name = "Jockstrap" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/jockstrap + +/datum/gear/underwear/mankini + name = "Mankini" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/mankini + +/datum/gear/underwear/boxers + name = "Boxers" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/boxers + +/datum/gear/underwear/boxers/heart + name = "Heart Boxers" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/boxers/heart + +/datum/gear/underwear/boxers/uk + name = "UK Boxers" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/boxers/uk + +/datum/gear/underwear/boxers/usa + name = "USA Boxers" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/boxers/usa + +/datum/gear/underwear/boxers/commie + name = "Heart Boxers" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/boxers/commie + +/datum/gear/underwear/boxers/striped + name = "Striped Boxers" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/boxers/striped + +/datum/gear/underwear/boxers/bee_shorts + name = "Bee Shorts" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/boxers/bee_shorts + +/datum/gear/underwear/boxers/boxer_briefs + name = "Boxer Briefs" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/boxer_briefs + +/datum/gear/underwear/boxers/panties + name = "Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties + +/datum/gear/underwear/boxers/panties/alt + name = "Panties (alt)" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/alt + +/datum/gear/underwear/boxers/panties/slim + name = "Slim Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/slim + +/datum/gear/underwear/boxers/panties/thin + name = "Thin Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/thin + +/datum/gear/underwear/boxers/panties/neko + name = "Neko Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/neko + +/datum/gear/underwear/boxers/panties/thong + name = "Thong" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/thong + +/datum/gear/underwear/boxers/panties/thong/babydoll + name = "Babydoll Thong" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/thong/babydoll + +/datum/gear/underwear/boxers/panties/swimming + name = "Swimming Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/swimming + +/datum/gear/underwear/boxers/panties/kinky + name = "Kinky Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/kinky + +/datum/gear/underwear/boxers/panties/beekini + name = "Bee-kini Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/beekini + +/datum/gear/underwear/boxers/panties/usa + name = "USA Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/usa + +/datum/gear/underwear/boxers/panties/commie + name = "Commie Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/commie + +/datum/gear/underwear/boxers/panties/uk + name = "UK Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/uk + +/datum/gear/underwear/boxers/panties/striped + name = "Striped Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/striped + +/datum/gear/underwear/boxers/panties/fishnet + name = "Fishnet Panties" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/panties/fishnet + +/datum/gear/underwear/boxers/long + name = "Long Boxers" + has_colors = TRUE + path = /obj/item/clothing/underwear/briefs/boxers/long diff --git a/sandcode/code/modules/client/loadout/shirts.dm b/sandcode/code/modules/client/loadout/shirts.dm new file mode 100644 index 0000000000..116d2dede4 --- /dev/null +++ b/sandcode/code/modules/client/loadout/shirts.dm @@ -0,0 +1,378 @@ +/datum/gear/shirt + name = "Shirt" + category = LOADOUT_CATEGORY_GENERAL_UNDER + subcategory = LOADOUT_SUBCATEGORY_SHIRT + slot = SLOT_W_SHIRT + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt + cost = 0 + +/datum/gear/shirt/bra + name = "Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra + +/datum/gear/shirt/bra/alt + name = "Bra (alt)" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/alt + +/datum/gear/shirt/bra/thin + name = "Thin Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/thin + +/datum/gear/shirt/bra/sports + name = "Sports Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/sports + +/datum/gear/shirt/bra/sports/alt + name = "Sports Bra (alt)" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/sports/alt + +/datum/gear/shirt/bra/strapless + name = "Strapless Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/strapless + +/datum/gear/shirt/bra/strapless/alt + name = "Strapless Bra (alt)" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/strapless/alt + +/datum/gear/shirt/bra/halterneck + name = "Halterneck Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/halterneck + +/datum/gear/shirt/bra/neko + name = "Neko Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/neko + +/datum/gear/shirt/bra/swimming + name = "Swimming Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/swimming + +/datum/gear/shirt/bra/swimming/alt + name = "Swimming Bra (alt)" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/swimming/alt + +/datum/gear/shirt/bra/tubetop + name = "Tubetop Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/tubetop + +/datum/gear/shirt/bra/babydoll + name = "Babydoll Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/babydoll + +/datum/gear/shirt/bra/kinky + name = "Kinky Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/kinky + +/datum/gear/shirt/bra/beekini + name = "Beekini Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/beekini + +/datum/gear/shirt/bra/usa + name = "USA Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/usa + +/datum/gear/shirt/bra/commie + name = "Commie Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/commie + +/datum/gear/shirt/bra/uk + name = "UK Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/uk + +/datum/gear/shirt/bra/striped + name = "Striped Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/striped + +/datum/gear/shirt/bra/bikini + name = "Bikini Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/bikini + +/datum/gear/shirt/bra/bikini/blue + name = "Bikini Bra (Blue)" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/bikini/blue + +/datum/gear/shirt/bra/bikini/black + name = "Bikini Bra (Black)" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/bikini/black + +/datum/gear/shirt/bra/fishnet + name = "Fishnet Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/fishnet + +/datum/gear/shirt/bra/fishnet/sleeves + name = "Sleeved Fishnet Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/fishnet/sleeves + +/datum/gear/shirt/bra/fishnet/sleeves/gloves + name = "Sleeved & Gloved Fishnet Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/fishnet/sleeves/gloves + +/datum/gear/shirt/bra/bikini + name = "Bikini Bra" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bra/bikini + +/datum/gear/shirt/shortsleeve + name = "Shortsleeved Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/shortsleeve + +/datum/gear/shirt/polo + name = "Polo Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/polo + +/datum/gear/shirt/tanktop + name = "Tanktop Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/tanktop + +/datum/gear/shirt/tanktop/alt + name = "Tanktop Shirt (alt)" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/tanktop/alt + +/datum/gear/shirt/tanktop/striped + name = "Striped Tanktop Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/tanktop/striped + +/datum/gear/shirt/tanktop/rainbow + name = "Rainbow Tanktop Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/tanktop/rainbow + +/datum/gear/shirt/tanktop/sun + name = "Sun Tanktop Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/tanktop/sun + +/datum/gear/shirt/tanktop/midriff + name = "Midriff Tanktop Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/tanktop/midriff + +/datum/gear/shirt/tanktop/midriff/alt + name = "Midriff Tanktop Shirt (alt)" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/tanktop/midriff/alt + +/datum/gear/shirt/lover + name = "Lover Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/lover + +/datum/gear/shirt/ian + name = "Ian Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/ian + +/datum/gear/shirt/uk + name = "UK Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/uk + +/datum/gear/shirt/ilovent + name = "I Love NT Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/ilovent + +/datum/gear/shirt/peace + name = "Peace Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/peace + +/datum/gear/shirt/band + name = "Band Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/band + +/datum/gear/shirt/pogoman + name = "Pogoman Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/pogoman + +/datum/gear/shirt/lover + name = "Matroska Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/matroska + +/datum/gear/shirt/sportgreen + name = "Green Sport Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/sportgreen + +/datum/gear/shirt/sportblue + name = "Blue Sport Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/sportblue + +/datum/gear/shirt/sportred + name = "Red Sport Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/sportred + +/datum/gear/shirt/ss13 + name = "SS13 Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/ss13 + +/datum/gear/shirt/question + name = "Question Mark Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/question + +/datum/gear/shirt/skull + name = "Skull Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/skull + +/datum/gear/shirt/commie + name = "Commie Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/commie + +/datum/gear/shirt/striped + name = "Striped Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/striped + +/datum/gear/shirt/meat + name = "Meat Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/meat + +/datum/gear/shirt/tiedye + name = "Tie Dye Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/tiedye + +/datum/gear/shirt/redjersey + name = "Red Jersey Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/redjersey + +/datum/gear/shirt/bluejersey + name = "Blue Jersey Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bluejersey + +/datum/gear/shirt/bowlingred + name = "Red Bowling Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bowling + +/datum/gear/shirt/bowlingpink + name = "Pink Bowling Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bowling/pink + +/datum/gear/shirt/bowlingcyan + name = "Cyan Bowling Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bowling/cyan + +/datum/gear/shirt/bowlinggrey + name = "Grey Bowling Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bowling/grey + +/datum/gear/shirt/alien + name = "Postal Dude Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/alien + +/datum/gear/shirt/clown + name = "Clown Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/clown + +/datum/gear/shirt/bee + name = "Bee Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/bee + +/datum/gear/shirt/long + name = "Longsleeved Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/long + +/datum/gear/shirt/long/striped + name = "Striped Longsleeved Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/long/striped + +/datum/gear/shirt/long/striped/blue + name = "Blue Striped Longsleeved Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/long/striped/blue + +/datum/gear/shirt/usa + name = "USA Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/usa + +/datum/gear/shirt/cowboy + name = "Black Cowboy Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/cowboy + +/datum/gear/shirt/cowboy/white + name = "White Cowboy Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/cowboy/white + +/datum/gear/shirt/cowboy/navy + name = "Navy Cowboy Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/cowboy/navy + +/datum/gear/shirt/cowboy/red + name = "Red Cowboy Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/cowboy/red + +/datum/gear/shirt/cowboy/short + name = "Black Shortsleeved Cowboy Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/cowboy/short + +/datum/gear/shirt/cowboy/short/white + name = "White Shortsleeved Cowboy Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/cowboy/short/white + +/datum/gear/shirt/cowboy/short/navy + name = "Navy Shortsleeved Cowboy Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/cowboy/short/navy + +/datum/gear/shirt/cowboy/short/red + name = "Red Shortsleeved Cowboy Shirt" + has_colors = TRUE + path = /obj/item/clothing/underwear/shirt/cowboy/short/red diff --git a/sandcode/code/modules/client/loadout/socks.dm b/sandcode/code/modules/client/loadout/socks.dm new file mode 100644 index 0000000000..dc3a7f0988 --- /dev/null +++ b/sandcode/code/modules/client/loadout/socks.dm @@ -0,0 +1,188 @@ +/datum/gear/socks + name = "Socks" + category = LOADOUT_CATEGORY_GENERAL_UNDER + subcategory = LOADOUT_SUBCATEGORY_SOCKS + slot = SLOT_W_SOCKS + has_colors = TRUE + path = /obj/item/clothing/underwear/socks + cost = 0 + +/datum/gear/socks/bee + name = "Bee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/bee + +/datum/gear/socks/candycane + name = "Candycane Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/candycane + +/datum/gear/socks/candycane + name = "Green Candycane Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/candycane/green + +/datum/gear/socks/christmas + name = "Christmas Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/christmas + +/datum/gear/socks/knee + name = "Knee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/knee + +/datum/gear/socks/knee/bee + name = "Bee Knee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/knee/bee + +/datum/gear/socks/knee/candycane + name = "Candycane Knee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/knee/candycane + +/datum/gear/socks/knee/candycane/green + name = "Green Candycane Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/knee/candycane/green + +/datum/gear/socks/knee/commie + name = "Commie Knee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/knee/commie + +/datum/gear/socks/knee/rainbow + name = "Rainbow Knee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/knee/rainbow + +/datum/gear/socks/knee/striped + name = "Striped Knee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/knee/striped + +/datum/gear/socks/knee/thin + name = "Thin Knee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/knee/thin + +/datum/gear/socks/knee/uk + name = "UK Knee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/knee/uk + +/datum/gear/socks/pantyhose + name = "Pantyhose" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/pantyhose + +/datum/gear/socks/short + name = "Short Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/short + +/datum/gear/socks/thigh + name = "Thigh High Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh + +/datum/gear/socks/thigh/bee + name = "Thigh High Bee Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/bee + +/datum/gear/socks/thigh/candycane + name = "Thigh High Candycane Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/candycane + +/datum/gear/socks/thigh/candycane/green + name = "Thigh High Green Candycane Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/candycane/green + +/datum/gear/socks/thigh/christmas + name = "Thigh High Christmas Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/christmas + +/datum/gear/socks/thigh/commie + name = "Thigh High Commie Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/commie + +/datum/gear/socks/thigh/rainbow + name = "Thigh High Rainbow Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/rainbow + +/datum/gear/socks/thigh/stockings + name = "Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/stockings + +/datum/gear/socks/thigh/stockings/blue + name = "Blue Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/stockings/blue + +/datum/gear/socks/thigh/stockings/cyan + name = "Cyan Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/stockings/cyan + +/datum/gear/socks/thigh/stockings/fishnet + name = "Fishnet Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/stockings/fishnet + +/datum/gear/socks/thigh/stockings/green + name = "Green Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/stockings/green + + +/datum/gear/socks/thigh/stockings/orange + name = "Orange Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/stockings/orange + + +/datum/gear/socks/thigh/stockings/pinkish + name = "Pinkish Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/stockings/pink2 + + +/datum/gear/socks/thigh/stockings/purple + name = "Purple Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/stockings/purple + +/datum/gear/socks/thigh/stockings + name = "Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/stockings/yellow + + +/datum/gear/socks/thigh/striped + name = "Thigh High StripedSocks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/striped + + +/datum/gear/socks/thigh/thin + name = "Thigh High Thin Socks" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/thin + +/datum/gear/socks/thigh/uk + name = "Thigh High UK Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/uk + +/datum/gear/socks/thigh/usa + name = "Thigh High USA Stockings" + has_colors = TRUE + path = /obj/item/clothing/underwear/socks/thigh/usa diff --git a/sandcode/code/modules/clothing/under/_under.dm b/sandcode/code/modules/clothing/under/_under.dm new file mode 100644 index 0000000000..a1605a083e --- /dev/null +++ b/sandcode/code/modules/clothing/under/_under.dm @@ -0,0 +1,2 @@ +/obj/item/clothing/under + hide_underwear_examine = TRUE diff --git a/sandcode/code/modules/clothing/underwear/_underwear.dm b/sandcode/code/modules/clothing/underwear/_underwear.dm new file mode 100644 index 0000000000..2176206a3d --- /dev/null +++ b/sandcode/code/modules/clothing/underwear/_underwear.dm @@ -0,0 +1,24 @@ +//Fuck it we making underwear actual items +/obj/item/clothing/underwear + name = "Underwear" + desc = "If you're reading this, something went wrong." + icon = 'sandcode/icons/mob/clothing/underwear.dmi' //if someone is willing to make proper inventory sprites that'd be very cash money + mob_overlay_icon = 'sandcode/icons/mob/clothing/underwear.dmi' + anthro_mob_worn_overlay = 'sandcode/icons/mob/clothing/underwear_digi.dmi' + body_parts_covered = GROIN + permeability_coefficient = 0.9 + block_priority = BLOCK_PRIORITY_UNDERWEAR + slot_flags = ITEM_SLOT_UNDERWEAR + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + mutantrace_variation = NONE + hide_underwear_examine = FALSE + var/under_type = /obj/item/clothing/underwear //i don't know what i'm gonna use this for + var/fitted = FEMALE_UNIFORM_TOP + var/has_colors = TRUE + +//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, shoes)) + if(istype(I) && ((I.hide_underwear_examine) || (I.flags_inv & HIDEUNDERWEAR))) + return TRUE + return FALSE diff --git a/sandcode/code/modules/clothing/underwear/boxers.dm b/sandcode/code/modules/clothing/underwear/boxers.dm new file mode 100644 index 0000000000..ed6c0757b5 --- /dev/null +++ b/sandcode/code/modules/clothing/underwear/boxers.dm @@ -0,0 +1,125 @@ +/obj/item/clothing/underwear/briefs + name = "briefs" + desc = "Not going commando." + icon_state = "briefs" + under_type = /obj/item/clothing/underwear/briefs + body_parts_covered = GROIN + slot_flags = ITEM_SLOT_UNDERWEAR + +/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/boxers + name = "boxers" + icon_state = "boxers" + mutantrace_variation = STYLE_DIGITIGRADE + +/obj/item/clothing/underwear/briefs/boxers/heart + name = "heart boxers" + icon_state = "boxers_heart" + +/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/boxers/commie + name = "commie boxers" + desc = "Seize the means of reproduction." + icon_state = "boxers_commie" + +/obj/item/clothing/underwear/briefs/boxers/striped + name = "striped boxers" + icon_state = "boxers_striped" + +/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/boxer_briefs //this typepath jesus + name = "boxer briefs" + icon_state = "boxer_briefs" + +/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/slim + name = "slim panties" + icon_state = "panties_slim" + +/obj/item/clothing/underwear/briefs/panties/thin + name = "thin panties" + icon_state = "panties_slim" + +/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/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/swimming + name = "swimming panties" + icon_state = "panties_swimming" + +/obj/item/clothing/underwear/briefs/panties/kinky + name = "kinky panties" + icon_state = "panties_kinky" + +/obj/item/clothing/underwear/briefs/panties/beekini + name = "bee-kini panties" + icon_state = "panties_bee-kini" + +/obj/item/clothing/underwear/briefs/panties/usa + name = "usa panties" + desc = "Not nearly as free as not wearing any." + icon_state = "panties_assblastusa" + +/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/uk + name = "uk panties" + desc = "Insert loicense joke here." + icon_state = "panties_uk" + +/obj/item/clothing/underwear/briefs/panties/striped + name = "striped panties" + icon_state = "panties_striped" + +/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/boxers/long + name = "long boxers" + icon_state = "boxers_long" diff --git a/sandcode/code/modules/clothing/underwear/shirts.dm b/sandcode/code/modules/clothing/underwear/shirts.dm new file mode 100644 index 0000000000..984d36cff5 --- /dev/null +++ b/sandcode/code/modules/clothing/underwear/shirts.dm @@ -0,0 +1,333 @@ +/obj/item/clothing/underwear/shirt + name = "shirt" + desc = "A shirt." + icon_state = "undershirt" + under_type = /obj/item/clothing/underwear/shirt + body_parts_covered = CHEST | ARMS + slot_flags = ITEM_SLOT_SHIRT + +/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/thin + name = "thin bra" + icon_state = "bra_thin" + +/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/halterneck + name = "halterneck bra" + icon_state = "bra_halterneck" + +/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/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/tubetop + name = "tubetop bra" + icon_state = "bra_tubetop" + +/obj/item/clothing/underwear/shirt/bra/babydoll + name = "babydoll" + desc = "A babydoll." + icon_state = "babydoll" + +/obj/item/clothing/underwear/shirt/bra/kinky + name = "kinky bra" + desc = "Kinky." + icon_state = "bra_kinky" + +/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/usa + name = "usa bra" + desc = "Not nearly as free as letting them bounce." + icon_state = "bra_assblastusa" + +/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/uk + name = "uk bra" + desc = "You got a loicense for those tiddies?" + icon_state = "bra_uk" + +/obj/item/clothing/underwear/shirt/bra/striped + name = "striped bra" + icon_state = "bra_striped" + +/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/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/bra/bikini/black + name = "black bikini" + icon_state = "swimming_black" + +/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/shortsleeve + name = "shortsleeve shirt" + body_parts_covered = CHEST + icon_state = "undershirt_short" + +/obj/item/clothing/underwear/shirt/polo + name = "polo shirt" + icon_state = "undershirt_polo" + +/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/striped + name = "striped tanktop shirt" + icon_state = "undershirt_tanktop_striped" + +/obj/item/clothing/underwear/shirt/tanktop/rainbow + name = "rainbow tanktop shirt" + icon_state = "undershirt_tanktop_rainbow" + +/obj/item/clothing/underwear/shirt/tanktop/sun + name = "sun tanktop shirt" + icon_state = "undershirt_tanktop_sun" + +/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/lover + name = "lover shirt" + icon_state = "undershirt_lover" + +/obj/item/clothing/underwear/shirt/ian + name = "ian shirt" + icon_state = "undershirt_ian" + +/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/ilovent + name = "\"I love NT\" shirt" + icon_state = "undershirt_ilovent" + +/obj/item/clothing/underwear/shirt/peace + name = "peace shirt" + icon_state = "undershirt_peace" + +/obj/item/clothing/underwear/shirt/band + name = "band shirt" + icon_state = "undershirt_band" + +/obj/item/clothing/underwear/shirt/pogoman + name = "pogoman shirt" + icon_state = "undershirt_pogoman" + +/obj/item/clothing/underwear/shirt/matroska + name = "matroska shirt" + icon_state = "undershirt_matroska" + +/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/sportblue + name = "blue sports shirt" + icon_state = "undershirt_sport_blue" + +/obj/item/clothing/underwear/shirt/ss13 + name = "SS13 shirt" + icon_state = "undershirt_ss13" + +/obj/item/clothing/underwear/shirt/question + name = "question shirt" + icon_state = "undershirt_question" + +/obj/item/clothing/underwear/shirt/skull + name = "skull shirt" + icon_state = "undershirt_skull" + +/obj/item/clothing/underwear/shirt/commie + name = "commie shirt" + icon_state = "undershirt_commie" + +/obj/item/clothing/underwear/shirt/nano + name = "NT shirt" + icon_state = "undershirt_nano" + +/obj/item/clothing/underwear/shirt/striped + name = "striped shirt" + icon_state = "undershirt_striped" + +/obj/item/clothing/underwear/shirt/meat + name = "meat shirt" + icon_state = "undershirt_meat" + +/obj/item/clothing/underwear/shirt/tiedye + name = "tiedye shirt" + icon_state = "undershirt_tiedye" + +/obj/item/clothing/underwear/shirt/redjersey + name = "red jersey shirt" + icon_state = "undershirt_redjersey" + +/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/pink + name = "pink bowling shirt" + icon_state = "undershirt_bowling_pink" + +/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/alien + name = "alien shirt" + desc = "I regret nothing." + icon_state = "undershirt_alien" + +/obj/item/clothing/underwear/shirt/clown + name = "clown shirt" + desc = "HONK!" + icon_state = "undershirt_clown" + +/obj/item/clothing/underwear/shirt/bee + name = "bee shirt" + desc = "Bee yourself!" + icon_state = "undershirt_bee" + +/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/usa + name = "usa shirt" + desc = "Freedom and obesity." + icon_state = "undershirt_assblastusa" + +/obj/item/clothing/underwear/shirt/cowboy + name = "cowboy shirt" + desc = "Yee haw." + icon_state = "undershirt_cowboy" + +/obj/item/clothing/underwear/shirt/cowboy/white + name = "white cowboy shirt" + icon_state = "undershirt_cowboy_white" + +/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/white + name = "short sleeved white cowboy shirt" + icon_state = "undershirt_cowboy_short_white" + +/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" diff --git a/sandcode/code/modules/clothing/underwear/socks.dm b/sandcode/code/modules/clothing/underwear/socks.dm new file mode 100644 index 0000000000..1205939981 --- /dev/null +++ b/sandcode/code/modules/clothing/underwear/socks.dm @@ -0,0 +1,177 @@ +/obj/item/clothing/underwear/socks + name = "socks" + desc = "A pair of socks." + icon_state = "socks" + under_type = /obj/item/clothing/underwear/socks + body_parts_covered = FEET + slot_flags = ITEM_SLOT_SOCKS + +/obj/item/clothing/underwear/socks/short + name = "short socks" + icon_state = "socks_short" + +/obj/item/clothing/underwear/socks/bee + name = "bee socks" + icon_state = "socks_bee" + +/obj/item/clothing/underwear/socks/christmas + name = "christmas socks" + icon_state = "socks_christmas" + +/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/knee + name = "knee socks" + icon_state = "socks_knee" + mutantrace_variation = STYLE_DIGITIGRADE + +/obj/item/clothing/underwear/socks/knee/thin + name = "thin knee socks" + icon_state = "socks_knee_thin" + +/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/usa + name = "usa knee socks" + desc = "I'm running out of america jokes." + icon_state = "socks_knee_assblastusa" + +/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/commie + name = "commie knee socks" + desc = "Karl Marx or something." + icon_state = "socks_knee_commie" + +/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/christmas + name = "christmas knee socks" + desc = "Jingle bell." + icon_state = "socks_knee_christmas" + +/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/thigh + name = "thigh high socks" + icon_state = "socks_thigh" + mutantrace_variation = STYLE_DIGITIGRADE + +/obj/item/clothing/underwear/socks/thigh/thin + name = "thin thigh high socks" + icon_state = "socks_thigh_thin" + +/obj/item/clothing/underwear/socks/thigh/rainbow + name = "rainbow thigh high socks" + icon_state = "socks_thigh_rainbow" + +/obj/item/clothing/underwear/socks/thigh/striped + name = "striped thigh high socks" + icon_state = "socks_thigh_striped" + +/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/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/commie + name = "commie thigh high socks" + desc = "Something something the USSR." + icon_state = "socks_thigh_commie" + +/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/christmas + name = "christmas thigh high socks" + desc = "Santa claus or something." + icon_state = "socks_thigh_christmas" + +/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/stockings + name = "pink stockings" + desc = "A pair of stockings." + body_parts_covered = LEGS | FEET + icon_state = "stockings_lpink" + mutantrace_variation = STYLE_DIGITIGRADE + +/obj/item/clothing/underwear/socks/thigh/stockings/fishnet + name = "fishnet stockings" + icon_state = "stockings_fishnet" + +/obj/item/clothing/underwear/socks/thigh/stockings/purple + name = "purple stockings" + icon_state = "stockings_purple" + +/obj/item/clothing/underwear/socks/thigh/stockings/green + name = "green stockings" + icon_state = "stockings_green" + +/obj/item/clothing/underwear/socks/thigh/stockings/cyan + name = "cyan stockings" + icon_state = "stockings_cyan" + +/obj/item/clothing/underwear/socks/thigh/stockings/orange + name = "orange stockings" + icon_state = "stockings_orange" + +/obj/item/clothing/underwear/socks/thigh/stockings/yellow + name = "yellow stockings" + icon_state = "stockings_yellow" + +/obj/item/clothing/underwear/socks/thigh/stockings/pink2 + name = "deep pink stockings" + icon_state = "stockings_dpink" + +/obj/item/clothing/underwear/socks/thigh/stockings/blue + name = "blue stockings" + icon_state = "stockings_blue" + +/obj/item/clothing/underwear/socks/pantyhose + name = "pantyhose" + desc = "Pantyhose." + body_parts_covered = FEET | LEGS | GROIN + icon_state = "socks_pantyhose" + mutantrace_variation = STYLE_DIGITIGRADE diff --git a/sandcode/code/modules/clothing/wrists/_wrists.dm b/sandcode/code/modules/clothing/wrists/_wrists.dm new file mode 100644 index 0000000000..a0009f7e3b --- /dev/null +++ b/sandcode/code/modules/clothing/wrists/_wrists.dm @@ -0,0 +1,14 @@ +//wrist items (currently we have none har har) +/obj/item/clothing/wrists + name = "slap bracelet" + desc = "oh no." + gender = PLURAL //change this if it is for a single wrist + w_class = WEIGHT_CLASS_SMALL + icon = 'sandcode/icons/obj/clothing/wrist.dmi' + mob_overlay_icon = 'sandcode/icons/mob/clothing/wrists.dmi' + siemens_coefficient = 0.5 + body_parts_covered = HANDS + slot_flags = ITEM_SLOT_WRISTS + attack_verb = list("slapped on the wrist") + strip_delay = 20 + equip_delay_other = 40 diff --git a/sandcode/code/modules/vending/clothesmate.dm b/sandcode/code/modules/vending/clothesmate.dm new file mode 100644 index 0000000000..e798afee34 --- /dev/null +++ b/sandcode/code/modules/vending/clothesmate.dm @@ -0,0 +1,12 @@ +/obj/machinery/vending/clothing/New(loc, ...) + . = ..() + products[/obj/item/clothing/head/wig] = 5 + for(var/P in typesof(/datum/gear/underwear)) + var/datum/gear/G = P + products[initial(G.path)] = 5 + for(var/P in typesof(/datum/gear/shirt)) + var/datum/gear/G = P + products[initial(G.path)] = 5 + for(var/P in typesof(/datum/gear/socks)) + var/datum/gear/G = P + products[initial(G.path)] = 5 diff --git a/sandcode/icons/mob/clothing/ears.dmi b/sandcode/icons/mob/clothing/ears.dmi new file mode 100644 index 0000000000..e9fc04d1b1 Binary files /dev/null and b/sandcode/icons/mob/clothing/ears.dmi differ diff --git a/sandcode/icons/mob/clothing/ears_extra.dmi b/sandcode/icons/mob/clothing/ears_extra.dmi new file mode 100644 index 0000000000..09c9a4c6e3 Binary files /dev/null and b/sandcode/icons/mob/clothing/ears_extra.dmi differ diff --git a/sandcode/icons/mob/clothing/underwear.dmi b/sandcode/icons/mob/clothing/underwear.dmi new file mode 100644 index 0000000000..acbd2f5ebd Binary files /dev/null and b/sandcode/icons/mob/clothing/underwear.dmi differ diff --git a/sandcode/icons/mob/clothing/underwear_digi.dmi b/sandcode/icons/mob/clothing/underwear_digi.dmi new file mode 100644 index 0000000000..c8c92ad96d Binary files /dev/null and b/sandcode/icons/mob/clothing/underwear_digi.dmi differ diff --git a/sandcode/icons/mob/clothing/wrists.dmi b/sandcode/icons/mob/clothing/wrists.dmi new file mode 100644 index 0000000000..20ba91b5d2 Binary files /dev/null and b/sandcode/icons/mob/clothing/wrists.dmi differ diff --git a/sandcode/icons/mob/screen_clockwork.dmi b/sandcode/icons/mob/screen_clockwork.dmi new file mode 100644 index 0000000000..aa72185aeb Binary files /dev/null and b/sandcode/icons/mob/screen_clockwork.dmi differ diff --git a/sandcode/icons/mob/screen_liteweb.dmi b/sandcode/icons/mob/screen_liteweb.dmi index 41fdde558c..3fbbb6b5da 100644 Binary files a/sandcode/icons/mob/screen_liteweb.dmi and b/sandcode/icons/mob/screen_liteweb.dmi differ diff --git a/sandcode/icons/mob/screen_midnight.dmi b/sandcode/icons/mob/screen_midnight.dmi new file mode 100644 index 0000000000..1b991bb960 Binary files /dev/null and b/sandcode/icons/mob/screen_midnight.dmi differ diff --git a/sandcode/icons/mob/screen_operative.dmi b/sandcode/icons/mob/screen_operative.dmi new file mode 100644 index 0000000000..70824ea898 Binary files /dev/null and b/sandcode/icons/mob/screen_operative.dmi differ diff --git a/sandcode/icons/mob/screen_plasmafire.dmi b/sandcode/icons/mob/screen_plasmafire.dmi new file mode 100644 index 0000000000..3a07a34232 Binary files /dev/null and b/sandcode/icons/mob/screen_plasmafire.dmi differ diff --git a/sandcode/icons/mob/screen_retro.dmi b/sandcode/icons/mob/screen_retro.dmi new file mode 100644 index 0000000000..ba20a9e8bd Binary files /dev/null and b/sandcode/icons/mob/screen_retro.dmi differ diff --git a/sandcode/icons/mob/screen_slimecore.dmi b/sandcode/icons/mob/screen_slimecore.dmi new file mode 100644 index 0000000000..a4854f16c3 Binary files /dev/null and b/sandcode/icons/mob/screen_slimecore.dmi differ diff --git a/sandcode/icons/obj/clothing/wrist.dmi b/sandcode/icons/obj/clothing/wrist.dmi new file mode 100644 index 0000000000..20ba91b5d2 Binary files /dev/null and b/sandcode/icons/obj/clothing/wrist.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 7eec72ba27..ee54019f71 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3661,10 +3661,12 @@ #include "sandcode\code\game\objects\items\cards_ids.dm" #include "sandcode\code\game\objects\items\chrono_eraser.dm" #include "sandcode\code\game\objects\items\computermath.dm" +#include "sandcode\code\game\objects\items\items.dm" #include "sandcode\code\game\objects\items\circuitboards\computer_circuitboards.dm" #include "sandcode\code\game\objects\items\circuitboards\machine_circuitboards.dm" #include "sandcode\code\game\objects\items\devices\extra_arm.dm" #include "sandcode\code\game\objects\items\devices\PDA\PDA.dm" +#include "sandcode\code\game\objects\items\devices\radio\radio.dm" #include "sandcode\code\game\objects\items\plushes\goat_boss.dm" #include "sandcode\code\game\objects\items\plushes\plushes.dm" #include "sandcode\code\game\objects\items\robot\robot_upgrades.dm" @@ -3682,12 +3684,21 @@ #include "sandcode\code\modules\cargo\packs\emergency.dm" #include "sandcode\code\modules\cargo\packs\misc.dm" #include "sandcode\code\modules\client\asset_cache.dm" +#include "sandcode\code\modules\client\loadout\boxers.dm" +#include "sandcode\code\modules\client\loadout\shirts.dm" +#include "sandcode\code\modules\client\loadout\socks.dm" #include "sandcode\code\modules\clothing\refactor.dm" #include "sandcode\code\modules\clothing\head\misc.dm" #include "sandcode\code\modules\clothing\masks\miscellaneous.dm" #include "sandcode\code\modules\clothing\outfits\standard.dm" #include "sandcode\code\modules\clothing\spacesuits\chronosuit.dm" #include "sandcode\code\modules\clothing\spacesuits\hardsuit.dm" +#include "sandcode\code\modules\clothing\under\_under.dm" +#include "sandcode\code\modules\clothing\underwear\_underwear.dm" +#include "sandcode\code\modules\clothing\underwear\boxers.dm" +#include "sandcode\code\modules\clothing\underwear\shirts.dm" +#include "sandcode\code\modules\clothing\underwear\socks.dm" +#include "sandcode\code\modules\clothing\wrists\_wrists.dm" #include "sandcode\code\modules\crafting\recipes\recipes_misc.dm" #include "sandcode\code\modules\hydroponics\grown\misc.dm" #include "sandcode\code\modules\integrated_electronics\core\assemblies.dm" @@ -3791,5 +3802,6 @@ #include "sandcode\code\modules\tgs\custom_procs.dm" #include "sandcode\code\modules\uplink\uplink_items.dm" #include "sandcode\code\modules\uplink\uplink_roles.dm" +#include "sandcode\code\modules\vending\clothesmate.dm" #include "sandcode\tools\Redirector\textprocs.dm" // END_INCLUDE
" dat += "

Clothing & Equipment

" + /* skyrat change dat += "Underwear:[underwear]" if(GLOB.underwear_list[underwear]?.has_color) dat += "Underwear Color:     Change
" @@ -590,6 +592,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Socks:[socks]" if(GLOB.socks_list[socks]?.has_color) dat += "Socks Color:     Change
" + */ dat += "Backpack:[backbag]" dat += "Jumpsuit:
[jumpsuit_style]
" if((HAS_FLESH in pref_species.species_traits) || (HAS_BONE in pref_species.species_traits)) @@ -890,7 +893,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) class_link = "style='white-space:normal;background:#ebc42e;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'" else class_link = "style='white-space:normal;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'" - dat += "
[name]
[name][colore]
[name][gear.cost]" if(islist(gear.restricted_roles)) if(gear.restricted_roles.len) @@ -1470,6 +1479,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) facial_hair_color = random_short_color() if("facial_hair_style") facial_hair_style = random_facial_hair_style(gender) + /* if("underwear") underwear = random_underwear(gender) undie_color = random_short_color() @@ -1479,6 +1489,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("socks") socks = random_socks() socks_color = random_short_color() + */ if(BODY_ZONE_PRECISE_EYES) eye_color = random_eye_color() if("s_tone") @@ -1640,6 +1651,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) else modified_limbs[limb_type] = list(modification_type) + /* if("underwear") var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_list if(new_underwear) @@ -1669,6 +1681,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/n_socks_color = input(user, "Choose your socks' color.", "Character Preference", "#[socks_color]") as color|null if(n_socks_color) socks_color = sanitize_hexcolor(n_socks_color, 6) + */ if("eyes") var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference","#"+eye_color) as color|null @@ -2682,20 +2695,32 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name] if(!G) return - var/toggle = text2num(href_list["toggle_gear"]) - if(!toggle && (G.type in chosen_gear))//toggling off and the item effectively is in chosen gear) - chosen_gear -= G.type - gear_points += initial(G.cost) - else if(toggle && (!(is_type_in_ref_list(G, chosen_gear)))) - if(!is_loadout_slot_available(G.category)) - to_chat(user, "You cannot take this loadout, as you've already chosen too many of the same category!") - return - if(G.donoritem && !G.donator_ckey_check(user.ckey)) - to_chat(user, "This is an item intended for donator use only. You are not authorized to use this item.") - return - if(gear_points >= initial(G.cost)) - chosen_gear += G.type - gear_points -= initial(G.cost) + //skyrat edit + if(href_list["toggle_gear"] != "color") + var/toggle = text2num(href_list["toggle_gear"]) + if(!toggle && (G.type in chosen_gear))//toggling off and the item effectively is in chosen gear) + chosen_gear -= G.type + gear_points += initial(G.cost) + else if(toggle && (!(is_type_in_ref_list(G, chosen_gear)))) + if(!is_loadout_slot_available(G.category)) + to_chat(user, "You cannot take this loadout, as you've already chosen too many of the same category!") + return + if(G.donoritem && !G.donator_ckey_check(user.ckey)) + to_chat(user, "This is an item intended for donator use only. You are not authorized to use this item.") + return + if(gear_points >= initial(G.cost)) + chosen_gear += G.type + if(!color_gear) + color_gear = list() + color_gear |= list(G.name = G.color) + gear_points -= initial(G.cost) + else + var/choice = input(user, "Select a color for [G.name].", "Gear Color") as color + if(choice) + if(!color_gear) + color_gear = list() + color_gear[G.name] = choice + // ShowChoices(user) return 1 @@ -2736,6 +2761,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.dna.skin_tone_override = use_custom_skin_tone ? skin_tone : null character.hair_style = hair_style character.facial_hair_style = facial_hair_style + /* skyrat edit character.underwear = underwear character.saved_underwear = underwear @@ -2743,6 +2769,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.saved_undershirt = undershirt character.socks = socks character.saved_socks = socks + */ character.undie_color = undie_color character.shirt_color = shirt_color character.socks_color = socks_color diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index d6279b8a97..c12e2ac1b8 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -534,6 +534,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["chosen_limb_id"] >> chosen_limb_id S["hide_ckey"] >> hide_ckey //saved per-character + //SKYRAT CHANGES + S["color_gear"] >> color_gear + // + //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) var/savefile_slot_name = custom_name_id + "_name" //TODO remove this @@ -899,6 +903,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["modified_limbs"] , safe_json_encode(modified_limbs)) WRITE_FILE(S["chosen_limb_id"], chosen_limb_id) + //SKYRAT CHANGES + WRITE_FILE(S["color_gear"] , color_gear) + // //gear loadout if(chosen_gear.len) diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index f58be1373a..cc36d2b02e 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -20,7 +20,7 @@ /obj/item/clothing/ears/earmuffs/ComponentInitialize() . = ..() AddElement(/datum/element/earhealing) - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) + AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS_LEFT, SLOT_EARS_RIGHT)) //skyrat edit /obj/item/clothing/ears/headphones name = "headphones" diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm index 0bc8c87a45..0daf2b39aa 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -28,8 +28,20 @@ mask = item_path if(SLOT_NECK) neck = item_path - if(SLOT_EARS) + //skyrat edit + if(SLOT_EARS_LEFT) ears = item_path + if(SLOT_EARS_RIGHT) + ears_extra = item_path + if(SLOT_WRISTS) + wrists = item_path + if(SLOT_W_SHIRT) + shirt = item_path + if(SLOT_W_UNDERWEAR) + underwear = item_path + if(SLOT_W_SOCKS) + socks = item_path + // if(SLOT_GLASSES) glasses = item_path if(SLOT_WEAR_ID) @@ -68,7 +80,7 @@ //Copy equipment var/list/result = list() - var/list/slots_to_check = list(SLOT_W_UNIFORM,SLOT_BACK,SLOT_WEAR_SUIT,SLOT_BELT,SLOT_GLOVES,SLOT_SHOES,SLOT_HEAD,SLOT_WEAR_MASK,SLOT_NECK,SLOT_EARS,SLOT_GLASSES,SLOT_WEAR_ID,SLOT_S_STORE,SLOT_L_STORE,SLOT_R_STORE) + var/list/slots_to_check = list(SLOT_W_UNIFORM,SLOT_W_UNDERWEAR,SLOT_W_SHIRT,SLOT_W_SOCKS,SLOT_BACK,SLOT_WEAR_SUIT,SLOT_BELT,SLOT_GLOVES,SLOT_WRISTS,SLOT_SHOES,SLOT_HEAD,SLOT_WEAR_MASK,SLOT_NECK,SLOT_EARS_LEFT,SLOT_EARS_RIGHT,SLOT_GLASSES,SLOT_WEAR_ID,SLOT_S_STORE,SLOT_L_STORE,SLOT_R_STORE) //skyrat edit for(var/s in slots_to_check) var/obj/item/I = get_item_by_slot(s) var/vedits = collect_vv(I) @@ -140,4 +152,4 @@ if(id_slot) var/obj/item/card/id/card = id_slot.GetID() if(istype(card)) - card.access |= stored_access \ No newline at end of file + card.access |= stored_access diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index 0d16f9bdfa..7d670b14cb 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -24,10 +24,15 @@ var/mob/living/carbon/human/M = loc if(ishuman(M) && M.w_uniform) var/obj/item/clothing/under/U = M.w_uniform - if(istype(U) && U.attached_accessory) - var/obj/item/clothing/accessory/A = U.attached_accessory - if(A.above_suit) + //SKYRAT EDIT + if(istype(U) && length(U.attached_accessories)) + var/please_overlay = FALSE + for(var/obj/item/clothing/accessory/attached in U.attached_accessories) + if(attached.above_suit) + please_overlay = TRUE + if(please_overlay) . += U.accessory_overlay + //SKYRAT EDIT END /obj/item/clothing/suit/update_clothes_damaged_state() ..() diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 23cb2b1c15..60c34baa9b 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -16,7 +16,10 @@ var/adjusted = NORMAL_STYLE var/alt_covers_chest = FALSE // for adjusted/rolled-down jumpsuits, FALSE = exposes chest and arms, TRUE = exposes arms only var/dummy_thick = FALSE // is able to hold accessories on its item - var/obj/item/clothing/accessory/attached_accessory + //SKYRAT EDIT - Removed the old attached accessory system. We use a list of accessories instead. + var/list/obj/item/clothing/accessory/attached_accessories = list() + var/max_accessories = 3 + //SKYRAT EDIT END var/mutable_appearance/accessory_overlay /obj/item/clothing/under/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) @@ -62,29 +65,33 @@ if(!alt_covers_chest) body_parts_covered |= CHEST - if(attached_accessory && slot != SLOT_HANDS && ishuman(user)) - var/mob/living/carbon/human/H = user - attached_accessory.on_uniform_equip(src, user) - if(attached_accessory.above_suit) - H.update_inv_wear_suit() + //SKYRAT EDIT + for(var/obj/item/clothing/accessory/attached_accessory in attached_accessories) + if(attached_accessory && slot != SLOT_HANDS && ishuman(user)) + var/mob/living/carbon/human/H = user + attached_accessory.on_uniform_equip(src, user) + if(attached_accessory.above_suit) + H.update_inv_wear_suit() + //SKYRAT EDIT END /obj/item/clothing/under/dropped(mob/user) - if(attached_accessory) + //SKYRAT EDIT + for(var/obj/item/clothing/accessory/attached_accessory in attached_accessories) attached_accessory.on_uniform_dropped(src, user) if(ishuman(user)) var/mob/living/carbon/human/H = user if(attached_accessory.above_suit) H.update_inv_wear_suit() - + //SKYRAT EDIT END ..() /obj/item/clothing/under/proc/attach_accessory(obj/item/I, mob/user, notifyAttach = 1) . = FALSE if(istype(I, /obj/item/clothing/accessory)) var/obj/item/clothing/accessory/A = I - if(attached_accessory) + if(length(attached_accessories) >= max_accessories) if(user) - to_chat(user, "[src] already has an accessory.") + to_chat(user, "[src] already has [length(attached_accessories)] accessories.") return if(dummy_thick) if(user) @@ -102,9 +109,14 @@ if((flags_inv & HIDEACCESSORY) || (A.flags_inv & HIDEACCESSORY)) return TRUE - accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', attached_accessory.icon_state) - accessory_overlay.alpha = attached_accessory.alpha - accessory_overlay.color = attached_accessory.color + //SKYRAT EDIT + accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', "blank") + for(var/obj/item/clothing/accessory/attached_accessory in attached_accessories) + var/mutable_appearance/Y = mutable_appearance(attached_accessory.mob_overlay_icon, attached_accessory.icon_state, ABOVE_HUD_LAYER) + Y.alpha = attached_accessory.alpha + Y.color = attached_accessory.color + accessory_overlay.add_overlay(Y) + //SKYRAT EDIT END if(ishuman(loc)) var/mob/living/carbon/human/H = loc @@ -119,9 +131,11 @@ if(!can_use(user)) return - if(attached_accessory) - var/obj/item/clothing/accessory/A = attached_accessory - attached_accessory.detach(src, user) + //SKYRAT EDIT + if(length(attached_accessories)) + var/obj/item/clothing/accessory/A = attached_accessories[length(attached_accessories)] + //SKYRAT EDIT END + A.detach(src, user) if(user.put_in_hands(A)) to_chat(user, "You detach [A] from [src].") else @@ -152,8 +166,10 @@ . += "Its vital tracker appears to be enabled." if(SENSOR_COORDS) . += "Its vital tracker and tracking beacon appear to be enabled." - if(attached_accessory) - . += "\A [attached_accessory] is attached to it." + if(length(attached_accessories)) + for(var/obj/item/clothing/accessory/attached_accessory in attached_accessories) + . += "\A [attached_accessory] is attached to it." + //SKYRAT EDIT END /obj/item/clothing/under/verb/toggle() set name = "Adjust Suit Sensors" @@ -230,7 +246,7 @@ . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return - if(attached_accessory) + if(length(attached_accessories)) //SKYRAT EDIT remove_accessory(user) else rolldown() diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index ee7e4c48e1..da91b18742 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -2,6 +2,9 @@ name = "Accessory" desc = "Something has gone wrong!" icon = 'icons/obj/clothing/accessories.dmi' + //skyrat edit + mob_overlay_icon = 'icons/mob/clothing/accessories.dmi' + // icon_state = "plasma" item_state = "" //no inhands slot_flags = 0 @@ -9,6 +12,9 @@ var/above_suit = FALSE var/minimize_when_attached = TRUE // TRUE if shown as a small icon in corner, FALSE if overlayed var/datum/component/storage/detached_pockets + //skyrat edit + var/current_uniform = null + // /obj/item/clothing/accessory/proc/attach(obj/item/clothing/under/U, user) var/datum/component/storage/storage = GetComponent(/datum/component/storage) @@ -17,15 +23,12 @@ return FALSE U.TakeComponent(storage) detached_pockets = storage - U.attached_accessory = src + //SKYRAT EDIT + U.attached_accessories |= src + force_unto(U) + current_uniform = U + //SKYRAT EDIT END forceMove(U) - layer = FLOAT_LAYER - plane = FLOAT_PLANE - if(minimize_when_attached) - transform *= 0.5 //halve the size so it doesn't overpower the under - pixel_x += 8 - pixel_y -= 8 - U.add_overlay(src) if (islist(U.armor) || isnull(U.armor)) // This proc can run before /obj/Initialize has run for U and src, U.armor = getArmor(arglist(U.armor)) // we have to check that the armor list has been transformed into a datum before we try to call a proc on it @@ -45,19 +48,57 @@ TakeComponent(detached_pockets) U.armor = U.armor.detachArmor(armor) + //SKYRAT EDIT + current_uniform = null + //SKYRAT EDIT END if(isliving(user)) on_uniform_dropped(U, user) if(minimize_when_attached) transform *= 2 - pixel_x -= 8 - pixel_y += 8 + pixel_x = 0 + pixel_y = 0 layer = initial(layer) plane = initial(plane) - U.cut_overlays() - U.attached_accessory = null U.accessory_overlay = null + U.cut_overlays() + U.attached_accessories -= src + if(length(U.attached_accessories)) + U.accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', "blank", WRISTS_LAYER, U.plane) + for(var/obj/item/clothing/accessory/attached_accessory in U.attached_accessories) + attached_accessory.force_unto(U) + var/mutable_appearance/Y = mutable_appearance(attached_accessory.mob_overlay_icon, attached_accessory.icon_state, WRISTS_LAYER, U.plane) + Y.alpha = attached_accessory.alpha + Y.color = attached_accessory.color + U.accessory_overlay.add_overlay(Y) +//SKYRAT EDIT +/obj/item/clothing/accessory/proc/force_unto(obj/item/clothing/under/U) + layer = FLOAT_LAYER + plane = FLOAT_PLANE + if(minimize_when_attached) + if(current_uniform != U) + transform *= 0.5 //halve the size so it doesn't overpower the under + pixel_x += 8 + pixel_y -= 8 + if(length(U.attached_accessories) > 1) + if(length(U.attached_accessories) <= 3 && !current_uniform) + pixel_y += 8 * (length(U.attached_accessories) - 1) + else if((length(U.attached_accessories) > 3) && (length(U.attached_accessories) <= 6) && !current_uniform) + pixel_x -= 8 + pixel_y += 8 * (length(U.attached_accessories) - 4) + else if((length(U.attached_accessories) > 6) && (length(U.attached_accessories) <= 9) && !current_uniform) + pixel_x -= 16 + pixel_y += 8 * (length(U.attached_accessories) - 7) + else + if(current_uniform != U) + //we ran out of space for accessories, so we just throw shit at the wall + pixel_x = 0 + pixel_y = 0 + pixel_x += rand(-16, 16) + pixel_y += rand(-16, 16) + U.add_overlay(src) +//SKYRAT EDIT END /obj/item/clothing/accessory/proc/on_uniform_equip(obj/item/clothing/under/U, user) return diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index bc83eb752d..17f109cbc7 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -83,7 +83,7 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S if(ears) if(H.ears) qdel(H.ears) - H.equip_to_slot_or_del(new ears(H),SLOT_EARS) + H.equip_to_slot_or_del(new ears(H),SLOT_EARS_LEFT) //skyrat edit var/obj/item/card/id/W = H.wear_id W.access |= dep_access diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 9ac270bf34..6c3bf3e1cc 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -365,16 +365,23 @@ var/slot_priority = W.slot_equipment_priority if(!slot_priority) + //skyrat edit slot_priority = list( \ SLOT_BACK, SLOT_WEAR_ID,\ - SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\ + SLOT_W_UNDERWEAR,\ + SLOT_W_SOCKS,\ + SLOT_W_SHIRT,\ + SLOT_W_UNIFORM,\ + SLOT_WEAR_SUIT,\ SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\ - SLOT_SHOES, SLOT_GLOVES,\ - SLOT_EARS, SLOT_GLASSES,\ + SLOT_SHOES, SLOT_WRISTS, SLOT_GLOVES,\ + SLOT_EARS_LEFT, SLOT_EARS_RIGHT,\ + SLOT_GLASSES,\ SLOT_BELT, SLOT_S_STORE,\ SLOT_L_STORE, SLOT_R_STORE,\ SLOT_GENERC_DEXTROUS_STORAGE\ ) + // for(var/slot in slot_priority) if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, clothing_check)) //qdel_on_fail = 0; disable_warning = 1; redraw_mob = 1 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 1706763f6b..8bb9e78b38 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1176,7 +1176,8 @@ if(head.flags_inv & HIDEEYES) LAZYOR(., SLOT_GLASSES) if(head.flags_inv & HIDEEARS) - LAZYOR(., SLOT_EARS) + LAZYOR(., SLOT_EARS_LEFT) + LAZYOR(., SLOT_EARS_RIGHT) if(wear_mask) if(wear_mask.flags_inv & HIDEEYES) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 56948bfc0f..b6e8aee44e 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -25,19 +25,47 @@ var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) + //Skyrat changes - edited that to only show the extra species tidbit if it's unknown or he's got a custom species + //and also underwear slots :) if(skipface || get_visible_name() == "Unknown") . += "You can't make out what species they are." else . += "[t_He] [t_is] a [dna.custom_species ? dna.custom_species : dna.species.name]!" + //Underwear + var/undies_hidden = underwear_hidden() + if(w_underwear && !undies_hidden) + . += "[t_He] [t_is] wearing [w_underwear.get_examine_string(user)]." + if(w_socks && !undies_hidden) + . += "[t_He] [t_is] wearing [w_socks.get_examine_string(user)]." + if(w_shirt && !undies_hidden) + . += "[t_He] [t_is] wearing [w_shirt.get_examine_string(user)]." + //Wrist slot because you're epic + if(wrists && !(SLOT_WRISTS in obscured)) + . += "[t_He] [t_is] wearing [wrists.get_examine_string(user)]." + //End of skyrat changes + //uniform if(w_uniform && !(SLOT_W_UNIFORM in obscured)) //accessory var/accessory_msg if(istype(w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/U = w_uniform - if(U.attached_accessory && !(U.attached_accessory.flags_inv & HIDEACCESSORY) && !(U.flags_inv & HIDEACCESSORY)) - accessory_msg += " with [icon2html(U.attached_accessory, user)] \a [U.attached_accessory]" + if(length(U.attached_accessories) && !(U.flags_inv & HIDEACCESSORY)) + var/list/weehoo = list() + var/dumb_icons = "" + for(var/obj/item/clothing/accessory/attached_accessory in U.attached_accessories) + if(!(attached_accessory.flags_inv & HIDEACCESSORY)) + weehoo += "\a [attached_accessory]" + dumb_icons = "[dumb_icons][icon2html(attached_accessory, user)]" + if(length(weehoo)) + accessory_msg += " with [dumb_icons]" + if(length(U.attached_accessories) >= 2) + accessory_msg += jointext(weehoo, ", ", 1, length(weehoo) - 1) + accessory_msg += " and [weehoo[length(weehoo)]]" + else + accessory_msg += weehoo[1] + . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]." //head @@ -100,8 +128,18 @@ . += "[t_His] eyes are flickering a bright yellow!" //ears - if(ears && !(SLOT_EARS in obscured)) - . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears." + if(ears && !(SLOT_EARS_LEFT in obscured)) //skyrat edit + . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] left ear." + + //skyrat edit - extra ear slot haha + if(ears_extra && !(SLOT_EARS_RIGHT in obscured)) + . += "[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) && !(SLOT_EARS_LEFT in obscured)) && (istype(ears_extra, /obj/item/radio/headset) && !(SLOT_EARS_RIGHT in obscured))) + . += "[t_He] looks quite tacky wearing both \an [ears.name] and \an [ears_extra.name] on [t_his] head." + + // //ID if(wear_id) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 3262dd5fc9..0096227f96 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -145,10 +145,17 @@ else dat += "
Eyes:[(glasses && !(glasses.item_flags & ABSTRACT)) ? glasses : "Empty"]
Ears:Obscured
Left ear:Obscured
Ears:[(ears && !(ears.item_flags & ABSTRACT)) ? ears : "Empty"]
Left ear:[(ears && !(ears.item_flags & ABSTRACT)) ? ears : "Empty"]
Right ear:Obscured
Right ear:[(ears_extra && !(ears_extra.item_flags & ABSTRACT)) ? ears_extra : "Empty"]
 
Gloves:[(gloves && !(gloves.item_flags & ABSTRACT)) ? gloves : "Empty"]
Wrists:Obscured
Wrists:[(wrists && !(wrists.item_flags & ABSTRACT)) ? wrists : "Empty"]
Uniform:Obscured
 ↳ID:[(wear_id && !(wear_id.item_flags & ABSTRACT)) ? wear_id : "Empty"]
Underwear Section:
 ↳Underwear:Obscured
 ↳Underwear:[(w_underwear && !(w_underwear.item_flags & ABSTRACT)) ? w_underwear : "Empty"]
 ↳Socks:Obscured
 ↳Socks:[(w_socks && !(w_socks.item_flags & ABSTRACT)) ? w_socks : "Empty"]
 ↳Shirt:Obscured
 ↳Shirt:[(w_shirt && !(w_shirt.item_flags & ABSTRACT)) ? w_shirt : "Empty"]
Handcuffed: Remove