mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
Merge pull request #1455 from Yoshax/gendertweak
Gender tweaks and adjustments
This commit is contained in:
@@ -23,6 +23,9 @@ var/global/list/joblist = list() //list of all jobstypes, minus borg and AI
|
|||||||
|
|
||||||
var/global/list/turfs = list() //list of all turfs
|
var/global/list/turfs = list() //list of all turfs
|
||||||
|
|
||||||
|
#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER)
|
||||||
|
#define all_genders_text_list list("Male","Female","Plural","Neuter")
|
||||||
|
|
||||||
//Languages/species/whitelist.
|
//Languages/species/whitelist.
|
||||||
var/global/list/all_species[0]
|
var/global/list/all_species[0]
|
||||||
var/global/list/all_languages[0]
|
var/global/list/all_languages[0]
|
||||||
|
|||||||
@@ -323,3 +323,5 @@ proc/TextPreview(var/string,var/len=40)
|
|||||||
if(48 to 57) //Numbers
|
if(48 to 57) //Numbers
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
#define gender2text(gender) capitalize(gender)
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
/hook/startup/proc/createDatacore()
|
/hook/startup/proc/createDatacore()
|
||||||
data_core = new /datum/datacore()
|
data_core = new /datum/datacore()
|
||||||
return 1
|
return 1
|
||||||
@@ -186,7 +187,7 @@
|
|||||||
G.fields["fingerprint"] = md5(H.dna.uni_identity)
|
G.fields["fingerprint"] = md5(H.dna.uni_identity)
|
||||||
G.fields["p_stat"] = "Active"
|
G.fields["p_stat"] = "Active"
|
||||||
G.fields["m_stat"] = "Stable"
|
G.fields["m_stat"] = "Stable"
|
||||||
G.fields["sex"] = H.gender
|
G.fields["sex"] = gender2text(H.gender)
|
||||||
G.fields["species"] = H.get_species()
|
G.fields["species"] = H.get_species()
|
||||||
G.fields["home_system"] = H.home_system
|
G.fields["home_system"] = H.home_system
|
||||||
G.fields["citizenship"] = H.citizenship
|
G.fields["citizenship"] = H.citizenship
|
||||||
@@ -199,6 +200,7 @@
|
|||||||
var/datum/data/record/M = CreateMedicalRecord(H.real_name, id)
|
var/datum/data/record/M = CreateMedicalRecord(H.real_name, id)
|
||||||
M.fields["b_type"] = H.b_type
|
M.fields["b_type"] = H.b_type
|
||||||
M.fields["b_dna"] = H.dna.unique_enzymes
|
M.fields["b_dna"] = H.dna.unique_enzymes
|
||||||
|
M.fields["id_gender"] = gender2text(H.identifying_gender)
|
||||||
if(H.med_record && !jobban_isbanned(H, "Records"))
|
if(H.med_record && !jobban_isbanned(H, "Records"))
|
||||||
M.fields["notes"] = H.med_record
|
M.fields["notes"] = H.med_record
|
||||||
|
|
||||||
@@ -214,7 +216,8 @@
|
|||||||
L.fields["rank"] = H.mind.assigned_role
|
L.fields["rank"] = H.mind.assigned_role
|
||||||
L.fields["age"] = H.age
|
L.fields["age"] = H.age
|
||||||
L.fields["fingerprint"] = md5(H.dna.uni_identity)
|
L.fields["fingerprint"] = md5(H.dna.uni_identity)
|
||||||
L.fields["sex"] = H.gender
|
L.fields["sex"] = gender2text(H.gender)
|
||||||
|
L.fields["id_gender"] = gender2text(H.identifying_gender)
|
||||||
L.fields["b_type"] = H.b_type
|
L.fields["b_type"] = H.b_type
|
||||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||||
L.fields["enzymes"] = H.dna.SE // Used in respawning
|
L.fields["enzymes"] = H.dna.SE // Used in respawning
|
||||||
@@ -418,7 +421,7 @@
|
|||||||
G.fields["id"] = id
|
G.fields["id"] = id
|
||||||
G.fields["rank"] = "Unassigned"
|
G.fields["rank"] = "Unassigned"
|
||||||
G.fields["real_rank"] = "Unassigned"
|
G.fields["real_rank"] = "Unassigned"
|
||||||
G.fields["sex"] = "Male"
|
G.fields["sex"] = "Unknown"
|
||||||
G.fields["age"] = "Unknown"
|
G.fields["age"] = "Unknown"
|
||||||
G.fields["fingerprint"] = "Unknown"
|
G.fields["fingerprint"] = "Unknown"
|
||||||
G.fields["p_stat"] = "Active"
|
G.fields["p_stat"] = "Active"
|
||||||
@@ -460,6 +463,7 @@
|
|||||||
M.fields["name"] = name
|
M.fields["name"] = name
|
||||||
M.fields["b_type"] = "AB+"
|
M.fields["b_type"] = "AB+"
|
||||||
M.fields["b_dna"] = md5(name)
|
M.fields["b_dna"] = md5(name)
|
||||||
|
M.fields["id_gender"] = "Unknown"
|
||||||
M.fields["mi_dis"] = "None"
|
M.fields["mi_dis"] = "None"
|
||||||
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
|
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
|
||||||
M.fields["ma_dis"] = "None"
|
M.fields["ma_dis"] = "None"
|
||||||
|
|||||||
@@ -49,11 +49,11 @@
|
|||||||
/obj/machinery/computer/med_data/attack_hand(mob/user as mob)
|
/obj/machinery/computer/med_data/attack_hand(mob/user as mob)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
var/dat
|
var/dat = list()
|
||||||
if (src.temp)
|
if (src.temp)
|
||||||
dat = text("<TT>[src.temp]</TT><BR><BR><A href='?src=\ref[src];temp=1'>Clear Screen</A>")
|
dat += text("<TT>[src.temp]</TT><BR><BR><A href='?src=\ref[src];temp=1'>Clear Screen</A>")
|
||||||
else
|
else
|
||||||
dat = text("Confirm Identity: <A href='?src=\ref[];scan=1'>[]</A><HR>", src, (src.scan ? text("[]", src.scan.name) : "----------"))
|
dat += text("Confirm Identity: <A href='?src=\ref[];scan=1'>[]</A><HR>", src, (src.scan ? text("[]", src.scan.name) : "----------"))
|
||||||
if (src.authenticated)
|
if (src.authenticated)
|
||||||
switch(src.screen)
|
switch(src.screen)
|
||||||
if(1.0)
|
if(1.0)
|
||||||
@@ -85,8 +85,12 @@
|
|||||||
if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
|
if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
|
||||||
dat += "<table><tr><td>Name: [active1.fields["name"]] \
|
dat += "<table><tr><td>Name: [active1.fields["name"]] \
|
||||||
ID: [active1.fields["id"]]<BR>\n \
|
ID: [active1.fields["id"]]<BR>\n \
|
||||||
Sex: <A href='?src=\ref[src];field=sex'>[active1.fields["sex"]]</A><BR>\n \
|
Sex: <A href='?src=\ref[src];field=sex'>[active1.fields["sex"]]</A><BR>\n"
|
||||||
Age: <A href='?src=\ref[src];field=age'>[active1.fields["age"]]</A><BR>\n \
|
if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
|
||||||
|
dat += "Gender identity: <A href='?src=\ref[src];field=id_gender'>[active2.fields["id_gender"]]</A><BR>"
|
||||||
|
else
|
||||||
|
dat += "Gender identity: <A href='?src=\ref[src];field=id_gender'>Unknown</A><BR>"
|
||||||
|
dat += "Age: <A href='?src=\ref[src];field=age'>[active1.fields["age"]]</A><BR>\n \
|
||||||
Fingerprint: <A href='?src=\ref[src];field=fingerprint'>[active1.fields["fingerprint"]]</A><BR>\n \
|
Fingerprint: <A href='?src=\ref[src];field=fingerprint'>[active1.fields["fingerprint"]]</A><BR>\n \
|
||||||
Physical Status: <A href='?src=\ref[src];field=p_stat'>[active1.fields["p_stat"]]</A><BR>\n \
|
Physical Status: <A href='?src=\ref[src];field=p_stat'>[active1.fields["p_stat"]]</A><BR>\n \
|
||||||
Mental Status: <A href='?src=\ref[src];field=m_stat'>[active1.fields["m_stat"]]</A><BR></td><td align = center valign = top> \
|
Mental Status: <A href='?src=\ref[src];field=m_stat'>[active1.fields["m_stat"]]</A><BR></td><td align = center valign = top> \
|
||||||
@@ -135,6 +139,7 @@
|
|||||||
else
|
else
|
||||||
else
|
else
|
||||||
dat += text("<A href='?src=\ref[];login=1'>{Log In}</A>", src)
|
dat += text("<A href='?src=\ref[];login=1'>{Log In}</A>", src)
|
||||||
|
dat = jointext(dat,null)
|
||||||
user << browse(text("<HEAD><TITLE>Medical Records</TITLE></HEAD><TT>[]</TT>", dat), "window=med_rec")
|
user << browse(text("<HEAD><TITLE>Medical Records</TITLE></HEAD><TT>[]</TT>", dat), "window=med_rec")
|
||||||
onclose(user, "med_rec")
|
onclose(user, "med_rec")
|
||||||
return
|
return
|
||||||
@@ -249,10 +254,10 @@
|
|||||||
src.active1.fields["fingerprint"] = t1
|
src.active1.fields["fingerprint"] = t1
|
||||||
if("sex")
|
if("sex")
|
||||||
if (istype(src.active1, /datum/data/record))
|
if (istype(src.active1, /datum/data/record))
|
||||||
if (src.active1.fields["sex"] == "Male")
|
src.active1.fields["sex"] = next_in_list(src.active1.fields["sex"], all_genders_text_list)
|
||||||
src.active1.fields["sex"] = "Female"
|
if("id_gender")
|
||||||
else
|
if (istype(src.active2, /datum/data/record))
|
||||||
src.active1.fields["sex"] = "Male"
|
src.active2.fields["id_gender"] = next_in_list(src.active2.fields["id_gender"], all_genders_text_list)
|
||||||
if("age")
|
if("age")
|
||||||
if (istype(src.active1, /datum/data/record))
|
if (istype(src.active1, /datum/data/record))
|
||||||
var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num
|
var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num
|
||||||
|
|||||||
@@ -1,12 +1,20 @@
|
|||||||
|
datum/preferences
|
||||||
|
var/biological_gender = MALE
|
||||||
|
var/identifying_gender = MALE
|
||||||
|
|
||||||
|
datum/preferences/proc/set_biological_gender(var/gender)
|
||||||
|
biological_gender = gender
|
||||||
|
identifying_gender = gender
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic
|
/datum/category_item/player_setup_item/general/basic
|
||||||
name = "Basic"
|
name = "Basic"
|
||||||
sort_order = 1
|
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)
|
/datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S)
|
||||||
S["real_name"] >> pref.real_name
|
S["real_name"] >> pref.real_name
|
||||||
S["name_is_always_random"] >> pref.be_random_name
|
S["name_is_always_random"] >> pref.be_random_name
|
||||||
S["gender"] >> pref.gender
|
S["gender"] >> pref.biological_gender
|
||||||
|
S["id_gender"] << pref.identifying_gender
|
||||||
S["age"] >> pref.age
|
S["age"] >> pref.age
|
||||||
S["spawnpoint"] >> pref.spawnpoint
|
S["spawnpoint"] >> pref.spawnpoint
|
||||||
S["OOC_Notes"] >> pref.metadata
|
S["OOC_Notes"] >> pref.metadata
|
||||||
@@ -14,7 +22,8 @@
|
|||||||
/datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S)
|
||||||
S["real_name"] << pref.real_name
|
S["real_name"] << pref.real_name
|
||||||
S["name_is_always_random"] << pref.be_random_name
|
S["name_is_always_random"] << pref.be_random_name
|
||||||
S["gender"] << pref.gender
|
S["gender"] << pref.biological_gender
|
||||||
|
S["id_gender"] << pref.identifying_gender
|
||||||
S["age"] << pref.age
|
S["age"] << pref.age
|
||||||
S["spawnpoint"] << pref.spawnpoint
|
S["spawnpoint"] << pref.spawnpoint
|
||||||
S["OOC_Notes"] << pref.metadata
|
S["OOC_Notes"] << pref.metadata
|
||||||
@@ -22,13 +31,14 @@
|
|||||||
/datum/category_item/player_setup_item/general/basic/sanitize_character()
|
/datum/category_item/player_setup_item/general/basic/sanitize_character()
|
||||||
if(!pref.species) pref.species = "Human"
|
if(!pref.species) pref.species = "Human"
|
||||||
var/datum/species/S = all_species[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.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.biological_gender = sanitize_inlist(pref.biological_gender, S.genders, pick(S.genders))
|
||||||
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
pref.identifying_gender = (pref.identifying_gender in all_genders_define_list) ? pref.identifying_gender : pref.biological_gender
|
||||||
|
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
||||||
if(!pref.real_name)
|
if(!pref.real_name)
|
||||||
pref.real_name = random_name(pref.gender, pref.species)
|
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
||||||
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
||||||
pref.be_random_name = sanitize_integer(pref.be_random_name, 0, 1, initial(pref.be_random_name))
|
pref.be_random_name = sanitize_integer(pref.be_random_name, 0, 1, initial(pref.be_random_name))
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/content()
|
/datum/category_item/player_setup_item/general/basic/content()
|
||||||
. = "<b>Name:</b> "
|
. = "<b>Name:</b> "
|
||||||
@@ -36,13 +46,15 @@
|
|||||||
. += "(<a href='?src=\ref[src];random_name=1'>Random Name</A>) "
|
. += "(<a href='?src=\ref[src];random_name=1'>Random Name</A>) "
|
||||||
. += "(<a href='?src=\ref[src];always_random_name=1'>Always Random Name: [pref.be_random_name ? "Yes" : "No"]</a>)"
|
. += "(<a href='?src=\ref[src];always_random_name=1'>Always Random Name: [pref.be_random_name ? "Yes" : "No"]</a>)"
|
||||||
. += "<br>"
|
. += "<br>"
|
||||||
. += "<b>Gender:</b> <a href='?src=\ref[src];gender=1'><b>[capitalize(lowertext(pref.gender))]</b></a><br>"
|
. += "<b>Biological Gender:</b> <a href='?src=\ref[src];bio_gender=1'><b>[gender2text(pref.biological_gender)]</b></a><br>"
|
||||||
|
. += "<b>Gender Identity:</b> <a href='?src=\ref[src];id_gender=1'><b>[gender2text(pref.identifying_gender)]</b></a><br>"
|
||||||
. += "<b>Age:</b> <a href='?src=\ref[src];age=1'>[pref.age]</a><br>"
|
. += "<b>Age:</b> <a href='?src=\ref[src];age=1'>[pref.age]</a><br>"
|
||||||
. += "<b>Spawn Point</b>: <a href='?src=\ref[src];spawnpoint=1'>[pref.spawnpoint]</a><br>"
|
. += "<b>Spawn Point</b>: <a href='?src=\ref[src];spawnpoint=1'>[pref.spawnpoint]</a><br>"
|
||||||
if(config.allow_Metadata)
|
if(config.allow_Metadata)
|
||||||
. += "<b>OOC Notes:</b> <a href='?src=\ref[src];metadata=1'> Edit </a><br>"
|
. += "<b>OOC Notes:</b> <a href='?src=\ref[src];metadata=1'> Edit </a><br>"
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/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"])
|
if(href_list["rename"])
|
||||||
var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null
|
var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null
|
||||||
if (!isnull(raw_name) && CanUseTopic(user))
|
if (!isnull(raw_name) && CanUseTopic(user))
|
||||||
@@ -55,20 +67,27 @@
|
|||||||
return TOPIC_NOACTION
|
return TOPIC_NOACTION
|
||||||
|
|
||||||
else if(href_list["random_name"])
|
else if(href_list["random_name"])
|
||||||
pref.real_name = random_name(pref.gender, pref.species)
|
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["always_random_name"])
|
else if(href_list["always_random_name"])
|
||||||
pref.be_random_name = !pref.be_random_name
|
pref.be_random_name = !pref.be_random_name
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["gender"])
|
else if(href_list["bio_gender"])
|
||||||
pref.gender = next_in_list(pref.gender, valid_player_genders)
|
var/new_gender = input(user, "Choose your character's biological gender:", "Character Preference", pref.biological_gender) as null|anything in get_genders()
|
||||||
|
if(new_gender && CanUseTopic(user))
|
||||||
|
pref.set_biological_gender(new_gender)
|
||||||
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
|
else if(href_list["id_gender"])
|
||||||
|
var/new_gender = input(user, "Choose your character's identifying gender:", "Character Preference", pref.identifying_gender) as null|anything in all_genders_define_list
|
||||||
|
if(new_gender && CanUseTopic(user))
|
||||||
|
pref.identifying_gender = new_gender
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["age"])
|
else if(href_list["age"])
|
||||||
if(!pref.species) pref.species = "Human"
|
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
|
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))
|
if(new_age && CanUseTopic(user))
|
||||||
pref.age = max(min(round(text2num(new_age)), S.max_age), S.min_age)
|
pref.age = max(min(round(text2num(new_age)), S.max_age), S.min_age)
|
||||||
@@ -76,8 +95,8 @@
|
|||||||
|
|
||||||
else if(href_list["spawnpoint"])
|
else if(href_list["spawnpoint"])
|
||||||
var/list/spawnkeys = list()
|
var/list/spawnkeys = list()
|
||||||
for(var/S in spawntypes)
|
for(var/spawntype in spawntypes)
|
||||||
spawnkeys += S
|
spawnkeys += spawntype
|
||||||
var/choice = input(user, "Where would you like to spawn when late-joining?") as null|anything in spawnkeys
|
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
|
if(!choice || !spawntypes[choice] || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||||
pref.spawnpoint = choice
|
pref.spawnpoint = choice
|
||||||
@@ -90,3 +109,12 @@
|
|||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
/datum/category_item/player_setup_item/general/basic/proc/get_genders()
|
||||||
|
var/datum/species/S = all_species[pref.species]
|
||||||
|
var/list/possible_genders = S.genders
|
||||||
|
if(pref.organ_data[BP_TORSO] != "cyborg")
|
||||||
|
return possible_genders
|
||||||
|
possible_genders = possible_genders.Copy()
|
||||||
|
possible_genders |= NEUTER
|
||||||
|
return possible_genders
|
||||||
@@ -191,7 +191,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
return mob_species && (mob_species.appearance_flags & flag)
|
return mob_species && (mob_species.appearance_flags & flag)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
var/mob_species = all_species[pref.species]
|
var/datum/species/mob_species = all_species[pref.species]
|
||||||
|
|
||||||
if(href_list["random"])
|
if(href_list["random"])
|
||||||
pref.randomize_appearance_for()
|
pref.randomize_appearance_for()
|
||||||
@@ -220,13 +220,17 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
var/prev_species = pref.species
|
var/prev_species = pref.species
|
||||||
pref.species = href_list["set_species"]
|
pref.species = href_list["set_species"]
|
||||||
if(prev_species != pref.species)
|
if(prev_species != pref.species)
|
||||||
|
if(!(pref.biological_gender in mob_species.genders))
|
||||||
|
pref.set_biological_gender(mob_species.genders[1])
|
||||||
|
|
||||||
|
|
||||||
//grab one of the valid hair styles for the newly chosen species
|
//grab one of the valid hair styles for the newly chosen species
|
||||||
var/list/valid_hairstyles = list()
|
var/list/valid_hairstyles = list()
|
||||||
for(var/hairstyle in hair_styles_list)
|
for(var/hairstyle in hair_styles_list)
|
||||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||||
if(pref.gender == MALE && S.gender == FEMALE)
|
if(pref.biological_gender == MALE && S.gender == FEMALE)
|
||||||
continue
|
continue
|
||||||
if(pref.gender == FEMALE && S.gender == MALE)
|
if(pref.biological_gender == FEMALE && S.gender == MALE)
|
||||||
continue
|
continue
|
||||||
if(!(pref.species in S.species_allowed))
|
if(!(pref.species in S.species_allowed))
|
||||||
continue
|
continue
|
||||||
@@ -242,9 +246,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
var/list/valid_facialhairstyles = list()
|
var/list/valid_facialhairstyles = list()
|
||||||
for(var/facialhairstyle in facial_hair_styles_list)
|
for(var/facialhairstyle in facial_hair_styles_list)
|
||||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||||
if(pref.gender == MALE && S.gender == FEMALE)
|
if(pref.biological_gender == MALE && S.gender == FEMALE)
|
||||||
continue
|
continue
|
||||||
if(pref.gender == FEMALE && S.gender == MALE)
|
if(pref.biological_gender == FEMALE && S.gender == MALE)
|
||||||
continue
|
continue
|
||||||
if(!(pref.species in S.species_allowed))
|
if(!(pref.species in S.species_allowed))
|
||||||
continue
|
continue
|
||||||
@@ -336,9 +340,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
var/list/valid_facialhairstyles = list()
|
var/list/valid_facialhairstyles = list()
|
||||||
for(var/facialhairstyle in facial_hair_styles_list)
|
for(var/facialhairstyle in facial_hair_styles_list)
|
||||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||||
if(pref.gender == MALE && S.gender == FEMALE)
|
if(pref.biological_gender == MALE && S.gender == FEMALE)
|
||||||
continue
|
continue
|
||||||
if(pref.gender == FEMALE && S.gender == MALE)
|
if(pref.biological_gender == FEMALE && S.gender == MALE)
|
||||||
continue
|
continue
|
||||||
if(!(pref.species in S.species_allowed))
|
if(!(pref.species in S.species_allowed))
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ datum/preferences
|
|||||||
//character preferences
|
//character preferences
|
||||||
var/real_name //our character's name
|
var/real_name //our character's name
|
||||||
var/be_random_name = 0 //whether we are a random name every round
|
var/be_random_name = 0 //whether we are a random name every round
|
||||||
var/gender = MALE //gender of character (well duh)
|
|
||||||
var/age = 30 //age of character
|
var/age = 30 //age of character
|
||||||
var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2).
|
var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2).
|
||||||
var/b_type = "A+" //blood type (not-chooseable)
|
var/b_type = "A+" //blood type (not-chooseable)
|
||||||
@@ -120,8 +119,8 @@ datum/preferences
|
|||||||
|
|
||||||
/datum/preferences/New(client/C)
|
/datum/preferences/New(client/C)
|
||||||
player_setup = new(src)
|
player_setup = new(src)
|
||||||
gender = pick(MALE, FEMALE)
|
set_biological_gender(pick(MALE, FEMALE))
|
||||||
real_name = random_name(gender,species)
|
real_name = random_name(identifying_gender,species)
|
||||||
b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
|
b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
|
||||||
|
|
||||||
gear = list()
|
gear = list()
|
||||||
@@ -255,7 +254,7 @@ datum/preferences
|
|||||||
// Sanitizing rather than saving as someone might still be editing when copy_to occurs.
|
// Sanitizing rather than saving as someone might still be editing when copy_to occurs.
|
||||||
player_setup.sanitize_setup()
|
player_setup.sanitize_setup()
|
||||||
if(be_random_name)
|
if(be_random_name)
|
||||||
real_name = random_name(gender,species)
|
real_name = random_name(identifying_gender,species)
|
||||||
|
|
||||||
if(config.humans_need_surnames)
|
if(config.humans_need_surnames)
|
||||||
var/firstspace = findtext(real_name, " ")
|
var/firstspace = findtext(real_name, " ")
|
||||||
@@ -285,7 +284,8 @@ datum/preferences
|
|||||||
character.gen_record = gen_record
|
character.gen_record = gen_record
|
||||||
character.exploit_record = exploit_record
|
character.exploit_record = exploit_record
|
||||||
|
|
||||||
character.gender = gender
|
character.gender = biological_gender
|
||||||
|
character.identifying_gender = identifying_gender
|
||||||
character.age = age
|
character.age = age
|
||||||
character.b_type = b_type
|
character.b_type = b_type
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
var/msg = "<span class='info'>*---------*\nThis is "
|
var/msg = "<span class='info'>*---------*\nThis is "
|
||||||
|
|
||||||
var/datum/gender/T = gender_datums[gender]
|
var/datum/gender/T = gender_datums[get_gender()]
|
||||||
if(skipjumpsuit && skipface) //big suits/masks/helmets make it hard to tell their gender
|
if(skipjumpsuit && skipface) //big suits/masks/helmets make it hard to tell their gender
|
||||||
T = gender_datums[PLURAL]
|
T = gender_datums[PLURAL]
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1104,6 +1104,9 @@
|
|||||||
if(species.holder_type)
|
if(species.holder_type)
|
||||||
holder_type = species.holder_type
|
holder_type = species.holder_type
|
||||||
|
|
||||||
|
if(!(gender in species.genders))
|
||||||
|
gender = species.genders[1]
|
||||||
|
|
||||||
icon_state = lowertext(species.name)
|
icon_state = lowertext(species.name)
|
||||||
|
|
||||||
species.create_organs(src)
|
species.create_organs(src)
|
||||||
|
|||||||
@@ -91,3 +91,5 @@
|
|||||||
mob_bump_flag = HUMAN
|
mob_bump_flag = HUMAN
|
||||||
mob_push_flags = ~HEAVY
|
mob_push_flags = ~HEAVY
|
||||||
mob_swap_flags = ~HEAVY
|
mob_swap_flags = ~HEAVY
|
||||||
|
|
||||||
|
var/identifying_gender // In case the human identifies as another gender than it's biological
|
||||||
|
|||||||
@@ -55,6 +55,8 @@
|
|||||||
sum += H.ear_protection
|
sum += H.ear_protection
|
||||||
return sum
|
return sum
|
||||||
|
|
||||||
|
/mob/living/carbon/human/get_gender()
|
||||||
|
return identifying_gender ? identifying_gender : gender
|
||||||
|
|
||||||
#undef HUMAN_EATING_NO_ISSUE
|
#undef HUMAN_EATING_NO_ISSUE
|
||||||
#undef HUMAN_EATING_NO_MOUTH
|
#undef HUMAN_EATING_NO_MOUTH
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
flags = NO_SCAN | NO_SLIP | NO_POISON | NO_MINOR_CUT
|
flags = NO_SCAN | NO_SLIP | NO_POISON | NO_MINOR_CUT
|
||||||
spawn_flags = IS_RESTRICTED
|
spawn_flags = IS_RESTRICTED
|
||||||
|
|
||||||
|
genders = list(NEUTER)
|
||||||
|
|
||||||
/datum/species/shadow/handle_death(var/mob/living/carbon/human/H)
|
/datum/species/shadow/handle_death(var/mob/living/carbon/human/H)
|
||||||
spawn(1)
|
spawn(1)
|
||||||
new /obj/effect/decal/cleanable/ash(H.loc)
|
new /obj/effect/decal/cleanable/ash(H.loc)
|
||||||
|
|||||||
@@ -147,6 +147,8 @@
|
|||||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var/list/genders = list(MALE, FEMALE)
|
||||||
|
|
||||||
// Bump vars
|
// Bump vars
|
||||||
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
||||||
var/push_flags = ~HEAVY // What can we push?
|
var/push_flags = ~HEAVY // What can we push?
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
|
|
||||||
death_message = "becomes completely motionless..."
|
death_message = "becomes completely motionless..."
|
||||||
|
|
||||||
|
genders = list(NEUTER)
|
||||||
|
|
||||||
/datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H)
|
/datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||||
if(H.mind)
|
if(H.mind)
|
||||||
H.mind.assigned_role = "Golem"
|
H.mind.assigned_role = "Golem"
|
||||||
|
|||||||
@@ -44,6 +44,8 @@
|
|||||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable)
|
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)
|
/datum/species/slime/handle_death(var/mob/living/carbon/human/H)
|
||||||
spawn(1)
|
spawn(1)
|
||||||
if(H)
|
if(H)
|
||||||
|
|||||||
@@ -253,6 +253,7 @@
|
|||||||
|
|
||||||
reagent_tag = IS_DIONA
|
reagent_tag = IS_DIONA
|
||||||
|
|
||||||
|
genders = list(PLURAL)
|
||||||
/datum/species/diona/can_understand(var/mob/other)
|
/datum/species/diona/can_understand(var/mob/other)
|
||||||
var/mob/living/carbon/alien/diona/D = other
|
var/mob/living/carbon/alien/diona/D = other
|
||||||
if(istype(D))
|
if(istype(D))
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
var/datum/preferences/p = speaker.client.prefs
|
var/datum/preferences/p = speaker.client.prefs
|
||||||
name = p.real_name
|
name = p.real_name
|
||||||
real_name = name
|
real_name = name
|
||||||
gender = p.gender
|
gender = p.identifying_gender
|
||||||
|
|
||||||
for(var/language in p.alternate_languages)
|
for(var/language in p.alternate_languages)
|
||||||
add_language(language)
|
add_language(language)
|
||||||
|
|||||||
@@ -127,7 +127,7 @@
|
|||||||
observer.alpha = 127
|
observer.alpha = 127
|
||||||
|
|
||||||
if(client.prefs.be_random_name)
|
if(client.prefs.be_random_name)
|
||||||
client.prefs.real_name = random_name(client.prefs.gender)
|
client.prefs.real_name = random_name(client.prefs.identifying_gender)
|
||||||
observer.real_name = client.prefs.real_name
|
observer.real_name = client.prefs.real_name
|
||||||
observer.name = observer.real_name
|
observer.name = observer.real_name
|
||||||
if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
|
if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
|
||||||
@@ -493,7 +493,7 @@
|
|||||||
|
|
||||||
/mob/new_player/get_gender()
|
/mob/new_player/get_gender()
|
||||||
if(!client || !client.prefs) ..()
|
if(!client || !client.prefs) ..()
|
||||||
return client.prefs.gender
|
return client.prefs.biological_gender
|
||||||
|
|
||||||
/mob/new_player/is_ready()
|
/mob/new_player/is_ready()
|
||||||
return ready && ..()
|
return ready && ..()
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/datum/preferences
|
/datum/preferences
|
||||||
//The mob should have a gender you want before running this proc. Will run fine without H
|
//The mob should have a gender you want before running this proc. Will run fine without H
|
||||||
/datum/preferences/proc/randomize_appearance_for(var/mob/living/carbon/human/H)
|
/datum/preferences/proc/randomize_appearance_for(var/mob/living/carbon/human/H)
|
||||||
gender = pick(MALE, FEMALE)
|
var/datum/species/current_species = all_species[species ? species : "Human"]
|
||||||
var/datum/species/current_species = all_species[species]
|
set_biological_gender(pick(current_species.genders))
|
||||||
|
|
||||||
if(current_species)
|
if(current_species)
|
||||||
if(current_species.flags & HAS_SKIN_TONE)
|
if(current_species.flags & HAS_SKIN_TONE)
|
||||||
@@ -25,8 +25,8 @@
|
|||||||
use_head_species = H.species.get_bodytype()
|
use_head_species = H.species.get_bodytype()
|
||||||
|
|
||||||
if(use_head_species)
|
if(use_head_species)
|
||||||
h_style = random_hair_style(gender, species)
|
h_style = random_hair_style(biological_gender, species)
|
||||||
f_style = random_facial_hair_style(gender, species)
|
f_style = random_facial_hair_style(biological_gender, species)
|
||||||
|
|
||||||
randomize_hair_color("hair")
|
randomize_hair_color("hair")
|
||||||
randomize_hair_color("facial")
|
randomize_hair_color("facial")
|
||||||
@@ -202,7 +202,7 @@
|
|||||||
qdel(preview_icon)
|
qdel(preview_icon)
|
||||||
|
|
||||||
var/g = "m"
|
var/g = "m"
|
||||||
if(gender == FEMALE) g = "f"
|
if(biological_gender == FEMALE) g = "f"
|
||||||
|
|
||||||
var/icon/icobase
|
var/icon/icobase
|
||||||
var/datum/species/current_species = all_species[species]
|
var/datum/species/current_species = all_species[species]
|
||||||
|
|||||||
@@ -27,10 +27,14 @@
|
|||||||
cut_and_generate_data()
|
cut_and_generate_data()
|
||||||
return 1
|
return 1
|
||||||
if(href_list["gender"])
|
if(href_list["gender"])
|
||||||
if(can_change(APPEARANCE_GENDER))
|
if(can_change(APPEARANCE_GENDER) && (href_list["gender"] in get_genders()))
|
||||||
if(owner.change_gender(href_list["gender"]))
|
if(owner.change_gender(href_list["gender"]))
|
||||||
cut_and_generate_data()
|
cut_and_generate_data()
|
||||||
return 1
|
return 1
|
||||||
|
if(href_list["gender_id"])
|
||||||
|
if(can_change(APPEARANCE_GENDER) && (href_list["gender_id"] in all_genders_define_list))
|
||||||
|
owner.identifying_gender = href_list["gender_id"]
|
||||||
|
return 1
|
||||||
if(href_list["skin_tone"])
|
if(href_list["skin_tone"])
|
||||||
if(can_change_skin_tone())
|
if(can_change_skin_tone())
|
||||||
var/new_s_tone = input(usr, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Skin Tone", -owner.s_tone + 35) as num|null
|
var/new_s_tone = input(usr, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Skin Tone", -owner.s_tone + 35) as num|null
|
||||||
@@ -100,6 +104,7 @@
|
|||||||
|
|
||||||
data["specimen"] = owner.species.name
|
data["specimen"] = owner.species.name
|
||||||
data["gender"] = owner.gender
|
data["gender"] = owner.gender
|
||||||
|
data["gender_id"] = owner.identifying_gender
|
||||||
data["change_race"] = can_change(APPEARANCE_RACE)
|
data["change_race"] = can_change(APPEARANCE_RACE)
|
||||||
if(data["change_race"])
|
if(data["change_race"])
|
||||||
var/species[0]
|
var/species[0]
|
||||||
@@ -108,6 +113,17 @@
|
|||||||
data["species"] = species
|
data["species"] = species
|
||||||
|
|
||||||
data["change_gender"] = can_change(APPEARANCE_GENDER)
|
data["change_gender"] = can_change(APPEARANCE_GENDER)
|
||||||
|
if(data["change_gender"])
|
||||||
|
var/genders[0]
|
||||||
|
for(var/gender in get_genders())
|
||||||
|
genders[++genders.len] = list("gender_name" = gender2text(gender), "gender_key" = gender)
|
||||||
|
data["genders"] = genders
|
||||||
|
var/id_genders[0]
|
||||||
|
for(var/gender in all_genders_define_list)
|
||||||
|
id_genders[++id_genders.len] = list("gender_name" = gender2text(gender), "gender_key" = gender)
|
||||||
|
data["id_genders"] = id_genders
|
||||||
|
|
||||||
|
|
||||||
data["change_skin_tone"] = can_change_skin_tone()
|
data["change_skin_tone"] = can_change_skin_tone()
|
||||||
data["change_skin_color"] = can_change_skin_color()
|
data["change_skin_color"] = can_change_skin_color()
|
||||||
data["change_eye_color"] = can_change(APPEARANCE_EYE_COLOR)
|
data["change_eye_color"] = can_change(APPEARANCE_EYE_COLOR)
|
||||||
@@ -163,3 +179,13 @@
|
|||||||
if(!valid_hairstyles.len || !valid_facial_hairstyles.len)
|
if(!valid_hairstyles.len || !valid_facial_hairstyles.len)
|
||||||
valid_hairstyles = owner.generate_valid_hairstyles(check_gender = 0)
|
valid_hairstyles = owner.generate_valid_hairstyles(check_gender = 0)
|
||||||
valid_facial_hairstyles = owner.generate_valid_facial_hairstyles()
|
valid_facial_hairstyles = owner.generate_valid_facial_hairstyles()
|
||||||
|
|
||||||
|
|
||||||
|
/datum/nano_module/appearance_changer/proc/get_genders()
|
||||||
|
var/datum/species/S = owner.species
|
||||||
|
var/list/possible_genders = S.genders
|
||||||
|
if(!owner.internal_organs_by_name["cell"])
|
||||||
|
return possible_genders
|
||||||
|
possible_genders = possible_genders.Copy()
|
||||||
|
possible_genders |= NEUTER
|
||||||
|
return possible_genders
|
||||||
4
html/changelogs/Yoshax-gendertweak.yml
Normal file
4
html/changelogs/Yoshax-gendertweak.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
author: Yoshax
|
||||||
|
delete-after: True
|
||||||
|
changes:
|
||||||
|
- tweak"Splits gender into biological gender and gender identity. Biological gender modifies the sprite (for between male and female) and gender identity determines what pronouns show up when examined or suchlike. Both are displayed in medical records and such. "
|
||||||
@@ -14,11 +14,22 @@
|
|||||||
{{if data.change_gender}}
|
{{if data.change_gender}}
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="itemLabelNarrow">
|
<div class="itemLabelNarrow">
|
||||||
Gender:
|
Biological Gender:
|
||||||
</div>
|
</div>
|
||||||
<div class="itemContentWide">
|
<div class="itemContentWide">
|
||||||
{{:helper.link('Male', null, { 'gender' : 'male'}, null, data.gender == 'male' ? 'selected' : null)}}
|
{{for data.genders}}
|
||||||
{{:helper.link('Female', null, { 'gender' : 'female'}, null, data.gender == 'female' ? 'selected' : null)}}
|
{{:helper.link(value.gender_name, null, { 'gender' : value.gender_key}, null, data.gender == value.gender_key ? 'selected' : null)}}
|
||||||
|
{{/for}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item">
|
||||||
|
<div class="itemLabelNarrow">
|
||||||
|
Gender Identity:
|
||||||
|
</div>
|
||||||
|
<div class="itemContentWide">
|
||||||
|
{{for data.id_genders}}
|
||||||
|
{{:helper.link(value.gender_name, null, { 'gender_id' : value.gender_key}, null, data.gender_id == value.gender_key ? 'selected' : null)}}
|
||||||
|
{{/for}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|||||||
Reference in New Issue
Block a user