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