diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 3032d636d19..a5e0081e723 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -37,16 +37,20 @@ 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) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles. - if((H.species.flags & ALL_RPARTS) && robohead.is_monitor) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. - to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") - return + if(H.species.flags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + if(robohead.is_monitor) + to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") + return + continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles. species_facial_hair += i else - if((H.species.flags & ALL_RPARTS) && !robohead.is_monitor && ("Human" in tmp_facial.species_allowed)) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. - species_facial_hair += i - else //Otherwise, they won't be getting any hairstyles. - to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") - return + if(H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + if(!robohead.is_monitor) + if("Human" in tmp_facial.species_allowed) + species_facial_hair += i + else //Otherwise, they won't be getting any hairstyles. + to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") + return else species_facial_hair = facial_hair_styles_list var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair @@ -56,16 +60,20 @@ 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) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles. - if((H.species.flags & ALL_RPARTS) && robohead.is_monitor) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. - to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") - return + if(H.species.flags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + if(robohead.is_monitor) + to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") + return + continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles. species_hair += i else - if((H.species.flags & ALL_RPARTS) && !robohead.is_monitor && ("Human" in tmp_hair.species_allowed)) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. - species_facial_hair += i - else //Otherwise, they won't be getting any hairstyles. - to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") - return + if(H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + if(!robohead.is_monitor) + if("Human" in tmp_hair.species_allowed) + species_hair += i + else //Otherwise, they won't be getting any hairstyles. + to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") + return else species_hair = hair_styles_list var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 767fa014910..546a7e5abf4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1496,23 +1496,35 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts organ_data[second_limb] = "amputated" rlimb_data[second_limb] = null if("Prosthesis") - var/choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in chargen_robolimbs + var/choice var/subchoice var/datum/robolimb/R = new() var/in_model + var/robolimb_companies = list() + for(var/limb_type in typesof(/datum/robolimb)) //This loop populates a list of companies that offer the limb the user selected previously as one of their cybernetic products. + R = new limb_type() + if(!R.unavailable_at_chargen) + if(limb in R.parts) //Ensures users can only choose companies that offer the parts they want. + robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. + R = new() //Re-initialize R. + + choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in robolimb_companies //Choose from a list of companies that offer the part the user wants. if(!choice) return R.company = choice R = all_robolimbs[R.company] - if(R.has_subtypes == 1) + if(R.has_subtypes == 1) //If the company the user selected provides more than just one base model, lets handle it. var/list/robolimb_models = list() - for(var/limb_type in typesof(R)) + for(var/limb_type in typesof(R)) //Handling the different models of parts that manufacturers can provide. var/datum/robolimb/L = new limb_type() - if(limb in L.parts) + if(limb in L.parts) //Make sure that only models that provide the parts the user needs populate the list. robolimb_models[L.company] = L - if(second_limb in L.parts) + if(robolimb_models.len == 1) //If there's only one model available in the list, autoselect it to avoid having to bother the user with a dialog that provides only one option. + subchoice = L.company //If there ends up being more than one model populating the list, subchoice will be overwritten later anyway, so this isn't a problem. + if(second_limb in L.parts) //If the child limb of the limb the user selected is also present in the model's parts list, state it's been found so the second limb can be set later. in_model = 1 - subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models + if(robolimb_models.len > 1) //If there's more than one model in the list that can provide the part the user wants, let them choose. + subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models if(subchoice) choice = subchoice if(limb == "head") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0af960d9538..f2f533da59b 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1614,7 +1614,7 @@ var/list/hair = list() for(var/i in hair_styles_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i] - if(species.name in tmp_hair.species_allowed) + if((species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use. hair += i var/new_style = input(src, "Select a monitor display", "Monitor Display", h_style) as null|anything in hair diff --git a/code/modules/surgery/organs/robolimbs.dm b/code/modules/surgery/organs/robolimbs.dm index f7a450d77f6..0229ee80cae 100644 --- a/code/modules/surgery/organs/robolimbs.dm +++ b/code/modules/surgery/organs/robolimbs.dm @@ -106,11 +106,13 @@ var/global/datum/robolimb/basic_robolimb /datum/robolimb/xion/alt1 company = "Xion Manufacturing Group alt." icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi' + parts = list("head") has_subtypes = null /datum/robolimb/xion/monitor company = "Xion Manufacturing Group mtr." icon = 'icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi' + parts = list("head") is_monitor = 1 has_subtypes = null diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 215499099f4..f0e351b1767 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ