From bdcfaa71ef854ebc1a78f80270da32dce893976b Mon Sep 17 00:00:00 2001 From: jack-fractal Date: Wed, 24 Jun 2015 15:40:55 -0400 Subject: [PATCH] Initial Commit - adds synth-skin - modifies update_icons extensively - allows for customized limbs - makes update_icons very slow --- code/__HELPERS/mobs.dm | 52 ++- code/__HELPERS/text.dm | 3 + code/__HELPERS/type2type.dm | 3 + code/game/objects/structures/mirror.dm | 41 +-- code/modules/client/preferences.dm | 325 +++++++++--------- code/modules/mob/living/carbon/human/human.dm | 79 +++++ .../mob/living/carbon/human/human_species.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 185 +++++----- code/modules/mob/living/carbon/species.dm | 8 + code/modules/organs/organ_external.dm | 87 +++-- code/modules/organs/synth_skin.dm | 127 +++++++ icons/mob/human_face.dmi | Bin 63793 -> 53916 bytes icons/mob/human_races/r_human_grey.dmi | Bin 0 -> 5283 bytes 13 files changed, 568 insertions(+), 344 deletions(-) create mode 100644 code/modules/organs/synth_skin.dm create mode 100644 icons/mob/human_races/r_human_grey.dmi diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 454206da..66758c5d 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -1,41 +1,39 @@ -proc/random_hair_style(gender, species = "Human") - var/h_style = "Bald" - - var/list/valid_hairstyles = list() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue +proc/valid_sprite_accessories(gender,species,test_list) + var/list/valid = list() + for(var/style in test_list) + var/datum/sprite_accessory/S = test_list[style] if( !(species in S.species_allowed)) continue - valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] + if (S.gender!=NEUTER) + if (S.gender!=gender) + continue + valid[style] = S + return valid + +proc/get_valid_hairstyles(gender, species = "Human") + return valid_sprite_accessories(gender,species,hair_styles_list) + + +proc/get_valid_facialhairstyles(gender, species = "Human") + return valid_sprite_accessories(gender,species,facial_hair_styles_list) + + +proc/random_hair_style(gender, species = "Human") + var/h_style = "Bald" + var/list/valid_hairstyles = get_valid_hairstyles(gender,species) if(valid_hairstyles.len) h_style = pick(valid_hairstyles) - return h_style + proc/random_facial_hair_style(gender, species = "Human") var/f_style = "Shaved" - - var/list/valid_facialhairstyles = list() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if( !(species in S.species_allowed)) - continue - - valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] - + var/list/valid_facialhairstyles = get_valid_facialhairstyles(gender,species) if(valid_facialhairstyles.len) f_style = pick(valid_facialhairstyles) - - return f_style + return f_style + proc/random_name(gender, species = "Human") if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 3bbd38bf..e13226e3 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -241,6 +241,9 @@ proc/checkhtml(var/t, var/whitelist = paper_tag_whitelist) //Returns a string with the first element of the string capitalized. /proc/capitalize(var/t as text) return uppertext(copytext(t, 1, 2)) + copytext(t, 2) + +/proc/capitalized(var/t as text) + return capitalize(lowertext(t)) //Centers text by adding spaces to either side of the string. /proc/dd_centertext(message, length) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index b15a1116..08f0a069 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -82,6 +82,9 @@ hex = text("0[]", hex) return hex +/proc/colour_to_html(r,g,b) + return "'#[num2hex(r)][num2hex(g)][num2hex(b)]'" + // Concatenates a list of strings into a single string. A seperator may optionally be provided. /proc/list2text(list/ls, sep) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 21071711..34ae4ac5 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -14,42 +14,23 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user - var/userloc = H.loc - - //see code/modules/mob/new_player/preferences.dm at approx line 545 for comments! - //this is largely copypasted from there. - - //handle facial hair (if necessary) - if(H.gender == MALE) - var/list/species_facial_hair = list() - if(H.species) - for(var/i in facial_hair_styles_list) - var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i] - if(H.species.name in tmp_facial.species_allowed) - species_facial_hair += i - else - species_facial_hair = facial_hair_styles_list - - var/new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair + + var/list/hair_styles = H.valid_hairstyles_for_this_mob() + var/list/facial_styles = H.valid_facialhairstyles_for_this_mob() + + if (facial_styles.len > 1) //handle facial hair (if necessary) + var/new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in facial_styles if(userloc != H.loc) return //no tele-grooming if(new_style) H.f_style = new_style //handle normal hair - var/list/species_hair = list() - if(H.species) - for(var/i in hair_styles_list) - var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i] - if(H.species.name in tmp_hair.species_allowed) - species_hair += i - else - species_hair = hair_styles_list - - var/new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair - if(userloc != H.loc) return //no tele-grooming - if(new_style) - H.h_style = new_style + if (hair_styles.len) + var/new_style = input(user, "Select a hair style", "Grooming") as null|anything in hair_styles + if(userloc != H.loc) return //no tele-grooming + if(new_style) + H.h_style = new_style H.update_hair() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index dd6963e3..5f12b74f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -78,6 +78,8 @@ datum/preferences var/species = "Human" //Species datum to use. var/language = "None" //Secondary language var/list/gear //Custom/fluff item loadout. + var/covering_type = null //synth covering type + var/machine_brain_type = "Posibrain" //synth brain type //Some faction information. var/home_system = "Unset" //System of birth. @@ -315,43 +317,21 @@ datum/preferences dat += "Skin Tone: [-s_tone + 35]/220
" //dat += "Skin pattern: Adjust
" dat += "Needs Glasses: [disabilities == 0 ? "No" : "Yes"]
" + if (species=="Machine") // brain and covering type for shells + dat += "Brain Type: [machine_brain_type]
" + dat += "Exterior Coating: [isnull(covering_type) ? "None" : covering_type]
" dat += "Limbs: Adjust
" dat += "Internal Organs: Adjust
" //display limbs below var/ind = 0 + var/list/organ_names = get_limb_name_to_descriptive_name() + var/mechanical_organ_string = (species!="Machine" ? "Mechanical" : "Custom") for(var/name in organ_data) //world << "[ind] \ [organ_data.len]" var/status = organ_data[name] - var/organ_name = null - switch(name) - if("l_arm") - organ_name = "left arm" - if("r_arm") - organ_name = "right arm" - if("l_leg") - organ_name = "left leg" - if("r_leg") - organ_name = "right leg" - if("l_foot") - organ_name = "left foot" - if("r_foot") - organ_name = "right foot" - if("l_hand") - organ_name = "left hand" - if("r_hand") - organ_name = "right hand" - if("heart") - organ_name = "heart" - if("eyes") - organ_name = "eyes" - - if(status == "cyborg") - ++ind - if(ind > 1) - dat += ", " - dat += "\tMechanical [organ_name] prothesis" - else if(status == "amputated") + var/organ_name = organ_names[name] + if(status == "amputated") ++ind if(ind > 1) dat += ", " @@ -374,10 +354,20 @@ datum/preferences dat += "\tRetinal overlayed [organ_name]" else dat += "\tMechanically assisted [organ_name]" + var/list/status_as_list=status + if (istype(status_as_list)) // we got a robot here + ++ind + if(ind > 1) + dat += ", " + + var/color_string=colour_to_html(status_as_list[2],status_as_list[3],status_as_list[4]) + dat += "\t[mechanical_organ_string] [organ_name] covered in [lowertext(status_as_list[1])]" + + if(!ind) dat += "\[...\]

" else - dat += "

" + dat += ".

" if(gender == MALE) dat += "Underwear: [underwear_m[underwear]]
" @@ -1112,6 +1102,7 @@ datum/preferences if(new_age) age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) if("species") + config.usealienwhitelist=0 // REMOVE ME var/list/new_species = list("Human") var/prev_species = species @@ -1131,42 +1122,9 @@ datum/preferences if(prev_species != species) //grab one of the valid hair styles for the newly chosen species - var/list/valid_hairstyles = list() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if( !(species in S.species_allowed)) - continue - valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] - - if(valid_hairstyles.len) - h_style = pick(valid_hairstyles) - else - //this shouldn't happen - h_style = hair_styles_list["Bald"] - - //grab one of the valid facial hair styles for the newly chosen species - var/list/valid_facialhairstyles = list() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if( !(species in S.species_allowed)) - continue - - valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] - - if(valid_facialhairstyles.len) - f_style = pick(valid_facialhairstyles) - else - //this shouldn't happen - f_style = facial_hair_styles_list["Shaved"] - + h_style = random_hair_style(gender,species) + f_style = random_facial_hair_style(gender,species) + //reset hair colour and skin colour r_hair = 0//hex2num(copytext(new_hair, 2, 4)) g_hair = 0//hex2num(copytext(new_hair, 4, 6)) @@ -1208,24 +1166,15 @@ datum/preferences b_type = new_b_type if("hair") - if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell") - var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference") as color|null - if(new_hair) - r_hair = hex2num(copytext(new_hair, 2, 4)) - g_hair = hex2num(copytext(new_hair, 4, 6)) - b_hair = hex2num(copytext(new_hair, 6, 8)) - else if (species == "Machine") - alert("Please select the Body Color instead.") + var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference") as color|null + if(new_hair) + 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("h_style") - var/list/valid_hairstyles = list() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - if( !(species in S.species_allowed)) - continue - - valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] - + world << "Hair species [get_hair_species()]" + var/list/valid_hairstyles = get_valid_hairstyles(gender,get_hair_species()) var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles if(new_h_style) h_style = new_h_style @@ -1238,18 +1187,7 @@ datum/preferences b_facial = hex2num(copytext(new_facial, 6, 8)) if("f_style") - var/list/valid_facialhairstyles = list() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if( !(species in S.species_allowed)) - continue - - valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] - + var/list/valid_facialhairstyles = get_valid_facialhairstyles(gender,get_hair_species()) var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facialhairstyles if(new_f_style) f_style = new_f_style @@ -1296,10 +1234,6 @@ datum/preferences r_skin = hex2num(copytext(new_skin, 2, 4)) g_skin = hex2num(copytext(new_skin, 4, 6)) b_skin = hex2num(copytext(new_skin, 6, 8)) - if(species == "Machine") - r_hair = r_skin - g_hair = g_skin - b_hair = b_skin if("ooccolor") var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference") as color|null @@ -1324,58 +1258,20 @@ datum/preferences return else user << browse(null, "window=disabil") - + + if("set_machine_brain") // shell customization junk + var/new_brain = input(user, "Choose your brain.", "Character Preference") as null|anything in list("MMI", "Posibrain") // not differentiating brain species at the moment + if(new_brain) + machine_brain_type=new_brain + + if("set_machine_covering") + var/new_coating = input(user, "Choose your exterior coating.", "Character Preference") as null|anything in get_limb_covering_names() + if(new_coating) + covering_type=(new_coating!="None" ? new_coating : null) + if("limbs") - var/limb_name = input(user, "Which limb do you want to change?") as null|anything in list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand") - if(!limb_name) return - - var/limb = null - var/second_limb = null // if you try to change the arm, the hand should also change - var/third_limb = null // if you try to unchange the hand, the arm should also change - switch(limb_name) - if("Left Leg") - limb = "l_leg" - second_limb = "l_foot" - if("Right Leg") - limb = "r_leg" - second_limb = "r_foot" - if("Left Arm") - limb = "l_arm" - second_limb = "l_hand" - if("Right Arm") - limb = "r_arm" - second_limb = "r_hand" - if("Left Foot") - limb = "l_foot" - third_limb = "l_leg" - if("Right Foot") - limb = "r_foot" - third_limb = "r_leg" - if("Left Hand") - limb = "l_hand" - third_limb = "l_arm" - if("Right Hand") - limb = "r_hand" - third_limb = "r_arm" - - var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in list("Normal","Amputated","Prothesis") - if(!new_state) return - - switch(new_state) - if("Normal") - organ_data[limb] = null - if(third_limb) - organ_data[third_limb] = null - if("Amputated") - organ_data[limb] = "amputated" - if(second_limb) - organ_data[second_limb] = "amputated" - if("Prothesis") - organ_data[limb] = "cyborg" - if(second_limb) - organ_data[second_limb] = "cyborg" - if(third_limb && organ_data[third_limb] == "amputated") - organ_data[third_limb] = null + customize_limbs(user,species!="Machine") + if("organs") var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes") if(!organ_name) return @@ -1597,26 +1493,42 @@ datum/preferences character.skills = skills character.used_skillpoints = used_skillpoints + + var/list/covering_name_to_type = get_limb_covering_list() + // provide default covering for shells + if (species=="Machine") // provide default covering for shells + for (var/datum/organ/external/organ in character.organs) + if (organ) // gotta make sure we're getting an actual organ here + if (covering_type) + var/covering_path = covering_name_to_type[covering_type] + world << "Skin [r_skin],[g_skin],b_skin]" + organ.covering = new covering_path(organ,r_skin,g_skin,b_skin) + organ.covering.limb_datum=organ + + // Destroy/cyborgize organs - for(var/name in organ_data) var/datum/organ/external/O = character.organs_by_name[name] var/datum/organ/internal/I = character.internal_organs_by_name[name] var/status = organ_data[name] - if(status == "amputated") O.amputated = 1 O.status |= ORGAN_DESTROYED O.destspawn = 1 - if(status == "cyborg") - O.status |= ORGAN_ROBOT if(status == "assisted") I.mechassist() - else if(status == "mechanical") + if(status == "mechanical") I.mechanize() - - else continue + var/list/status_as_list=status + if (istype(status_as_list)) // we got a robot here + world << "We setting this junk" + O.status |= ORGAN_ROBOT + O.covering = null // wipe any old covering we might have + if (status_as_list[1]!="None") + var/covering_path = covering_name_to_type[status_as_list[1]] + O.covering = new covering_path(O,status_as_list[2],status_as_list[3],status_as_list[4]) + O.covering.limb_datum=O if(underwear > underwear_m.len || underwear < 1) underwear = 0 //I'm sure this is 100% unnecessary, but I'm paranoid... sue me. //HAH NOW NO MORE MAGIC CLONING UNDIES @@ -1659,3 +1571,104 @@ datum/preferences /datum/preferences/proc/close_load_dialog(mob/user) user << browse(null, "window=saves") + + +/datum/preferences/proc/get_hair_species() + // this is incredibly snowflakey but I don't see an alternative + if (!species=="Machine") + return species + var/head_coat=covering_type // we get the base coating + if (organ_data["Head"]) // if we're customizing the head we should get their coating + head_coat=organ_data["Head"][0] + if (!head_coat) + return + var/list/refs=get_limb_covering_references() + for(var/skin_type in refs) + var/datum/synthetic_limb_cover/temp=refs[skin_type] + if (temp.icon_key_type==head_coat) + return temp.hair_species + + +/datum/preferences/proc/custom_robot_limb(mob/user,) + var/covering_name = input(user, "What kind of covering do you want?") as null|anything in get_limb_covering_names() + if (!covering_name) + return + if (covering_name=="None") // don't want no colour + return list(covering_name,128,128,128) + var/new_colour = input(user, "Pick the colour for your limb:", "Character Preference") as color|null + if(!new_colour) + return + return list(covering_name,hex2num(copytext(new_colour, 2, 4)),hex2num(copytext(new_colour, 4, 6)),hex2num(copytext(new_colour, 6, 8))) + + +var/list/limb_name_to_descriptive_names +/datum/preferences/proc/get_limb_name_to_descriptive_name() + if (isnull(limb_name_to_descriptive_names)) + limb_name_to_descriptive_names=list() + for(var/organ_type in typesof(/datum/organ/external)-/datum/organ/external) + var/datum/organ/external/temp = new organ_type() + limb_name_to_descriptive_names[temp.name]=temp.display_name + del(temp) + return limb_name_to_descriptive_names + + +var/list/limb_connection_data +/datum/preferences/proc/get_limb_connection_data() + if (isnull(limb_connection_data)) + limb_connection_data = list() + limb_connection_data["Left Leg"]=list("l_leg","l_foot",null) + limb_connection_data["Right Leg"]=list("r_leg","r_foot",null) + limb_connection_data["Left Arm"]=list("l_arm","l_hand",null) + limb_connection_data["Right Arm"]=list("r_arm","r_hand",null) + limb_connection_data["Left Foot"]=list("l_foot",null,"l_leg") + limb_connection_data["Right Foot"]=list("r_foot",null,"r_leg") + limb_connection_data["Left Hand"]=list("l_hand",null,"l_arm") + limb_connection_data["Right Hand"]=list("r_hand",null,"r_arm") + limb_connection_data["Chest"]=list("chest",null,null) + limb_connection_data["Groin"]=list("groin",null,null) + limb_connection_data["Head"]=list("head",null,null) + return limb_connection_data + + +/datum/preferences/proc/pick_organ_to_customize(mob/user,var/is_organic_species) + var/list/valid_targets = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand") + if (!is_organic_species) + valid_targets.Add(list("Head","Chest","Groin")) + var/limb_name = input(user, "Which limb do you want to change?") as null|anything in valid_targets + if(!limb_name) // you have picked nothing + return + var/list/limb_info=get_limb_connection_data() + return limb_info[limb_name] + + +/datum/preferences/proc/customize_limbs(mob/user,var/is_organic_species) + var/list/limb_info = pick_organ_to_customize(user,is_organic_species) + world << "We done picked! [limb_info]" + if (!limb_info) + return + var/limb=limb_info[1] + var/limb_child=limb_info[2] + var/limb_parent=limb_info[3] + world << "LIMB STUFF [limb] [limb_child] [limb_parent]" + var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in (is_organic_species ? list("Normal","Amputated","Prosthesis") : list("Normal","Custom")) + if(!new_state) + return // cancel + switch(new_state) + if("Normal") + organ_data[limb] = null + if(limb_parent) + organ_data[limb_parent] = null + if("Amputated") + organ_data[limb] = "amputated" + if(limb_child) + organ_data[limb_child] = "amputated" + if("Prosthesis") + var/list/custom = custom_robot_limb(user) + organ_data[limb] = custom + world << "[organ_data[limb][1]] [organ_data[limb][2]] [organ_data[limb][3]][organ_data[limb][4]]" + if(limb_child) + organ_data[limb_child] = custom + if(limb_parent && organ_data[limb_parent] == "amputated") + organ_data[limb_parent] = null + if("Custom") + organ_data[limb] = custom_robot_limb(user) // robots have no dependencies \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index decf0bf3..a78c9d65 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1659,3 +1659,82 @@ if(eyes && istype(eyes) && !eyes.status & ORGAN_CUT_AWAY) return 1 return 0 + +/mob/living/carbon/human/proc/hair_species_name() + var/datum/organ/external/head/head_organ = get_organ("head") + if (head_organ.covering) + return head_organ.covering.hair_species + return species.name + + +/mob/living/carbon/human/proc/valid_hairstyles_for_this_mob() + return get_valid_hairstyles(gender, hair_species_name()) + + +/mob/living/carbon/human/proc/valid_facialhairstyles_for_this_mob() + return get_valid_facialhairstyles(gender, hair_species_name()) + + +/mob/living/carbon/human/proc/should_we_show_hair() + var/datum/organ/external/head/head_organ = get_organ("head") + if(!head_organ || (head_organ.status & ORGAN_DESTROYED)) + return + if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) + return + return TRUE + +/mob/living/carbon/human/proc/validate_hair() + var/list/hair=valid_hairstyles_for_this_mob() + if (!(h_style in hair)) + h_style=null + var/list/face=valid_facialhairstyles_for_this_mob() + if (!(f_style in face)) + f_style=null + + +/mob/living/carbon/human/proc/hair_icon() + if (h_style) + var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] + var/icon/hair = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") + if(hair_style.do_colouration) + hair.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) + return hair + + +/mob/living/carbon/human/proc/facial_hair_icon() + if (f_style) + var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] + var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") + if(facial_hair_style.do_colouration) + facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) + return facial_s + + +/mob/living/carbon/human/proc/get_eye_icon_state() + var/datum/organ/external/head/head_organ = get_organ("head") + if (head_organ.covering) + return head_organ.covering.eyes_state + return species.eyes + + +/mob/living/carbon/human/proc/eye_icon() + var/icon/result_icon = new/icon('icons/mob/human_face.dmi', get_eye_icon_state()) + result_icon.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) + return result_icon + + +/mob/living/carbon/human/proc/tail_icon_state() + var/datum/organ/external/groin/groin_organ = get_organ("groin") + if (groin_organ.covering) + return groin_organ.covering.tail + if (species.tail) + return species.tail + + +/mob/living/carbon/human/proc/tail_icon() + var/tail_name = tail_icon_state() + if (tail_name) + if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) + var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[tail_name]_s") + tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + return tail_s \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index c313c601..ea550240 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -30,5 +30,5 @@ ..(new_loc, "Diona") /mob/living/carbon/human/machine/New(var/new_loc) - h_style = "blue IPC screen" + h_style = "Bald" ..(new_loc, "Machine") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 8c52146b..38cd24aa 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -234,6 +234,49 @@ proc/get_damage_icon_part(damage_state, body_part) overlays_standing[DAMAGE_LAYER] = standing_image if(update_icons) update_icons() + + +/mob/living/carbon/human/proc/get_skin_tone_key() + if (species.flags & HAS_SKIN_COLOR) + return "[r_skin],[g_skin],[b_skin]" + if(species.flags & HAS_SKIN_TONE) + return "[s_tone]" + return "" + + +/mob/living/carbon/human/proc/get_icon_key(var/list/mutations=list()) + if (!mutations) + mutations=get_visible_mutations() + var/icon_key = "[species.race_key][(gender == FEMALE ? "f" : "m")][get_skin_tone_key()]" + for(var/datum/organ/external/part in organs) // get the part icon keys + icon_key = "[icon_key][part.get_icon_key()]" + return "[icon_key][mutations["husk"]][mutations["fat"]][mutations["hulk"]][mutations["skeleton"]]" + + +/mob/living/carbon/human/proc/get_visible_mutations() + return list("husk"=(HUSK in src.mutations), + "hulk"=(HULK in src.mutations), + "skeleton"=(SKELETON in src.mutations), + "fat"=(FAT in src.mutations)) + + +/mob/living/carbon/human/proc/skin_colour_info(var/list/mutations=list()) + if (!mutations) + mutations=get_visible_mutations() + var/icon_blend=ICON_ADD + var/colour=rgb(127,127,127) + var/good=FALSE + if (species.flags & HAS_SKIN_COLOR) + colour=rgb(r_skin,g_skin,b_skin) + good=TRUE + if(!mutations["husk"] && !mutations["hulk"]) // if we have regular skin + if(species.flags & HAS_SKIN_TONE) + icon_blend=(s_tone >= 0 ? ICON_ADD : ICON_SUBTRACT) + var/res=(s_tone >= 0 ? s_tone : -s_tone) + colour=rgb(res,res,res) + good=TRUE + return list("rgb"=colour,"mode"=icon_blend,"blend"=good) + //BASE MOB SPRITE /mob/living/carbon/human/proc/update_body(var/update_icons=1) @@ -242,13 +285,8 @@ proc/get_damage_icon_part(damage_state, body_part) var/hulk_color_mod = rgb(48,224,40) var/necrosis_color_mod = rgb(10,50,0) - var/husk = (HUSK in src.mutations) - var/fat = (FAT in src.mutations) - var/hulk = (HULK in src.mutations) - var/skeleton = (SKELETON in src.mutations) - + var/list/mutations = get_visible_mutations() var/g = (gender == FEMALE ? "f" : "m") - var/has_head = 0 //CACHING: Generate an index key from visible bodyparts. //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. @@ -259,22 +297,9 @@ proc/get_damage_icon_part(damage_state, body_part) stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") - var/icon_key = "[species.race_key][g][s_tone]" - for(var/datum/organ/external/part in organs) - if(istype(part,/datum/organ/external/head) && !(part.status & ORGAN_DESTROYED)) - has_head = 1 - - if(part.status & ORGAN_DESTROYED) - icon_key = "[icon_key]0" - else if(part.status & ORGAN_ROBOT) - icon_key = "[icon_key]2" - else if(part.status & ORGAN_DEAD) - icon_key = "[icon_key]3" - else - icon_key = "[icon_key]1" - - icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0][s_tone]" + // GENERATE THE ICON KEY + var/icon_key = get_icon_key(mutations) var/icon/base_icon if(human_icon_cache[icon_key]) @@ -287,14 +312,18 @@ proc/get_damage_icon_part(damage_state, body_part) //BEGIN CACHED ICON GENERATION. - // Why don't we just make skeletons/shadows/golems a species? ~Z - var/race_icon = (skeleton ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase) - var/deform_icon = (skeleton ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase) + // Why don't we just make mutations["skeleton"]s/shadows/golems a species? ~Z + var/race_icon = (mutations["skeleton"] ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase) + var/deform_icon = (mutations["skeleton"] ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase) + var/list/skin_info = skin_colour_info(mutations) // get the skin tone info + //Robotic limbs are handled in get_icon() so all we worry about are missing or dead limbs. //No icon stored, so we need to start with a basic one. var/datum/organ/external/chest = get_organ("chest") - base_icon = chest.get_icon(race_icon,deform_icon,g) + base_icon = chest.get_icon(race_icon,deform_icon,skin_info) + + if(chest.status & ORGAN_DEAD) base_icon.ColorTone(necrosis_color_mod) @@ -307,10 +336,7 @@ proc/get_damage_icon_part(damage_state, body_part) if(part.status & ORGAN_DESTROYED) continue - if (istype(part, /datum/organ/external/groin) || istype(part, /datum/organ/external/head)) - temp = part.get_icon(race_icon,deform_icon,g) - else - temp = part.get_icon(race_icon,deform_icon) + temp = part.get_icon(race_icon,deform_icon,skin_info) // synthetics are handled here if(part.status & ORGAN_DEAD) temp.ColorTone(necrosis_color_mod) @@ -345,48 +371,33 @@ proc/get_damage_icon_part(damage_state, body_part) base_icon.Blend(temp, ICON_OVERLAY) - if(!skeleton) - if(husk) + if(!mutations["skeleton"]) + if(mutations["husk"]) base_icon.ColorTone(husk_color_mod) - else if(hulk) + else if(mutations["hulk"]) var/list/tone = ReadRGB(hulk_color_mod) base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) - //Handle husk overlay. - if(husk) + //Handle mutations["husk"] overlay. + if(mutations["husk"]) var/icon/mask = new(base_icon) var/icon/husk_over = new(race_icon,"overlay_husk") mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) husk_over.Blend(mask, ICON_ADD) base_icon.Blend(husk_over, ICON_OVERLAY) - - //Skin tone. - if(!husk && !hulk) - if(species.flags & HAS_SKIN_TONE) - if(s_tone >= 0) - base_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) - else - base_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - human_icon_cache[icon_key] = base_icon //log_debug("Generated new cached mob icon ([icon_key] \icon[human_icon_cache[icon_key]]) for [src]. [human_icon_cache.len] cached mob icons.") //END CACHED ICON GENERATION. - stand_icon.Blend(base_icon,ICON_OVERLAY) - //Skin colour. Not in cache because highly variable (and relatively benign). - if (species.flags & HAS_SKIN_COLOR) - stand_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) - - if(has_head) + var/datum/organ/external/head = get_organ("head") // check if we have a head + if(head ? (head.status & ORGAN_DESTROYED ? 0 : 1) : 0) // we need a head and that head needs to not be destroyed //Eyes - if(!skeleton) - var/icon/eyes = new/icon('icons/mob/human_face.dmi', species.eyes) - eyes.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - stand_icon.Blend(eyes, ICON_OVERLAY) + if(!mutations["skeleton"]) + stand_icon.Blend(eye_icon(), ICON_OVERLAY) //Mouth (lipstick!) if(lip_style && (species && species.flags & HAS_LIPS)) //skeletons are allowed to wear lipstick no matter what you think, agouri. @@ -394,7 +405,7 @@ proc/get_damage_icon_part(damage_state, body_part) //Underwear if(underwear >0 && underwear < 12 && species.flags & HAS_UNDERWEAR) - if(!fat && !skeleton) + if(!mutations["fat"] && !mutations["skeleton"]) stand_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY) if(undershirt>0 && undershirt <= undershirt_t.len && species.flags & HAS_UNDERWEAR) @@ -407,47 +418,27 @@ proc/get_damage_icon_part(damage_state, body_part) update_tail_showing(0) +/mob/living/carbon/human/proc/create_hair_icon() + if(!should_we_show_hair()) // if we're missing our head or we're wearing a mask, no hair + return + validate_hair() // make sure our hair is valid + var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") //base icons + var/icon/facial_s = facial_hair_icon() + if (facial_s) + face_standing.Blend(facial_s, ICON_OVERLAY) + var/icon/hair_s = hair_icon() + if (hair_s) + face_standing.Blend(hair_s, ICON_OVERLAY) + overlays_standing[HAIR_LAYER] = image(face_standing) //HAIR OVERLAY /mob/living/carbon/human/proc/update_hair(var/update_icons=1) - //Reset our hair - overlays_standing[HAIR_LAYER] = null - - var/datum/organ/external/head/head_organ = get_organ("head") - if( !head_organ || (head_organ.status & ORGAN_DESTROYED) ) - if(update_icons) update_icons() - return - - //masks and helmets can obscure our hair. - if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) - if(update_icons) update_icons() - return - - //base icons - var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") - - if(f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style && facial_hair_style.species_allowed && src.species.name in facial_hair_style.species_allowed) - var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(facial_hair_style.do_colouration) - facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) - - face_standing.Blend(facial_s, ICON_OVERLAY) - - if(h_style && !(head && (head.flags & BLOCKHEADHAIR))) - var/datum/sprite_accessory/hair_style = hair_styles_list[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]_s") - if(hair_style.do_colouration) - hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - - face_standing.Blend(hair_s, ICON_OVERLAY) - - overlays_standing[HAIR_LAYER] = image(face_standing) - - if(update_icons) update_icons() + overlays_standing[HAIR_LAYER] = null //Reset our hair + create_hair_icon() // do the hair blending + if(update_icons) + update_icons() + /mob/living/carbon/human/update_mutations(var/update_icons=1) var/fat @@ -988,16 +979,12 @@ proc/get_damage_icon_part(damage_state, body_part) overlays_standing[L_HAND_LAYER] = null if(update_icons) update_icons() + /mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1) overlays_standing[TAIL_LAYER] = null - - if(species.tail) - if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) - var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s") - tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) - - overlays_standing[TAIL_LAYER] = image(tail_s) - + var/icon/tail_s = tail_icon() + if (tail_s) + overlays_standing[TAIL_LAYER] = image(tail_s) if(update_icons) update_icons() diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 8837307a..b5043fd2 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -105,6 +105,11 @@ //H.jitteriness = 0 H.update_hair() return + + +/datum/species/proc/get_eye_icon() + return eyes + /datum/species/human name = "Human" @@ -328,6 +333,9 @@ blood_color = "#1F181F" flesh_color = "#575757" + + var/brain_type = 'posibrain' // default is robots + //Species unarmed attacks diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index fe20acd3..3375be3a 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -43,6 +43,10 @@ // how often wounds should be updated, a higher number means less often var/wound_update_accuracy = 1 + + var/datum/synthetic_limb_cover/covering = null // paint or synth skin + + var/gendered = FALSE /datum/organ/external/New(var/datum/organ/external/P) @@ -804,14 +808,52 @@ Note that amputating the affected organ does in fact remove the infection from t return 1 return 0 -/datum/organ/external/get_icon(var/icon/race_icon, var/icon/deform_icon,gender="") - if (status & ORGAN_ROBOT && !(owner.species && owner.species.flags & IS_SYNTHETIC)) - return new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]") + +/datum/organ/external/proc/get_icon_key() + if (status & ORGAN_DESTROYED) + return "L" // l for lost + if (status & ORGAN_DEAD) + return "D" // d for dead + if (status & ORGAN_ROBOT) + return get_synthetic_icon_key() + return "G" // regular old limb - if (status & ORGAN_MUTATED) - return new /icon(deform_icon, "[icon_name][gender ? "_[gender]" : ""]") - return new /icon(race_icon, "[icon_name][gender ? "_[gender]" : ""]") +/datum/organ/external/proc/valid_covering() + if (status & ORGAN_ROBOT) + if (covering) + return (covering.coverage) // is our covering working? + return FALSE // if we have no covering at all + return TRUE // squishies always have skin + + +/datum/organ/external/proc/get_synthetic_icon_key() + if (!covering) // no covering at all, this should not happen + return "R" // regular old robot + return covering.get_icon_key() + + +/datum/organ/external/proc/get_synthetic_icon() + if (!covering) // no covering at all, this should not happen + return new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][get_gender_string()]") + return covering.get_icon() + + +/datum/organ/external/proc/get_gender_string() + if (!gendered) // most organs aren't gender specific + return "" + if (owner) // if we're a gender specific organ with an owner + return (owner.gender == FEMALE ? "_f" : "_m") + return "_f" + + +/datum/organ/external/get_icon(var/icon/race_icon, var/icon/deform_icon, var/list/skin_info) + if (status & ORGAN_ROBOT) + return get_synthetic_icon() + var/icon/result = new /icon((status & ORGAN_MUTATED) ? deform_icon : race_icon, "[icon_name][get_gender_string()]") + if (skin_info["blend"]) + result.Blend(skin_info["rgb"],skin_info["mode"]) + return result /datum/organ/external/proc/is_usable() @@ -867,6 +909,7 @@ Note that amputating the affected organ does in fact remove the infection from t body_part = UPPER_TORSO vital = 1 encased = "ribcage" + gendered = TRUE /datum/organ/external/groin name = "groin" @@ -876,6 +919,7 @@ Note that amputating the affected organ does in fact remove the infection from t min_broken_damage = 30 body_part = LOWER_TORSO vital = 1 + gendered = TRUE /datum/organ/external/l_arm name = "l_arm" @@ -971,16 +1015,7 @@ Note that amputating the affected organ does in fact remove the infection from t var/disfigured = 0 vital = 1 encased = "skull" - -/datum/organ/external/head/get_icon(var/icon/race_icon, var/icon/deform_icon) - if (!owner) - return ..() - var/g = "m" - if(owner.gender == FEMALE) g = "f" - if (status & ORGAN_MUTATED) - . = new /icon(deform_icon, "[icon_name]_[g]") - else - . = new /icon(race_icon, "[icon_name]_[g]") + gendered = TRUE /datum/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list()) ..(brute, burn, sharp, edge, used_weapon, forbidden_limbs) @@ -1012,6 +1047,7 @@ obj/item/weapon/organ icon = 'icons/mob/human_races/r_human.dmi' var/op_stage = 0 var/list/organs_internal = list() + obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) ..(loc) @@ -1039,24 +1075,13 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) base = icon(H.species.icobase) else base = icon('icons/mob/human_races/r_human.dmi') - - if(base) - //Changing limb's skin tone to match owner - if(!H.species || H.species.flags & HAS_SKIN_TONE) - if (H.s_tone >= 0) - base.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD) - else - base.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT) - - if(base) - //Changing limb's skin color to match owner - if(!H.species || H.species.flags & HAS_SKIN_COLOR) - base.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), ICON_ADD) - + if(base) // handle skin colours + var/list/skin_info = H.skin_colour_info() // get the skin tone info + base.Blend(skin_info["rgb"],skin_info["mode"]) icon = base set_dir(SOUTH) src.transform = turn(src.transform, rand(70,130)) - + /**************************************************** EXTERNAL ORGAN ITEMS DEFINES diff --git a/code/modules/organs/synth_skin.dm b/code/modules/organs/synth_skin.dm new file mode 100644 index 00000000..ece7ca76 --- /dev/null +++ b/code/modules/organs/synth_skin.dm @@ -0,0 +1,127 @@ +/* + +We need to mix blending into limb object code, this will slow shit down a lot. + +*/ + +#define SYNTHETIC_COVERING_WORKING 1 +#define SYNTHETIC_COVERING_DAMAGED 0 + +datum/synthetic_limb_cover + var/coverage // + var/colour_r = 128 // the colour of the limb + var/colour_g = 128// the colour of the limb + var/colour_b = 128// the colour of the limb + var/datum/organ/external/limb_datum // the limb in question + var/obj/item/robot_parts/limb_item // also the limb in question (if dismembered) + var/main_icon = 'icons/mob/human_races/robotic.dmi' + var/damage_icon = 'icons/mob/human_races/robotic.dmi' + var/icon_key_type="BAD" + var/hair_species=null + var/eyes_state = "blank_eyes" + var/tail = null + + +datum/synthetic_limb_cover/New( var/datum/organ/external/datum_target=null,var/input_colour_r=null,var/input_colour_g=null,var/input_colour_b=null) + world << "Making cover : [src]" + limb_datum=datum_target + coverage=SYNTHETIC_COVERING_WORKING // start working + if(input_colour_r) + colour_r=input_colour_r + if(input_colour_g) + colour_g=input_colour_g + if(input_colour_b) + colour_b=input_colour_b + + world << "COLOUR is [colour_r]-[colour_g]-[colour_b]" + + +datum/synthetic_limb_cover/proc/get_icon() // default mechanical limbs return robo versions + var/icon/temp = new /icon((coverage ? main_icon : damage_icon), "[limb_datum.icon_name][limb_datum.get_gender_string()]") // only add a gender if it's necessary + var/icon/result = icon(temp) + result.GrayScale() + result.Blend(rgb(colour_r,colour_g,colour_b), ICON_ADD) + return result + + +datum/synthetic_limb_cover/proc/repair() + coverage = SYNTHETIC_COVERING_WORKING + + +datum/synthetic_limb_cover/proc/damage() + coverage = SYNTHETIC_COVERING_DAMAGED + + +datum/synthetic_limb_cover/proc/recolour(var/paint_colour_r, var/paint_colour_g, var/paint_colour_b, var/update=FALSE) + colour_r=paint_colour_r + colour_g=paint_colour_g + colour_b=paint_colour_b + if (update) + if (limb_datum) + if (limb_datum.owner) + limb_datum.owner.update_body() + + +datum/synthetic_limb_cover/proc/get_icon_key() // this is going to wreck the icon cache but to do custom colour per limb this is necessary + return "SYNTH:[icon_key_type]:[colour_r][colour_g][colour_b]" + + +datum/synthetic_limb_cover/paint + main_icon = 'icons/mob/human_races/r_machine.dmi' + icon_key_type = "Paint" + hair_species = "Machine" + + +datum/synthetic_limb_cover/skin + main_icon = 'icons/mob/human_races/r_human_grey.dmi' + icon_key_type = "Skin" + hair_species = "Human" + eyes_state="eyes_s" + + +datum/synthetic_limb_cover/fur + main_icon = 'icons/mob/human_races/r_tajaran.dmi' + icon_key_type = "Fur" + hair_species = "Tajaran" + eyes_state="eyes_s" + tail = "tajtail" + + +datum/synthetic_limb_cover/scales + main_icon = 'icons/mob/human_races/r_lizard.dmi' + icon_key_type = "Scales" + hair_species = "Unathi" + eyes_state="eyes_s" + tail = "sogtail" + + +var/list/limb_covering_references +/proc/get_limb_covering_references() + if (isnull(limb_covering_references)) + limb_covering_references = list() + for(var/skin_type in typesof(/datum/synthetic_limb_cover)-/datum/synthetic_limb_cover) + var/datum/synthetic_limb_cover/temp_cover = new skin_type() + limb_covering_references[skin_type]=temp_cover + return limb_covering_references + + +var/list/limb_covering_names +/proc/get_limb_covering_names() + if (isnull(limb_covering_names)) + limb_covering_names=list("None") + var/list/refs=get_limb_covering_references() + for(var/skin_type in refs) + var/datum/synthetic_limb_cover/temp=refs[skin_type] + limb_covering_names.Add(temp.icon_key_type) + return limb_covering_names + + +var/list/limb_covering_list +/proc/get_limb_covering_list() + if(isnull(limb_covering_list)) + limb_covering_list=list("None"=null) + var/list/refs=get_limb_covering_references() + for(var/skin_type in refs) + var/datum/synthetic_limb_cover/temp=refs[skin_type] + limb_covering_list[temp.icon_key_type]=skin_type + return limb_covering_list \ No newline at end of file diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 0f28d76aca1aee24ebddef4208ad1a7a926a247c..1f65c43f51399f33850821ce21dedacf493f0bc9 100644 GIT binary patch delta 31588 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%0A+P|HW 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 delta 41543 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