diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 68a47398fa..5ec839130a 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -20,35 +20,34 @@ else return "000" -/proc/random_underwear(gender)//Cit change - makes random underwear always return nude +#define UNDIE_COLORABLE(U) (U?.has_color) + +/proc/random_underwear(gender) if(!GLOB.underwear_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/bottom, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f) - return "Nude" - /*switch(gender) + switch(gender) if(MALE) return pick(GLOB.underwear_m) if(FEMALE) return pick(GLOB.underwear_f) else - return pick(GLOB.underwear_list)*/ + return pick(GLOB.underwear_list) -/proc/random_undershirt(gender)//Cit change - makes random undershirts always return nude +/proc/random_undershirt(gender) if(!GLOB.undershirt_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/top, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f) - return "Nude" - /*switch(gender) + switch(gender) if(MALE) return pick(GLOB.undershirt_m) if(FEMALE) return pick(GLOB.undershirt_f) else - return pick(GLOB.undershirt_list)*/ + return pick(GLOB.undershirt_list) -/proc/random_socks()//Cit change - makes random socks always return nude +/proc/random_socks() if(!GLOB.socks_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list) - return "Nude" - //return pick(GLOB.socks_list) + return pick(GLOB.socks_list) /proc/random_features() if(!GLOB.tails_list_human.len) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index f40bb7197f..461e19adf1 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -21,48 +21,62 @@ /obj/structure/dresser/attack_hand(mob/user) . = ..() - if(.) + if(. || !ishuman(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + var/mob/living/carbon/human/H = user + + if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) + to_chat(H, "You are not capable of wearing underwear.") return - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) - to_chat(user, "You are not capable of wearing underwear.") - return + var/list/undergarment_choices = list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color") + if(!UNDIE_COLORABLE(GLOB.underwear_list[H.underwear])) + undergarment_choices -= "Underwear Color" + if(!UNDIE_COLORABLE(GLOB.undershirt_list[H.undershirt])) + undergarment_choices -= "Undershirt Color" + if(!UNDIE_COLORABLE(GLOB.socks_list[H.socks])) + undergarment_choices -= "Socks Color" - var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks") - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - switch(choice) - if("Underwear") - var/new_undies = input(user, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list - if(new_undies) - H.underwear = new_undies - var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[new_undies] - if(B?.has_color) - var/n_undie_color = input(user, "Choose your underwear's color.", "Character Preference", H.undie_color) as color|null - if(n_undie_color) - H.undie_color = n_undie_color - if("Undershirt") - var/new_undershirt = input(user, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list - if(new_undershirt) - H.undershirt = new_undershirt - var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[new_undershirt] - if(T?.has_color) - var/n_shirt_color = input(user, "Choose your underwear's color.", "Character Preference", H.shirt_color) as color|null - if(n_shirt_color) - H.shirt_color = n_shirt_color - if("Socks") - var/new_socks = input(user, "Select your socks", "Changing") as null|anything in GLOB.socks_list - if(new_socks) - H.socks= new_socks - var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[new_socks] - if(S?.has_color) - var/n_socks_color = input(user, "Choose your underwear's color.", "Character Preference", H.socks_color) as color|null - if(n_socks_color) - H.socks_color = n_socks_color + var/choice = input(H, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in undergarment_choices + if(!H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + var/dye_undie = FALSE + var/dye_shirt = FALSE + var/dye_socks = FALSE + switch(choice) + if("Underwear") + var/new_undies = input(H, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list + if(H.underwear) + H.underwear = new_undies + H.saved_underwear = new_undies + var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[new_undies] + dye_undie = B?.has_color + if("Undershirt") + var/new_undershirt = input(H, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list + if(new_undershirt) + H.undershirt = new_undershirt + H.saved_undershirt = new_undershirt + var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[new_undershirt] + dye_shirt = T?.has_color + if("Socks") + var/new_socks = input(H, "Select your socks", "Changing") as null|anything in GLOB.socks_list + if(new_socks) + H.socks = new_socks + H.saved_socks = new_socks + var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[new_socks] + dye_socks = S?.has_color + if(dye_undie || choice == "Underwear Color") + H.undie_color = recolor_undergarment(H, "underwear", H.undie_color) + if(dye_shirt || choice == "Undershirt Color") + H.shirt_color = recolor_undergarment(H, "undershirt", H.shirt_color) + if(dye_socks || choice == "Socks Color") + H.socks_color = recolor_undergarment(H, "socks", H.socks_color) - add_fingerprint(H) - H.update_body() + add_fingerprint(H) + H.update_body() + +/obj/structure/dresser/proc/recolor_undergarment(mob/living/carbon/human/H, garment_type = "underwear", default_color) + var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null + if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return default_color + return n_color diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 4f52c2bbd1..97c934bd24 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -677,16 +677,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" dat += "

Clothing & Equipment

" dat += "Underwear:[underwear]" - var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[underwear] - if(B?.has_color) + if(UNDIE_COLORABLE(GLOB.underwear_list[underwear])) dat += "Underwear Color:[undie_color]" dat += "Undershirt:[undershirt]" - var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[undershirt] - if(T?.has_color) + if(UNDIE_COLORABLE(GLOB.undershirt_list[undershirt])) dat += "Undershirt Color:[shirt_color]" dat += "Socks:[socks]" - var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[socks] - if(S?.has_color) + if(UNDIE_COLORABLE(GLOB.socks_list[socks])) dat += "Socks Color:[socks_color]" dat += "Backpack:[backbag]" dat += "Uplink Location:[uplink_spawn_loc]" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm index 562ee4f10b..bf63ea09d7 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm @@ -186,6 +186,11 @@ name = "Tank top - Sun" icon_state = "tank_sun" +/datum/sprite_accessory/underwear/top/babydoll + name = "Baby-Doll" + icon_state = "babydoll" + has_color = TRUE + /datum/sprite_accessory/underwear/top/bra name = "Bra" icon_state = "bra" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm index 0d85322860..611547ad4e 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm @@ -131,18 +131,14 @@ name = "Swimsuit, One Piece - Striped Blue" icon_state = "swimming_blue" -/datum/sprite_accessory/underwear/bottom/swimsuit_green - name = "Swimsuit, Bottom - Green" - icon_state = "panties_swimming_green" - /datum/sprite_accessory/underwear/bottom/thong name = "Thong" icon_state = "thong" has_color = TRUE /datum/sprite_accessory/underwear/bottom/thong_babydoll - name = "Thong - Babydoll" - icon_state = "babydoll" + name = "Thong - Alt" + icon_state = "thong_babydoll" has_color = TRUE diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 080697ae59..9eb20d1c31 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -495,11 +495,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(H.hidden_underwear) H.underwear = "Nude" else - H.underwear = H.saved_underwear + H.saved_underwear = H.underwear var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[H.underwear] if(B) var/mutable_appearance/MA = mutable_appearance(B.icon, B.icon_state, -BODY_LAYER) - if(B.has_color) + if(UNDIE_COLORABLE(B)) MA.color = H.undie_color standing += MA @@ -507,7 +507,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(H.hidden_undershirt) H.undershirt = "Nude" else - H.undershirt = H.saved_undershirt + H.saved_undershirt = H.undershirt var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[H.undershirt] if(T) var/mutable_appearance/MA @@ -515,7 +515,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) MA = wear_female_version(T.icon_state, T.icon, BODY_LAYER) else MA = mutable_appearance(T.icon, T.icon_state, -BODY_LAYER) - if(T.has_color) + if(UNDIE_COLORABLE(T)) MA.color = H.shirt_color standing += MA @@ -523,12 +523,12 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(H.hidden_socks) H.socks = "Nude" else - H.socks = H.saved_socks + H.saved_socks = H.socks var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[H.socks] if(S) var/digilegs = (DIGITIGRADE in species_traits) ? "_d" : "" - var/mutable_appearance/MA = mutable_appearance(S.icon, "[S][digilegs]", -BODY_LAYER) - if(S.has_color) + var/mutable_appearance/MA = mutable_appearance(S.icon, "[S.icon_state][digilegs]", -BODY_LAYER) + if(UNDIE_COLORABLE(S)) MA.color = H.socks_color standing += MA diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index 9b67834fe4..3174397b54 100644 Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ