diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index dac3613318e..3f5b16ef917 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -30,6 +30,7 @@ #define HAS_HAIR_COLOR 0x20 // Hair colour selectable in chargen. (RGB) #define HAS_SOCKS 0x40 // If this species can wear socks #define HAS_FBP 0x80 // If for whatever ungodly reason we decide to ever have non-Shell FBPs. +#define HAS_SKIN_PRESET 0x100 // Skin color presets selectable in character generation. // Tau-Ceti basic, language common to all crew. #define LANGUAGE_TCB "Ceti Basic" diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 8c54e26643c..d9e87a13c64 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -56,6 +56,7 @@ var/global/list/facial_hair_styles_female_list = list() var/global/list/skin_styles_female_list = list() //unused var/global/list/body_marking_styles_list = list() var/global/list/chargen_disabilities_list = list() + //Underwear var/global/list/underwear_m = list("White" = "m1", "Grey" = "m2", "Green" = "m3", "Blue" = "m4", "Black" = "m5", "Mankini" = "m6", "Boxers" = "boxers", "Green and blue boxers" = "boxers_green_and_blue","Loveheart boxers" = "boxers_loveheart","None") //Curse whoever made male/female underwear diffrent colours var/global/list/underwear_f = list("Red" = "f1", "White" = "f2", "Yellow" = "f3", "Blue" = "f4", "Black" = "f5", "Thong" = "f6", "Black Sports" = "f7","White Sports" = "f8","None") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index b94f3fd61d6..e96248e7034 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -936,10 +936,10 @@ var/list/admin_verbs_cciaa = list( M.g_skin = hex2num(copytext(new_skin, 4, 6)) M.b_skin = hex2num(copytext(new_skin, 6, 8)) - var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text + var/new_tone = input("Please select skin tone level: 30-220. Higher is darker.", "Character Generation") as text if (new_tone) - M.s_tone = max(min(round(text2num(new_tone)), 220), 1) + M.s_tone = max(min(round(text2num(new_tone)), 220), 30) M.s_tone = -M.s_tone + 35 // hair diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 1a0d8f8eef3..b45f8d6c663 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -143,6 +143,7 @@ var/datum/category_item/player_setup_item/general/equipment/equipment_item = category.items[4] equipment_item.sanitize_character() // sanitize equipment + pref.update_preview_icon() return TOPIC_REFRESH else if(href_list["age"]) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index d4b57eb8d94..8fcfcf368c3 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -160,7 +160,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.r_facial = sanitize_integer(pref.r_facial, 0, 255, initial(pref.r_facial)) pref.g_facial = sanitize_integer(pref.g_facial, 0, 255, initial(pref.g_facial)) pref.b_facial = sanitize_integer(pref.b_facial, 0, 255, initial(pref.b_facial)) - pref.s_tone = sanitize_integer(pref.s_tone, -185, 34, initial(pref.s_tone)) + pref.s_tone = sanitize_integer(pref.s_tone, -185, 5, initial(pref.s_tone)) pref.r_skin = sanitize_integer(pref.r_skin, 0, 255, initial(pref.r_skin)) pref.g_skin = sanitize_integer(pref.g_skin, 0, 255, initial(pref.g_skin)) pref.b_skin = sanitize_integer(pref.b_skin, 0, 255, initial(pref.b_skin)) @@ -294,9 +294,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O out += "
Eyes
" out += "Change Color [HTML_RECT(rgb(pref.r_eyes, pref.g_eyes, pref.b_eyes))]
" - if(has_flag(mob_species, HAS_SKIN_COLOR)) - out += "
Body Color
" - out += "Change Color [HTML_RECT(rgb(pref.r_skin, pref.g_skin, pref.b_skin))]
" + if(has_flag(mob_species, HAS_SKIN_COLOR) || has_flag(mob_species, HAS_SKIN_PRESET)) + if(has_flag(mob_species, HAS_SKIN_PRESET)) + out += "
Body Color Presets
" + out += "Choose Preset
" + else + out += "
Body Color
" + out += "Change Color [HTML_RECT(rgb(pref.r_skin, pref.g_skin, pref.b_skin))]
" + + out += "
Body Markings +
" for(var/M in pref.body_markings) @@ -444,19 +450,28 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else if(href_list["skin_tone"]) if(!has_flag(mob_species, HAS_SKIN_TONE)) return TOPIC_NOACTION - var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference", (-pref.s_tone) + 35) as num|null + var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 30 - 220 Dark)", "Character Preference", (-pref.s_tone) + 35) as num|null if(new_s_tone && has_flag(mob_species, HAS_SKIN_TONE) && CanUseTopic(user)) - pref.s_tone = 35 - max(min( round(new_s_tone), 220),1) + pref.s_tone = 35 - max(min( round(new_s_tone), 220),30) return TOPIC_REFRESH else if(href_list["skin_color"]) - if(!has_flag(mob_species, HAS_SKIN_COLOR)) + if(!has_flag(mob_species, HAS_SKIN_COLOR) && !has_flag(mob_species, HAS_SKIN_PRESET)) return TOPIC_NOACTION - var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(pref.r_skin, pref.g_skin, pref.b_skin)) as color|null - if(new_skin && has_flag(mob_species, HAS_SKIN_COLOR) && CanUseTopic(user)) - pref.r_skin = GetRedPart(new_skin) - pref.g_skin = GetGreenPart(new_skin) - pref.b_skin = GetBluePart(new_skin) + if(has_flag(mob_species, HAS_SKIN_COLOR) && !has_flag(mob_species, HAS_SKIN_PRESET)) + var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(pref.r_skin, pref.g_skin, pref.b_skin)) as color|null + if(new_skin && has_flag(mob_species, HAS_SKIN_COLOR) && CanUseTopic(user)) + pref.r_skin = GetRedPart(new_skin) + pref.g_skin = GetGreenPart(new_skin) + pref.b_skin = GetBluePart(new_skin) + return TOPIC_REFRESH + + else if(has_flag(mob_species, HAS_SKIN_PRESET)) + var/new_preset = input(user, "Choose your character's body color preset:", "Character Preference", rgb(pref.r_skin, pref.g_skin, pref.b_skin)) as null|anything in mob_species.character_color_presets + new_preset = mob_species.character_color_presets[new_preset] + pref.r_skin = GetRedPart(new_preset) + pref.g_skin = GetGreenPart(new_preset) + pref.b_skin = GetBluePart(new_preset) return TOPIC_REFRESH else if(href_list["facial_style"]) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 7e3f4408d8d..fc58328af30 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -55,9 +55,9 @@ datum/preferences var/b_facial = 0 //Face hair color var/s_tone = 0 //Skin tone var/skin_colour = "#000000" //Skin colour hex value, for SQL loading - var/r_skin = 0 //Skin color - var/g_skin = 0 //Skin color - var/b_skin = 0 //Skin color + var/r_skin = 37 //Skin color + var/g_skin = 3 //Skin color + var/b_skin = 2 //Skin color var/eyes_colour = "#000000" //Eye colour hex value, for SQL loading var/r_eyes = 0 //Eye color var/g_eyes = 0 //Eye color diff --git a/code/modules/mob/abstract/new_player/preferences_setup.dm b/code/modules/mob/abstract/new_player/preferences_setup.dm index 18f0e7a327e..a9281d46e80 100644 --- a/code/modules/mob/abstract/new_player/preferences_setup.dm +++ b/code/modules/mob/abstract/new_player/preferences_setup.dm @@ -1,197 +1,204 @@ -datum/preferences +/datum/preferences //The mob should have a gender you want before running this proc. Will run fine without H - proc/randomize_appearance_for(var/mob/living/carbon/human/H,var/random_gender=TRUE) - if(random_gender) - gender = pick(MALE, FEMALE) - else - gender = H.gender - var/datum/species/current_species = all_species[species] +/datum/preferences/proc/randomize_appearance_for(var/mob/living/carbon/human/H,var/random_gender=TRUE) + if(random_gender) + gender = pick(MALE, FEMALE) + else + gender = H.gender + var/datum/species/current_species = all_species[species] - if(current_species) - if(current_species.appearance_flags & HAS_SKIN_TONE) - s_tone = random_skin_tone() - if(current_species.appearance_flags & HAS_EYE_COLOR) - randomize_eyes_color() - if(current_species.appearance_flags & HAS_SKIN_COLOR) - randomize_skin_color() - if(current_species.appearance_flags & HAS_UNDERWEAR) - if(gender == FEMALE) - underwear = underwear_f[pick(underwear_f)] - else - underwear = underwear_m[pick(underwear_m)] - undershirt = undershirt_t[pick(undershirt_t)] - if(current_species.appearance_flags & HAS_SOCKS) - if(gender == FEMALE) - socks = socks_f[pick(socks_f)] - else - socks = socks_m[pick(socks_m)] + if(current_species) + if(current_species.appearance_flags & HAS_SKIN_TONE) + s_tone = random_skin_tone() + if(current_species.appearance_flags & HAS_EYE_COLOR) + randomize_eyes_color() + if(current_species.appearance_flags & HAS_SKIN_COLOR) + randomize_skin_color(current_species) + if(current_species.appearance_flags & HAS_UNDERWEAR) + if(gender == FEMALE) + underwear = underwear_f[pick(underwear_f)] + else + underwear = underwear_m[pick(underwear_m)] + undershirt = undershirt_t[pick(undershirt_t)] + if(current_species.appearance_flags & HAS_SOCKS) + if(gender == FEMALE) + socks = socks_f[pick(socks_f)] + else + socks = socks_m[pick(socks_m)] - h_style = random_hair_style(gender, species) - f_style = random_facial_hair_style(gender, species) - randomize_hair_color("hair") - randomize_hair_color("facial") + h_style = random_hair_style(gender, species) + f_style = random_facial_hair_style(gender, species) + randomize_hair_color("hair") + randomize_hair_color("facial") - backbag = 2 - age = rand(getMinAge(),getMaxAge()) - if(H) - copy_to(H,1) + backbag = 2 + age = rand(getMinAge(),getMaxAge()) + if(H) + copy_to(H,1) - proc/randomize_hair_color(var/target = "hair") - if(prob (75) && target == "facial") // Chance to inherit hair color - r_facial = r_hair - g_facial = g_hair - b_facial = b_hair - return +/datum/preferences/proc/randomize_hair_color(var/target = "hair") + if(prob (75) && target == "facial") // Chance to inherit hair color + r_facial = r_hair + g_facial = g_hair + b_facial = b_hair + return - var/red - var/green - var/blue + var/red + var/green + var/blue - var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", "punk") - switch(col) - if("blonde") - red = 255 - green = 255 - blue = 0 - if("black") - red = 0 - green = 0 - blue = 0 - if("chestnut") - red = 153 - green = 102 - blue = 51 - if("copper") - red = 255 - green = 153 - blue = 0 - if("brown") - red = 102 - green = 51 - blue = 0 - if("wheat") - red = 255 - green = 255 - blue = 153 - if("old") - red = rand (100, 255) - green = red - blue = red - if("punk") - red = rand (0, 255) - green = rand (0, 255) - blue = rand (0, 255) + var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", "punk") + switch(col) + if("blonde") + red = 255 + green = 255 + blue = 0 + if("black") + red = 0 + green = 0 + blue = 0 + if("chestnut") + red = 153 + green = 102 + blue = 51 + if("copper") + red = 255 + green = 153 + blue = 0 + if("brown") + red = 102 + green = 51 + blue = 0 + if("wheat") + red = 255 + green = 255 + blue = 153 + if("old") + red = rand (100, 255) + green = red + blue = red + if("punk") + red = rand (0, 255) + green = rand (0, 255) + blue = rand (0, 255) - red = max(min(red + rand (-25, 25), 255), 0) - green = max(min(green + rand (-25, 25), 255), 0) - blue = max(min(blue + rand (-25, 25), 255), 0) + red = max(min(red + rand (-25, 25), 255), 0) + green = max(min(green + rand (-25, 25), 255), 0) + blue = max(min(blue + rand (-25, 25), 255), 0) - switch(target) - if("hair") - r_hair = red - g_hair = green - b_hair = blue - if("facial") - r_facial = red - g_facial = green - b_facial = blue + switch(target) + if("hair") + r_hair = red + g_hair = green + b_hair = blue + if("facial") + r_facial = red + g_facial = green + b_facial = blue - proc/randomize_eyes_color() - var/red - var/green - var/blue +/datum/preferences/proc/randomize_eyes_color() + var/red + var/green + var/blue - var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") - switch(col) - if("black") - red = 0 - green = 0 - blue = 0 - if("grey") - red = rand (100, 200) - green = red - blue = red - if("brown") - red = 102 - green = 51 - blue = 0 - if("chestnut") - red = 153 - green = 102 - blue = 0 - if("blue") - red = 51 - green = 102 - blue = 204 - if("lightblue") - red = 102 - green = 204 - blue = 255 - if("green") - red = 0 - green = 102 - blue = 0 - if("albino") - red = rand (200, 255) - green = rand (0, 150) - blue = rand (0, 150) + var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") + switch(col) + if("black") + red = 0 + green = 0 + blue = 0 + if("grey") + red = rand (100, 200) + green = red + blue = red + if("brown") + red = 102 + green = 51 + blue = 0 + if("chestnut") + red = 153 + green = 102 + blue = 0 + if("blue") + red = 51 + green = 102 + blue = 204 + if("lightblue") + red = 102 + green = 204 + blue = 255 + if("green") + red = 0 + green = 102 + blue = 0 + if("albino") + red = rand (200, 255) + green = rand (0, 150) + blue = rand (0, 150) - red = max(min(red + rand (-25, 25), 255), 0) - green = max(min(green + rand (-25, 25), 255), 0) - blue = max(min(blue + rand (-25, 25), 255), 0) + red = max(min(red + rand (-25, 25), 255), 0) + green = max(min(green + rand (-25, 25), 255), 0) + blue = max(min(blue + rand (-25, 25), 255), 0) - r_eyes = red - g_eyes = green - b_eyes = blue + r_eyes = red + g_eyes = green + b_eyes = blue - proc/randomize_skin_color() - var/red - var/green - var/blue +/datum/preferences/proc/randomize_skin_color(var/datum/species/current_species) + var/red + var/green + var/blue - var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") - switch(col) - if("black") - red = 0 - green = 0 - blue = 0 - if("grey") - red = rand (100, 200) - green = red - blue = red - if("brown") - red = 102 - green = 51 - blue = 0 - if("chestnut") - red = 153 - green = 102 - blue = 0 - if("blue") - red = 51 - green = 102 - blue = 204 - if("lightblue") - red = 102 - green = 204 - blue = 255 - if("green") - red = 0 - green = 102 - blue = 0 - if("albino") - red = rand (200, 255) - green = rand (0, 150) - blue = rand (0, 150) + if(current_species && current_species.appearance_flags & HAS_SKIN_PRESET) + var/hex = pick(current_species.character_color_presets) + r_skin = GetRedPart(hex) + g_skin = GetGreenPart(hex) + b_skin = GetBluePart(hex) + return - red = max(min(red + rand (-25, 25), 255), 0) - green = max(min(green + rand (-25, 25), 255), 0) - blue = max(min(blue + rand (-25, 25), 255), 0) + var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") + switch(col) + if("black") + red = 0 + green = 0 + blue = 0 + if("grey") + red = rand (100, 200) + green = red + blue = red + if("brown") + red = 102 + green = 51 + blue = 0 + if("chestnut") + red = 153 + green = 102 + blue = 0 + if("blue") + red = 51 + green = 102 + blue = 204 + if("lightblue") + red = 102 + green = 204 + blue = 255 + if("green") + red = 0 + green = 102 + blue = 0 + if("albino") + red = rand (200, 255) + green = rand (0, 150) + blue = rand (0, 150) - r_skin = red - g_skin = green - b_skin = blue + red = max(min(red + rand (-25, 25), 255), 0) + green = max(min(green + rand (-25, 25), 255), 0) + blue = max(min(blue + rand (-25, 25), 255), 0) + + r_skin = red + g_skin = green + b_skin = blue /datum/preferences/proc/dress_preview_mob(var/mob/living/carbon/human/mannequin) @@ -238,6 +245,9 @@ datum/preferences /datum/preferences/proc/update_preview_icon() var/mob/living/carbon/human/dummy/mannequin/mannequin = SSmob.get_mannequin(client.ckey) mannequin.delete_inventory(TRUE) + mannequin.species.create_organs(mannequin) + if(gender) + mannequin.change_gender(gender) dress_preview_mob(mannequin) preview_icon = icon('icons/effects/effects.dmi', "nothing") diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index ab5b2b5f06d..d13211bc9c1 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -22,9 +22,10 @@ return src.gender = gender + dna.SetUIState(DNA_UI_GENDER, src.gender != MALE, 1) reset_hair() update_body() - update_dna() + species.create_organs(src) return 1 /mob/living/carbon/human/proc/change_hair(var/hair_style) @@ -112,7 +113,7 @@ return 1 /mob/living/carbon/human/proc/change_skin_color(var/red, var/green, var/blue) - if(red == r_skin && green == g_skin && blue == b_skin || !(species.appearance_flags & HAS_SKIN_COLOR)) + if((red == r_skin && green == g_skin && blue == b_skin) || !((species.appearance_flags & HAS_SKIN_COLOR) && (species.appearance_flags & HAS_SKIN_PRESET))) return r_skin = red diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 59ff3b11fe3..8b6aa777d49 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -212,6 +212,7 @@ var/list/allowed_religions = list(RELIGION_NONE, RELIGION_OTHER, RELIGION_CHRISTIANITY, RELIGION_ISLAM, RELIGION_JUDAISM, RELIGION_HINDU, RELIGION_BUDDHISM, RELIGION_MOROZ, RELIGION_TRINARY) var/zombie_type //What zombie species they become + var/list/character_color_presets /datum/species/proc/get_eyes(var/mob/living/carbon/human/H) return diff --git a/code/modules/mob/living/carbon/human/species/station/human/human.dm b/code/modules/mob/living/carbon/human/species/station/human/human.dm index 31700054c0e..c186cfec836 100644 --- a/code/modules/mob/living/carbon/human/species/station/human/human.dm +++ b/code/modules/mob/living/carbon/human/species/station/human/human.dm @@ -25,7 +25,7 @@ name_language = null // Use the first-name last-name generator rather than a language scrambler mob_size = 9 spawn_flags = CAN_JOIN - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR | HAS_SOCKS + appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR | HAS_SOCKS | HAS_SKIN_PRESET remains_type = /obj/effect/decal/remains/human stamina = 130 // Humans can sprint for longer than any other species @@ -38,4 +38,6 @@ inherent_verbs = list( /mob/living/carbon/human/proc/tie_hair) - zombie_type = "Zombie" \ No newline at end of file + zombie_type = "Zombie" + base_color = "#25032" + character_color_presets = list("Dark" = "#000000", "Warm" = "#250302", "Cold" = "#1e1e29") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm index d2ed0714780..b2d3143fcc3 100644 --- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm @@ -43,7 +43,7 @@ "Your synthetic flesh crawls in the heat, swelling into a disgusting morass of plastic." ) - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_EYE_COLOR | HAS_FBP | HAS_UNDERWEAR | HAS_SOCKS + appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_EYE_COLOR | HAS_FBP | HAS_UNDERWEAR | HAS_SOCKS | HAS_SKIN_PRESET has_limbs = list( "chest" = list("path" = /obj/item/organ/external/chest/shell), @@ -59,6 +59,9 @@ "r_foot" = list("path" = /obj/item/organ/external/foot/right/shell) ) + base_color = "#25032" + character_color_presets = list("Dark" = "#000000", "Warm" = "#250302", "Cold" = "#1e1e29") + sprint_temperature_factor = 1.3 sprint_charge_factor = 0.85 diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index 50e66a0a12b..bf3a34982ed 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -34,9 +34,9 @@ return 1 if(href_list["skin_tone"]) if(can_change_skin_tone()) - var/new_s_tone = input(usr, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Skin Tone", -owner.s_tone + 35) as num|null + var/new_s_tone = input(usr, "Choose your character's skin-tone:\n(Light 30 - 220 Dark)", "Skin Tone", -owner.s_tone + 35) as num|null if(isnum(new_s_tone) && can_still_topic(state)) - new_s_tone = 35 - max(min( round(new_s_tone), 220),1) + new_s_tone = 35 - max(min( round(new_s_tone), 220),30) return owner.change_skin_tone(new_s_tone) if(href_list["skin_color"]) if(can_change_skin_color()) @@ -48,6 +48,16 @@ if(owner.change_skin_color(r_skin, g_skin, b_skin)) update_dna() return 1 + if(href_list["skin_preset"]) + if(can_change_skin_preset()) + var/new_preset = input(usr, "Choose your character's body color preset:", "Character Preference", rgb(owner.r_skin, owner.g_skin, owner.b_skin)) as null|anything in owner.species.character_color_presets + if(new_preset && can_still_topic(state)) + var/r_skin = GetRedPart(new_preset) + var/g_skin = GetGreenPart(new_preset) + var/b_skin = GetBluePart(new_preset) + if(owner.change_skin_color(r_skin, g_skin, b_skin)) + update_dna() + return 1 if(href_list["hair"]) if(can_change(APPEARANCE_HAIR) && (href_list["hair"] in valid_hairstyles)) if(owner.change_hair(href_list["hair"])) @@ -110,6 +120,7 @@ data["change_gender"] = can_change(APPEARANCE_GENDER) data["change_skin_tone"] = can_change_skin_tone() data["change_skin_color"] = can_change_skin_color() + data["change_skin_preset"] = can_change_skin_preset() data["change_eye_color"] = can_change(APPEARANCE_EYE_COLOR) data["change_hair"] = can_change(APPEARANCE_HAIR) if(data["change_hair"]) @@ -149,6 +160,9 @@ /datum/nano_module/appearance_changer/proc/can_change_skin_color() return owner && (flags & APPEARANCE_SKIN) && owner.species.appearance_flags & HAS_SKIN_COLOR +/datum/nano_module/appearance_changer/proc/can_change_skin_preset() + return owner && (flags & APPEARANCE_SKIN) && owner.species.appearance_flags & HAS_SKIN_PRESET + /datum/nano_module/appearance_changer/proc/cut_and_generate_data() // Making the assumption that the available species remain constant valid_facial_hairstyles.Cut() diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 20138e11e76..46f028e602c 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -21,7 +21,7 @@ return if(!isnull(human.s_tone) && (human.species.appearance_flags & HAS_SKIN_TONE)) s_tone = human.s_tone - if(human.species.appearance_flags & HAS_SKIN_COLOR) + if((human.species.appearance_flags & HAS_SKIN_COLOR) || (human.species.appearance_flags & HAS_SKIN_PRESET)) skin_color = rgb(human.r_skin, human.g_skin, human.b_skin) hair_color = rgb(human.r_hair, human.g_hair, human.b_hair) @@ -33,7 +33,7 @@ return if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.appearance_flags & HAS_SKIN_TONE)) s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE) - if(species.appearance_flags & HAS_SKIN_COLOR) + if((species.appearance_flags & HAS_SKIN_COLOR) || (species.appearance_flags & HAS_SKIN_PRESET)) skin_color = rgb(dna.GetUIValue(DNA_UI_SKIN_R), dna.GetUIValue(DNA_UI_SKIN_G), dna.GetUIValue(DNA_UI_SKIN_B)) hair_color = rgb(dna.GetUIValue(DNA_UI_HAIR_R),dna.GetUIValue(DNA_UI_HAIR_G),dna.GetUIValue(DNA_UI_HAIR_B)) @@ -150,13 +150,15 @@ mob_icon.ColorTone(rgb(10,50,0)) mob_icon.SetIntensity(0.7) + if(skin_color) + mob_icon.Blend(skin_color, ICON_ADD) + if(!isnull(s_tone)) if(s_tone >= 0) mob_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) else mob_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - else if(skin_color) - mob_icon.Blend(skin_color, ICON_ADD) + apply_markings() diff --git a/html/changelogs/mattatlaspoze-newhumansprites.yml b/html/changelogs/mattatlaspoze-newhumansprites.yml new file mode 100644 index 00000000000..a3a0b1c3e53 --- /dev/null +++ b/html/changelogs/mattatlaspoze-newhumansprites.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: PoZe, MattAtlas + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "New human sprites! Your characters will be grey until you select a preset. Please send all feedback regarding human colors to MattAtlas#6970. This is brought to you mainly by PoZe, who did most of the work." diff --git a/icons/mob/human_races/human/human_preview.dmi b/icons/mob/human_races/human/human_preview.dmi index 961c062c2b2..1d5051bcfa7 100644 Binary files a/icons/mob/human_races/human/human_preview.dmi and b/icons/mob/human_races/human/human_preview.dmi differ diff --git a/icons/mob/human_races/human/r_def_human.dmi b/icons/mob/human_races/human/r_def_human.dmi index e622ef14b5a..3daedac6633 100644 Binary files a/icons/mob/human_races/human/r_def_human.dmi and b/icons/mob/human_races/human/r_def_human.dmi differ diff --git a/icons/mob/human_races/human/r_human.dmi b/icons/mob/human_races/human/r_human.dmi index 5724355bf1c..d870164d383 100644 Binary files a/icons/mob/human_races/human/r_human.dmi and b/icons/mob/human_races/human/r_human.dmi differ diff --git a/nano/templates/appearance_changer.tmpl b/nano/templates/appearance_changer.tmpl index bb283f245ba..bdb31c67be5 100644 --- a/nano/templates/appearance_changer.tmpl +++ b/nano/templates/appearance_changer.tmpl @@ -35,7 +35,10 @@ {{if data.change_skin_tone}} {{:helper.link('Change skin tone', null, { 'skin_tone' : 1})}} {{/if}} - {{if data.change_skin_color}} + {{if data.change_skin_preset}} + {{:helper.link('Change skin preset', null, { 'skin_preset' : 1})}} + {{/if}} + {{if data.change_skin_color && !data.change_skin_preset}} {{:helper.link('Change skin color', null, { 'skin_color' : 1})}} {{/if}} {{if data.change_hair_color}}