From 9507a9a4ab22a6e02a1a4261303a8bccdad56ad2 Mon Sep 17 00:00:00 2001
From: sarcoph <83266791+sarcoph@users.noreply.github.com>
Date: Thu, 5 May 2022 18:49:40 -0800
Subject: [PATCH] fixed instant climax
---
.../mob/living/carbon/human/species.dm | 5 +--
code/modules/mob/living/carbon/life.dm | 3 +-
.../ruins/objects_and_mobs/sin_ruins.dm | 15 ++++---
hyperstation/code/obj/fleshlight.dm | 10 +----
hyperstation/code/obj/vibrator.dm | 3 +-
.../code/modules/arousal/arousal.dm | 41 ++++++++++---------
6 files changed, 33 insertions(+), 44 deletions(-)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 7238bae03..fc87bd816 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1647,7 +1647,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
)
if (target.canbearoused)
target.adjustArousalLoss(5)
- if (target.can_orgasm() && HAS_TRAIT(target, TRAIT_MASO))
+ if (HAS_TRAIT(target, TRAIT_MASO))
target.mob_climax_instant()
if (!HAS_TRAIT(target, TRAIT_NYMPHO))
stop_wagging_tail(target)
@@ -2005,8 +2005,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.update_damage_overlays()
if(HAS_TRAIT(H, TRAIT_MASO))
H.adjustArousalLoss(damage * brutemod * H.physiology.brute_mod)
- if (H.can_orgasm())
- H.mob_climax_instant()
+ H.mob_climax_instant()
else//no bodypart, we deal damage with a more general method.
H.adjustBruteLoss(damage * hit_percent * brutemod * H.physiology.brute_mod)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 310eb3d7f..fc3c25c15 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -77,8 +77,7 @@
var/mob/living/carbon/human/B = src
if(HAS_TRAIT(B, TRAIT_CHOKE_SLUT))
B.adjustArousalLoss(7)
- if (B.can_orgasm())
- B.mob_climax_instant()
+ B.mob_climax_instant()
else
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
else
diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
index edd7734a8..5fba1aa4b 100644
--- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm
+++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
@@ -288,11 +288,10 @@
if(user.getArousalLoss() < 100)
to_chat(user, "You hear a voice in your head... \"You are not horny enough to receive my blessing, dear~\"")
return
- if(user.can_orgasm())
- var/mob/living/carbon/user_carbon = user
- user_carbon.mob_climax_instant()
- to_chat(user, "You hear a voice in your head... \"You are worthy of my blessing, dear~\"")
- to_chat(user, "You feel overpowering pleasure surge through your entire body.")
- var/A = new /obj/item/reagent_containers/chalice/lust
- user.put_in_hands(A)
- chalice_taken = TRUE
\ No newline at end of file
+ var/mob/living/carbon/user_carbon = user
+ user_carbon.mob_climax_instant()
+ to_chat(user, "You hear a voice in your head... \"You are worthy of my blessing, dear~\"")
+ to_chat(user, "You feel overpowering pleasure surge through your entire body.")
+ var/A = new /obj/item/reagent_containers/chalice/lust
+ user.put_in_hands(A)
+ chalice_taken = TRUE
\ No newline at end of file
diff --git a/hyperstation/code/obj/fleshlight.dm b/hyperstation/code/obj/fleshlight.dm
index 0c640b23f..b1174156e 100644
--- a/hyperstation/code/obj/fleshlight.dm
+++ b/hyperstation/code/obj/fleshlight.dm
@@ -45,11 +45,9 @@
inuse = 1
if(!(C == user)) //if we are targeting someone else.
C.visible_message("[user] is trying to use [src] on [C]'s penis.", "[user] is trying to use [src] on your penis.")
-
if(!do_mob(user, C, 3 SECONDS)) //3 second delay
inuse = 0
return
-
//checked if not used on yourself, if not, carry on.
playsound(src, 'sound/lewd/slaps.ogg', 30, 1, -1) //slapping sound
inuse = 0
@@ -57,20 +55,14 @@
C.visible_message("[user] pumps [src] on [C]'s penis.", "[user] pumps [src] up and down on your penis.")
else
user.visible_message("[user] pumps [src] on their penis.", "You pump the fleshlight on your penis.")
-
if(prob(30)) //30% chance to make them moan.
C.emote("moan")
-
C.do_jitter_animation()
C.adjustArousalLoss(20) //make the target more aroused.
- if (C.can_orgasm())
- C.mob_climax_instant() //make them cum if they are over the edge.
-
+ C.mob_climax_instant() //make them cum if they are over the edge.
return
-
else
to_chat(user, "You don't see anywhere to use this on.")
-
inuse = 0
..()
diff --git a/hyperstation/code/obj/vibrator.dm b/hyperstation/code/obj/vibrator.dm
index bef2a7969..40e1446e9 100644
--- a/hyperstation/code/obj/vibrator.dm
+++ b/hyperstation/code/obj/vibrator.dm
@@ -132,8 +132,7 @@ Code:
if(2) //med, can make you cum
to_chat(U, "You feel intense pleasure surge through your [G.name]")
U.do_jitter_animation()
- if (U.can_orgasm())
- U.mob_climax_instant()
+ U.mob_climax_instant()
if(3) //high, makes you stun
to_chat(U, "You feel overpowering pleasure surge through your [G.name]")
U.Jitter(3)
diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm
index f078e9e19..df888287d 100644
--- a/modular_citadel/code/modules/arousal/arousal.dm
+++ b/modular_citadel/code/modules/arousal/arousal.dm
@@ -202,7 +202,9 @@
* Returns: `TRUE/FALSE` - Whether or not the mob passes all of the above checks.
*/
/mob/living/proc/can_orgasm(arousal = 100)
- return src.canbearoused && src.getArousalLoss() >= arousal && ishuman(src) && src.has_dna()
+ if(src.canbearoused && src.getArousalLoss() >= arousal && ishuman(src) && src.has_dna())
+ return TRUE
+ return FALSE
/mob/living/proc/mob_climax()
@@ -744,37 +746,36 @@
* climaxable genitals, either onto their location (floor) or on whatever
* is pulling/being pulled by them.
*/
-/mob/living/carbon/proc/mob_climax_instant()
+/mob/living/carbon/proc/mob_climax_instant(arousal=100)
if(stat == DEAD) //corpses can't cum
to_chat(src, "You can't do that while dead!")
return
- if(!canbearoused || !has_dna())
+ if(!can_orgasm(arousal))
return
var/mob/living/carbon/human/user_human = src
for(var/obj/item/organ/O in internal_organs)
if(!istype(O, /obj/item/organ/genital))
- return
+ continue
var/obj/item/organ/genital/current_genital = O
if(!current_genital.can_climax)
continue // no wombs or testicles
var/mob/living/carbon/partner
var/check_target
- if(!current_genital.is_exposed())
- user_human.mob_climax_outside(current_genital, mb_time = 0)
- continue
- if(src.pulling)
- if(iscarbon(src.pulling))
- check_target = src.pulling
- else if(src.pulledby)
- if(iscarbon(src.pulledby))
- check_target = src.pulledby
- if(check_target)
- var/mob/living/carbon/C = check_target
- if(C.exposed_genitals.len || C.is_groin_exposed() || C.is_chest_exposed())
- partner = C
- if(partner)
- user_human.mob_climax_in_partner(current_genital, partner, mb_time = 0)
- continue
+ if(current_genital.is_exposed())
+ if(src.pulling)
+ if(iscarbon(src.pulling))
+ check_target = src.pulling
+ else if(src.pulledby)
+ if(iscarbon(src.pulledby))
+ check_target = src.pulledby
+ if(check_target)
+ var/mob/living/carbon/C = check_target
+ if(C.exposed_genitals.len || C.is_groin_exposed() || C.is_chest_exposed())
+ partner = C
+ if(partner)
+ user_human.mob_climax_in_partner(current_genital, partner, mb_time = 0)
+ continue
+ user_human.mob_climax_outside(current_genital, mb_time = 0)
return