mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-12 08:27:24 +01:00
Reapply "Merge branch 'master' into trash-eat-Mk2"
This reverts commit d638582401.
This commit is contained in:
@@ -205,34 +205,36 @@ GLOBAL_LIST_INIT(hyper_special_roles, list(
|
||||
|
||||
|
||||
|
||||
/datum/objective/noncon/find_target()
|
||||
//..()
|
||||
//to_chat(world, "<span class='boldannounce'>TEST: noncon/find_target() called</span>")
|
||||
var/list/datum/mind/targets = list()
|
||||
var/list/datum/mind/owners = get_owners()
|
||||
for(var/datum/mind/candidate in SSticker.minds)
|
||||
if (!(candidate in owners) && ishuman(candidate.current) && (candidate.current.client))
|
||||
if(candidate.current.client?.prefs?.noncon == 1)
|
||||
targets += candidate
|
||||
if(targets.len > 0)
|
||||
target = pick(targets)
|
||||
else
|
||||
target = null
|
||||
update_explanation_text()
|
||||
return target
|
||||
//GS13 - this shit's just fucking weird lol, gtfo
|
||||
|
||||
// /datum/objective/noncon/find_target()
|
||||
// //..()
|
||||
// //to_chat(world, "<span class='boldannounce'>TEST: noncon/find_target() called</span>")
|
||||
// var/list/datum/mind/targets = list()
|
||||
// var/list/datum/mind/owners = get_owners()
|
||||
// for(var/datum/mind/candidate in SSticker.minds)
|
||||
// if (!(candidate in owners) && ishuman(candidate.current) && (candidate.current.client))
|
||||
// if(candidate.current.client?.prefs?.noncon == 1)
|
||||
// targets += candidate
|
||||
// if(targets.len > 0)
|
||||
// target = pick(targets)
|
||||
// else
|
||||
// target = null
|
||||
// update_explanation_text()
|
||||
// return target
|
||||
|
||||
|
||||
/datum/objective/noncon/check_completion()
|
||||
if(!target)
|
||||
return TRUE
|
||||
else
|
||||
return target.sexed
|
||||
// /datum/objective/noncon/check_completion()
|
||||
// if(!target)
|
||||
// return TRUE
|
||||
// else
|
||||
// return target.sexed
|
||||
|
||||
/datum/objective/noncon/update_explanation_text()
|
||||
if(target)
|
||||
explanation_text = "Locate [target.name], and sate your lust."
|
||||
else
|
||||
explanation_text = "Free Lewd Objective"
|
||||
// /datum/objective/noncon/update_explanation_text()
|
||||
// if(target)
|
||||
// explanation_text = "Locate [target.name], and sate your lust."
|
||||
// else
|
||||
// explanation_text = "Free Lewd Objective"
|
||||
|
||||
/datum/antagonist/traitor/lewd/roundend_report()
|
||||
var/list/result = list()
|
||||
|
||||
@@ -34,9 +34,19 @@
|
||||
if(user.pulling)
|
||||
dat += "<a href='byond://?src=[REF(src)];kiss=1'>Kiss [user.pulling]</A>"
|
||||
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 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)
|
||||
@@ -202,6 +212,24 @@
|
||||
to_chat(usr, "<span class='warning'>You cannot do this alone!</span>")
|
||||
return
|
||||
|
||||
if(href_list["feed"])
|
||||
if(usr.pulling)
|
||||
feed()
|
||||
else
|
||||
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)
|
||||
@@ -282,6 +310,30 @@ obj/screen/arousal/proc/kiss()
|
||||
if (H)
|
||||
H.kisstarget(H.pulling)
|
||||
|
||||
obj/screen/arousal/proc/feed()
|
||||
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.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()
|
||||
|
||||
@@ -517,3 +569,136 @@ 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, "<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 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
|
||||
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 [L.name] with their [picked_organ.name].</span>", \
|
||||
"<span class='userlove'>You feed [L.name] with your [picked_organ.name].</span>")
|
||||
if(do_after(src, mb_time, target = src) && in_range(src, L))
|
||||
fluid_source.trans_to(L, total_fluids)
|
||||
src.visible_message("<span class='love'>[src] uses [p_their()] [picked_organ.name] to feed [L.name]!</span>", \
|
||||
"<span class='userlove'>You used your [picked_organ.name] to feed [L.name] 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
|
||||
|
||||
/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
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
icon = 'hyperstation/icons/obj/clothing/sizeaccessories.dmi'
|
||||
icon_state = "pendant"
|
||||
item_state = "pendant"
|
||||
w_class = WEIGHT_CLASS_SMALL //Gainstation Edit: Small, not normal sized.
|
||||
|
||||
//For neck items
|
||||
/obj/item/clothing/neck/syntech/equipped(mob/living/user, slot)
|
||||
|
||||
Reference in New Issue
Block a user