diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index 04eeb515c9..b0834012bc 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -26,6 +26,7 @@ #define GENITAL_UNDIES_HIDDEN (1<<9) #define UPDATE_OWNER_APPEARANCE (1<<10) #define GENITAL_CAN_TAUR (1<<11) +#define CAN_CUM_INTO (1<<12) //Sandstorm change #define DEF_VAGINA_SHAPE "Human" diff --git a/code/modules/arousal/arousal.dm b/code/modules/arousal/arousal.dm index c3775b929e..7bd9ef2fbd 100644 --- a/code/modules/arousal/arousal.dm +++ b/code/modules/arousal/arousal.dm @@ -97,21 +97,21 @@ to_chat(src,"You climax[isturf(loc) ? " onto [loc]" : ""] with your [G.name].") do_climax(fluid_source, loc, G) -/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, mb_time = 30) //Used for climaxing with any living thing +/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, mb_time = 30, obj/item/organ/genital/Lgen = null) //Used for climaxing with any living thing var/datum/reagents/fluid_source = G.climaxable(src) if(!fluid_source) return if(mb_time) //Skip warning if this is an instant climax. - to_chat(src,"You're about to climax with [L]!") - to_chat(L,"[src] is about to climax with you!") + to_chat(src,"You're about to climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"]!") + to_chat(L,"[src] is about to climax [(Lgen) ? "in your [Lgen.name]" : "with you"]!") if(!do_after(src, mb_time, target = src) || !in_range(src, L) || !G.climaxable(src, TRUE)) return if(spillage) - to_chat(src,"You orgasm with [L], spilling out of them, using your [G.name].") - to_chat(L,"[src] climaxes with you, overflowing and spilling, using [p_their()] [G.name]!") + to_chat(src,"You orgasm with [L], spilling out of [(Lgen) ? "[L.p_their()] [Lgen.name]" : "[L.p_them()]"], using your [G.name].") + to_chat(L,"[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], overflowing and spilling, using [p_their()] [G.name]!") else //knots and other non-spilling orgasms - to_chat(src,"You climax with [L], your [G.name] spilling nothing.") - to_chat(L,"[src] climaxes with you, [p_their()] [G.name] spilling nothing!") + to_chat(src,"You climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"], your [G.name] spilling nothing.") + to_chat(L,"[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], [p_their()] [G.name] spilling nothing!") SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) do_climax(fluid_source, spillage ? loc : L, G, spillage) @@ -126,6 +126,19 @@ to_chat(src,"You used your [G.name] to fill [container].") do_climax(fluid_source, container, G, FALSE) +/mob/living/carbon/human/proc/pick_receiving_organ(mob/living/L) + if (!iscarbon(L)) + return + var/mob/living/carbon/C = L + var/list/receivers_list + var/list/other_worn = C.get_equipped_items() + for(var/obj/item/organ/genital/G in C.internal_organs) + if((G.genital_flags & CAN_CUM_INTO) && G.is_exposed(other_worn)) //filter out what you can't cum into + LAZYADD(receivers_list, G) + if(LAZYLEN(receivers_list)) + var/obj/item/organ/genital/ret_organ = input(src, "in what hole?", "Climax", null) as null|obj in receivers_list + return ret_organ + /mob/living/carbon/human/proc/pick_climax_genitals(silent = FALSE) var/list/genitals_list var/list/worn_stuff = get_equipped_items() @@ -280,12 +293,14 @@ if("Climax with partner") //We need no hands, we can be restrained and so on, so let's pick an organ var/obj/item/organ/genital/picked_organ = pick_climax_genitals() + var/obj/item/organ/genital/picked_target = null if(picked_organ) var/mob/living/partner = pick_partner() //Get someone if(partner) + picked_target = pick_receiving_organ(partner) var/spillage = input(src, "Would your fluids spill outside?", "Choose overflowing option", "Yes") as null|anything in list("Yes", "No") if(spillage && in_range(src, partner)) - mob_climax_partner(picked_organ, partner, spillage == "Yes" ? TRUE : FALSE) + mob_climax_partner(picked_organ, partner, spillage == "Yes" ? TRUE : FALSE, Lgen = picked_target) if("Fill container") //We'll need hands and no restraints. if(!available_rosie_palms(FALSE, /obj/item/reagent_containers)) diff --git a/code/modules/arousal/organs/vagina.dm b/code/modules/arousal/organs/vagina.dm index 5c8bbeea98..41fa0ad3cf 100644 --- a/code/modules/arousal/organs/vagina.dm +++ b/code/modules/arousal/organs/vagina.dm @@ -7,7 +7,7 @@ slot = "vagina" size = 1 //There is only 1 size right now shape = DEF_VAGINA_SHAPE - genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE|GENITAL_UNDIES_HIDDEN + genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE|GENITAL_UNDIES_HIDDEN|CAN_CUM_INTO masturbation_verb = "finger" arousal_verb = "You feel wetness on your crotch" unarousal_verb = "You no longer feel wet"