diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm
index fbea043787..5cd5f273ac 100644
--- a/code/__defines/species_languages.dm
+++ b/code/__defines/species_languages.dm
@@ -1,20 +1,22 @@
// Species flags.
-#define NO_BLOOD 1 // Vessel var is not filled with blood, cannot bleed out.
-#define NO_BREATHE 2 // Cannot suffocate or take oxygen loss.
-#define NO_SCAN 4 // Cannot be scanned in a DNA machine/genome-stolen.
-#define NO_PAIN 8 // Cannot suffer halloss/recieves deceptive health indicator.
-#define NO_SLIP 16 // Cannot fall over.
-#define NO_POISON 32 // Cannot not suffer toxloss.
-#define HAS_SKIN_TONE 64 // Skin tone selectable in chargen. (0-255)
-#define HAS_SKIN_COLOR 128 // Skin colour selectable in chargen. (RGB)
-#define HAS_LIPS 256 // Lips are drawn onto the mob icon. (lipstick)
-#define HAS_UNDERWEAR 512 // Underwear is drawn onto the mob icon.
-#define IS_PLANT 1024 // Is a treeperson.
-#define IS_WHITELISTED 2048 // Must be whitelisted to play.
-#define HAS_EYE_COLOR 4096 // Eye colour selectable in chargen. (RGB)
-#define CAN_JOIN 8192 // Species is selectable in chargen.
-#define IS_RESTRICTED 16384 // Is not a core/normally playable species. (castes, mutantraces)
-// unused: 32768 - higher than this will overflow
+#define NO_BLOOD 0x1 // Vessel var is not filled with blood, cannot bleed out.
+#define NO_BREATHE 0x2 // Cannot suffocate or take oxygen loss.
+#define NO_SCAN 0x4 // Cannot be scanned in a DNA machine/genome-stolen.
+#define NO_PAIN 0x8 // Cannot suffer halloss/recieves deceptive health indicator.
+#define NO_SLIP 0x10 // Cannot fall over.
+#define NO_POISON 0x20 // Cannot not suffer toxloss.
+#define IS_PLANT 0x40 // Is a treeperson.
+#define IS_WHITELISTED 0x80 // Must be whitelisted to play.
+#define CAN_JOIN 0x100 // Species is selectable in chargen.
+#define IS_RESTRICTED 0x200 // Is not a core/normally playable species. (castes, mutantraces)
+// unused: 0x8000 - higher than this will overflow
+
+// Species appearance flags
+#define HAS_SKIN_TONE 0x1 // Skin tone selectable in chargen. (0-255)
+#define HAS_SKIN_COLOR 0x2 // Skin colour selectable in chargen. (RGB)
+#define HAS_LIPS 0x4 // Lips are drawn onto the mob icon. (lipstick)
+#define HAS_UNDERWEAR 0x8 // Underwear is drawn onto the mob icon.
+#define HAS_EYE_COLOR 0x10 // Eye colour selectable in chargen. (RGB)
// Languages.
#define LANGUAGE_HUMAN 1
@@ -36,13 +38,14 @@
#define LANGUAGE_GUTTER "Gutter"
// Language flags.
-#define WHITELISTED 1 // Language is available if the speaker is whitelisted.
-#define RESTRICTED 2 // Language can only be accquired by spawning or an admin.
-#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight.
-#define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand.
-#define HIVEMIND 16 // Broadcast to all mobs with this language.
-#define NONGLOBAL 32 // Do not add to general languages list.
-#define INNATE 64 // All mobs can be assumed to speak and understand this language. (audible emotes)
-#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message
-#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
+#define WHITELISTED 1 // Language is available if the speaker is whitelisted.
+#define RESTRICTED 2 // Language can only be acquired by spawning or an admin.
+#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight.
+#define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand.
+#define HIVEMIND 16 // Broadcast to all mobs with this language.
+#define NONGLOBAL 32 // Do not add to general languages list.
+#define INNATE 64 // All mobs can be assumed to speak and understand this language. (audible emotes)
+#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message
+#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
#define COMMON_VERBS 512 // Robots will apply regular verbs to this
+
diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm
index d053849496..edc3962cdf 100644
--- a/code/game/objects/structures/under_wardrobe.dm
+++ b/code/game/objects/structures/under_wardrobe.dm
@@ -8,7 +8,7 @@
/obj/structure/undies_wardrobe/attack_hand(mob/user as mob)
src.add_fingerprint(user)
var/mob/living/carbon/human/H = user
- if(!ishuman(user) || (H.species && !(H.species.flags & HAS_UNDERWEAR)))
+ if(!ishuman(user) || (H.species && !(H.species.appearance_flags & HAS_UNDERWEAR)))
user << "Sadly there's nothing in here for you to wear."
return 0
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 05be064416..31ff20dd1a 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -649,11 +649,11 @@ datum/preferences
dat += "Has excellent traction."
if(current_species.flags & NO_POISON)
dat += "Immune to most poisons."
- if(current_species.flags & HAS_SKIN_TONE)
+ if(current_species.appearance_flags & HAS_SKIN_TONE)
dat += "Has a variety of skin tones."
- if(current_species.flags & HAS_SKIN_COLOR)
+ if(current_species.appearance_flags & HAS_SKIN_COLOR)
dat += "Has a variety of skin colours."
- if(current_species.flags & HAS_EYE_COLOR)
+ if(current_species.appearance_flags & HAS_EYE_COLOR)
dat += "Has a variety of eye colours."
if(current_species.flags & IS_PLANT)
dat += "Has a plantlike physiology."
diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm
index 3b8e566964..1d7a2b0171 100644
--- a/code/modules/mob/living/carbon/human/appearance.dm
+++ b/code/modules/mob/living/carbon/human/appearance.dm
@@ -110,7 +110,7 @@
return 1
/mob/living/carbon/human/proc/change_skin_color(var/red, var/green, var/blue)
- if(red == r_skin && green == g_skin && blue == b_skin || !(species.flags & HAS_SKIN_COLOR))
+ if(red == r_skin && green == g_skin && blue == b_skin || !(species.appearance_flags & HAS_SKIN_COLOR))
return
r_skin = red
@@ -122,7 +122,7 @@
return 1
/mob/living/carbon/human/proc/change_skin_tone(var/tone)
- if(s_tone == tone || !(species.flags & HAS_SKIN_TONE))
+ if(s_tone == tone || !(species.appearance_flags & HAS_SKIN_TONE))
return
s_tone = tone
diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
index 905e962dd1..eb609bcf0d 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
@@ -31,7 +31,8 @@
poison_type = "oxygen"
siemens_coefficient = 0.2
- flags = CAN_JOIN | IS_WHITELISTED | NO_SCAN | HAS_EYE_COLOR
+ flags = CAN_JOIN | IS_WHITELISTED | NO_SCAN
+ appearance_flags = HAS_EYE_COLOR
blood_color = "#2299FC"
flesh_color = "#808D11"
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index aa6d4666b0..dbd34e7908 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -103,6 +103,7 @@
var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation.
var/darksight = 2 // Native darksight distance.
var/flags = 0 // Various specific features.
+ var/appearance_flags = 0 // Appearance/display related features.
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
var/primitive_form // Lesser form, if any (ie. monkey for humans)
var/greater_form // Greater form, if any, ie. human for monkeys.
diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm
index 5ba275057b..e30d43893c 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -11,7 +11,8 @@
num_alternate_languages = 2
secondary_langs = list("Sol Common")
- flags = CAN_JOIN | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
+ flags = CAN_JOIN
+ appearance_flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
/datum/species/unathi
name = "Unathi"
@@ -41,7 +42,8 @@
heat_level_2 = 480 //Default 400
heat_level_3 = 1100 //Default 1000
- flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
+ flags = CAN_JOIN | IS_WHITELISTED
+ appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#34AF10"
@@ -96,7 +98,8 @@
primitive_form = "Farwa"
- flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
+ flags = CAN_JOIN | IS_WHITELISTED
+ appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#AFA59E"
base_color = "#333333"
@@ -129,7 +132,8 @@
num_alternate_languages = 2
secondary_langs = list("Skrellian")
- flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
+ flags = CAN_JOIN | IS_WHITELISTED
+ appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
flesh_color = "#8CD7A3"
blood_color = "#1D2CBF"
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 3bb42237a8..ad4db049c6 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -325,10 +325,10 @@ var/global/list/damage_icon_parts = list()
stand_icon.Blend(base_icon,ICON_OVERLAY)
//Underwear
- if(underwear && species.flags & HAS_UNDERWEAR)
+ if(underwear && species.appearance_flags & HAS_UNDERWEAR)
stand_icon.Blend(new /icon('icons/mob/human.dmi', underwear), ICON_OVERLAY)
- if(undershirt && species.flags & HAS_UNDERWEAR)
+ if(undershirt && species.appearance_flags & HAS_UNDERWEAR)
stand_icon.Blend(new /icon('icons/mob/human.dmi', undershirt), ICON_OVERLAY)
if(update_icons)
diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm
index 4486a0fb82..a2505c467c 100644
--- a/code/modules/nano/modules/human_appearance.dm
+++ b/code/modules/nano/modules/human_appearance.dm
@@ -140,10 +140,10 @@
return owner && (flags & flag)
/datum/nano_module/appearance_changer/proc/can_change_skin_tone()
- return owner && (flags & APPEARANCE_SKIN) && owner.species.flags & HAS_SKIN_TONE
+ return owner && (flags & APPEARANCE_SKIN) && owner.species.appearance_flags & HAS_SKIN_TONE
/datum/nano_module/appearance_changer/proc/can_change_skin_color()
- return owner && (flags & APPEARANCE_SKIN) && owner.species.flags & HAS_SKIN_COLOR
+ return owner && (flags & APPEARANCE_SKIN) && owner.species.appearance_flags & HAS_SKIN_COLOR
/datum/nano_module/appearance_changer/proc/cut_and_generate_data()
// Making the assumption that the available species remain constant
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index bc9a47e25f..15362abb5e 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -19,9 +19,9 @@ var/global/list/limb_icon_cache = list()
return
if(species && human.species && species.name != human.species.name)
return
- if(!isnull(human.s_tone) && (human.species.flags & HAS_SKIN_TONE))
+ if(!isnull(human.s_tone) && (human.species.appearance_flags & HAS_SKIN_TONE))
s_tone = human.s_tone
- if(human.species.flags & HAS_SKIN_COLOR)
+ if(human.species.appearance_flags & HAS_SKIN_COLOR)
s_col = list(human.r_skin, human.g_skin, human.b_skin)
/obj/item/organ/external/proc/sync_colour_to_dna()
@@ -29,9 +29,9 @@ var/global/list/limb_icon_cache = list()
s_col = null
if(status & ORGAN_ROBOT)
return
- if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.flags & HAS_SKIN_TONE))
+ if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.appearance_flags & HAS_SKIN_TONE))
s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE)
- if(species.flags & HAS_SKIN_COLOR)
+ if(species.appearance_flags & HAS_SKIN_COLOR)
s_col = list(dna.GetUIValue(DNA_UI_SKIN_R), dna.GetUIValue(DNA_UI_SKIN_G), dna.GetUIValue(DNA_UI_SKIN_B))
/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human)
@@ -60,7 +60,7 @@ var/global/list/limb_icon_cache = list()
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
overlays |= eyes_icon
- if(owner.lip_style && (species && (species.flags & HAS_LIPS)))
+ if(owner.lip_style && (species && (species.appearance_flags & HAS_LIPS)))
var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s")
overlays |= lip_icon
mob_icon.Blend(lip_icon, ICON_OVERLAY)