From 5bc00f5c2d052eb3a518d9d21fdc8cf8fa87afab Mon Sep 17 00:00:00 2001 From: QuoteFox <49098813+quotefox@users.noreply.github.com> Date: Sat, 1 Aug 2020 07:29:26 +0100 Subject: [PATCH] Adds condoms and genital colour tinting commands. Adds condoms and genital colour tinting commands. --- hyperstation/code/obj/condom.dm | 103 ++++++++++++++++++ hyperstation/icons/obj/clothing/head.dmi | Bin 390 -> 874 bytes hyperstation/icons/obj/condom.dmi | Bin 1227 -> 2479 bytes .../code/game/machinery/vending.dm | 1 + .../code/modules/arousal/arousal.dm | 50 ++++++++- .../code/modules/arousal/organs/genitals.dm | 7 ++ sound/lewd/latex.ogg | Bin 0 -> 12617 bytes tgstation.dme | 1 + 8 files changed, 156 insertions(+), 6 deletions(-) create mode 100644 hyperstation/code/obj/condom.dm create mode 100644 sound/lewd/latex.ogg diff --git a/hyperstation/code/obj/condom.dm b/hyperstation/code/obj/condom.dm new file mode 100644 index 00000000..41c645ff --- /dev/null +++ b/hyperstation/code/obj/condom.dm @@ -0,0 +1,103 @@ +//Made by quotefox +//Really needs some work, mainly because condoms should be a container for semen, but I dont know how that works yet. Feel free to improve upon. + +/obj/item/condom + name = "condom" + desc = "Dont be silly, cover your willy!" + icon = 'hyperstation/icons/obj/condom.dmi' + throwforce = 0 + icon_state = "b_condom_wrapped" + var/unwrapped = 0 + w_class = WEIGHT_CLASS_TINY + +/obj/item/condom/attack_self(mob/user) //Unwrap The Condom in hands + if(!istype(user)) + return + if(isliving(user)) + if(unwrapped == 0) + icon_state = "b_condom" + unwrapped = 1 + to_chat(user, "You unwrap the condom.") + playsound(user, 'sound/items/poster_ripped.ogg', 50, 1, -1) + return + if(unwrapped == 1) + new /obj/item/clothing/head/condom(usr.loc) + qdel(src) + to_chat(user, "You roll the condom out.") + playsound(user, 'sound/lewd/latex.ogg', 50, 1, -1) + return + +/obj/item/condom/attack(mob/living/carbon/C, mob/living/user) //apply the johnny on another person or yourself + + if(unwrapped == 0 ) + to_chat(user, "You must remove the condom from the package first!") + return + var/obj/item/organ/genital/penis/P = C.getorganslot("penis") + if(P&&P.is_exposed()) + if(P.condom) + to_chat(user, "They already have a condom on!") + return + if(isliving(C)&&isliving(user)&&unwrapped == 1) + C.visible_message("[user] is trying to put a condom on [C]!",\ + "[user] is trying to put a condom on you!") + if(!do_mob(user, C, 4 SECONDS)) //if Failed to put the condom on + return + var/mob/living/carbon/human/L = C + playsound(C, 'sound/lewd/latex.ogg', 50, 1, -1) + P.condom = 1 //apply condom + P.colourtint = "87ceeb" + if(L) + L.update_genitals() // apply the colour! + to_chat(C, "Your penis feels more safe!") + qdel(src) + + return + to_chat(user, "You can't find anywhere to put the condom on.") //Trying to put it on something without/or with a hidden + +/obj/item/clothing/head/condom //this is ss13, it would be a sin to not include this.. + name = "condom" + icon = 'hyperstation/icons/obj/condom.dmi' + desc = "Looks like someone had abit of some fun!" + alternate_worn_icon = 'hyperstation/icons/obj/clothing/head.dmi' + icon_state = "b_condom_out" + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 5, "rad" = 0, "fire" = 0, "acid" = 0) + + +/mob/living/carbon/human/proc/removecondom() + + var/obj/item/organ/genital/penis/P = src.getorganslot("penis") + if(P.condom) + new /obj/item/clothing/head/condom(usr.loc) + to_chat(src, "The condom slips off the end of your penis.") + P.condom = 0 + P.colourtint = "" + src.update_genitals() + +/obj/item/condom/filled + name = "filled condom" + icon_state = "b_condom_inflated" + unwrapped = 2 + w_class = WEIGHT_CLASS_TINY + +/obj/item/condom/filled/throw_impact(atom/hit_atom) + . = ..() + if(!.) //if we're not being caught + splat(hit_atom) + +/obj/item/condom/filled/proc/splat(atom/movable/hit_atom) + if(isliving(loc)) + return + var/turf/T = get_turf(hit_atom) + new/obj/effect/decal/cleanable/semen(T) + playsound(T, "sound/misc/splort", 50, TRUE) + qdel(src) + +/mob/living/carbon/human/proc/condomclimax() + + var/obj/item/organ/genital/penis/P = src.getorganslot("penis") + if(P.condom) + new /obj/item/condom/filled(usr.loc) + to_chat(src, "The condom bubbled outwards and filled with your cum.") + P.condom = 0 + P.colourtint = "" + src.update_genitals() \ No newline at end of file diff --git a/hyperstation/icons/obj/clothing/head.dmi b/hyperstation/icons/obj/clothing/head.dmi index 7fee19144597ea6425d00ab646e25e6d7dd258d6..aa31b4fb80efe15d5799a2d83b0dd9a2a4d6dec8 100644 GIT binary patch delta 864 zcmZo;e#JIHyxxI>je&t-Rc7HmAk|$J5>eukTAW;zSx}OhpU1#ZF{kyEH5ap@h}*+k zySwJkw0m;(7E61A;bvCDi$|hYEHLkXx?I9T{L)F!?>;wz49k(hDw5_|LGKKc1{8@H8Lvu>oxZDigsk?98G4G+dQ3^_{}${5U| z^&fmRvQ91jd2!9xr$K>{y65h0p3v};@A&s`VzM`Qn$e0X%X>d_rr?WqS&7N*5o zX6UFc2zVRr*Jo^D-0>r)Pr9uW)-~RNzvvgv*vpT=z zjr82_uQdefxFlqyABHpT;q$*1Ial(ZEbo`{rZ<%buAOID3W{=&_0pORvJJf=2lx)S laV4-PDC2M?SlQY7i#NWoESom-IWP+`c)I$ztaD0e0s!D5jjI3v delta 376 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 literal 1227 zcmV;+1T_1JP)TcZnSkeDK!|fue**(GQdffKH@c%Ho=P9hi;go@ww&oQPJ^W=KgE!|5)7fCa&JM)Avi)|Mu$G{PpVp|Nn%x&nA1U9smFU0d!JMQvg8b*k%9#0G@hOSad{X zb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1pai!&v&s2C_^$iO1mgq& zJCFoKC)EMX>jz53-`VIVP0F*eLP6L%c0;GMOlTBg=as2(q&wltz zaV49CibrFbaHZXa{4>O$>h2weE>JkAC86wf5vnK)BNEm zHB{g+T?^*O}>}uT|1w1cp`J%I(kBr@4*1)YwS}<_d=v8g;=~_d76CRnHwkw zoEI`uh!TE98{y&d1H{98OcPEEr0V0moXy~i2Z8@ZV-WgdzK4IIAn;{@&B<`Cm^IZH z1pdo>4QR`fJ+JPK|st=Mopv(958XE*I{pY?bMNJP~zK`ZLE(@#?qLNmN zpvm_wkIew;d~Xe)%J+5vntU(!U`?CtfiB-yH9}Eo+fxHH`M#=2-(S1QZB?}iMP;6L z7D8KA{hgeg{x2Eh_m(oo@2&k!@p(%@d@gsnNHSo~N^Sn$+Fk}LA{<+^pJzAQPozb( zT??;vpQ$zf9Xz$y{dbWIFxE88?GjYUth5AB`rB$j4Y1TgYou start to [G.masturbation_verb] your [G.name].") if(do_after(src, mb_time, target = src)) - if(total_fluids > 5) + if(total_fluids > 5 &&!condomed) fluid_source.reaction(src.loc, TOUCH, 1, 0) fluid_source.clear_reagents() - src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \ + if(!condomed) + src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \ "You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].", \ "You have relieved yourself.") + if(condomed) //condomed + src.visible_message("[src] orgasms, climaxing into [p_their()] condom ", \ + "You cum into your condom.", \ + "You have relieved yourself.") + if(total_fluids > 0 &&condomed) + src.condomclimax() + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) if(G.can_climax) setArousalLoss(min_arousal) @@ -331,7 +344,6 @@ SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) if(G.can_climax) - setArousalLoss(min_arousal) else //knots and other non-spilling orgasms @@ -347,13 +359,14 @@ if(G.can_climax) setArousalLoss(min_arousal) + if(impreg) //Role them odds, only people with the dicks can send the chance to the person with the settings enabled at the momment. var/obj/item/organ/genital/womb/W = L.getorganslot("womb") if (L.breedable == 1 && W.pregnant == 0) //Dont get pregnant again, if you are pregnant. log_game("Debug: [L] has been impregnated by [src]") to_chat(L, "You feel your hormones change, and a motherly instinct take over.") //leting them know magic has happened. - W.pregnant = 1 //self insert fetish + W.pregnant = 1 var/obj/item/organ/genital/breasts/B = L.getorganslot("womb") @@ -366,6 +379,12 @@ var/total_fluids = 0 var/datum/reagents/fluid_source = null + + if(G.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, "You cannot fill containers when there is a condom over your [G.name].") + return if(G.producing) //Can it produce its own fluids, such as breasts? fluid_source = G.reagents else @@ -515,9 +534,27 @@ 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") + var/choice = input(src, "Select sexual activity", "Sexual activity:") in list("Masturbate", "Climax alone", "Climax with partner", "Fill container", "Remove condom") switch(choice) + if("Remove condom") + if(restrained(TRUE)) //TRUE ignores grabs + to_chat(src, "You can't do that while restrained!") + return + var/free_hands = get_num_arms() + if(!free_hands) + to_chat(src, "You need at least one free arm.") + return + var/obj/item/organ/genital/penis/P = src.getorganslot("penis") + if(!P.condom) + to_chat(src, "You don't have a condom on!") + return + if(P.condom) + to_chat(src, "You tug the condom off the end of your penis!") + src.removecondom() + return + return + if("Masturbate") if(restrained(TRUE)) //TRUE ignores grabs to_chat(src, "You can't do that while restrained!") @@ -573,7 +610,8 @@ if(picked_organ) var/mob/living/partner = pick_partner() //Get someone if(partner) - if(partner.breedable == 1 && picked_organ.name == "penis") + var/obj/item/organ/genital/penis/P = picked_organ + if(partner.breedable == 1 && picked_organ.name == "penis"&&!P.condom == 1) var/impreg = input(src, "Would this action carry the risk of pregnancy?", "Choose a option", "Yes") as anything in list("Yes", "No") 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") diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index 5b4f0929..436fdfbc 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -21,6 +21,7 @@ var/through_clothes = FALSE var/internal = FALSE var/hidden = FALSE + var/colourtint = "" /obj/item/organ/genital/Initialize() . = ..() @@ -355,6 +356,7 @@ var/list/standing = list() var/size var/aroused_state + var/colourtint for(var/L in relevant_layers) //Less hardcode H.remove_overlay(L) @@ -374,6 +376,7 @@ var/datum/sprite_accessory/S size = G.size aroused_state = G.aroused_state + colourtint = G.colourtint switch(G.type) if(/obj/item/organ/genital/penis) S = GLOB.cock_shapes_list[G.shape] @@ -399,10 +402,14 @@ if(use_skintones && H.dna.features["genitals_use_skintone"]) genital_overlay.color = "#[skintone2hex(H.skin_tone)]" genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]-s_[aroused_state]_[layertext]" + if (colourtint) + genital_overlay.color = "#[colourtint]" else switch(S.color_src) if("cock_color") genital_overlay.color = "#[H.dna.features["cock_color"]]" + if (colourtint) + genital_overlay.color = "#[colourtint]" if("balls_color") genital_overlay.color = "#[H.dna.features["balls_color"]]" if("breasts_color") diff --git a/sound/lewd/latex.ogg b/sound/lewd/latex.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d9a602244e25b690483bac21e87849e96deee028 GIT binary patch literal 12617 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 z zY;57ZgWVw|ZhDZ!;}Yk{p6Y)r9&j9&!t{lIrmlSDa^KLzwkiKZ@{HKV7Z@OisFifJ*MffrQ8_)?+des293fT{ z)r)2JXS;k{Msy>_3^s+l)Ea^;jvZ{I-U7eGUv6eay7kqOKa&r%I{Z|YkmJSVwdAse!$@|A7oe;fWf81FtuK$aX{ZgzW zU~GMv`1SZkuVKKECKDMDSo-Ug=+DNJRofPgM@j?ou#lo#O#)dBlD_vm;-Q-olg?zKK6+9AruXeuo0Y`3dM`#)vglMDa= literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 8db13612..ff15b12a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2903,6 +2903,7 @@ #include "hyperstation\code\modules\resize\sizechems.dm" #include "hyperstation\code\modules\resize\sizegun.dm" #include "hyperstation\code\obj\bluespace sewing kit.dm" +#include "hyperstation\code\obj\condom.dm" #include "hyperstation\code\obj\decal.dm" #include "hyperstation\code\obj\fluff.dm" #include "hyperstation\code\obj\kinkyclothes.dm"