diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm
index b27d2c18ab..04715aad6c 100644
--- a/code/__DEFINES/citadel_defines.dm
+++ b/code/__DEFINES/citadel_defines.dm
@@ -79,6 +79,8 @@
#define BELLY_SIZE_DEF 1
#define BELLY_SIZE_MAX 10
+#define DEF_ANUS_SHAPE "donut"
+
//visibility toggles defines to avoid errors typos code errors.
#define GEN_VISIBLE_ALWAYS "Always visible"
#define GEN_VISIBLE_NO_CLOTHES "Hidden by clothes"
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 292b501c1c..8918fddc6e 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -224,6 +224,7 @@
//SPLURT's anus stuff
"has_anus" = FALSE,
"anus_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
+ "anus_shape" = DEF_ANUS_SHAPE,
//SPLURT's anus stuff
"balls_visibility" = GEN_VISIBLE_NO_UNDIES,
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index e6a2b2e670..fc482e4828 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -215,6 +215,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"has_belly" = FALSE,
"has_anus" = FALSE,
"anus_color" = "ffffff",
+"anus_shape" = DEF_ANUS_SHAPE,
"belly_color" = "ffffff",
"belly_size" = BELLY_SIZE_DEF,
"balls_visibility" = GEN_VISIBLE_NO_UNDIES,
@@ -985,6 +986,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "[SKINTONE2HEX(skin_tone)](Skin tone overriding)
"
else
dat += "#[features["anus_color"]] Change
"
+ dat += "Butthole Shape: [features["anus_shape"]]"
dat += "Butthole Visibility:[features["anus_visibility"]]"
dat += "Egg Stuffing:[features["anus_stuffing"] == TRUE ? "Yes" : "No"]"
dat += ""
@@ -2875,6 +2877,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else
to_chat(user, "Invalid color. Your color is not bright enough.")
+ if("anus_shape")
+ var/new_shape
+ new_shape = input(user, "Butthole Shape", "Character Preference") as null|anything in GLOB.anus_shapes_list
+ if(new_shape)
+ features["anus_shape"] = new_shape
+
if("belly_size")
var/min_belly = CONFIG_GET(number/belly_min_size_prefs)
var/max_belly = CONFIG_GET(number/belly_max_size_prefs)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index d7a2064ffb..214b6d94b9 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -764,6 +764,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
"belly_color" = "ffffff",
"has_anus" = FALSE,
"anus_color" = "ffffff",
+"anus_shape" = DEF_ANUS_SHAPE,
"balls_visibility" = GEN_VISIBLE_NO_UNDIES,
"breasts_visibility"= GEN_VISIBLE_NO_UNDIES,
"cock_visibility" = GEN_VISIBLE_NO_UNDIES,
@@ -963,8 +964,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_balls_size"] >> features["balls_size"]
S["feature_balls_visibility"] >> features["balls_visibility"]
S["feature_balls_fluid"] >> features["balls_fluid"]
- S["feature_womb_fluid"] >> features["womb_fluid"]
- S["feature_balls_shape"] >> features["balls_shape"]
//breasts features
S["feature_has_breasts"] >> features["has_breasts"]
S["feature_breasts_size"] >> features["breasts_size"]
@@ -980,6 +979,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_vag_visibility"] >> features["vag_visibility"]
//womb features
S["feature_has_womb"] >> features["has_womb"]
+ S["feature_womb_fluid"] >> features["womb_fluid"]
//butt features
S["feature_has_butt"] >> features["has_butt"]
S["feature_butt_color"] >> features["butt_color"]
@@ -993,6 +993,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//anus features
S["feature_has_anus"] >> features["has_anus"]
S["feature_anus_color"] >> features["anus_color"]
+ S["feature_anus_shape"] >> features["anus_shape"]
S["feature_anus_visibility"] >> features["anus_visibility"]
// Flavor texts, Made into a standard.
@@ -1160,6 +1161,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["cock_shape"] = sanitize_inlist(features["cock_shape"], GLOB.cock_shapes_list, DEF_COCK_SHAPE)
features["balls_shape"] = sanitize_inlist(features["balls_shape"], GLOB.balls_shapes_list, DEF_BALLS_SHAPE)
features["vag_shape"] = sanitize_inlist(features["vag_shape"], GLOB.vagina_shapes_list, DEF_VAGINA_SHAPE)
+ features["anus_shape"] = sanitize_inlist(features["anus_shape"], GLOB.anus_shapes_list, DEF_ANUS_SHAPE)
features["breasts_color"] = sanitize_hexcolor(features["breasts_color"], 6, FALSE, "FFFFFF")
features["cock_color"] = sanitize_hexcolor(features["cock_color"], 6, FALSE, "FFFFFF")
features["balls_color"] = sanitize_hexcolor(features["balls_color"], 6, FALSE, "FFFFFF")
@@ -1343,7 +1345,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["feature_balls_size"], features["balls_size"])
WRITE_FILE(S["feature_balls_visibility"], features["balls_visibility"])
WRITE_FILE(S["feature_balls_stuffing"], features["balls_stuffing"])
- WRITE_FILE(S["feature_balls_shape"], features["balls_shape"])
WRITE_FILE(S["feature_balls_fluid"], features["balls_fluid"])
WRITE_FILE(S["feature_has_breasts"], features["has_breasts"])
@@ -1379,6 +1380,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["feature_has_anus"], features["has_anus"])
WRITE_FILE(S["feature_anus_color"], features["anus_color"])
WRITE_FILE(S["feature_anus_visibility"], features["anus_visibility"])
+ WRITE_FILE(S["feature_anus_shape"], features["anus_shape"])
WRITE_FILE(S["feature_anus_stuffing"], features["anus_stuffing"])
WRITE_FILE(S["feature_inert_eggs"], features["inert_eggs"])
diff --git a/modular_splurt/code/modules/arousal/genitals_sprite_accessories.dm b/modular_splurt/code/modules/arousal/genitals_sprite_accessories.dm
index e9d7138b4e..e7674470f4 100644
--- a/modular_splurt/code/modules/arousal/genitals_sprite_accessories.dm
+++ b/modular_splurt/code/modules/arousal/genitals_sprite_accessories.dm
@@ -35,6 +35,10 @@
name = "anus"
color_src = "anus_color"
-/datum/sprite_accessory/anus/donut
- icon_state = "donut"
- name = "donut"
+/datum/sprite_accessory/anus/gape
+ icon_state = DEF_ANUS_SHAPE
+ name = DEF_ANUS_SHAPE
+
+/datum/sprite_accessory/anus/squished
+ icon_state = "squished"
+ name = "squished"
diff --git a/modular_splurt/code/modules/arousal/organs/anus.dm b/modular_splurt/code/modules/arousal/organs/anus.dm
index 2645d91f78..08a5e1276d 100644
--- a/modular_splurt/code/modules/arousal/organs/anus.dm
+++ b/modular_splurt/code/modules/arousal/organs/anus.dm
@@ -20,9 +20,11 @@
update_appearance()
/obj/item/organ/genital/anus/update_appearance(updates)
- var/lowershape = lowertext(shape)
var/u_His = owner?.p_their() || "their"
+ var/datum/sprite_accessory/anus/S = GLOB.anus_shapes_list[shape]
+ var/lowershape = lowertext(S?.icon_state || DEF_ANUS_SHAPE)
+
desc = "You see [u_His] squishy [lowershape] pucker parting [u_His] asscheeks"
icon_state = "anus_[lowershape]_[size]"
@@ -43,6 +45,7 @@
color = SKINTONE2HEX(H.skin_tone)
else
color = "#[D.features["anus_color"]]"
+ shape = D.features["anus_shape"]
toggle_visibility(D.features["anus_visibility"], FALSE)
if(D.features["anus_stuffing"])
toggle_visibility(GEN_ALLOW_EGG_STUFFING, FALSE)
diff --git a/modular_splurt/icons/obj/genitals/anus_onmob.dmi b/modular_splurt/icons/obj/genitals/anus_onmob.dmi
index 6449cf0e96..b46a582544 100644
Binary files a/modular_splurt/icons/obj/genitals/anus_onmob.dmi and b/modular_splurt/icons/obj/genitals/anus_onmob.dmi differ