diff --git a/code/__SANDCODE/DEFINES/misc.dm b/code/__SANDCODE/DEFINES/misc.dm
index 66c894e898..4672f0416c 100644
--- a/code/__SANDCODE/DEFINES/misc.dm
+++ b/code/__SANDCODE/DEFINES/misc.dm
@@ -1,4 +1,4 @@
/// Adds an utf-8 header...? only ever used on circuitry so when wiremod arrives...
#define UTF8HEADER ""
/// A shorthand for ternary operators to simulate a null-coalescing operator. Returns the first argument if its defined, otherwise, second.
-#define NULL_COALESCE(var, default) ((var) ? (var) : (default))
+#define NULL_COALESCE(var, default) (isnull(var) ? (default) : (var))
diff --git a/modular_sand/code/datums/interactions/lewd_definitions.dm b/modular_sand/code/datums/interactions/lewd_definitions.dm
index 7ce9bb6b7e..4d3fdb6cbd 100644
--- a/modular_sand/code/datums/interactions/lewd_definitions.dm
+++ b/modular_sand/code/datums/interactions/lewd_definitions.dm
@@ -260,27 +260,33 @@
return TRUE
/mob/living/proc/moan()
- if(is_muzzled())
- visible_message(span_lewd("[src] [pick("mimes a pleasured moan","moans in silence")]."))
+ if(is_muzzled() || (mind?.miming))
+ var/message_to_display = pick("mime%S% a pleasured moan","moan%S% in silence")
+ visible_message(span_lewd("\The [src] [replacetext(message_to_display, "%S%", "s")]."),
+ span_lewd("You [replacetext(message_to_display, "%S%", "")]."))
+ return
+ var/message_to_display = pick("moan%S%", "moan%S% in pleasure")
+ visible_message(span_lewd("\The [src] [replacetext(message_to_display, "%S%", "s")]."),
+ span_lewd("You [replacetext(message_to_display, "%S%", "")]."),
+ span_lewd("You hear some moaning."),
+ ignored_mobs = get_unconsenting(), omni = TRUE)
+
+ // Get reference of the list we're using based on gender.
+ var/list/moans
+ if (gender == FEMALE)
+ moans = GLOB.lewd_moans_female
else
- visible_message(message = span_lewd("\The [src] [pick("moans", "moans in pleasure")]."), ignored_mobs = get_unconsenting(), omni = TRUE)
+ moans = GLOB.lewd_moans_male
- // Get reference of the list we're using based on gender.
- var/list/moans
- if (gender == FEMALE)
- moans = GLOB.lewd_moans_female
- else
- moans = GLOB.lewd_moans_male
+ // Pick a sound from the list.
+ var/sound = pick(moans)
- // Pick a sound from the list.
- var/sound = pick(moans)
+ // If the sound is repeated, get a new from a list without it.
+ if (lastmoan == sound)
+ sound = pick(LAZYCOPY(moans) - lastmoan)
- // If the sound is repeated, get a new from a list without it.
- if (lastmoan == sound)
- sound = pick(LAZYCOPY(moans) - lastmoan)
-
- playlewdinteractionsound(loc, sound, 80, 0, 0)
- lastmoan = sound
+ playlewdinteractionsound(loc, sound, 80, 0, 0)
+ lastmoan = sound
/mob/living/proc/cum(mob/living/partner, target_orifice)
if(HAS_TRAIT(src, TRAIT_NEVERBONER))
diff --git a/modular_sand/code/modules/mob/emote.dm b/modular_sand/code/modules/mob/emote.dm
index 6587784796..ee87ea1c62 100644
--- a/modular_sand/code/modules/mob/emote.dm
+++ b/modular_sand/code/modules/mob/emote.dm
@@ -51,10 +51,15 @@
user.nextsoundemote = world.time + 7
playsound(user, 'modular_citadel/sound/voice/peep.ogg', 50, 1, -1)
-/datum/emote/living/carbon/moan/run_emote(mob/living/user, params)
- if(!(. = ..()))
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
+/datum/emote/living/carbon/moan
+ emote_type = EMOTE_OMNI
+ stat_allowed = CONSCIOUS
+
+/datum/emote/living/carbon/moan/run_emote(mob/living/user, params, type_override, intentional)
+ . = TRUE
+ if(!can_run_emote(user, TRUE, intentional))
+ return FALSE
+ if(!COOLDOWN_FINISHED(user, nextsoundemote))
+ return FALSE
+ COOLDOWN_START(user, nextsoundemote, 7)
user.moan()