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