From 6d72a17e1dc330772a6bde178b384e7aa1d6e9a1 Mon Sep 17 00:00:00 2001 From: Alphas00 <154434082+Alphas00@users.noreply.github.com> Date: Tue, 30 Apr 2024 23:27:45 +0200 Subject: [PATCH] Genital feeding Adds an option to feed a character pulled by the user with the reagents of a chosen genital --- .../code/modules/arousal/arousalhud.dm | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm index 6d0c0131..801d7c9d 100644 --- a/hyperstation/code/modules/arousal/arousalhud.dm +++ b/hyperstation/code/modules/arousal/arousalhud.dm @@ -34,9 +34,13 @@ if(user.pulling) dat += "Kiss [user.pulling]" dat += "(Kiss a partner, or object.)
" + dat += "Feed [user.pulling]" + dat += "(Feed a partner.)
" else dat += "Kiss" dat += "(Requires a partner)
" + dat += "Feed" + dat += "(Requires a partner)
" var/obj/item/organ/genital/belly/Belly = user.getorganslot("belly") if(Belly) @@ -202,6 +206,13 @@ to_chat(usr, "You cannot do this alone!") return + if(href_list["feed"]) + if(usr.pulling) + feed() + else + to_chat(usr, "You cannot do this alone!") + return + if(href_list["shrink_belly"]) var/obj/item/organ/genital/belly/E = usr.getorganslot("belly") if(E.size > 0) @@ -282,6 +293,14 @@ obj/screen/arousal/proc/kiss() if (H) H.kisstarget(H.pulling) +obj/screen/arousal/proc/feed() + if(usr.restrained(TRUE)) + to_chat(usr, "You can't do that while restrained!") + return + var/mob/living/carbon/human/H = usr + if (H) + H.genitalfeed(H.pulling) + /mob/living/carbon/human/proc/menuremovecondom() @@ -517,3 +536,44 @@ obj/screen/arousal/proc/kiss() if(cum_splatter_icon) cut_overlay(cum_splatter_icon) return TRUE + +/mob/living/carbon/human/proc/genitalfeed(mob/living/L, mb_time = 30) + if(isliving(L)) //is your target living? Living people can resist your advances if they want to via moving. + if(iscarbon(L)) + var/obj/item/organ/genital/picked_organ + var/total_fluids = 0 + var/datum/reagents/fluid_source = null + src << browse(null, "window=arousal") + picked_organ = pick_climax_genitals() //Gotta be climaxable, not just masturbation, to fill with fluids. + if(picked_organ) + //Good, got an organ, time to pick a container + if(picked_organ.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 + to_chat(src, "You cannot fill containers when there is a condom over your [picked_organ.name].") + return + if(P.sounding) //if the penis is sounded + to_chat(src, "You cannot fill containers when there is a rod inside your [picked_organ.name].") + return + if(picked_organ.producing) //Can it produce its own fluids, such as breasts? + fluid_source = picked_organ.reagents + else + if(!picked_organ.linked_organ) + to_chat(src, "Your [picked_organ.name] is unable to produce it's own fluids, it's missing the organs for it.") + return + fluid_source = picked_organ.linked_organ.reagents + total_fluids = fluid_source.total_volume + + src.visible_message("[src] starts to feed [L.name] with their [picked_organ.name].", \ + "You feed [L.name] with your [picked_organ.name].") + if(do_after(src, mb_time, target = src) && in_range(src, L)) + fluid_source.trans_to(L, total_fluids) + src.visible_message("[src] uses [p_their()] [picked_organ.name] to feed [L.name]!", \ + "You used your [picked_organ.name] to feed [L.name] a total of [total_fluids]u's.") + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) + if(picked_organ.can_climax) + setArousalLoss(min_arousal) + + else //They either lack organs that can climax, or they didn't pick one. + to_chat(src, "You cannot fill anything without choosing exposed genitals.") + return