mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-21 11:07:46 +01:00
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:
co-authored by
ShadowLarkens
Kashargul
parent
3254a47ca7
commit
0964962220
@@ -3,46 +3,39 @@
|
||||
#define AUTOHISS_FULL 2
|
||||
|
||||
/datum/preferences
|
||||
var/biological_gender = MALE
|
||||
var/identifying_gender = MALE
|
||||
|
||||
var/vore_egg_type = "Egg" //The egg type they have.
|
||||
var/autohiss = "Full" // VOREStation Add: Whether we have Autohiss on. I'm hijacking the egg panel bc this one has a shitton of unused space.
|
||||
|
||||
/datum/preferences/proc/set_biological_gender(var/gender)
|
||||
biological_gender = gender
|
||||
identifying_gender = gender
|
||||
update_preference_by_type(/datum/preference/choiced/gender/biological, gender)
|
||||
update_preference_by_type(/datum/preference/choiced/gender/identifying, gender)
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic
|
||||
name = "Basic"
|
||||
sort_order = 1
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/load_character(list/save_data)
|
||||
pref.biological_gender = save_data["gender"]
|
||||
pref.identifying_gender = save_data["id_gender"]
|
||||
pref.vore_egg_type = save_data["vore_egg_type"]
|
||||
pref.autohiss = save_data["autohiss"]
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/save_character(list/save_data)
|
||||
save_data["gender"] = pref.biological_gender
|
||||
save_data["id_gender"] = pref.identifying_gender
|
||||
save_data["vore_egg_type"] = pref.vore_egg_type
|
||||
save_data["autohiss"] = pref.autohiss
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/sanitize_character()
|
||||
pref.biological_gender = sanitize_inlist(pref.biological_gender, get_genders(), pick(get_genders()))
|
||||
pref.identifying_gender = (pref.identifying_gender in all_genders_define_list) ? pref.identifying_gender : pref.biological_gender
|
||||
pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, GLOB.global_vore_egg_types, initial(pref.vore_egg_type))
|
||||
pref.autohiss = sanitize_inlist(pref.autohiss, list("Off", "Basic", "Full"), initial(pref.autohiss))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/basic/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
var/char_real_name = pref.read_preference(/datum/preference/name/real_name)
|
||||
var/char_bio_gender = pref.read_preference(/datum/preference/choiced/gender/biological)
|
||||
var/char_id_gender = pref.read_preference(/datum/preference/choiced/gender/identifying)
|
||||
// Re-sanitize name on join.
|
||||
// Fixes being able to swap from FBP to organic before round join to be organic with numbers in name.
|
||||
char_real_name = sanitize_name(char_real_name, pref.species, is_FBP())
|
||||
if(!char_real_name)
|
||||
char_real_name = random_name(pref.identifying_gender, pref.species)
|
||||
char_real_name = random_name(char_id_gender, pref.species)
|
||||
if(CONFIG_GET(flag/humans_need_surnames))
|
||||
var/firstspace = findtext(char_real_name, " ")
|
||||
var/name_length = length(char_real_name)
|
||||
@@ -58,8 +51,8 @@
|
||||
|
||||
character.nickname = pref.read_preference(/datum/preference/name/nickname)
|
||||
|
||||
character.gender = pref.biological_gender
|
||||
character.identifying_gender = pref.identifying_gender
|
||||
character.gender = char_bio_gender
|
||||
character.identifying_gender = char_id_gender
|
||||
|
||||
character.vore_egg_type = pref.vore_egg_type
|
||||
// VOREStation Add
|
||||
@@ -81,8 +74,8 @@
|
||||
data["real_name"] = pref.read_preference(/datum/preference/name/real_name)
|
||||
data["be_random_name"] = pref.read_preference(/datum/preference/toggle/human/name_is_always_random)
|
||||
data["nickname"] = pref.read_preference(/datum/preference/name/nickname)
|
||||
data["biological_sex"] = gender2text(pref.biological_gender)
|
||||
data["identifying_gender"] = gender2text(pref.identifying_gender)
|
||||
data["biological_sex"] = gender2text(pref.read_preference(/datum/preference/choiced/gender/biological))
|
||||
data["identifying_gender"] = gender2text(pref.read_preference(/datum/preference/choiced/gender/identifying))
|
||||
data["age"] = pref.read_preference(/datum/preference/numeric/human/age)
|
||||
data["bday_month"] = pref.read_preference(/datum/preference/numeric/human/bday_month)
|
||||
data["bday_day"] = pref.read_preference(/datum/preference/numeric/human/bday_day)
|
||||
@@ -211,7 +204,7 @@
|
||||
return TOPIC_NOACTION
|
||||
|
||||
if("random_name")
|
||||
pref.update_preference_by_type(/datum/preference/name/real_name, random_name(pref.identifying_gender, pref.species))
|
||||
pref.update_preference_by_type(/datum/preference/name/real_name, random_name(pref.read_preference(/datum/preference/choiced/gender/identifying), pref.species))
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if("always_random_name")
|
||||
@@ -245,7 +238,7 @@
|
||||
if("id_gender")
|
||||
var/new_gender = lowertext(params["gender"])
|
||||
if(new_gender in all_genders_define_list)
|
||||
pref.identifying_gender = new_gender
|
||||
pref.update_preference_by_type(/datum/preference/choiced/gender/identifying, new_gender)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if("age")
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
var/list/wing_styles = pref.get_available_styles(GLOB.wing_styles_list)
|
||||
character.wing_style = wing_styles[pref.wing_style]
|
||||
|
||||
character.set_gender(pref.biological_gender)
|
||||
character.set_gender(pref.read_preference(/datum/preference/choiced/gender/biological))
|
||||
|
||||
character.synthetic = pref.species == "Protean" ? GLOB.all_robolimbs["protean"] : null //Clear the existing var. (unless protean, then switch it to the normal protean limb)
|
||||
var/list/organs_to_edit = list()
|
||||
@@ -271,7 +271,7 @@
|
||||
var/current_name = pref.read_preference(/datum/preference/name/real_name)
|
||||
current_name = sanitize_name(current_name, pref.species)
|
||||
if(!current_name)
|
||||
current_name = random_name(pref.identifying_gender, pref.species)
|
||||
current_name = random_name(pref.read_preference(/datum/preference/choiced/gender/identifying), pref.species)
|
||||
pref.update_preference_by_type(/datum/preference/name/real_name, current_name)
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
@@ -756,7 +756,7 @@
|
||||
var/prev_species = pref.species
|
||||
pref.species = params["species"]
|
||||
if(prev_species != pref.species)
|
||||
if(!(pref.biological_gender in mob_species.genders))
|
||||
if(!(pref.read_preference(/datum/preference/choiced/gender/biological) in mob_species.genders))
|
||||
pref.set_biological_gender(mob_species.genders[1])
|
||||
pref.custom_species = null
|
||||
//grab one of the valid hair styles for the newly chosen species
|
||||
|
||||
@@ -67,7 +67,8 @@
|
||||
|
||||
for(var/datum/category_group/underwear/WRC in GLOB.global_underwear.categories)
|
||||
for(var/datum/category_item/underwear/WRI in WRC.items)
|
||||
if(WRI.is_default(pref.identifying_gender ? pref.identifying_gender : MALE))
|
||||
var/id_gender = pref.read_preference(/datum/preference/choiced/gender/identifying)
|
||||
if(WRI.is_default(id_gender ? id_gender : MALE))
|
||||
pref.all_underwear[WRC.name] = WRI.name
|
||||
break
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
// Didn't load a character, so let's randomize
|
||||
set_biological_gender(pick(MALE, FEMALE))
|
||||
update_preference_by_type(/datum/preference/name/real_name, random_name(identifying_gender, species))
|
||||
update_preference_by_type(/datum/preference/name/real_name, random_name(read_preference(/datum/preference/choiced/gender/identifying), species))
|
||||
b_type = RANDOM_BLOOD_TYPE
|
||||
|
||||
if(client)
|
||||
@@ -300,7 +300,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
character.set_species(species)
|
||||
// Special Case: This references variables owned by two different datums, so do it here.
|
||||
if(read_preference(/datum/preference/toggle/human/name_is_always_random))
|
||||
update_preference_by_type(/datum/preference/name/real_name, random_name(identifying_gender, species))
|
||||
update_preference_by_type(/datum/preference/name/real_name, random_name(read_preference(/datum/preference/choiced/gender/identifying), species))
|
||||
|
||||
// Ask the preferences datums to apply their own settings to the new mob
|
||||
player_setup.copy_to_mob(character)
|
||||
@@ -436,8 +436,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(character.dna)
|
||||
character.dna.real_name = character.real_name
|
||||
character.nickname = read_preference(/datum/preference/name/nickname)
|
||||
character.gender = biological_gender
|
||||
character.identifying_gender = identifying_gender
|
||||
character.gender = read_preference(/datum/preference/choiced/gender/biological)
|
||||
character.identifying_gender = read_preference(/datum/preference/choiced/gender/identifying)
|
||||
|
||||
character.h_style = h_style
|
||||
|
||||
@@ -507,7 +507,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/preference/numeric/skin_color = GLOB.preference_entries[/datum/preference/color/human/skin_color]
|
||||
skin_color.apply_pref_to(character,read_preference(/datum/preference/color/human/skin_color))
|
||||
|
||||
character.set_gender(biological_gender)
|
||||
character.set_gender(read_preference(/datum/preference/choiced/gender/biological))
|
||||
|
||||
// Destroy/cyborgize organs and limbs.
|
||||
if (convert_to_prosthetics) //should only really be run for proteans
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
var/datum/preferences/p = speaker.client.prefs
|
||||
name = p.read_preference(/datum/preference/name/real_name)
|
||||
real_name = name
|
||||
gender = p.identifying_gender
|
||||
gender = p.read_preference(/datum/preference/choiced/gender/identifying)
|
||||
|
||||
for(var/language in p.alternate_languages)
|
||||
add_language(language)
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
announce_ghost_joinleave(src)
|
||||
|
||||
if(client.prefs.read_preference(/datum/preference/toggle/human/name_is_always_random))
|
||||
client.prefs.update_preference_by_type(/datum/preference/name/real_name, random_name(client.prefs.identifying_gender))
|
||||
client.prefs.update_preference_by_type(/datum/preference/name/real_name, random_name(client.prefs.read_preference(/datum/preference/choiced/gender/identifying)))
|
||||
observer.real_name = client.prefs.read_preference(/datum/preference/name/real_name)
|
||||
observer.name = observer.real_name
|
||||
if(!check_rights_for(client, R_HOLDER) && !CONFIG_GET(flag/antag_hud_allowed)) // For new ghosts we remove the verb from even showing up if it's not allowed.
|
||||
|
||||
@@ -478,7 +478,7 @@
|
||||
|
||||
/mob/new_player/get_gender()
|
||||
if(!client || !client.prefs) ..()
|
||||
return client.prefs.biological_gender
|
||||
return client.prefs.read_preference(/datum/preference/choiced/gender/biological)
|
||||
|
||||
/mob/new_player/is_ready()
|
||||
return ready && ..()
|
||||
|
||||
@@ -292,13 +292,14 @@
|
||||
|
||||
/datum/preferences/proc/get_valid_facialhairstyles()
|
||||
var/list/valid_facialhairstyles = list()
|
||||
var/bio_gender = read_preference(/datum/preference/choiced/gender/biological)
|
||||
for(var/facialhairstyle in GLOB.facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/S = GLOB.facial_hair_styles_list[facialhairstyle]
|
||||
if(S.name == DEVELOPER_WARNING_NAME)
|
||||
continue
|
||||
if(biological_gender == MALE && S.gender == FEMALE)
|
||||
if(bio_gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(biological_gender == FEMALE && S.gender == MALE)
|
||||
if(bio_gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(!(species in S.species_allowed) && (!custom_base || !(custom_base in S.species_allowed)))
|
||||
continue
|
||||
|
||||
@@ -306,7 +306,7 @@
|
||||
..()
|
||||
plane_holder.set_vis(VIS_AUGMENTED, TRUE)
|
||||
plane_holder.set_vis(VIS_SOULCATCHER, TRUE)
|
||||
identifying_gender = client.prefs.identifying_gender
|
||||
identifying_gender = client.prefs.read_preference(/datum/preference/choiced/gender/identifying)
|
||||
|
||||
/mob/living/carbon/brain/caught_soul/Destroy()
|
||||
if(soulcatcher)
|
||||
|
||||
Reference in New Issue
Block a user