diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index bdbc34af6..f55555ce4 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -27,31 +27,32 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
//Human Overlays Indexes/////////
//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS
-#define MUTATIONS_LAYER 32 //mutations. Tk headglows, cold resistance glow, etc
-#define GENITALS_BEHIND_LAYER 31 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
-#define BODY_BEHIND_LAYER 30 //certain mutantrace features (tail when looking south) that must appear behind the body parts
-#define BODYPARTS_LAYER 29 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
-#define MARKING_LAYER 28 //Matrixed body markings because clashing with snouts?
-#define BODY_ADJ_LAYER 27 //certain mutantrace features (snout, body markings) that must appear above the body parts
-#define BODY_LAYER 26 //underwear, undershirts, socks, eyes, lips(makeup)
-#define FRONT_MUTATIONS_LAYER 25 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
-#define DAMAGE_LAYER 24 //damage indicators (cuts and burns)
-#define UNIFORM_LAYER 23
-#define ID_LAYER 22
-#define HANDS_PART_LAYER 21
-#define SHOES_LAYER 20
-#define GLOVES_LAYER 19
-#define EARS_LAYER 18
-#define BODY_TAUR_LAYER 17
-#define GENITALS_UNDER_LAYER 16
-#define SUIT_LAYER 15
-#define GLASSES_LAYER 14
-#define BELT_LAYER 13 //Possible make this an overlay of somethign required to wear a belt?
-#define SUIT_STORE_LAYER 12
-#define NECK_LAYER 11
-#define BACK_LAYER 10
-#define GENITALS_FRONT_LAYER 9
-#define HAIR_LAYER 8 //TODO: make part of head layer?
+#define MUTATIONS_LAYER 33 //mutations. Tk headglows, cold resistance glow, etc
+#define GENITALS_BEHIND_LAYER 32 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
+#define BODY_BEHIND_LAYER 31 //certain mutantrace features (tail when looking south) that must appear behind the body parts
+#define BODYPARTS_LAYER 30 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
+#define MARKING_LAYER 29 //Matrixed body markings because clashing with snouts?
+#define BODY_ADJ_LAYER 28 //certain mutantrace features (snout, body markings) that must appear above the body parts
+#define BODY_LAYER 27 //underwear, undershirts, socks, eyes, lips(makeup)
+#define FRONT_MUTATIONS_LAYER 26 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
+#define DAMAGE_LAYER 25 //damage indicators (cuts and burns)
+#define UNIFORM_LAYER 24
+#define ID_LAYER 23
+#define HANDS_PART_LAYER 22
+#define SHOES_LAYER 21
+#define GLOVES_LAYER 20
+#define EARS_LAYER 19
+#define BODY_TAUR_LAYER 18
+#define GENITALS_UNDER_LAYER 17
+#define SUIT_LAYER 16
+#define GLASSES_LAYER 15
+#define BELT_LAYER 14 //Possible make this an overlay of somethign required to wear a belt?
+#define SUIT_STORE_LAYER 13
+#define NECK_LAYER 12
+#define BACK_LAYER 11
+#define GENITALS_FRONT_LAYER 10
+#define HAIR_LAYER 9 //TODO: make part of head layer?
+#define GENITALS_FRONT_OVER_HAIR_LAYER 8
#define FACEMASK_LAYER 7
#define HEAD_LAYER 6
#define HANDCUFF_LAYER 5
@@ -59,7 +60,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
#define HANDS_LAYER 3
#define BODY_FRONT_LAYER 2
#define FIRE_LAYER 1 //If you're on fire
-#define TOTAL_LAYERS 32 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
+#define TOTAL_LAYERS 33 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
//Human Overlay Index Shortcuts for alternate_worn_layer, layers
//Because I *KNOW* somebody will think layer+1 means "above"
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 5a0999a73..ac70ef39f 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -192,7 +192,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"ipc_antenna" = "None",
"flavor_text" = "",
"silicon_flavor_text" = "",
- "ooc_text" = ""
+ "ooc_text" = "",
+ "front_genitals_over_hair" = FALSE
)
/// Security record note section
@@ -435,6 +436,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Random Body
"
dat += "Always Random Body:[be_random_body ? "Yes" : "No"]
"
dat += "
Cycle background:[bgstate]
"
+ dat += "Render front genitals over hair:[features["front_genitals_over_hair"] ? "Yes" : "No"]
"
var/use_skintones = pref_species.use_skintones
if(use_skintones)
@@ -1681,6 +1683,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
return TRUE
switch(href_list["task"])
+ if("front_genitals_over_hair")
+ features["front_genitals_over_hair"] = !features["front_genitals_over_hair"]
if("random")
switch(href_list["preference"])
if("name")
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 8c065c3ac..174cc9750 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -353,6 +353,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_human_tail"] >> features["tail_human"]
S["feature_human_ears"] >> features["ears"]
S["feature_deco_wings"] >> features["deco_wings"]
+ S["feature_front_genitals_over_hair"] >> features["feature_front_genitals_over_hair"]
S["hide_ckey"] >> hide_ckey //saved per-character
@@ -620,6 +621,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["feature_moth_fluff"] , features["moth_fluff"])
WRITE_FILE(S["feature_moth_markings"] , features["moth_markings"])
WRITE_FILE(S["feature_deco_wings"] , features["deco_wings"])
+ WRITE_FILE(S["feature_front_genitals_over_hair"], features["front_genitals_over_hair"])
//Custom names
for(var/custom_name_id in GLOB.preferences_custom_names)
diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm
index 9324c5677..dd5099cbd 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals.dm
@@ -419,6 +419,7 @@
for(var/L in relevant_layers) //Less hardcode
H.remove_overlay(L)
+ H.remove_overlay(GENITALS_FRONT_OVER_HAIR_LAYER)
//start scanning for genitals
for(var/obj/item/organ/O in H.internal_organs)
@@ -432,6 +433,8 @@
//start applying overlays
for(var/layer in relevant_layers)
var/layertext = genitals_layertext(layer)
+ if(layer == GENITALS_FRONT_LAYER && H.dna.features["front_genitals_over_hair"])
+ layer = GENITALS_FRONT_OVER_HAIR_LAYER
for(var/obj/item/organ/genital/G in genitals_to_add)
var/datum/sprite_accessory/S
size = G.size
@@ -544,7 +547,5 @@
if(LAZYLEN(standing))
H.overlays_standing[layer] = standing.Copy()
+ H.apply_overlay(layer)
standing = list()
-
- for(var/L in relevant_layers)
- H.apply_overlay(L)