diff --git a/code/datums/underwear/underwear.dm b/code/datums/underwear/underwear.dm
index d14ddea133..22f538a9a1 100644
--- a/code/datums/underwear/underwear.dm
+++ b/code/datums/underwear/underwear.dm
@@ -9,27 +9,34 @@
*************/
/datum/category_group/underwear
var/sort_order // Lower sort order is applied as icons first
+ var/display_name // For displaying in text
+ var/gender = NEUTER
datum/category_group/underwear/dd_SortValue()
return sort_order
/datum/category_group/underwear/top
name = "Underwear, top"
+ display_name = "top piece"
sort_order = 1
category_item_type = /datum/category_item/underwear/top
/datum/category_group/underwear/bottom
name = "Underwear, bottom"
+ display_name = "bottom piece"
sort_order = 2
category_item_type = /datum/category_item/underwear/bottom
/datum/category_group/underwear/socks
name = "Socks"
+ display_name = "socks"
+ gender = PLURAL
sort_order = 3
category_item_type = /datum/category_item/underwear/socks
/datum/category_group/underwear/undershirt
name = "Undershirt"
+ display_name = "undershirt"
sort_order = 4 // Undershirts currently have the highest sort order because they may cover both underwear and socks.
category_item_type = /datum/category_item/underwear/undershirt
diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm
index 6a06ef26fb..d26b421ab5 100644
--- a/code/game/objects/structures/under_wardrobe.dm
+++ b/code/game/objects/structures/under_wardrobe.dm
@@ -69,6 +69,7 @@
var/datum/category_item/underwear/selected_underwear = input(H, "Choose underwear:", "Choose underwear", H.all_underwear[UWC.name]) as null|anything in UWC.items
if(selected_underwear && CanUseTopic(H, default_state))
H.all_underwear[UWC.name] = selected_underwear
+ H.hide_underwear[UWC.name] = FALSE
. = TRUE
else if(href_list["underwear"] && href_list["tweak"])
var/underwear = href_list["underwear"]
@@ -80,6 +81,7 @@
var/new_metadata = gt.get_metadata(usr, get_metadata(H, underwear, gt), "Wardrobe Underwear Selection")
if(new_metadata)
set_metadata(H, underwear, gt, new_metadata)
+ H.hide_underwear[underwear] = FALSE
. = TRUE
if(.)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index df1bfc4667..6468f17908 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -41,6 +41,10 @@
human_mob_list |= src
..()
+ hide_underwear.Cut()
+ for(var/category in global_underwear.categories_by_name)
+ hide_underwear[category] = FALSE
+
if(dna)
dna.ready_dna(src)
dna.real_name = real_name
@@ -1416,6 +1420,22 @@
return 1
return 0
+/mob/living/carbon/human/verb/toggle_underwear()
+ set name = "Toggle Underwear"
+ set desc = "Shows/hides selected parts of your underwear."
+ set category = "Object"
+
+ if(stat) return
+ var/datum/category_group/underwear/UWC = input(usr, "Choose underwear:", "Show/hide underwear") as null|anything in global_underwear.categories
+ var/datum/category_item/underwear/UWI = all_underwear[UWC.name]
+ if(!UWI || UWI.name == "None")
+ src << "You do not have [UWC.gender==PLURAL ? "[UWC.display_name]" : "\a [UWC.display_name]"]."
+ return
+ hide_underwear[UWC.name] = !hide_underwear[UWC.name]
+ update_underwear(1)
+ src << "You [hide_underwear[UWC.name] ? "take off" : "put on"] your [UWC.display_name]."
+ return
+
/mob/living/carbon/human/verb/pull_punches()
set name = "Pull Punches"
set desc = "Try not to hurt them."
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 99bbe8ffcf..fef4752a2a 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -35,6 +35,7 @@
var/list/all_underwear = list()
var/list/all_underwear_metadata = list()
+ var/list/hide_underwear = list()
var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack.
var/pdachoice = 1 //Which PDA type the player has chosen. Default, Slim, or Old.
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 43123eab0a..6607d166bf 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -336,6 +336,8 @@ var/global/list/damage_icon_parts = list()
if(species.appearance_flags & HAS_UNDERWEAR)
overlays_standing[UNDERWEAR_LAYER] = list()
for(var/category in all_underwear)
+ if(hide_underwear[category])
+ continue
var/datum/category_item/underwear/UWI = all_underwear[category]
overlays_standing[UNDERWEAR_LAYER] += UWI.generate_image(all_underwear_metadata[category])