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"