diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 7e1e92d201a..c980c6ca5ec 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -129,6 +129,25 @@ else return "unknown" +/proc/haircolordesc(v_hair) + switch(v_hair) + if("Green") + return "1" + if("Azure") + return "2" + if("Brown") + return "3" + if("Emerald") + return "4" + if("Gray") + return "5" + if("Light Green") + return "6" + if("Green-Brown") + return "7" + else + return "7" + /proc/age2agedescription(age) switch(age) if(0 to 1) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 27af1a0f5c4..1adb9e50a4f 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -264,14 +264,35 @@ /obj/item/weapon/hair_dye/proc/color_hair(mob/living/carbon/human/H, var/facial = 0) if(!H) return - if(facial) - H.my_appearance.r_facial = color_r - H.my_appearance.g_facial = color_g - H.my_appearance.b_facial = color_b + if(isvox(H)) + var/list/voxhaircolorlist = list() + voxhaircolorlist["green"] = list(87, 123, 119) + voxhaircolorlist["brown"] = list(162,107,56) + voxhaircolorlist["grey"] = list(192, 192, 192) + voxhaircolorlist["lightgreen"] = list(132, 138, 64) + voxhaircolorlist["azure"] = list(112, 126, 93) + voxhaircolorlist["emerald"] = list(65, 136, 98) + voxhaircolorlist["greenbrown"] = list(147, 126, 61) + + var/list/closest = ARBITRARILY_LARGE_NUMBER + var/voxcolor = 0 + for(var/rgbcolorset in voxhaircolorlist) + var/rgb = voxhaircolorlist[rgbcolorset] + var/diff = (max(color_r,rgb[1]) - min(color_r,rgb[1])) + (max(color_r,rgb[2]) - min(color_r,rgb[2])) + (max(color_r,rgb[3]) - min(color_r,rgb[3])) + if(diff < closest) + closest = diff + var/haircolor = get_key_by_element(voxhaircolorlist, rgb) + voxcolor = voxhaircolorlist.Find(haircolor) + H.my_appearance.v_hair = voxcolor else - H.my_appearance.r_hair = color_r - H.my_appearance.g_hair = color_g - H.my_appearance.b_hair = color_b + if(facial) + H.my_appearance.r_facial = color_r + H.my_appearance.g_facial = color_g + H.my_appearance.b_facial = color_b + else + H.my_appearance.r_hair = color_r + H.my_appearance.g_hair = color_g + H.my_appearance.b_hair = color_b H.update_hair() if(H.species.anatomy_flags & RGBSKINTONE) H.update_body() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ca20e819024..014e8e230aa 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -142,6 +142,7 @@ var/const/MAX_SAVE_SLOTS = 16 var/underwear = 1 //underwear type var/backbag = 2 //backpack type var/h_style = "Bald" //Hair type + var/v_hair = 1 //Hair color for vox var/r_hair = 0 //Hair color var/g_hair = 0 //Hair color var/b_hair = 0 //Hair color @@ -1044,6 +1045,11 @@ NOTE: The change will take effect AFTER any current recruiting periods."} r_hair = hex2num(copytext(new_hair, 2, 4)) g_hair = hex2num(copytext(new_hair, 4, 6)) b_hair = hex2num(copytext(new_hair, 6, 8)) + if(species == "Vox") + var/new_hair_vox = input(user, "Choose your character's hair color:", "Character Preference") as null|anything in list("Green", "Azure", "Brown", "Emerald", "Gray", "Light Green", "Green-Brown") + if(new_hair_vox) + v_hair = haircolordesc(new_hair_vox) + to_chat(user,"Your hair will now be [new_hair_vox] in color.") if(species == "Insectoid") var/carapace = input(user, "Choose your character's carapace colour, color values will be adjusted to between 35 and 80:", "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null if(carapace) @@ -1054,7 +1060,7 @@ NOTE: The change will take effect AFTER any current recruiting periods."} g_hair = clamp(g_hair, 0, 50) b_hair = clamp(b_hair, 0, 35) if("h_style") - var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_sprite_accessories(hair_styles_list, null, species) //gender intentionally left null so speshul snowflakes can cross-hairdress + var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_sprite_accessories(hair_styles_list, null, species) //gender intentionally left null so speshul snowflakes can cross-hairdress if(new_h_style) h_style = new_h_style @@ -1450,6 +1456,8 @@ Values up to 1000 are allowed.", "FPS", fps) as null|num character.my_appearance.g_hair = g_hair character.my_appearance.b_hair = b_hair + character.my_appearance.v_hair = v_hair + character.my_appearance.r_facial = r_facial character.my_appearance.g_facial = g_facial character.my_appearance.b_facial = b_facial diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index f5d8bdbde45..7832966bfbf 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -10,6 +10,8 @@ // "Proper" to the appearance datum. var/s_tone = 0 + var/v_hair = 7 + var/h_style = "Bald" var/r_hair = 0 var/g_hair = 0 @@ -41,6 +43,7 @@ new_looks.h_style = h_style new_looks.r_hair = r_hair new_looks.g_hair = g_hair + new_looks.v_hair = v_hair new_looks.f_style = f_style new_looks.r_facial = r_facial new_looks.g_facial = g_facial diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index efc44eb0c4c..96e7b2466f0 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -348,11 +348,15 @@ var/global/list/damage_icon_parts = list() if(my_appearance.h_style && !(check_hidden_flags(get_clothing_items(),HIDEHEADHAIR))) //If the hair is hidden, don't draw it var/datum/sprite_accessory/hair_style = hair_styles_list[my_appearance.h_style] if((hair_style) && (src.species.name in hair_style.species_allowed)) - var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[hair_suffix]") - if(hair_style.do_colouration) - hair_s.Blend(rgb(my_appearance.r_hair, my_appearance.g_hair, my_appearance.b_hair), ICON_ADD) - if(hair_style.additional_accessories) - hair_s.Blend(icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_acc"), ICON_OVERLAY) + var/icon/hair_s + if(isvox(src)) + hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[my_appearance.v_hair]_[hair_suffix]") + else + hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[hair_suffix]") + if(hair_style.do_colouration) + hair_s.Blend(rgb(my_appearance.r_hair, my_appearance.g_hair, my_appearance.b_hair), ICON_ADD) + if(hair_style.additional_accessories) + hair_s.Blend(icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_acc"), ICON_OVERLAY) face_standing.Blend(hair_s, ICON_OVERLAY) // else //warning("Invalid my_appearance.h_style for [species.name]: [my_appearance.h_style]") diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index a874f1c2067..fa3165e1c22 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -21,6 +21,8 @@ /datum/preferences/proc/randomize_hair_color(var/target = "hair") + if(species == "Vox") + v_hair = rand(1,7) if(prob (75) && target == "facial") // Chance to inherit hair color r_facial = r_hair g_facial = g_hair @@ -31,7 +33,7 @@ var/green var/blue - var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", 15;"punk") + var/col = pick("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", 15;"punk") switch(col) if("blonde") red = 255 @@ -242,7 +244,13 @@ eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] - if(hair_style) + if(species == "Vox") + if(hair_style) + var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[v_hair]_s") + if(hair_style.additional_accessories) + hair_s.Blend(icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[v_hair]_acc"), ICON_OVERLAY) + eyes_s.Blend(hair_s, ICON_OVERLAY) + else if(hair_style) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") if(hair_style.do_colouration) hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index c045d40cec7..8d0a700c7e6 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -939,85 +939,71 @@ name = "Short Vox Quills" icon_state = "vox_shortquills" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_kingly name = "Vox Kingly" icon_state = "vox_kingly" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_afro name = "Vox Afro" icon_state = "vox_afro" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_mohawk name = "Vox Mohawk" icon_state = "vox_mohawk" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_yasu name = "Vox Yasuhiro" icon_state = "vox_yasu" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_horns name = "Vox Quorns" icon_state = "vox_horns" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_nights name = "Vox Nights" icon_state = "vox_nights" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_surf name = "Vox Surf" icon_state = "vox_surf" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_cropped name = "Vox Cropped" icon_state = "vox_cropped" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_bald name = "Vox Bald" icon_state = "vox_bald" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_ruffhawk name = "Vox Ruffhawk" icon_state = "vox_ruff_hawk" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_rows name = "Vox Rows" icon_state = "vox_rows" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_mange name = "Vox Mange" icon_state = "vox_mange" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/vox_quills_pony name = "Vox Pony" icon_state = "vox_pony" species_allowed = list(VOX_SHAPED) - do_colouration = 0 /datum/sprite_accessory/hair/diona_popcorn name = "Popped Hair" diff --git a/icons/mob/hair_styles.dmi b/icons/mob/hair_styles.dmi index 4bddf7a4dc8..967daa60356 100644 Binary files a/icons/mob/hair_styles.dmi and b/icons/mob/hair_styles.dmi differ