diff --git a/code/_helpers/_global_objects.dm b/code/_helpers/_global_objects.dm new file mode 100644 index 0000000000..4cbbcf3314 --- /dev/null +++ b/code/_helpers/_global_objects.dm @@ -0,0 +1 @@ +var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() \ No newline at end of file diff --git a/code/datums/underwear/bottom.dm b/code/datums/underwear/bottom.dm index 04e2c42622..7f91a18608 100644 --- a/code/datums/underwear/bottom.dm +++ b/code/datums/underwear/bottom.dm @@ -2,144 +2,55 @@ name = "None" always_last = TRUE -/datum/category_item/underwear/bottom/briefs_white - name = "Briefs, white" - icon_state = "b1" +/datum/category_item/underwear/bottom/briefs + name = "Briefs" + icon_state = "briefs" + has_color = TRUE -/datum/category_item/underwear/bottom/briefs_white/is_default(var/gender) +/datum/category_item/underwear/bottom/briefs/is_default(var/gender) return gender != FEMALE -/datum/category_item/underwear/bottom/briefs_grey - name = "Briefs, grey" - icon_state = "b2" - -/datum/category_item/underwear/bottom/briefs_green - name = "Briefs, green" - icon_state = "b3" - -/datum/category_item/underwear/bottom/briefs_blue - name = "Briefs, blue" - icon_state = "b4" - -/datum/category_item/underwear/bottom/briefs_black - name = "Briefs, black" - icon_state = "b5" - -/datum/category_item/underwear/bottom/panties_noback - name = "Panties, noback" - icon_state = "b6" - /datum/category_item/underwear/bottom/boxers_loveheart name = "Boxers, Loveheart" - icon_state = "b7" + icon_state = "boxers_loveheart" -/datum/category_item/underwear/bottom/boxers_black - name = "Boxers, black" - icon_state = "b8" - -/datum/category_item/underwear/bottom/boxers_grey - name = "Boxers, grey" - icon_state = "b9" +/datum/category_item/underwear/bottom/boxers + name = "Boxers" + icon_state = "boxers" + has_color = TRUE /datum/category_item/underwear/bottom/boxers_green_and_blue name = "Boxers, green & blue striped" - icon_state = "b10" + icon_state = "boxers_green_and_blue" -/datum/category_item/underwear/bottom/panties_red - name = "Panties, red" - icon_state = "b11" +/datum/category_item/underwear/bottom/panties + name = "Panties" + icon_state = "panties" + has_color = TRUE -/datum/category_item/underwear/bottom/panties_white - name = "Panties, white" - icon_state = "b12" - -/datum/category_item/underwear/bottom/panties_white/is_default(var/gender) +/datum/category_item/underwear/bottom/panties/is_default(var/gender) return gender == FEMALE -/datum/category_item/underwear/bottom/panties_yellow - name = "Panties, yellow" - icon_state = "b13" +/datum/category_item/underwear/bottom/lacy_thong + name = "Lacy thong" + icon_state = "lacy_thong" -/datum/category_item/underwear/bottom/panties_blue - name = "Panties, blue" - icon_state = "b14" +/datum/category_item/underwear/bottom/lacy_thong_alt + name = "Lacy thong, alt" + icon_state = "lacy_thong_alt" + has_color = TRUE -/datum/category_item/underwear/bottom/panties_light_black - name = "Panties, light-black" - icon_state = "b15" +/datum/category_item/underwear/bottom/panties_alt + name = "Panties, alt" + icon_state = "panties_alt" + has_color = TRUE + +/datum/category_item/underwear/bottom/compression_shorts + name = "Compression shorts" + icon_state = "compression_shorts" + has_color = TRUE /datum/category_item/underwear/bottom/thong name = "Thong" - icon_state = "b16" - -/datum/category_item/underwear/bottom/panties_black - name = "Panties, black" - icon_state = "b17" - -/datum/category_item/underwear/bottom/panties_white_alt - name = "Bra, white alt" - icon_state = "b18" - -/datum/category_item/underwear/bottom/compression_shorts_black - name = "Compression shorts, black" - icon_state = "b19" - -/datum/category_item/underwear/bottom/compression_shorts_white - name = "Compression shorts, white" - icon_state = "b20" - -/datum/category_item/underwear/bottom/compression_shorts_baby_blue - name = "Compression shorts, baby-blue" - icon_state = "b21" - -/datum/category_item/underwear/bottom/panties_green - name = "Panties, green" - icon_state = "b22" - -/datum/category_item/underwear/bottom/compression_shorts_pink - name = "Compression shorts, pink" - icon_state = "b23" - -/datum/category_item/underwear/bottom/thong_violet - name = "Thong, violet" - icon_state = "b24" - -/datum/category_item/underwear/bottom/thong_alt - name = "Thong, alt" - icon_state = "b25" - -/datum/category_item/underwear/bottom/thong_violet_alt - name = "Thong, violet alt" - icon_state = "b26" - -/datum/category_item/underwear/bottom/alt_thong_black - name = "Alt. thong, black" - icon_state = "b27" - -/datum/category_item/underwear/bottom/alt_thong_blue - name = "Alt. thong, blue" - icon_state = "b28" - -/datum/category_item/underwear/bottom/alt_thong_green - name = "Alt. thong, green" - icon_state = "b29" - -/datum/category_item/underwear/bottom/alt_thong_purple - name = "Alt. thong, purple" - icon_state = "b30" - -/datum/category_item/underwear/bottom/alt_thong_red - name = "Alt. thong, red" - icon_state = "b31" - -/datum/category_item/underwear/bottom/alt_thong_teal - name = "Alt. thong, teal" - icon_state = "b32" - -/datum/category_item/underwear/bottom/alt_thong_violet - name = "Alt. thong, violet" - icon_state = "b33" - -/datum/category_item/underwear/bottom/alt_thong_white - name = "Alt. thong, white" - icon_state = "b34" \ No newline at end of file + icon_state = "thong" + has_color = TRUE \ No newline at end of file diff --git a/code/datums/underwear/socks.dm b/code/datums/underwear/socks.dm index ab33162e04..fc1c96ce53 100644 --- a/code/datums/underwear/socks.dm +++ b/code/datums/underwear/socks.dm @@ -2,57 +2,49 @@ always_last = TRUE name = "None" -/datum/category_item/underwear/socks/white_normal - name = "Normal, white" - icon_state = "white_norm" +/datum/category_item/underwear/socks/normal + name = "Normal" + icon_state = "socks_norm" + has_color = TRUE -/datum/category_item/underwear/socks/white_short - name = "Short, white" - icon_state = "white_short" +/datum/category_item/underwear/socks/short + name = "Short" + icon_state = "socks_short" + has_color = TRUE -/datum/category_item/underwear/socks/white_knee - name = "Knee, white" - icon_state = "white_knee" +/datum/category_item/underwear/socks/thigh + name = "Thigh" + icon_state = "socks_thigh" + has_color = TRUE -/datum/category_item/underwear/socks/white_thigh - name = "Thigh, white" - icon_state = "white_thigh" +/datum/category_item/underwear/socks/knee + name = "Knee" + icon_state = "socks_knee" + has_color = TRUE -/datum/category_item/underwear/socks/black_normal - name = "Normal, black" - icon_state = "black_norm" +/datum/category_item/underwear/socks/striped_knee + name = "Knee, striped" + icon_state = "striped_knee" + has_color = TRUE -/datum/category_item/underwear/socks/black_short - name = "Short, black" - icon_state = "black_short" - -/datum/category_item/underwear/socks/black_knee - name = "Knee, black" - icon_state = "black_knee" - -/datum/category_item/underwear/socks/black_thigh - name = "Thigh, black" - icon_state = "black_thigh" - -/datum/category_item/underwear/socks/thin_knee - name = "Knee, thin" - icon_state = "thin_knee" - -/datum/category_item/underwear/socks/thin_thigh - name = "Thigh, thin" - icon_state = "thin_thigh" +/datum/category_item/underwear/socks/striped_thigh + name = "Thigh, striped" + icon_state = "striped_thigh" + has_color = TRUE /datum/category_item/underwear/socks/pantyhose name = "Pantyhose" icon_state = "pantyhose" -/datum/category_item/underwear/socks/striped_thigh - name = "Thigh, striped" - icon_state = "striped_thigh" +/datum/category_item/underwear/socks/thin_thigh + name = "Thigh, thin" + icon_state = "thin_thigh" + has_color = TRUE -/datum/category_item/underwear/socks/striped_knee - name = "Knee, striped" - icon_state = "striped_knee" +/datum/category_item/underwear/socks/thin_knee + name = "Knee, thin" + icon_state = "thin_knee" + has_color = TRUE /datum/category_item/underwear/socks/rainbow_thigh name = "Thigh, rainbow" @@ -64,12 +56,4 @@ /datum/category_item/underwear/socks/fishnet name = "Fishnet" - icon_state = "fishnet" - -/datum/category_item/underwear/socks/thinwhite_thigh - name = "Thigh, thin white" - icon_state = "thinwhite_thigh" - -/datum/category_item/underwear/socks/thinwhite_knee - name = "Knee, thin white" - icon_state = "thinwhite_knee" \ No newline at end of file + icon_state = "fishnet" \ No newline at end of file diff --git a/code/datums/underwear/top.dm b/code/datums/underwear/top.dm index 4e23a70295..8640e77da9 100644 --- a/code/datums/underwear/top.dm +++ b/code/datums/underwear/top.dm @@ -5,102 +5,39 @@ /datum/category_item/underwear/top/none/is_default(var/gender) return gender != FEMALE -/datum/category_item/underwear/top/bra_red - name = "Bra, red" - icon_state = "t1" - -/datum/category_item/underwear/top/bra_white +/datum/category_item/underwear/top/bra is_default = TRUE - name = "Bra, white" - icon_state = "t2" + name = "Bra" + icon_state = "bra" + has_color = TRUE -/datum/category_item/underwear/top/bra_white/is_default(var/gender) +/datum/category_item/underwear/top/bra/is_default(var/gender) return gender == FEMALE -/datum/category_item/underwear/top/bra_yellow - name = "Bra, yellow" - icon_state = "t3" +/datum/category_item/underwear/top/sports_bra + name = "Sports bra" + icon_state = "sports_bra" + has_color = TRUE -/datum/category_item/underwear/top/bra_blue - name = "Bra, blue" - icon_state = "t4" - -/datum/category_item/underwear/top/bra_black - name = "Bra, black" - icon_state = "t5" +/datum/category_item/underwear/top/sports_bra_alt + name = "Sports bra, alt" + icon_state = "sports_bra_alt" + has_color = TRUE /datum/category_item/underwear/top/lacy_bra name = "Lacy bra" - icon_state = "t6" - -/datum/category_item/underwear/top/sports_bra_black - name = "Sports bra, black" - icon_state = "t7" - -/datum/category_item/underwear/top/sports_bra_white - name = "Sports bra, white" - icon_state = "t8" - -/datum/category_item/underwear/top/sports_bra_black_alt - name = "Sports bra, black alt" - icon_state = "t9" - -/datum/category_item/underwear/top/sports_bra_white_alt - name = "Sports bra, white alt" - icon_state = "t10" - -/datum/category_item/underwear/top/bra_baby_blue - name = "Bra, baby blue" - icon_state = "t11" - -/datum/category_item/underwear/top/bra_green - name = "Bra, green" - icon_state = "t12" - -/datum/category_item/underwear/top/bra_pink - name = "Bra, pink" - icon_state = "t13" - -/datum/category_item/underwear/top/bra_violet - name = "Bra, violet" - icon_state = "t14" + icon_state = "lacy_bra" /datum/category_item/underwear/top/lacy_bra_alt name = "Lacy bra, alt" - icon_state = "t15" + icon_state = "lacy_bra_alt" + has_color = TRUE -/datum/category_item/underwear/top/bra_lacy_violet - name = "Lacy bra, violet" - icon_state = "t16" +/datum/category_item/underwear/top/lacy_bra_alt_stripe + name = "Lacy bra, alt, stripe" + icon_state = "lacy_bra_alt_stripe" -/datum/category_item/underwear/top/halterneck_bra_black - name = "Halterneck bra, black" - icon_state = "t17" - -/datum/category_item/underwear/top/halterneck_bra_blue - name = "Halterneck bra, blue" - icon_state = "t18" - -/datum/category_item/underwear/top/halterneck_bra_green - name = "Halterneck bra, green" - icon_state = "t19" - -/datum/category_item/underwear/top/halterneck_bra_purple - name = "Halterneck bra, purple" - icon_state = "t20" - -/datum/category_item/underwear/top/halterneck_bra_red - name = "Halterneck bra, red" - icon_state = "t21" - -/datum/category_item/underwear/top/halterneck_bra_teal - name = "Halterneck bra, teal" - icon_state = "t22" - -/datum/category_item/underwear/top/halterneck_bra_violet - name = "Halterneck bra, violet" - icon_state = "t23" - -/datum/category_item/underwear/top/halterneck_bra_white - name = "Halterneck bra, white" - icon_state = "t24" \ No newline at end of file +/datum/category_item/underwear/top/halterneck_bra + name = "Halterneck bra" + icon_state = "halterneck_bra" + has_color = TRUE \ No newline at end of file diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm index f1149dabb7..33886f997d 100644 --- a/code/datums/underwear/undershirts.dm +++ b/code/datums/underwear/undershirts.dm @@ -3,74 +3,25 @@ name = "None" always_last = TRUE -/datum/category_item/underwear/undershirt/tank_top_white - name = "Tank top, white" - icon_state = "u1" +/datum/category_item/underwear/undershirt/shirt + name = "Shirt" + icon_state = "undershirt" + has_color = TRUE -/datum/category_item/underwear/undershirt/tank_top_white_alt - name = "Tank top, white alt" - icon_state = "tank_white_s" +/datum/category_item/underwear/undershirt/tank_top + name = "Tank top" + icon_state = "tanktop" + has_color = TRUE -/datum/category_item/underwear/undershirt/tank_top_black - name = "Tank top, black" - icon_state = "u2" - -/datum/category_item/underwear/undershirt/tank_top_red - name = "Tank top, red" - icon_state = "tank_red_s" +/datum/category_item/underwear/undershirt/tank_top_alt + name = "Tank top, alt" + icon_state = "tanktop_alt" + has_color = TRUE /datum/category_item/underwear/undershirt/tank_top_fire name = "Tank top, fire" icon_state = "tank_fire_s" -/datum/category_item/underwear/undershirt/shirt_black - name = "Shirt, black" - icon_state = "u3" - -/datum/category_item/underwear/undershirt/shirt_black_alt - name = "Shirt, black alt" - icon_state = "shirt_black_s" - -/datum/category_item/underwear/undershirt/shirt_white - name = "Shirt, white" - icon_state = "u4" - -/datum/category_item/underwear/undershirt/shirt_white_alt - name = "Shirt, white alt" - icon_state = "shirt_white_s" - -/datum/category_item/underwear/undershirt/shirt_grey - name = "Shirt, grey" - icon_state = "shirt_grey_s" - -/datum/category_item/underwear/undershirt/shirt_blue - name = "Shirt, blue" - icon_state = "blueshirt_s" - -/datum/category_item/underwear/undershirt/shirt_blue_alt - name = "Shirt, blue alt" - icon_state = "shirt_blue_s" - -/datum/category_item/underwear/undershirt/shirt_red - name = "Shirt, red" - icon_state = "redshirt_s" - -/datum/category_item/underwear/undershirt/shirt_red_alt - name = "Shirt, red alt" - icon_state = "shirt_red_s" - -/datum/category_item/underwear/undershirt/shirt_yellow - name = "Shirt, yellow" - icon_state = "yellowshirt_s" - -/datum/category_item/underwear/undershirt/shirt_green - name = "Shirt, green" - icon_state = "greenshirt_s" - -/datum/category_item/underwear/undershirt/shirt_green_alt - name = "Shirt, green alt" - icon_state = "shirt_green_s" - /datum/category_item/underwear/undershirt/shirt_heart name = "Shirt, heart" icon_state = "lover_s" @@ -80,44 +31,18 @@ icon_state = "shirt_nano_s" /datum/category_item/underwear/undershirt/shirt_love_nt - name = "Shirt, I<3NT" + name = "Shirt, I<3NT" icon_state = "lover_s" -/datum/category_item/underwear/undershirt/shortsleeve_shirt_white - name = "Shortsleeve shirt, white" - icon_state = "whiteshortsleeve_s" +/datum/category_item/underwear/undershirt/shortsleeve_shirt + name = "Shortsleeve shirt" + icon_state = "shortsleeve" + has_color = TRUE -/datum/category_item/underwear/undershirt/shortsleeve_shirt_purple - name = "Shortsleeve shirt, purple" - icon_state = "purpleshortsleeve_s" - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_blue - name = "Shortsleeve shirt, blue" - icon_state = "blueshortsleeve_s" - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_green - name = "Shortsleeve shirt, green" - icon_state = "greenshortsleeve_s" - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_black - name = "Shortsleeve shirt, black" - icon_state = "blackshortsleeve_s" - -/datum/category_item/underwear/undershirt/polo_shirt_blue - name = "Polo shirt, blue" - icon_state = "bluepolo_s" - -/datum/category_item/underwear/undershirt/polo_shirt_red - name = "Polo shirt, red" - icon_state = "redpolo_s" - -/datum/category_item/underwear/undershirt/polo_shirt_white - name = "Polo shirt, white" - icon_state = "whitepolo_s" - -/datum/category_item/underwear/undershirt/polo_shirt_grey_yellow - name = "Polo shirt, grey and yellow" - icon_state = "grayyellowpolo_s" +/datum/category_item/underwear/undershirt/polo_shirt + name = "Polo shirt" + icon_state = "polo" + has_color = TRUE /datum/category_item/underwear/undershirt/sport_shirt_green name = "Sport shirt, green" diff --git a/code/datums/underwear/underwear.dm b/code/datums/underwear/underwear.dm index 8b73dbddbb..d14ddea133 100644 --- a/code/datums/underwear/underwear.dm +++ b/code/datums/underwear/underwear.dm @@ -41,6 +41,12 @@ datum/category_group/underwear/dd_SortValue() var/is_default = FALSE // Should this entry be considered the default for its type? var/icon = 'icons/mob/human.dmi' // Which icon to get the underwear from var/icon_state // And the particular item state + var/list/tweaks = list() // Underwear customizations. + var/has_color = FALSE + +/datum/category_item/underwear/New() + if(has_color) + tweaks += gear_tweak_free_color_choice /datum/category_item/underwear/dd_SortValue() if(always_last) @@ -50,7 +56,11 @@ datum/category_group/underwear/dd_SortValue() /datum/category_item/underwear/proc/is_default(var/gender) return is_default -/datum/category_item/underwear/proc/apply_to_icon(var/icon/I) +/datum/category_item/underwear/proc/generate_image(var/list/metadata) if(!icon_state) return - I.Blend(new /icon('icons/mob/human.dmi', icon_state), ICON_OVERLAY) \ No newline at end of file + + var/image/I = image(icon = 'icons/mob/human.dmi', icon_state = icon_state) + for(var/datum/gear_tweak/gt in tweaks) + gt.tweak_item(I, metadata && metadata["[gt]"] ? metadata["[gt]"] : gt.get_default()) + return I \ No newline at end of file diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index 2ded3ef17e..d510c488e1 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -17,11 +17,31 @@ for(var/datum/category_group/underwear/UWC in global_underwear.categories) var/datum/category_item/underwear/UWI = H.all_underwear[UWC.name] var/item_name = UWI ? UWI.name : "None" - dat += "[UWC.name]: [item_name] (Remove)
" + dat += "[UWC.name]: [item_name]" + if(UWI) + for(var/datum/gear_tweak/gt in UWI.tweaks) + dat += " [gt.get_contents(get_metadata(H, UWC.name, gt))]" + dat += " (Remove)
" dat = jointext(dat) H << browse(dat, "window=wardrobe;size=400x200") +/obj/structure/undies_wardrobe/proc/get_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/gear_tweak/gt) + var/metadata = H.all_underwear_metadata[underwear_category] + if(!metadata) + metadata = list() + H.all_underwear_metadata[underwear_category] = metadata + + var/tweak_data = metadata["[gt]"] + if(!tweak_data) + tweak_data = gt.get_default() + metadata["[gt]"] = tweak_data + return tweak_data + +/obj/structure/undies_wardrobe/proc/set_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata) + var/list/metadata = H.all_underwear_metadata[underwear_category] + metadata["[gt]"] = new_metadata + /obj/structure/undies_wardrobe/proc/human_who_can_use_underwear(var/mob/living/carbon/human/H) if(!istype(H) || !H.species || !(H.species.appearance_flags & HAS_UNDERWEAR)) return FALSE @@ -50,6 +70,18 @@ if(selected_underwear && CanUseTopic(H, default_state)) H.all_underwear[UWC.name] = selected_underwear . = TRUE + else if(href_list["underwear"] && href_list["tweak"]) + var/underwear = href_list["underwear"] + if(!(underwear in H.all_underwear)) + return + var/datum/gear_tweak/gt = locate(href_list["tweak"]) + if(!gt) + return + 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) + . = TRUE + if(.) - H.update_body(1) + H.update_underwear() interact(H) \ No newline at end of file diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index b7758a6fa9..8c53b9e7f8 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -1,5 +1,6 @@ /datum/preferences var/list/all_underwear + var/list/all_underwear_metadata /datum/category_item/player_setup_item/general/equipment name = "Clothing" @@ -7,11 +8,13 @@ /datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S) S["all_underwear"] >> pref.all_underwear + S["all_underwear_metadata"] >> pref.all_underwear_metadata S["backbag"] >> pref.backbag S["pdachoice"] >> pref.pdachoice /datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S) S["all_underwear"] << pref.all_underwear + S["all_underwear_metadata"] << pref.all_underwear_metadata S["backbag"] << pref.backbag S["pdachoice"] << pref.pdachoice @@ -27,15 +30,21 @@ pref.all_underwear[WRC.name] = WRI.name break + if(!istype(pref.all_underwear_metadata)) + pref.all_underwear_metadata = list() + for(var/underwear_category in pref.all_underwear) var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category] if(!UWC) - pref.all_underwear -= UWC + pref.all_underwear -= underwear_category else var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]] if(!UWI) - pref.all_underwear -= UWC + pref.all_underwear -= underwear_category + for(var/underwear_metadata in pref.all_underwear_metadata) + if(!(underwear_metadata in pref.all_underwear)) + pref.all_underwear_metadata -= underwear_metadata pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag)) pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice)) @@ -44,12 +53,35 @@ . += "Equipment:
" for(var/datum/category_group/underwear/UWC in global_underwear.categories) var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None" - . += "[UWC.name]: [item_name]
" + . += "[UWC.name]: [item_name]" + var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name] + if(UWI) + for(var/datum/gear_tweak/gt in UWI.tweaks) + . += " [gt.get_contents(get_metadata(UWC.name, gt))]" + + . += "
" . += "Backpack Type: [backbaglist[pref.backbag]]
" . += "PDA Type: [pdachoicelist[pref.pdachoice]]
" return jointext(.) +/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/gear_tweak/gt) + var/metadata = pref.all_underwear_metadata[underwear_category] + if(!metadata) + metadata = list() + pref.all_underwear_metadata[underwear_category] = metadata + + var/tweak_data = metadata["[gt]"] + if(!tweak_data) + tweak_data = gt.get_default() + metadata["[gt]"] = tweak_data + return tweak_data + +/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata) + var/list/metadata = pref.all_underwear_metadata[underwear_category] + metadata["[gt]"] = new_metadata + + /datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user) if(href_list["change_backpack"]) var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference", backbaglist[pref.backbag]) as null|anything in backbaglist @@ -72,4 +104,16 @@ pref.all_underwear[UWC.name] = selected_underwear.name return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["underwear"] && href_list["tweak"]) + var/underwear = href_list["underwear"] + if(!(underwear in pref.all_underwear)) + return TOPIC_NOACTION + var/datum/gear_tweak/gt = locate(href_list["tweak"]) + if(!gt) + return TOPIC_NOACTION + var/new_metadata = gt.get_metadata(usr, get_metadata(underwear, gt)) + if(new_metadata) + set_metadata(underwear, gt, new_metadata) + return TOPIC_REFRESH_UPDATE_PREVIEW + return ..() \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index 820c95f324..e8b1a56d62 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -17,8 +17,6 @@ * Color adjustment */ -var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() - /datum/gear_tweak/color var/list/valid_colors @@ -32,10 +30,10 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() /datum/gear_tweak/color/get_default() return valid_colors ? valid_colors[1] : COLOR_GRAY -/datum/gear_tweak/color/get_metadata(var/user, var/metadata) +/datum/gear_tweak/color/get_metadata(var/user, var/metadata, var/title = "Character Preference") if(valid_colors) - return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors - return input(user, "Choose an item color.", "Global Preference", metadata) as color|null + return input(user, "Choose a color.", title, metadata) as null|anything in valid_colors + return input(user, "Choose a color.", title, metadata) as color|null /datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata) if(valid_colors && !(metadata in valid_colors)) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d72cb29a08..665ea5836c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -344,10 +344,17 @@ datum/preferences I.robotize() character.all_underwear.Cut() + character.all_underwear_metadata.Cut() + for(var/underwear_category_name in all_underwear) - var/underwear_item_name = all_underwear[underwear_category_name] var/datum/category_group/underwear/underwear_category = global_underwear.categories_by_name[underwear_category_name] - character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name] + if(underwear_category) + var/underwear_item_name = all_underwear[underwear_category_name] + character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name] + if(all_underwear_metadata[underwear_category_name]) + character.all_underwear_metadata[underwear_category_name] = all_underwear_metadata[underwear_category_name] + else + all_underwear -= underwear_category_name if(backbag > 4 || backbag < 1) backbag = 1 //Same as above @@ -361,6 +368,7 @@ datum/preferences character.force_update_limbs() character.update_mutations(0) character.update_body(0) + character.update_underwear(0) character.update_hair(0) character.update_icons() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index cec1328f73..13f4f2f25a 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -34,6 +34,7 @@ var/synthetic //If they are a synthetic (aka synthetic torso) var/list/all_underwear = list() + var/list/all_underwear_metadata = 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 5f28fbf0e8..43123eab0a 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -109,29 +109,30 @@ Please contact me on #coderbus IRC. ~Carn x #define MUTATIONS_LAYER 1 #define DAMAGE_LAYER 2 #define SURGERY_LEVEL 3 //bs12 specific. -#define UNIFORM_LAYER 4 -#define ID_LAYER 5 -#define SHOES_LAYER 6 -#define GLOVES_LAYER 7 -#define BELT_LAYER 8 -#define SUIT_LAYER 9 -#define TAIL_LAYER 10 //bs12 specific. this hack is probably gonna come back to haunt me -#define GLASSES_LAYER 11 -#define BELT_LAYER_ALT 12 -#define SUIT_STORE_LAYER 13 -#define BACK_LAYER 14 -#define HAIR_LAYER 15 //TODO: make part of head layer? -#define EARS_LAYER 16 -#define FACEMASK_LAYER 17 -#define HEAD_LAYER 18 -#define COLLAR_LAYER 19 -#define HANDCUFF_LAYER 20 -#define LEGCUFF_LAYER 21 -#define L_HAND_LAYER 22 -#define R_HAND_LAYER 23 -#define FIRE_LAYER 24 //If you're on fire -#define TARGETED_LAYER 25 //BS12: Layer for the target overlay from weapon targeting system -#define TOTAL_LAYERS 25 +#define UNDERWEAR_LAYER 4 +#define UNIFORM_LAYER 5 +#define ID_LAYER 6 +#define SHOES_LAYER 7 +#define GLOVES_LAYER 8 +#define BELT_LAYER 9 +#define SUIT_LAYER 10 +#define TAIL_LAYER 11 //bs12 specific. this hack is probably gonna come back to haunt me +#define GLASSES_LAYER 12 +#define BELT_LAYER_ALT 13 +#define SUIT_STORE_LAYER 14 +#define BACK_LAYER 15 +#define HAIR_LAYER 16 //TODO: make part of head layer? +#define EARS_LAYER 17 +#define FACEMASK_LAYER 18 +#define HEAD_LAYER 19 +#define COLLAR_LAYER 20 +#define HANDCUFF_LAYER 21 +#define LEGCUFF_LAYER 22 +#define L_HAND_LAYER 23 +#define R_HAND_LAYER 24 +#define FIRE_LAYER 25 //If you're on fire +#define TARGETED_LAYER 26 //BS12: Layer for the target overlay from weapon targeting system +#define TOTAL_LAYERS 26 ////////////////////////////////// /mob/living/carbon/human @@ -148,8 +149,12 @@ Please contact me on #coderbus IRC. ~Carn x if (icon_update) icon = stand_icon - for(var/image/I in overlays_standing) - overlays += I + for(var/entry in overlays_standing) + if(istype(entry, /image)) + overlays += entry + else if(istype(entry, /list)) + for(var/inner_entry in entry) + overlays += inner_entry if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone. var/matrix/M = matrix() @@ -318,18 +323,24 @@ var/global/list/damage_icon_parts = list() //END CACHED ICON GENERATION. stand_icon.Blend(base_icon,ICON_OVERLAY) - //Underwear - if(species.appearance_flags & HAS_UNDERWEAR) - for(var/category in all_underwear) - var/datum/category_item/underwear/UW = all_underwear[category] - UW.apply_to_icon(stand_icon) - if(update_icons) update_icons() //tail update_tail_showing(0) +//UNDERWEAR OVERLAY +/mob/living/carbon/human/proc/update_underwear(var/update_icons=1) + overlays_standing[UNDERWEAR_LAYER] = null + + if(species.appearance_flags & HAS_UNDERWEAR) + overlays_standing[UNDERWEAR_LAYER] = list() + for(var/category in all_underwear) + var/datum/category_item/underwear/UWI = all_underwear[category] + overlays_standing[UNDERWEAR_LAYER] += UWI.generate_image(all_underwear_metadata[category]) + + if(update_icons) update_icons() + //HAIR OVERLAY /mob/living/carbon/human/proc/update_hair(var/update_icons=1) //Reset our hair @@ -424,6 +435,7 @@ var/global/list/damage_icon_parts = list() update_mutations(0) update_body(0) + update_underwear(0) update_hair(0) update_inv_w_uniform(0) update_inv_wear_id(0) diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index e3b924ee2c..4ed82dd5ed 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/polaris.dme b/polaris.dme index 60a5004565..c81c1ac075 100644 --- a/polaris.dme +++ b/polaris.dme @@ -41,6 +41,7 @@ #include "code\_compatibility\509\JSON Writer.dm" #include "code\_compatibility\509\text.dm" #include "code\_compatibility\509\type2type.dm" +#include "code\_helpers\_global_objects.dm" #include "code\_helpers\atmospherics.dm" #include "code\_helpers\datum_pool.dm" #include "code\_helpers\files.dm"