Merge branch 'master' into pr/784

This commit is contained in:
BongaTheProto
2024-05-14 19:23:36 -05:00
1986 changed files with 300592 additions and 259562 deletions
@@ -13,7 +13,6 @@
var/t_His = target.p_their()
var/obj/item/organ/genital/breasts/milkers = user.getorganslot(ORGAN_SLOT_BREASTS)
var/milktype = milkers?.fluid_id
var/modifier
var/list/lines
if(!milkers || !milktype)
@@ -34,17 +33,7 @@
playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/oral1.ogg',
'modular_sand/sound/interactions/oral2.ogg'), 70, 1, -1)
switch(milkers.size)
if("c", "d", "e")
modifier = 2
if("f", "g", "h")
modifier = 3
else
if(milkers.size in GLOB.breast_values)
modifier = clamp(GLOB.breast_values[milkers.size] - 5, 0, INFINITY)
else
modifier = 1
target.reagents.add_reagent(milktype, rand(1,3 * modifier))
target.reagents.add_reagent(milktype, rand(1,3 * milkers.get_lactation_amount_modifier()))
/datum/interaction/lewd/titgrope
description = "Grope their breasts."
@@ -79,18 +68,7 @@
var/milktype = milkers?.fluid_id
if(milkers && milktype)
var/modifier
switch(milkers.size)
if("c", "d", "e")
modifier = 2
if("f", "g", "h")
modifier = 3
else
if(milkers.size in GLOB.breast_values) //SPLURT edit - global breast values
modifier = clamp(GLOB.breast_values[milkers.size] - 5, 0, INFINITY)
else
modifier = 1
liquid_container.reagents.add_reagent(milktype, rand(1,3 * modifier))
liquid_container.reagents.add_reagent(milktype, rand(1,3 * milkers.get_lactation_amount_modifier()))
user.visible_message(span_lewd("<b>\The [user]</b> milks <b>[target]</b>'s breasts into \the [liquid_container]."), ignored_mobs = user.get_unconsenting())
playlewdinteractionsound(get_turf(user), 'modular_sand/sound/interactions/squelch1.ogg', 50, 1, -1)
@@ -7,135 +7,95 @@
interaction_sound = null
/datum/interaction/lewd/nipsuck/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target)
if((user.a_intent == INTENT_HELP) || (user.a_intent == INTENT_DISARM))
user.visible_message(
pick(span_lewd("\The <b>[user]</b> gently sucks on \the <b>[target]</b>'s [pick("nipple", "nipples")]."),
span_lewd("\The <b>[user]</b> gently nibs \the <b>[target]</b>'s [pick("nipple", "nipples")]."),
span_lewd("\The <b>[user]</b> licks \the <b>[target]</b>'s [pick("nipple", "nipples")].")))
var/has_breasts = target.has_breasts()
if(has_breasts == TRUE || has_breasts == HAS_EXPOSED_GENITAL)
var/modifier = 1
var/obj/item/organ/genital/breasts/B = target.getorganslot(ORGAN_SLOT_BREASTS)
switch(B.size)
if("c", "d", "e")
modifier = 2
if("f", "g", "h")
modifier = 3
else
if(B.size in GLOB.breast_values)
modifier = clamp(GLOB.breast_values[B.size] - 5, 0, INFINITY)
else
modifier = 1
if(B.fluid_id)
user.reagents.add_reagent(B.fluid_id, rand(1,2 * modifier) * user.get_fluid_mod(B)) //SPLURT edit
if(user.a_intent == INTENT_HARM)
user.visible_message(
pick(span_lewd("\The <b>[user]</b> bites \the <b>[target]</b>'s [pick("nipple", "nipples")]."),
span_lewd("\The <b>[user]</b> aggressively sucks \the <b>[target]</b>'s [pick("nipple", "nipples")].")))
var/has_breasts = target.has_breasts()
if(has_breasts == TRUE || has_breasts == HAS_EXPOSED_GENITAL)
var/modifier = 1
var/obj/item/organ/genital/breasts/B = target.getorganslot(ORGAN_SLOT_BREASTS)
switch(B.size)
if("c", "d", "e")
modifier = 2
if("f", "g", "h")
modifier = 3
else
if(B.size in GLOB.breast_values)
modifier = clamp(GLOB.breast_values[B.size] - 5, 0, INFINITY)
else
modifier = 1
if(B.fluid_id)
user.reagents.add_reagent(B.fluid_id, rand(1,3 * modifier)) //aggressive sucking leads to high rewards
if(user.a_intent == INTENT_GRAB)
user.visible_message(
pick(span_lewd("\The <b>[user]</b> sucks \the <b>[target]</b>'s [pick("nipple", "nipples")] intently."),
span_lewd("\The <b>[user]</b> feasts \the <b>[target]</b>'s [pick("nipple", "nipples")]."),
span_lewd("\The <b>[user]</b> glomps \the <b>[target]</b>'s [pick("nipple", "nipples")].")))
var/has_breasts = target.has_breasts()
if(has_breasts == TRUE || has_breasts == HAS_EXPOSED_GENITAL)
var/modifier = 1
var/obj/item/organ/genital/breasts/B = target.getorganslot(ORGAN_SLOT_BREASTS)
switch(B.size)
if("c", "d", "e")
modifier = 2
if("f", "g", "h")
modifier = 3
else
if(B.size in GLOB.breast_values)
modifier = clamp(GLOB.breast_values[B.size] - 5, 0, INFINITY)
else
modifier = 1
if(B.fluid_id)
user.reagents.add_reagent(B.fluid_id, rand(1,3 * modifier)) //aggressive sucking leads to high rewards
var/user_message
var/amount_high = 2
switch(user.a_intent)
if(INTENT_HELP, INTENT_DISARM)
user_message = pick(span_lewd("\The <b>[user]</b> gently sucks on \the <b>[target]</b>'s [pick("nipple", "nipples")]."),
span_lewd("\The <b>[user]</b> gently nibs \the <b>[target]</b>'s [pick("nipple", "nipples")]."),
span_lewd("\The <b>[user]</b> licks \the <b>[target]</b>'s [pick("nipple", "nipples")]."))
if(INTENT_HARM)
amount_high = 3 // aggressive sucking has higher rewards
user_message = pick(span_lewd("\The <b>[user]</b> bites \the <b>[target]</b>'s [pick("nipple", "nipples")]."),
span_lewd("\The <b>[user]</b> aggressively sucks \the <b>[target]</b>'s [pick("nipple", "nipples")]."))
if(INTENT_GRAB)
amount_high = 3 // aggressive sucking has higher rewards
user_message = pick(span_lewd("\The <b>[user]</b> sucks \the <b>[target]</b>'s [pick("nipple", "nipples")] intently."),
span_lewd("\The <b>[user]</b> feasts \the <b>[target]</b>'s [pick("nipple", "nipples")]."),
span_lewd("\The <b>[user]</b> glomps \the <b>[target]</b>'s [pick("nipple", "nipples")]."))
user.visible_message(user_message)
var/has_breasts = target.has_breasts()
if(has_breasts == TRUE || has_breasts == HAS_EXPOSED_GENITAL)
var/obj/item/organ/genital/breasts/B = target.getorganslot(ORGAN_SLOT_BREASTS)
var/modifier = B?.get_lactation_amount_modifier() || 1
if(B.fluid_id)
user.reagents.add_reagent(B.fluid_id, rand(1,amount_high * modifier) * user.get_fluid_mod(B))
if(prob(5 + target.get_lust()))
if(target.a_intent == INTENT_HELP)
if(!target.has_breasts())
user.visible_message(
pick(span_lewd("\The <b>[target]</b> shivers in arousal."),
span_lewd("\The <b>[target]</b> moans quietly."),
span_lewd("\The <b>[target]</b> breathes out a soft moan."),
span_lewd("\The <b>[target]</b> gasps."),
span_lewd("\The <b>[target]</b> shudders softly."),
span_lewd("\The <b>[target]</b> trembles as their chest gets molested.")))
else
user.visible_message(
pick(span_lewd("\The <b>[target]</b> shivers in arousal."),
span_lewd("\The <b>[target]</b> moans quietly."),
span_lewd("\The <b>[target]</b> breathes out a soft moan."),
span_lewd("\The <b>[target]</b> gasps."),
span_lewd("\The <b>[target]</b> shudders softly."),
span_lewd("\The <b>[target]</b> trembles as their breasts get molested."),
span_lewd("\The <b>[target]</b> quivers in arousal as \the <b>[user]</b> delights themselves on their milk.")))
if(target.get_lust() < 5)
target.handle_post_sex(5, CUM_TARGET_MOUTH, user, ORGAN_SLOT_BREASTS) //SPLURT edit
if(target.a_intent == INTENT_DISARM)
if (target.restrained())
switch(target.a_intent)
if(INTENT_HELP)
if(!target.has_breasts())
user.visible_message(
pick(span_lewd("\The <b>[target]</b> twists playfully against the restraints."),
span_lewd("\The <b>[target]</b> squirms away from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> slides back from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> thrusts their bare chest forward into \the <b>[user]</b>'s mouth.")))
pick(span_lewd("\The <b>[target]</b> shivers in arousal."),
span_lewd("\The <b>[target]</b> moans quietly."),
span_lewd("\The <b>[target]</b> breathes out a soft moan."),
span_lewd("\The <b>[target]</b> gasps."),
span_lewd("\The <b>[target]</b> shudders softly."),
span_lewd("\The <b>[target]</b> trembles as their chest gets molested.")))
else
user.visible_message(
pick(span_lewd("\The <b>[target]</b> twists playfully against the restraints."),
span_lewd("\The <b>[target]</b> squirms away from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> slides back from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> thrust their bare breasts forward into \the <b>[user]</b>'s mouth.")))
else
if(!target.has_breasts())
user.visible_message(
pick(span_lewd("\The <b>[target]</b> playfully shoos away \the <b>[user]</b>'s head."),
span_lewd("\The <b>[target]</b> squirms away from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> holds \the <b>[user]</b>'s head against their chest."),
span_lewd("\The <b>[target]</b> teasingly caresses \the <b>[user]</b>'s neck.")))
pick(span_lewd("\The <b>[target]</b> shivers in arousal."),
span_lewd("\The <b>[target]</b> moans quietly."),
span_lewd("\The <b>[target]</b> breathes out a soft moan."),
span_lewd("\The <b>[target]</b> gasps."),
span_lewd("\The <b>[target]</b> shudders softly."),
span_lewd("\The <b>[target]</b> trembles as their breasts get molested."),
span_lewd("\The <b>[target]</b> quivers in arousal as \the <b>[user]</b> delights themselves on their milk.")))
if(target.get_lust() < 5)
target.handle_post_sex(5, CUM_TARGET_MOUTH, user, ORGAN_SLOT_BREASTS) //SPLURT edit
if(INTENT_DISARM)
if (target.restrained())
if(!target.has_breasts())
user.visible_message(
pick(span_lewd("\The <b>[target]</b> twists playfully against the restraints."),
span_lewd("\The <b>[target]</b> squirms away from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> slides back from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> thrusts their bare chest forward into \the <b>[user]</b>'s mouth.")))
else
user.visible_message(
pick(span_lewd("\The <b>[target]</b> twists playfully against the restraints."),
span_lewd("\The <b>[target]</b> squirms away from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> slides back from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> thrust their bare breasts forward into \the <b>[user]</b>'s mouth.")))
else
user.visible_message(
pick(span_lewd("\The <b>[target]</b> playfully shoos away \the <b>[user]</b>'s head."),
span_lewd("\The <b>[target]</b> squirms away from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> holds \the <b>[user]</b>'s head against their breast."),
span_lewd("\The <b>[target]</b> teasingly caresses \the <b>[user]</b>'s neck."),
span_lewd("\The <b>[target]</b> rubs their breasts against \the <b>[user]</b>'s head.")))
if(target.get_lust() < 10)
target.handle_post_sex(NORMAL_LUST, CUM_TARGET_MOUTH, user, ORGAN_SLOT_BREASTS) //SPLURT edit
if(target.a_intent == INTENT_GRAB)
user.visible_message(
pick(span_lewd("\The <b>[target]</b> grips \the <b>[user]</b>'s head tight."),
span_lewd("\The <b>[target]</b> digs nails into \the <b>[user]</b>'s scalp."),
span_lewd("\The <b>[target]</b> grabs and shoves \the <b>[user]</b>'s head away.")))
if(target.a_intent == INTENT_HARM)
user.adjustBruteLoss(1)
user.visible_message(
pick(span_lewd("\The <b>[target]</b> slaps \the <b>[user]</b> away."),
span_lewd("\The <b>[target]</b> scratches <b>[user]</b>'s face."),
span_lewd("\The <b>[target]</b> fiercely struggles against <b>[user]</b>."),
span_lewd("\The <b>[target]</b> claws <b>[user]</b>'s face, drawing blood."),
span_lewd("\The <b>[target]</b> elbows <b>[user]</b>'s mouth away.")))
if(!target.has_breasts())
user.visible_message(
pick(span_lewd("\The <b>[target]</b> playfully shoos away \the <b>[user]</b>'s head."),
span_lewd("\The <b>[target]</b> squirms away from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> holds \the <b>[user]</b>'s head against their chest."),
span_lewd("\The <b>[target]</b> teasingly caresses \the <b>[user]</b>'s neck.")))
else
user.visible_message(
pick(span_lewd("\The <b>[target]</b> playfully shoos away \the <b>[user]</b>'s head."),
span_lewd("\The <b>[target]</b> squirms away from \the <b>[user]</b>'s mouth."),
span_lewd("\The <b>[target]</b> holds \the <b>[user]</b>'s head against their breast."),
span_lewd("\The <b>[target]</b> teasingly caresses \the <b>[user]</b>'s neck."),
span_lewd("\The <b>[target]</b> rubs their breasts against \the <b>[user]</b>'s head.")))
if(target.get_lust() < 10)
target.handle_post_sex(NORMAL_LUST, CUM_TARGET_MOUTH, user, ORGAN_SLOT_BREASTS) //SPLURT edit
if(INTENT_GRAB)
user.visible_message(
pick(span_lewd("\The <b>[target]</b> grips \the <b>[user]</b>'s head tight."),
span_lewd("\The <b>[target]</b> digs nails into \the <b>[user]</b>'s scalp."),
span_lewd("\The <b>[target]</b> grabs and shoves \the <b>[user]</b>'s head away.")))
if(INTENT_HARM)
user.adjustBruteLoss(1)
user.visible_message(
pick(span_lewd("\The <b>[target]</b> slaps \the <b>[user]</b> away."),
span_lewd("\The <b>[target]</b> scratches <b>[user]</b>'s face."),
span_lewd("\The <b>[target]</b> fiercely struggles against <b>[user]</b>."),
span_lewd("\The <b>[target]</b> claws <b>[user]</b>'s face, drawing blood."),
span_lewd("\The <b>[target]</b> elbows <b>[user]</b>'s mouth away.")))
target.dir = get_dir(target, user)
user.dir = get_dir(user, target)
playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/oral1.ogg',
@@ -122,5 +122,9 @@
'modular_sand/sound/interactions/bj10.ogg',
'modular_sand/sound/interactions/bj11.ogg'), 50, 1, -1)
user.visible_message(span_lewd("<b>\The [user]</b> [message]"), ignored_mobs = user.get_unconsenting())
if(fucktarget != "penis" || partner.can_penetrating_genital_cum())
partner.handle_post_sex(lust_increase, CUM_TARGET_MOUTH, user, ORGAN_SLOT_PENIS) //SPLURT edit
//SPLURT EDIT START
if(fucktarget == "penis" && partner.can_penetrating_genital_cum())
partner.handle_post_sex(lust_increase, CUM_TARGET_MOUTH, user, ORGAN_SLOT_PENIS)
else if(fucktarget == "vagina" && partner.has_vagina())
partner.handle_post_sex(lust_increase, CUM_TARGET_MOUTH, user, ORGAN_SLOT_VAGINA)
//SPLURT EDIT END
@@ -61,18 +61,7 @@
var/milktype = milkers?.fluid_id
if(milkers && milktype)
var/modifier
switch(milkers.size)
if(3 to 5)
modifier = 2
if(6 to 8)
modifier = 3
else
if(milkers.size_to_state() in GLOB.breast_values)
modifier = clamp(GLOB.breast_values[milkers.size_to_state()] - 5, 0, INFINITY)
else
modifier = 1
liquid_container.reagents.add_reagent(milktype, rand(1,3 * modifier))
liquid_container.reagents.add_reagent(milktype, rand(1,3 * milkers.get_lactation_amount_modifier()))
user.visible_message(message = span_lewd("<b>\The [user]</b> [message]."), ignored_mobs = user.get_unconsenting())
playlewdinteractionsound(get_turf(user), 'modular_sand/sound/interactions/squelch1.ogg', 50, 1, -1)
@@ -92,7 +81,6 @@
var/u_His = user.p_their()
var/obj/item/organ/genital/breasts/milkers = user.getorganslot(ORGAN_SLOT_BREASTS)
var/milktype = milkers?.fluid_id
var/modifier
var/list/lines
if(!milkers || !milktype)
@@ -113,14 +101,4 @@
playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/oral1.ogg',
'modular_sand/sound/interactions/oral2.ogg'), 70, 1, -1)
switch(milkers.size)
if("c", "d", "e")
modifier = 2
if("f", "g", "h")
modifier = 3
else
if(milkers.size in GLOB.breast_values)
modifier = clamp(GLOB.breast_values[milkers.size] - 5, 0, INFINITY)
else
modifier = 1
user.reagents.add_reagent(milktype, rand(1,3 * modifier) * user.get_fluid_mod(milkers)) //SPLURT edit
user.reagents.add_reagent(milktype, rand(1,3 * milkers.get_lactation_amount_modifier()) * user.get_fluid_mod(milkers)) //SPLURT edit
@@ -487,7 +487,7 @@
user.last_lewd_datum = src
if(user.cleartimer)
deltimer(user.cleartimer)
user.cleartimer = addtimer(CALLBACK(user, /mob/living/proc/clear_lewd_datum), 300, TIMER_STOPPABLE)
user.cleartimer = addtimer(CALLBACK(user, TYPE_PROC_REF(/mob/living, clear_lewd_datum)), 300, TIMER_STOPPABLE)
return ..()
/mob/living/list_interaction_attributes(mob/living/LM)