diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index b0d73615b9..8dd6d80a92 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -173,7 +173,7 @@ /datum/mood_event/orgasm description = "I came!\n" //funny meme haha mood_change = 3 - timeout = 100 SECONDS + timeout = 3 MINUTES /datum/mood_event/fedpred description = "I've devoured someone!\n" diff --git a/code/modules/arousal/genitals_sprite_accessories.dm b/code/modules/arousal/genitals_sprite_accessories.dm index 604963948a..89f2ef34dc 100644 --- a/code/modules/arousal/genitals_sprite_accessories.dm +++ b/code/modules/arousal/genitals_sprite_accessories.dm @@ -6,6 +6,18 @@ var/taur_dimension_y = 32 var/taur_dimension_x = 32 +/* + * This is an example of a penis object in the code. + * The icon_state of the penis is structured as follows: + * "penis_human_4_1_FRONT" + * Where "human" is the type of the penis, "4" is the size stage of the penis, and "1" means it's the erect sprite, while "0" would be the soft one. + * If the sprite is like this: "penis_human_4_s_1_FRONT", the extra "_s" means it's used by the default skintones (the list of default skin tones that "Albino, Caucasian, etc."). + * Those "_s" sprites use a more pink-ish tone instead of white, to match the different default skin tones automatically, + * while the icon states without the "_s" are used by the custom skin tone. + * In the future, it would be best to solve this, as it creates useless duplicated icon states, and therefore heavier file sizes. + * It would be best to just have 1 set of icon states that apply themselves normally to both custom skin tone users and match default skin tone users, + * effectively removing the need of using the extra "_s". - Goku + */ //DICKS,COCKS,PENISES,WHATEVER YOU WANT TO CALL THEM /datum/sprite_accessory/penis diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index f96fe2ac2a..370f8c4eec 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -7,15 +7,31 @@ w_class = WEIGHT_CLASS_SMALL gas_transfer_coefficient = 0.9 equip_delay_other = 20 + equip_delay_self = 20 mutantrace_variation = STYLE_MUZZLE + var/seamless = FALSE -/obj/item/clothing/mask/muzzle/attack_paw(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(src == C.wear_mask) - to_chat(user, "You need help taking this off!") - return - ..() +/obj/item/clothing/mask/muzzle/attack_paw(mob/user, act_intent, attackchain_flags) + if(iscarbon(user)) + var/mob/living/carbon/C = user + if(src == C.wear_mask) + if(seamless) + to_chat(user, span_warning("You need help taking this off!")) + return + else + if(!do_after(C, 60, target = src)) + return + ..() + +/obj/item/clothing/mask/muzzle/attackby(obj/item/K, mob/user, params) + if(istype(K, /obj/item/key/latex)) + if(seamless != FALSE) + to_chat(user, span_notice("The latches suddenly loosen!")) + seamless = FALSE + else + to_chat(user, span_warning("The latches suddenly tighten!")) + seamless = TRUE + return /obj/item/clothing/mask/surgical name = "sterile mask" diff --git a/icons/obj/genitals/penis_onmob.dmi b/icons/obj/genitals/penis_onmob.dmi index 111a36975f..780e982f9e 100644 Binary files a/icons/obj/genitals/penis_onmob.dmi and b/icons/obj/genitals/penis_onmob.dmi differ diff --git a/icons/obj/genitals/testicles_onmob.dmi b/icons/obj/genitals/testicles_onmob.dmi index 5bec4d9b6b..075421afd8 100644 Binary files a/icons/obj/genitals/testicles_onmob.dmi and b/icons/obj/genitals/testicles_onmob.dmi differ diff --git a/modular_sand/code/datums/interactions/_interaction.dm b/modular_sand/code/datums/interactions/_interaction.dm index cf00b85774..28d6c4e441 100644 --- a/modular_sand/code/datums/interactions/_interaction.dm +++ b/modular_sand/code/datums/interactions/_interaction.dm @@ -135,7 +135,7 @@ /// After the interaction, the base only plays the sound and only if it has one /datum/interaction/proc/post_interaction(mob/living/user, mob/living/target) - COOLDOWN_START(user, last_interaction_time, 0.6 SECONDS) + COOLDOWN_START(user, last_interaction_time, 0.55 SECONDS) if(interaction_sound) playsound(get_turf(user), interaction_sound, 50, 1, -1) return diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm index 2434459cdc..258e012e15 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm @@ -25,9 +25,9 @@ var/milktext = milk.name lines = list( - "pushes [u_His] breasts against \the [target]'s mouth, squirting [u_His] warm [lowertext(milktext)] into [t_His] mouth", - "fills \the [target]'s mouth with warm, sweet [lowertext(milktext)] as [u_He] squeezes [u_His] boobs, panting", - "lets a large stream of [u_His] own abundant [lowertext(milktext)] coat the back of \the [target]'s throat" + "pushes [u_His] breasts against \the [target]'s mouth, squirting [u_His] warm [lowertext(milktext)] into [t_His] mouth.", + "fills \the [target]'s mouth with warm, sweet [lowertext(milktext)] as [u_He] squeezes [u_His] boobs, panting.", + "lets a large stream of [u_His] own abundant [lowertext(milktext)] coat the back of \the [target]'s throat." ) message = span_lewd("\The [user] [pick(lines)]") diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm index 8cac9b1c2b..963478fdc4 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm @@ -88,9 +88,9 @@ if(user.has_penis() || user.has_strapon()) var/genital_name = user.get_penetrating_genital_name() if(user.is_fucking(partner, CUM_TARGET_THROAT)) - message = "retracts [u_His] [genital_name] from \the [partner]'s throat" + message = "retracts [u_His] [genital_name] from \the [partner]'s throat." else - message = "shoves [u_His] [genital_name] into \the [partner]'s mouth" + message = "shoves [u_His] [genital_name] into \the [partner]'s mouth." else improv = TRUE if(improv) @@ -150,7 +150,7 @@ genital = check user.set_is_fucking(partner, CUM_TARGET_THROAT, genital) else - message = "forces [u_His] [genital_name] deep down \the [partner]'s throat" + message = "forces [u_His] [genital_name] deep down \the [partner]'s throat." var/check = user.getorganslot(ORGAN_SLOT_PENIS) if(check) genital = check diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm index 14ed43017f..460812fd4b 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm @@ -15,7 +15,7 @@ if(user.is_fucking(partner, CUM_TARGET_VAGINA)) message = "[pick( "pounds \the [partner]'s pussy.", - "shoves [u_His] [genital_name] deep into \the [partner]'s pussy", + "shoves [u_His] [genital_name] deep into \the [partner]'s pussy.", "thrusts in and out of \the [partner]'s cunt.", "goes balls deep into \the [partner]'s pussy over and over again.")]" else @@ -23,7 +23,7 @@ user.set_is_fucking(partner, CUM_TARGET_VAGINA, user.getorganslot(ORGAN_SLOT_PENIS)) playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/champ1.ogg', - 'modular_sand/sound/interactions/champ2.ogg'), 50, 1, -1) + 'modular_sand/sound/interactions/champ2.ogg'), 70, 1, -1) user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_VAGINA, partner, ORGAN_SLOT_PENIS) //SPLURT edit @@ -74,7 +74,7 @@ var/genital_name = user.get_penetrating_genital_name() if(user.is_fucking(partner, CUM_TARGET_BREASTS)) - message = "[pick("fucks \the [partner]'s' breasts.", + message = "[pick("fucks \the [partner]'s breasts.", "grinds [u_His] [genital_name] between \the [partner]'s boobs.", "thrusts into \the [partner]'s tits.", "grabs \the [partner]'s breasts together and presses [u_His] [genital_name] between them.")]" diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm index ede0c0ca04..de5675734d 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm @@ -12,7 +12,7 @@ if(partner.is_fucking(user, CUM_TARGET_VAGINA)) message = "[pick("rides \the [partner]'s [genital_name].", - "forces [partner]'s [genital_name] on [u_His] pussy")]" + "forces [partner]'s [genital_name] on [u_His] pussy.")]" else message = "slides [u_His] pussy onto \the [partner]'s [genital_name]." partner.set_is_fucking(user, CUM_TARGET_VAGINA, partner.getorganslot(ORGAN_SLOT_PENIS)) @@ -38,7 +38,7 @@ if(partner.is_fucking(user, CUM_TARGET_ANUS)) message = "[pick("rides \the [partner]'s [genital_name].", - "forces [partner]'s [genital_name] on [u_His] ass")]" + "forces [partner]'s [genital_name] on [u_His] ass.")]" else message = "lowers [u_His] ass onto \the [partner]'s [genital_name]." partner.set_is_fucking(user, CUM_TARGET_ANUS, partner.getorganslot(ORGAN_SLOT_PENIS)) @@ -68,7 +68,7 @@ else message = "[pick( "grabs the back of \the [partner]'s head and forces it into [u_His] asscheeks.", - "squats down and plants [u_His] ass right on \the [partner]'s face")]" + "squats down and plants [u_His] ass right on \the [partner]'s face.")]" user.set_is_fucking(partner, GRINDING_FACE_WITH_ANUS, null) playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/squelch1.ogg', diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm index 67738e7c0d..b9991235cf 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm @@ -102,9 +102,9 @@ var/milktext = milk.name lines = list( - "brings [u_His] own milk tanks to [u_His] mouth and sucks deeply into them", - "takes a big sip of [u_His] own fresh [lowertext(milktext)]", - "fills [u_His] own mouth with a big gulp of [u_His] warm [lowertext(milktext)]" + "brings [u_His] own milk tanks to [u_His] mouth and sucks deeply into them.", + "takes a big sip of [u_His] own fresh [lowertext(milktext)].", + "fills [u_His] own mouth with a big gulp of [u_His] warm [lowertext(milktext)]." ) message = span_lewd("\The [user] [pick(lines)]") diff --git a/modular_splurt/code/datums/interactions/lewd/_lewd.dm b/modular_splurt/code/datums/interactions/lewd/_lewd.dm index 52160d03d0..3e4948ff85 100644 --- a/modular_splurt/code/datums/interactions/lewd/_lewd.dm +++ b/modular_splurt/code/datums/interactions/lewd/_lewd.dm @@ -125,7 +125,7 @@ gut.climax_modify_size(src, getorganslot(ORGAN_SLOT_PENIS), target_orifice) if(CUM_TARGET_ARMPIT) - message = "cums under \the [partner]'s armpit" + message = "cums under \the [partner]'s armpit!" if(CUM_TARGET_MOUTH, CUM_TARGET_THROAT, CUM_TARGET_VAGINA, CUM_TARGET_ANUS) if(c_partner) @@ -219,7 +219,7 @@ 'modular_sand/sound/interactions/final_m2.ogg', 'modular_sand/sound/interactions/final_m3.ogg', 'modular_sand/sound/interactions/final_m4.ogg', - 'modular_sand/sound/interactions/final_m5.ogg'), 90, 1, 0) + 'modular_sand/sound/interactions/final_m5.ogg'), 70, 1, 0) else if(gender == FEMALE) playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/final_f1.ogg', 'modular_sand/sound/interactions/final_f2.ogg', @@ -286,7 +286,7 @@ if(istype(src, /mob/living)) // Argh. var/mob/living/H = src H.adjustOxyLoss(3) - message = "sucks [t_Him]self off" + message = "sucks [t_Him]self off." lust_increase += 5 else var/improv = FALSE @@ -449,7 +449,7 @@ if(is_fucking(partner, CUM_TARGET_BELLY)) message = "[pick( "pounds \the [partner]'s belly.", - "shoves their [genital_name] deep into \the [partner]'s soft tummy", + "shoves their [genital_name] deep into \the [partner]'s soft tummy.", "thrusts in and out of \the [partner]'s navel.", "goes balls deep into \the [partner]'s gut over and over again.")]" else @@ -467,9 +467,9 @@ var/message var/u_His = p_their() var/list/lines = list( - "squishes [target]'s face [pick(list("in between", "with"))] [u_His] [pick(GLOB.breast_nouns)]", - "presses [u_His] [pick(GLOB.breast_nouns)] into \the [target]'s face", - "shoves \the [target]'s whole head into [u_His] cleavage" + "squishes [target]'s face [pick(list("in between", "with"))] [u_His] [pick(GLOB.breast_nouns)].", + "presses [u_His] [pick(GLOB.breast_nouns)] into \the [target]'s face.", + "shoves \the [target]'s whole head into [u_His] cleavage." ) message = span_lewd("\The [src] [pick(lines)]") @@ -481,10 +481,10 @@ /mob/living/proc/lick_sweat(mob/living/target) var/message var/t_His = target.p_their() - var/list/lines = list("licks \the [target]'s sweat off [t_His] body", - "slurps the salty sweat running through [target]'s skin", - "has a nice taste of \the [target]'s drenched body", - "takes a whiff of \the [target]'s musk and drinks [t_His] warm sweat") + var/list/lines = list("licks \the [target]'s sweat off [t_His] body.", + "slurps the salty sweat running through [target]'s skin.", + "has a nice taste of \the [target]'s drenched body.", + "takes a whiff of \the [target]'s musk and drinks [t_His] warm sweat.") message = span_lewd("\The [src] [pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) @@ -495,9 +495,9 @@ var/u_His = p_their() var/list/musk = list("musky ", "sweaty ", "damp ", "smelly ", "") var/list/lines = list( - "shoves \the [target]'s face in [u_His] [pick(musk)] armpit", - "squeezes \the [target]'s nose under [u_His] [pick(musk)] pit", - "makes sure to squeeze \the [target]'s face well under [u_His] [pick(musk)] armpit and let them take a whiff" + "shoves \the [target]'s face in [u_His] [pick(musk)] armpit.", + "squeezes \the [target]'s nose under [u_His] [pick(musk)] pit.", + "makes sure to squeeze \the [target]'s face well under [u_His] [pick(musk)] armpit and let them take a whiff." ) message = span_lewd("\The [src] [pick(lines)]") @@ -513,8 +513,8 @@ var/list/musk = list("musky ", "sweaty ", "damp ", "smelly ", "") var/list/lines = list( "shoves [u_His] nose deep into \the [target]'s armpit, giving it a big [pick(list("whiff", "lick", "nuzzle"))].", - "presses [u_His] face under \the [target]'s [pick(musk)] pit, [pick(list("tasting and lapping it all over", "sniffing its scent"))]", - "goes face deep into \the [target] [pick(musk)] armpit, worshipping it with [u_His] tongue and nose" + "presses [u_His] face under \the [target]'s [pick(musk)] pit, [pick(list("tasting and lapping it all over", "sniffing its scent"))].", + "goes face deep into \the [target] [pick(musk)] armpit, worshipping it with [u_His] tongue and nose." ) message = span_lewd("\The [src] [pick(lines)]") @@ -534,14 +534,14 @@ if(is_fucking(target, CUM_TARGET_ARMPIT)) lines = list( - " slides [u_His] [genital_name] back and forth under \the [target]'s [pick(musk)] armpit", - "'s [genital_name] drools pre all over \the [target]'s [pick(musk)] armpit, thoroughly fucking its warm embrace", - " shoves [u_His] [genital_name] under \the [target]'s arm, using [t_His] [pick(musk)] pit like a fleshlight" + " slides [u_His] [genital_name] back and forth under \the [target]'s [pick(musk)]armpit.", + "'s [genital_name] drools pre all over \the [target]'s [pick(musk)]armpit, thoroughly fucking its warm embrace.", + " shoves [u_His] [genital_name] under \the [target]'s arm, using [t_His] [pick(musk)]pit like a fleshlight." ) else if(target.is_topless()) lines = list( - " presents [u_His] [genital_name] to \the [target]'s [pick(musk)] armpit, beginning to thrust its whole length right under [t_His] arm!" + " presents [u_His] [genital_name] to \the [target]'s [pick(musk)]armpit, beginning to thrust its whole length right under [t_His] arm!" ) else // https://cdn.discordapp.com/attachments/802990353883070474/962478553117622322/NoName-480p.mp4 lines = list( @@ -598,15 +598,15 @@ if(target.is_fucking(src, CUM_TARGET_BREASTS)) lines = list( - "slides [u_His] [pick(GLOB.breast_nouns)], up and down through \the [target]'s throbbing [genital_name]", - "squeezes [u_His] [pick(GLOB.breast_nouns)] through all of \the [target]'s length", - "jerks \the [target] off lustfully with [u_His] supple [pick(GLOB.breast_nouns)]" + "slides [u_His] [pick(GLOB.breast_nouns)], up and down through \the [target]'s throbbing [genital_name].", + "squeezes [u_His] [pick(GLOB.breast_nouns)] through all of \the [target]'s length.", + "jerks \the [target] off lustfully with [u_His] supple [pick(GLOB.breast_nouns)]." ) else lines = list( - "clamps [u_His] [pick(GLOB.breast_nouns)] around \the [target]'s throbbing [genital_name], wrapping it in their sheer warmth", - "envelops \the [target]'s hard member with [u_His] soft [pick(GLOB.breast_nouns)], giving it a tight and sloshing squeeze", - "lets [u_His] [pick(GLOB.breast_nouns)] fall into \the [target]'s fat [genital_name], smothering it in [u_His] cleavage" + "clamps [u_His] [pick(GLOB.breast_nouns)] around \the [target]'s throbbing [genital_name], wrapping it in their sheer warmth.", + "envelops \the [target]'s hard member with [u_His] soft [pick(GLOB.breast_nouns)], giving it a tight and sloshing squeeze.", + "lets [u_His] [pick(GLOB.breast_nouns)] fall into \the [target]'s fat [genital_name], smothering it in [u_His] cleavage." ) target.set_is_fucking(src, CUM_TARGET_BREASTS, getorganslot(ORGAN_SLOT_PENIS)) @@ -628,15 +628,15 @@ if(target.is_fucking(src, NUTS_TO_FACE)) lines = list( - "worships \the [target]'s [pick(balls)] with [u_His] tongue", - "takes a huff of \the [target]'s heavy ball musk and proceeds to lap the sweat off [t_His] [pick(balls)]", - "plants smooches all over \the [target]'s heavy [pick(balls)], tasting [t_His] nutsack and massaging it with [u_His] lips" + "worships \the [target]'s [pick(balls)] with [u_His] tongue.", + "takes a huff of \the [target]'s heavy ball musk and proceeds to lap the sweat off [t_His] [pick(balls)].", + "plants smooches all over \the [target]'s heavy [pick(balls)], tasting [t_His] nutsack and massaging it with [u_His] lips." ) else lines = list( - "opens [u_His] maw and proceeds to bring \the [target]'s [pick(balls)] right in", - "uses [u_His] tongue to fit \the [target]'s balls in [u_His] mouth, deeply huffing their scent", - "willingly lets \the [target]'s [pick(balls)] fall into and fill [u_His] mouth, lustfully sucking into them" + "opens [u_His] maw and proceeds to bring \the [target]'s [pick(balls)] right in.", + "uses [u_His] tongue to fit \the [target]'s balls in [u_His] mouth, deeply huffing their scent.", + "willingly lets \the [target]'s [pick(balls)] fall into and fill [u_His] mouth, lustfully sucking into them." ) target.set_is_fucking(src, NUTS_TO_FACE, getorganslot(ORGAN_SLOT_PENIS)) @@ -662,15 +662,15 @@ if(is_fucking(target, CUM_TARGET_URETHRA)) lines = list( - "humps right into \the [target]'s [t_genital_name], stretching it as their balls slam together", + "humps right into \the [target]'s [t_genital_name], stretching it as their balls slam together!", "slides [u_His] [u_genital_name] all the way down \the [target]'s own throbbing [t_genital_name], [t_His] urethra is so tight!", - "rams [u_His] [u_genital_name] back and forth through \the [target]'s urethra, giving it a very nice fucking" + "rams [u_His] [u_genital_name] back and forth through \the [target]'s urethra, giving it a very eager fucking!" ) else lines = list( - "'s tip gently smooches \the [target]'s, right before forcing its way right down [t_His] dickhole", - "grinds [u_His] tip against \the [target]'s [t_genital_name], only to slide [u_His] whole [ui_ai_alerts] all the way down to [t_His] base", - "makes \the [target]'s fat [t_genital_name] stretch and throb as the size of [u_His] [u_genital_name] makes its way right in" + "'s tip gently smooches \the [target]'s, right before forcing its way right down [t_His] dickhole.", + "grinds [u_His] tip against \the [target]'s [t_genital_name], only to slide [u_His] whole [ui_ai_alerts] all the way down to [t_His] base.", + "makes \the [target]'s fat [t_genital_name] stretch and throb as the size of [u_His] [u_genital_name] makes its way right in." ) set_is_fucking(target, CUM_TARGET_URETHRA, getorganslot(ORGAN_SLOT_PENIS)) @@ -697,7 +697,7 @@ else if(target.has_breasts(REQUIRE_EXPOSED)) lines = list( "presses [u_His] throbbing tip against \the [target]'s puffy nipple, forcing the whole length all the way in with a wet smack", - "stretches \the [target]'s nipple with his fingers, before forcing it open with the whole girth of [u_His] twitching [genital_name]" + "stretches \the [target]'s nipple with [u_His] fingers, before forcing it open with the whole girth of [u_His] twitching [genital_name]" ) else lines = list( @@ -733,7 +733,7 @@ ) else lines = list( - "presses [u_His] tip against \the [target]'s [pick("pudgy ", "soft ", "")] thighs, soon shoving [u_His] whole length right in between them", + "presses [u_His] tip against \the [target]'s [pick("pudgy ", "soft ", "")]thighs, soon shoving [u_His] whole length right in between them", "presents [u_His] [genital_name] to \the [target]'s legs, ramming its full size right into [t_His] thigh lock", "smooches \the [target]'s crotch with [u_His] throbbing tip, right before piercing between [t_His] thighs with [u_His] full [genital_name]" ) @@ -758,15 +758,15 @@ if(target.is_fucking(src, CUM_TARGET_THIGHS)) lines = list( - "grinds and presses [u_His] thighs [pick("deeply ", "")] against \the [target]'s [genital_name], massaging it all over with [u_His] thighs", - "squeezes \the [target]'s [genital_name] between [u_His] supple thighs, smothering it deep under [u_His] crotch", - "rides \the [target]'s [genital_name] with [u_His] [pick("pudgy ", "soft ", "")]thighs, [t_He] can feel [u_His] flesh smothering it down" + "grinds and presses [u_His] thighs [pick("deeply ", "")] against \the [target]'s [genital_name], massaging it all over with [u_His] thighs.", + "squeezes \the [target]'s [genital_name] between [u_His] supple thighs, smothering it deep under [u_His] crotch.", + "rides \the [target]'s [genital_name] with [u_His] [pick("pudgy ", "soft ", "")]thighs, [t_He] can feel [u_His] flesh smothering it down." ) else lines = list( - "presents [u_His] [pick("pudgy ", "soft ", "")] thighs to \the [target]'s [genital_name], slamming them right into it[pick(" with a [pick("wet ", "")]smack", "")]", - "grinds \the [target]'s tip against [u_His] supple thighs, before slamming them right down into [t_His] [genital_name]", - "forces \the [target]'s [genital_name] right into the tight hold of [u_His] thighs, giving it a deep and lewd squeeze" + "presents [u_His] [pick("pudgy ", "soft ", "")] thighs to \the [target]'s [genital_name], slamming them right into it[pick(" with a [pick("wet ", "")]smack", "")]!", + "grinds \the [target]'s tip against [u_His] supple thighs, before slamming them right down into [t_His] [genital_name]!", + "forces \the [target]'s [genital_name] right into the tight hold of [u_His] thighs, giving it a deep and lewd squeeze!" ) target.set_is_fucking(src, CUM_TARGET_THIGHS, target.getorganslot(ORGAN_SLOT_PENIS)) diff --git a/modular_splurt/code/datums/traits/good.dm b/modular_splurt/code/datums/traits/good.dm index 455fc926c8..0e127ec9d5 100644 --- a/modular_splurt/code/datums/traits/good.dm +++ b/modular_splurt/code/datums/traits/good.dm @@ -1,7 +1,7 @@ /datum/quirk/tough name = "Tough" desc = "Your body is abnormally enduring and can take 10% more damage." - value = 4 + value = 2 medical_record_text = "Patient has an abnormally high capacity for injury." gain_text = span_notice("You feel very sturdy.") lose_text = span_notice("You feel less sturdy.") diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index af515414ba..8e080cc8d8 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -44,6 +44,21 @@ lose_text = span_notice("Having your head pet doesn't sound so bad right about now...") medical_record_text = "Patient cares little with or dislikes being touched." +/datum/quirk/headpat_hater/add() + + var/mob/living/carbon/human/quirk_mob = quirk_holder + + var/datum/action/cooldown/toggle_distant/act_toggle = new + act_toggle.Grant(quirk_mob) + +/datum/quirk/headpat_hater/remove() + + var/mob/living/carbon/human/quirk_mob = quirk_holder + + var/datum/action/cooldown/toggle_distant/act_toggle = locate() in quirk_mob.actions + if(act_toggle) + act_toggle.Remove(quirk_mob) + /datum/quirk/headpat_slut name = "Headpat Slut" desc = "You love the feeling of others touching your head! Maybe a little too much, actually... Others patting your head will provide a bigger mood boost and cause aroused reactions." diff --git a/modular_splurt/code/datums/traits/trait_actions.dm b/modular_splurt/code/datums/traits/trait_actions.dm index 4b62fc2631..43164bf538 100644 --- a/modular_splurt/code/datums/traits/trait_actions.dm +++ b/modular_splurt/code/datums/traits/trait_actions.dm @@ -1494,10 +1494,10 @@ button_icon_state = "blank" // Glow color to use - var/glow_color = "#39ff14" // Neon green + var/glow_color // Thickness of glow outline - var/glow_range = 1 //Less than radfiend + var/glow_range /datum/action/cosglow/update_glow/Grant() @@ -1691,5 +1691,25 @@ to_chat(U, span_warning("You and [C] must both stand still for you to remove one of their limbs!")) return +/datum/action/cooldown/toggle_distant + name = "Toggle Distant" + desc = "Allows you to let your headpat-guard down, or put it back up." + icon_icon = 'modular_splurt/icons/mob/actions/lewd_actions/lewd_icons.dmi' + button_icon_state = "pain_max" + +/datum/action/cooldown/toggle_distant/Trigger() + . = ..() + if(!.) + return + + var/mob/living/carbon/human/action_owner = owner + + if(HAS_TRAIT(action_owner, TRAIT_DISTANT)) + REMOVE_TRAIT(action_owner, TRAIT_DISTANT, ROUNDSTART_TRAIT) + to_chat(action_owner, span_notice("You let your headpat-guard down!")) + else + ADD_TRAIT(action_owner, TRAIT_DISTANT, ROUNDSTART_TRAIT) + to_chat(action_owner, span_warning("You let your headpat-guard up!")) + #undef HYPNOEYES_COOLDOWN_NORMAL #undef HYPNOEYES_COOLDOWN_BRAINWASH diff --git a/modular_splurt/code/modules/client/loadout/socks.dm b/modular_splurt/code/modules/client/loadout/socks.dm index d44e772163..0d48b6707c 100644 --- a/modular_splurt/code/modules/client/loadout/socks.dm +++ b/modular_splurt/code/modules/client/loadout/socks.dm @@ -2,7 +2,7 @@ name = "Cow Thigh High Socks" path = /obj/item/clothing/underwear/socks/thigh/thigh_cow -/datum/gear/socks/thigh/thigh_cow +/datum/gear/socks/thigh/fishnet name = "Fishnet tights" path = /obj/item/clothing/underwear/socks/thigh/fishnet/white //This one is pretty much greyscale aka easier to recolor diff --git a/modular_splurt/code/modules/client/loadout/uniform.dm b/modular_splurt/code/modules/client/loadout/uniform.dm index fedfbf61bc..4b39e33675 100644 --- a/modular_splurt/code/modules/client/loadout/uniform.dm +++ b/modular_splurt/code/modules/client/loadout/uniform.dm @@ -40,6 +40,10 @@ name = "Performers one piece" path = /obj/item/clothing/under/performer +/datum/gear/uniform/blutigen_undergarment + name = "Blutigen Undergarments" + path = /obj/item/clothing/under/blutigen_undergarment + // Suggestion #151 /datum/gear/uniform/waiter name = "waiter's outfit" diff --git a/modular_splurt/code/modules/clothing/masks/miscellaneous.dm b/modular_splurt/code/modules/clothing/masks/miscellaneous.dm index d34201e7a8..caf6cc6a47 100644 --- a/modular_splurt/code/modules/clothing/masks/miscellaneous.dm +++ b/modular_splurt/code/modules/clothing/masks/miscellaneous.dm @@ -1,11 +1,15 @@ //Main code edits /obj/item/clothing/mask/muzzle/attack_hand(mob/user, act_intent, attackchain_flags) - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(src == C.wear_mask) - to_chat(user, span_warning("You need help taking this off!")) - return - ..() + if(iscarbon(user)) + var/mob/living/carbon/C = user + if(src == C.wear_mask) + if(seamless) + to_chat(user, span_warning("You need help taking this off!")) + return + else + if(!do_after(C, 60, target = src)) + return + ..() //Own stuff diff --git a/modular_splurt/code/modules/clothing/under/miscellaneous.dm b/modular_splurt/code/modules/clothing/under/miscellaneous.dm index 9774f6f28c..82c53a84e0 100644 --- a/modular_splurt/code/modules/clothing/under/miscellaneous.dm +++ b/modular_splurt/code/modules/clothing/under/miscellaneous.dm @@ -87,6 +87,17 @@ mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON body_parts_covered = CHEST +/obj/item/clothing/under/blutigen_undergarment + name = "Blutigen Undergarments" + desc = "It'd barely cover your chest and groin." + icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/uniform.dmi' + icon_state = "blutigen_undergarment" + item_state = "blutigen_undergarment" + can_adjust = FALSE + mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON + body_parts_covered = CHEST + /obj/item/clothing/under/bunnysuit/white name = "white bunny outfit" desc = "A simple white bunny outfit." diff --git a/modular_splurt/code/modules/mob/living/living.dm b/modular_splurt/code/modules/mob/living/living.dm index a34675b9a3..2638d8e6c6 100644 --- a/modular_splurt/code/modules/mob/living/living.dm +++ b/modular_splurt/code/modules/mob/living/living.dm @@ -9,26 +9,36 @@ to_chat(usr, span_warning("You cannot toggle your gender while unconcious!")) return - var/choice = tgui_alert(usr, "Select Gender.", "Gender", list("Both", "Male", "Female", "None", "Toggle Breasts")) + var/choice = tgui_alert(usr, "Select Gender.", "Gender", list("Both", "Male", "Female", "None", "Toggle Breasts", "Toggle Penis", "Toggle Pussy", "Toggle Balls")) switch(choice) if("Both") has_penis = TRUE has_balls = TRUE has_vagina = TRUE + gender = PLURAL if("Male") has_penis = TRUE has_balls = TRUE has_vagina = FALSE + gender = MALE if("Female") has_penis = FALSE has_balls = FALSE has_vagina = TRUE + gender = FEMALE if("None") has_penis = FALSE has_balls = FALSE has_vagina = FALSE + gender = NEUTER if("Toggle Breasts") // Idea/Initial code by @LunarFleet (github) has_breasts = !has_breasts // Simplified line by @Zirok-BYOND (github) + if("Toggle Penis") + has_penis = !has_penis + if("Toggle Pussy") + has_vagina = !has_vagina + if("Toggle Balls") + has_balls = !has_balls /// Toggle admin frozen /mob/living/proc/toggle_admin_freeze(client/admin) diff --git a/modular_splurt/icons/mob/clothing/uniform.dmi b/modular_splurt/icons/mob/clothing/uniform.dmi index 38de7053ca..559b834879 100644 Binary files a/modular_splurt/icons/mob/clothing/uniform.dmi and b/modular_splurt/icons/mob/clothing/uniform.dmi differ diff --git a/modular_splurt/icons/obj/clothing/uniforms.dmi b/modular_splurt/icons/obj/clothing/uniforms.dmi index 3b185d8527..ce39086b59 100644 Binary files a/modular_splurt/icons/obj/clothing/uniforms.dmi and b/modular_splurt/icons/obj/clothing/uniforms.dmi differ