From 7531da14916e87e00da6c50fe390f1f5fde9dfb8 Mon Sep 17 00:00:00 2001 From: sarcoph <83266791+sarcoph@users.noreply.github.com> Date: Thu, 5 May 2022 18:12:53 -0800 Subject: [PATCH] cleaning up mob_climax_partner --- .../code/modules/arousal/arousalhud.dm | 13 +-- hyperstation/code/obj/fleshlight.dm | 2 +- .../code/modules/arousal/arousal.dm | 95 +++++++++++-------- 3 files changed, 58 insertions(+), 52 deletions(-) diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm index 586e6608c..318edefd0 100644 --- a/hyperstation/code/modules/arousal/arousalhud.dm +++ b/hyperstation/code/modules/arousal/arousalhud.dm @@ -378,10 +378,10 @@ obj/screen/arousal/proc/kiss() to_chat(src, "You cannot climax without choosing genitals.") return src << browse(null, "window=arousal") // close arousal window - mob_climax_partner_spillage(picked_organ, partner, impreg=FALSE) + mob_climax_inside_spillage(picked_organ, partner, impreg=FALSE) -/mob/living/carbon/human/proc/climaxover(mob/living/carbon/human/partner) +/mob/living/carbon/human/proc/climaxover(atom/partner) var/obj/item/organ/genital/picked_organ picked_organ = pick_climax_genitals() if(!picked_organ) @@ -391,13 +391,6 @@ obj/screen/arousal/proc/kiss() if(!partner || isnoncarbon(partner)) to_chat(src, "You cannot do this alone.") return - var/obj/item/organ/genital/penis/P = picked_organ - if(P.condom) - to_chat(src, "You cannot do this action with a condom on.") - return - if(P.sounding) - to_chat(src, "You cannot do this action with a sounding in.") - return mob_climax_cover(picked_organ, partner) @@ -435,7 +428,7 @@ obj/screen/arousal/proc/kiss() to_chat(src, "You cannot impregnate someone with a sounding rod in.") return src << browse(null, "window=arousal") //alls fine, we can close the window now. - mob_climax_partner_spillage(picked_organ, partner, impreg=TRUE) + mob_climax_inside_spillage(picked_organ, partner, impreg=TRUE) /mob/living/carbon/human/proc/cumcontainer(mob/living/T) diff --git a/hyperstation/code/obj/fleshlight.dm b/hyperstation/code/obj/fleshlight.dm index 3d5c7ab48..0c640b23f 100644 --- a/hyperstation/code/obj/fleshlight.dm +++ b/hyperstation/code/obj/fleshlight.dm @@ -151,7 +151,7 @@ if(user.can_orgasm()) var/mob/living/carbon/human/O = user var/impreg_chance = target_genital.name == "vagina" && !P.condom && !P.sounding - if(O.mob_climax_partner(P, target, spillage=FALSE, remote=TRUE) && impreg_chance) + if(O.mob_climax_in_partner(P, target, spillage=FALSE, remote=TRUE) && impreg_chance) target.impregnate(by=O) if("Lick") holder.visible_message("[holder] licks into [src].",\ diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm index 8d2de3d34..f078e9e19 100644 --- a/modular_citadel/code/modules/arousal/arousal.dm +++ b/modular_citadel/code/modules/arousal/arousal.dm @@ -317,13 +317,20 @@ /mob/living/carbon/human/proc/mob_climax_cover(obj/item/organ/genital/genital, atom/partner, mb_time=3 SECONDS) + if(istype(genital, /obj/item/organ/genital/penis)) + var/obj/item/organ/genital/penis/P = genital + if(P.condom) + to_chat(src, "You cannot do this action with a condom on.") + return + if(P.sounding) + to_chat(src, "You cannot do this action with a sounding in.") + return var/total_fluids = 0 var/datum/reagents/fluid_source = genital.get_fluid_source() if(!fluid_source) to_chat(src, "Your [genital.name] is unable to produce it's own fluids, it's missing the organs for it.") return total_fluids = fluid_source.total_volume - var/mob/living/carbon/partner_carbon = partner if(mb_time) src.visible_message("[src] is about to climax with [partner]!", \ "You're about to climax with [partner]!", \ @@ -335,16 +342,19 @@ var/transferred_units = total_fluids * genital.fluid_transfer_factor fluid_source.trans_to(partner, transferred_units) total_fluids -= transferred_units - if(total_fluids > 80 && iscarbon(partner)) // now thats a big cum! - partner_carbon.add_cum_overlay("large") if(total_fluids > 5) fluid_source.reaction(partner.loc, TOUCH, 1, 0) - var/mob/living/carbon/human/H = partner - if(H) - H.cumdrip_rate += rand(5,10) fluid_source.clear_reagents() - if(iscarbon(partner)) - partner_carbon.add_cum_overlay("normal") + if(ismob(partner)) + var/mob/living/carbon/partner_carbon = partner + if(partner_carbon) + var/cum_overlay = "normal" + if(total_fluids > 80) + cum_overlay = "large" + partner_carbon.add_cum_overlay(cum_overlay) + var/mob/living/carbon/human/partner_human = partner_carbon + if(partner_human) + partner_human.cumdrip_rate += rand(5,10) else partner.add_cum_overlay() src.visible_message("[src] climaxes over [partner], using [p_their()] [genital.name]!", \ @@ -354,7 +364,7 @@ setArousalLoss(min_arousal) -/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, atom/partner, spillage=TRUE, remote=FALSE, mb_time = 3 SECONDS) +/mob/living/carbon/human/proc/mob_climax_in_partner(obj/item/organ/genital/G, mob/living/carbon/partner, spillage=TRUE, remote=FALSE, mb_time=3 SECONDS) if(isnoncarbon(partner)) // deny animals return FALSE var/total_fluids = 0 @@ -363,14 +373,12 @@ to_chat(src, "Your [G.name] is unable to produce it's own fluids, it's missing the organs for it.") return FALSE total_fluids = fluid_source.total_volume + var/partner_text = partner if(remote) - src.visible_message("[src] is about to climax with someone!", \ - "You're about to climax with someone!", \ - "You're preparing to climax with something!") - else if(mb_time) - src.visible_message("[src] is about to climax with [partner]!", \ - "You're about to climax with [partner]!", \ - "You're preparing to climax with something!") + partner_text = "someone" + src.visible_message("[src] is about to climax with [partner_text]!", \ + "You're about to climax with [partner_text]!", \ + "You're preparing to climax with something!") if(!do_after(src, mb_time, target = src)) return FALSE if(!remote && !in_range(src, partner)) @@ -384,29 +392,26 @@ if(H) H.cumdrip_rate += rand(5,10) fluid_source.clear_reagents() - src.visible_message("[src] climaxes with [partner][spillage ? ", overflowing and spilling":""], using [p_their()] [G.name]!",\ - "You orgasm with [partner][spillage ? ", spilling out of them":""], using your [G.name].",\ - "You have climaxed with someone[spillage ? ", spilling out of them":""], using your [G.name].") + src.visible_message("[src] climaxes with [partner], overflowing and spilling, using [p_their()] [G.name]!",\ + "You orgasm with [partner], spilling out of them, using your [G.name].",\ + "You have climaxed with someone, spilling out of them, using your [G.name].") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) SEND_SIGNAL(partner, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) else //knots, portal fleshlights, and other non-spilling orgasms - var/mob/living/carbon/H = partner - 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() - else + var/can_inflate = TRUE + if(istype(G, /obj/item/organ/genital/penis)) + var/obj/item/organ/genital/penis/P = G + if(P.condom)//condomed. + can_inflate = FALSE + src.condomclimax() + if(can_inflate) fluid_source.trans_to(partner, total_fluids) - total_fluids = 0 - if(!remote) - src.visible_message("[src] climaxes with [partner], [p_their()] [G.name] spilling nothing!", \ - "You ejaculate with [partner], your [G.name] spilling nothing.", \ - "You have climaxed inside someone, your [G.name] spilling nothing.") - else - src.visible_message("[src] climaxes with someone, using [p_their()] [G.name]!", \ - "You ejaculate with someone, using your [G.name].", \ - "You have climaxed inside someone, using your [G.name].") + if(!spillage && total_fluids > 80) // hyper - cum inflation, ONLY if not wearing a condom + partner.expand_belly(1) + src.visible_message("[src] climaxes with [partner_text], [p_their()] [G.name] spilling nothing!", \ + "You ejaculate with [partner_text], your [G.name] spilling nothing.", \ + "You have climaxed inside someone, your [G.name] spilling nothing.") + if(remote) to_chat(partner, "You feel someone ejaculate inside you.") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) SEND_SIGNAL(partner, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) @@ -422,15 +427,23 @@ return TRUE -/mob/living/carbon/human/proc/mob_climax_partner_spillage(obj/item/organ/genital/picked_organ, mob/living/carbon/partner, impreg = FALSE) +/** + * User chooses whether or not their climax will spill outside of their partner. + * + * Arguments: + * - `picked_organ`: The user's genital being used. + * - `partner`: This mob's partner for the interaction. + * - `impreg`: Whether or not this interaction has a chance to impregnate. + */ +/mob/living/carbon/human/proc/mob_climax_inside_spillage(obj/item/organ/genital/picked_organ, mob/living/carbon/partner, impreg = FALSE) var/obj/item/organ/genital/penis/_penis = picked_organ if(picked_organ.name != "penis" || _penis.sounding || _penis.condom) - mob_climax_partner(picked_organ, partner, spillage=FALSE) + mob_climax_in_partner(picked_organ, partner, spillage=FALSE) return var/_question = "Would your fluids spill outside?" var/_title = "Choose overflowing option" var/spillage = input(src, _question, _title, "Yes") as anything in list("Yes", "No") - if(mob_climax_partner(picked_organ, partner, spillage == "Yes") && impreg) + if(mob_climax_in_partner(picked_organ, partner, spillage == "Yes") && impreg) partner.impregnate(by=src) @@ -679,12 +692,12 @@ var/impreg_question = "Would this action carry the risk of pregnancy?" var/impreg_title = "Choose a option" impreg = input(src, impreg_question, impreg_title, "Yes") as anything in list("Yes", "No") - mob_climax_partner_spillage(picked_organ, partner, impreg == "Yes") + mob_climax_inside_spillage(picked_organ, partner, impreg == "Yes") if("Climax over partner") var/obj/item/organ/genital/picked_organ picked_organ = pick_climax_genitals() - if(picked_organ) + if(picked_organ) var/mob/living/carbon/partner = pick_partner(FALSE) //Get your partner, clothed or not. if(partner) mob_climax_cover(picked_organ, partner) @@ -760,7 +773,7 @@ if(C.exposed_genitals.len || C.is_groin_exposed() || C.is_chest_exposed()) partner = C if(partner) - user_human.mob_climax_partner(current_genital, partner, mb_time = 0) + user_human.mob_climax_in_partner(current_genital, partner, mb_time = 0) continue return