diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index 4052dce40d..6913473e88 100644
--- a/code/__DEFINES/DNA.dm
+++ b/code/__DEFINES/DNA.dm
@@ -136,8 +136,12 @@
#define ORGAN_SLOT_TESTICLES "testicles"
#define ORGAN_SLOT_BREASTS "breasts"
-
////organ defines
#define STANDARD_ORGAN_THRESHOLD 100
#define STANDARD_ORGAN_HEALING 0.001
-#define STANDARD_ORGAN_DECAY 0.00222 //designed to fail organs when left to decay for ~15 minutes
\ No newline at end of file
+#define STANDARD_ORGAN_DECAY 0.00222 //designed to fail organs when left to decay for ~15 minutes
+
+#define G_MALE 1
+#define G_FEMALE 2
+#define G_PLURAL 3
+#define G_NEUTER 4
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index ebfba43852..1622cc9dbf 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -236,7 +236,12 @@
G.fields["fingerprint"] = md5(H.dna.uni_identity)
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
- G.fields["sex"] = H.gender
+ if(H.gender == MALE)
+ G.fields["gender"] = "Male"
+ else if(H.gender == FEMALE)
+ G.fields["gender"] = "Female"
+ else
+ G.fields["gender"] = "Other"
G.fields["photo_front"] = photo_front
G.fields["photo_side"] = photo_side
general += G
@@ -274,7 +279,12 @@
L.fields["name"] = H.real_name
L.fields["rank"] = H.mind.assigned_role
L.fields["age"] = H.age
- L.fields["sex"] = H.gender
+ if(H.gender == MALE)
+ G.fields["gender"] = "Male"
+ else if(H.gender == FEMALE)
+ G.fields["gender"] = "Female"
+ else
+ G.fields["gender"] = "Other"
L.fields["blood_type"] = H.dna.blood_type
L.fields["b_dna"] = H.dna.unique_enzymes
L.fields["enzymes"] = H.dna.struc_enzymes
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 67dbbdfef7..5fa991c10c 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -92,7 +92,15 @@
. = ""
var/list/L = new /list(DNA_UNI_IDENTITY_BLOCKS)
- L[DNA_GENDER_BLOCK] = construct_block((holder.gender!=MALE)+1, 2)
+ switch(holder.gender)
+ if(MALE)
+ L[DNA_GENDER_BLOCK] = construct_block(G_MALE, 4)
+ if(FEMALE)
+ L[DNA_GENDER_BLOCK] = construct_block(G_FEMALE, 4)
+ if(PLURAL)
+ L[DNA_GENDER_BLOCK] = construct_block(G_PLURAL, 4)
+ else
+ L[DNA_GENDER_BLOCK] = construct_block(G_NEUTER, 4)
if(ishuman(holder))
var/mob/living/carbon/human/H = holder
if(!GLOB.hair_styles_list.len)
@@ -165,7 +173,15 @@
if(DNA_EYE_COLOR_BLOCK)
setblock(uni_identity, blocknumber, sanitize_hexcolor(H.eye_color))
if(DNA_GENDER_BLOCK)
- setblock(uni_identity, blocknumber, construct_block((H.gender!=MALE)+1, 2))
+ switch(H.gender)
+ if(MALE)
+ setblock(uni_identity, blocknumber, construct_block(G_MALE, 4))
+ if(FEMALE)
+ setblock(uni_identity, blocknumber, construct_block(G_FEMALE, 4))
+ if(PLURAL)
+ setblock(uni_identity, blocknumber, construct_block(G_PLURAL, 4))
+ else
+ setblock(uni_identity, blocknumber, construct_block(G_NEUTER, 4))
if(DNA_FACIAL_HAIR_STYLE_BLOCK)
setblock(uni_identity, blocknumber, construct_block(GLOB.facial_hair_styles_list.Find(H.facial_hair_style), GLOB.facial_hair_styles_list.len))
if(DNA_HAIR_STYLE_BLOCK)
@@ -307,7 +323,16 @@
/mob/living/carbon/proc/updateappearance(icon_update=1, mutcolor_update=0, mutations_overlay_update=0)
if(!has_dna())
return
- gender = (deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 2)-1) ? FEMALE : MALE
+
+ switch(deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 4))
+ if(G_MALE)
+ gender = MALE
+ if(G_FEMALE)
+ gender = FEMALE
+ if(G_PLURAL)
+ gender = PLURAL
+ else
+ gender = NEUTER
/mob/living/carbon/human/updateappearance(icon_update=1, mutcolor_update=0, mutations_overlay_update=0)
..()
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index e4fa241907..ba3fdce9b9 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -326,7 +326,7 @@ Code:
if(active1 in GLOB.data_core.general)
menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
"
- menu += "Sex: [active1.fields["sex"]]
"
+ menu += "Sex: [active1.fields["gender"]]
"
menu += "Age: [active1.fields["age"]]
"
menu += "Rank: [active1.fields["rank"]]
"
menu += "Fingerprint: [active1.fields["fingerprint"]]
"
@@ -370,7 +370,7 @@ Code:
if(active1 in GLOB.data_core.general)
menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
"
- menu += "Sex: [active1.fields["sex"]]
"
+ menu += "Sex: [active1.fields["gender"]]
"
menu += "Age: [active1.fields["age"]]
"
menu += "Rank: [active1.fields["rank"]]
"
menu += "Fingerprint: [active1.fields["fingerprint"]]
"
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index 0a5794c59d..90408472e9 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -20,14 +20,14 @@
return
if(broken || !Adjacent(user))
return
-
+
if(ishuman(user))
var/mob/living/carbon/human/H = user
//see code/modules/mob/dead/new_player/preferences.dm at approx line 545 for comments!
//this is largely copypasted from there.
//handle facial hair (if necessary)
- if(H.gender == MALE)
+ if(H.gender != FEMALE)
var/new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in GLOB.facial_hair_styles_list
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return //no tele-grooming
diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm
index 70ae133a31..d7af763244 100644
--- a/code/modules/admin/secrets.dm
+++ b/code/modules/admin/secrets.dm
@@ -408,7 +408,7 @@
var/obj/item/organ/tail/cat/tail = new
ears.Insert(H, drop_if_replaced=FALSE)
tail.Insert(H, drop_if_replaced=FALSE)
- var/list/honorifics = list("[MALE]" = list("kun"), "[FEMALE]" = list("chan","tan"), "[NEUTER]" = list("san")) //John Robust -> Robust-kun
+ var/list/honorifics = list("[MALE]" = list("kun"), "[FEMALE]" = list("chan","tan"), "[NEUTER]" = list("san"), "[PLURAL]" = list("san")) //John Robust -> Robust-kun
var/list/names = splittext(H.real_name," ")
var/forename = names.len > 1 ? names[2] : names[1]
var/newname = "[forename]-[pick(honorifics["[H.gender]"])]"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 1437555af1..f30e47c68e 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -419,7 +419,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(record_found)//If they have a record we can determine a few things.
new_character.real_name = record_found.fields["name"]
- new_character.gender = record_found.fields["sex"]
+ new_character.gender = record_found.fields["gender"]
new_character.age = record_found.fields["age"]
new_character.hardset_dna(record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], record_found.fields["blood_type"], new record_found.fields["species"], record_found.fields["features"])
else
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 08ecefb91f..75daaabb99 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -482,12 +482,20 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(gender == MALE)
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list)
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_male_list)
- else
+ undershirt = sanitize_inlist(undershirt, GLOB.undershirt_m)
+ underwear = sanitize_inlist(underwear, GLOB.underwear_m)
+ else if(gender == FEMALE)
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list)
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list)
- underwear = sanitize_inlist(underwear, GLOB.underwear_list)
+ undershirt = sanitize_inlist(undershirt, GLOB.undershirt_f)
+ underwear = sanitize_inlist(underwear, GLOB.underwear_f)
+ else
+ hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_list)
+ facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_list)
+ underwear = sanitize_inlist(underwear, GLOB.underwear_list)
+ undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
+
undie_color = sanitize_hexcolor(undie_color, 3, FALSE, initial(undie_color))
- undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
shirt_color = sanitize_hexcolor(shirt_color, 3, FALSE, initial(shirt_color))
socks = sanitize_inlist(socks, GLOB.socks_list)
socks_color = sanitize_hexcolor(socks_color, 3, FALSE, initial(socks_color))
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 8215f84c50..55f4bdd65d 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -438,7 +438,7 @@
if(1)
. += "
Requested medical record not found.
Requested security record not found,