From 2dc9c68a87cb7affe11f3c708a0775b2ad5c3f33 Mon Sep 17 00:00:00 2001 From: JaySparrow Date: Mon, 22 Jun 2020 15:55:24 -0500 Subject: [PATCH] Cum code part 1 Fixes production and capacity, and adds a new trait --- code/__DEFINES/citadel_defines.dm | 6 ++-- code/__DEFINES/traits.dm | 2 ++ code/modules/client/preferences.dm | 6 ++++ hyperstation/code/modules/traits.dm | 34 +++++++++++++++++++ .../code/modules/arousal/organs/testicles.dm | 24 ++++++++----- .../chemistry/reagents/enlargement.dm | 27 +++++++++++++++ tgstation.dme | 1 + 7 files changed, 88 insertions(+), 12 deletions(-) create mode 100644 hyperstation/code/modules/traits.dm diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index c5357b92..5c7c8776 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -32,9 +32,9 @@ #define BALLS_VOLUME_BASE 25 #define BALLS_VOLUME_MULT 1 -#define BALLS_SIZE_MIN 1 -#define BALLS_SIZE_DEF 2 -#define BALLS_SIZE_MAX 3 +#define BALLS_SIZE_MIN 1 //Hyper - Unchanged +#define BALLS_SIZE_DEF 8 //Changed from 2 +#define BALLS_SIZE_MAX 40 //Changed from 3 #define BALLS_SACK_SIZE_MIN 1 #define BALLS_SACK_SIZE_DEF 8 diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 8b60febd..b3eb6923 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -129,6 +129,7 @@ // item traits #define TRAIT_NODROP "nodrop" +//roundstart traits #define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" #define TRAIT_AGEUSIA "ageusia" #define TRAIT_HEAVY_SLEEPER "heavy_sleeper" @@ -160,6 +161,7 @@ #define TRAIT_CULT_EYES "cult_eyes" #define TRAIT_XRAY_VISION "xray_vision" #define TRAIT_THERMAL_VISION "thermal_vision" +//#define TRAIT_CUM_PLUS "cum_plus" // common trait sources diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index b4484ed8..78196e6a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -779,6 +779,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) else dat += "Testicles Color:
" dat += "    Change
" + //dat += "Ball Circumference: [features["balls_size"]] inch(es)" // The menu works but doesn't do anything yet. Need to figure it out. dat += "Testicles showing:[features["balls_shape"]]" dat += "Produces:[features["balls_fluid"]]" dat += APPEARANCE_CATEGORY_COLUMN @@ -1980,6 +1981,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_length) features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN) + if("balls_size") + var/new_balls_size = input(user, "Testicle circumference in inches:\n([BALLS_SIZE_MIN]-[BALLS_SIZE_MAX])", "Character Preference") as num|null + if(new_balls_size) + features["balls_size"] = max(min( round(text2num(new_balls_size)), BALLS_SIZE_MAX),BALLS_SIZE_MIN) + if("cock_shape") var/new_shape new_shape = input(user, "Penis shape:", "Character Preference") as null|anything in GLOB.cock_shapes_list diff --git a/hyperstation/code/modules/traits.dm b/hyperstation/code/modules/traits.dm new file mode 100644 index 00000000..136e0892 --- /dev/null +++ b/hyperstation/code/modules/traits.dm @@ -0,0 +1,34 @@ +#define TRAIT_CUM_PLUS "cum_plus" + + +//Jay - Coooooom +/datum/quirk/cum_plus + name = "Extra productive genitals" + desc = "Your lower bits produce more and hold more than normal." + value = 0 + mob_trait = TRAIT_CUM_PLUS + gain_text = "You feel pressure in your groin." + lose_text = "You feel a weight lifted from your groin." + medical_record_text = "Patient has greatly increased production of sexual fluids" + +/datum/quirk/cum_plus/add() + var/mob/living/carbon/M = quirk_holder + if(M.getorganslot("testicles")) + var/obj/item/organ/genital/testicles/T = M.getorganslot("testicles") + T.fluid_mult = 1.5 //Base is 1 + T.fluid_max_volume = 5 + +/datum/quirk/cum_plus/remove() + var/mob/living/carbon/M = quirk_holder + if(quirk_holder.getorganslot("testicles")) + var/obj/item/organ/genital/testicles/T = M.getorganslot("testicles") + T.fluid_mult = 1 //Base is 1 + T.fluid_max_volume = 3 //Base is 3 + +/datum/quirk/cum_plus/on_process() + var/mob/living/carbon/M = quirk_holder //If you get balls later, then this will still proc + if(M.getorganslot("testicles")) + var/obj/item/organ/genital/testicles/T = M.getorganslot("testicles") + if(T.fluid_max_volume <= 5 || T.fluid_mult <= 0.2) //INVALID EXPRESSION? + T.fluid_mult = 1.5 //Base is 0.133 + T.fluid_max_volume = 5 \ No newline at end of file diff --git a/modular_citadel/code/modules/arousal/organs/testicles.dm b/modular_citadel/code/modules/arousal/organs/testicles.dm index bf80168e..eac9832b 100644 --- a/modular_citadel/code/modules/arousal/organs/testicles.dm +++ b/modular_citadel/code/modules/arousal/organs/testicles.dm @@ -10,8 +10,9 @@ shape = "single" var/sack_size = BALLS_SACK_SIZE_DEF var/cached_size = 6 - fluid_mult = 0.133 // Set to a lower value due to production scaling with size (I.E. 6 inches the "normal" amount) - fluid_max_volume = 6 + //fluid_mult = 0.133 // Set to a lower value due to production scaling with size (I.E. 6 inches the "normal" amount) + fluid_mult = 1.0 //Defaults to 1 no matter what you do. It just does. Just gonna adapt I guess. + fluid_max_volume = 3 fluid_id = "semen" producing = TRUE can_masturbate_with = FALSE @@ -24,17 +25,19 @@ return if(!reagents || !owner) return - reagents.maximum_volume = fluid_max_volume * cached_size// fluid amount is also scaled by the size of the organ + //reagents.maximum_volume = fluid_max_volume * cached_size// fluid amount is also scaled by the size of the organ + reagents.maximum_volume = fluid_max_volume * ((cached_size / 2) + 1) * ((size / 2) + 1) * fluid_mult //Hyper - New calculation for more dynamic fluid levels. I can't believe I typed that. if(fluid_id && producing) if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank. fluid_rate = 0.1 else - fluid_rate = CUM_RATE * cached_size * fluid_mult // fluid rate is scaled by the size of the organ + //fluid_rate = CUM_RATE * cached_size * fluid_mult // fluid rate is scaled by the size of the organ + fluid_rate = ((CUM_RATE / 5) * (cached_size / 3) * (size / 4) * fluid_mult) / 10 //Hyper - Production was way too high by default. This should drop it back down, but allow for it to get really high generate_cum() /obj/item/organ/genital/testicles/proc/generate_cum() - reagents.maximum_volume = fluid_max_volume - if(reagents.total_volume >= reagents.maximum_volume) + //reagents.maximum_volume = fluid_max_volume //This is the line that broke cum for so long + if(reagents.total_volume >= reagents.maximum_volume - 0.1) //Hyper - Check for it being close to the maximum. It sometimes doesn't proc due to a rounding error. if(!sent_full_message) send_full_message() sent_full_message = TRUE @@ -66,11 +69,14 @@ /obj/item/organ/genital/testicles/update_appearance() switch(size) - if(0.1 to 1) + //if(0.1 to 1) //Hyper - Change the displayed ball sizes + if(0.1 to 3) size_name = "average" - if(1.1 to 2) + //if(1.1 to 2) + if(3.1 to 8) size_name = "enlarged" - if(2.1 to INFINITY) + //if(2.1 to INFINITY) + if(8.1 to INFINITY) size_name = "engorged" else size_name = "nonexistant" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm index 6f8954f7..3a2928ec 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm @@ -251,6 +251,7 @@ return var/mob/living/carbon/human/H = M var/obj/item/organ/genital/penis/P = M.getorganslot("penis") + var/obj/item/organ/genital/testicles/T = M.getorganslot("testicles") //Hyper Change if(!P)//They do have a preponderance for escapism, or so I've heard. //If they have Acute hepatic pharmacokinesis, then route processing though liver. @@ -273,8 +274,33 @@ nP.prev_length = 1 M.reagents.remove_reagent(id, 5) P = nP + + if(!T)//Hyper change// Adds testicles if there are none. + + //If they have Acute hepatic pharmacokinesis, then route processing though liver. + if(HAS_TRAIT(M, TRAIT_PHARMA)) + var/obj/item/organ/liver/L = M.getorganslot("liver") + if(L) + L.swelling+= 0.05 + return..() + else + M.adjustToxLoss(1) + return..() + + //otherwise proceed as normal + var/obj/item/organ/genital/testicles/nT = new + nT.Insert(M) + if(nT) + nT.size = BALLS_SIZE_MIN + to_chat(M, "Your groin feels warm, as you feel two sensitive orbs taking shape below.") + nT.cached_size = 1 + nT.sack_size = BALLS_SACK_SIZE_DEF + T = nT P.cached_length = P.cached_length + 0.1 + //Hyper change// Increase ball size too + T.size = T.size + 0.1 + if (P.cached_length >= 20.5 && P.cached_length < 21) if(H.w_uniform || H.wear_suit|| H.arousalloss > 33) //Hyper change// Check for a flag before we remove clothes. @@ -286,6 +312,7 @@ to_chat(M, "Your cock begins to strain against your clothes tightly!") M.apply_damage(1, BRUTE, target) + T.update() //Hyper change - Make the ball size update P.update() ..() diff --git a/tgstation.dme b/tgstation.dme index 9bd0c7b8..e80c01fc 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2885,6 +2885,7 @@ #include "hyperstation\code\mobs\hugbot.dm" #include "hyperstation\code\mobs\mimic.dm" #include "hyperstation\code\mobs\werewolf.dm" +#include "hyperstation\code\modules\traits.dm" #include "hyperstation\code\modules\antagonists\werewolf\werewolf.dm" #include "hyperstation\code\modules\clothing\head.dm" #include "hyperstation\code\modules\crafting\recipes.dm"