diff --git a/.vscode/settings.json b/.vscode/settings.json index a5b8836ee3..2fdade81ec 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,7 +10,7 @@ "**/.pnp.*": true }, "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" + "source.fixAll.eslint": true }, "workbench.editorAssociations": { "*.dmi": "dmiEditor.dmiEditor" diff --git a/code/__SPLURTCODE/DEFINES/lewd.dm b/code/__SPLURTCODE/DEFINES/lewd.dm index c812bb3aef..4c9e118605 100644 --- a/code/__SPLURTCODE/DEFINES/lewd.dm +++ b/code/__SPLURTCODE/DEFINES/lewd.dm @@ -1,13 +1,3 @@ -//TODO: update leg checks so they don't have to use these defines: -#define REQUIRE_NONE 0 -#define REQUIRE_EXPOSED 1 -#define REQUIRE_UNEXPOSED 2 -#define REQUIRE_ANY 3 - -//Lewd interaction checks -#define INTERACTION_REQUIRE_BELLY (1<<10) - -//Cum targets #define CUM_TARGET_NIPPLE "nipple" #define CUM_TARGET_URETHRA "urethra" #define CUM_TARGET_THIGHS "thighs" diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index 024dcac868..c8131dc1cd 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -308,7 +308,7 @@ // if(G.is_exposed()) //Checks appropriate clothing slot and if it's through_clothes LAZYADD(gen_index[G.layer_index], G) - if(has_strapon() == HAS_EXPOSED_GENITAL) + if(has_strapon(REQUIRE_EXPOSED)) LAZYADD(gen_index[PENIS_LAYER_INDEX], get_strapon()) for(var/L in gen_index) if(L) //skip nulls diff --git a/modular_sand/code/_globalvars/bitfields.dm b/modular_sand/code/_globalvars/bitfields.dm index 8af3886e4f..e821b1dc15 100644 --- a/modular_sand/code/_globalvars/bitfields.dm +++ b/modular_sand/code/_globalvars/bitfields.dm @@ -51,7 +51,6 @@ DEFINE_BITFIELD(required_from_user_exposed, list( "INTERACTION_REQUIRE_FEET" = INTERACTION_REQUIRE_FEET, "INTERACTION_REQUIRE_PENIS" = INTERACTION_REQUIRE_PENIS, "INTERACTION_REQUIRE_VAGINA" = INTERACTION_REQUIRE_VAGINA, - "INTERACTION_REQUIRE_BELLY" = INTERACTION_REQUIRE_BELLY )) DEFINE_BITFIELD(required_from_user_unexposed, list( @@ -65,7 +64,6 @@ DEFINE_BITFIELD(required_from_user_unexposed, list( "INTERACTION_REQUIRE_FEET" = INTERACTION_REQUIRE_FEET, "INTERACTION_REQUIRE_PENIS" = INTERACTION_REQUIRE_PENIS, "INTERACTION_REQUIRE_VAGINA" = INTERACTION_REQUIRE_VAGINA, - "INTERACTION_REQUIRE_BELLY" = INTERACTION_REQUIRE_BELLY )) DEFINE_BITFIELD(slot_flags, list( @@ -115,7 +113,6 @@ DEFINE_BITFIELD(required_from_target_exposed, list( "INTERACTION_REQUIRE_FEET" = INTERACTION_REQUIRE_FEET, "INTERACTION_REQUIRE_PENIS" = INTERACTION_REQUIRE_PENIS, "INTERACTION_REQUIRE_VAGINA" = INTERACTION_REQUIRE_VAGINA, - "INTERACTION_REQUIRE_BELLY" = INTERACTION_REQUIRE_BELLY )) DEFINE_BITFIELD(required_from_target_unexposed, list( @@ -129,7 +126,6 @@ DEFINE_BITFIELD(required_from_target_unexposed, list( "INTERACTION_REQUIRE_FEET" = INTERACTION_REQUIRE_FEET, "INTERACTION_REQUIRE_PENIS" = INTERACTION_REQUIRE_PENIS, "INTERACTION_REQUIRE_VAGINA" = INTERACTION_REQUIRE_VAGINA, - "INTERACTION_REQUIRE_BELLY" = INTERACTION_REQUIRE_BELLY )) DEFINE_BITFIELD(vis_flags_inv, list( diff --git a/modular_sand/code/game/objects/items/fleshlight.dm b/modular_sand/code/game/objects/items/fleshlight.dm index a09f5490dd..1684a7c9e5 100644 --- a/modular_sand/code/game/objects/items/fleshlight.dm +++ b/modular_sand/code/game/objects/items/fleshlight.dm @@ -56,9 +56,10 @@ if(ishuman(M) && (M?.client?.prefs?.toggles & VERB_CONSENT)) switch(user.zone_selected) if(BODY_ZONE_PRECISE_GROIN) - if(M.has_penis() == HAS_EXPOSED_GENITAL || M.has_strapon() == HAS_EXPOSED_GENITAL) + var/has_penis = M.has_penis() || M.has_strapon() + if(has_penis == TRUE || has_penis == HAS_EXPOSED_GENITAL) var/genital_name = (user == M) ? user.get_penetrating_genital_name() : M.get_penetrating_genital_name() - message = (user == M) ? "pumps [src] on [possessive_verb] [genital_name]" : "pumps \the [src] on [M]'s [genital_name]" + message = (user == M) ? pick("pumps [src] on [possessive_verb] [genital_name]") : pick("pumps \the [src] on [M]'s [genital_name]") lust_amt = NORMAL_LUST if(message) user.visible_message(span_lewd("[user] [message].")) @@ -141,192 +142,20 @@ if(ishuman(M) && (M?.client?.prefs?.toggles & VERB_CONSENT) && useable) // I promise all those checks are worth it! switch(user.zone_selected) if(BODY_ZONE_PRECISE_GROIN) - switch(targetting) - if(CUM_TARGET_PENIS) - if(M.has_penis() == HAS_EXPOSED_GENITAL || M.has_strapon() == HAS_EXPOSED_GENITAL) - switch(portalunderwear.targetting) - if(CUM_TARGET_PENIS) - user_message = (user == M) ? "frots with the [penis_names[3]] [name]" : "forces \the [M] to frot with the [penis_names[3]] [name]" - target_message = "frot with you" - target = CUM_TARGET_PENIS - user_lust_amt = NORMAL_LUST - target_lust_amt = NORMAL_LUST - if(CUM_TARGET_VAGINA) - user_message = (user == M) ? "fucks \the [src]'s pussy" : "forces \the [M] to fuck \the [src]'s pussy" - target_message = "fuck your pussy with their [penis_names[1]] [penis_names[2]]" - target = CUM_TARGET_PENIS - user_lust_amt = NORMAL_LUST - target_lust_amt = NORMAL_LUST - if(CUM_TARGET_ANUS) - user_message = (user == M) ? "fucks \the [src] anally" : "forces \the [M] to fuck \the [src] anally" - target_message = "fuck you anally with their [penis_names[1]] [penis_names[2]]" - target = CUM_TARGET_PENIS - user_lust_amt = NORMAL_LUST - target_lust_amt = NORMAL_LUST - if(CUM_TARGET_MOUTH) - user_message = (user == M) ? "fucks \the [src]'s mouth" : "forces \the [M] to fuck \the [src]'s mouth" - target_message = "fuck your mouth with their [penis_names[1]] [penis_names[2]]" - target = CUM_TARGET_PENIS - user_lust_amt = NORMAL_LUST - target_lust_amt = LOW_LUST - if(CUM_TARGET_URETHRA) - user_message = (user == M) ? "fucks \the [src]'s urethra" : "forces \the [M] to fuck \the [src]'s urethra" - target_message = "fuck your urethra with their [penis_names[1]] [penis_names[2]]" - target = CUM_TARGET_PENIS - user_lust_amt = NORMAL_LUST - target_lust_amt = LOW_LUST - else - to_chat(user, "The penis is covered or there is none!") - if(CUM_TARGET_VAGINA) - if(M.has_vagina() == HAS_EXPOSED_GENITAL) - switch(portalunderwear.targetting) - if(CUM_TARGET_PENIS) - user_message = (user == M) ? "fucks the [penis_names[3]] [name]" : "fucks \the [M] with the [penis_names[3]] [name]" - target_message = "fuck your [penis_names[4]] with their pussy" - target = CUM_TARGET_VAGINA - user_lust_amt = NORMAL_LUST - target_lust_amt = NORMAL_LUST - if(CUM_TARGET_VAGINA) - user_message = (user == M) ? "grinds [M.p_their()] pussy into \the [src]'s pussy" : "rubs \the [src]'s pussy against \the [M]'s pussy" - target_message = "grind their pussy into yours" - target = CUM_TARGET_VAGINA - user_lust_amt = NORMAL_LUST - target_lust_amt = NORMAL_LUST - if(CUM_TARGET_ANUS) - user_message = (user == M) ? "grinds [M.p_their()] pussy into \the [src]'s anus" : "rubs \the [src]'s anus against \the [M]'s pussy" - target_message = "grind their pussy into your anus" - target = CUM_TARGET_VAGINA - user_lust_amt = LOW_LUST - target_lust_amt = LOW_LUST - if(CUM_TARGET_MOUTH) - user_message = (user == M) ? "grinds [M.p_their()] pussy into \the [src]'s mouth" : "rubs \the [src]'s mouth against \the [M]'s pussy" - target_message = "grind their pussy into your mouth" - target = CUM_TARGET_VAGINA - user_lust_amt = NORMAL_LUST - target_lust_amt = LOW_LUST - /* // i don't know how this would work - if(CUM_TARGET_URETHRA) - user_message = (user == M) ? "fucking urethra" : "force someone to fuck urethra" - target_message = "urethra fucked by pussy" - target = CUM_TARGET_VAGINA - user_lust_amt = NORMAL_LUST - target_lust_amt = LOW_LUST - */ - else - to_chat(user, "The vagina is covered or there is none!") - if(CUM_TARGET_ANUS) - if(M.has_anus() == HAS_EXPOSED_GENITAL) - switch(portalunderwear.targetting) - if(CUM_TARGET_PENIS) - user_message = (user == M) ? "uses the [penis_names[3]] [name] to fuck [M.p_them()]self anally" : "fucks \the [M] anally with the [penis_names[3]] [name]" - target_message = "fuck your [penis_names[4]] with an anus" - target = CUM_TARGET_ANUS - user_lust_amt = NORMAL_LUST - target_lust_amt = NORMAL_LUST - if(CUM_TARGET_VAGINA) - user_message = (user == M) ? "grinds [M.p_their()] anus into \the [src]'s pussy" : "rubs \the [src]'s pussy against \the [M]'s anus" - target_message = "grind their anus into your pussy" - target = CUM_TARGET_ANUS - user_lust_amt = LOW_LUST - target_lust_amt = LOW_LUST - if(CUM_TARGET_ANUS) - user_message = (user == M) ? "grinds [M.p_their()] anus into \the [src]'s anus" : "rubs \the [src]'s anus against \the [M]'s anus" - target_message = "grind their anus into yours" - target = CUM_TARGET_ANUS - user_lust_amt = LOW_LUST - target_lust_amt = LOW_LUST - if(CUM_TARGET_MOUTH) - user_message = (user == M) ? "grinds [M.p_their()] anus into \the [src]'s mouth" : "rubs \the [src]'s mouth against \the [M]'s anus" - target_message = "grind their anus into your mouth" - target = CUM_TARGET_ANUS - user_lust_amt = NORMAL_LUST - target_lust_amt = LOW_LUST - /* // i don't know how this would work - if(CUM_TARGET_URETHRA) - user_message = (user == M) ? "fucking urethra" : "force someone to fuck urethra" - target_message = "urethra fucked by ass" - target = CUM_TARGET_ANUS - user_lust_amt = NORMAL_LUST - target_lust_amt = LOW_LUST - */ - else - to_chat(user, "The anus is covered or there is none!") - if(CUM_TARGET_URETHRA) - if(M.has_penis() == HAS_EXPOSED_GENITAL || M.has_strapon() == HAS_EXPOSED_GENITAL) - switch(portalunderwear.targetting) - if(CUM_TARGET_PENIS) - user_message = (user == M) ? "fuck your urethra with dick" : "fuck someone elses urethra with dick" - target_message = "dick is fucked by urethra" - target = CUM_TARGET_URETHRA - user_lust_amt = NORMAL_LUST - target_lust_amt = NORMAL_LUST - /* // I don't know how these would work - if(CUM_TARGET_VAGINA) - user_message = (user == M) ? "fuck your urethra with pussy" : "fuck someone elses urethra with pussy" - target_message = "pussy is fucked by urethra" - target = CUM_TARGET_URETHRA - user_lust_amt = LOW_LUST - target_lust_amt = LOW_LUST - if(CUM_TARGET_ANUS) - user_message = (user == M) ? "fuck your urethra with ass" : "fuck someone elses urethra with ass" - target_message = "ass is fucked by urethra" - target = CUM_TARGET_URETHRA - user_lust_amt = LOW_LUST - target_lust_amt = LOW_LUST - if(CUM_TARGET_MOUTH) - user_message = (user == M) ? "fuck your urethra with mouth" : "fuck someone elses urethra with mouth" - target_message = "mouth is fucked by urethra" - target = CUM_TARGET_URETHRA - user_lust_amt = NORMAL_LUST - target_lust_amt = LOW_LUST - if(CUM_TARGET_URETHRA) - user_message = (user == M) ? "fuck your urethra with partner urethra" : "fuck someone elses urethra with partner urethra" - target_message = "partner urethra is fucked by urethra" - target = CUM_TARGET_URETHRA - user_lust_amt = NORMAL_LUST - target_lust_amt = LOW_LUST - */ - else - to_chat(user, "The urethra is covered or there is none!") + var/has_penis = M.has_penis() + if(has_penis == TRUE || has_penis == HAS_EXPOSED_GENITAL) + message = (user == M) ? pick("fucks into [src]") : pick("forces [M] to fuck into [src]") + lust_amt = NORMAL_LUST + P = M.getorganslot(ORGAN_SLOT_PENIS) + target = P if(BODY_ZONE_PRECISE_MOUTH) - if((M.has_mouth() && !M.is_mouth_covered())) - switch(portalunderwear.targetting) - if(CUM_TARGET_PENIS) - user_message = (user == M) ? "sucks on the [penis_names[3]] [name]" : "forces \the [M] to suck on the [penis_names[3]] [name]" - target_message = "suck on your [penis_names[4]]" - target = CUM_TARGET_MOUTH - user_lust_amt = LOW_LUST - target_lust_amt = NORMAL_LUST - if(CUM_TARGET_VAGINA) - user_message = (user == M) ? "laps at \the [src]'s pussy" : "rubs \the [src]'s pussy against \the [M]'s mouth" - target_message = "lap at your pussy" - target = CUM_TARGET_MOUTH - user_lust_amt = LOW_LUST - target_lust_amt = NORMAL_LUST - if(CUM_TARGET_ANUS) - user_message = (user == M) ? "laps at \the [src]'s anus" : "rubs \the [src]'s anus against \the [M]'s mouth" - target_message = "lap at your anus" - target = CUM_TARGET_MOUTH - user_lust_amt = LOW_LUST - target_lust_amt = NORMAL_LUST - if(CUM_TARGET_MOUTH) - user_message = (user == M) ? "kisses \the [src]'s mouth" : "forces \the [src]'s lips and \the [M]'s lips together" - target_message = "kiss your mouth" - target = CUM_TARGET_MOUTH - user_lust_amt = LOW_LUST - target_lust_amt = LOW_LUST - /* // i don't know how this would work - if(CUM_TARGET_URETHRA) - user_message = (user == M) ? "fucking urethra" : "force someone to fuck urethra" - target_message = "urethra fucked by mouth" - target = CUM_TARGET_MOUTH - user_lust_amt = NORMAL_LUST - target_lust_amt = LOW_LUST - */ - else - to_chat(user, "The mouth is covered or there is none!") - if(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM) - if(M.has_hand(REQUIRE_ANY)) + if(M.has_mouth() && !M.is_mouth_covered()) + message = (user == M) ? pick("licks into [src]") : pick("forces [M] to lick into [src]") + lust_amt = NORMAL_LUST + arouse_only_target = TRUE + target = "mouth" + if(BODY_ZONE_R_ARM) + if(M.has_hand()) var/can_interact = FALSE if(user.zone_selected == BODY_ZONE_R_ARM) for(var/obj/item/bodypart/r_arm/R in M.bodyparts) @@ -625,6 +454,7 @@ var/targetting = CUM_TARGET_VAGINA equip_delay_self = 2 SECONDS equip_delay_other = 5 SECONDS + is_edible = 0 /obj/item/clothing/underwear/briefs/panties/portalpanties/attack_self(mob/user) . = ..() @@ -679,11 +509,13 @@ var/mob/living/carbon/human/human = M switch(targetting) if(CUM_TARGET_VAGINA) - if(!human.has_vagina() == HAS_EXPOSED_GENITAL) + var/has_vagina = !human.has_vagina() + if(has_vagina == TRUE || has_vagina == HAS_EXPOSED_GENITAL) to_chat(human, span_warning("The vagina is covered or there is none!")) return FALSE if(CUM_TARGET_ANUS) - if(!human.has_anus() == HAS_EXPOSED_GENITAL) + var/has_anus = !human.has_anus() + if(has_anus == TRUE || has_anus == HAS_EXPOSED_GENITAL) to_chat(human, span_warning("The anus is covered or there is none!")) return FALSE if(CUM_TARGET_PENIS) diff --git a/modular_splurt/code/datums/interactions/cuddling.dm b/modular_splurt/code/datums/interactions/cuddling.dm index 51d2987f1f..8f72bdefe7 100644 --- a/modular_splurt/code/datums/interactions/cuddling.dm +++ b/modular_splurt/code/datums/interactions/cuddling.dm @@ -2,7 +2,7 @@ description = "Cuddle with them." simple_message = "USER cuddles TARGET." simple_style = "lewd" - interaction_flags = INTERACTION_FLAG_ADJACENT + needs_physical_contact = TRUE /datum/interaction/cuddle/display_interaction(mob/living/user, mob/living/target) var/static/list/possible_messages = list( diff --git a/modular_splurt/code/datums/interactions/lewd/_lewd.dm b/modular_splurt/code/datums/interactions/lewd/_lewd.dm index 88705c9ab8..b19805d668 100644 --- a/modular_splurt/code/datums/interactions/lewd/_lewd.dm +++ b/modular_splurt/code/datums/interactions/lewd/_lewd.dm @@ -1,9 +1,9 @@ /mob/living var/has_belly = FALSE -/mob/living/has_anus() +/mob/living/has_anus(visibility = REQUIRE_ANY) if(getorganslot(ORGAN_SLOT_ANUS)) - return has_genital(ORGAN_SLOT_ANUS) + return has_genital(ORGAN_SLOT_ANUS, visibility) . = ..() /mob/living/add_lust(add) @@ -42,11 +42,29 @@ else return dif -/mob/living/proc/has_belly() +/mob/living/proc/has_belly(var/nintendo = REQUIRE_ANY) var/mob/living/carbon/C = src - if(has_belly || !istype(C)) + if(has_belly && !istype(C)) return TRUE - return has_genital(ORGAN_SLOT_BELLY) + if(istype(C)) + var/obj/item/organ/genital/peepee = C.getorganslot(ORGAN_SLOT_BELLY) + if(peepee) + switch(nintendo) + if(REQUIRE_ANY) + return TRUE + if(REQUIRE_EXPOSED) + if(peepee.is_exposed()) + return TRUE + else + return FALSE + if(REQUIRE_UNEXPOSED) + if(!peepee.is_exposed()) + return TRUE + else + return FALSE + else + return TRUE + return FALSE /mob/living/cum(mob/living/partner, target_orifice) var/message //if this doesn't exist it calls ..() @@ -92,7 +110,7 @@ message = "cums... somehow..." if(CUM_TARGET_BELLY) cumin = TRUE - if(partner.has_belly() == HAS_EXPOSED_GENITAL) + if(partner.has_belly(REQUIRE_EXPOSED)) message = "cums into the [partner]'s navel, [pick(list("making it into a massive pond of jizz", "[p_their()] spunk drooling out of it"))]." if(c_partner) target_gen = c_partner.getorganslot(ORGAN_SLOT_BELLY) @@ -156,7 +174,7 @@ message = "cums... somehow..." if(CUM_TARGET_BELLY) cumin = TRUE - if(partner.has_belly() == HAS_EXPOSED_GENITAL) + if(partner.has_belly(REQUIRE_EXPOSED)) message = "cums into the [partner]'s navel, [pick(list("making it into a massive pond of jizz", "[p_their()] spunk drooling out of it"))]." if(c_partner) target_gen = c_partner.getorganslot(ORGAN_SLOT_BELLY) @@ -277,9 +295,9 @@ if(user.has_vagina()) message = pick( "licks [t_His] pussy.", - "runs [t_His] tongue up the shape of [t_His] pussy.", - "traces [t_His] slit with [t_His] tongue.", - "darts the tip of [t_His] tongue around [t_His] clit.", + "runs their tongue up the shape of [t_His] pussy.", + "traces [t_His] slit with their tongue.", + "darts the tip of their tongue around [t_His] clit.", "laps slowly at [t_Him].", "kisses [t_His] delicate folds.", "tastes [t_Him].", @@ -291,12 +309,12 @@ var/genital_name = user.get_penetrating_genital_name() message = pick( "sucks [t_Him] off.", - "runs [t_His] tongue up the shape of [t_His] [genital_name].", - "traces [t_His] [genital_name] with [t_His] tongue.", - "darts the tip of [t_His] tongue around tip of [t_His] [genital_name].", + "runs their tongue up the shape of [t_His] [genital_name].", + "traces [t_His] [genital_name] with their tongue.", + "darts the tip of their tongue around tip of [t_His] [genital_name].", "laps slowly at [t_His] shaft.", "kisses the base of [t_His] shaft.", - "takes [t_Him] deeper into [t_His] mouth.", + "takes [t_Him] deeper into their mouth.", ) else improv = TRUE @@ -305,9 +323,9 @@ message = pick( "licks [t_Him].", "looks a little unsure of where to lick [t_Him].", - "runs [t_His] tongue between [t_His] legs.", + "runs their tongue between [t_His] legs.", "kisses [t_His] thigh.", - "tries [t_His] best with [t_Him].", + "tries their best with [t_Him].", ) else var/improv = FALSE @@ -315,12 +333,12 @@ if("vagina") if(user.has_vagina()) message = pick( - "buries [t_His] face in [t_His] pussy.", + "buries their face in [t_His] pussy.", "nuzzles [t_His] wet sex.", - "finds [t_His] face caught between [t_His] thighs.", + "finds their face caught between [t_His] thighs.", "kneels down between [t_His] legs.", "grips [t_His] legs, pushing them apart.", - "sinks [t_His] face in between [t_His] thighs.", + "sinks their face in between [t_His] thighs.", ) else improv = TRUE @@ -328,11 +346,11 @@ if(user.has_penis() || user.has_strapon()) var/genital_name = user.get_penetrating_genital_name() message = pick( - "takes [t_His] [genital_name] into [t_His] mouth.", - "wraps [t_His] lips around [t_His] [genital_name].", - "finds [t_His] face between [t_His] thighs.", + "takes [t_His] [genital_name] into their mouth.", + "wraps their lips around [t_His] [genital_name].", + "finds their face between [t_His] thighs.", "kneels down between [t_His] legs.", - "grips [t_His] legs, kissing at the tip of [t_His] [genital_name].", + "grips [t_His] legs, kissing at the tip of their [genital_name].", "goes down on [t_Him].", ) else @@ -365,7 +383,7 @@ 'modular_sand/sound/interactions/bj6.ogg', 'modular_sand/sound/interactions/bj7.ogg', 'modular_sand/sound/interactions/bj8.ogg', - 'modular_sand/sound/interactions/bj9.ogg', [t_His + 'modular_sand/sound/interactions/bj9.ogg', 'modular_sand/sound/interactions/bj10.ogg', 'modular_sand/sound/interactions/bj11.ogg'), 50, 1, -1) visible_message(message = span_lewd("\The [src] [message]"), ignored_mobs = get_unconsenting()) @@ -380,11 +398,11 @@ if(is_fucking(user, CUM_TARGET_BREASTS)) message = "[pick("fucks [t_His] breasts.", - "grinds [t_His] [genital_name] between [t_His] boobs.", + "grinds their [genital_name] between [t_His] boobs.", "thrusts into [t_His] tits.", - "grabs [t_His] breasts together and presses [t_His] [genital_name] between them.")]" + "grabs [t_His] breasts together and presses their [genital_name] between them.")]" else - message = "pushes [t_His] breasts together and presses [t_His] [genital_name] between them." + message = "pushes [t_His] breasts together and presses their [genital_name] between them." set_is_fucking(user, CUM_TARGET_BREASTS, getorganslot(ORGAN_SLOT_PENIS) ? getorganslot(ORGAN_SLOT_PENIS) : null) playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', @@ -427,12 +445,11 @@ /mob/living/proc/do_bellyfuck(mob/living/partner) var/message var/genital_name = get_penetrating_genital_name() - var/u_His = p_their() if(is_fucking(partner, CUM_TARGET_BELLY)) message = "[pick( "pounds \the [partner]'s belly.", - "shoves [u_His] [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 @@ -671,13 +688,13 @@ var/u_His = p_their() var/genital_name = get_penetrating_genital_name() var/t_His = target.p_their() - if(is_fucking(target, CUM_TARGET_NIPPLE) && target.has_breasts() == HAS_EXPOSED_GENITAL) + if(is_fucking(target, CUM_TARGET_NIPPLE) && target.has_breasts(REQUIRE_EXPOSED)) lines = list( "slides [u_His] [genital_name] back and forth into \the [target]'s nipple", "thrusts in and out of \the [target]'s leaky and puffy nip, making [t_His] [pick(GLOB.breast_nouns)] slosh and leak", "'s balls slap loudly against \the [target]'s jostling [pick(GLOB.breast_nouns)] as [t_His] nipple swallows [u_His] [genital_name] whole" ) - else if(target.has_breasts() == HAS_EXPOSED_GENITAL) + 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 [u_His] fingers, before forcing it open with the whole girth of [u_His] twitching [genital_name]" @@ -800,9 +817,9 @@ var/message var/u_His = p_their() var/genital_name = "crotch" - if(target.has_penis() == HAS_EXPOSED_GENITAL || target.has_strapon() == HAS_EXPOSED_GENITAL) + if(target.has_penis(REQUIRE_EXPOSED) || target.has_strapon(REQUIRE_EXPOSED)) genital_name = target.get_penetrating_genital_name() - else if(target.has_vagina() == HAS_EXPOSED_GENITAL) + else if(target.has_vagina(REQUIRE_EXPOSED)) var/obj/item/organ/genital/vagina/genital = target.getorganslot(ORGAN_SLOT_VAGINA) genital_name = genital.name @@ -827,9 +844,9 @@ visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(loc, pick(GLOB.brap_noises), 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) if(!target.is_fucking(src, CUM_TARGET_ANUS)) - var/obj/item/organ/genital/genital = target.has_penis() == HAS_EXPOSED_GENITAL ? target.getorganslot(ORGAN_SLOT_PENIS) : (target.has_vagina() == HAS_EXPOSED_GENITAL ? target.getorganslot(ORGAN_SLOT_VAGINA) : null) + var/obj/item/organ/genital/genital = target.has_penis(REQUIRE_EXPOSED) ? target.getorganslot(ORGAN_SLOT_PENIS) : (target.has_vagina(REQUIRE_EXPOSED) ? target.getorganslot(ORGAN_SLOT_VAGINA) : null) target.set_is_fucking(src, CUM_TARGET_ANUS, genital) - if(!target.has_strapon() == HAS_EXPOSED_GENITAL) + if(!target.has_strapon(REQUIRE_EXPOSED)) target.handle_post_sex(NORMAL_LUST, CUM_TARGET_ANUS, src) handle_post_sex(NORMAL_LUST, null, target) @@ -864,7 +881,7 @@ hell = list( "can already smell the stench as [u_He] works [u_His] [genital_name] into \the [target]'s brap hole, being received by a long and warm backblast.", "grabs the base of [u_His] twitching [genital_name] and presses the tip into \the [target]'s asshole, acting like a valve that unearths impossible amounts of pure, [pick(stank)] flatulence.", - "shoves [u_His] [genital_name] deep inside of \the [target]'s [pick(ass)], [t_He] [pick(braps)][pick("", ". [jiggle]")]") + "shoves their [genital_name] deep inside of \the [target]'s [pick(ass)], [t_He] [pick(braps)][pick("", ". [jiggle]")]") set_is_fucking(target, CUM_TARGET_ANUS, getorganslot(ORGAN_SLOT_PENIS)) message = span_lewd("\The [src] [pick(hell)]") @@ -938,9 +955,9 @@ var/u_His = p_their() var/genital_name = "crotch" - if(target.has_penis() == HAS_EXPOSED_GENITAL || target.has_strapon() == HAS_EXPOSED_GENITAL) + if(target.has_penis(REQUIRE_EXPOSED) || target.has_strapon(REQUIRE_EXPOSED)) genital_name = target.get_penetrating_genital_name() - else if(target.has_vagina() == HAS_EXPOSED_GENITAL) + else if(target.has_vagina(REQUIRE_EXPOSED)) var/obj/item/organ/genital/vagina/genital = target.getorganslot(ORGAN_SLOT_VAGINA) genital_name = genital.name @@ -960,10 +977,10 @@ visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(loc, pick(GLOB.brap_noises), 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) - var/obj/item/organ/genital/G = target.has_penis() == HAS_EXPOSED_GENITAL ? target.getorganslot(ORGAN_SLOT_PENIS) : (target.has_vagina() == HAS_EXPOSED_GENITAL ? target.getorganslot(ORGAN_SLOT_VAGINA) : null) + var/obj/item/organ/genital/G = target.has_penis(REQUIRE_EXPOSED) ? target.getorganslot(ORGAN_SLOT_PENIS) : (target.has_vagina(REQUIRE_EXPOSED) ? target.getorganslot(ORGAN_SLOT_VAGINA) : null) if(!target.is_fucking(src, CUM_TARGET_ANUS)) target.set_is_fucking(src, CUM_TARGET_ANUS, G) - if(!target.has_strapon() == HAS_EXPOSED_GENITAL) + if(!target.has_strapon(REQUIRE_EXPOSED)) target.handle_post_sex(NORMAL_LUST, CUM_TARGET_ANUS, src, G) handle_post_sex(NORMAL_LUST, null, target) @@ -1052,7 +1069,7 @@ /mob/living/carbon/proc/piss_mouth(mob/living/target) var/message - var/pee_pee = (has_penis() == HAS_EXPOSED_GENITAL ? getorganslot(ORGAN_SLOT_PENIS) : (has_vagina() == HAS_EXPOSED_GENITAL ? getorganslot(ORGAN_SLOT_VAGINA) : null)) + var/pee_pee = (has_penis(REQUIRE_EXPOSED) ? getorganslot(ORGAN_SLOT_PENIS) : (has_vagina(REQUIRE_EXPOSED) ? getorganslot(ORGAN_SLOT_VAGINA) : null)) var/u_His = p_their() var/t_Him = target.p_them() var/list/hell = list( diff --git a/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm b/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm index c85494c916..951be296c2 100644 --- a/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm +++ b/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm @@ -387,11 +387,9 @@ /datum/interaction/lewd/oral/selfsuck description = "Suck yourself off." interaction_sound = null - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS - required_from_user_unexposed = NONE - interaction_flags = INTERACTION_FLAG_ADJACENT | INTERACTION_FLAG_OOC_CONSENT | INTERACTION_FLAG_USER_IS_TARGET + require_target_vagina = REQUIRE_NONE + require_user_penis = REQUIRE_EXPOSED + user_is_target = TRUE max_distance = 0 write_log_user = "sucked off" write_log_target = null @@ -410,11 +408,8 @@ /datum/interaction/lewd/oral/suckvagself description = "Lick your own pussy." interaction_sound = null - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_VAGINA - required_from_user_unexposed = NONE - interaction_flags = INTERACTION_FLAG_ADJACENT | INTERACTION_FLAG_OOC_CONSENT | INTERACTION_FLAG_USER_IS_TARGET + require_user_penis = REQUIRE_NONE + user_is_target = TRUE max_distance = 0 write_log_user = "Сunni off" write_log_target = null @@ -425,11 +420,9 @@ /datum/interaction/lewd/breastfuckself description = "Fuck your breasts." interaction_sound = null - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS | INTERACTION_REQUIRE_BREASTS - required_from_user_unexposed = NONE - interaction_flags = INTERACTION_FLAG_ADJACENT | INTERACTION_FLAG_OOC_CONSENT | INTERACTION_FLAG_USER_IS_TARGET + require_user_penis = REQUIRE_EXPOSED + require_user_breasts = REQUIRE_EXPOSED + user_is_target = TRUE max_distance = 0 write_log_user = "Breastfucked" write_log_target = null @@ -446,10 +439,8 @@ /datum/interaction/lewd/fuck/belly description = "Fuck their belly." - required_from_target_exposed = INTERACTION_REQUIRE_BELLY - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS - required_from_user_unexposed = NONE + require_target_vagina = REQUIRE_NONE + require_target_belly = REQUIRE_EXPOSED write_log_user = "belly fucked" write_log_target = "was belly fucked by" @@ -466,13 +457,10 @@ /datum/interaction/lewd/deflate_belly description = "Deflate belly." - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_BELLY - required_from_user_unexposed = NONE + require_user_belly = REQUIRE_EXPOSED interaction_sound = null max_distance = 0 - interaction_flags = INTERACTION_FLAG_ADJACENT | INTERACTION_FLAG_OOC_CONSENT | INTERACTION_FLAG_USER_IS_TARGET + user_is_target = TRUE write_log_user = "deflated their belly" write_log_target = null @@ -483,13 +471,10 @@ /datum/interaction/lewd/inflate_belly description = "Inflate belly" - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_BELLY - required_from_user_unexposed = NONE + require_user_belly = REQUIRE_EXPOSED interaction_sound = null max_distance = 0 - interaction_flags = INTERACTION_FLAG_ADJACENT | INTERACTION_FLAG_OOC_CONSENT | INTERACTION_FLAG_USER_IS_TARGET + user_is_target = TRUE write_log_user = "inflated their belly" write_log_target = null @@ -500,10 +485,7 @@ /datum/interaction/lewd/nuzzle_belly description = "Nuzzle their belly." - required_from_target_exposed = INTERACTION_REQUIRE_BELLY - required_from_target_unexposed = NONE - required_from_user_exposed = NONE - required_from_user_unexposed = NONE + require_target_belly = REQUIRE_EXPOSED interaction_sound = null max_distance = 1 write_log_target = "got their belly nuzzled by" @@ -514,10 +496,7 @@ /datum/interaction/lewd/do_breastsmother description = "Smother them in your breasts." - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_BREASTS - required_from_user_unexposed = NONE + require_user_breasts = REQUIRE_EXPOSED max_distance = 1 interaction_sound = null write_log_target = "got breast smothered by" @@ -536,10 +515,7 @@ /datum/interaction/lewd/lick_sweat description = "Lick their sweat." - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_MOUTH - required_from_user_unexposed = NONE + require_user_mouth = TRUE max_distance = 1 interaction_sound = null write_log_target = "got their sweat licked by" @@ -560,10 +536,7 @@ /datum/interaction/lewd/lick_armpit description = "Lick their armpit." - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_MOUTH - required_from_user_unexposed = NONE + require_user_mouth = TRUE max_distance = 1 interaction_sound = null write_log_target = "Got dem armpit ate by" @@ -574,10 +547,7 @@ /datum/interaction/lewd/fuck_armpit description = "Fuck their armpit." - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS - required_from_user_unexposed = NONE + require_user_penis = REQUIRE_EXPOSED interaction_sound = null write_log_target = "got their armpit fucked by" write_log_user = "fucked the armpit of" @@ -596,10 +566,7 @@ /datum/interaction/lewd/do_pitjob description = "Jerk them off with your armpit." - required_from_target_exposed = INTERACTION_REQUIRE_PENIS - required_from_target_unexposed = NONE - required_from_user_exposed = NONE - required_from_user_unexposed = NONE + require_target_penis = REQUIRE_EXPOSED interaction_sound = null write_log_target = "gave a pitjob to" write_log_user = "got a pitjob from" @@ -618,10 +585,8 @@ /datum/interaction/lewd/do_boobjob description = "Give them a boobjob." - required_from_target_exposed = INTERACTION_REQUIRE_PENIS - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_BREASTS - required_from_user_unexposed = NONE + require_user_breasts = REQUIRE_EXPOSED + require_target_penis = REQUIRE_EXPOSED interaction_sound = null max_distance = 1 write_log_target = "Got a boobjob from" @@ -640,10 +605,8 @@ /datum/interaction/lewd/lick_nuts description = "Lick their balls." - required_from_target_exposed = INTERACTION_REQUIRE_BALLS - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_MOUTH - required_from_user_unexposed = NONE + require_user_mouth = TRUE + require_target_balls = REQUIRE_EXPOSED interaction_sound = null max_distance = 1 write_log_target = "Got their nuts sucked by" @@ -655,10 +618,7 @@ /datum/interaction/lewd/grope_ass description = "Grope their ass." simple_message = "USER gropes TARGET's ass!" - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_HANDS - required_from_user_unexposed = NONE + require_user_hands = TRUE max_distance = 1 interaction_sound = null write_log_target = "Got their ass groped by" @@ -666,10 +626,8 @@ /datum/interaction/lewd/fuck_cock description = "Penetrate their %COCK%." - required_from_target_exposed = INTERACTION_REQUIRE_PENIS - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS - required_from_user_unexposed = NONE + require_user_penis = REQUIRE_EXPOSED + require_target_penis = REQUIRE_EXPOSED interaction_sound = null max_distance = 1 write_log_target = "Got their cock fucked by" @@ -685,11 +643,8 @@ /datum/interaction/lewd/nipple_fuck description = "Fuck their nipple." - required_from_target = INTERACTION_REQUIRE_TOPLESS - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS - required_from_user_unexposed = NONE + require_target_topless = TRUE + require_user_penis = REQUIRE_EXPOSED write_log_user = "fucked nipples" write_log_target = "got their nipples fucked by" interaction_sound = null @@ -708,12 +663,9 @@ /datum/interaction/lewd/fuck_thighs description = "Fuck their thighs." + require_user_penis = REQUIRE_EXPOSED require_target_legs = REQUIRE_ANY require_target_num_legs = 2 - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS - required_from_user_unexposed = NONE write_log_user = "fucked thighs" write_log_target = "got their thighs fucked by" interaction_sound = null @@ -733,12 +685,9 @@ /datum/interaction/lewd/do_thighjob description = "Give them a thighjob." + require_target_penis = REQUIRE_EXPOSED require_user_legs = REQUIRE_ANY require_user_num_legs = 2 - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS - required_from_user_unexposed = NONE write_log_user = "Gave a thighjob" write_log_target = "Got a thighjob from" interaction_sound = null @@ -758,7 +707,7 @@ /datum/interaction/lewd/clothesplosion description = "Explode out of your clothes" - interaction_flags = INTERACTION_FLAG_ADJACENT | INTERACTION_FLAG_OOC_CONSENT | INTERACTION_FLAG_USER_IS_TARGET + user_is_target = TRUE interaction_sound = null max_distance = 0 write_log_user = "Exploded out of their clothes" @@ -778,10 +727,7 @@ /datum/interaction/lewd/unholy/do_facefart description = "Fart on their face." - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_ANUS - required_from_user_unexposed = NONE + require_user_anus = REQUIRE_EXPOSED max_distance = 1 interaction_sound = null write_log_target = "got facefarted by" @@ -792,10 +738,7 @@ /datum/interaction/lewd/unholy/do_crotchfart description = "Fart on their crotch." - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_ANUS - required_from_user_unexposed = NONE + require_user_anus = REQUIRE_EXPOSED max_distance = 1 interaction_sound = null write_log_target = "got crotchfarted by" @@ -806,10 +749,8 @@ /datum/interaction/lewd/unholy/do_fartfuck description = "Fuck their ass + fart." - required_from_target_exposed = INTERACTION_REQUIRE_ANUS - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS - required_from_user_unexposed = NONE + require_target_anus = REQUIRE_EXPOSED + require_user_penis = REQUIRE_EXPOSED max_distance = 1 interaction_sound = null write_log_target = "got fartfucked by" @@ -828,10 +769,8 @@ /datum/interaction/lewd/unholy/suck_fart description = "Suck the farts out of their asshole." - required_from_target_exposed = INTERACTION_REQUIRE_ANUS - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_MOUTH - required_from_user_unexposed = NONE + require_user_mouth = TRUE + require_target_anus = REQUIRE_EXPOSED max_distance = 1 interaction_sound = null write_log_target = "got their farts sucked out by" @@ -842,10 +781,7 @@ /datum/interaction/lewd/unholy/do_faceshit description = "Shit on their face." - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_ANUS - required_from_user_unexposed = NONE + require_user_anus = TRUE max_distance = 1 interaction_sound = null write_log_target = "got shat in the face by" @@ -856,10 +792,7 @@ /datum/interaction/lewd/unholy/do_crotchshit/ description = "Shit on their crotch." - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_ANUS - required_from_user_unexposed = NONE + require_user_anus = REQUIRE_EXPOSED max_distance = 1 interaction_sound = null write_log_target = "got shat on the croch by" @@ -870,10 +803,8 @@ /datum/interaction/lewd/unholy/do_shitfuck description = "Fuck their ass + shit." - required_from_target_exposed = INTERACTION_REQUIRE_ANUS - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_PENIS - required_from_user_unexposed = NONE + require_target_anus = REQUIRE_EXPOSED + require_user_penis = REQUIRE_EXPOSED max_distance = 1 interaction_sound = null write_log_target = "got shitfucked by" @@ -892,10 +823,8 @@ /datum/interaction/lewd/unholy/suck_shit description = "Suck the shit out of their asshole." - required_from_target_exposed = INTERACTION_REQUIRE_ANUS - required_from_target_unexposed = NONE - required_from_user_exposed = INTERACTION_REQUIRE_MOUTH - required_from_user_unexposed = NONE + require_user_mouth = TRUE + require_target_anus = REQUIRE_EXPOSED max_distance = 1 interaction_sound = null write_log_target = "got their shit sucked out by" @@ -906,11 +835,7 @@ /datum/interaction/lewd/unholy/piss_over description = "Piss all over them." - required_from_user = INTERACTION_REQUIRE_BOTTOMLESS - required_from_target_exposed = NONE - required_from_target_unexposed = NONE - required_from_user_exposed = NONE - required_from_user_unexposed = NONE + require_user_bottomless = TRUE max_distance = 1 interaction_sound = null write_log_target = "got pissed all over by" @@ -923,16 +848,13 @@ description = "Piss inside their mouth." max_distance = 1 interaction_sound = null - required_from_user = INTERACTION_REQUIRE_BOTTOMLESS - required_from_target_exposed = INTERACTION_REQUIRE_MOUTH - required_from_target_unexposed = NONE - required_from_user_exposed = NONE - required_from_user_unexposed = NONE + require_user_bottomless = TRUE + require_target_mouth = TRUE write_log_user = "pissed in someone's mouth" write_log_target = "got their mouth filled with piss by" /datum/interaction/lewd/unholy/piss_mouth/display_interaction(mob/living/carbon/user, mob/living/target) if(!istype(user)) - to_chat(user, span_warning("You're not a carbon entity.")) + to_chat(user, span_warning("Erm, you may wanna be a carbon entity fo dat")) return user.piss_mouth(target) diff --git a/modular_splurt/code/datums/interactions/lewd/lewd_interactions.dm b/modular_splurt/code/datums/interactions/lewd/lewd_interactions.dm index 74b639d5a2..ced9c8ba57 100644 --- a/modular_splurt/code/datums/interactions/lewd/lewd_interactions.dm +++ b/modular_splurt/code/datums/interactions/lewd/lewd_interactions.dm @@ -9,26 +9,27 @@ var/require_target_legs var/require_target_num_legs + var/require_user_belly + var/require_target_belly + /datum/interaction/lewd/evaluate_user(mob/living/user, silent = TRUE, action_check = TRUE) - - var/user_require_belly_exposed = !!(required_from_user_exposed & INTERACTION_REQUIRE_BELLY) - var/user_require_belly_unexposed = !!(required_from_user_unexposed & INTERACTION_REQUIRE_BELLY) - if(user_require_belly_exposed || user_require_belly_unexposed) - var/has_belly = user.has_belly() - if(!has_belly) - if(!silent) - to_chat(user, span_warning("You don't have a belly.")) - return FALSE - - if(!(has_belly == TRUE) || !(user_require_belly_exposed && user_require_belly_unexposed)) - if(user_require_belly_exposed && has_belly == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your belly needs to be exposed.")) - return FALSE - if(user_require_belly_unexposed && has_belly == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your belly need to be unexposed.")) - return FALSE + if(require_user_belly) + switch(require_user_belly) + if(REQUIRE_EXPOSED) + if(!user.has_belly(REQUIRE_EXPOSED)) + if(!silent) + to_chat(user, span_warning("Your belly needs to be exposed.")) + return FALSE + if(REQUIRE_ANY) + if(!user.has_belly(REQUIRE_ANY)) + if(!silent) + to_chat(user, span_warning("Your belly seems to be too flat for that.")) + return FALSE + if(REQUIRE_UNEXPOSED) + if(!user.has_belly(REQUIRE_UNEXPOSED)) + if(!silent) + to_chat(user, span_warning("Your belly needs to be unexposed.")) + return FALSE if(require_user_legs) switch(require_user_legs) @@ -61,28 +62,19 @@ if(!silent) to_chat(user, "That's way too much for you.") return FALSE - - var/user_require_penis_exposed = !!(required_from_user_exposed & INTERACTION_REQUIRE_PENIS) - var/user_require_penis_unexposed = !!(required_from_user_unexposed & INTERACTION_REQUIRE_PENIS) - if(user_require_penis_exposed || user_require_penis_unexposed) + if(require_user_penis) var/obj/item/organ/genital/penis/penor = user.getorganslot(ORGAN_SLOT_PENIS) if(CHECK_BITFIELD(penor?.genital_flags, GENITAL_CHASTENED)) if(!silent) to_chat(user, "For some reason, you don't want to do this to [target].") return FALSE - - var/target_require_penis_exposed = !!(required_from_target_exposed & INTERACTION_REQUIRE_PENIS) - var/target_require_penis_unexposed = !!(required_from_target_unexposed & INTERACTION_REQUIRE_PENIS) - if(target_require_penis_exposed || target_require_penis_unexposed) + if(require_target_penis) var/obj/item/organ/genital/penis/penor = target.getorganslot(ORGAN_SLOT_PENIS) if(CHECK_MULTIPLE_BITFIELDS(penor?.genital_flags, GENITAL_CHASTENED)) if(!silent) to_chat(user, "\The [target] already have a cage on them!") return FALSE diff --git a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/condom.dm b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/condom.dm index eaaa1cb95c..6100f6cf52 100644 --- a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/condom.dm +++ b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/condom.dm @@ -27,7 +27,7 @@ to_chat(user, span_notice("You must remove the condom from the package first!")) return FALSE - if(!G.owner.has_penis() == HAS_EXPOSED_GENITAL) + if(!G.owner.has_penis(REQUIRE_EXPOSED)) to_chat(user, span_notice("You can't find anywhere to put the condom!")) return FALSE diff --git a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/sounding.dm b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/sounding.dm index af34d0bed8..ebbfe1366e 100644 --- a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/sounding.dm +++ b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/sounding.dm @@ -30,7 +30,7 @@ to_chat(user, span_notice("You must remove the rod from the package first!")) return FALSE - if(!G.owner.has_penis() == HAS_EXPOSED_GENITAL) + if(!G.owner.has_penis(REQUIRE_EXPOSED)) to_chat(user, span_notice("You can't find anywhere to put the rod!")) return diff --git a/modular_splurt/code/game/objects/items/weaponry/melee.dm b/modular_splurt/code/game/objects/items/weaponry/melee.dm index 466b30ee5c..4c56e7c937 100644 --- a/modular_splurt/code/game/objects/items/weaponry/melee.dm +++ b/modular_splurt/code/game/objects/items/weaponry/melee.dm @@ -14,11 +14,11 @@ if(user.zone_selected == BODY_ZONE_PRECISE_GROIN) switch(hole) if(CUM_TARGET_VAGINA) - if(target.has_vagina() == HAS_EXPOSED_GENITAL) + if(target.has_vagina(REQUIRE_EXPOSED)) message = (user == target) ? pick("fucks [possessive_verb] own pussy with \the [src]","shoves \the [src] into [possessive_verb] pussy", "jams \the [src] into [possessive_verb] pussy") : pick("fucks [target] right in the pussy with \the [src]", "jams \the [src] right into [target]'s pussy") lust_amt = NORMAL_LUST if(CUM_TARGET_ANUS) - if(target.has_anus() == HAS_EXPOSED_GENITAL) + if(target.has_anus(REQUIRE_EXPOSED)) message = (user == target) ? pick("fucks [possessive_verb] own ass with \the [src]","shoves \the [src] into [possessive_verb] ass", "jams \the [src] into [possessive_verb] ass") : pick("fucks [target]'s asshole with \the [src]", "jams \the [src] into [target]'s ass") lust_amt = NORMAL_LUST if(message) diff --git a/modular_splurt/code/modules/antagonists/wendigo/mob/_on_click.dm b/modular_splurt/code/modules/antagonists/wendigo/mob/_on_click.dm index df6f620b5c..f5cccf49d8 100644 --- a/modular_splurt/code/modules/antagonists/wendigo/mob/_on_click.dm +++ b/modular_splurt/code/modules/antagonists/wendigo/mob/_on_click.dm @@ -1,7 +1,7 @@ /mob/living/carbon/wendigo/UnarmedAttack(atom/A, proximity) A.attack_hand(src) -/mob/living/carbon/wendigo/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE, check_resting=FALSE) +/mob/living/carbon/wendigo/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE) if(incapacitated() || lying) to_chat(src, span_warning("You can't do that right now!")) return FALSE diff --git a/modular_splurt/code/modules/arousal/organs/belly.dm b/modular_splurt/code/modules/arousal/organs/belly.dm index aa53c02d9f..91b482322c 100644 --- a/modular_splurt/code/modules/arousal/organs/belly.dm +++ b/modular_splurt/code/modules/arousal/organs/belly.dm @@ -110,7 +110,7 @@ /obj/item/organ/genital/belly/climax_modify_size(mob/living/partner, obj/item/organ/genital/source_gen, cum_hole) if(!(owner.client?.prefs.cit_toggles & BELLY_INFLATION)) - if(owner.has_anus() == HAS_EXPOSED_GENITAL && (cum_hole == CUM_TARGET_ANUS) && (owner.client?.prefs.cit_toggles & BUTT_ENLARGEMENT)) + if(owner.has_anus(REQUIRE_EXPOSED) && (cum_hole == CUM_TARGET_ANUS) && (owner.client?.prefs.cit_toggles & BUTT_ENLARGEMENT)) var/obj/item/organ/genital/butt/ass = owner.getorganslot(ORGAN_SLOT_BUTT) if(!ass) ass = new