From f9d7b255b18b5bd3240b491ffca733b1486abd73 Mon Sep 17 00:00:00 2001 From: QuoteFox <49098813+quotefox@users.noreply.github.com> Date: Thu, 24 Dec 2020 19:10:47 +0000 Subject: [PATCH] Cum over partner option Cum over partner option --- code/modules/mob/living/carbon/human/human.dm | 2 + hyperstation/icons/effects/cumoverlay.dmi | Bin 0 -> 5880 bytes .../code/modules/arousal/arousal.dm | 76 +++++++++++++----- 3 files changed, 57 insertions(+), 21 deletions(-) create mode 100644 hyperstation/icons/effects/cumoverlay.dmi 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 0000000000000000000000000000000000000000..542ce503a2167d69445b6c5e7bf9f7ccca13c334 GIT binary patch literal 5880 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%0Ah=u1m6|Nm#R!%-WkbWt*%PegSrrwO? z=0&mT=T_4*`iUWmzS+t5-oWLVN457l(!Y%kNYDlxPd~8kkH|z%nVIsvgbChmYOJkY zPL8R51-UjGsdDSt+=XVBKM7czbXBehBUJrpU;OfGrBcpflkXmog5>)j7r|85$PP;X z39H-Cf2>;>CA&>b`OdQm?Td2)Y_2Azrhj@rwAMtce+a+a?sp?D*66=O7Cng#VPp{{ znfd8#vu;kq>kwd_hF9(~|H3wlDA!&J#=!Z9t6B!vqC@xaEmPljcqlZhco@xti;zR0 z)wu3~pW)m6gsHk24qm81=cnIAdR+olF1*8p-Kd?C!iliSfhfg*hT@c+^-<5h$LOAc zMXka7YrI?}3ZPqnAvef_LBT@uYJ#SAk81k>9AK(FSPLa7CCpcIFA^ z3!OucUjfzBO(F9`n8l5epp_}ns{k%Dz0kb?!;=N12|hlD1LaDWLaOkyu~A*1Kp|O` zXE*@9F{vXHvYj{km;1Wl*nd*!K;{=mfFt4`oVebol^kKLsX}xpzJIrTrzMAj-rX7c z&X$8Va1PJ5kewjqT~Vxj!$OrATeclosr@*(?Xe!kVM3*93fpMiPnw0j=Jmm==%WM?PI7~T9NecNSKk{O_wh{khOoMmYK>VF+=`>S87 zS<8DwR0}Pc7{p0n4HEe$gN-!sCV~0ZKt)Cc_nR3u%_Z!OA}*Qu_4mrH4-k(Z@iI1^ z4x(RPttmqyKmTEE{-65=5(V$h{6w5^rS$)^FhvsnGAH;!u4(m42%+6FZ1?u@2n>%z0t~tr))TvPTabmA5GM4~~xrB9(obYGT@b zC!d(N)1pK#;(O4O2@2!<42XCT}&v8G5nI#j{ z+er@}9&6MjdNNAQ7XMS)Zm3AdkPa}6cg}^Tcb)(nKQ^T;?U{#+G}u>swHJhUKX~Ei zVhtOUJ6>*`I+x<5Tz9-#;-OK5doJa<^LzYNyjI=(jSbR$1 z$qZJz9fM79(1~FsbN8Btul(&m+Jzk0*o7QDQY`Feb~cRL=JybZlNr}gQdrWa&RW;d z{9F7Z>8Twh3TSHyqS3~{N>8U>A`PfIpx#ru4OzCp2sSn2(%UPZ_-`(@6p*95v zrmhN^UCwG3%XhR*4~;OZ#JHl8LLuF}v!w>;2C8#F@^MDU@4L=xE4cK&1YX2 z!8i^&MN@5p<#UTlY3{x<`>^Q>bK3R7-H;JJbnkz-sRY8r2+U5a0JbswO#CQWv_;69 zq6!+}31C>n%g{=Ov&Wq9&dT&=!vx!VicQpkw{5vNwE$t+1^ltBd`r4pg|F2mKVW0H zcMMNLER7m*2CVJ}zJX+Yo23qFQ0z00Tk%@NGQD0sYfc**5Z6!GG{#$3I z%O{yvD=TEFi?-4-BoA885)D&gJj8p0a9yEg?;n)i#X?En&yin;W(D5G`%_n3PqFp& zXMu1p<&L-33^bIiA8_w?iik!W4^EC-gI3ybGXL)s6pt5{D<`X%qe>^k_=SUI!flU3 zSsK@h;WEv}e5}Upl@~J$ErURj!F7Xt_}nWBpiaNU=L7DAQ74`${P2cf86{& zIYTlt`zW()+0DgG?szJy`Uz=)f)<>F!0g}1S?D&_9t4IPIR&v1JA<=yrc{sqs|Bfd zg7CO&&T2H-?&%3T1al~FD|~HuC?ytq(e-}pl06yU3T>?DA#WC2J4RY3Mn6XAi~Zs@ z=BxG;eYDnLW-f&Ii0VbGf5Q8jTG_F zD_SC@$SE>Kc|OK=S8kbw4{WZWWpKZWXWle(@U}k--qVrNaakz@ZLLl8^bWPP{X?fa-=DHWER7I)FRr$XWtuhZLZ3jk z+}!6{;00I;iZ#$osHz#!K}o4$gScCJ*j6@D>qK^MfO;ANVXX+$3}P!A@JdNj@teHG GyZ-}-d5TH^ literal 0 HcmV?d00001 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.