diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 3a4e34463a27e..247a7a964c183 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -710,6 +710,10 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( #define FRONT_MUTATIONS_LAYER 29 /// Damage indicators (cuts and burns) #define DAMAGE_LAYER 28 +/// DOPPLER SHIFT ADDITION BEGIN +/// Just below clothing layer +#define UNDER_UNIFORM_LAYER 27.5 +/// DOPPLER SHIFT ADDITION END /// Jumpsuit clothing layer #define UNIFORM_LAYER 27 /// DOPPLER SHIFT ADDITION BEGIN diff --git a/modular_doppler/advanced_reskin/code/advanced_reskin.dm b/modular_doppler/advanced_reskin/code/advanced_reskin.dm index 6b461839c85f6..7eba3fad8331d 100644 --- a/modular_doppler/advanced_reskin/code/advanced_reskin.dm +++ b/modular_doppler/advanced_reskin/code/advanced_reskin.dm @@ -10,13 +10,6 @@ /// Is the obj a glasses icon with swappable item states? var/is_swappable = FALSE - // /// if the item are glasses, this variable stores the item. - // var/obj/item/clothing/glasses/reskinned_glasses - - // if(istype(src, /obj/item/clothing/glasses)) // TODO - Remove this mess about glasses, it shouldn't be necessary anymore. - // reskinned_glasses = src - // if(reskinned_glasses.can_switch_eye) - // is_swappable = TRUE var/list/items = list() diff --git a/modular_doppler/hearthkin/primitive_catgirls/code/clothing_vendor.dm b/modular_doppler/hearthkin/primitive_catgirls/code/clothing_vendor.dm index 9ac3a81dfed89..483c77acc9bad 100644 --- a/modular_doppler/hearthkin/primitive_catgirls/code/clothing_vendor.dm +++ b/modular_doppler/hearthkin/primitive_catgirls/code/clothing_vendor.dm @@ -3,11 +3,11 @@ desc = "It's a big wardrobe filled up with all sorts of clothing." icon = 'icons/obj/storage/closet.dmi' icon_state = "cabinet" - use_power = FALSE - shut_up = TRUE vend_reply = null + onstation = FALSE // we don't ever want these to be targetable by the brand intelligence event. + all_products_free = TRUE // we don't want them to charge anything either. it's a wardrobe. products = list( /obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps = 15, @@ -19,19 +19,19 @@ /obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps = 15, /obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots = 15, /obj/item/clothing/gloves/fingerless/primitive_catgirl_gauntlets = 10, - // /obj/item/clothing/mask/neck_gaiter/primitive_catgirl_gaiter = 10, - // /obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather = 10, - // /obj/item/clothing/head/standalone_hood/primitive_catgirl_colors = 10, + /obj/item/clothing/mask/neck_gaiter/primitive_catgirl_gaiter = 10, + /obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather = 10, + /obj/item/clothing/head/standalone_hood/primitive_catgirl_colors = 10, /obj/item/clothing/neck/scarf/primitive_catgirl_scarf = 5, - // /obj/item/clothing/neck/face_scarf = 5, + /obj/item/clothing/neck/face_scarf = 5, /obj/item/clothing/neck/large_scarf/primitive_catgirl_off_white = 5, /obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue = 5, - // /obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white = 5, + /obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white = 5, /obj/item/clothing/neck/ranger_poncho/ = 5, /obj/item/clothing/neck/wide_cape = 5, /obj/item/clothing/neck/robe_cape = 5, /obj/item/clothing/neck/long_cape = 5, - // /obj/item/clothing/glasses/eyepatch/wrap = 5, + /obj/item/clothing/glasses/eyepatch/wrap = 5, /obj/item/clothing/head/primitive_catgirl_ferroniere = 5, /obj/item/clothing/head/pelt/snow_tiger = 5, /obj/item/clothing/head/pelt = 5, @@ -40,15 +40,10 @@ /obj/item/clothing/head/pelt/wolf = 5, /obj/item/clothing/head/pelt/wolf/black = 5, /obj/item/clothing/head/pelt/wolf/white = 5, - // /obj/item/clothing/head/costume/nova/papakha = 5, - // /obj/item/clothing/head/costume/nova/papakha/white = 5, - // /obj/item/clothing/head/hair_tie = 5, + /obj/item/clothing/head/costume/papakha = 5, + /obj/item/clothing/head/costume/papakha/white = 5, + /obj/item/clothing/head/hair_tie = 5, ) -/obj/machinery/vending/primitive_catgirl_clothing_vendor/Initialize(mapload) - . = ..() - - onstation = FALSE - /obj/machinery/vending/primitive_catgirl_clothing_vendor/speak(message) return diff --git a/modular_doppler/loadout_categories/categories/glasses.dm b/modular_doppler/loadout_categories/categories/glasses.dm index c483d0df6c483..ca4fe95fac706 100644 --- a/modular_doppler/loadout_categories/categories/glasses.dm +++ b/modular_doppler/loadout_categories/categories/glasses.dm @@ -5,3 +5,11 @@ /datum/loadout_item/glasses/welding name = "Welding Goggles" item_path = /obj/item/clothing/glasses/welding + +/datum/loadout_item/glasses/white_eyepatch + name = "White Eyepatch" + item_path = /obj/item/clothing/glasses/eyepatch/white + +/datum/loadout_item/glasses/eyewrap + name = "Eyepatch Wrap" + item_path = /obj/item/clothing/glasses/eyepatch/wrap diff --git a/modular_doppler/loadout_categories/categories/heads.dm b/modular_doppler/loadout_categories/categories/heads.dm index 5b082245ad7c1..1e9e548c57d48 100644 --- a/modular_doppler/loadout_categories/categories/heads.dm +++ b/modular_doppler/loadout_categories/categories/heads.dm @@ -61,3 +61,11 @@ /datum/loadout_item/head/colonial_cap name = "Colonial Cap" item_path = /obj/item/clothing/head/hats/colonial + +/datum/loadout_item/head/wrussian + name = "Black Papakha" + item_path = /obj/item/clothing/head/costume/papakha + +/datum/loadout_item/head/wrussianw + name = "White Papakha" + item_path = /obj/item/clothing/head/costume/papakha/white diff --git a/modular_doppler/loadout_categories/categories/masks.dm b/modular_doppler/loadout_categories/categories/masks.dm index ebfeb0ac16af1..69bb5782afe70 100644 --- a/modular_doppler/loadout_categories/categories/masks.dm +++ b/modular_doppler/loadout_categories/categories/masks.dm @@ -63,3 +63,7 @@ /datum/loadout_item/mask/frontier name = "Frontier Gas Mask" item_path = /obj/item/clothing/mask/gas/atmos/frontier_colonist + +/datum/loadout_item/mask/frontier + name = "Neck Gaiter" + item_path = /obj/item/clothing/mask/neck_gaiter diff --git a/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_face.dm b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_face.dm new file mode 100644 index 0000000000000..95d8b25f5c2ce --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_face.dm @@ -0,0 +1,22 @@ +/* \ / \/ \/ \/ / , + \ \ \/ \/ \/ \ \/ \/ / + .\ \/ \/ \/ \/ \/ / / / + *hedgehog noise* ) ' / / \/ \/ \/ \/ \/ \ \/ \ + This dm contains \ .' ) \/ \/ \/ \/ \/ \/ \ / \ + all face grayscales \ / o ) \/ \/ \/ \/ \/ \/ \// / + o'_ ',__ .' ,.,.,.,.,.,.,.,'- ' + // \\ // \\ + '' '' '' '' +*/ + +// GAITER + +/datum/greyscale_config/neck_gaiter + name = "Neck Gaiter" + icon_file = 'modular_doppler/modular_cosmetics/GAGS/icons/obj/face.dmi' + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/face/gaiter.json' + +/datum/greyscale_config/neck_gaiter/worn + name = "Neck Gaiter (Worn)" + icon_file = 'modular_doppler/modular_cosmetics/GAGS/icons/mob/face.dmi' + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/face/gaiter_worn.json' diff --git a/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_head.dm b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_head.dm new file mode 100644 index 0000000000000..1152207b6afb6 --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_head.dm @@ -0,0 +1,22 @@ +/* \ / \/ \/ \/ / , + \ \ \/ \/ \/ \ \/ \/ / + .\ \/ \/ \/ \/ \/ / / / + *hedgehog noise* ) ' / / \/ \/ \/ \/ \/ \ \/ \ + This dm contains \ .' ) \/ \/ \/ \/ \/ \/ \ / \ + all head grayscales \ / o ) \/ \/ \/ \/ \/ \/ \// / + o'_ ',__ .' ,.,.,.,.,.,.,.,'- ' + // \\ // \\ + '' '' '' '' +*/ + +// Standalone Hood + +/datum/greyscale_config/standalone_hood + name = "Hood" + icon_file = 'modular_doppler/modular_cosmetics/GAGS/icons/obj/head.dmi' + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/head/hood.json' + +/datum/greyscale_config/standalone_hood/worn + name = "Hood (Worn)" + icon_file = 'modular_doppler/modular_cosmetics/GAGS/icons/mob/head.dmi' + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/head/hood_worn.json' diff --git a/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_neck.dm b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_neck.dm index 73798620e9fd6..a6951f385605e 100644 --- a/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_neck.dm +++ b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_neck.dm @@ -147,3 +147,17 @@ /datum/greyscale_config/collar/spike/worn name = "Spiked Collar (Worn)" json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/collar/spike_worn.json' + +/////////// +//MANTLES// +/////////// + +/datum/greyscale_config/mantle + name = "Mantle" + icon_file = 'modular_doppler/modular_cosmetics/GAGS/icons/obj/neck.dmi' + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/neck/mantle.json' + +/datum/greyscale_config/mantle/worn + name = "Mantle (Worn)" + icon_file = 'modular_doppler/modular_cosmetics/GAGS/icons/mob/neck.dmi' + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/neck/mantle_worn.json' diff --git a/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_suit.dm b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_suit.dm index 2d64c61ad7235..ee3ae3ed47251 100644 --- a/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_suit.dm +++ b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_suit.dm @@ -62,3 +62,15 @@ name = "'dagger' designer mantle (worn)" icon_file = 'modular_doppler/modular_cosmetics/GAGS/icons/mob/shirt.dmi' json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/suit/dagger_mantle_worn.json' + +// Apron + +/datum/greyscale_config/apron + name = "Apron" + icon_file = 'modular_doppler/modular_cosmetics/GAGS/icons/obj/suit.dmi' + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/suit/apron.json' + +/datum/greyscale_config/apron/worn + name = "Apron (Worn)" + icon_file = 'modular_doppler/modular_cosmetics/GAGS/icons/mob/suit.dmi' + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/suit/apron_worn.json' diff --git a/modular_doppler/modular_cosmetics/GAGS/icons/mob/face.dmi b/modular_doppler/modular_cosmetics/GAGS/icons/mob/face.dmi new file mode 100644 index 0000000000000..0901ff540cca9 Binary files /dev/null and b/modular_doppler/modular_cosmetics/GAGS/icons/mob/face.dmi differ diff --git a/modular_doppler/modular_cosmetics/GAGS/icons/mob/head.dmi b/modular_doppler/modular_cosmetics/GAGS/icons/mob/head.dmi index b4dd070942039..c12bd55964781 100644 Binary files a/modular_doppler/modular_cosmetics/GAGS/icons/mob/head.dmi and b/modular_doppler/modular_cosmetics/GAGS/icons/mob/head.dmi differ diff --git a/modular_doppler/modular_cosmetics/GAGS/icons/mob/neck.dmi b/modular_doppler/modular_cosmetics/GAGS/icons/mob/neck.dmi index 1d551c3ee91a4..30be9c23f5b3d 100644 Binary files a/modular_doppler/modular_cosmetics/GAGS/icons/mob/neck.dmi and b/modular_doppler/modular_cosmetics/GAGS/icons/mob/neck.dmi differ diff --git a/modular_doppler/modular_cosmetics/GAGS/icons/mob/suit.dmi b/modular_doppler/modular_cosmetics/GAGS/icons/mob/suit.dmi new file mode 100644 index 0000000000000..c56b9a3a11925 Binary files /dev/null and b/modular_doppler/modular_cosmetics/GAGS/icons/mob/suit.dmi differ diff --git a/modular_doppler/modular_cosmetics/GAGS/icons/obj/face.dmi b/modular_doppler/modular_cosmetics/GAGS/icons/obj/face.dmi new file mode 100644 index 0000000000000..38e877ae9c9c2 Binary files /dev/null and b/modular_doppler/modular_cosmetics/GAGS/icons/obj/face.dmi differ diff --git a/modular_doppler/modular_cosmetics/GAGS/icons/obj/head.dmi b/modular_doppler/modular_cosmetics/GAGS/icons/obj/head.dmi index 1f8cee72c9da6..d63f9475baf24 100644 Binary files a/modular_doppler/modular_cosmetics/GAGS/icons/obj/head.dmi and b/modular_doppler/modular_cosmetics/GAGS/icons/obj/head.dmi differ diff --git a/modular_doppler/modular_cosmetics/GAGS/icons/obj/neck.dmi b/modular_doppler/modular_cosmetics/GAGS/icons/obj/neck.dmi index a0dc5e514ecd9..37b59a2f8cb2c 100644 Binary files a/modular_doppler/modular_cosmetics/GAGS/icons/obj/neck.dmi and b/modular_doppler/modular_cosmetics/GAGS/icons/obj/neck.dmi differ diff --git a/modular_doppler/modular_cosmetics/GAGS/icons/obj/suit.dmi b/modular_doppler/modular_cosmetics/GAGS/icons/obj/suit.dmi new file mode 100644 index 0000000000000..2707140ea05d9 Binary files /dev/null and b/modular_doppler/modular_cosmetics/GAGS/icons/obj/suit.dmi differ diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/face/gaiter.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/face/gaiter.json new file mode 100644 index 0000000000000..564f4853627ea --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/face/gaiter.json @@ -0,0 +1,18 @@ +{ + "gaiter": [ + { + "type": "icon_state", + "icon_state": "gaiter_obj", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ], + "gaiter_up": [ + { + "type": "icon_state", + "icon_state": "gaiter_obj_up", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/face/gaiter_worn.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/face/gaiter_worn.json new file mode 100644 index 0000000000000..bd1142f308375 --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/face/gaiter_worn.json @@ -0,0 +1,18 @@ +{ + "gaiter": [ + { + "type": "icon_state", + "icon_state": "gaiter", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ], + "gaiter_up": [ + { + "type": "icon_state", + "icon_state": "gaiter_up", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/head/hood.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/head/hood.json new file mode 100644 index 0000000000000..88d73ba8a3886 --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/head/hood.json @@ -0,0 +1,16 @@ +{ + "hood": [ + { + "type": "icon_state", + "icon_state": "hood_obj", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "hood_neck_obj", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/head/hood_worn.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/head/hood_worn.json new file mode 100644 index 0000000000000..a3de1fed01f01 --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/head/hood_worn.json @@ -0,0 +1,16 @@ +{ + "hood": [ + { + "type": "icon_state", + "icon_state": "hood", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "hood_neck", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/neck/mantle.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/neck/mantle.json new file mode 100644 index 0000000000000..91cb8d27b27fc --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/neck/mantle.json @@ -0,0 +1,10 @@ +{ + "mantle": [ + { + "type": "icon_state", + "icon_state": "mantle_obj", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/neck/mantle_worn.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/neck/mantle_worn.json new file mode 100644 index 0000000000000..4ec7a9dfcf487 --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/neck/mantle_worn.json @@ -0,0 +1,10 @@ +{ + "mantle": [ + { + "type": "icon_state", + "icon_state": "mantle", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/suit/apron.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/suit/apron.json new file mode 100644 index 0000000000000..b64e39ee98a19 --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/suit/apron.json @@ -0,0 +1,10 @@ +{ + "apron": [ + { + "type": "icon_state", + "icon_state": "apron_obj", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/suit/apron_worn.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/suit/apron_worn.json new file mode 100644 index 0000000000000..90d1d79b4ef58 --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/suit/apron_worn.json @@ -0,0 +1,10 @@ +{ + "apron": [ + { + "type": "icon_state", + "icon_state": "apron", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/code/face/glasses.dm b/modular_doppler/modular_cosmetics/code/face/glasses.dm new file mode 100644 index 0000000000000..e64ce22599ae9 --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/face/glasses.dm @@ -0,0 +1,24 @@ +/obj/item/clothing/glasses/eyepatch/wrap + name = "eye wrap" + desc = "A glorified bandage. At least this one's actually made for your head..." + icon = 'modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi' + icon_state = "eyewrap" + base_icon_state = "eyewrap" + +/obj/item/clothing/glasses/eyepatch/white + name = "white eyepatch" + desc = "This is what happens when a pirate gets a PhD." + icon = 'modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi' + icon_state = "eyepatch_white" + base_icon_state = "eyepatch_white" + +/obj/item/clothing/glasses/examine(mob/user) + . = ..() + if(locate(/datum/action/item_action/flip) in actions) + . += "Use in hands to wear it over your [icon_state == base_icon_state ? "left" : "right"] eye." + +// /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch/examine(mob/user) +// . = ..() +// . += "Use in hands to wear it over your [icon_state == base_icon_state ? "left" : "right"] eye." diff --git a/modular_doppler/modular_cosmetics/code/face/masks.dm b/modular_doppler/modular_cosmetics/code/face/masks.dm new file mode 100644 index 0000000000000..c2a1f97c5301a --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/face/masks.dm @@ -0,0 +1,41 @@ +/obj/item/clothing/mask/neck_gaiter + name = "neck gaiter" + desc = "A cloth for covering your neck, and usually part of your face too, but that part's optional. Has a small respirator to be used with internals." + actions_types = list(/datum/action/item_action/adjust) + alternate_worn_layer = UNDER_UNIFORM_LAYER + icon_state = "gaiter" + icon = 'modular_doppler/modular_cosmetics/GAGS/icons/obj/face.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/GAGS/icons/mob/face.dmi' + supported_bodyshapes = null + bodyshape_icon_files = null + inhand_icon_state = "balaclava" + greyscale_config = /datum/greyscale_config/neck_gaiter + greyscale_config_worn = /datum/greyscale_config/neck_gaiter/worn + greyscale_colors = "#666666" + clothing_flags = BLOCK_GAS_SMOKE_EFFECT|MASKINTERNALS + w_class = WEIGHT_CLASS_SMALL + flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDESNOUT + visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS + visor_flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDESNOUT + flags_cover = MASKCOVERSMOUTH + visor_flags_cover = MASKCOVERSMOUTH + flags_1 = IS_PLAYER_COLORABLE_1 + interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING + +/obj/item/clothing/mask/neck_gaiter/attack_self(mob/user) + adjust_visor(user) + +/obj/item/clothing/mask/neck_gaiter/click_alt(mob/user) + adjust_visor(user) + return CLICK_ACTION_SUCCESS + +/obj/item/clothing/mask/neck_gaiter/click_alt_secondary(mob/user) + alternate_worn_layer = (alternate_worn_layer == initial(alternate_worn_layer) ? NONE : initial(alternate_worn_layer)) + user.update_clothing(ITEM_SLOT_MASK) + balloon_alert(user, "wearing [alternate_worn_layer == initial(alternate_worn_layer) ? "below" : "above"] suits") + +/obj/item/clothing/mask/neck_gaiter/examine(mob/user) + . = ..() + . += span_notice("[src] can be worn above or below your suit. Alt-Right-click to toggle.") + . += span_notice("Alt-click [src] to adjust it.") + diff --git a/modular_doppler/modular_cosmetics/code/head/hair_tie.dm b/modular_doppler/modular_cosmetics/code/head/hair_tie.dm new file mode 100644 index 0000000000000..a10dd68230c4b --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/head/hair_tie.dm @@ -0,0 +1,133 @@ +/obj/item/clothing/head/hair_tie + name = "hair tie" + desc = "An elastic hair tie, made to hold your hair up!" + icon = 'modular_doppler/modular_cosmetics/icons/obj/head/hair_ties.dmi' + icon_state = "hairtie" + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/head/hair_ties.dmi' + worn_icon_state = "hair_tie_worn_no_icon" + inhand_icon_state = null + w_class = WEIGHT_CLASS_TINY + custom_price = PAYCHECK_CREW * 0.2 + ///string which set_hairstyle() will read + var/picked_hairstyle + ///storage for the original hairstyle string + var/actual_hairstyle + ///which projectile object to use as flicked hair tie + var/projectile_to_fire = /obj/projectile/bullet/hair_tie + ///how long the do_after takes to flick the hair tie + var/fire_speed = 3 SECONDS + ///how big is the randomized aim radius when flicked + var/projectile_aim_radius = 30 + +/obj/item/clothing/head/hair_tie/scrunchie + name = "scrunchie" + desc = "An elastic hair tie, its fabric is velvet soft." + icon_state = "hairtie_scrunchie" + +/obj/item/clothing/head/hair_tie/plastic_beads + name = "colorful hair tie" + desc = "An elastic hair tie, adornished with colorful plastic beads." + icon_state = "hairtie_beads" + custom_materials = (list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT)) + +/obj/item/clothing/head/hair_tie/examine(mob/user) + . = ..() + if(picked_hairstyle) + . += span_notice("Wearing it will change your hairstyle to '[picked_hairstyle]'.") + . += span_notice("Use in hand to pick a new hairstyle.") + . += span_notice("Alt-click [src] to fling it.") + +/obj/item/clothing/head/hair_tie/mob_can_equip(mob/living/carbon/human/user, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) + if(user.hairstyle == "Bald") //could create a list of the bald hairstyles to check + return FALSE + return ..() + +/obj/item/clothing/head/hair_tie/attack_self(mob/user) + var/hair_id = tgui_input_list(user, "How does your hair look when it's up?", "Pick!", SSaccessories.hairstyles_list) + if(!hair_id || hair_id == "Bald") + balloon_alert(user, "error!") + return + balloon_alert(user, "[hair_id]") + picked_hairstyle = hair_id + +/obj/item/clothing/head/hair_tie/equipped(mob/living/carbon/human/user, slot) + . = ..() + if(!ishuman(user) || !(slot_flags & slot)) + return + if(!picked_hairstyle) + return + user.visible_message( + span_notice("[user.name] ties up [user.p_their()] hair."), + span_notice("You tie up your hair!"), + ) + actual_hairstyle = user.hairstyle + user.set_hairstyle(picked_hairstyle, update = TRUE) + +/obj/item/clothing/head/hair_tie/dropped(mob/living/carbon/human/user) + . = ..() + if(!ishuman(user)) + return + if(!picked_hairstyle || !actual_hairstyle) + return + user.visible_message( + span_notice("[user.name] takes [src] out of [user.p_their()] hair."), + span_notice("You let down your hair!"), + ) + user.set_hairstyle(actual_hairstyle, update = TRUE) + actual_hairstyle = null + +/obj/item/clothing/head/hair_tie/click_alt(mob/living/user) + if(!(user.get_slot_by_item(src) == ITEM_SLOT_HANDS)) + balloon_alert(user, "hold in-hand!") + return CLICK_ACTION_BLOCKING + user.visible_message( + span_danger("[user.name] puts [src] around [user.p_their()] fingers, beginning to flick it!"), + span_notice("You try to flick [src]!"), + ) + flick_hair_tie(user) + return CLICK_ACTION_SUCCESS + +///This proc flicks the hair tie out of the player's hand, tripping the target hit for 1 second +/obj/item/clothing/head/hair_tie/proc/flick_hair_tie(mob/living/user) + if(!do_after(user, fire_speed, src)) + return + //build the projectile + var/obj/projectile/bullet/hair_tie/proj = new projectile_to_fire (drop_location()) + //clone some vars + proj.name = name + proj.icon_state = icon_state + //add projectile_drop + proj.AddElement(/datum/element/projectile_drop, type) + //aim and fire + proj.firer = user + proj.fired_from = user + proj.fire((dir2angle(user.dir) + rand(-projectile_aim_radius, projectile_aim_radius))) + playsound(src, 'sound/weapons/effects/batreflect.ogg', 25, TRUE) + //get rid of what we just launched to let projectile_drop spawn a new one + qdel(src) + +/obj/projectile/bullet/hair_tie + icon = 'modular_doppler/modular_cosmetics/icons/obj/head/hair_ties.dmi' + icon_state = "hairtie" + hitsound = 'sound/weapons/genhit.ogg' + damage = 0 //its just about the knockdown + sharpness = NONE + shrapnel_type = NONE //no embedding pls + impact_effect_type = null + ricochet_chance = 0 + range = 7 + knockdown = 1 SECONDS + +/datum/design/plastic_hair_tie + name = "Plastic Hair Tie" + id = "plastic_hair_tie" + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | COLONY_FABRICATOR + materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/clothing/head/hair_tie/plastic_beads + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/modular_doppler/modular_cosmetics/code/head/head.dm b/modular_doppler/modular_cosmetics/code/head/head.dm new file mode 100644 index 0000000000000..87a3c4c174a3d --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/head/head.dm @@ -0,0 +1,26 @@ +/obj/item/clothing/head/standalone_hood + name = "hood" + desc = "A hood with a bit of support around the neck so it actually stays in place, for all those times you want a hood without the coat." + icon = 'modular_doppler/modular_cosmetics/GAGS/icons/obj/head.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/GAGS/icons/mob/head.dmi' + icon_state = "hood" + body_parts_covered = HEAD + cold_protection = HEAD + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + flags_inv = HIDEEARS|HIDEHAIR + flags_1 = IS_PLAYER_COLORABLE_1 + greyscale_colors = "#4e4a43#F1F1F1" + greyscale_config = /datum/greyscale_config/standalone_hood + greyscale_config_worn = /datum/greyscale_config/standalone_hood/worn + +/obj/item/clothing/head/costume/papakha + name = "papakha" + desc = "A big wooly clump of fur designed to go on your head." + icon = 'modular_doppler/modular_cosmetics/icons/obj/head/costume.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/head/costume.dmi' + icon_state = "papakha" + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + +/obj/item/clothing/head/costume/papakha/white + icon_state = "papakha_white" diff --git a/modular_doppler/modular_cosmetics/code/neck/neck.dm b/modular_doppler/modular_cosmetics/code/neck/neck.dm index 157a632a5df87..ffcc05153700f 100644 --- a/modular_doppler/modular_cosmetics/code/neck/neck.dm +++ b/modular_doppler/modular_cosmetics/code/neck/neck.dm @@ -80,3 +80,14 @@ greyscale_config_worn = /datum/greyscale_config/maid_neck_cover/worn greyscale_colors = "#7b9ab5#edf9ff" flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/neck/mantle/recolorable + name = "mantle" + desc = "A simple drape over the shoulders." + icon = 'modular_doppler/modular_cosmetics/GAGS/icons/obj/neck.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/GAGS/icons/mob/neck.dmi' + icon_state = "mantle" + greyscale_colors = "#ffffff" + greyscale_config = /datum/greyscale_config/mantle + greyscale_config_worn = /datum/greyscale_config/mantle/worn + flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_doppler/modular_cosmetics/code/suits/misc.dm b/modular_doppler/modular_cosmetics/code/suits/misc.dm new file mode 100644 index 0000000000000..ecfb8d0af9df5 --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/suits/misc.dm @@ -0,0 +1,12 @@ +/obj/item/clothing/suit/apron/chef/colorable_apron + name = "apron" + desc = "A basic apron." + icon = 'modular_doppler/modular_cosmetics/GAGS/icons/obj/suit.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/GAGS/icons/mob/suit.dmi' + icon_state = "apron" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + // gets_cropped_on_taurs = FALSE + greyscale_colors = "#ffffff" + greyscale_config = /datum/greyscale_config/apron + greyscale_config_worn = /datum/greyscale_config/apron/worn + flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi b/modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi new file mode 100644 index 0000000000000..4417059961a6a Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/head/costume.dmi b/modular_doppler/modular_cosmetics/icons/mob/head/costume.dmi new file mode 100644 index 0000000000000..38be6a1596b90 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/head/costume.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/head/hair_ties.dmi b/modular_doppler/modular_cosmetics/icons/mob/head/hair_ties.dmi new file mode 100644 index 0000000000000..10291b00fab2a Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/head/hair_ties.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi b/modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi new file mode 100644 index 0000000000000..8b0b91de7bee0 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/head/costume.dmi b/modular_doppler/modular_cosmetics/icons/obj/head/costume.dmi new file mode 100644 index 0000000000000..b31037d5c03d7 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/obj/head/costume.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/head/hair_ties.dmi b/modular_doppler/modular_cosmetics/icons/obj/head/hair_ties.dmi new file mode 100644 index 0000000000000..1bda5056a305d Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/obj/head/hair_ties.dmi differ diff --git a/modular_doppler/modular_crafting/code/sheet_types.dm b/modular_doppler/modular_crafting/code/sheet_types.dm index 2298df03d11cb..7b90ade1d156a 100644 --- a/modular_doppler/modular_crafting/code/sheet_types.dm +++ b/modular_doppler/modular_crafting/code/sheet_types.dm @@ -60,6 +60,7 @@ GLOBAL_LIST_INIT(doppler_rod_recipes, list( GLOBAL_LIST_INIT(doppler_wood_recipes, list( new/datum/stack_recipe("water basin", /obj/structure/reagent_water_basin, 5, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_TOOLS), new/datum/stack_recipe("forging work bench", /obj/structure/reagent_crafting_bench, 5, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_TOOLS), + new/datum/stack_recipe("sauna oven", /obj/structure/sauna_oven, 30, time = 1.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), new/datum/stack_recipe("large wooden mortar", /obj/structure/large_mortar, 10, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_TOOLS), new/datum/stack_recipe("wooden cutting board", /obj/item/cutting_board, 5, time = 2 SECONDS, category = CAT_TOOLS), new/datum/stack_recipe("wooden shelf", /obj/structure/rack/wooden, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), @@ -94,6 +95,7 @@ GLOBAL_LIST_INIT(doppler_cardboard_recipes, list( GLOBAL_LIST_INIT(doppler_cloth_recipes, list( new/datum/stack_recipe("towel", /obj/item/towel, 2, category = CAT_CLOTHING), + new/datum/stack_recipe("eyepatch wrap", /obj/item/clothing/glasses/eyepatch/wrap, 2, category = CAT_CLOTHING), new/datum/stack_recipe("eyepatch", /obj/item/clothing/glasses/eyepatch, 2, category = CAT_CLOTHING), new/datum/stack_recipe("xenoarch bag", /obj/item/storage/bag/xenoarch, 4, category = CAT_CONTAINERS), )) diff --git a/modular_doppler/modular_species/species_types/primitive_demihuman/primitive_demihuman.dm b/modular_doppler/modular_species/species_types/primitive_demihuman/primitive_demihuman.dm index cd8d8faf05283..ed9174b1584ce 100644 --- a/modular_doppler/modular_species/species_types/primitive_demihuman/primitive_demihuman.dm +++ b/modular_doppler/modular_species/species_types/primitive_demihuman/primitive_demihuman.dm @@ -4,11 +4,11 @@ /datum/language_holder/primitive_felinid understood_languages = list( /datum/language/primitive_catgirl = list(LANGUAGE_ATOM), - /datum/language/uncommon = list(LANGUAGE_ATOM), + /datum/language/uncommon = list(LANGUAGE_ATOM) ) spoken_languages = list( /datum/language/primitive_catgirl = list(LANGUAGE_ATOM), - /datum/language/uncommon = list(LANGUAGE_ATOM), + /datum/language/uncommon = list(LANGUAGE_ATOM) ) selected_language = /datum/language/primitive_catgirl diff --git a/tgstation.dme b/tgstation.dme index 68e6c9fb15a42..96dc93b1f6497 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6635,9 +6635,13 @@ #include "modular_doppler\modular_cosmetics\code\towels.dm" #include "modular_doppler\modular_cosmetics\code\uniform_overrides.dm" #include "modular_doppler\modular_cosmetics\code\face\basemasks.dm" +#include "modular_doppler\modular_cosmetics\code\face\glasses.dm" +#include "modular_doppler\modular_cosmetics\code\face\masks.dm" #include "modular_doppler\modular_cosmetics\code\hands\rings.dm" #include "modular_doppler\modular_cosmetics\code\hats\doppler_command_hats.dm" +#include "modular_doppler\modular_cosmetics\code\head\hair_tie.dm" #include "modular_doppler\modular_cosmetics\code\head\hats.dm" +#include "modular_doppler\modular_cosmetics\code\head\head.dm" #include "modular_doppler\modular_cosmetics\code\neck\collar.dm" #include "modular_doppler\modular_cosmetics\code\neck\doppler_command_mantles.dm" #include "modular_doppler\modular_cosmetics\code\neck\neck.dm" @@ -6647,10 +6651,13 @@ #include "modular_doppler\modular_cosmetics\code\suits\basesuits.dm" #include "modular_doppler\modular_cosmetics\code\suits\jacket.dm" #include "modular_doppler\modular_cosmetics\code\suits\labcoat.dm" +#include "modular_doppler\modular_cosmetics\code\suits\misc.dm" #include "modular_doppler\modular_cosmetics\code\suits\modsuit.dm" #include "modular_doppler\modular_cosmetics\code\suits\shirts.dm" #include "modular_doppler\modular_cosmetics\code\under\doppler_uniforms.dm" #include "modular_doppler\modular_cosmetics\code\under\miscellania.dm" +#include "modular_doppler\modular_cosmetics\GAGS\greyscale_configs_face.dm" +#include "modular_doppler\modular_cosmetics\GAGS\greyscale_configs_head.dm" #include "modular_doppler\modular_cosmetics\GAGS\greyscale_configs_neck.dm" #include "modular_doppler\modular_cosmetics\GAGS\greyscale_configs_sets.dm" #include "modular_doppler\modular_cosmetics\GAGS\greyscale_configs_suit.dm" diff --git a/tgui/packages/tgui-say/styles/colors.scss b/tgui/packages/tgui-say/styles/colors.scss index aa53224b732ec..bbc5ab96e3f9e 100644 --- a/tgui/packages/tgui-say/styles/colors.scss +++ b/tgui/packages/tgui-say/styles/colors.scss @@ -26,11 +26,11 @@ $_channel_map: ( 'Supp': #b88646, 'Svc': #6ca729, 'Synd': #8f4a4b, - // NOVA EDIT ADDITION START + // DOPPLER EDIT ADDITION START 'Whis': #7c7fd9, 'LOOC': #ffceb6, 'Do': #59da7e, - // NOVA EDIT ADDITION END + // DOPPLER EDIT ADDITION END ); $channel_keys: map.keys($_channel_map) !default;