Morrowinventory Port (#75)

This commit is contained in:
SandPoot
2020-09-24 20:14:53 -03:00
committed by GitHub
parent 4af4a89bf0
commit 13834c4bef
90 changed files with 2610 additions and 148 deletions
+4 -1
View File
@@ -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
+36 -3
View File
@@ -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)
+9 -1
View File
@@ -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
#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"
//
+25 -18
View File
@@ -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"
+6
View File
@@ -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
+1 -1
View File
@@ -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
+2
View File
@@ -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)
+16 -4
View File
@@ -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)
+2 -1
View File
@@ -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
))
+11 -2
View File
@@ -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"
+47 -1
View File
@@ -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
+122 -4
View File
@@ -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)
-1
View File
@@ -187,7 +187,6 @@
user.swap_hand(held_index)
return TRUE
/obj/screen/drop
name = "drop"
icon = 'icons/mob/screen_midnight.dmi'
+4
View File
@@ -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
+5
View File
@@ -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
+5
View File
@@ -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.
+1 -1
View File
@@ -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)
+4 -1
View File
@@ -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
+18
View File
@@ -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()
+1 -1
View File
@@ -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
+34 -2
View File
@@ -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
+14
View File
@@ -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)
+3 -3
View File
@@ -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
@@ -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)
+16 -1
View File
@@ -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)
@@ -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
+3
View File
@@ -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
+2
View File
@@ -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)
*/
+12 -1
View File
@@ -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
@@ -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)
@@ -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)
+1 -1
View File
@@ -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)
+2
View File
@@ -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
@@ -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)
+42 -15
View File
@@ -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 += "</td>"
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
dat += "<h2>Clothing & Equipment</h2>"
/* skyrat change
dat += "<b>Underwear:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a>"
if(GLOB.underwear_list[underwear]?.has_color)
dat += "<b>Underwear Color:</b> <span style='border:1px solid #161616; background-color: #[undie_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=undie_color;task=input'>Change</a><BR>"
@@ -590,6 +592,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Socks:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=socks;task=input'>[socks]</a>"
if(GLOB.socks_list[socks]?.has_color)
dat += "<b>Socks Color:</b> <span style='border:1px solid #161616; background-color: #[socks_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=socks_color;task=input'>Change</a><BR>"
*/
dat += "<b>Backpack:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a>"
dat += "<b>Jumpsuit:</b><BR><a href ='?_src_=prefs;preference=suit;task=input'>[jumpsuit_style]</a><BR>"
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 += "<tr style='vertical-align:top;'><td width=15%><a [class_link]>[name]</a></td>"
//skyrat edit
if(gear.has_colors && (gear.name in color_gear))
var/colore = "<a href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=color'>Color</a><span style='border: 1px solid #161616; background-color: [color_gear[gear.name]];'>&nbsp;&nbsp;&nbsp;</span>"
dat += "<tr style='vertical-align:top;'><td width=15%><a [class_link]>[name]</a>[colore]</td>"
else
dat += "<tr style='vertical-align:top;'><td width=15%><a [class_link]>[name]</a></td>"
//
dat += "<td width = 5% style='vertical-align:top'>[gear.cost]</td><td>"
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, "<span class='danger'>You cannot take this loadout, as you've already chosen too many of the same category!</span>")
return
if(G.donoritem && !G.donator_ckey_check(user.ckey))
to_chat(user, "<span class='danger'>This is an item intended for donator use only. You are not authorized to use this item.</span>")
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, "<span class='danger'>You cannot take this loadout, as you've already chosen too many of the same category!</span>")
return
if(G.donoritem && !G.donator_ckey_check(user.ckey))
to_chat(user, "<span class='danger'>This is an item intended for donator use only. You are not authorized to use this item.</span>")
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
@@ -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)
+1 -1
View File
@@ -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"
+15 -3
View File
@@ -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
card.access |= stored_access
+8 -3
View File
@@ -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()
..()
+35 -19
View File
@@ -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, "<span class='warning'>[src] already has an accessory.</span>")
to_chat(user, "<span class='warning'>[src] already has [length(attached_accessories)] accessories.</span>")
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, "<span class='notice'>You detach [A] from [src].</span>")
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()
+53 -12
View File
@@ -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
@@ -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
+10 -3
View File
@@ -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
+2 -1
View File
@@ -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)
@@ -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 @@
. += "<b><font color=orange>[t_His] eyes are flickering a bright yellow!</font></b>"
//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)))
. += "<span class='warning'>[t_He] looks quite tacky wearing both \an [ears.name] and \an [ears_extra.name] on [t_his] head.</span>"
//
//ID
if(wear_id)
+42 -3
View File
@@ -145,10 +145,17 @@
else
dat += "<tr><td><B>Eyes:</B></td><td><A href='?src=[REF(src)];item=[SLOT_GLASSES]'>[(glasses && !(glasses.item_flags & ABSTRACT)) ? glasses : "<font color=grey>Empty</font>"]</A></td></tr>"
if(SLOT_EARS in obscured)
dat += "<tr><td><font color=grey><B>Ears:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
//skyrat edit
if(SLOT_EARS_LEFT in obscured)
dat += "<tr><td><font color=grey><B>Left ear:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
else
dat += "<tr><td><B>Ears:</B></td><td><A href='?src=[REF(src)];item=[SLOT_EARS]'>[(ears && !(ears.item_flags & ABSTRACT)) ? ears : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += "<tr><td><B>Left ear:</B></td><td><A href='?src=[REF(src)];item=[SLOT_EARS_LEFT]'>[(ears && !(ears.item_flags & ABSTRACT)) ? ears : "<font color=grey>Empty</font>"]</A></td></tr>"
if(SLOT_EARS_RIGHT in obscured)
dat += "<tr><td><font color=grey><B>Right ear:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
else
dat += "<tr><td><B>Right ear:</B></td><td><A href='?src=[REF(src)];item=[SLOT_EARS_RIGHT]'>[(ears_extra && !(ears_extra.item_flags & ABSTRACT)) ? ears_extra : "<font color=grey>Empty</font>"]</A></td></tr>"
//
dat += "<tr><td>&nbsp;</td></tr>"
@@ -179,6 +186,13 @@
else
dat += "<tr><td><B>Gloves:</B></td><td><A href='?src=[REF(src)];item=[SLOT_GLOVES]'>[(gloves && !(gloves.item_flags & ABSTRACT)) ? gloves : "<font color=grey>Empty</font>"]</A></td></tr>"
//skyrat edit
if(SLOT_WRISTS in obscured)
dat += "<tr><td><font color=grey><B>Wrists:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
else
dat += "<tr><td><B>Wrists:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WRISTS]'>[(wrists && !(wrists.item_flags & ABSTRACT)) ? wrists : "<font color=grey>Empty</font>"]</A></td></tr>"
//
if(SLOT_W_UNIFORM in obscured)
dat += "<tr><td><font color=grey><B>Uniform:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
else
@@ -197,6 +211,23 @@
dat += "&nbsp;<A href='?src=[REF(src)];pockets=right'>[(r_store && !(r_store.item_flags & ABSTRACT)) ? "Right (Full)" : "<font color=grey>Right (Empty)</font>"]</A></td></tr>"
dat += "<tr><td>&nbsp;&#8627;<B>ID:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_ID]'>[(wear_id && !(wear_id.item_flags & ABSTRACT)) ? wear_id : "<font color=grey>Empty</font>"]</A></td></tr>"
//skyrat edit
dat += "<tr><td><B>Underwear Section:</B></td></tr>"
var/undies_hidden = underwear_hidden()
if((SLOT_W_UNDERWEAR in obscured) || undies_hidden)
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>Underwear:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
else
dat += "<tr><td>&nbsp;&#8627;<B>Underwear:</B></td><td><A href='?src=[REF(src)];item=[SLOT_W_UNDERWEAR]'>[(w_underwear && !(w_underwear.item_flags & ABSTRACT)) ? w_underwear : "<font color=grey>Empty</font>"]</A></td></tr>"
if((SLOT_W_SOCKS in obscured) || undies_hidden)
dat += "<tr><td>&nbsp;&#8627;<font color=grey><B>Socks:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
else
dat += "<tr><td>&nbsp;&#8627;<B>Socks:</B></td><td><A href='?src=[REF(src)];item=[SLOT_W_SOCKS]'>[(w_socks && !(w_socks.item_flags & ABSTRACT)) ? w_socks : "<font color=grey>Empty</font>"]</A></td></tr>"
if((SLOT_W_SHIRT in obscured) || undies_hidden)
dat += "<tr><td>&nbsp;&#8627;<font color=grey><B>Shirt:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
else
dat += "<tr><td>&nbsp;&#8627;<B>Shirt:</B></td><td><A href='?src=[REF(src)];item=[SLOT_W_SHIRT]'>[(w_shirt && !(w_shirt.item_flags & ABSTRACT)) ? w_shirt : "<font color=grey>Empty</font>"]</A></td></tr>"
//
if(handcuffed)
dat += "<tr><td><B>Handcuffed:</B> <A href='?src=[REF(src)];item=[SLOT_HANDCUFFED]'>Remove</A></td></tr>"
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)
@@ -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
@@ -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
@@ -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
@@ -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))
@@ -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
@@ -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
+120 -2
View File
@@ -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("<span class='danger'>[H] has been knocked down!</span>", \
"<span class='userdanger'>[H] has been knocked down!</span>")
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)))
@@ -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)
+20 -1
View File
@@ -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
return
/mob/proc/update_inv_ears_extra()
return
//
@@ -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.
@@ -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 = "<span class='ion'>ION</span>"
projectile_type = /obj/item/projectile/ion
projectile_type = /obj/item/projectile/ion
@@ -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()
@@ -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
+9 -1
View File
@@ -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
. |= L.body_part
+1 -1
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 780 B

After

Width:  |  Height:  |  Size: 886 B

@@ -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)
@@ -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)
LAZYCLEARLIST(alternate_screams)
@@ -0,0 +1,2 @@
/obj/item/radio/headset
slot_flags = ITEM_SLOT_EARS
@@ -0,0 +1,2 @@
/obj/item
hide_underwear_examine = TRUE
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,2 @@
/obj/item/clothing/under
hide_underwear_examine = TRUE
@@ -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
@@ -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"
@@ -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"
@@ -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 = "<i>You like jazz?</i>"
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
@@ -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
@@ -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
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

+12
View File
@@ -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