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