diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 33fa4ebc..7de000c2 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -715,6 +715,8 @@
if(creamed) //clean both to prevent a rare bug
cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_lizard"))
cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_human"))
+ cut_overlay(mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi', "cum_normal"))
+ cut_overlay(mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi', "cum_large"))
creamed = FALSE
//Turns a mob black, flashes a skeleton overlay
diff --git a/hyperstation/icons/effects/cumoverlay.dmi b/hyperstation/icons/effects/cumoverlay.dmi
new file mode 100644
index 00000000..542ce503
Binary files /dev/null and b/hyperstation/icons/effects/cumoverlay.dmi differ
diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm
index 8ab3c58a..db9f4c91 100644
--- a/modular_citadel/code/modules/arousal/arousal.dm
+++ b/modular_citadel/code/modules/arousal/arousal.dm
@@ -321,7 +321,7 @@
setArousalLoss(min_arousal)
-/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, impreg = FALSE, 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, impreg = FALSE,cover = FALSE, mb_time = 30) //Used for climaxing with any living thing
var/total_fluids = 0
var/datum/reagents/fluid_source = null
@@ -331,13 +331,37 @@
if(!G.linked_organ)
to_chat(src, "Your [G.name] is unable to produce it's own fluids, it's missing the organs for it.")
return
- fluid_source = G.linked_organ.reagents
+ fluid_source = G.linked_organ.reagents
total_fluids = fluid_source.total_volume
+
if(mb_time) //Skip warning if this is an instant climax.
src.visible_message("[src] is about to climax with [L]!", \
"You're about to climax with [L]!", \
"You're preparing to climax with someone!")
- if(spillage)
+
+ if(cover)//covering the partner in cum, this overrides other options.
+ if(do_after(src, mb_time, target = src) && in_range(src, L))
+ fluid_source.trans_to(L, total_fluids*G.fluid_transfer_factor)
+ total_fluids -= total_fluids*G.fluid_transfer_factor
+ if(B.total_fluids > 80) // now thats a big cum!
+ var/mutable_appearance/cumoverlaylarge = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
+ cumoverlaylarge.icon_state = "cum_large"
+ L.add_overlay(cumoverlaylarge)
+ if(total_fluids > 5)
+ fluid_source.reaction(L.loc, TOUCH, 1, 0)
+ fluid_source.clear_reagents()
+ src.visible_message("[src] climaxes over [L][cover ? ", coating them":""], using [p_their()] [G.name]!", \
+ "You orgasm over [L][cover ? ", drenching them":""], using your [G.name].", \
+ "You have climaxed over someone[cover ? ", coating them":""], using your [G.name].")
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
+ var/mob/living/carbon/human/H = L
+ var/mutable_appearance/cumoverlay = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
+ cumoverlay.icon_state = "cum_normal"
+ L.add_overlay(cumoverlay)
+ if(G.can_climax)
+ setArousalLoss(min_arousal)
+
+ if(spillage && !cover)
if(do_after(src, mb_time, target = src) && in_range(src, L))
fluid_source.trans_to(L, total_fluids*G.fluid_transfer_factor)
total_fluids -= total_fluids*G.fluid_transfer_factor
@@ -354,17 +378,18 @@
setArousalLoss(min_arousal)
else //knots and other non-spilling orgasms
- if(do_after(src, mb_time, target = src) && in_range(src, L))
- fluid_source.trans_to(L, total_fluids)
- total_fluids = 0
- src.visible_message("[src] climaxes with [L], [p_their()] [G.name] spilling nothing!", \
- "You ejaculate with [L], your [G.name] spilling nothing.", \
- "You have climaxed inside someone, your [G.name] spilling nothing.")
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
- SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
+ if(!cover)
+ if(do_after(src, mb_time, target = src) && in_range(src, L))
+ fluid_source.trans_to(L, total_fluids)
+ total_fluids = 0
+ src.visible_message("[src] climaxes with [L], [p_their()] [G.name] spilling nothing!", \
+ "You ejaculate with [L], your [G.name] spilling nothing.", \
+ "You have climaxed inside someone, your [G.name] spilling nothing.")
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
+ SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
- if(G.can_climax)
- setArousalLoss(min_arousal)
+ if(G.can_climax)
+ setArousalLoss(min_arousal)
//Hyper - antag code
if(src.mind.special_role == ROLE_LEWD_TRAITOR)
@@ -381,7 +406,7 @@
to_chat(L, "You feel your hormones change, and a motherly instinct take over.") //leting them know magic has happened.
W.pregnant = 1
- var/obj/item/organ/genital/breasts/B = L.getorganslot("womb")
+ var/obj/item/organ/genital/breasts/B = L.getorganslot("breasts")
if (B.fluid_mult < 0.5 && B) //pregnancy causes mammals to produce milk faster. no point setting their fluid, lower if they are already higher.
B.fluid_mult = 0.5
@@ -550,7 +575,7 @@
return
//Ok, now we check what they want to do.
- var/choice = input(src, "Select sexual activity", "Sexual activity:") in list("Masturbate", "Climax alone", "Climax with partner", "Fill container", "Remove condom", "Remove sounding rod")
+ var/choice = input(src, "Select sexual activity", "Sexual activity:") in list("Masturbate", "Climax alone", "Climax with partner","Climax over partner", "Fill container", "Remove condom", "Remove sounding rod")
switch(choice)
if("Remove sounding rod")
@@ -650,23 +675,23 @@
if(impreg == "Yes") //If we are impregging
var/spillage = input(src, "Would your fluids spill outside?", "Choose overflowing option", "Yes") as anything in list("Yes", "No")
if(spillage == "Yes")
- mob_climax_partner(picked_organ, partner, TRUE, TRUE)
+ mob_climax_partner(picked_organ, partner, TRUE, TRUE, FALSE)
else
- mob_climax_partner(picked_organ, partner, FALSE, TRUE)
+ mob_climax_partner(picked_organ, partner, FALSE, TRUE, FALSE)
else
var/spillage = input(src, "Would your fluids spill outside?", "Choose overflowing option", "Yes") as anything in list("Yes", "No")
if(spillage == "Yes")
- mob_climax_partner(picked_organ, partner, TRUE, FALSE)
+ mob_climax_partner(picked_organ, partner, TRUE, FALSE, FALSE)
else
- mob_climax_partner(picked_organ, partner, FALSE, FALSE) //Wow, im trash at coding, I need to find a better way of coding this, ill rewrite it later.-quote
+ mob_climax_partner(picked_organ, partner, FALSE, FALSE, FALSE) //Wow, im trash at coding, I need to find a better way of coding this, ill rewrite it later.-quote
return
else //If we arent impregging
var/spillage = input(src, "Would your fluids spill outside?", "Choose overflowing option", "Yes") as anything in list("Yes", "No")
if(spillage == "Yes")
- mob_climax_partner(picked_organ, partner, TRUE, FALSE)
+ mob_climax_partner(picked_organ, partner, TRUE, FALSE, FALSE)
else
- mob_climax_partner(picked_organ, partner, FALSE, FALSE)
+ mob_climax_partner(picked_organ, partner, FALSE, FALSE, FALSE)
return
else
@@ -675,6 +700,15 @@
else //They either lack organs that can masturbate, or they didn't pick one.
to_chat(src, "You cannot climax without choosing genitals.")
return
+ if("Climax over partner")
+ var/obj/item/organ/genital/picked_organ
+ picked_organ = pick_climax_genitals()
+ if(picked_organ)
+ var/mob/living/partner = pick_partner() //Get someone
+ if(partner)
+ mob_climax_partner(picked_organ, partner, FALSE, FALSE, TRUE)
+ else
+ to_chat(src, "You cannot do this alone.")
if("Fill container")
//We'll need hands and no restraints.