diff --git a/code/__DEFINES/hyper_arousal.dm b/code/__DEFINES/hyper_arousal.dm
new file mode 100644
index 000000000..bedb5c860
--- /dev/null
+++ b/code/__DEFINES/hyper_arousal.dm
@@ -0,0 +1,8 @@
+#define BELLY_MIN_SIZE 0
+#define BELLY_MAX_SIZE 8
+
+#define BELLY_STRAIN_SIZE 3 // for flavor text
+#define BELLY_STRETCH_SIZE 6 // for flavor text
+
+#define BUTT_MIN_SIZE 0
+#define BUTT_MAX_SIZE 5
\ No newline at end of file
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 922c1be3f..2bd8d84fe 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -2430,14 +2430,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
to_chat(user,"Invalid color. Your color is not bright enough.")
if("belly_size")
- var/new_bellysize = input(user, "Belly size :\n(1-8)", "Character Preference") as num|null
- if(new_bellysize)
- features["belly_size"] = clamp(new_bellysize, 1, 8)
+ var/new_bellysize = input(user, "Belly size :\n([BELLY_MIN_SIZE]-[BELLY_MAX_SIZE])", "Character Preference") as num|null
+ if(new_bellysize != null)
+ features["belly_size"] = clamp(new_bellysize, BELLY_MIN_SIZE, BELLY_MAX_SIZE)
if("butt_size")
- var/new_buttsize = input(user, "Butt size :\n(0-5)", "Character Preference") as num|null
- if(new_buttsize)
- features["butt_size"] = clamp(new_buttsize, 0, 5)
+ var/new_buttsize = input(user, "Butt size :\n([BUTT_MIN_SIZE]-[BUTT_MAX_SIZE])", "Character Preference") as num|null
+ if(new_buttsize != null)
+ features["butt_size"] = clamp(new_buttsize, BUTT_MIN_SIZE, BUTT_MAX_SIZE)
if("vag_shape")
var/new_shape
@@ -2572,7 +2572,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(features["has_belly"] == FALSE)
features["hide_belly"] = FALSE
features["inflatable_belly"] = FALSE
- features["belly_size"] = 1
+ features["belly_size"] = 0
if("inflatable_belly")
features["inflatable_belly"] = !features["inflatable_belly"]
diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm
index ff7725ddb..509438813 100644
--- a/hyperstation/code/modules/arousal/arousalhud.dm
+++ b/hyperstation/code/modules/arousal/arousalhud.dm
@@ -211,13 +211,7 @@
return
if(href_list["shrink_belly"])
- var/obj/item/organ/genital/belly/E = usr.getorganslot("belly")
- if(E.size > 0)
- to_chat(usr, "You feel your belly diminish.")
- E.size -= 1
- H.update_genitals()
- else
- to_chat(usr, "Your belly is already at the minimum size! ")
+ H.shrink_belly(1)
if(href_list["removecondom"])
H.menuremovecondom()
diff --git a/hyperstation/code/modules/arousal/expansion.dm b/hyperstation/code/modules/arousal/expansion.dm
new file mode 100644
index 000000000..5000c16d3
--- /dev/null
+++ b/hyperstation/code/modules/arousal/expansion.dm
@@ -0,0 +1,35 @@
+/mob/living/carbon/proc/expand_belly(expansion = 1)
+ var/obj/item/organ/genital/belly/_belly = getorganslot("belly")
+ if(!expansion || !_belly || !_belly.inflatable)
+ return
+ var/original_size = _belly.size
+ _belly.size = clamp(_belly.size + expansion, BELLY_MIN_SIZE, BELLY_MAX_SIZE)
+ if(_belly.size == original_size)
+ return
+ var/_verb = "expand"
+ switch(_belly.size)
+ if(BELLY_MAX_SIZE to INFINITY)
+ _verb = "stretch to its limit"
+ if(BELLY_STRETCH_SIZE to BELLY_MAX_SIZE)
+ _verb = "stretch"
+ if(BELLY_STRAIN_SIZE to BELLY_STRETCH_SIZE)
+ _verb = "strain"
+ to_chat(src, "You feel your belly [_verb].")
+ _belly.update()
+
+
+/mob/living/carbon/proc/shrink_belly(shrinkage = 1)
+ var/obj/item/organ/genital/belly/_belly = getorganslot("belly")
+ if(!shrinkage ||!_belly || !_belly.inflatable)
+ return
+ var/original_size = _belly.size
+ _belly.size = clamp(_belly.size - shrinkage, BELLY_MIN_SIZE, BELLY_MAX_SIZE)
+ if(_belly.size == original_size)
+ return
+ var/_verb = "diminish"
+ var/_class = "userlove"
+ if(_belly.size == BELLY_MIN_SIZE)
+ _verb = "can't shrink anymore"
+ _class = "warning"
+ to_chat(src, "You feel your belly [_verb].")
+ _belly.update()
\ No newline at end of file
diff --git a/hyperstation/icons/obj/genitals/belly.dmi b/hyperstation/icons/obj/genitals/belly.dmi
index 8c3bae32f..3324744b7 100644
Binary files a/hyperstation/icons/obj/genitals/belly.dmi and b/hyperstation/icons/obj/genitals/belly.dmi differ
diff --git a/hyperstation/icons/obj/genitals/butt.dmi b/hyperstation/icons/obj/genitals/butt.dmi
index e4b8f5c6b..55f746287 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/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm
index c8d4ea191..5e37cbbe7 100644
--- a/modular_citadel/code/modules/arousal/arousal.dm
+++ b/modular_citadel/code/modules/arousal/arousal.dm
@@ -437,17 +437,9 @@
if(!remote && !in_range(src, L))
return
if(do_after(src, mb_time, target = src))
-
- if(!spillage) //hyper inflation
- var/obj/item/organ/genital/belly/B = L.getorganslot("belly")
- if(B)
- if(B.inflatable && total_fluids > 80) //requires a big cumshot to expand.
- if(B.size < 3)
- B.size += 1
- to_chat(L, "You feel your belly expand.")
- else
- to_chat(L, "You feel your belly strain.")
-
+ var/mob/living/carbon/H = L
+ if(!spillage && total_fluids > 80) //hyper inflation; requires a big cumshot to expand
+ H.expand_belly(1)
var/obj/item/organ/genital/penis/P = G
if (P.condom)//condomed.
src.condomclimax()
@@ -673,8 +665,6 @@
var/mob/living/carbon/C = check_target
if(C.exposed_genitals.len || C.is_groin_exposed() || C.is_chest_exposed()) //Are they naked enough?
partner = C
- else //A cat is fine too
- partner = check_target
if(partner) //Did they pass the clothing checks?
mob_climax_partner(G, partner, mb_time = 0) //Instant climax due to forced
continue //You've climaxed once with this organ, continue on
diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm
index 394fb0aa4..bdf4d7856 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals.dm
@@ -229,7 +229,7 @@
if(!getorganslot("belly"))
var/obj/item/organ/genital/belly/B = new
if(dna.features["belly_size"])
- B.size = dna.features["belly_size"]-1
+ B.size = dna.features["belly_size"]
B.Insert(src)
if(B)
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
@@ -478,39 +478,39 @@
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext]"
colourcode = S.color_src
- //sizecheck added to prevent rendering blank icons
- if(G.slot == "belly" && G.size > 0) //we have a different size system
-
+ if(G.slot == "belly")
+ size = round(size)
genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly.dmi'
- genital_overlay.icon_state = "belly_[round(size)]_OTHER"
+ genital_overlay.icon_state = "belly_[size]_OTHER"
colourcode = "belly_color"
//creates directional layering by rendering twice.
genital_overlay_directional.icon = 'hyperstation/icons/obj/genitals/belly.dmi' //Added directionals for larger bellies!
- genital_overlay_directional.icon_state = "belly_[round(size)]_NORTH"
+ genital_overlay_directional.icon_state = "belly_[size]_NORTH"
genital_overlay_directional.layer = -GENITALS_BEHIND_LAYER
- //sizecheck added to prevent rendering blank icons
- if(G.slot == "anus" && G.size > 0) //we have a different size system
-
+ if(G.slot == "anus")
+ size = round(size)
genital_overlay.icon = 'hyperstation/icons/obj/genitals/butt.dmi'
- genital_overlay.icon_state = "butt_[round(size)]_OTHER"
+ genital_overlay.icon_state = "butt_[size]_OTHER"
genital_overlay.layer = -ID_LAYER //in front of suit, behind bellies.
//creates directional layering by rendering twice. North has higher layer priority to occlude hands.
genital_overlay_directional.icon = 'hyperstation/icons/obj/genitals/butt.dmi'
- genital_overlay_directional.icon_state = "butt_[round(size)]_NORTH"
+ genital_overlay_directional.icon_state = "butt_[size]_NORTH"
genital_overlay_directional.layer = -NECK_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.
+ if(use_skintones && H.dna.features["genitals_use_skintone"])
+ //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_[round(size)]_OTHER"
- genital_overlay_directional.icon_state = "butt_[round(size)]_NORTH"
+ genital_overlay.icon_state = "butt_[size]_OTHER"
+ genital_overlay_directional.icon_state = "butt_[size]_NORTH"
else
genital_overlay.color = "#[H.dna.features["mcolor"]]"
- genital_overlay.icon_state = "butt_[round(size)]_OTHER_m"
- genital_overlay_directional.icon_state = "butt_[round(size)]_NORTH_m"
+ genital_overlay.icon_state = "butt_[size]_OTHER_m"
+ genital_overlay_directional.icon_state = "butt_[size]_NORTH_m"
if(S.center)
@@ -521,21 +521,10 @@
if (colourtint)
genital_overlay.color = "#[colourtint]"
else
- switch(colourcode)
- if("cock_color")
- genital_overlay.color = "#[H.dna.features["cock_color"]]"
- if (colourtint)
- genital_overlay.color = "#[colourtint]"
- if("balls_color")
- genital_overlay.color = "#[H.dna.features["balls_color"]]"
- if("breasts_color")
- genital_overlay.color = "#[H.dna.features["breasts_color"]]"
- if("vag_color")
- genital_overlay.color = "#[H.dna.features["vag_color"]]"
- if("belly_color")
- genital_overlay.color = "#[H.dna.features["belly_color"]]"
- if("butt_color")
- genital_overlay.color = "#[H.dna.features["butt_color"]]"
+ if(colourcode != MUTCOLORS)
+ genital_overlay.color = "#[H.dna.features[colourcode]]"
+ if(colourcode == "cock_color" && colourtint)
+ genital_overlay.color = "#[colourtint]"
standing += genital_overlay
@@ -549,7 +538,7 @@
if (colourtint)
genital_overlay_directional.color = "#[colourtint]"
else
- genital_overlay_directional.color = "#[H.dna.features["butt_color"]]"
+ genital_overlay_directional.color = "#[H.dna.features[colourcode]]"
standing += genital_overlay_directional
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
index e0d8e8417..95f58780c 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
@@ -412,7 +412,7 @@
B = nB
//If they have & opt in, increase size.
if(H.client?.prefs.cit_toggles & ASS_ENLARGEMENT)
- if(B.size < 5) //just make sure you dont break sprites
+ if(B.size < BUTT_MAX_SIZE) //just make sure you dont break sprites
B.size = B.size + 0.05
B.update()
..()
diff --git a/tgstation.dme b/tgstation.dme
index 1d242e4fc..b134bc3a4 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -50,6 +50,7 @@
#include "code\__DEFINES\food.dm"
#include "code\__DEFINES\footsteps.dm"
#include "code\__DEFINES\hud.dm"
+#include "code\__DEFINES\hyper_arousal.dm"
#include "code\__DEFINES\integrated_electronics.dm"
#include "code\__DEFINES\interaction_flags.dm"
#include "code\__DEFINES\inventory.dm"
@@ -3141,6 +3142,7 @@
#include "hyperstation\code\modules\antagonists\werewolf\werewolf.dm"
#include "hyperstation\code\modules\arousal\arousalhud.dm"
#include "hyperstation\code\modules\arousal\creampie.dm"
+#include "hyperstation\code\modules\arousal\expansion.dm"
#include "hyperstation\code\modules\busy_space\air_traffic.dm"
#include "hyperstation\code\modules\busy_space\atc_controller.dm"
#include "hyperstation\code\modules\busy_space\loremaster.dm"