Convert gender and pronoun from bay to TG (#19170)

* Convert gender and pronoun from pay to TG

* Remove HERM from biological gender init_possible_values because it won't work

* fix runtime error

---------

Co-authored-by: ShadowLarkens <shadowlarkens@gmail.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
Aura Dusklight
2026-02-25 00:00:04 +01:00
committed by GitHub
co-authored by ShadowLarkens Kashargul
parent 3254a47ca7
commit 0964962220
13 changed files with 107 additions and 37 deletions
@@ -0,0 +1,73 @@
// Gender/Pronoun preferences for character creation
// Handles biological sex and identifying gender (pronouns)
/// Abstract gender preference type that provides species-aware validation
/datum/preference/choiced/gender
abstract_type = /datum/preference/choiced/gender
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
can_randomize = FALSE
var/default_species = SPECIES_HUMAN
/// FBP check
/datum/preference/choiced/gender/proc/is_fbp(datum/preferences/preferences)
if(!preferences?.organ_data)
return FALSE
return preferences.organ_data[BP_TORSO] == "cyborg"
/// Get the list of valid bio genders for the species
/datum/preference/choiced/gender/proc/get_valid_biological_genders(datum/preferences/preferences)
var/datum/species/S
if(preferences?.species)
S = GLOB.all_species[preferences.species]
if(!S)
S = GLOB.all_species[SPECIES_HUMAN]
var/list/possible_genders = S.genders
if(!is_fbp(preferences))
return possible_genders
possible_genders = possible_genders.Copy()
possible_genders |= NEUTER
return possible_genders
/datum/preference/choiced/gender/apply_to_human(mob/living/carbon/human/target, value)
return
/datum/preference/choiced/gender/apply_to_living(mob/living/target, value)
return
/datum/preference/choiced/gender/apply_to_silicon(mob/living/silicon/target, value)
return
/datum/preference/choiced/gender/apply_to_animal(mob/living/simple_mob/target, value)
return
/datum/preference/choiced/gender/biological
savefile_key = "gender"
/datum/preference/choiced/gender/biological/init_possible_values()
// Actual validation happens in pref_deserialize
return list(MALE, FEMALE, PLURAL, NEUTER)
/datum/preference/choiced/gender/biological/create_default_value()
return MALE
/datum/preference/choiced/gender/biological/pref_deserialize(input, datum/preferences/preferences)
var/list/valid_genders = get_valid_biological_genders(preferences)
return sanitize_inlist(input, valid_genders, pick(valid_genders))
/datum/preference/choiced/gender/identifying
savefile_key = "id_gender"
/datum/preference/choiced/gender/identifying/init_possible_values()
return list(MALE, FEMALE, PLURAL, NEUTER, HERM)
/datum/preference/choiced/gender/identifying/create_default_value()
return MALE
/datum/preference/choiced/gender/identifying/pref_deserialize(input, datum/preferences/preferences)
if(input in all_genders_define_list)
return input
var/bio_gender = preferences?.read_preference(/datum/preference/choiced/gender/biological)
if(bio_gender)
return bio_gender
return MALE
@@ -62,12 +62,12 @@
return "Character"
/datum/preference/name/real_name/create_informed_default_value(datum/preferences/preferences)
var/gender = preferences?.identifying_gender || MALE
var/gender = preferences?.read_preference(/datum/preference/choiced/gender/identifying) || MALE
var/species = preferences?.species || SPECIES_HUMAN
return random_name(gender, species)
/datum/preference/name/real_name/create_random_value(datum/preferences/preferences, datum/species/current_species)
var/gender = preferences?.identifying_gender || MALE
var/gender = preferences?.read_preference(/datum/preference/choiced/gender/identifying) || MALE
var/species_name = current_species?.name || SPECIES_HUMAN
return random_name(gender, species_name)