"
dat += "Identity"
- dat += "Gender: [active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]"
- dat += " "
dat += "Age: [active_character.age] "
dat += "Body: (®) "
dat += "Species: [active_character.species] "
+ dat += "Gender: [active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")] "
+ dat += "Body Type: [active_character.body_type == MALE ? "Masculine" : "Feminine"]"
+ dat += " "
if(active_character.species == "Vox") // Purge these bastards
dat += "N2 Tank: [active_character.speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"] "
if(active_character.species == "Plasmaman")
diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm
index e9e304b4a4b..0d27033de48 100644
--- a/code/modules/mob/living/carbon/human/appearance.dm
+++ b/code/modules/mob/living/carbon/human/appearance.dm
@@ -4,27 +4,28 @@
AC.ui_interact(user)
/mob/living/carbon/human/proc/change_gender(new_gender, update_dna = TRUE)
- var/obj/item/organ/external/head/H = bodyparts_by_name["head"]
- if(gender == new_gender || (gender == PLURAL && !dna.species.has_gender))
+ if(gender == new_gender)
return
gender = new_gender
- if(istype(H))
- var/datum/sprite_accessory/hair/current_hair = GLOB.hair_styles_full_list[H.h_style]
- if(current_hair.gender != NEUTER && current_hair.gender != gender)
- reset_head_hair()
-
- var/datum/sprite_accessory/hair/current_fhair = GLOB.facial_hair_styles_list[H.f_style]
- if(current_fhair.gender != NEUTER && current_fhair.gender != gender)
- reset_facial_hair()
-
if(update_dna)
update_dna()
sync_organ_dna(assimilate = FALSE)
update_body()
return TRUE
+/mob/living/carbon/human/proc/change_body_type(new_body, update_dna = TRUE)
+ if(!new_body || new_body == body_type)
+ return
+
+ body_type = new_body
+
+ if(update_dna)
+ update_dna()
+ sync_organ_dna(FALSE)
+ update_body(TRUE)
+
/mob/living/carbon/human/proc/change_hair(hair_style, fluff)
var/obj/item/organ/external/head/H = get_organ("head")
@@ -373,8 +374,6 @@
if(hairstyle == "Bald") //Just in case.
valid_hairstyles += hairstyle
continue
- if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
- continue
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
var/datum/robolimb/robohead = GLOB.all_robolimbs[H.model]
if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
@@ -401,8 +400,6 @@
if(facialhairstyle == "Shaved") //Just in case.
valid_facial_hairstyles += facialhairstyle
continue
- if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
- continue
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
var/datum/robolimb/robohead = GLOB.all_robolimbs[H.model]
if(H.dna.species.name in S.species_allowed) //If this is a facial hair style native to the user's species...
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 56c1af2531b..5cf1b5218fc 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -32,6 +32,8 @@
var/height = "average height"
/// Players physique (even MORE fluff)
var/physique = "average"
+ /// The body type associated with the body
+ var/body_type = MALE
var/underwear = "Nude" //Which underwear the player wants
var/undershirt = "Nude" //Which undershirt the player wants
diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm
index 7296e27c278..6938a3e3451 100644
--- a/code/modules/mob/living/carbon/human/human_mob.dm
+++ b/code/modules/mob/living/carbon/human/human_mob.dm
@@ -1087,9 +1087,6 @@
if(oldspecies.default_language)
remove_language(oldspecies.default_language)
- if(gender == PLURAL && oldspecies.has_gender)
- change_gender(pick(MALE, FEMALE))
-
oldspecies.handle_dna(src, TRUE) // Remove any mutations that belong to the old species
oldspecies.on_species_loss(src)
diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm
index 483c58b8ae8..4a9fcf2b651 100644
--- a/code/modules/mob/living/carbon/human/species/_species.dm
+++ b/code/modules/mob/living/carbon/human/species/_species.dm
@@ -118,7 +118,6 @@
var/forced_heartattack = FALSE //Some species have blood, but we still want them to have heart attacks
var/dies_at_threshold = FALSE // Do they die or get knocked out at specific thresholds, or do they go through complex crit?
var/can_revive_by_healing // Determines whether or not this species can be revived by simply healing them
- var/has_gender = TRUE
var/blacklisted = FALSE
var/dangerous_existence = FALSE
diff --git a/code/modules/mob/living/carbon/human/species/diona_species.dm b/code/modules/mob/living/carbon/human/species/diona_species.dm
index 65ad87eadda..8fd6d96e22d 100644
--- a/code/modules/mob/living/carbon/human/species/diona_species.dm
+++ b/code/modules/mob/living/carbon/human/species/diona_species.dm
@@ -22,7 +22,6 @@
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT
clothing_flags = HAS_SOCKS
default_hair_colour = "#000000"
- has_gender = FALSE
bodyflags = SHAVED
dietflags = DIET_HERB //Diona regenerate nutrition in light and water, no diet necessary, but if they must, they eat other plants *scream
taste_sensitivity = TASTE_SENSITIVITY_DULL
diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm
index a5586270a6a..6d612d98e99 100644
--- a/code/modules/mob/living/carbon/human/species/drask.dm
+++ b/code/modules/mob/living/carbon/human/species/drask.dm
@@ -32,7 +32,6 @@
species_traits = list(LIPS, NO_HAIR)
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT
bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS | BALD | SHAVED
- has_gender = FALSE
dietflags = DIET_OMNI
cold_level_1 = -1 //Default 260 - Lower is better
diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm
index 21de51a0324..498b739e631 100644
--- a/code/modules/mob/living/carbon/human/species/grey.dm
+++ b/code/modules/mob/living/carbon/human/species/grey.dm
@@ -26,7 +26,6 @@
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_BODY_MARKINGS | HAS_BODYACC_COLOR | SHAVED | BALD
dietflags = DIET_HERB
- has_gender = FALSE
reagent_tag = PROCESS_ORG
flesh_color = "#a598ad"
blood_color = "#A200FF"
diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm
index 924ca49d876..fadcdf582df 100644
--- a/code/modules/mob/living/carbon/human/species/machine.dm
+++ b/code/modules/mob/living/carbon/human/species/machine.dm
@@ -34,7 +34,6 @@
default_hair = "Blue IPC Screen"
dies_at_threshold = TRUE
can_revive_by_healing = 1
- has_gender = FALSE
reagent_tag = PROCESS_SYN
male_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'
female_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'
diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm
index 853819c6bcd..c300570b0dd 100644
--- a/code/modules/mob/living/carbon/human/species/vox.dm
+++ b/code/modules/mob/living/carbon/human/species/vox.dm
@@ -30,7 +30,6 @@
flesh_color = "#808D11"
//Default styles for created mobs.
default_hair = "Short Vox Quills"
- has_gender = FALSE
default_hair_colour = "#614f19" //R: 97, G: 79, B: 25
butt_sprite = "vox"
diff --git a/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm
index f70bf5d5b42..2d4aea1d857 100644
--- a/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm
+++ b/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm
@@ -10,7 +10,6 @@
icon = 'icons/mob/human_face.dmi' // Special case, use the bald icon in human face
name = "Shaved"
icon_state = "bald"
- gender = NEUTER
species_allowed = list("Human", "Unathi", "Tajaran", "Skrell", "Vox", "Diona", "Kidan", "Greys", "Vulpkanin", "Slime People")
/datum/sprite_accessory/facial_hair/watson
diff --git a/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm b/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm
index 9cdfb017e9b..c62273ffdb1 100644
--- a/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm
+++ b/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm
@@ -563,7 +563,6 @@
/datum/sprite_accessory/hair/joestar
name = "Joestar"
icon_state = "joestar"
- gender = MALE
species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin")
/datum/sprite_accessory/hair/nitori
diff --git a/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm b/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm
index 76cbbc7284c..cdb4c487806 100644
--- a/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm
+++ b/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm
@@ -5,12 +5,10 @@
/datum/sprite_accessory/hair/skrell/skr_tentacle_m
name = "Skrell Male Tentacles"
icon_state = "male"
- gender = MALE
/datum/sprite_accessory/hair/skrell/skr_tentacle_f
name = "Skrell Female Tentacles"
icon_state = "female"
- gender = FEMALE
/datum/sprite_accessory/hair/skrell/skr_tentacleslong
name = "Long Skrell Tentacles"
@@ -23,39 +21,33 @@
/datum/sprite_accessory/hair/skrell/skr_gold_m
name = "Gold plated Skrell Male Tentacles"
icon_state = "male"
- gender = MALE
secondary_theme = "gold"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_gold_f
name = "Gold chained Skrell Female Tentacles"
icon_state = "female"
- gender = FEMALE
secondary_theme = "gold"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_clothtentacle_m
name = "Cloth draped Skrell Male Tentacles"
icon_state = "male"
- gender = MALE
secondary_theme = "cloth"
/datum/sprite_accessory/hair/skrell/skr_clothtentacle_f
name = "Cloth draped Skrell Female Tentacles"
icon_state = "female"
- gender = FEMALE
secondary_theme = "cloth"
/datum/sprite_accessory/hair/skrell/skr_gclothtentacle_m
name = "Ombre Dye, Skrell Male Tentacles"
icon_state = "male"
- gender = MALE
secondary_theme = "gradient"
/datum/sprite_accessory/hair/skrell/skr_gclothtentacle_f
name = "Ombre Dye, Skrell Female Tentacles"
icon_state = "female"
- gender = FEMALE
secondary_theme = "gradient"
/datum/sprite_accessory/hair/skrell/skr_gclothtentacleslong
@@ -71,14 +63,12 @@
/datum/sprite_accessory/hair/skrell/skr_diablacktentacle_m
name = "Black headress Skrell Male Tentacles"
icon_state = "male"
- gender = MALE
secondary_theme = "blackdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diablacktentacle_f
name = "Black headress Skrell Female Tentacles"
icon_state = "female"
- gender = FEMALE
secondary_theme = "blackdia"
no_sec_colour = 1
@@ -92,14 +82,12 @@
/datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_m
name = "Gold headress Skrell Male Tentacles"
icon_state = "male"
- gender = MALE
secondary_theme = "golddia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_f
name = "Gold headress Skrell Female Tentacles"
icon_state = "female"
- gender = FEMALE
secondary_theme = "golddia"
no_sec_colour = 1
@@ -112,14 +100,12 @@
/datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_m
name = "Silver headress Skrell Male Tentacles"
icon_state = "male"
- gender = MALE
secondary_theme = "silvdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_f
name = "Silver headress Skrell Female Tentacles"
icon_state = "female"
- gender = FEMALE
secondary_theme = "silvdia"
no_sec_colour = 1
@@ -132,14 +118,12 @@
/datum/sprite_accessory/hair/skrell/skr_festivetentacle_m
name = "Festive headress Skrell Male Tentacles"
icon_state = "male"
- gender = MALE
secondary_theme = "fest"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_festivetentacle_f
name = "Festive headress Skrell Female Tentacles"
icon_state = "female"
- gender = FEMALE
secondary_theme = "fest"
no_sec_colour = 1
diff --git a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm
index 2610cd828c5..41895d77952 100644
--- a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm
@@ -18,10 +18,14 @@
*/
/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, list/full_list)
- if(!istype(L)) L = list()
- if(!istype(male)) male = list()
- if(!istype(female)) female = list()
- if(!istype(full_list)) full_list = list()
+ if(!istype(L))
+ L = list()
+ if(!istype(male))
+ male = list()
+ if(!istype(female))
+ female = list()
+ if(!istype(full_list))
+ full_list = list()
for(var/path in subtypesof(prototype))
var/datum/sprite_accessory/D = new path()
@@ -33,9 +37,11 @@
L[D.name] = D
full_list[D.name] = D
- switch(D.gender)
- if(MALE) male[D.name] = D
- if(FEMALE) female[D.name] = D
+ switch(D.body_type)
+ if(MALE)
+ male[D.name] = D
+ if(FEMALE)
+ female[D.name] = D
else
male[D.name] = D
female[D.name] = D
@@ -45,7 +51,7 @@
var/icon //the icon file the accessory is located in
var/icon_state //the icon_state of the accessory
var/name //the preview name of the accessory
- var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations
+ var/body_type = NEUTER //Determines if the accessory will be skipped or included in random hair generations
// Restrict some styles to specific species
var/list/species_allowed = list("Human", "Slime People")
@@ -74,7 +80,6 @@
glasses_over = 1
/datum/sprite_accessory/facial_hair
- gender = MALE // barf (unless you're a dorf, dorfs dig chix /w beards :P)
icon = 'icons/mob/sprite_accessories/human/human_facial_hair.dmi'
var/over_hair
@@ -174,7 +179,6 @@
"Grey" = 'icons/mob/clothing/species/grey/underwear.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi'
)
- gender = NEUTER
/datum/sprite_accessory/underwear/nude
name = "Nude"
@@ -182,7 +186,7 @@
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
/datum/sprite_accessory/underwear/male
- gender = MALE
+ body_type = MALE
/datum/sprite_accessory/underwear/male/male_white
name = "Mens White"
@@ -233,7 +237,7 @@
icon_state = "male_mankini"
/datum/sprite_accessory/underwear/female
- gender = FEMALE
+ body_type = FEMALE
/datum/sprite_accessory/underwear/female/female_red
name = "Ladies Red"
@@ -305,7 +309,6 @@
"Grey" = 'icons/mob/clothing/species/grey/underwear.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi'
)
- gender = NEUTER
/datum/sprite_accessory/undershirt/nude
name = "Nude"
@@ -494,17 +497,17 @@
/datum/sprite_accessory/undershirt/tank_redtop
name = "Red Crop-Top"
icon_state = "tank_redtop"
- gender = FEMALE
+ body_type = FEMALE
/datum/sprite_accessory/undershirt/tank_whitetop
name = "White Crop-Top"
icon_state = "tank_whitetop"
- gender = FEMALE
+ body_type = FEMALE
/datum/sprite_accessory/undershirt/tank_midriff
name = "White Mid Tank-Top"
icon_state = "tank_midriff"
- gender = FEMALE
+ body_type = FEMALE
/datum/sprite_accessory/undershirt/tank_white
name = "White Tank-Top"
@@ -547,7 +550,6 @@
"Nian" = 'icons/mob/clothing/species/nian/underwear.dmi'
)
- gender = NEUTER
/datum/sprite_accessory/socks/nude
name = "Nude"
@@ -581,7 +583,7 @@
/datum/sprite_accessory/socks/thin_knee
name = "Knee-high Thin"
icon_state = "thin_knee"
- gender = FEMALE
+ body_type = FEMALE
/datum/sprite_accessory/socks/striped_norm
name = "Normal Striped"
@@ -606,7 +608,7 @@
/datum/sprite_accessory/socks/thin_thigh
name = "Thigh-high Thin"
icon_state = "thin_thigh"
- gender = FEMALE
+ body_type = FEMALE
/datum/sprite_accessory/socks/striped_thigh
name = "Thigh-high Striped"
@@ -619,7 +621,7 @@
/datum/sprite_accessory/socks/pantyhose
name = "Pantyhose"
icon_state = "pantyhose"
- gender = FEMALE
+ body_type = FEMALE
/datum/sprite_accessory/socks/black_fishnet
name = "Black Fishnet"
diff --git a/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm
index 5fcf93aa770..c43ea89f204 100644
--- a/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm
+++ b/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm
@@ -1,7 +1,6 @@
/datum/sprite_accessory/facial_hair/unathi
icon = 'icons/mob/sprite_accessories/unathi/unathi_facial_hair.dmi'
species_allowed = list("Unathi")
- gender = NEUTER
over_hair = 1
/datum/sprite_accessory/facial_hair/unathi/una_spines_long
diff --git a/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm
index 2f292e443e3..56381bbbf6c 100644
--- a/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm
+++ b/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm
@@ -1,7 +1,6 @@
/datum/sprite_accessory/facial_hair/vox
icon = 'icons/mob/sprite_accessories/vox/vox_facial_hair.dmi'
species_allowed = list("Vox")
- gender = NEUTER
/datum/sprite_accessory/facial_hair/vox/vox_colonel
name = "Vox Colonel Beard"
diff --git a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm
index fca910b401a..419aa7c2e76 100644
--- a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm
+++ b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm
@@ -1,7 +1,6 @@
/datum/sprite_accessory/facial_hair/vulpkanin
icon = 'icons/mob/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dmi'
species_allowed = list("Vulpkanin")
- gender = NEUTER
/datum/sprite_accessory/facial_hair/vulpkanin/vulp_earfluff
name = "Vulpkanin Earfluff"
diff --git a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm
index b32f2b4153a..27ca4286943 100644
--- a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm
+++ b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm
@@ -84,7 +84,6 @@
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_raine
name = "Raine"
icon_state = "raine"
- gender = FEMALE
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_jeremy
name = "Jeremy"
diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm
index 6d4c69f1fec..58a50911591 100644
--- a/code/modules/surgery/organs/organ_icon.dm
+++ b/code/modules/surgery/organs/organ_icon.dm
@@ -151,7 +151,7 @@
return mob_icon //Don't need to blend the above into this as it's handled in human/update_icons(). The overlays are for rendering stuff on disembodied heads.
/obj/item/organ/external/proc/get_icon_state(skeletal)
- var/gender
+ var/body
var/icon_file
var/new_icon_state
if(!dna)
@@ -159,18 +159,17 @@
new_icon_state = "[icon_name][gendered_icon ? "_f" : ""]"
else
if(gendered_icon)
- switch(dna.GetUITriState(DNA_UI_GENDER))
+ switch(dna.GetUITriState(DNA_UI_BODY_TYPE))
if(DNA_GENDER_FEMALE)
- gender = "f"
- if(DNA_GENDER_MALE)
- gender = "m"
+ body = "f"
else
- gender = "f" //Default to "f" (per line 162). Using a pick("m", "f") will make different body parts different genders for the same character.
+ body = "m"
+
if(limb_name == "head")
var/obj/item/organ/external/head/head_organ = src
head_organ.handle_alt_icon()
- new_icon_state = "[icon_name][gender ? "_[gender]" : ""]"
+ new_icon_state = "[icon_name][body ? "_[body]" : ""]"
if(skeletal)
icon_file = 'icons/mob/human_races/r_skeleton.dmi'
diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm
index 49791db04e8..afc7edd4396 100644
--- a/code/modules/tgui/modules/appearance_changer.dm
+++ b/code/modules/tgui/modules/appearance_changer.dm
@@ -214,7 +214,6 @@
data["specimen"] = owner.dna.species.name
data["gender"] = owner.gender
- data["has_gender"] = owner.dna.species.has_gender
data["change_race"] = can_change(APPEARANCE_RACE)
if(data["change_race"])
var/list/species = list()
diff --git a/config/example/config.toml b/config/example/config.toml
index 0502825cb37..fedba7ae4a3 100644
--- a/config/example/config.toml
+++ b/config/example/config.toml
@@ -145,7 +145,7 @@ ipc_screens = [
# Enable/disable the database on a whole
sql_enabled = false
# SQL version. If this is a mismatch, round start will be delayed
-sql_version = 54
+sql_version = 55
# SQL server address. Can be an IP or DNS name
sql_address = "127.0.0.1"
# SQL server port
diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger.js b/tgui/packages/tgui/interfaces/AppearanceChanger.js
index fedcce5f540..3d1805ce543 100644
--- a/tgui/packages/tgui/interfaces/AppearanceChanger.js
+++ b/tgui/packages/tgui/interfaces/AppearanceChanger.js
@@ -10,7 +10,6 @@ export const AppearanceChanger = (props, context) => {
specimen,
change_gender,
gender,
- has_gender,
change_eye_color,
change_skin_tone,
change_skin_color,
@@ -95,13 +94,13 @@ export const AppearanceChanger = (props, context) => {
selected={gender === 'female'}
onClick={() => act('gender', { gender: 'female' })}
/>
- {!has_gender && (
+ {
|