From e1a6c16dd0971d98ccc9fc42f1c60663a572ef5b Mon Sep 17 00:00:00 2001 From: sarcoph <83266791+sarcoph@users.noreply.github.com> Date: Wed, 4 May 2022 23:54:21 -0800 Subject: [PATCH] allow objects for certain interactions no animals still --- code/__DEFINES/is_helpers.dm | 2 + .../code/modules/arousal/arousalhud.dm | 28 +++++------ .../code/modules/arousal/arousal.dm | 48 +++++++++++-------- 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index c91c0fda4..363d4c38b 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -60,6 +60,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isbrain(A) (istype(A, /mob/living/brain)) +#define isnoncarbon(A) (isliving(A) && !iscarbon(A)) + //Carbon mobs #define iscarbon(A) (istype(A, /mob/living/carbon)) diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm index 931930113..375728cf5 100644 --- a/hyperstation/code/modules/arousal/arousalhud.dm +++ b/hyperstation/code/modules/arousal/arousalhud.dm @@ -45,19 +45,17 @@ if(Belly.inflatable) dat += "Deflate belly" dat += "(Shrink your belly down a size)
" - - - if(user.pulling) - if(!(isliving(user.pulling) && !iscarbon(user.pulling))) // do not fuck animals - dat += "Climax over [user.pulling]" //you can cum on objects if you really want... - dat += "(Orgasm over a person or object.)
" - if(iscarbon(user.pulling)) - dat += "Climax with [user.pulling]" - dat += {"(Orgasm with another person.)
"} - var/mob/living/carbon/human/H = user.pulling - if(H && H.breedable && P) - dat += "Impregnate [U.pulling] ([clamp(U.impregchance,0,100)]%)" - dat += "(Climax inside another person, and attempt to knock them up.)
" + + if(user.pulling && !isnoncarbon(user.pulling)) // do not fuck animals + dat += "Climax over [user.pulling]" //you can cum on objects if you really want... + dat += "(Orgasm over a person or object.)
" + if(iscarbon(user.pulling)) + dat += "Climax with [user.pulling]" + dat += {"(Orgasm with another person.)
"} + var/mob/living/carbon/human/H = user.pulling + if(H && H.breedable && P) + dat += "Impregnate [U.pulling] ([clamp(U.impregchance,0,100)]%)" + dat += "(Climax inside another person, and attempt to knock them up.)
" else dat += "Climax over" dat += "(Requires a partner)
" @@ -80,11 +78,9 @@ dat += "Old Menu" dat += "Toggle Undergarments " dat += "
" - var/datum/browser/popup = new(user, "arousal", "Arousal Panel") popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(icon, icon_state), 500,600) - popup.open() @@ -384,7 +380,7 @@ obj/screen/arousal/proc/kiss() 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 || (isliving(partner) !iscarbon(partner))) + if(!partner || isnoncarbon(partner)) to_chat(src, "You cannot do this alone.") return var/obj/item/organ/genital/penis/P = picked_organ diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm index 3f11f90de..42521dcf1 100644 --- a/modular_citadel/code/modules/arousal/arousal.dm +++ b/modular_citadel/code/modules/arousal/arousal.dm @@ -329,7 +329,9 @@ setArousalLoss(min_arousal) -/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 +/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, atom/partner, spillage = TRUE, impreg = FALSE,cover = FALSE,remote = FALSE, mb_time = 30) //Used for climaxing with any person + if(isnoncarbon(partner)) // deny animals + return var/total_fluids = 0 var/datum/reagents/fluid_source = null if(G.producing) //Can it produce its own fluids, such as breasts? @@ -342,17 +344,17 @@ 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 [partner]!", \ - "You're about to climax with [partner]!", \ - "You're preparing to climax with something!") + "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!") + "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, 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(total_fluids > 80 && iscarbon(partner)) // now thats a big cum! var/mutable_appearance/cumoverlaylarge = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi') cumoverlaylarge.icon_state = "cum_large" partner.add_overlay(cumoverlaylarge) @@ -363,12 +365,15 @@ H.cumdrip_rate += rand(5,10) fluid_source.clear_reagents() 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].") + "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) - var/mutable_appearance/cumoverlay = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi') - cumoverlay.icon_state = "cum_normal" - partner.add_overlay(cumoverlay) + if(iscarbon(partner)) + var/mutable_appearance/cumoverlay = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi') + cumoverlay.icon_state = "cum_normal" + partner.add_overlay(cumoverlay) + else + partner.add_cum_overlay() setArousalLoss(min_arousal) if(G.can_climax) setArousalLoss(min_arousal) @@ -407,12 +412,12 @@ 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.") + "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].") + "You ejaculate with someone, using your [G.name].", \ + "You have climaxed inside someone, using your [G.name].") to_chat(partner, "You feel someone ejaculate inside you.") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) @@ -421,18 +426,19 @@ if(G.can_climax) setArousalLoss(min_arousal) //Hyper - antag code + var/mob/living/carbon/partner_carbon = partner if(src.mind.special_role == ROLE_LEWD_TRAITOR) for(var/datum/objective/obj in src.mind.objectives) - if (partner.mind == obj.target) - partner.mind.sexed = TRUE //sexed + if (partner_carbon.mind == obj.target) + partner_carbon.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(partner.impregchance)) - var/obj/item/organ/genital/womb/W = partner.getorganslot("womb") + if(prob(partner_carbon.impregchance)) + var/obj/item/organ/genital/womb/W = partner_carbon.getorganslot("womb") if(W) //check if they have a womb. - if (partner.breedable && !W.pregnant) //Dont get pregnant again, if you are pregnant. + if (partner_carbon.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 @@ -440,7 +446,7 @@ 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 = partner.getorganslot("breasts") + var/obj/item/organ/genital/breasts/B = partner_carbon.getorganslot("breasts") if (B.fluid_mult < 0.5 && B) B.fluid_mult = 0.5