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