Arousal menu options, Nibble buff, milk nutriment

Added options in the arousal menu to feed yourself using your own organs or that of others you are pulling
The Nibble now pumps venom over time if used against character you are pulling
Milk now has a nutriment factor
This commit is contained in:
Alphas00
2024-05-01 11:56:05 +02:00
parent 6d72a17e1d
commit 0f61e09deb
3 changed files with 143 additions and 7 deletions
+128 -3
View File
@@ -36,11 +36,17 @@
dat += "(Kiss a partner, or object.)<BR>"
dat += "<a href='byond://?src=[REF(src)];feed=1'>Feed [user.pulling]</A>"
dat += "(Feed a partner.)<BR>"
dat += "<a href='byond://?src=[REF(src)];feedfrom=1'>Feed from [user.pulling]</A>"
dat += "(Feed a partner.)<BR>"
else
dat += "<span class='linkOff'>Kiss</span></A>"
dat += "(Requires a partner)<BR>"
dat += "<span class='linkOff'>Feed</span></A>"
dat += "<span class='linkOff'>Feed others</span></A>"
dat += "(Requires a partner)<BR>"
dat += "<span class='linkOff'>Feed from others</span></A>"
dat += "(Requires a partner)<BR>"
dat += "<a href='byond://?src=[REF(src)];feedyourself=1'>Feed yourself</A>"
dat += "(Feed yourself with your own genitals)<BR>"
var/obj/item/organ/genital/belly/Belly = user.getorganslot("belly")
if(Belly)
@@ -213,6 +219,17 @@
to_chat(usr, "<span class='warning'>You cannot do this alone!</span>")
return
if(href_list["feedfrom"])
if(usr.pulling)
feedfrom()
else
to_chat(usr, "<span class='warning'>You cannot do this alone!</span>")
return
if(href_list["feedyourself"])
feedyourself()
return
if(href_list["shrink_belly"])
var/obj/item/organ/genital/belly/E = usr.getorganslot("belly")
if(E.size > 0)
@@ -301,6 +318,22 @@ obj/screen/arousal/proc/feed()
if (H)
H.genitalfeed(H.pulling)
obj/screen/arousal/proc/feedfrom()
if(usr.restrained(TRUE))
to_chat(usr, "<span class='warning'>You can't do that while restrained!</span>")
return
var/mob/living/carbon/human/H = usr
if (H)
H.genitalfeedfrom(H.pulling)
obj/screen/arousal/proc/feedyourself()
if(usr.restrained(TRUE))
to_chat(usr, "<span class='warning'>You can't do that while restrained!</span>")
return
var/mob/living/carbon/human/H = usr
if (H)
H.genitalfeedyourself()
/mob/living/carbon/human/proc/menuremovecondom()
@@ -550,10 +583,10 @@ obj/screen/arousal/proc/feed()
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, "<span class='warning'>You cannot fill containers when there is a condom over your [picked_organ.name].</span>")
to_chat(src, "<span class='warning'>You cannot feed someone when there is a condom over your [picked_organ.name].</span>")
return
if(P.sounding) //if the penis is sounded
to_chat(src, "<span class='warning'>You cannot fill containers when there is a rod inside your [picked_organ.name].</span>")
to_chat(src, "<span class='warning'>You cannot feed someone when there is a rod inside your [picked_organ.name].</span>")
return
if(picked_organ.producing) //Can it produce its own fluids, such as breasts?
fluid_source = picked_organ.reagents
@@ -577,3 +610,95 @@ obj/screen/arousal/proc/feed()
else //They either lack organs that can climax, or they didn't pick one.
to_chat(src, "<span class='warning'>You cannot fill anything without choosing exposed genitals.</span>")
return
/mob/living/carbon/human/proc/genitalfeedfrom(mob/living/target, mb_time = 30)
var/mob/living/carbon/human/L = target
var/obj/item/organ/genital/picked_organ
var/total_fluids = 0
var/datum/reagents/fluid_source = null
src << browse(null, "window=arousal")
var/list/genitals_list = list()
var/list/worn_stuff = L.get_equipped_items()
for(var/obj/item/organ/genital/G in L.internal_organs)
if(G.can_climax) //filter out what you can't masturbate with
if(G.is_exposed(worn_stuff)) //Nude or through_clothing
if(!G.dontlist)
genitals_list += G
if(genitals_list.len)
picked_organ = input(src, "with what?", "Climax", null) as null|obj in genitals_list
else
return
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 = L.getorganslot("penis")
if(P.condom) //if the penis is condomed
to_chat(src, "<span class='warning'>You cannot feed from [picked_organ.name] when there is a condom over it.</span>")
return
if(P.sounding) //if the penis is sounded
to_chat(src, "<span class='warning'>You cannot feed from [picked_organ.name] when there is a rod inside it.</span>")
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, "<span class='warning'>The [picked_organ.name] is unable to produce it's own fluids, it's missing the organs for it.</span>")
return
fluid_source = picked_organ.linked_organ.reagents
total_fluids = fluid_source.total_volume
src.visible_message("<span class='love'>[src] starts to feed from [L.name]'s [picked_organ.name].</span>", \
"<span class='userlove'>You feed from [L.name]'s '[picked_organ.name].</span>")
if(do_after(src, mb_time, target = src) && in_range(src, L))
fluid_source.trans_to(src, total_fluids)
src.visible_message("<span class='love'>[src] feeds from [L.name]'s [picked_organ.name]!</span>", \
"<span class='userlove'>You used [L.name]'s [picked_organ.name] to feed with a total of [total_fluids]u's.</span>")
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(picked_organ.can_climax)
L.setArousalLoss(min_arousal)
else //They either lack organs that can climax, or they didn't pick one.
to_chat(src, "<span class='warning'>You cannot fill anything without choosing exposed genitals.</span>")
return
/mob/living/carbon/human/proc/genitalfeedyourself(mb_time = 30)
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, "<span class='warning'>You cannot feed yourself when there is a condom over your [picked_organ.name].</span>")
return
if(P.sounding) //if the penis is sounded
to_chat(src, "<span class='warning'>You cannot feed yourself when there is a rod inside your [picked_organ.name].</span>")
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, "<span class='warning'>Your [picked_organ.name] is unable to produce it's own fluids, it's missing the organs for it.</span>")
return
fluid_source = picked_organ.linked_organ.reagents
total_fluids = fluid_source.total_volume
src.visible_message("<span class='love'>[src] starts to feed themselves with their [picked_organ.name].</span>", \
"<span class='userlove'>You feed yourself with your [picked_organ.name].</span>")
if(do_after(src, mb_time))
fluid_source.trans_to(src, total_fluids)
src.visible_message("<span class='love'>[src] uses [p_their()] [picked_organ.name] to feed themselves!</span>", \
"<span class='userlove'>You used your [picked_organ.name] to feed yourself a total of [total_fluids]u's.</span>")
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, "<span class='warning'>You cannot fill anything without choosing exposed genitals.</span>")
return