diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 5f6d0248..af7e92b1 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -183,6 +183,7 @@
"cock_shape" = pick(GLOB.cock_shapes_list),
"cock_length" = 6,
"belly_size" = 1,
+ "butt_size" = 1,
"cock_girth_ratio" = COCK_GIRTH_RATIO_DEF,
"cock_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
"has_sheath" = FALSE,
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 9bc42104..42ae307a 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -134,6 +134,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"cock_shape" = "Human",
"cock_length" = 6,
"belly_size" = 1,
+ "butt_size" = 1,
"cock_girth_ratio" = COCK_GIRTH_RATIO_DEF,
"cock_color" = "fff",
"has_sheath" = FALSE,
@@ -923,8 +924,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += ""
dat += APPEARANCE_CATEGORY_COLUMN
- dat += "
Anus
"
+ dat += "Butt
"
dat += "[features["has_anus"] == TRUE ? "Yes" : "No"]"
+ if(features["has_anus"])
+ dat += "Butt Size: [features["butt_size"]]"
dat += ""
dat += ""
@@ -2347,6 +2350,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(new_bellysize)
features["belly_size"] = clamp(new_bellysize, 1, 3)
+ if("butt_size")
+ var/new_buttsize = input(user, "Butt size :\n(0-4)", "Character Preference") as num|null
+ features["butt_size"] = clamp(new_buttsize, 0, 4)
+
if("vag_shape")
var/new_shape
new_shape = input(user, "Vagina Type", "Character Preference") as null|anything in GLOB.vagina_shapes_list
@@ -2511,6 +2518,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["can_get_preg"] = FALSE
if("has_anus")
features["has_anus"] = !features["has_anus"]
+ if(features["has_anus"] == FALSE)
+ features["butt_size"] = 0
if("has_womb")
features["has_womb"] = !features["has_womb"]
if("can_get_preg")
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 32c0f9e3..71379b48 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -402,6 +402,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_has_sheath"] >> features["sheath_color"]
//belly size
S["feature_belly_size"] >> features["belly_size"]
+ //belly size
+ S["feature_butt_size"] >> features["butt_size"]
//balls features
S["feature_has_balls"] >> features["has_balls"]
S["feature_balls_color"] >> features["balls_color"]
diff --git a/hyperstation/icons/obj/genitals/butt.dmi b/hyperstation/icons/obj/genitals/butt.dmi
index cf74d737..08e60ea5 100644
Binary files a/hyperstation/icons/obj/genitals/butt.dmi and b/hyperstation/icons/obj/genitals/butt.dmi differ
diff --git a/modular_citadel/code/modules/arousal/organs/anus.dm b/modular_citadel/code/modules/arousal/organs/anus.dm
index 2652d361..5652aa84 100644
--- a/modular_citadel/code/modules/arousal/organs/anus.dm
+++ b/modular_citadel/code/modules/arousal/organs/anus.dm
@@ -1,18 +1,19 @@
/obj/item/organ/genital/anus
name = "anus"
- desc = ""
+ desc = "You see a butt."
+ icon_state = "butt"
+ icon = 'modular_citadel/icons/obj/genitals/breasts.dmi'
zone = "groin"
slot = "anus"
w_class = 3
size = 0
var/statuscheck = FALSE
+ shape = "Pair"
masturbation_verb = "massage"
- can_climax = FALSE //no poo poo 4 u
- nochange = TRUE
+ can_climax = FALSE
+
-/obj/item/organ/genital/anus/Initialize()
- . = ..()
/obj/item/organ/genital/anus/on_life()
if(QDELETED(src))
@@ -21,5 +22,15 @@
return
+/obj/item/organ/genital/anus/update_appearance()
+ var/string
+ if(owner)
+ var/mob/living/carbon/human/H = owner
+ color = "#[skintone2hex(H.skin_tone)]"
+ if(ishuman(owner))
+ icon_state = sanitize_text(string)
+ H.update_genitals()
+
+ icon_state = sanitize_text(string)
diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm
index 9cba98e8..35564daa 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals.dm
@@ -251,6 +251,8 @@
return FALSE
if(!getorganslot("anus"))
var/obj/item/organ/genital/anus/A = new
+ if(dna.features["butt_size"])
+ A.size = dna.features["butt_size"]
A.Insert(src)
if(A)
A.color = "#[skintone2hex(skin_tone)]"
@@ -443,6 +445,8 @@
S = GLOB.breasts_shapes_list[G.shape]
if(/obj/item/organ/genital/belly)
S = GLOB.breasts_shapes_list[G.shape]
+ if(/obj/item/organ/genital/anus)
+ S = GLOB.breasts_shapes_list[G.shape]
if(!S || S.icon_state == "none")
continue
@@ -461,11 +465,24 @@
//Get the icon
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext]"
colourcode = S.color_src
+
if(G.slot == "belly") //we have a different size system
genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly.dmi'
genital_overlay.icon_state = "belly_[size]"
colourcode = "belly_color"
+ if(G.slot == "anus") //we have a different size system
+ genital_overlay.icon = 'hyperstation/icons/obj/genitals/butt.dmi'
+ genital_overlay.icon_state = "butt_[size]"
+ genital_overlay.layer = -FRONT_MUTATIONS_LAYER
+ colourcode = "butt_color"
+ if(use_skintones) //butts are forced a colour, either skin tones, or main colour. how ever, mutants use a darker version, because of their body tone.
+ genital_overlay.color = "#[skintone2hex(H.skin_tone)]"
+ genital_overlay.icon_state = "butt_[size]"
+ else
+ genital_overlay.color = "#[H.dna.features["mcolor"]]"
+ genital_overlay.icon_state = "butt_[size]_m"
+
if(S.center)
genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y)
@@ -488,6 +505,7 @@
if("belly_color")
genital_overlay.color = "#[H.dna.features["belly_color"]]"
+
standing += genital_overlay
if(LAZYLEN(standing))
diff --git a/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm b/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm
index ae86c097..8fe929e8 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm
@@ -136,7 +136,7 @@
icon_state = "gaping"
name = "Gaping"
-//BREASTS BE HERE
+//BELLY BE HERE
/datum/sprite_accessory/belly
icon = 'hyperstation/icons/obj/genitals/belly.dmi'
icon_state = "belly"
@@ -145,6 +145,15 @@
color_src = "belly_color"
locked = 0
+//BUTT BE HERE
+/datum/sprite_accessory/anus
+ icon = 'hyperstation/icons/obj/genitals/butt.dmi'
+ icon_state = "butt"
+ name = "butt"
+ gender_specific = 0
+ color_src = "butt_color"
+ locked = 0
+
//BREASTS BE HERE
/datum/sprite_accessory/breasts
icon = 'modular_citadel/icons/obj/genitals/breasts_onmob.dmi'
diff --git a/modular_citadel/code/modules/client/preferences_savefile.dm b/modular_citadel/code/modules/client/preferences_savefile.dm
index e2a7383d..1b1a2997 100644
--- a/modular_citadel/code/modules/client/preferences_savefile.dm
+++ b/modular_citadel/code/modules/client/preferences_savefile.dm
@@ -63,6 +63,8 @@
WRITE_FILE(S["feature_has_sheath"], features["sheath_color"])
//belly feature
WRITE_FILE(S["feature_belly_size"], features["belly_size"])
+ //butt feature
+ WRITE_FILE(S["feature_butt_size"], features["butt_size"])
//balls features
WRITE_FILE(S["feature_has_balls"], features["has_balls"])
WRITE_FILE(S["feature_balls_color"], features["balls_color"])