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;