diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 72549c9ee1..be836248a6 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -323,3 +323,5 @@ proc/TextPreview(var/string,var/len=40) if(48 to 57) //Numbers return 1 return 0 + +#define gender2text(gender) capitalize(gender) \ No newline at end of file diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index efd55d37ec..c9dfe4fc02 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -1,7 +1,6 @@ /datum/category_item/player_setup_item/general/basic name = "Basic" sort_order = 1 - var/list/valid_player_genders = list(MALE, FEMALE, NEUTER, PLURAL) /datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S) S["real_name"] >> pref.real_name @@ -23,7 +22,7 @@ if(!pref.species) pref.species = "Human" var/datum/species/S = all_species[pref.species ? pref.species : "Human"] pref.age = sanitize_integer(pref.age, S.min_age, S.max_age, initial(pref.age)) - pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders)) + pref.gender = sanitize_inlist(pref.gender, S.genders, pick(S.genders)) pref.real_name = sanitize_name(pref.real_name, pref.species) if(!pref.real_name) pref.real_name = random_name(pref.gender, pref.species) @@ -36,13 +35,14 @@ . += "(Random Name) " . += "(Always Random Name: [pref.be_random_name ? "Yes" : "No"])" . += "
" - . += "Gender: [capitalize(lowertext(pref.gender))]
" + . += "Gender: [gender2text(pref.gender)]
" . += "Age: [pref.age]
" . += "Spawn Point: [pref.spawnpoint]
" if(config.allow_Metadata) . += "OOC Notes: Edit
" /datum/category_item/player_setup_item/general/basic/OnTopic(var/href,var/list/href_list, var/mob/user) + var/datum/species/S = all_species[pref.species] if(href_list["rename"]) var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null if (!isnull(raw_name) && CanUseTopic(user)) @@ -63,12 +63,13 @@ return TOPIC_REFRESH else if(href_list["gender"]) - pref.gender = next_in_list(pref.gender, valid_player_genders) + var/new_gender = input(user, "Choose your character's gender:", "Character Preference", pref.gender) as null|anything in S.genders + if(new_gender && CanUseTopic(user)) + pref.gender = new_gender return TOPIC_REFRESH else if(href_list["age"]) if(!pref.species) pref.species = "Human" - var/datum/species/S = all_species[pref.species] var/new_age = input(user, "Choose your character's age:\n([S.min_age]-[S.max_age])", "Character Preference", pref.age) as num|null if(new_age && CanUseTopic(user)) pref.age = max(min(round(text2num(new_age)), S.max_age), S.min_age) @@ -76,8 +77,8 @@ else if(href_list["spawnpoint"]) var/list/spawnkeys = list() - for(var/S in spawntypes) - spawnkeys += S + for(var/spawntype in spawntypes) + spawnkeys += spawntype var/choice = input(user, "Where would you like to spawn when late-joining?") as null|anything in spawnkeys if(!choice || !spawntypes[choice] || !CanUseTopic(user)) return TOPIC_NOACTION pref.spawnpoint = choice diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index db9fa5227d..4087d1468d 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -220,6 +220,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/prev_species = pref.species pref.species = href_list["set_species"] if(prev_species != pref.species) + mob_species = all_species[pref.species] + if(!(pref.gender in mob_species.genders)) + pref.gender = mob_species.genders[1] + + //grab one of the valid hair styles for the newly chosen species var/list/valid_hairstyles = list() for(var/hairstyle in hair_styles_list) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 74d8b54a93..0c11ada074 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1104,6 +1104,9 @@ if(species.holder_type) holder_type = species.holder_type + if(!(gender in species.genders)) + gender = species.genders[1] + icon_state = lowertext(species.name) species.create_organs(src) diff --git a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm index 8820ffaf5b..ba7d4d1d0a 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm @@ -21,6 +21,8 @@ flags = NO_SCAN | NO_SLIP | NO_POISON | NO_MINOR_CUT spawn_flags = IS_RESTRICTED + genders = list(NEUTER) + /datum/species/shadow/handle_death(var/mob/living/carbon/human/H) spawn(1) new /obj/effect/decal/cleanable/ash(H.loc) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e8a8304510..fa7116c822 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -147,6 +147,8 @@ BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) ) + var/list/genders = list(MALE, FEMALE, PLURAL) + // Bump vars var/bump_flag = HUMAN // What are we considered to be when bumped? var/push_flags = ~HEAVY // What can we push? diff --git a/code/modules/mob/living/carbon/human/species/station/golem.dm b/code/modules/mob/living/carbon/human/species/station/golem.dm index 23970c61b2..83d5f6f8f0 100644 --- a/code/modules/mob/living/carbon/human/species/station/golem.dm +++ b/code/modules/mob/living/carbon/human/species/station/golem.dm @@ -23,6 +23,8 @@ death_message = "becomes completely motionless..." + genders = list(NEUTER) + /datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H) if(H.mind) H.mind.assigned_role = "Golem" diff --git a/code/modules/mob/living/carbon/human/species/station/slime.dm b/code/modules/mob/living/carbon/human/species/station/slime.dm index f2277f9921..769b1a2f35 100644 --- a/code/modules/mob/living/carbon/human/species/station/slime.dm +++ b/code/modules/mob/living/carbon/human/species/station/slime.dm @@ -44,6 +44,8 @@ BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable) ) + genders = list(NEUTER) + /datum/species/slime/handle_death(var/mob/living/carbon/human/H) spawn(1) if(H) diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index a00bfc86d7..07a623887b 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -253,6 +253,7 @@ reagent_tag = IS_DIONA + genders = list(PLURAL) /datum/species/diona/can_understand(var/mob/other) var/mob/living/carbon/alien/diona/D = other if(istype(D)) diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index 87bfc76176..878a85ab55 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -27,7 +27,7 @@ cut_and_generate_data() return 1 if(href_list["gender"]) - if(can_change(APPEARANCE_GENDER)) + if(can_change(APPEARANCE_GENDER) && (href_list["gender"] in owner.species.genders)) if(owner.change_gender(href_list["gender"])) cut_and_generate_data() return 1 @@ -108,6 +108,12 @@ data["species"] = species data["change_gender"] = can_change(APPEARANCE_GENDER) + if(data["change_gender"]) + var/genders[0] + for(var/gender in owner.species.genders) + genders[++genders.len] = list("gender_name" = gender2text(gender), "gender_key" = gender) + data["genders"] = genders + data["change_skin_tone"] = can_change_skin_tone() data["change_skin_color"] = can_change_skin_color() data["change_eye_color"] = can_change(APPEARANCE_EYE_COLOR) diff --git a/nano/templates/appearance_changer.tmpl b/nano/templates/appearance_changer.tmpl index bb283f245b..3260f7f83f 100644 --- a/nano/templates/appearance_changer.tmpl +++ b/nano/templates/appearance_changer.tmpl @@ -17,8 +17,9 @@ Gender:
- {{:helper.link('Male', null, { 'gender' : 'male'}, null, data.gender == 'male' ? 'selected' : null)}} - {{:helper.link('Female', null, { 'gender' : 'female'}, null, data.gender == 'female' ? 'selected' : null)}} + {{for data.genders}} + {{:helper.link(value.gender_name, null, { 'gender' : value.gender_key}, null, data.gender == value.gender_key ? 'selected' : null)}} + {{/for}}
{{/if}}