diff --git a/code/__SANDCODE/DEFINES/dcs/signals/lewd.dm b/code/__SANDCODE/DEFINES/dcs/signals/lewd.dm new file mode 100644 index 0000000000..e63d3b5b8c --- /dev/null +++ b/code/__SANDCODE/DEFINES/dcs/signals/lewd.dm @@ -0,0 +1,8 @@ +/* + * From /mob/living/cum(): (mob/source, mob/living/partner, target_orifice) + * This one may return TRUE to prevent cumming. + * +*/ +#define COMSIG_MOB_PRE_CAME "mob_pre_came" +/// From /mob/living/cum(): (mob/source, mob/living/partner, target_orifice) +#define COMSIG_MOB_POST_CAME "mob_post_came" diff --git a/html/changelogs/archive/2023-09.yml b/html/changelogs/archive/2023-09.yml index 812b206fb2..4b96ee7345 100644 --- a/html/changelogs/archive/2023-09.yml +++ b/html/changelogs/archive/2023-09.yml @@ -91,3 +91,5 @@ Zattarra: - rscadd: Added stepping preference toggle, which allows or disables macro - micro stomping interactions. + SandPoot: + - code_imp: Adds signals for sex to be used by coders in the future. diff --git a/modular_sand/code/datums/interactions/lewd_definitions.dm b/modular_sand/code/datums/interactions/lewd_definitions.dm index 0f56bc23eb..dba2c51466 100644 --- a/modular_sand/code/datums/interactions/lewd_definitions.dm +++ b/modular_sand/code/datums/interactions/lewd_definitions.dm @@ -411,6 +411,8 @@ /mob/living/proc/cum(mob/living/partner, target_orifice) if(HAS_TRAIT(src, TRAIT_NEVERBONER)) return FALSE + if(SEND_SIGNAL(src, COMSIG_MOB_PRE_CAME, target_orifice, partner)) + return FALSE var/message var/u_His = p_their() var/u_He = p_they() @@ -796,6 +798,8 @@ set_lust(0) SEND_SIGNAL(src, COMSIG_MOB_CAME, target_orifice, partner, cumin, last_genital) + SEND_SIGNAL(src, COMSIG_MOB_POST_CAME, target_orifice, partner) + return TRUE /mob/living/proc/is_fucking(mob/living/partner, orifice, obj/item/organ/genital/genepool, datum/interaction/lewd/lewd_datum) @@ -847,12 +851,11 @@ if(lust >= lust_tolerance) if(prob(10)) to_chat(src, "You struggle to not orgasm!") + moan() return FALSE if(lust >= (lust_tolerance * 3)) - cum(partner, orifice) - return TRUE - else - moan() + if(cum(partner, orifice)) + return TRUE return FALSE /mob/living/proc/get_unconsenting(extreme = FALSE, list/ignored_mobs) diff --git a/tgstation.dme b/tgstation.dme index 4ce7afc531..83eb6f3b34 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -261,6 +261,7 @@ #include "code\__SANDCODE\DEFINES\traits.dm" #include "code\__SANDCODE\DEFINES\wires.dm" #include "code\__SANDCODE\DEFINES\dcs\signals.dm" +#include "code\__SANDCODE\DEFINES\dcs\signals\lewd.dm" #include "code\__SANDCODE\DEFINES\dcs\signals\signals_mob_main.dm" #include "code\__SANDCODE\DEFINES\dcs\signals\sizecode.dm" #include "code\__SANDCODE\HELPERS\sizecode.dm"