diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm
index 264735710..ae9b814e4 100644
--- a/hyperstation/code/modules/arousal/arousalhud.dm
+++ b/hyperstation/code/modules/arousal/arousalhud.dm
@@ -365,41 +365,37 @@ obj/screen/arousal/proc/kiss()
to_chat(src, "You cannot climax without choosing genitals.")
return
-/mob/living/carbon/human/proc/climaxwith(mob/living/T)
+/mob/living/carbon/human/proc/climaxwith(mob/living/carbon/human/partner)
+ if(!partner)
+ to_chat(src, "You cannot do this alone.")
+ return
var/obj/item/organ/genital/picked_organ
picked_organ = pick_climax_genitals()
if(!picked_organ)
to_chat(src, "You cannot climax without choosing genitals.")
return
- var/mob/living/carbon/human/partner = pick_partner()
- if(!partner)
- to_chat(src, "You cannot do this alone.")
- return
src << browse(null, "window=arousal") // close arousal window
mob_climax_partner_spillage(picked_organ, partner, FALSE)
-/mob/living/carbon/human/proc/climaxover(mob/living/T)
- var/mob/living/carbon/human/partner = T
+/mob/living/carbon/human/proc/climaxover(mob/living/carbon/human/partner)
var/obj/item/organ/genital/picked_organ
picked_organ = pick_climax_genitals()
- if(picked_organ)
- src << browse(null, "window=arousal") //alls fine, we can close the window now.
- if(partner)
- var/obj/item/organ/genital/penis/P = picked_organ
- if(P.condom == 1)
- to_chat(src, "You cannot do this action with a condom on.")
- return
- if(P.sounding == 1)
- to_chat(src, "You cannot do this action with a sounding in.")
- return
- mob_climax_partner(picked_organ, partner, FALSE, FALSE, TRUE)
- else
- to_chat(src, "You cannot do this alone.")
- return
- else //They either lack organs that can masturbate, or they didn't pick one.
+ if(!picked_organ)
to_chat(src, "You cannot climax without choosing genitals.")
return
+ src << browse(null, "window=arousal") //alls fine, we can close the window now.
+ if(!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_partner(picked_organ, partner, FALSE, FALSE, TRUE)
/mob/living/carbon/human/proc/clothesplosion()
if(usr.restrained(TRUE))
diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm
index aab2e5012..3f11f90de 100644
--- a/modular_citadel/code/modules/arousal/arousal.dm
+++ b/modular_citadel/code/modules/arousal/arousal.dm
@@ -214,12 +214,12 @@
//These are various procs that we'll use later, split up for readability instead of having one, huge proc.
//For all of these, we assume the arguments given are proper and have been checked beforehand.
-/mob/living/carbon/human/proc/mob_masturbate(obj/item/organ/genital/G, cover = FALSE, mb_time = 30) //Masturbation, keep it gender-neutral
+/mob/living/carbon/human/proc/mob_masturbate(obj/item/organ/genital/G, cover = FALSE, mb_time = 30)
+//Masturbation, keep it gender-neutral
var/total_fluids = 0
var/datum/reagents/fluid_source = null
var/condomed = 0
var/sounded = 0
-
if(G.name == "penis")//if the select organ is a penis
var/obj/item/organ/genital/penis/P = src.getorganslot("penis")
if(P.condom) //if the penis is condomed
@@ -236,8 +236,8 @@
total_fluids = fluid_source.total_volume
if(mb_time)
src.visible_message("[src] starts to [G.masturbation_verb] [p_their()] [G.name].", \
- "You start to [G.masturbation_verb] your [G.name].", \
- "You start to [G.masturbation_verb] your [G.name].")
+ "You start to [G.masturbation_verb] your [G.name].", \
+ "You start to [G.masturbation_verb] your [G.name].")
if(do_after(src, mb_time, target = src))
if(total_fluids > 5 &&!condomed &&!sounded)
@@ -245,17 +245,16 @@
fluid_source.clear_reagents()
if(!condomed && !sounded && !cover)
src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \
- "You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].", \
- "You have relieved yourself.")
+ "You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].", \
+ "You have relieved yourself.")
if(!condomed &&!sounded && cover)//For when you want to make a mess of yourself.
fluid_source.trans_to(src, total_fluids*G.fluid_transfer_factor)
total_fluids -= total_fluids*G.fluid_transfer_factor
if(total_fluids > 80) // now thats a big cum!
- if(isliving(src))
- var/mutable_appearance/cumoverlaylarge = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
- cumoverlaylarge.icon_state = "cum_large"
- src.add_overlay(cumoverlaylarge)
+ var/mutable_appearance/cumoverlaylarge = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
+ cumoverlaylarge.icon_state = "cum_large"
+ src.add_overlay(cumoverlaylarge)
if(total_fluids > 5)
fluid_source.reaction(src.loc, TOUCH, 1, 0)
@@ -264,14 +263,11 @@
H.cumdrip_rate += rand(5,10)
fluid_source.clear_reagents()
src.visible_message("[src] climaxes over [p_their()] self, using [p_their()] [G.name]!", \
- "You orgasm over yourself, using your [G.name].", \
- "You have climaxed over something, using your [G.name].")
- if(isliving(src))
- var/mutable_appearance/cumoverlay = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
- cumoverlay.icon_state = "cum_normal"
- src.add_overlay(cumoverlay)
- else
- src.add_cum_overlay()
+ "You orgasm over yourself, using your [G.name].", \
+ "You have climaxed over something, using your [G.name].")
+ var/mutable_appearance/cumoverlay = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
+ cumoverlay.icon_state = "cum_normal"
+ src.add_overlay(cumoverlay)
if(condomed) //condomed
src.visible_message("[src] orgasms, climaxing into [p_their()] condom ", \
@@ -333,10 +329,9 @@
setArousalLoss(min_arousal)
-/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, impreg = FALSE,cover = FALSE,remote = FALSE, mb_time = 30) //Used for climaxing with any living thing
+/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/carbon/partner, spillage = TRUE, impreg = FALSE,cover = FALSE,remote = FALSE, mb_time = 30) //Used for climaxing with any person
var/total_fluids = 0
var/datum/reagents/fluid_source = null
-
if(G.producing) //Can it produce its own fluids, such as breasts?
fluid_source = G.reagents
else
@@ -345,122 +340,107 @@
return
fluid_source = G.linked_organ.reagents
total_fluids = fluid_source.total_volume
-
if(mb_time && !remote) //Skip warning if this is an instant climax.
- src.visible_message("[src] is about to climax with [L]!", \
- "You're about to climax with [L]!", \
+ src.visible_message("[src] is about to climax with [partner]!", \
+ "You're about to climax with [partner]!", \
"You're preparing to climax with something!")
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!")
-
if(cover)//covering the partner in cum, this overrides other options.
- if(do_after(src, mb_time, target = src) && in_range(src, L))
- fluid_source.trans_to(L, total_fluids*G.fluid_transfer_factor)
+ if(do_after(src, mb_time, target = src) && in_range(src, partner))
+ fluid_source.trans_to(partner, total_fluids*G.fluid_transfer_factor)
total_fluids -= total_fluids*G.fluid_transfer_factor
if(total_fluids > 80) // now thats a big cum!
- if(isliving(L))
- var/mutable_appearance/cumoverlaylarge = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
- cumoverlaylarge.icon_state = "cum_large"
- L.add_overlay(cumoverlaylarge)
-
+ var/mutable_appearance/cumoverlaylarge = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
+ cumoverlaylarge.icon_state = "cum_large"
+ partner.add_overlay(cumoverlaylarge)
if(total_fluids > 5)
- fluid_source.reaction(L.loc, TOUCH, 1, 0)
- var/mob/living/carbon/human/H = L
+ 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()
- src.visible_message("[src] climaxes over [L], using [p_their()] [G.name]!", \
- "You orgasm over [L], using your [G.name].", \
+ src.visible_message("[src] climaxes over [partner], using [p_their()] [G.name]!", \
+ "You orgasm over [partner], using your [G.name].", \
"You have climaxed over something, using your [G.name].")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
-
- if(isliving(L))
- var/mutable_appearance/cumoverlay = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
- cumoverlay.icon_state = "cum_normal"
- L.add_overlay(cumoverlay)
- else
- L.add_cum_overlay()
-
+ var/mutable_appearance/cumoverlay = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
+ cumoverlay.icon_state = "cum_normal"
+ partner.add_overlay(cumoverlay)
setArousalLoss(min_arousal)
if(G.can_climax)
setArousalLoss(min_arousal)
-
if(spillage && !cover)
if(do_after(src, mb_time, target = src))
- if(!in_range(src, L) && !remote)
+ if(!in_range(src, partner) && !remote)
return
- fluid_source.trans_to(L, total_fluids*G.fluid_transfer_factor)
+ fluid_source.trans_to(partner, total_fluids*G.fluid_transfer_factor)
total_fluids -= total_fluids*G.fluid_transfer_factor
if(total_fluids > 5)
- fluid_source.reaction(L.loc, TOUCH, 1, 0)
- var/mob/living/carbon/human/H = L
+ 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()
- src.visible_message("[src] climaxes with [L][spillage ? ", overflowing and spilling":""], using [p_their()] [G.name]!", \
- "You orgasm with [L][spillage ? ", spilling out of them":""], using your [G.name].", \
+ 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].")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
- SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
-
+ SEND_SIGNAL(partner, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
-
else //knots, portal fleshlights, and other non-spilling orgasms
if(!cover)
- if(!remote && !in_range(src, L))
+ if(!remote && !in_range(src, partner))
return
if(do_after(src, mb_time, target = src))
- var/mob/living/carbon/H = L
+ 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
- fluid_source.trans_to(L, total_fluids)
+ fluid_source.trans_to(partner, total_fluids)
total_fluids = 0
if(!remote)
- src.visible_message("[src] climaxes with [L], [p_their()] [G.name] spilling nothing!", \
- "You ejaculate with [L], your [G.name] spilling nothing.", \
+ 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].")
- to_chat(L, "You feel someone ejaculate inside you.")
+ to_chat(partner, "You feel someone ejaculate inside you.")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
- SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
+ SEND_SIGNAL(partner, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
-
//Hyper - antag code
if(src.mind.special_role == ROLE_LEWD_TRAITOR)
for(var/datum/objective/obj in src.mind.objectives)
- if (L.mind == obj.target)
- L.mind.sexed = TRUE //sexed
+ if (partner.mind == obj.target)
+ partner.mind.sexed = TRUE //sexed
to_chat(src, "You feel deep satisfaction with yourself.")
-
//Hyper - impreg
if(impreg)
//Role them odds, only people with the dicks can send the chance to the person with the settings enabled at the momment.
- if(prob(L.impregchance))
- var/obj/item/organ/genital/womb/W = L.getorganslot("womb")
+ if(prob(partner.impregchance))
+ var/obj/item/organ/genital/womb/W = partner.getorganslot("womb")
if(W) //check if they have a womb.
- if (L.breedable && !W.pregnant) //Dont get pregnant again, if you are pregnant.
- log_game("Debug: [L] has been impregnated by [src]")
- to_chat(L, "You feel your hormones change, and a motherly instinct take over.") //leting them know magic has happened.
+ if (partner.breedable && !W.pregnant) //Dont get pregnant again, if you are pregnant.
+ log_game("Debug: [partner] has been impregnated by [src]")
+ to_chat(partner, "You feel your hormones change, and a motherly instinct take over.") //leting them know magic has happened.
W.pregnant = 1
- if (HAS_TRAIT(L, TRAIT_HEAT))
- SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "heat", /datum/mood_event/heat) //well done you perv.
- REMOVE_TRAIT(L, TRAIT_HEAT, ROUNDSTART_TRAIT) //take the heat away, you satisfied it!
-
+ if (HAS_TRAIT(partner, TRAIT_HEAT))
+ SEND_SIGNAL(partner, COMSIG_ADD_MOOD_EVENT, "heat", /datum/mood_event/heat) //well done you perv.
+ REMOVE_TRAIT(partner, TRAIT_HEAT, ROUNDSTART_TRAIT) //take the heat away, you satisfied it!
//Make breasts produce quicker.
- var/obj/item/organ/genital/breasts/B = L.getorganslot("breasts")
+ var/obj/item/organ/genital/breasts/B = partner.getorganslot("breasts")
if (B.fluid_mult < 0.5 && B)
B.fluid_mult = 0.5
@@ -598,8 +578,6 @@
to_chat(src, "You need to wait [DisplayTimeText((mb_cd_timer - world.time), TRUE)] before you can do that again!")
return
mb_cd_timer = (world.time + mb_cd_length)
-
-
if(canbearoused && has_dna())
if(stat==2)
to_chat(src, "You can't do that while dead!")
@@ -610,23 +588,22 @@
var/obj/item/organ/genital/G = O
if(!G.can_climax) //Skip things like wombs and testicles
continue
- var/mob/living/partner
+ var/mob/living/carbon/partner
var/check_target
var/list/worn_stuff = get_equipped_items()
if(G.is_exposed(worn_stuff))
if(src.pulling) //Are we pulling someone? Priority target, we can't be making option menus for this, has to be quick
- if(isliving(src.pulling)) //Don't fuck objects
+ if(iscarbon(src.pulling)) //Don't fuck objects
check_target = src.pulling
- if(src.pulledby && !check_target) //prioritise pulled over pulledby
- if(isliving(src.pulledby))
+ else if(src.pulledby) //prioritise pulled over pulledby
+ if(iscarbon(src.pulledby))
check_target = src.pulledby
//Now we should have a partner, or else we have to come alone
if(check_target)
- if(iscarbon(check_target)) //carbons can have clothes
- 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
+ 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
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
@@ -636,17 +613,14 @@
//Since this was a forced climax, we do not need to continue with the other stuff
return
//If we get here, then this is not a forced climax and we gotta check a few things.
-
if(stat==1) //No sleep-masturbation, you're unconscious.
to_chat(src, "You must be conscious to do that!")
return
if(getArousalLoss() < 33) //flat number instead of percentage
to_chat(src, "You aren't aroused enough for that!")
return
-
//Ok, now we check what they want to do.
var/choice = input(src, "Select sexual activity", "Sexual activity:") in list("Masturbate", "Climax alone", "Climax with partner","Climax over partner", "Fill container", "Remove condom", "Remove sounding rod")
-
switch(choice)
if("Remove sounding rod")
if(restrained(TRUE)) //TRUE ignores grabs
@@ -755,7 +729,7 @@
var/obj/item/organ/genital/picked_organ
picked_organ = pick_climax_genitals()
if(picked_organ)
- var/mob/living/partner = pick_partner(FALSE) //Get your partner, clothed or not.
+ var/mob/living/carbon/partner = pick_partner(FALSE) //Get your partner, clothed or not.
if(partner)
mob_climax_partner(picked_organ, partner, FALSE, FALSE, TRUE)
else