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