diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 890efe66fc0..b7621500e3a 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -32,7 +32,7 @@ to_chat(user, "You are not capable of wearing underwear.") return - var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks") + var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Underwear Color","Undershirt","Socks") if(!Adjacent(user)) return @@ -41,7 +41,10 @@ var/new_undies = input(user, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list if(new_undies) H.underwear = new_undies - + if("Underwear Color") + var/new_underwear_color = input(H, "Choose your underwear color", "Underwear Color","#"+H.underwear_color) as color|null + if(new_underwear_color) + H.underwear_color = sanitize_hexcolor(new_underwear_color) if("Undershirt") var/new_undershirt = input(user, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list if(new_undershirt) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 90749af01e1..61eefeb7721 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -15,6 +15,7 @@ H.real_name = random_unique_name(H.gender) H.name = H.real_name H.underwear = random_underwear(H.gender) + H.underwear_color = random_short_color() H.skin_tone = random_skin_tone() H.hair_style = random_hair_style(H.gender) H.facial_hair_style = random_facial_hair_style(H.gender) @@ -36,4 +37,4 @@ H.update_body() H.update_hair() - H.update_body_parts() \ No newline at end of file + H.update_body_parts() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 85193b8fefc..aa589bced19 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -55,6 +55,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/gender = MALE //gender of character (well duh) var/age = 30 //age of character var/underwear = "Nude" //underwear type + var/underwear_color = "000" //underwear color var/undershirt = "Nude" //undershirt type var/socks = "Nude" //socks type var/backbag = DBACKPACK //backpack type @@ -229,6 +230,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Always Random Species: [be_random_species ? "Yes" : "No"]
" dat += "Underwear:
[underwear]
" + dat += "Underwear Color:
    Change
" dat += "Undershirt:
[undershirt]
" dat += "Socks:
[socks]
" dat += "Backpack:
[backbag]
" @@ -1023,6 +1025,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) facial_hair_style = random_facial_hair_style(gender) if("underwear") underwear = random_underwear(gender) + if("underwear_color") + underwear_color = random_short_color() if("undershirt") undershirt = random_undershirt(gender) if("socks") @@ -1165,6 +1169,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_underwear) underwear = new_underwear + if("underwear_color") + var/new_underwear_color = input(user, "Choose your character's underwear color:", "Character Preference","#"+underwear_color) as color|null + if(new_underwear_color) + underwear_color = sanitize_hexcolor(new_underwear_color) + if("undershirt") var/new_undershirt if(gender == MALE) @@ -1560,6 +1569,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.hair_style = hair_style character.facial_hair_style = facial_hair_style character.underwear = underwear + character.underwear_color = underwear_color character.undershirt = undershirt character.socks = socks diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ffb4ac14320..6d4306f4403 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 23 +#define SAVEFILE_VERSION_MAX 24 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -109,6 +109,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car all_quirks -= "Physically Obstructive" all_quirks -= "Neat" all_quirks -= "NEET" + if(current_version < 24) + if (!(underwear in GLOB.underwear_list)) + underwear = "Nude" /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) @@ -293,6 +296,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["hair_style_name"] >> hair_style S["facial_style_name"] >> facial_hair_style S["underwear"] >> underwear + S["underwear_color"] >> underwear_color S["undershirt"] >> undershirt S["socks"] >> socks S["backbag"] >> backbag @@ -380,6 +384,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) hair_color = sanitize_hexcolor(hair_color, 3, 0) facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0) + underwear_color = sanitize_hexcolor(underwear_color, 3, 0) eye_color = sanitize_hexcolor(eye_color, 3, 0) skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones) backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag)) @@ -433,6 +438,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["hair_style_name"] , hair_style) WRITE_FILE(S["facial_style_name"] , facial_hair_style) WRITE_FILE(S["underwear"] , underwear) + WRITE_FILE(S["underwear_color"] , underwear_color) WRITE_FILE(S["undershirt"] , undershirt) WRITE_FILE(S["socks"] , socks) WRITE_FILE(S["backbag"] , backbag) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 8eee4d75418..abea88c4213 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -6,6 +6,7 @@ else gender = pick(MALE,FEMALE) underwear = random_underwear(gender) + underwear_color = random_short_color() undershirt = random_undershirt(gender) socks = random_socks() skin_tone = random_skin_tone() diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index 0b8a9d92850..782923ace04 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -52,6 +52,7 @@ var/name //the preview name of the accessory var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations var/gender_specific //Something that can be worn by either gender, but looks different on each + var/use_static //determines if the accessory will be skipped by color preferences var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none. var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears. var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects @@ -944,62 +945,26 @@ /////////////////////////// // Underwear Definitions // /////////////////////////// + /datum/sprite_accessory/underwear icon = 'icons/mob/underwear.dmi' + use_static = FALSE + +//MALE UNDERWEAR /datum/sprite_accessory/underwear/nude name = "Nude" icon_state = null gender = NEUTER -/datum/sprite_accessory/underwear/male_mankini - name = "Mankini" - icon_state = "male_mankini" +/datum/sprite_accessory/underwear/male_briefs + name = "Men's Briefs" + icon_state = "male_briefs" gender = MALE -/datum/sprite_accessory/underwear/male_black - name = "Men's Black" - icon_state = "male_black" - gender = MALE - -/datum/sprite_accessory/underwear/male_blackalt - name = "Men's Black Boxer" - icon_state = "male_blackalt" - gender = MALE - -/datum/sprite_accessory/underwear/male_blue - name = "Men's Blue" - icon_state = "male_blue" - gender = MALE - -/datum/sprite_accessory/underwear/male_green - name = "Men's Green" - icon_state = "male_green" - gender = MALE - -/datum/sprite_accessory/underwear/male_grey - name = "Men's Grey" - icon_state = "male_grey" - gender = MALE - -/datum/sprite_accessory/underwear/male_greyalt - name = "Men's Grey Boxer" - icon_state = "male_greyalt" - gender = MALE - -/datum/sprite_accessory/underwear/male_hearts - name = "Men's Hearts Boxer" - icon_state = "male_hearts" - gender = MALE - -/datum/sprite_accessory/underwear/male_kinky - name = "Men's Kinky" - icon_state = "male_kinky" - gender = MALE - -/datum/sprite_accessory/underwear/male_red - name = "Men's Red" - icon_state = "male_red" +/datum/sprite_accessory/underwear/male_boxers + name = "Men's Boxer" + icon_state = "male_boxers" gender = MALE /datum/sprite_accessory/underwear/male_stripe @@ -1007,109 +972,60 @@ icon_state = "male_stripe" gender = MALE +/datum/sprite_accessory/underwear/male_kinky + name = "Men's Kinky" + icon_state = "male_kinky" + gender = MALE + +/datum/sprite_accessory/underwear/male_mankini + name = "Mankini" + icon_state = "male_mankini" + gender = MALE + +/datum/sprite_accessory/underwear/male_hearts + name = "Men's Hearts Boxer" + icon_state = "male_hearts" + gender = MALE + use_static = TRUE + /datum/sprite_accessory/underwear/male_commie name = "Men's Striped Commie Boxer" icon_state = "male_commie" gender = MALE + use_static = TRUE /datum/sprite_accessory/underwear/male_usastripe name = "Men's Striped Freedom Boxer" icon_state = "male_assblastusa" gender = MALE + use_static = TRUE /datum/sprite_accessory/underwear/male_uk name = "Men's Striped UK Boxer" icon_state = "male_uk" gender = MALE + use_static = TRUE -/datum/sprite_accessory/underwear/male_white - name = "Men's White" - icon_state = "male_white" - gender = MALE -/datum/sprite_accessory/underwear/female_babydoll - name = "Babydoll" - icon_state = "female_babydoll" +//FEMALE UNDERWEAR +/datum/sprite_accessory/underwear/female_bikini + name = "Ladies' Bikini" + icon_state = "female_bikini" gender = FEMALE -/datum/sprite_accessory/underwear/female_babyblue - name = "Ladies' Baby-Blue" - icon_state = "female_babyblue" +/datum/sprite_accessory/underwear/female_lace + name = "Ladies' Lace" + icon_state = "female_lace" gender = FEMALE -/datum/sprite_accessory/underwear/female_black - name = "Ladies' Black" - icon_state = "female_black" +/datum/sprite_accessory/underwear/female_bralette + name = "Ladies' Bralette" + icon_state = "female_bralette" gender = FEMALE -/datum/sprite_accessory/underwear/female_black_neko - name = "Ladies' Black Neko" - icon_state = "female_neko_black" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_blackalt - name = "Ladies' Black Sport" - icon_state = "female_blackalt" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_blue - name = "Ladies' Blue" - icon_state = "female_blue" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_commie - name = "Ladies' Commie" - icon_state = "female_commie" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_usastripe - name = "Ladies' Freedom" - icon_state = "female_assblastusa" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_green - name = "Ladies' Green" - icon_state = "female_green" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_kinky - name = "Ladies' Kinky" - icon_state = "female_kinky" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_pink - name = "Ladies' Pink" - icon_state = "female_pink" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_red - name = "Ladies' Red" - icon_state = "female_red" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit - name = "Ladies' Swimsuit (Black)" - icon_state = "swim_black" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_blue - name = "Ladies' Swimsuit (Blue)" - icon_state = "swim_blue" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_green - name = "Ladies' Swimsuit (Green)" - icon_state = "swim_green" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_purple - name = "Ladies' Swimsuit (Purple)" - icon_state = "swim_purple" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_red - name = "Ladies' Swimsuit (Red)" - icon_state = "swim_red" +/datum/sprite_accessory/underwear/female_sport + name = "Ladies' Sport" + icon_state = "female_sport" gender = FEMALE /datum/sprite_accessory/underwear/female_thong @@ -1117,30 +1033,76 @@ icon_state = "female_thong" gender = FEMALE -/datum/sprite_accessory/underwear/female_uk - name = "Ladies' UK" - icon_state = "female_uk" +/datum/sprite_accessory/underwear/female_strapless + name = "Ladies' Strapless" + icon_state = "female_strapless" gender = FEMALE -/datum/sprite_accessory/underwear/female_white - name = "Ladies' White" - icon_state = "female_white" +/datum/sprite_accessory/underwear/female_babydoll + name = "Babydoll" + icon_state = "female_babydoll" + gender = FEMALE + +/datum/sprite_accessory/underwear/swimsuit_onepiece + name = "Ladies' One Piece Swimsuit" + icon_state = "swim_onepiece" + gender = FEMALE + +/datum/sprite_accessory/underwear/swimsuit_strapless_onepiece + name = "Ladies' Strapless One Piece Swimsuit" + icon_state = "swim_strapless_onepiece" + gender = FEMALE + +/datum/sprite_accessory/underwear/swimsuit_twopiece + name = "Ladies' Two Piece Swimsuit" + icon_state = "swim_twopiece" + gender = FEMALE + +/datum/sprite_accessory/underwear/swimsuit_strapless_twopiece + name = "Ladies' Strapless Two Piece Swimsuit" + icon_state = "swim_strapless_twopiece" + gender = FEMALE + +/datum/sprite_accessory/underwear/swimsuit_stripe + name = "Ladies' Stripe Swimsuit" + icon_state = "swim_stripe" gender = FEMALE /datum/sprite_accessory/underwear/female_white_neko name = "Ladies' White Neko" icon_state = "female_neko_white" gender = FEMALE + use_static = TRUE -/datum/sprite_accessory/underwear/female_whitealt - name = "Ladies' White Sport" - icon_state = "female_whitealt" +/datum/sprite_accessory/underwear/female_black_neko + name = "Ladies' Black Neko" + icon_state = "female_neko_black" gender = FEMALE + use_static = TRUE -/datum/sprite_accessory/underwear/female_yellow - name = "Ladies' Yellow" - icon_state = "female_yellow" +/datum/sprite_accessory/underwear/female_commie + name = "Ladies' Commie" + icon_state = "female_commie" gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/female_usastripe + name = "Ladies' Freedom" + icon_state = "female_assblastusa" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/female_uk + name = "Ladies' UK" + icon_state = "female_uk" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/female_kinky + name = "Ladies' Kinky" + icon_state = "female_kinky" + gender = FEMALE + use_static = TRUE //////////////////////////// // Undershirt Definitions // diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 2351c629510..48b435baca0 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -25,6 +25,7 @@ var/age = 30 //Player's age var/underwear = "Nude" //Which underwear the player wants + var/underwear_color = "000" var/undershirt = "Nude" //Which undershirt the player wants var/socks = "Nude" //Which socks the player wants var/backbag = DBACKPACK //Which backpack type the player has chosen. diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index f56b53d4bec..91c0486f70a 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -502,8 +502,12 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(!(NO_UNDERWEAR in species_traits)) if(H.underwear) var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear] + var/mutable_appearance/underwear_overlay if(underwear) - standing += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) + underwear_overlay = mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) + if(!underwear.use_static) + underwear_overlay.color = "#" + H.underwear_color + standing += underwear_overlay if(H.undershirt) var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt] diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index c08805567f2..8d891e9e583 100644 Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ