From 1a72c0e00265d4e8aa15e743141d6c8f7410195c Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 16 Feb 2024 06:56:51 +1100 Subject: [PATCH 1/5] Default emotes now use a static list. --- code/modules/emotes/definitions/_mob.dm | 170 +++--------------- code/modules/emotes/definitions/_species.dm | 11 -- code/modules/mob/living/brain/brain.dm | 23 +-- code/modules/mob/living/carbon/alien/alien.dm | 29 +++ code/modules/mob/living/carbon/human/human.dm | 87 +++++++++ .../modules/mob/living/silicon/robot/robot.dm | 27 +++ code/modules/species/species.dm | 3 + mods/content/xenobiology/emotes.dm | 9 +- mods/mobs/dionaea/mob/nymph_emotes.dm | 5 +- mods/species/ascent/datum/emotes.dm | 5 +- .../species/ascent/mobs/nymph/nymph_emotes.dm | 7 +- nebula.dme | 1 - 12 files changed, 194 insertions(+), 183 deletions(-) delete mode 100644 code/modules/emotes/definitions/_species.dm diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm index c6fd0855eeb..efe989c00a6 100644 --- a/code/modules/emotes/definitions/_mob.dm +++ b/code/modules/emotes/definitions/_mob.dm @@ -1,159 +1,29 @@ /mob - var/list/default_emotes = list() - var/list/usable_emotes = list() + var/list/usable_emotes + +/mob/proc/get_base_default_emotes() + return /mob/proc/update_emotes(var/skip_sort) - usable_emotes.Cut() - for(var/emote in default_emotes) + LAZYCLEARLIST(usable_emotes) + for(var/emote in get_base_default_emotes()) var/decl/emote/emote_datum = GET_DECL(emote) if(emote_datum.check_user(src)) - usable_emotes[emote_datum.key] = emote_datum - if(!skip_sort) - usable_emotes = sortTim(usable_emotes, /proc/cmp_text_asc) + LAZYSET(usable_emotes, emote_datum.key, emote_datum) + if(LAZYLEN(usable_emotes) && !skip_sort) + usable_emotes = sortTim(usable_emotes, /proc/cmp_text_asc, associative = TRUE) + +/mob/living/update_emotes() + . = ..(skip_sort=1) + var/decl/species/my_species = get_species() + if(LAZYLEN(my_species?.default_emotes)) + for(var/emote in my_species.default_emotes) + var/decl/emote/emote_datum = GET_DECL(emote) + if(emote_datum.check_user(src)) + usable_emotes[emote_datum.key] = emote_datum + if(LAZYLEN(usable_emotes)) + usable_emotes = sortTim(usable_emotes, /proc/cmp_text_asc, associative = TRUE) /mob/Initialize() . = ..() update_emotes() - -// Specific defines follow. -/mob/living/carbon/alien - default_emotes = list( - /decl/emote/visible, - /decl/emote/visible/scratch, - /decl/emote/visible/drool, - /decl/emote/visible/nod, - /decl/emote/visible/sway, - /decl/emote/visible/sulk, - /decl/emote/visible/twitch, - /decl/emote/visible/dance, - /decl/emote/visible/roll, - /decl/emote/visible/shake, - /decl/emote/visible/jump, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/audible/hiss, - /decl/emote/audible, - /decl/emote/audible/deathgasp_alien, - /decl/emote/audible/whimper, - /decl/emote/audible/gasp, - /decl/emote/audible/scretch, - /decl/emote/audible/choke, - /decl/emote/audible/moan, - /decl/emote/audible/gnarl - ) - -/mob/living/carbon/human - default_emotes = list( - /decl/emote/visible/blink, - /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, - /decl/emote/audible/synth/buzz, - /decl/emote/audible/synth/confirm, - /decl/emote/audible/synth/deny, - /decl/emote/visible/nod, - /decl/emote/visible/shake, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/audible/gasp, - /decl/emote/audible/sneeze, - /decl/emote/audible/sniff, - /decl/emote/audible/snore, - /decl/emote/audible/whimper, - /decl/emote/audible/yawn, - /decl/emote/audible/clap, - /decl/emote/audible/chuckle, - /decl/emote/audible/cough, - /decl/emote/audible/cry, - /decl/emote/audible/sigh, - /decl/emote/audible/laugh, - /decl/emote/audible/mumble, - /decl/emote/audible/grumble, - /decl/emote/audible/groan, - /decl/emote/audible/moan, - /decl/emote/audible/grunt, - /decl/emote/audible/slap, - /decl/emote/human/deathgasp, - /decl/emote/audible/giggle, - /decl/emote/audible/scream, - /decl/emote/visible/airguitar, - /decl/emote/visible/blink_r, - /decl/emote/visible/bow, - /decl/emote/visible/salute, - /decl/emote/visible/flap, - /decl/emote/visible/aflap, - /decl/emote/visible/drool, - /decl/emote/visible/eyebrow, - /decl/emote/visible/twitch, - /decl/emote/visible/dance, - /decl/emote/visible/twitch_v, - /decl/emote/visible/faint, - /decl/emote/visible/frown, - /decl/emote/visible/blush, - /decl/emote/visible/wave, - /decl/emote/visible/glare, - /decl/emote/visible/stare, - /decl/emote/visible/look, - /decl/emote/visible/point, - /decl/emote/visible/raise, - /decl/emote/visible/grin, - /decl/emote/visible/shrug, - /decl/emote/visible/smile, - /decl/emote/visible/pale, - /decl/emote/visible/tremble, - /decl/emote/visible/wink, - /decl/emote/visible/hug, - /decl/emote/visible/dap, - /decl/emote/visible/signal, - /decl/emote/visible/handshake, - /decl/emote/visible/afold, - /decl/emote/visible/alook, - /decl/emote/visible/eroll, - /decl/emote/visible/hbow, - /decl/emote/visible/hip, - /decl/emote/visible/holdup, - /decl/emote/visible/hshrug, - /decl/emote/visible/crub, - /decl/emote/visible/erub, - /decl/emote/visible/fslap, - /decl/emote/visible/ftap, - /decl/emote/visible/hrub, - /decl/emote/visible/hspread, - /decl/emote/visible/pocket, - /decl/emote/visible/rsalute, - /decl/emote/visible/rshoulder, - /decl/emote/visible/squint, - /decl/emote/visible/tfist, - /decl/emote/visible/tilt, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/visible/vomit - ) - -/mob/living/silicon/robot - default_emotes = list( - /decl/emote/audible/clap, - /decl/emote/visible/bow, - /decl/emote/visible/salute, - /decl/emote/visible/flap, - /decl/emote/visible/aflap, - /decl/emote/visible/twitch, - /decl/emote/visible/twitch_v, - /decl/emote/visible/dance, - /decl/emote/visible/nod, - /decl/emote/visible/shake, - /decl/emote/visible/glare, - /decl/emote/visible/look, - /decl/emote/visible/stare, - /decl/emote/visible/deathgasp_robot, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, - /decl/emote/audible/synth/buzz, - /decl/emote/audible/synth/confirm, - /decl/emote/audible/synth/deny, - /decl/emote/audible/synth/security, - /decl/emote/audible/synth/security/halt - ) diff --git a/code/modules/emotes/definitions/_species.dm b/code/modules/emotes/definitions/_species.dm deleted file mode 100644 index 1c13347a4ec..00000000000 --- a/code/modules/emotes/definitions/_species.dm +++ /dev/null @@ -1,11 +0,0 @@ -/decl/species - var/list/default_emotes = list() - -/mob/living/carbon/update_emotes() - . = ..(skip_sort=1) - if(species) - for(var/emote in species.default_emotes) - var/decl/emote/emote_datum = GET_DECL(emote) - if(emote_datum.check_user(src)) - usable_emotes[emote_datum.key] = emote_datum - usable_emotes = sortTim(usable_emotes, /proc/cmp_text_asc) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 9c394e6491a..59e030551ef 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -2,16 +2,6 @@ name = "brain" icon = 'icons/obj/surgery.dmi' icon_state = "brain1" - default_emotes = list( - /decl/emote/audible/alarm, - /decl/emote/audible/alert, - /decl/emote/audible/notice, - /decl/emote/audible/whistle, - /decl/emote/audible/synth, - /decl/emote/audible/boop, - /decl/emote/visible/blink, - /decl/emote/visible/flash - ) // Used for EMP damage when inside an interface or robobrain. var/emp_damage = 0 @@ -23,6 +13,19 @@ SPAN_DANGER("Major electrical distruption detected: System rebooting.") ) +/mob/living/brain/get_base_default_emotes() + var/static/list/default_emotes = list( + /decl/emote/audible/alarm, + /decl/emote/audible/alert, + /decl/emote/audible/notice, + /decl/emote/audible/whistle, + /decl/emote/audible/synth, + /decl/emote/audible/boop, + /decl/emote/visible/blink, + /decl/emote/visible/flash + ) + return default_emotes + /mob/living/brain/handle_regular_status_updates() . = ..() if(emp_damage || stat == DEAD || !is_in_interface()) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 95d001155a6..6c305c673e9 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -36,3 +36,32 @@ /mob/living/carbon/alien/get_admin_job_string() return "Alien" + +/mob/living/carbon/alien/get_base_default_emotes() + var/static/list/default_emotes = list( + /decl/emote/visible, + /decl/emote/visible/scratch, + /decl/emote/visible/drool, + /decl/emote/visible/nod, + /decl/emote/visible/sway, + /decl/emote/visible/sulk, + /decl/emote/visible/twitch, + /decl/emote/visible/dance, + /decl/emote/visible/roll, + /decl/emote/visible/shake, + /decl/emote/visible/jump, + /decl/emote/visible/shiver, + /decl/emote/visible/collapse, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/audible/hiss, + /decl/emote/audible, + /decl/emote/audible/deathgasp_alien, + /decl/emote/audible/whimper, + /decl/emote/audible/gasp, + /decl/emote/audible/scretch, + /decl/emote/audible/choke, + /decl/emote/audible/moan, + /decl/emote/audible/gnarl + ) + return default_emotes diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 368b7b5f493..dcb0da0218d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1174,3 +1174,90 @@ return SScharacter_info.get_record(comments_record_id, TRUE) return ..() +/mob/living/carbon/human/get_base_default_emotes() + var/static/list/default_emotes = list( + /decl/emote/visible/blink, + /decl/emote/audible/synth, + /decl/emote/audible/synth/ping, + /decl/emote/audible/synth/buzz, + /decl/emote/audible/synth/confirm, + /decl/emote/audible/synth/deny, + /decl/emote/visible/nod, + /decl/emote/visible/shake, + /decl/emote/visible/shiver, + /decl/emote/visible/collapse, + /decl/emote/audible/gasp, + /decl/emote/audible/sneeze, + /decl/emote/audible/sniff, + /decl/emote/audible/snore, + /decl/emote/audible/whimper, + /decl/emote/audible/yawn, + /decl/emote/audible/clap, + /decl/emote/audible/chuckle, + /decl/emote/audible/cough, + /decl/emote/audible/cry, + /decl/emote/audible/sigh, + /decl/emote/audible/laugh, + /decl/emote/audible/mumble, + /decl/emote/audible/grumble, + /decl/emote/audible/groan, + /decl/emote/audible/moan, + /decl/emote/audible/grunt, + /decl/emote/audible/slap, + /decl/emote/human/deathgasp, + /decl/emote/audible/giggle, + /decl/emote/audible/scream, + /decl/emote/visible/airguitar, + /decl/emote/visible/blink_r, + /decl/emote/visible/bow, + /decl/emote/visible/salute, + /decl/emote/visible/flap, + /decl/emote/visible/aflap, + /decl/emote/visible/drool, + /decl/emote/visible/eyebrow, + /decl/emote/visible/twitch, + /decl/emote/visible/dance, + /decl/emote/visible/twitch_v, + /decl/emote/visible/faint, + /decl/emote/visible/frown, + /decl/emote/visible/blush, + /decl/emote/visible/wave, + /decl/emote/visible/glare, + /decl/emote/visible/stare, + /decl/emote/visible/look, + /decl/emote/visible/point, + /decl/emote/visible/raise, + /decl/emote/visible/grin, + /decl/emote/visible/shrug, + /decl/emote/visible/smile, + /decl/emote/visible/pale, + /decl/emote/visible/tremble, + /decl/emote/visible/wink, + /decl/emote/visible/hug, + /decl/emote/visible/dap, + /decl/emote/visible/signal, + /decl/emote/visible/handshake, + /decl/emote/visible/afold, + /decl/emote/visible/alook, + /decl/emote/visible/eroll, + /decl/emote/visible/hbow, + /decl/emote/visible/hip, + /decl/emote/visible/holdup, + /decl/emote/visible/hshrug, + /decl/emote/visible/crub, + /decl/emote/visible/erub, + /decl/emote/visible/fslap, + /decl/emote/visible/ftap, + /decl/emote/visible/hrub, + /decl/emote/visible/hspread, + /decl/emote/visible/pocket, + /decl/emote/visible/rsalute, + /decl/emote/visible/rshoulder, + /decl/emote/visible/squint, + /decl/emote/visible/tfist, + /decl/emote/visible/tilt, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/visible/vomit + ) + return default_emotes diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index f55053ddeab..aa676edc449 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1100,3 +1100,30 @@ /mob/living/silicon/robot/try_breathe() return FALSE +/mob/living/silicon/robot/get_base_default_emotes() + var/static/list/default_emotes = list( + /decl/emote/audible/clap, + /decl/emote/visible/bow, + /decl/emote/visible/salute, + /decl/emote/visible/flap, + /decl/emote/visible/aflap, + /decl/emote/visible/twitch, + /decl/emote/visible/twitch_v, + /decl/emote/visible/dance, + /decl/emote/visible/nod, + /decl/emote/visible/shake, + /decl/emote/visible/glare, + /decl/emote/visible/look, + /decl/emote/visible/stare, + /decl/emote/visible/deathgasp_robot, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/audible/synth, + /decl/emote/audible/synth/ping, + /decl/emote/audible/synth/buzz, + /decl/emote/audible/synth/confirm, + /decl/emote/audible/synth/deny, + /decl/emote/audible/synth/security, + /decl/emote/audible/synth/security/halt + ) + return default_emotes diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index ecf9764575e..aec8e1ff55d 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -227,6 +227,9 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/preview_icon_path var/preview_outfit = /decl/hierarchy/outfit/job/generic/assistant + /// List of emote types that this species can use by default. + var/list/default_emotes + /decl/species/proc/build_codex_strings() if(!codex_description) diff --git a/mods/content/xenobiology/emotes.dm b/mods/content/xenobiology/emotes.dm index cb632012705..226b11e39b9 100644 --- a/mods/content/xenobiology/emotes.dm +++ b/mods/content/xenobiology/emotes.dm @@ -1,5 +1,5 @@ -/mob/living/slime - default_emotes = list( +/mob/living/slime/get_base_default_emotes() + var/static/list/default_emotes = list( /decl/emote/audible/moan, /decl/emote/visible/twitch, /decl/emote/visible/sway, @@ -14,8 +14,9 @@ /decl/emote/slime/angry, /decl/emote/slime/frown, /decl/emote/slime/smile - ) - + ) + return default_emotes + /decl/emote/slime key = "nomood" var/mood diff --git a/mods/mobs/dionaea/mob/nymph_emotes.dm b/mods/mobs/dionaea/mob/nymph_emotes.dm index d3a1eb2be9c..c19daef16fb 100644 --- a/mods/mobs/dionaea/mob/nymph_emotes.dm +++ b/mods/mobs/dionaea/mob/nymph_emotes.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/alien/diona - default_emotes = list( +/mob/living/carbon/alien/diona/get_base_default_emotes() + var/static/list/default_emotes = list( /decl/emote/visible, /decl/emote/visible/scratch, /decl/emote/visible/drool, @@ -24,6 +24,7 @@ /decl/emote/audible/bug_chitter, /decl/emote/audible/chirp ) + return default_emotes /decl/emote/audible/chirp key = "chirp" diff --git a/mods/species/ascent/datum/emotes.dm b/mods/species/ascent/datum/emotes.dm index 1765b9e4517..c25becd6933 100644 --- a/mods/species/ascent/datum/emotes.dm +++ b/mods/species/ascent/datum/emotes.dm @@ -11,12 +11,13 @@ /decl/emote/visible/ascent_dazzle ) -/mob/living/silicon/robot/flying/ascent - default_emotes = list( +/mob/living/silicon/robot/flying/ascent/get_base_default_emotes() + var/static/list/default_emotes = list( /decl/emote/audible/ascent_purr, /decl/emote/audible/ascent_hiss, /decl/emote/audible/ascent_snarl ) + return default_emotes /decl/emote/audible/ascent_purr key = "purr" diff --git a/mods/species/ascent/mobs/nymph/nymph_emotes.dm b/mods/species/ascent/mobs/nymph/nymph_emotes.dm index fb601f6e91a..3d463bc768b 100644 --- a/mods/species/ascent/mobs/nymph/nymph_emotes.dm +++ b/mods/species/ascent/mobs/nymph/nymph_emotes.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/alien/ascent_nymph - default_emotes = list( +/mob/living/carbon/alien/ascent_nymph/get_base_default_emotes() + var/static/list/default_emotes = list( /decl/emote/visible, /decl/emote/visible/scratch, /decl/emote/visible/drool, @@ -19,4 +19,5 @@ /decl/emote/audible/gnarl, /decl/emote/audible/bug_hiss, /decl/emote/audible/bug_chitter - ) \ No newline at end of file + ) + return default_emotes diff --git a/nebula.dme b/nebula.dme index 12766b6ccc0..3097ba74dfb 100644 --- a/nebula.dme +++ b/nebula.dme @@ -2062,7 +2062,6 @@ #include "code\modules\emotes\emote_define.dm" #include "code\modules\emotes\emote_mob.dm" #include "code\modules\emotes\definitions\_mob.dm" -#include "code\modules\emotes\definitions\_species.dm" #include "code\modules\emotes\definitions\audible.dm" #include "code\modules\emotes\definitions\exertion.dm" #include "code\modules\emotes\definitions\human.dm" From bd14a5744d6a2c66b8430fc8661ed92eb3a856eb Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 16 Feb 2024 07:02:26 +1100 Subject: [PATCH 2/5] Targeted emotes will now take the closest target and can be targetted with a partial string. --- code/modules/emotes/emote_define.dm | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm index b806be2ce10..3fa7e5f38cc 100644 --- a/code/modules/emotes/emote_define.dm +++ b/code/modules/emotes/emote_define.dm @@ -20,7 +20,7 @@ var/list/emote_sound = null var/message_type = VISIBLE_MESSAGE // Audible/visual flag - var/targetted_emote // Whether or not this emote needs a target. + var/mandatory_targetted_emote // Whether or not this emote -must- have a target. var/check_restraints // Can this emote be used while restrained? var/check_range // falsy, or a range outside which the emote will not work var/conscious = TRUE // Do we need to be awake to emote this? @@ -45,21 +45,28 @@ var/atom/target if(can_target() && extra_params) - extra_params = lowertext(extra_params) - for(var/atom/thing in view(user)) - if(extra_params == lowertext(thing.name)) + var/target_dist + extra_params = trim(lowertext(extra_params)) + for(var/atom/thing in view((isnull(check_range) ? world.view : check_range), user)) + + if(!isturf(thing.loc)) + continue + + var/new_target_dist = get_dist(thing, user) + if(!isnull(target_dist) && target_dist > new_target_dist) + continue + + if(findtext(lowertext(thing.name), extra_params)) + target_dist = new_target_dist target = thing - break - if(targetted_emote && !target) + if(!target) + to_chat(user, SPAN_WARNING("You cannot see a '[extra_params]' within range.")) + + if(mandatory_targetted_emote && !target) to_chat(user, SPAN_WARNING("You can't do that to thin air.")) return - if(target && target != user && check_range) - if (get_dist(user, target) > check_range) - to_chat(user, SPAN_WARNING("\The [target] is too far away.")) - return - var/decl/pronouns/user_gender = user.get_pronouns() var/decl/pronouns/target_gender = target?.get_pronouns() From 15fe646309eb376f18d152b6b1cdf8694a239b79 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 16 Feb 2024 07:04:23 +1100 Subject: [PATCH 3/5] Emote key uniqueness is now enforced. --- code/modules/emotes/emote_define.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm index 3fa7e5f38cc..ee8ec359325 100644 --- a/code/modules/emotes/emote_define.dm +++ b/code/modules/emotes/emote_define.dm @@ -26,6 +26,16 @@ var/conscious = TRUE // Do we need to be awake to emote this? var/emote_range = 0 // If >0, restricts emote visibility to viewers within range. +/decl/emote/validate() + . = ..() + var/list/all_emotes = decls_repository.get_decls_of_type(/decl/emote) + for(var/emote_type in all_emotes) + var/decl/emote/emote = all_emotes[emote_type] + if(emote == src) + continue + if(key == emote.key) + . += "non-unique key, overlaps with [emote.type]" + /decl/emote/proc/get_emote_message_1p(var/atom/user, var/atom/target, var/extra_params) if(target) return emote_message_1p_target From 36c199e05ed05475264f85039c6c9d6ba52a218c Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 16 Feb 2024 07:38:20 +1100 Subject: [PATCH 4/5] Porting various adjustments and improvements to emotes from Polaris. --- code/modules/emotes/definitions/_mob.dm | 26 +-- code/modules/emotes/definitions/audible.dm | 31 ++- code/modules/emotes/definitions/exertion.dm | 4 +- code/modules/emotes/definitions/human.dm | 50 ----- code/modules/emotes/definitions/synthetics.dm | 13 +- code/modules/emotes/definitions/tail.dm | 62 ++++++ code/modules/emotes/definitions/visible.dm | 35 ++- code/modules/emotes/emote_define.dm | 205 ++++++++++++------ code/modules/emotes/emote_mob.dm | 47 +++- code/modules/mob/living/brain/brain.dm | 2 +- code/modules/mob/living/carbon/alien/alien.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 5 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/mob/mob_helpers.dm | 1 - mods/content/xenobiology/emotes.dm | 18 +- mods/mobs/dionaea/mob/nymph_emotes.dm | 4 +- mods/species/ascent/datum/emotes.dm | 4 +- .../species/ascent/mobs/nymph/nymph_emotes.dm | 4 +- .../species/bayliens/tajaran/datum/species.dm | 14 +- mods/species/bayliens/unathi/datum/species.dm | 14 +- mods/species/vox/datum/species.dm | 2 +- nebula.dme | 2 +- 22 files changed, 325 insertions(+), 224 deletions(-) delete mode 100644 code/modules/emotes/definitions/human.dm create mode 100644 code/modules/emotes/definitions/tail.dm diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm index efe989c00a6..126e71c9743 100644 --- a/code/modules/emotes/definitions/_mob.dm +++ b/code/modules/emotes/definitions/_mob.dm @@ -1,29 +1,11 @@ /mob var/list/usable_emotes -/mob/proc/get_base_default_emotes() +/mob/proc/get_default_emotes() return -/mob/proc/update_emotes(var/skip_sort) - LAZYCLEARLIST(usable_emotes) - for(var/emote in get_base_default_emotes()) - var/decl/emote/emote_datum = GET_DECL(emote) - if(emote_datum.check_user(src)) - LAZYSET(usable_emotes, emote_datum.key, emote_datum) - if(LAZYLEN(usable_emotes) && !skip_sort) - usable_emotes = sortTim(usable_emotes, /proc/cmp_text_asc, associative = TRUE) - -/mob/living/update_emotes() - . = ..(skip_sort=1) +/mob/living/get_default_emotes() + . = ..() var/decl/species/my_species = get_species() if(LAZYLEN(my_species?.default_emotes)) - for(var/emote in my_species.default_emotes) - var/decl/emote/emote_datum = GET_DECL(emote) - if(emote_datum.check_user(src)) - usable_emotes[emote_datum.key] = emote_datum - if(LAZYLEN(usable_emotes)) - usable_emotes = sortTim(usable_emotes, /proc/cmp_text_asc, associative = TRUE) - -/mob/Initialize() - . = ..() - update_emotes() + return . | my_species.default_emotes diff --git a/code/modules/emotes/definitions/audible.dm b/code/modules/emotes/definitions/audible.dm index d4615f7e819..159b1fc4be7 100644 --- a/code/modules/emotes/definitions/audible.dm +++ b/code/modules/emotes/definitions/audible.dm @@ -10,7 +10,7 @@ emote_message_radio = copytext(emote_message_3p, 6) /decl/emote/audible/deathgasp_alien - key = "deathgasp" + key = "adeathgasp" emote_message_3p = "USER lets out a waning guttural screech, green blood bubbling from its maw." /decl/emote/audible/whimper @@ -27,7 +27,7 @@ emote_message_3p = "USER scretches." /decl/emote/audible/choke - key ="choke" + key = "choke" emote_message_3p = "USER chokes." conscious = 0 @@ -97,12 +97,11 @@ /decl/emote/audible/cough key = "cough" -/decl/emote/audible/cough/check_user(var/mob/living/carbon/user) +/decl/emote/audible/cough/mob_can_use(var/mob/living/user) . = ..() - if(!.) - return . - var/obj/item/organ/internal/lungs/lung = user.get_organ(BP_LUNGS) - . = lung?.active_breathing && !user.isSynthetic() + if(.) + var/obj/item/organ/internal/lungs/lung = user.get_organ(BP_LUNGS) + . = lung?.active_breathing && !user.isSynthetic() /decl/emote/audible/cough/do_emote(var/mob/living/carbon/user, var/extra_params) if(!istype(user)) @@ -164,18 +163,18 @@ check_range = 1 /decl/emote/audible/bug_hiss - key ="hiss" + key = "bughiss" emote_message_3p_target = "USER hisses at TARGET." emote_message_3p = "USER hisses." emote_sound = 'sound/voice/BugHiss.ogg' /decl/emote/audible/bug_buzz - key ="buzz" + key = "bugbuzz" emote_message_3p = "USER buzzes its wings." emote_sound = 'sound/voice/BugBuzz.ogg' /decl/emote/audible/bug_chitter - key ="chitter" + key = "bugchitter" emote_message_3p = "USER chitters." emote_sound = 'sound/voice/Bug.ogg' @@ -196,6 +195,14 @@ emote_message_3p = "USER wheezes." /decl/emote/audible/hiss - key ="hiss_" + key = "hiss_" emote_message_3p_target = "USER hisses softly at TARGET." - emote_message_3p = "USER hisses softly." \ No newline at end of file + emote_message_3p = "USER hisses softly." + +/decl/emote/audible/deathgasp + key = "deathgasp" + +/decl/emote/audible/deathgasp/get_emote_message_3p(mob/living/user) + var/decl/species/my_species = user.get_species() + if(my_species) + return "USER [my_species.get_death_message()]" diff --git a/code/modules/emotes/definitions/exertion.dm b/code/modules/emotes/definitions/exertion.dm index a750125a6cc..25e147d7303 100644 --- a/code/modules/emotes/definitions/exertion.dm +++ b/code/modules/emotes/definitions/exertion.dm @@ -4,7 +4,7 @@ emote_message_1p = "You are sweating heavily." emote_message_3p = "USER is sweating heavily." -/decl/emote/exertion/biological/check_user(mob/living/user) +/decl/emote/exertion/biological/mob_can_use(mob/living/user) if(istype(user) && !user.isSynthetic()) return ..() return FALSE @@ -29,7 +29,7 @@ emote_message_1p = "You overstress your actuators." emote_message_3p = "USER's actuators whine with strain." -/decl/emote/exertion/synthetic/check_user(mob/living/user) +/decl/emote/exertion/synthetic/mob_can_use(mob/living/user) if(istype(user) && user.isSynthetic()) return ..() return FALSE diff --git a/code/modules/emotes/definitions/human.dm b/code/modules/emotes/definitions/human.dm deleted file mode 100644 index f3c2f091a98..00000000000 --- a/code/modules/emotes/definitions/human.dm +++ /dev/null @@ -1,50 +0,0 @@ -/decl/emote/human/check_user(var/mob/living/carbon/human/user) - return istype(user) - -/decl/emote/human/deathgasp - key = "deathgasp" - -/decl/emote/human/deathgasp/get_emote_message_3p(var/mob/living/carbon/human/user) - return "USER [user.species.get_species_death_message()]" - -/decl/emote/human/swish - key = "swish" - -/decl/emote/human/swish/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_once() - -/decl/emote/human/wag - key = "wag" - -/decl/emote/human/wag/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_start() - -/decl/emote/human/sway - key = "sway" - -/decl/emote/human/sway/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_start() - -/decl/emote/human/qwag - key = "qwag" - -/decl/emote/human/qwag/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_fast() - -/decl/emote/human/fastsway - key = "fastsway" - -/decl/emote/human/fastsway/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_fast() - -/decl/emote/human/swag - key = "swag" - -/decl/emote/human/swag/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_stop() - -/decl/emote/human/stopsway - key = "stopsway" - -/decl/emote/human/stopsway/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_stop() diff --git a/code/modules/emotes/definitions/synthetics.dm b/code/modules/emotes/definitions/synthetics.dm index 0126be0c110..0048fe5d36d 100644 --- a/code/modules/emotes/definitions/synthetics.dm +++ b/code/modules/emotes/definitions/synthetics.dm @@ -3,10 +3,8 @@ emote_message_3p = "USER beeps." emote_sound = 'sound/machines/twobeep.ogg' -/decl/emote/audible/synth/check_user(var/mob/living/user) - if(istype(user) && user.isSynthetic()) - return ..() - return FALSE +/decl/emote/audible/synth/mob_can_use(var/mob/living/user) + return ..() && user.isSynthetic() /decl/emote/audible/synth/ping key = "ping" @@ -34,8 +32,11 @@ emote_message_3p_target = "USER shows TARGET USER_THEIR legal authorization barcode." emote_sound = 'sound/voice/biamthelaw.ogg' -/decl/emote/audible/synth/security/check_user(var/mob/living/silicon/robot/user) - return (istype(user) && istype(user.module,/obj/item/robot_module/security)) +/decl/emote/audible/synth/security/mob_can_use(mob/living/user) + var/mob/living/silicon/robot/robot_user = user + if(!istype(robot_user)) + return FALSE + return istype(robot_user.module, /obj/item/robot_module/security) && ..() /decl/emote/audible/synth/security/halt key = "halt" diff --git a/code/modules/emotes/definitions/tail.dm b/code/modules/emotes/definitions/tail.dm new file mode 100644 index 00000000000..19090e9175b --- /dev/null +++ b/code/modules/emotes/definitions/tail.dm @@ -0,0 +1,62 @@ + +/decl/emote/visible/tail + abstract_type = /decl/emote/visible/tail + +/decl/emote/visible/tail/mob_can_use(mob/living/user) + return ishuman(user) && ..() + +/decl/emote/visible/tail/swish + key = "swish" + +/decl/emote/visible/tail/swish/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_once() + +/decl/emote/visible/tail/wag + key = "wag" + +/decl/emote/visible/tail/wag/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_start() + +/decl/emote/visible/tail/sway + key = "sway" + +/decl/emote/visible/tail/sway/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_start() + +/decl/emote/visible/tail/qwag + key = "qwag" + +/decl/emote/visible/tail/qwag/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_fast() + +/decl/emote/visible/tail/fastsway + key = "fastsway" + +/decl/emote/visible/tail/fastsway/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_fast() + +/decl/emote/visible/tail/swag + key = "swag" + +/decl/emote/visible/tail/swag/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_stop() + +/decl/emote/visible/tail/stopsway + key = "stopsway" + +/decl/emote/visible/tail/stopsway/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_stop() diff --git a/code/modules/emotes/definitions/visible.dm b/code/modules/emotes/definitions/visible.dm index 4f7327a7382..2a70ef97c9c 100644 --- a/code/modules/emotes/definitions/visible.dm +++ b/code/modules/emotes/definitions/visible.dm @@ -1,5 +1,5 @@ /decl/emote/visible - key ="tail" + key = "tail" emote_message_3p = "USER waves USER_THEIR tail." message_type = VISIBLE_MESSAGE @@ -9,48 +9,48 @@ emote_message_3p = "USER scratches." /decl/emote/visible/drool - key ="drool" + key = "drool" emote_message_3p = "USER drools." conscious = 0 /decl/emote/visible/nod - key ="nod" + key = "nod" emote_message_3p_target = "USER nods USER_THEIR head at TARGET." emote_message_3p = "USER nods USER_THEIR head." -/decl/emote/visible/sway - key ="sway" +/decl/emote/visible/tail/sway + key = "sways" emote_message_3p = "USER sways around dizzily." /decl/emote/visible/sulk - key ="sulk" + key = "sulk" emote_message_3p = "USER sulks down sadly." /decl/emote/visible/dance - key ="dance" + key = "dance" check_restraints = TRUE emote_message_3p = "USER dances around happily." /decl/emote/visible/roll - key ="roll" + key = "roll" check_restraints = TRUE emote_message_3p = "USER rolls." /decl/emote/visible/shake - key ="shake" + key = "shake" emote_message_3p = "USER shakes USER_THEIR head." /decl/emote/visible/jump - key ="jump" + key = "jump" emote_message_3p = "USER jumps!" /decl/emote/visible/shiver - key ="shiver" + key = "shiver" emote_message_3p = "USER shivers." conscious = 0 /decl/emote/visible/collapse - key ="collapse" + key = "collapse" emote_message_3p = "USER collapses!" /decl/emote/visible/collapse/do_extra(var/mob/user) @@ -214,7 +214,7 @@ emote_message_3p = "USER vibrates!" /decl/emote/visible/deathgasp_robot - key = "deathgasp" + key = "rdeathgasp" emote_message_3p = "USER shudders violently for a moment, then becomes motionless, USER_THEIR eyes slowly darkening." /decl/emote/visible/handshake @@ -235,9 +235,6 @@ emote_message_3p = "USER signals." check_restraints = TRUE -/decl/emote/visible/signal/check_user(atom/user) - return ismob(user) - /decl/emote/visible/signal/get_emote_message_3p(var/mob/living/user, var/atom/target, var/extra_params) if(istype(user) && user.get_empty_hand_slot()) var/t1 = round(text2num(extra_params)) @@ -337,15 +334,17 @@ key = "spin" check_restraints = TRUE emote_message_3p = "USER spins!" + emote_delay = 2 SECONDS /decl/emote/visible/spin/do_extra(mob/user) if(istype(user)) - user.spin(20, 1) + user.spin(emote_delay, 1) /decl/emote/visible/sidestep key = "sidestep" check_restraints = TRUE emote_message_3p = "USER steps rhythmically and moves side to side." + emote_delay = 1.2 SECONDS /decl/emote/visible/sidestep/do_extra(mob/user) if(istype(user)) @@ -357,7 +356,7 @@ /decl/emote/visible/vomit key = "vomit" -/decl/emote/visible/vomit/check_user(var/mob/living/carbon/human/user) +/decl/emote/visible/vomit/mob_can_use(mob/living/user) . = ..() && user.check_has_mouth() && !user.isSynthetic() /decl/emote/visible/vomit/do_emote(var/atom/user, var/extra_params) diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm index ee8ec359325..e2c97dcfd11 100644 --- a/code/modules/emotes/emote_define.dm +++ b/code/modules/emotes/emote_define.dm @@ -4,27 +4,72 @@ // gender-appropriate version of the same. // - Impaired messages do not do any substitutions. -/decl/emote - var/key // Command to use emote ie. '*[key]' - var/emote_message_1p // First person message ('You do a flip!') - var/emote_message_3p // Third person message ('Urist McShitter does a flip!') - var/emote_message_impaired // Deaf/blind message ('You hear someone flipping out.', 'You see someone opening and closing their mouth') - - var/emote_message_1p_target // 'You do a flip at Urist McTarget!' - var/emote_message_3p_target // 'Urist McShitter does a flip at Urist McTarget!' +var/global/list/emotes_by_key = list() - var/emote_message_radio // A message to send over the radio if one picks up this emote. +/proc/get_emote_by_key(var/key) + if(!global.emotes_by_key) + decls_repository.get_decls_of_type(/decl/emote) // emotes_by_key will be updated in emote Initialize() + return global.emotes_by_key[key] - // Two-dimensional array - // First is list of genders, associated to a list of the sound effects to use +/decl/emote + /// Command to use emote ie. '*[key]' + var/key + /// First person message ('You do a flip!') + var/emote_message_1p + /// Third person message ('Urist McShitter does a flip!') + var/emote_message_3p + /// First person message for robits. + var/emote_message_synthetic_1p + /// Third person message for robits. + var/emote_message_synthetic_3p + + /// 'You do a flip at Urist McTarget!' + var/emote_message_1p_target + /// 'Urist McShitter does a flip at Urist McTarget!' + var/emote_message_3p_target + /// First person targeted message for robits. + var/emote_message_synthetic_1p_target + /// Third person targeted message for robits. + var/emote_message_synthetic_3p_target + + /// A message to send over the radio if one picks up this emote. + var/emote_message_radio + /// As above, but for synthetics. + var/emote_message_radio_synthetic + + /// A message to show if the emote is audible and the user is muzzled. + var/emote_message_muffled + /// Deaf/blind message ('You hear someone flipping out.', 'You see someone opening and closing their mouth') + var/emote_message_impaired + + /// Two-dimensional array: first is list of genders, associated to a list of the sound effects to use. var/list/emote_sound = null - - var/message_type = VISIBLE_MESSAGE // Audible/visual flag - var/mandatory_targetted_emote // Whether or not this emote -must- have a target. - var/check_restraints // Can this emote be used while restrained? - var/check_range // falsy, or a range outside which the emote will not work - var/conscious = TRUE // Do we need to be awake to emote this? - var/emote_range = 0 // If >0, restricts emote visibility to viewers within range. + /// As above, but used when check_synthetic() is true. + var/list/emote_sound_synthetic + /// Volume of sound to play. + var/emote_volume = 50 + /// As above, but used when check_synthetic() is true. + var/emote_volume_synthetic = 50 + + /// Audible/visual flag + var/message_type = VISIBLE_MESSAGE + /// Whether or not this emote -must- have a target. + var/mandatory_targetted_emote + /// Can this emote be used while restrained? + var/check_restraints + /// falsy, or a range outside which the emote will not work + var/check_range + /// Do we need to be awake to emote this? + var/conscious = TRUE + /// If >0, restricts emote visibility to viewers within range. + var/emote_range = 0 + // Time in ds that this emote will block further emote use (spam prevention). + var/emote_delay = 1 SECOND + +/decl/emote/Initialize() + . = ..() + if(key) + global.emotes_by_key[key] = src /decl/emote/validate() . = ..() @@ -38,14 +83,34 @@ /decl/emote/proc/get_emote_message_1p(var/atom/user, var/atom/target, var/extra_params) if(target) + if(emote_message_synthetic_1p_target && check_synthetic(user)) + return emote_message_synthetic_1p_target return emote_message_1p_target + if(emote_message_synthetic_1p && check_synthetic(user)) + return emote_message_synthetic_1p return emote_message_1p /decl/emote/proc/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params) if(target) + if(emote_message_synthetic_3p_target && check_synthetic(user)) + return emote_message_synthetic_3p_target return emote_message_3p_target + if(emote_message_synthetic_3p && check_synthetic(user)) + return emote_message_synthetic_3p return emote_message_3p +/decl/emote/proc/get_emote_sound(var/atom/user) + if(check_synthetic(user) && emote_sound_synthetic) + return list( + "sound" = emote_sound_synthetic, + "vol" = emote_volume_synthetic + ) + if(emote_sound) + return list( + "sound" = emote_sound, + "vol" = emote_volume + ) + /decl/emote/proc/do_emote(var/atom/user, var/extra_params) if(ismob(user) && check_restraints) var/mob/M = user @@ -77,43 +142,23 @@ to_chat(user, SPAN_WARNING("You can't do that to thin air.")) return - var/decl/pronouns/user_gender = user.get_pronouns() - var/decl/pronouns/target_gender = target?.get_pronouns() - - var/use_3p - var/use_1p - var/use_radio_message - if(emote_message_1p) - if(target && emote_message_1p_target) - use_1p = get_emote_message_1p(user, target, extra_params) - use_1p = replacetext(use_1p, "TARGET_THEM", target_gender.him) - use_1p = replacetext(use_1p, "TARGET_THEIR", target_gender.his) - use_1p = replacetext(use_1p, "TARGET_SELF", target_gender.self) - use_1p = replacetext(use_1p, "TARGET", "\the [target]") - else - use_1p = get_emote_message_1p(user, null, extra_params) - use_1p = capitalize(use_1p) - - if(emote_message_3p) - if(target && emote_message_3p_target) - use_3p = get_emote_message_3p(user, target, extra_params) - use_3p = replacetext(use_3p, "TARGET_THEM", target_gender.him) - use_3p = replacetext(use_3p, "TARGET_THEIR", target_gender.his) - use_3p = replacetext(use_3p, "TARGET_SELF", target_gender.self) - use_3p = replacetext(use_3p, "TARGET", "\the [target]") - else - use_3p = get_emote_message_3p(user, null, extra_params) - use_3p = replacetext(use_3p, "USER_THEM", user_gender.him) - use_3p = replacetext(use_3p, "USER_THEIR", user_gender.his) - use_3p = replacetext(use_3p, "USER_SELF", user_gender.self) - use_3p = replacetext(use_3p, "USER", "\the [user]") - use_3p = capitalize(use_3p) - - if(emote_message_radio) - use_radio_message = replacetext(emote_message_radio, "USER_THEM", user_gender.him) - use_radio_message = replacetext(use_radio_message, "USER_THEIR", user_gender.his) - use_radio_message = replacetext(use_radio_message, "USER_SELF", user_gender.self) - use_radio_message = replacetext(use_radio_message, "USER", "\the [user]") + var/use_1p = get_emote_message_1p(user, target, extra_params) + if(use_1p) + if(target) + use_1p = replace_target_tokens(use_1p, target) + use_1p = "[capitalize(replace_user_tokens(use_1p, user))]" + + var/use_3p = get_emote_message_3p(user, target, extra_params) + if(use_3p) + if(target) + use_3p = replace_target_tokens(use_3p, target) + use_3p = "\The [user] [replace_user_tokens(use_3p, user)]" + + var/use_radio = get_radio_message(user) + if(use_radio) + if(target) + use_radio = replace_target_tokens(use_radio, target) + use_radio = replace_user_tokens(use_radio, user) var/use_range = emote_range if (!use_range) @@ -128,29 +173,61 @@ M.visible_message(message = "[user] opens their mouth silently!", self_message = "You cannot say anything!", blind_message = emote_message_impaired, checkghosts = /datum/client_preference/ghost_sight) return else - M.audible_message(message = use_3p, self_message = use_1p, deaf_message = emote_message_impaired, hearing_distance = use_range, checkghosts = /datum/client_preference/ghost_sight, radio_message = use_radio_message) + M.audible_message(message = use_3p, self_message = use_1p, deaf_message = emote_message_impaired, hearing_distance = use_range, checkghosts = /datum/client_preference/ghost_sight, radio_message = use_radio) else M.visible_message(message = use_3p, self_message = use_1p, blind_message = emote_message_impaired, range = use_range, checkghosts = /datum/client_preference/ghost_sight) do_extra(user, target) do_sound(user) +/decl/emote/proc/replace_target_tokens(var/msg, var/atom/target) + . = msg + if(istype(target)) + var/decl/pronouns/target_gender = target.get_pronouns() + . = replacetext(., "TARGET_THEM", target_gender.him) + . = replacetext(., "TARGET_THEIR", target_gender.his) + . = replacetext(., "TARGET_SELF", target_gender.self) + . = replacetext(., "TARGET", "\the [target]") + +/decl/emote/proc/replace_user_tokens(var/msg, var/atom/user) + . = msg + if(istype(user)) + var/decl/pronouns/user_gender = user.get_pronouns() + . = replacetext(., "USER_THEM", user_gender.him) + . = replacetext(., "USER_THEIR", user_gender.his) + . = replacetext(., "USER_SELF", user_gender.self) + . = replacetext(., "USER", "\the [user]") + +/decl/emote/proc/get_radio_message(var/atom/user) + if(emote_message_radio_synthetic && check_synthetic(user)) + return emote_message_radio_synthetic + return emote_message_radio + /decl/emote/proc/do_extra(var/atom/user, var/atom/target) return /decl/emote/proc/do_sound(var/atom/user) - if(emote_sound) - var/sound_to_play = emote_sound - if(islist(emote_sound)) - sound_to_play = emote_sound[user.gender] || emote_sound - sound_to_play = pick(sound_to_play) - return playsound(user.loc, sound_to_play, 50, 0) + var/use_emote_sound = get_emote_sound(user) + if(!use_emote_sound) + return + var/sound_to_play = use_emote_sound + if(islist(use_emote_sound)) + sound_to_play = use_emote_sound[user.gender] || use_emote_sound + sound_to_play = pick(sound_to_play) + return playsound(user.loc, sound_to_play, 50, 0) -/decl/emote/proc/check_user(var/atom/user) - return TRUE +/decl/emote/proc/mob_can_use(var/mob/user) + return istype(user) && user.stat != DEAD && (type in user.get_default_emotes()) /decl/emote/proc/can_target() return (emote_message_1p_target || emote_message_3p_target) /decl/emote/dd_SortValue() return key + +/decl/emote/proc/check_synthetic(var/mob/living/user) + . = istype(user) && user.isSynthetic() + if(!. && message_type == AUDIBLE_MESSAGE && user.should_have_organ(BP_LUNGS)) + var/obj/item/organ/internal/lungs/L = GET_INTERNAL_ORGAN(user, BP_LUNGS) + if(BP_IS_PROSTHETIC(L)) + . = TRUE diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 7713886e073..ef51ae1d929 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -1,3 +1,8 @@ +/mob + var/next_emote + var/next_emote_refresh + var/last_emote_summary + /mob/proc/can_emote(var/emote_type) . = check_mob_can_emote(emote_type) if(!.) @@ -13,19 +18,32 @@ /mob/living/brain/check_mob_can_emote(var/emote_type) return ..() && istype(get_container(), /obj/item/organ/internal/brain_interface) +#define EMOTE_REFRESH_SPAM_COOLDOWN (5 SECONDS) /mob/proc/emote(var/act, var/m_type, var/message) set waitfor = FALSE - // s-s-snowflake - if(src.stat == DEAD && act != "deathgasp") + + if(stat == DEAD && act != "deathgasp") return if(usr == src) //client-called emote - if (client && (client.prefs.muted & MUTE_IC)) - to_chat(src, "You cannot send IC messages (muted).") + if (client?.prefs?.muted & MUTE_IC) + to_chat(src, SPAN_WARNING("You cannot send IC messages (muted).")) + return + + if(world.time < next_emote) + to_chat(src, SPAN_WARNING("You cannot use another emote yet.")) return if(act == "help") - to_chat(src,"Usable emotes: [english_list(usable_emotes)]") + if(world.time >= next_emote_refresh) + var/list/usable_emotes = list() + next_emote_refresh = world.time + EMOTE_REFRESH_SPAM_COOLDOWN + for(var/emote in get_default_emotes()) + var/decl/emote/emote_datum = decls_repository.get_decl(emote) + if(emote_datum.mob_can_use(src)) + usable_emotes[emote_datum.key] = emote_datum + last_emote_summary = english_list(sortTim(usable_emotes, /proc/cmp_text_asc, associative = TRUE)) + to_chat(src, "Usable emotes: [last_emote_summary].") return if(!can_emote(m_type)) @@ -52,24 +70,31 @@ act = copytext(tempstr,1,splitpoint) message = copytext(tempstr,splitpoint+1,0) - var/decl/emote/use_emote = usable_emotes[act] - if(!use_emote) - to_chat(src, "Unknown emote '[act]'. Type say *help for a list of usable emotes.") + var/decl/emote/use_emote = get_emote_by_key(act) + if(!istype(use_emote)) + to_chat(src, SPAN_WARNING("Unknown emote '[act]'. Type say *help for a list of usable emotes.")) + return + + if(!use_emote.mob_can_use(src)) + to_chat(src, SPAN_WARNING("You cannot use the emote '[act]'. Type say *help for a list of usable emotes.")) return if(m_type != use_emote.message_type && use_emote.conscious && stat != CONSCIOUS) return if(use_emote.message_type == AUDIBLE_MESSAGE && get_item_blocking_speech()) - audible_message("\The [src] makes a muffled sound.") + audible_message("\The [src] [use_emote.emote_message_muffled || "makes a muffled sound."]") return - else - use_emote.do_emote(src, message) + + next_emote = world.time + use_emote.emote_delay + use_emote.do_emote(src, message) for (var/obj/item/implant/I in src) if (I.implanted) I.trigger(act, src) +#undef EMOTE_REFRESH_SPAM_COOLDOWN + /mob/proc/format_emote(var/emoter = null, var/message = null) var/pretext var/subtext diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 59e030551ef..c5f97afdb0f 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -13,7 +13,7 @@ SPAN_DANGER("Major electrical distruption detected: System rebooting.") ) -/mob/living/brain/get_base_default_emotes() +/mob/living/brain/get_default_emotes() var/static/list/default_emotes = list( /decl/emote/audible/alarm, /decl/emote/audible/alert, diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 6c305c673e9..fded1e6255c 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -37,13 +37,13 @@ /mob/living/carbon/alien/get_admin_job_string() return "Alien" -/mob/living/carbon/alien/get_base_default_emotes() +/mob/living/carbon/alien/get_default_emotes() var/static/list/default_emotes = list( /decl/emote/visible, /decl/emote/visible/scratch, /decl/emote/visible/drool, /decl/emote/visible/nod, - /decl/emote/visible/sway, + /decl/emote/visible/tail/sway, /decl/emote/visible/sulk, /decl/emote/visible/twitch, /decl/emote/visible/dance, diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index dcb0da0218d..a16b1a77e9a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -540,7 +540,6 @@ set_move_intent(GET_DECL(move_intents[1])) if(!istype(move_intent)) set_next_usable_move_intent() - update_emotes() apply_species_inventory_restrictions() refresh_ai_handler() @@ -1174,7 +1173,7 @@ return SScharacter_info.get_record(comments_record_id, TRUE) return ..() -/mob/living/carbon/human/get_base_default_emotes() +/mob/living/carbon/human/get_default_emotes() var/static/list/default_emotes = list( /decl/emote/visible/blink, /decl/emote/audible/synth, @@ -1204,7 +1203,7 @@ /decl/emote/audible/moan, /decl/emote/audible/grunt, /decl/emote/audible/slap, - /decl/emote/human/deathgasp, + /decl/emote/audible/deathgasp, /decl/emote/audible/giggle, /decl/emote/audible/scream, /decl/emote/visible/airguitar, diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index aa676edc449..ae8f8e22f75 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1100,7 +1100,7 @@ /mob/living/silicon/robot/try_breathe() return FALSE -/mob/living/silicon/robot/get_base_default_emotes() +/mob/living/silicon/robot/get_default_emotes() var/static/list/default_emotes = list( /decl/emote/audible/clap, /decl/emote/visible/bow, diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index d8ce31b26fb..8c36b3d8892 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -24,7 +24,6 @@ if(BP_IS_PROSTHETIC(E)) robolimb_count++ full_prosthetic = robolimb_count > 0 && (robolimb_count == LAZYLEN(limbs)) //If no organs, no way to tell - update_emotes() return full_prosthetic /mob/living/silicon/isSynthetic() diff --git a/mods/content/xenobiology/emotes.dm b/mods/content/xenobiology/emotes.dm index 226b11e39b9..d98ee2307b1 100644 --- a/mods/content/xenobiology/emotes.dm +++ b/mods/content/xenobiology/emotes.dm @@ -1,8 +1,8 @@ -/mob/living/slime/get_base_default_emotes() +/mob/living/slime/get_default_emotes() var/static/list/default_emotes = list( /decl/emote/audible/moan, /decl/emote/visible/twitch, - /decl/emote/visible/sway, + /decl/emote/visible/tail/sway, /decl/emote/visible/shiver, /decl/emote/visible/bounce, /decl/emote/visible/jiggle, @@ -27,25 +27,25 @@ slime_ai.mood = mood user.update_icon() -/decl/emote/slime/check_user(var/atom/user) - return isslime(user) +/decl/emote/slime/mob_can_use(var/atom/user) + return isslime(user) && ..() /decl/emote/slime/pout - key = "pout" + key = "slimepout" mood = "pout" /decl/emote/slime/sad - key = "sad" + key = "slimesad" mood = "sad" /decl/emote/slime/angry - key = "angry" + key = "slimeangry" mood = "angry" /decl/emote/slime/frown - key = "frown" + key = "slimefrown" mood = "mischevous" /decl/emote/slime/smile - key = "smile" + key = "slimesmile" mood = ":3" diff --git a/mods/mobs/dionaea/mob/nymph_emotes.dm b/mods/mobs/dionaea/mob/nymph_emotes.dm index c19daef16fb..19624be8f82 100644 --- a/mods/mobs/dionaea/mob/nymph_emotes.dm +++ b/mods/mobs/dionaea/mob/nymph_emotes.dm @@ -1,10 +1,10 @@ -/mob/living/carbon/alien/diona/get_base_default_emotes() +/mob/living/carbon/alien/diona/get_default_emotes() var/static/list/default_emotes = list( /decl/emote/visible, /decl/emote/visible/scratch, /decl/emote/visible/drool, /decl/emote/visible/nod, - /decl/emote/visible/sway, + /decl/emote/visible/tail/sway, /decl/emote/visible/sulk, /decl/emote/visible/twitch, /decl/emote/visible/dance, diff --git a/mods/species/ascent/datum/emotes.dm b/mods/species/ascent/datum/emotes.dm index c25becd6933..12e09f1d025 100644 --- a/mods/species/ascent/datum/emotes.dm +++ b/mods/species/ascent/datum/emotes.dm @@ -11,7 +11,7 @@ /decl/emote/visible/ascent_dazzle ) -/mob/living/silicon/robot/flying/ascent/get_base_default_emotes() +/mob/living/silicon/robot/flying/ascent/get_default_emotes() var/static/list/default_emotes = list( /decl/emote/audible/ascent_purr, /decl/emote/audible/ascent_hiss, @@ -25,7 +25,7 @@ emote_sound = 'mods/species/ascent/sounds/ascent1.ogg' /decl/emote/audible/ascent_hiss - key ="hiss" + key = "hiss" emote_message_3p = "USER hisses." emote_sound = 'mods/species/ascent/sounds/razorweb.ogg' diff --git a/mods/species/ascent/mobs/nymph/nymph_emotes.dm b/mods/species/ascent/mobs/nymph/nymph_emotes.dm index 3d463bc768b..d2905f7701d 100644 --- a/mods/species/ascent/mobs/nymph/nymph_emotes.dm +++ b/mods/species/ascent/mobs/nymph/nymph_emotes.dm @@ -1,10 +1,10 @@ -/mob/living/carbon/alien/ascent_nymph/get_base_default_emotes() +/mob/living/carbon/alien/ascent_nymph/get_default_emotes() var/static/list/default_emotes = list( /decl/emote/visible, /decl/emote/visible/scratch, /decl/emote/visible/drool, /decl/emote/visible/nod, - /decl/emote/visible/sway, + /decl/emote/visible/tail/sway, /decl/emote/visible/sulk, /decl/emote/visible/twitch, /decl/emote/visible/roll, diff --git a/mods/species/bayliens/tajaran/datum/species.dm b/mods/species/bayliens/tajaran/datum/species.dm index 8db767a029f..b19f50f8877 100644 --- a/mods/species/bayliens/tajaran/datum/species.dm +++ b/mods/species/bayliens/tajaran/datum/species.dm @@ -62,13 +62,13 @@ ) default_emotes = list( - /decl/emote/human/swish, - /decl/emote/human/wag, - /decl/emote/human/sway, - /decl/emote/human/qwag, - /decl/emote/human/fastsway, - /decl/emote/human/swag, - /decl/emote/human/stopsway, + /decl/emote/visible/tail/swish, + /decl/emote/visible/tail/wag, + /decl/emote/visible/tail/sway, + /decl/emote/visible/tail/qwag, + /decl/emote/visible/tail/fastsway, + /decl/emote/visible/tail/swag, + /decl/emote/visible/tail/stopsway, /decl/emote/audible/purr, /decl/emote/audible/purrlong ) diff --git a/mods/species/bayliens/unathi/datum/species.dm b/mods/species/bayliens/unathi/datum/species.dm index 29cd9e8d913..1cfd6fcf0bd 100644 --- a/mods/species/bayliens/unathi/datum/species.dm +++ b/mods/species/bayliens/unathi/datum/species.dm @@ -78,13 +78,13 @@ ) default_emotes = list( - /decl/emote/human/swish, - /decl/emote/human/wag, - /decl/emote/human/sway, - /decl/emote/human/qwag, - /decl/emote/human/fastsway, - /decl/emote/human/swag, - /decl/emote/human/stopsway + /decl/emote/visible/tail/swish, + /decl/emote/visible/tail/wag, + /decl/emote/visible/tail/sway, + /decl/emote/visible/tail/qwag, + /decl/emote/visible/tail/fastsway, + /decl/emote/visible/tail/swag, + /decl/emote/visible/tail/stopsway ) pain_emotes_with_pain_level = list( diff --git a/mods/species/vox/datum/species.dm b/mods/species/vox/datum/species.dm index e3d525a7917..66470af4395 100644 --- a/mods/species/vox/datum/species.dm +++ b/mods/species/vox/datum/species.dm @@ -165,6 +165,6 @@ stack.do_backup() /decl/emote/audible/vox_shriek - key ="shriek" + key = "shriek" emote_message_3p = "USER SHRIEKS!" emote_sound = 'mods/species/vox/sounds/shriek1.ogg' diff --git a/nebula.dme b/nebula.dme index 3097ba74dfb..38f140a0716 100644 --- a/nebula.dme +++ b/nebula.dme @@ -2064,8 +2064,8 @@ #include "code\modules\emotes\definitions\_mob.dm" #include "code\modules\emotes\definitions\audible.dm" #include "code\modules\emotes\definitions\exertion.dm" -#include "code\modules\emotes\definitions\human.dm" #include "code\modules\emotes\definitions\synthetics.dm" +#include "code\modules\emotes\definitions\tail.dm" #include "code\modules\emotes\definitions\visible.dm" #include "code\modules\error_handler\error_handler.dm" #include "code\modules\error_handler\error_reporting.dm" From 5b4b63a012c0e4608c0bdebe70b724bcfeba4bb5 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 16 Feb 2024 08:05:40 +1100 Subject: [PATCH 5/5] Standardizing emote tokens. --- code/datums/ai/human.dm | 6 +- .../machinery/doors/airlock_interactions.dm | 2 +- code/game/machinery/suit_cycler.dm | 2 +- code/game/objects/effects/effect_system.dm | 2 +- code/game/objects/items/weapons/defib.dm | 4 +- code/modules/emotes/definitions/_mob.dm | 3 - code/modules/emotes/definitions/audible.dm | 94 ++++----- code/modules/emotes/definitions/exertion.dm | 19 +- code/modules/emotes/definitions/synthetics.dm | 20 +- code/modules/emotes/definitions/tail.dm | 2 +- code/modules/emotes/definitions/visible.dm | 178 +++++++++--------- code/modules/emotes/emote_define.dm | 70 +++++-- code/modules/emotes/emote_mob.dm | 38 ++-- code/modules/materials/_materials.dm | 2 +- .../gasses/material_gas_mundane.dm | 2 +- code/modules/mob/hugs.dm | 16 +- code/modules/mob/living/brain/brain.dm | 2 +- code/modules/mob/living/carbon/alien/alien.dm | 2 +- .../mob/living/carbon/human/human_organs.dm | 2 +- code/modules/mob/living/life.dm | 4 +- code/modules/mob/living/living_defense.dm | 2 +- code/modules/mob/living/say.dm | 2 +- .../mob/living/simple_animal/hostile/bat.dm | 2 +- .../hostile/commanded/bear_companion.dm | 4 +- .../hostile/commanded/nanomachines.dm | 2 +- .../living/simple_animal/hostile/faithless.dm | 2 +- .../modules/mob/living/simple_animal/shade.dm | 2 +- code/modules/mob/say.dm | 4 +- code/modules/organs/ailments/_ailment.dm | 6 +- .../organs/ailments/ailments_medical.dm | 33 ++-- code/modules/organs/ailments/faults/_fault.dm | 2 +- .../ailments/faults/fault_acid_discharge.dm | 2 +- .../ailments/faults/fault_elec_discharge.dm | 2 +- .../organs/ailments/faults/fault_leaky.dm | 2 +- .../ailments/faults/fault_locking_thumbs.dm | 2 +- .../ailments/faults/fault_noisemaker.dm | 2 +- .../ailments/faults/fault_overstimulation.dm | 2 +- code/modules/organs/external/_external.dm | 2 +- .../organs/external/_external_damage.dm | 4 +- code/modules/organs/internal/brain.dm | 2 +- code/modules/organs/internal/lungs.dm | 6 +- code/modules/organs/pain.dm | 2 +- .../modules/reagents/chems/chems_compounds.dm | 4 +- code/modules/reagents/chems/chems_drugs.dm | 12 +- code/modules/species/species.dm | 7 +- .../psionics/complexus/complexus_helpers.dm | 3 +- .../system/psionics/faculties/coercion.dm | 4 +- mods/content/xenobiology/emotes.dm | 4 +- mods/content/xenobiology/slime/slime_AI.dm | 2 +- mods/mobs/dionaea/datums/ai.dm | 2 +- mods/mobs/dionaea/mob/nymph_emotes.dm | 4 +- mods/species/ascent/datum/emotes.dm | 36 ++-- .../species/ascent/mobs/nymph/nymph_emotes.dm | 2 +- .../species/bayliens/adherent/datum/emotes.dm | 4 +- mods/species/bayliens/skrell/datum/emotes.dm | 10 +- mods/species/bayliens/tajaran/datum/emotes.dm | 4 +- mods/species/vox/datum/species.dm | 2 +- 57 files changed, 351 insertions(+), 308 deletions(-) diff --git a/code/datums/ai/human.dm b/code/datums/ai/human.dm index bced65059e1..24c9fd55af3 100644 --- a/code/datums/ai/human.dm +++ b/code/datums/ai/human.dm @@ -8,13 +8,13 @@ return if(H.get_shock() && H.shock_stage < 40 && prob(3)) - H.emote(pick("moan","groan")) + H.emote(pick(/decl/emote/audible/moan, /decl/emote/audible/groan)) if(H.shock_stage > 10 && prob(3)) - H.emote(pick("cry","whimper")) + H.emote(pick(/decl/emote/audible/cry, /decl/emote/audible/whimper)) if(H.shock_stage >= 40 && prob(3)) - H.emote("scream") + H.emote(/decl/emote/audible/scream) if(!H.restrained() && H.lying && H.shock_stage >= 60 && prob(3)) H.custom_emote("thrashes in agony") diff --git a/code/game/machinery/doors/airlock_interactions.dm b/code/game/machinery/doors/airlock_interactions.dm index 681f9258b0b..4a28ca7be39 100644 --- a/code/game/machinery/doors/airlock_interactions.dm +++ b/code/game/machinery/doors/airlock_interactions.dm @@ -82,7 +82,7 @@ /mob/living/carbon/airlock_crush(var/crush_damage) . = ..() if (can_feel_pain()) - emote("scream") + emote(/decl/emote/audible/scream) /mob/living/silicon/robot/airlock_crush(var/crush_damage) return ..(round(crush_damage / CYBORG_AIRLOCKCRUSH_RESISTANCE)) //TODO implement robot melee armour and remove this. diff --git a/code/game/machinery/suit_cycler.dm b/code/game/machinery/suit_cycler.dm index 1cf28054c97..7edd6cb3a2a 100644 --- a/code/game/machinery/suit_cycler.dm +++ b/code/game/machinery/suit_cycler.dm @@ -441,7 +441,7 @@ if(occupant) if(prob(radiation_level*2) && occupant.can_feel_pain()) - occupant.emote("scream") + occupant.emote(/decl/emote/audible/scream) if(radiation_level > 2) occupant.take_organ_damage(0, radiation_level*2 + rand(1,3)) if(radiation_level > 1) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 65d922b6cda..6abfb9070fb 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -288,7 +288,7 @@ steam.start() -- spawns the effect R.take_overall_damage(0, 0.75) if (R.coughedtime != 1) R.coughedtime = 1 - R.emote("gasp") + R.emote(/decl/emote/audible/gasp) spawn (20) R.coughedtime = 0 diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 7aef0369e8a..46c030d3ba5 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -422,7 +422,7 @@ H.stun_effect_act(2, 120, target_zone) var/burn_damage = H.electrocute_act(burn_damage_amt*2, src, def_zone = target_zone) if(burn_damage > 15 && H.can_feel_pain()) - H.emote("scream") + H.emote(/decl/emote/audible/scream) var/obj/item/organ/internal/heart/doki = locate() in affecting.internal_organs if(istype(doki) && doki.pulse && !doki.open && prob(10)) to_chat(doki, SPAN_DANGER("Your [doki] has stopped!")) @@ -440,7 +440,7 @@ M.failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath. M.reload_fullscreen() - M.emote("gasp") + M.emote(/decl/emote/audible/gasp) SET_STATUS_MAX(M, STAT_WEAK, rand(10,25)) apply_brain_damage(M, deadtime) diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm index 126e71c9743..a0959c87edc 100644 --- a/code/modules/emotes/definitions/_mob.dm +++ b/code/modules/emotes/definitions/_mob.dm @@ -1,6 +1,3 @@ -/mob - var/list/usable_emotes - /mob/proc/get_default_emotes() return diff --git a/code/modules/emotes/definitions/audible.dm b/code/modules/emotes/definitions/audible.dm index 159b1fc4be7..cd5925460ce 100644 --- a/code/modules/emotes/definitions/audible.dm +++ b/code/modules/emotes/definitions/audible.dm @@ -1,103 +1,103 @@ /decl/emote/audible key = "burp" - emote_message_3p = "USER burps." + emote_message_3p = "$USER$ burps." message_type = AUDIBLE_MESSAGE /decl/emote/audible/Initialize() . = ..() if(!emote_message_radio) // Snips the 'USER' from 3p emote messages for radio. - emote_message_radio = copytext(emote_message_3p, 6) + emote_message_radio = copytext(emote_message_3p, 8) /decl/emote/audible/deathgasp_alien key = "adeathgasp" - emote_message_3p = "USER lets out a waning guttural screech, green blood bubbling from its maw." + emote_message_3p = "$USER$ lets out a waning guttural screech, green blood bubbling from its maw." /decl/emote/audible/whimper key = "whimper" - emote_message_3p = "USER whimpers." + emote_message_3p = "$USER$ whimpers." /decl/emote/audible/gasp key = "gasp" - emote_message_3p = "USER gasps." + emote_message_3p = "$USER$ gasps." conscious = 0 /decl/emote/audible/scretch key = "scretch" - emote_message_3p = "USER scretches." + emote_message_3p = "$USER$ scretches." /decl/emote/audible/choke key = "choke" - emote_message_3p = "USER chokes." + emote_message_3p = "$USER$ chokes." conscious = 0 /decl/emote/audible/gnarl key = "gnarl" - emote_message_3p = "USER gnarls and shows its teeth.." + emote_message_3p = "$USER$ gnarls and shows its teeth.." /decl/emote/audible/multichirp key = "mchirp" - emote_message_3p = "USER chirps a chorus of notes!" + emote_message_3p = "$USER$ chirps a chorus of notes!" emote_sound = 'sound/misc/multichirp.ogg' /decl/emote/audible/alarm key = "alarm" emote_message_1p = "You sound an alarm." - emote_message_3p = "USER sounds an alarm." + emote_message_3p = "$USER$ sounds an alarm." /decl/emote/audible/alert key = "alert" emote_message_1p = "You let out a distressed noise." - emote_message_3p = "USER lets out a distressed noise." + emote_message_3p = "$USER$ lets out a distressed noise." /decl/emote/audible/notice key = "notice" emote_message_1p = "You play a loud tone." - emote_message_3p = "USER plays a loud tone." + emote_message_3p = "$USER$ plays a loud tone." /decl/emote/audible/whistle key = "whistle" emote_message_1p = "You whistle." - emote_message_3p = "USER whistles." + emote_message_3p = "$USER$ whistles." /decl/emote/audible/boop key = "boop" emote_message_1p = "You boop." - emote_message_3p = "USER boops." + emote_message_3p = "$USER$ boops." /decl/emote/audible/sneeze key = "sneeze" - emote_message_3p = "USER sneezes." + emote_message_3p = "$USER$ sneezes." /decl/emote/audible/sniff key = "sniff" - emote_message_3p = "USER sniffs." + emote_message_3p = "$USER$ sniffs." /decl/emote/audible/snore key = "snore" - emote_message_3p = "USER snores." + emote_message_3p = "$USER$ snores." conscious = 0 /decl/emote/audible/whimper key = "whimper" - emote_message_3p = "USER whimpers." + emote_message_3p = "$USER$ whimpers." /decl/emote/audible/yawn key = "yawn" - emote_message_3p = "USER yawns." + emote_message_3p = "$USER$ yawns." /decl/emote/audible/clap key = "clap" - emote_message_3p = "USER claps." + emote_message_3p = "$USER$ claps." /decl/emote/audible/chuckle key = "chuckle" - emote_message_3p = "USER chuckles." + emote_message_3p = "$USER$ chuckles." /decl/emote/audible/cough key = "cough" -/decl/emote/audible/cough/mob_can_use(var/mob/living/user) +/decl/emote/audible/cough/mob_can_use(mob/living/user, assume_available = FALSE) . = ..() if(.) var/obj/item/organ/internal/lungs/lung = user.get_organ(BP_LUNGS) @@ -111,93 +111,93 @@ /decl/emote/audible/cry key = "cry" - emote_message_3p = "USER cries." + emote_message_3p = "$USER$ cries." /decl/emote/audible/sigh key = "sigh" - emote_message_3p = "USER sighs." + emote_message_3p = "$USER$ sighs." /decl/emote/audible/laugh key = "laugh" - emote_message_3p_target = "USER laughs at TARGET." - emote_message_3p = "USER laughs." + emote_message_3p_target = "$USER$ laughs at $TARGET$." + emote_message_3p = "$USER$ laughs." /decl/emote/audible/mumble key = "mumble" - emote_message_3p = "USER mumbles!" + emote_message_3p = "$USER$ mumbles!" /decl/emote/audible/grumble key = "grumble" - emote_message_3p = "USER grumbles!" + emote_message_3p = "$USER$ grumbles!" /decl/emote/audible/groan key = "groan" - emote_message_3p = "USER groans!" + emote_message_3p = "$USER$ groans!" conscious = 0 /decl/emote/audible/moan key = "moan" - emote_message_3p = "USER moans!" + emote_message_3p = "$USER$ moans!" conscious = 0 /decl/emote/audible/giggle key = "giggle" - emote_message_3p = "USER giggles." + emote_message_3p = "$USER$ giggles." /decl/emote/audible/scream key = "scream" - emote_message_3p = "USER screams!" + emote_message_3p = "$USER$ screams!" /decl/emote/audible/grunt key = "grunt" - emote_message_3p = "USER grunts." + emote_message_3p = "$USER$ grunts." /decl/emote/audible/slap key = "slap" - emote_message_1p_target = "You slap TARGET across the face!" + emote_message_1p_target = "You slap $TARGET$ across the face!" emote_message_1p = "You slap yourself across the face!" - emote_message_3p_target = "USER slaps TARGET across the face!" - emote_message_3p = "USER slaps USER_SELF across the face!" + emote_message_3p_target = "$USER$ slaps $TARGET$ across the face!" + emote_message_3p = "$USER$ slaps $USER_SELF$ across the face!" emote_sound = 'sound/effects/snap.ogg' check_restraints = TRUE check_range = 1 /decl/emote/audible/bug_hiss key = "bughiss" - emote_message_3p_target = "USER hisses at TARGET." - emote_message_3p = "USER hisses." + emote_message_3p_target = "$USER$ hisses at $TARGET$." + emote_message_3p = "$USER$ hisses." emote_sound = 'sound/voice/BugHiss.ogg' /decl/emote/audible/bug_buzz key = "bugbuzz" - emote_message_3p = "USER buzzes its wings." + emote_message_3p = "$USER$ buzzes its wings." emote_sound = 'sound/voice/BugBuzz.ogg' /decl/emote/audible/bug_chitter key = "bugchitter" - emote_message_3p = "USER chitters." + emote_message_3p = "$USER$ chitters." emote_sound = 'sound/voice/Bug.ogg' /decl/emote/audible/roar key = "roar" - emote_message_3p = "USER roars!" + emote_message_3p = "$USER$ roars!" /decl/emote/audible/bellow key = "bellow" - emote_message_3p = "USER bellows!" + emote_message_3p = "$USER$ bellows!" /decl/emote/audible/howl key = "howl" - emote_message_3p = "USER howls!" + emote_message_3p = "$USER$ howls!" /decl/emote/audible/wheeze key = "wheeze" - emote_message_3p = "USER wheezes." + emote_message_3p = "$USER$ wheezes." /decl/emote/audible/hiss key = "hiss_" - emote_message_3p_target = "USER hisses softly at TARGET." - emote_message_3p = "USER hisses softly." + emote_message_3p_target = "$USER$ hisses softly at $TARGET$." + emote_message_3p = "$USER$ hisses softly." /decl/emote/audible/deathgasp key = "deathgasp" @@ -205,4 +205,4 @@ /decl/emote/audible/deathgasp/get_emote_message_3p(mob/living/user) var/decl/species/my_species = user.get_species() if(my_species) - return "USER [my_species.get_death_message()]" + return "$USER$ [my_species.get_species_death_message()]" diff --git a/code/modules/emotes/definitions/exertion.dm b/code/modules/emotes/definitions/exertion.dm index 25e147d7303..a0aeb5a52e9 100644 --- a/code/modules/emotes/definitions/exertion.dm +++ b/code/modules/emotes/definitions/exertion.dm @@ -1,10 +1,13 @@ +/decl/emote/exertion + abstract_type = /decl/emote/exertion + /decl/emote/exertion/biological key = "esweat" emote_range = 4 emote_message_1p = "You are sweating heavily." - emote_message_3p = "USER is sweating heavily." + emote_message_3p = "$USER$ sweats heavily." -/decl/emote/exertion/biological/mob_can_use(mob/living/user) +/decl/emote/exertion/biological/mob_can_use(mob/living/user, assume_available = FALSE) if(istype(user) && !user.isSynthetic()) return ..() return FALSE @@ -12,24 +15,24 @@ /decl/emote/exertion/biological/breath key = "ebreath" emote_message_1p = "You feel out of breath." - emote_message_3p = "USER looks out of breath." + emote_message_3p = "$USER$ looks out of breath." /decl/emote/exertion/biological/pant key = "epant" emote_range = 3 message_type = AUDIBLE_MESSAGE emote_message_1p = "You pant to catch your breath." - emote_message_3p = "USER pants for air." - emote_message_impaired = "You can see USER breathing heavily." + emote_message_3p = "$USER$ pants for air." + emote_message_impaired = "You can see $USER$ breathing heavily." /decl/emote/exertion/synthetic key = "ewhine" emote_range = 3 message_type = AUDIBLE_MESSAGE emote_message_1p = "You overstress your actuators." - emote_message_3p = "USER's actuators whine with strain." + emote_message_3p = "$USER$'s actuators whine with strain." -/decl/emote/exertion/synthetic/mob_can_use(mob/living/user) +/decl/emote/exertion/synthetic/mob_can_use(mob/living/user, assume_available = FALSE) if(istype(user) && user.isSynthetic()) return ..() return FALSE @@ -37,4 +40,4 @@ /decl/emote/exertion/synthetic/creak key = "ecreak" emote_message_1p = "Your chassis stress indicators spike." - emote_message_3p = "USER's joints creak with stress." + emote_message_3p = "$USER$'s joints creak with stress." diff --git a/code/modules/emotes/definitions/synthetics.dm b/code/modules/emotes/definitions/synthetics.dm index 0048fe5d36d..019a70d2905 100644 --- a/code/modules/emotes/definitions/synthetics.dm +++ b/code/modules/emotes/definitions/synthetics.dm @@ -1,38 +1,38 @@ /decl/emote/audible/synth key = "beep" - emote_message_3p = "USER beeps." + emote_message_3p = "$USER$ beeps." emote_sound = 'sound/machines/twobeep.ogg' -/decl/emote/audible/synth/mob_can_use(var/mob/living/user) +/decl/emote/audible/synth/mob_can_use(mob/living/user, assume_available = FALSE) return ..() && user.isSynthetic() /decl/emote/audible/synth/ping key = "ping" - emote_message_3p = "USER pings." + emote_message_3p = "$USER$ pings." emote_sound = 'sound/machines/ping.ogg' /decl/emote/audible/synth/buzz key = "buzz" - emote_message_3p = "USER buzzes." + emote_message_3p = "$USER$ buzzes." emote_sound = 'sound/machines/buzz-sigh.ogg' /decl/emote/audible/synth/confirm key = "confirm" - emote_message_3p = "USER emits an affirmative blip." + emote_message_3p = "$USER$ emits an affirmative blip." emote_sound = 'sound/machines/synth_yes.ogg' /decl/emote/audible/synth/deny key = "deny" - emote_message_3p = "USER emits a negative blip." + emote_message_3p = "$USER$ emits a negative blip." emote_sound = 'sound/machines/synth_no.ogg' /decl/emote/audible/synth/security key = "law" - emote_message_3p = "USER shows USER_HIS legal authorization barcode." - emote_message_3p_target = "USER shows TARGET USER_THEIR legal authorization barcode." + emote_message_3p = "$USER$ shows $USER_THEIR$ legal authorization barcode." + emote_message_3p_target = "$USER$ shows $TARGET$ $USER_THEIR$ legal authorization barcode." emote_sound = 'sound/voice/biamthelaw.ogg' -/decl/emote/audible/synth/security/mob_can_use(mob/living/user) +/decl/emote/audible/synth/security/mob_can_use(mob/living/user, assume_available = FALSE) var/mob/living/silicon/robot/robot_user = user if(!istype(robot_user)) return FALSE @@ -40,5 +40,5 @@ /decl/emote/audible/synth/security/halt key = "halt" - emote_message_3p = "USER's speakers skreech, \"Halt! Security!\"." + emote_message_3p = "$USER$'s speakers skreech, \"Halt! Security!\"." emote_sound = 'sound/voice/halt.ogg' diff --git a/code/modules/emotes/definitions/tail.dm b/code/modules/emotes/definitions/tail.dm index 19090e9175b..de38cf69141 100644 --- a/code/modules/emotes/definitions/tail.dm +++ b/code/modules/emotes/definitions/tail.dm @@ -2,7 +2,7 @@ /decl/emote/visible/tail abstract_type = /decl/emote/visible/tail -/decl/emote/visible/tail/mob_can_use(mob/living/user) +/decl/emote/visible/tail/mob_can_use(mob/living/user, assume_available = FALSE) return ishuman(user) && ..() /decl/emote/visible/tail/swish diff --git a/code/modules/emotes/definitions/visible.dm b/code/modules/emotes/definitions/visible.dm index 2a70ef97c9c..81c7433ae1f 100644 --- a/code/modules/emotes/definitions/visible.dm +++ b/code/modules/emotes/definitions/visible.dm @@ -1,57 +1,57 @@ /decl/emote/visible key = "tail" - emote_message_3p = "USER waves USER_THEIR tail." + emote_message_3p = "$USER$ waves $USER_THEIR$ tail." message_type = VISIBLE_MESSAGE /decl/emote/visible/scratch key = "scratch" check_restraints = TRUE - emote_message_3p = "USER scratches." + emote_message_3p = "$USER$ scratches." /decl/emote/visible/drool key = "drool" - emote_message_3p = "USER drools." + emote_message_3p = "$USER$ drools." conscious = 0 /decl/emote/visible/nod key = "nod" - emote_message_3p_target = "USER nods USER_THEIR head at TARGET." - emote_message_3p = "USER nods USER_THEIR head." + emote_message_3p_target = "$USER$ nods $USER_THEIR$ head at $TARGET$." + emote_message_3p = "$USER$ nods $USER_THEIR$ head." -/decl/emote/visible/tail/sway +/decl/emote/visible/sway key = "sways" - emote_message_3p = "USER sways around dizzily." + emote_message_3p = "$USER$ sways around dizzily." /decl/emote/visible/sulk key = "sulk" - emote_message_3p = "USER sulks down sadly." + emote_message_3p = "$USER$ sulks down sadly." /decl/emote/visible/dance key = "dance" check_restraints = TRUE - emote_message_3p = "USER dances around happily." + emote_message_3p = "$USER$ dances around happily." /decl/emote/visible/roll key = "roll" check_restraints = TRUE - emote_message_3p = "USER rolls." + emote_message_3p = "$USER$ rolls." /decl/emote/visible/shake key = "shake" - emote_message_3p = "USER shakes USER_THEIR head." + emote_message_3p = "$USER$ shakes $USER_THEIR$ head." /decl/emote/visible/jump key = "jump" - emote_message_3p = "USER jumps!" + emote_message_3p = "$USER$ jumps!" /decl/emote/visible/shiver key = "shiver" - emote_message_3p = "USER shivers." + emote_message_3p = "$USER$ shivers." conscious = 0 /decl/emote/visible/collapse key = "collapse" - emote_message_3p = "USER collapses!" + emote_message_3p = "$USER$ collapses!" /decl/emote/visible/collapse/do_extra(var/mob/user) if(istype(user)) @@ -59,59 +59,59 @@ /decl/emote/visible/flash key = "flash" - emote_message_3p = "The lights on USER flash quickly." + emote_message_3p = "The lights on $USER$ flash quickly." /decl/emote/visible/blink key = "blink" - emote_message_3p = "USER blinks." + emote_message_3p = "$USER$ blinks." /decl/emote/visible/airguitar key = "airguitar" check_restraints = TRUE - emote_message_3p = "USER is strumming the air and headbanging like a safari chimp." + emote_message_3p = "$USER$ is strumming the air and headbanging like a safari chimp." /decl/emote/visible/blink_r key = "blink_r" - emote_message_3p = "USER blinks rapidly." + emote_message_3p = "$USER$ blinks rapidly." /decl/emote/visible/bow key = "bow" - emote_message_3p_target = "USER bows to TARGET." - emote_message_3p = "USER bows." + emote_message_3p_target = "$USER$ bows to $TARGET$." + emote_message_3p = "$USER$ bows." /decl/emote/visible/salute key = "salute" - emote_message_3p_target = "USER salutes TARGET." - emote_message_3p = "USER salutes." + emote_message_3p_target = "$USER$ salutes $TARGET$." + emote_message_3p = "$USER$ salutes." check_restraints = TRUE /decl/emote/visible/flap key = "flap" check_restraints = TRUE - emote_message_3p = "USER flaps USER_THEIR wings." + emote_message_3p = "$USER$ flaps $USER_THEIR$ wings." /decl/emote/visible/aflap key = "aflap" check_restraints = TRUE - emote_message_3p = "USER flaps USER_THEIR wings ANGRILY!" + emote_message_3p = "$USER$ flaps $USER_THEIR$ wings ANGRILY!" /decl/emote/visible/eyebrow key = "eyebrow" - emote_message_3p = "USER raises an eyebrow." + emote_message_3p = "$USER$ raises an eyebrow." /decl/emote/visible/twitch key = "twitch" - emote_message_3p = "USER twitches." + emote_message_3p = "$USER$ twitches." conscious = 0 /decl/emote/visible/twitch_v key = "twitch_v" - emote_message_3p = "USER twitches violently." + emote_message_3p = "$USER$ twitches violently." conscious = 0 /decl/emote/visible/faint key = "faint" - emote_message_3p = "USER faints." + emote_message_3p = "$USER$ faints." /decl/emote/visible/faint/do_extra(var/mob/user) if(istype(user) && !HAS_STATUS(user, STAT_ASLEEP)) @@ -119,221 +119,221 @@ /decl/emote/visible/frown key = "frown" - emote_message_3p = "USER frowns." + emote_message_3p = "$USER$ frowns." /decl/emote/visible/blush key = "blush" - emote_message_3p = "USER blushes." + emote_message_3p = "$USER$ blushes." /decl/emote/visible/wave key = "wave" - emote_message_3p_target = "USER waves at TARGET." - emote_message_3p = "USER waves." + emote_message_3p_target = "$USER$ waves at $TARGET$." + emote_message_3p = "$USER$ waves." check_restraints = TRUE /decl/emote/visible/glare key = "glare" - emote_message_3p_target = "USER glares at TARGET." - emote_message_3p = "USER glares." + emote_message_3p_target = "$USER$ glares at $TARGET$." + emote_message_3p = "$USER$ glares." /decl/emote/visible/stare key = "stare" - emote_message_3p_target = "USER stares at TARGET." - emote_message_3p = "USER stares." + emote_message_3p_target = "$USER$ stares at $TARGET$." + emote_message_3p = "$USER$ stares." /decl/emote/visible/look key = "look" - emote_message_3p_target = "USER looks at TARGET." - emote_message_3p = "USER looks." + emote_message_3p_target = "$USER$ looks at $TARGET$." + emote_message_3p = "$USER$ looks." /decl/emote/visible/point key = "point" check_restraints = TRUE - emote_message_3p_target = "USER points to TARGET." - emote_message_3p = "USER points." + emote_message_3p_target = "$USER$ points to $TARGET$." + emote_message_3p = "$USER$ points." /decl/emote/visible/raise key = "raise" check_restraints = TRUE - emote_message_3p = "USER raises a hand." + emote_message_3p = "$USER$ raises a hand." /decl/emote/visible/grin key = "grin" - emote_message_3p_target = "USER grins at TARGET." - emote_message_3p = "USER grins." + emote_message_3p_target = "$USER$ grins at $TARGET$." + emote_message_3p = "$USER$ grins." /decl/emote/visible/shrug key = "shrug" - emote_message_3p = "USER shrugs." + emote_message_3p = "$USER$ shrugs." /decl/emote/visible/smile key = "smile" - emote_message_3p_target = "USER smiles at TARGET." - emote_message_3p = "USER smiles." + emote_message_3p_target = "$USER$ smiles at $TARGET$." + emote_message_3p = "$USER$ smiles." /decl/emote/visible/pale key = "pale" - emote_message_3p = "USER goes pale for a second." + emote_message_3p = "$USER$ goes pale for a second." /decl/emote/visible/tremble key = "tremble" - emote_message_3p = "USER trembles in fear!" + emote_message_3p = "$USER$ trembles in fear!" /decl/emote/visible/wink key = "wink" - emote_message_3p_target = "USER winks at TARGET." - emote_message_3p = "USER winks." + emote_message_3p_target = "$USER$ winks at $TARGET$." + emote_message_3p = "$USER$ winks." /decl/emote/visible/hug key = "hug" check_restraints = TRUE - emote_message_3p_target = "USER hugs TARGET." - emote_message_3p = "USER hugs USER_SELF." + emote_message_3p_target = "$USER$ hugs $TARGET$." + emote_message_3p = "$USER$ hugs $USER_SELF$." check_range = 1 /decl/emote/visible/dap key = "dap" check_restraints = TRUE - emote_message_3p_target = "USER gives daps to TARGET." - emote_message_3p = "USER sadly can't find anybody to give daps to, and daps USER_SELF." + emote_message_3p_target = "$USER$ gives daps to $TARGET$." + emote_message_3p = "$USER$ sadly can't find anybody to give daps to, and daps $USER_SELF$." /decl/emote/visible/bounce key = "bounce" - emote_message_3p = "USER bounces in place." + emote_message_3p = "$USER$ bounces in place." /decl/emote/visible/jiggle key = "jiggle" - emote_message_3p = "USER jiggles!" + emote_message_3p = "$USER$ jiggles!" /decl/emote/visible/lightup key = "light" - emote_message_3p = "USER lights up for a bit, then stops." + emote_message_3p = "$USER$ lights up for a bit, then stops." /decl/emote/visible/vibrate key = "vibrate" - emote_message_3p = "USER vibrates!" + emote_message_3p = "$USER$ vibrates!" /decl/emote/visible/deathgasp_robot key = "rdeathgasp" - emote_message_3p = "USER shudders violently for a moment, then becomes motionless, USER_THEIR eyes slowly darkening." + emote_message_3p = "$USER$ shudders violently for a moment, then becomes motionless, $USER_THEIR$ eyes slowly darkening." /decl/emote/visible/handshake key = "handshake" check_restraints = TRUE - emote_message_3p_target = "USER shakes hands with TARGET." - emote_message_3p = "USER shakes hands with USER_SELF." + emote_message_3p_target = "$USER$ shakes hands with $TARGET$." + emote_message_3p = "$USER$ shakes hands with $USER_SELF$." check_range = 1 /decl/emote/visible/handshake/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params) if(target && !user.Adjacent(target)) - return "USER holds out USER_THEIR hand out to TARGET." + return "$USER$ holds out $USER_THEIR$ hand out to $TARGET$." return ..() /decl/emote/visible/signal key = "signal" - emote_message_3p_target = "USER signals at TARGET." - emote_message_3p = "USER signals." + emote_message_3p_target = "$USER$ signals at $TARGET$." + emote_message_3p = "$USER$ signals." check_restraints = TRUE /decl/emote/visible/signal/get_emote_message_3p(var/mob/living/user, var/atom/target, var/extra_params) if(istype(user) && user.get_empty_hand_slot()) var/t1 = round(text2num(extra_params)) if(isnum(t1) && t1 <= 5) - return "USER raises [t1] finger\s." + return "$USER$ raises [t1] finger\s." return .. () /decl/emote/visible/afold key = "afold" check_restraints = TRUE - emote_message_3p = "USER folds USER_THEIR arms." + emote_message_3p = "$USER$ folds $USER_THEIR$ arms." /decl/emote/visible/alook key = "alook" - emote_message_3p = "USER looks away." + emote_message_3p = "$USER$ looks away." /decl/emote/visible/hbow key = "hbow" - emote_message_3p = "USER bows USER_THEIR head." + emote_message_3p = "$USER$ bows $USER_THEIR$ head." /decl/emote/visible/hip key = "hip" check_restraints = TRUE - emote_message_3p = "USER puts USER_THEIR hands on USER_THEIR hips." + emote_message_3p = "$USER$ puts $USER_THEIR$ hands on $USER_THEIR$ hips." /decl/emote/visible/holdup key = "holdup" check_restraints = TRUE - emote_message_3p = "USER holds up USER_THEIR palms." + emote_message_3p = "$USER$ holds up $USER_THEIR$ palms." /decl/emote/visible/hshrug key = "hshrug" - emote_message_3p = "USER gives a half shrug." + emote_message_3p = "$USER$ gives a half shrug." /decl/emote/visible/crub key = "crub" check_restraints = TRUE - emote_message_3p = "USER rubs USER_THEIR chin." + emote_message_3p = "$USER$ rubs $USER_THEIR$ chin." /decl/emote/visible/eroll key = "eroll" - emote_message_3p = "USER rolls USER_THEIR eyes." - emote_message_3p_target = "USER rolls USER_THEIR eyes at TARGET." + emote_message_3p = "$USER$ rolls $USER_THEIR$ eyes." + emote_message_3p_target = "$USER$ rolls $USER_THEIR$ eyes at $TARGET$." /decl/emote/visible/erub key = "erub" check_restraints = TRUE - emote_message_3p = "USER rubs USER_THEIR eyes." + emote_message_3p = "$USER$ rubs $USER_THEIR$ eyes." /decl/emote/visible/fslap key = "fslap" check_restraints = TRUE - emote_message_3p = "USER slaps USER_THEIR forehead." + emote_message_3p = "$USER$ slaps $USER_THEIR$ forehead." /decl/emote/visible/ftap key = "ftap" - emote_message_3p = "USER taps USER_THEIR foot." + emote_message_3p = "$USER$ taps $USER_THEIR$ foot." /decl/emote/visible/hrub key = "hrub" check_restraints = TRUE - emote_message_3p = "USER rubs USER_THEIR hands together." + emote_message_3p = "$USER$ rubs $USER_THEIR$ hands together." /decl/emote/visible/hspread key = "hspread" check_restraints = TRUE - emote_message_3p = "USER spreads USER_THEIR hands." + emote_message_3p = "$USER$ spreads $USER_THEIR$ hands." /decl/emote/visible/pocket key = "pocket" check_restraints = TRUE - emote_message_3p = "USER shoves USER_THEIR hands in USER_THEIR pockets." + emote_message_3p = "$USER$ shoves $USER_THEIR$ hands in $USER_THEIR$ pockets." /decl/emote/visible/rsalute key = "rsalute" check_restraints = TRUE - emote_message_3p = "USER returns the salute." + emote_message_3p = "$USER$ returns the salute." /decl/emote/visible/rshoulder key = "rshoulder" - emote_message_3p = "USER rolls USER_THEIR shoulders." + emote_message_3p = "$USER$ rolls $USER_THEIR$ shoulders." /decl/emote/visible/squint key = "squint" - emote_message_3p = "USER squints." - emote_message_3p_target = "USER squints at TARGET." + emote_message_3p = "$USER$ squints." + emote_message_3p_target = "$USER$ squints at $TARGET$." /decl/emote/visible/tfist key = "tfist" - emote_message_3p = "USER tightens USER_THEIR hands into fists." + emote_message_3p = "$USER$ tightens $USER_THEIR$ hands into fists." /decl/emote/visible/tilt key = "tilt" - emote_message_3p = "USER tilts USER_THEIR head." + emote_message_3p = "$USER$ tilts $USER_THEIR$ head." /decl/emote/visible/spin key = "spin" check_restraints = TRUE - emote_message_3p = "USER spins!" + emote_message_3p = "$USER$ spins!" emote_delay = 2 SECONDS /decl/emote/visible/spin/do_extra(mob/user) @@ -343,7 +343,7 @@ /decl/emote/visible/sidestep key = "sidestep" check_restraints = TRUE - emote_message_3p = "USER steps rhythmically and moves side to side." + emote_message_3p = "$USER$ steps rhythmically and moves side to side." emote_delay = 1.2 SECONDS /decl/emote/visible/sidestep/do_extra(mob/user) @@ -356,7 +356,7 @@ /decl/emote/visible/vomit key = "vomit" -/decl/emote/visible/vomit/mob_can_use(mob/living/user) +/decl/emote/visible/vomit/mob_can_use(mob/living/user, assume_available = FALSE) . = ..() && user.check_has_mouth() && !user.isSynthetic() /decl/emote/visible/vomit/do_emote(var/atom/user, var/extra_params) diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm index e2c97dcfd11..9bf4e8fad03 100644 --- a/code/modules/emotes/emote_define.dm +++ b/code/modules/emotes/emote_define.dm @@ -1,15 +1,15 @@ // Note about emote messages: -// - USER / TARGET will be replaced with the relevant name, in bold. -// - USER_THEM / TARGET_THEM / USER_THEIR / TARGET_THEIR will be replaced with a +// - $USER$ / $TARGET$ will be replaced with the relevant name, in bold. +// - $USER_THEM$ / $TARGET_THEM$ / $USER_THEIR$ / $TARGET_THEIR$ will be replaced with a // gender-appropriate version of the same. // - Impaired messages do not do any substitutions. -var/global/list/emotes_by_key = list() +var/global/list/_emotes_by_key /proc/get_emote_by_key(var/key) - if(!global.emotes_by_key) - decls_repository.get_decls_of_type(/decl/emote) // emotes_by_key will be updated in emote Initialize() - return global.emotes_by_key[key] + if(!global._emotes_by_key) + decls_repository.get_decls_of_type(/decl/emote) // _emotes_by_key will be updated in emote Initialize() + return global._emotes_by_key[key] /decl/emote /// Command to use emote ie. '*[key]' @@ -69,7 +69,7 @@ var/global/list/emotes_by_key = list() /decl/emote/Initialize() . = ..() if(key) - global.emotes_by_key[key] = src + LAZYSET(global._emotes_by_key, key, src) /decl/emote/validate() . = ..() @@ -81,6 +81,38 @@ var/global/list/emotes_by_key = list() if(key == emote.key) . += "non-unique key, overlaps with [emote.type]" +// validate() is never called outside of unit testing, but +// this feels foul to have in non-unit test main code. +#ifdef UNIT_TEST + var/static/obj/dummy_emote_target = new + dummy_emote_target.name = "\proper Barry's hat" + var/static/mob/dummy_emote_user = new + dummy_emote_user.name = "\proper Barry" + dummy_emote_user.set_gender(MALE) + // This should catch misspelled tokens, TARGET_HIM etc as well as leftover TARGET and USER. + var/static/list/tokens = list("$", "TARGET", "USER") + var/all_strings = list( + "emote_message_1p" = emote_message_1p, + "emote_message_3p" = emote_message_3p, + "emote_message_synthetic_1p" = emote_message_synthetic_1p, + "emote_message_synthetic_3p" = emote_message_synthetic_3p, + "emote_message_1p_target" = emote_message_1p_target, + "emote_message_3p_target" = emote_message_3p_target, + "emote_message_synthetic_1p_target" = emote_message_synthetic_1p_target, + "emote_message_synthetic_3p_target" = emote_message_synthetic_3p_target + ) + for(var/string_key in all_strings) + var/emote_string = all_strings[string_key] + if(!length(emote_string)) + continue + emote_string = replace_target_tokens(emote_string, dummy_emote_target) + emote_string = replace_user_tokens(emote_string, dummy_emote_user) + emote_string = uppertext(emote_string) + for(var/token in tokens) + if(findtext(emote_string, token)) + . += "malformed emote token [token] in [string_key]" +#endif + /decl/emote/proc/get_emote_message_1p(var/atom/user, var/atom/target, var/extra_params) if(target) if(emote_message_synthetic_1p_target && check_synthetic(user)) @@ -115,7 +147,7 @@ var/global/list/emotes_by_key = list() if(ismob(user) && check_restraints) var/mob/M = user if(M.restrained()) - to_chat(user, "You are restrained and cannot do that.") + to_chat(user, SPAN_WARNING("You are restrained and cannot do that.")) return var/atom/target @@ -152,7 +184,7 @@ var/global/list/emotes_by_key = list() if(use_3p) if(target) use_3p = replace_target_tokens(use_3p, target) - use_3p = "\The [user] [replace_user_tokens(use_3p, user)]" + use_3p = "[replace_user_tokens(use_3p, user)]" var/use_radio = get_radio_message(user) if(use_radio) @@ -184,19 +216,19 @@ var/global/list/emotes_by_key = list() . = msg if(istype(target)) var/decl/pronouns/target_gender = target.get_pronouns() - . = replacetext(., "TARGET_THEM", target_gender.him) - . = replacetext(., "TARGET_THEIR", target_gender.his) - . = replacetext(., "TARGET_SELF", target_gender.self) - . = replacetext(., "TARGET", "\the [target]") + . = replacetext(., "$TARGET_THEM$", target_gender.him) + . = replacetext(., "$TARGET_THEIR$", target_gender.his) + . = replacetext(., "$TARGET_SELF$", target_gender.self) + . = replacetext(., "$TARGET$", "\the [target]") /decl/emote/proc/replace_user_tokens(var/msg, var/atom/user) . = msg if(istype(user)) var/decl/pronouns/user_gender = user.get_pronouns() - . = replacetext(., "USER_THEM", user_gender.him) - . = replacetext(., "USER_THEIR", user_gender.his) - . = replacetext(., "USER_SELF", user_gender.self) - . = replacetext(., "USER", "\the [user]") + . = replacetext(., "$USER_THEM$", user_gender.him) + . = replacetext(., "$USER_THEIR$", user_gender.his) + . = replacetext(., "$USER_SELF$", user_gender.self) + . = replacetext(., "$USER$", "\the [user]") /decl/emote/proc/get_radio_message(var/atom/user) if(emote_message_radio_synthetic && check_synthetic(user)) @@ -216,8 +248,8 @@ var/global/list/emotes_by_key = list() sound_to_play = pick(sound_to_play) return playsound(user.loc, sound_to_play, 50, 0) -/decl/emote/proc/mob_can_use(var/mob/user) - return istype(user) && user.stat != DEAD && (type in user.get_default_emotes()) +/decl/emote/proc/mob_can_use(mob/living/user, assume_available = FALSE) + return istype(user) && user.stat != DEAD && (assume_available || (type in user.get_default_emotes())) /decl/emote/proc/can_target() return (emote_message_1p_target || emote_message_3p_target) diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index ef51ae1d929..5778a4ce922 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -3,10 +3,10 @@ var/next_emote_refresh var/last_emote_summary -/mob/proc/can_emote(var/emote_type) +/mob/proc/can_emote(emote_type, show_message) . = check_mob_can_emote(emote_type) - if(!.) - to_chat(src, SPAN_WARNING("You cannot currently [emote_type == AUDIBLE_MESSAGE ? "audibly" : "visually"] emote!")) + if(!. && show_message) + to_chat(show_message, SPAN_WARNING("You cannot currently [emote_type == AUDIBLE_MESSAGE ? "audibly" : "visually"] emote!")) /mob/proc/check_mob_can_emote(var/emote_type) SHOULD_CALL_PARENT(TRUE) @@ -25,6 +25,12 @@ if(stat == DEAD && act != "deathgasp") return + var/decl/emote/use_emote + if(ispath(act, /decl/emote)) + use_emote = GET_DECL(act) + m_type = use_emote.message_type + + var/show_message_to if(usr == src) //client-called emote if (client?.prefs?.muted & MUTE_IC) to_chat(src, SPAN_WARNING("You cannot send IC messages (muted).")) @@ -39,16 +45,13 @@ var/list/usable_emotes = list() next_emote_refresh = world.time + EMOTE_REFRESH_SPAM_COOLDOWN for(var/emote in get_default_emotes()) - var/decl/emote/emote_datum = decls_repository.get_decl(emote) - if(emote_datum.mob_can_use(src)) + var/decl/emote/emote_datum = GET_DECL(emote) + if(emote_datum.mob_can_use(src, assume_available = TRUE)) usable_emotes[emote_datum.key] = emote_datum last_emote_summary = english_list(sortTim(usable_emotes, /proc/cmp_text_asc, associative = TRUE)) to_chat(src, "Usable emotes: [last_emote_summary].") return - if(!can_emote(m_type)) - return - if(act == "me") return custom_emote(m_type, message) @@ -64,19 +67,26 @@ m_type = AUDIBLE_MESSAGE return custom_emote(m_type, message) + show_message_to = usr + + if(!can_emote(m_type, show_message_to)) + return + var/splitpoint = findtext(act, " ") if(splitpoint > 0) var/tempstr = act act = copytext(tempstr,1,splitpoint) message = copytext(tempstr,splitpoint+1,0) - var/decl/emote/use_emote = get_emote_by_key(act) + if(!use_emote) + use_emote = get_emote_by_key(act) + if(!istype(use_emote)) - to_chat(src, SPAN_WARNING("Unknown emote '[act]'. Type say *help for a list of usable emotes.")) + to_chat(show_message_to, SPAN_WARNING("Unknown emote '[act]'. Type say *help for a list of usable emotes.")) return if(!use_emote.mob_can_use(src)) - to_chat(src, SPAN_WARNING("You cannot use the emote '[act]'. Type say *help for a list of usable emotes.")) + to_chat(show_message_to, SPAN_WARNING("You cannot use the emote '[act]'. Type say *help for a list of usable emotes.")) return if(m_type != use_emote.message_type && use_emote.conscious && stat != CONSCIOUS) @@ -152,7 +162,7 @@ /mob/proc/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message = null) - if(!can_emote(m_type)) + if(!can_emote(m_type, src)) return var/input @@ -181,8 +191,8 @@ var/obj/machinery/hologram/holopad/T = src.holo if(T && T.masters[src]) //Is the AI using a holopad? src.holopad_emote(message) - else //Emote normally, then. - ..() + return + return ..() /mob/living/captive_brain/emote(var/message) return diff --git a/code/modules/materials/_materials.dm b/code/modules/materials/_materials.dm index b51cdedbc5b..37717a8c092 100644 --- a/code/modules/materials/_materials.dm +++ b/code/modules/materials/_materials.dm @@ -739,7 +739,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(prob(10)) M.SelfMove(pick(global.cardinal)) if(prob(narcosis)) - M.emote(pick("twitch", "drool", "moan")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/visible/drool, /decl/emote/audible/moan)) if(euphoriant) SET_STATUS_MAX(M, STAT_DRUGGY, euphoriant) diff --git a/code/modules/materials/definitions/gasses/material_gas_mundane.dm b/code/modules/materials/definitions/gasses/material_gas_mundane.dm index e00322da326..a904f4fbf1f 100644 --- a/code/modules/materials/definitions/gasses/material_gas_mundane.dm +++ b/code/modules/materials/definitions/gasses/material_gas_mundane.dm @@ -143,7 +143,7 @@ SET_STATUS_MAX(M, STAT_DROWSY, 3) SET_STATUS_MAX(M, STAT_SLUR, 3) if(prob(20)) - M.emote(pick("giggle", "laugh")) + M.emote(pick(/decl/emote/audible/giggle, /decl/emote/audible/laugh)) M.add_chemical_effect(CE_PULSE, -1) /decl/material/gas/nitrogen diff --git a/code/modules/mob/hugs.dm b/code/modules/mob/hugs.dm index a884e569db3..191d10734fe 100644 --- a/code/modules/mob/hugs.dm +++ b/code/modules/mob/hugs.dm @@ -20,8 +20,8 @@ var/global/list/_default_hug_messages = list( hug_3p = "$USER$ rubs $TARGET$'s back soothingly." hug_1p = "You rub $TARGET$'s back soothingly." else - hug_3p = "$USER$ hugs $TARGET$ to make $TARGET_HIM$ feel better." - hug_1p = "You hug $TARGET$ to make $TARGET_HIM$ feel better." + hug_3p = "$USER$ hugs $TARGET$ to make $TARGET_THEM$ feel better." + hug_1p = "You hug $TARGET$ to make $TARGET_THEM$ feel better." var/list/use_hug_messages = target.get_hug_zone_messages(get_target_zone()) if(length(use_hug_messages) >= 2) @@ -33,16 +33,16 @@ var/global/list/_default_hug_messages = list( var/decl/pronouns/target_pronouns = target.get_pronouns() hug_3p = replacetext(hug_3p, "$USER$", "\the [src]") - hug_3p = replacetext(hug_3p, "$USER_HIM$", my_pronouns.him) - hug_3p = replacetext(hug_3p, "$USER_HIS$", my_pronouns.his) + hug_3p = replacetext(hug_3p, "$USER_THEM$", my_pronouns.him) + hug_3p = replacetext(hug_3p, "$USER_THEIR$", my_pronouns.his) hug_3p = replacetext(hug_3p, "$TARGET$", "\the [target]") - hug_3p = replacetext(hug_3p, "$TARGET_HIM$", target_pronouns.him) - hug_3p = replacetext(hug_3p, "$TARGET_HIS$", target_pronouns.his) + hug_3p = replacetext(hug_3p, "$TARGET_THEM$", target_pronouns.him) + hug_3p = replacetext(hug_3p, "$TARGET_THEIR$", target_pronouns.his) hug_1p = replacetext(hug_1p, "$TARGET$", "\the [target]") - hug_1p = replacetext(hug_1p, "$TARGET_HIM$", target_pronouns.him) - hug_1p = replacetext(hug_1p, "$TARGET_HIS$", target_pronouns.his) + hug_1p = replacetext(hug_1p, "$TARGET_THEM$", target_pronouns.him) + hug_1p = replacetext(hug_1p, "$TARGET_THEIR$", target_pronouns.his) visible_message( SPAN_NOTICE(capitalize(hug_3p)), diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index c5f97afdb0f..1d8a01ce9e9 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -59,7 +59,7 @@ var/container = get_container() return istype(container, /obj/item/organ/internal/brain_interface) || istype(container, /obj/item/organ/internal/brain/robotic) -/mob/living/brain/can_emote() +/mob/living/brain/can_emote(emote_type, show_message) return is_in_interface() && ..() /mob/living/brain/can_use_rig() diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index fded1e6255c..0f587e199d7 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -43,7 +43,7 @@ /decl/emote/visible/scratch, /decl/emote/visible/drool, /decl/emote/visible/nod, - /decl/emote/visible/tail/sway, + /decl/emote/visible/sway, /decl/emote/visible/sulk, /decl/emote/visible/twitch, /decl/emote/visible/dance, diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 00af3106c05..72903eb6c75 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -166,7 +166,7 @@ if(stance_damage >= 4 || (stance_damage >= 2 && prob(2)) || (stance_damage >= 3 && prob(8))) if(!(lying || resting)) if(limb_pain) - emote("scream") + emote(/decl/emote/audible/scream) custom_emote(VISIBLE_MESSAGE, "collapses!") SET_STATUS_MAX(src, STAT_WEAK, 3) //can't emote while weakened, apparently. diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 591dcf9df68..d17de99cb4d 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -123,7 +123,7 @@ to_chat(src, "You feel weak.") SET_STATUS_MAX(src, STAT_WEAK, 3) if(!lying) - emote("collapse") + emote(/decl/emote/visible/collapse) if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT)) lose_hair() @@ -136,7 +136,7 @@ if(prob(1)) to_chat(src, "You feel strange!") adjustCloneLoss(5 * RADIATION_SPEED_COEFFICIENT) - emote("gasp") + emote(/decl/emote/audible/gasp) if(radiation > 150) damage = 8 radiation -= 4 * RADIATION_SPEED_COEFFICIENT diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 52e738ef6d4..9e322f87056 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -384,7 +384,7 @@ for(var/obj/item/organ/external/affecting in get_external_organs()) if(!screamed && affecting.can_feel_pain()) screamed = TRUE - emote("scream") + emote(/decl/emote/audible/scream) affecting.status |= ORGAN_DISFIGURED take_organ_damage(0, severity, override_droplimb = DISMEMBER_METHOD_ACID) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 6bf47b4c9a9..7a73535f771 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -160,7 +160,7 @@ speaking = get_any_good_language(set_default=TRUE) if (!speaking) to_chat(src, SPAN_WARNING("You don't know a language and cannot speak.")) - emote("custom", AUDIBLE_MESSAGE, "[pick("grunts", "babbles", "gibbers", "jabbers", "burbles")] aimlessly.") + custom_emote(AUDIBLE_MESSAGE, "[pick("grunts", "babbles", "gibbers", "jabbers", "burbles")] aimlessly.") return if(handle_mob_specific_speech(message, message_mode, verb, speaking)) diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index c06159dffd2..9ec93228346 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -27,7 +27,7 @@ /mob/living/simple_animal/hostile/scarybat/FindTarget() . = ..() if(.) - emote("flutters towards [.]") + custom_emote(VISIBLE_MESSAGE, "flutters towards [.]") /mob/living/simple_animal/hostile/scarybat/Found(var/atom/A)//This is here as a potential override to pick a specific target if available if(istype(A) && A == owner) diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm index 635c5fd9387..48dd4b828ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm @@ -16,12 +16,12 @@ /mob/living/simple_animal/hostile/commanded/bear/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone) . = ..() if(.) - src.emote("roars in rage!") + custom_emote(AUDIBLE_MESSAGE, "roars in rage!") /mob/living/simple_animal/hostile/commanded/bear/default_hurt_interaction(mob/user) . = ..() if(.) - src.emote("roars in rage!") + custom_emote(AUDIBLE_MESSAGE, "roars in rage!") /mob/living/simple_animal/hostile/commanded/bear/listen() if(stance != COMMANDED_MISC) //cant listen if its booty shakin' diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm b/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm index 890e6d09e74..a344406a25b 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm @@ -11,7 +11,7 @@ known_commands = list("stay", "stop", "attack", "follow", "heal", "emergency protocol") gene_damage = -1 response_help_1p = "You wave your hand through $TARGET$." - response_help_3p = "$USER$ waves $USER_HIS$ hand through $TARGET$." + response_help_3p = "$USER$ waves $USER_THEIR$ hand through $TARGET$." response_harm = "agitates" response_disarm = "fans at" ai = /datum/ai/nanomachines diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 4d0dabbeb9b..113c566c040 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -5,7 +5,7 @@ speak_chance = 0 turns_per_move = 5 response_help_1p = "You wave your hand through $TARGET$." - response_help_3p = "$USER$ waves $USER_HIS$ hand through $TARGET$." + response_help_3p = "$USER$ waves $USER_THEIR$ hand through $TARGET$." speed = -1 max_health = 80 gene_damage = -1 diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index e906a025065..d798265b2d7 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -8,7 +8,7 @@ speak_emote = list("hisses") emote_hear = list("wails","screeches") response_help_1p = "You wave your hand through $TARGET$." - response_help_3p = "$USER$ waves $USER_HIS$ hand through $TARGET$." + response_help_3p = "$USER$ waves $USER_THEIR$ hand through $TARGET$." response_disarm = "flails at" response_harm = "punches" natural_weapon = /obj/item/natural_weapon/shade diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 27b465a347a..ebf0af7fe1c 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -34,8 +34,8 @@ var/global/list/special_channel_keys = list( SStyping.set_indicator_state(client, FALSE) if(!filter_block_message(usr, message)) message = sanitize(message) - if(can_emote(VISIBLE_MESSAGE)) - usr.emote("me", usr.emote_type, message) + if(can_emote(VISIBLE_MESSAGE, src)) + usr.custom_emote(usr.emote_type, message) else usr.emote(message) diff --git a/code/modules/organs/ailments/_ailment.dm b/code/modules/organs/ailments/_ailment.dm index 101f4bb8dd8..812fc38c015 100644 --- a/code/modules/organs/ailments/_ailment.dm +++ b/code/modules/organs/ailments/_ailment.dm @@ -23,9 +23,9 @@ // Fluff strings var/initial_ailment_message = "Your $ORGAN$ $ORGAN_DOES$n't feel quite right..." // Shown in New() var/third_person_treatment_message = "$USER$ treats $TARGET$'s ailment with $ITEM$." // Shown when treating other with an item. - var/self_treatment_message = "$USER$ treats $USER_HIS$ ailment with $ITEM$." // Shown when treating self with an item. + var/self_treatment_message = "$USER$ treats $USER_THEIR$ ailment with $ITEM$." // Shown when treating self with an item. var/medication_treatment_message = "Your ailment abates." // Shown when treated by a metabolized reagent or CE_X effect. - var/manual_diagnosis_string /* ex: "$USER_HIS$ $ORGAN$ has something wrong with it" */ // Shown when grab-diagnosed by a doctor. Leave null to be undiagnosable. + var/manual_diagnosis_string /* ex: "$USER_THEIR$ $ORGAN$ has something wrong with it" */ // Shown when grab-diagnosed by a doctor. Leave null to be undiagnosable. var/scanner_diagnosis_string /* ex: "Significant swelling" */ // Shown on the handheld and body scanners. Leave null to be undiagnosable. var/hidden_from_codex = FALSE @@ -84,7 +84,7 @@ if(user) var/decl/pronouns/G = user.get_pronouns() . = replacetext(., "$USER$", "\the [user]") - . = replacetext(., "$USER_HIS$", G.his) + . = replacetext(., "$USER_THEIR$", G.his) if(target) . = replacetext(., "$TARGET$", "\the [target]") if(organ) diff --git a/code/modules/organs/ailments/ailments_medical.dm b/code/modules/organs/ailments/ailments_medical.dm index 69c53e08a54..09cf769982f 100644 --- a/code/modules/organs/ailments/ailments_medical.dm +++ b/code/modules/organs/ailments/ailments_medical.dm @@ -29,7 +29,7 @@ treated_by_reagent_type = /decl/material/liquid/nutriment/honey treated_by_reagent_dosage = 1 medication_treatment_message = "You swallow, finding that your sore throat is rapidly recovering." - manual_diagnosis_string = "$USER_HIS$ throat is red and inflamed." + manual_diagnosis_string = "$USER_THEIR$ throat is red and inflamed." /datum/ailment/head/sore_throat/on_ailment_event() to_chat(organ.owner, SPAN_DANGER("You swallow painfully past your sore throat.")) @@ -39,16 +39,16 @@ treated_by_reagent_type = /decl/material/liquid/antiseptic treated_by_reagent_dosage = 1 medication_treatment_message = "The itching in your sinuses fades away." - manual_diagnosis_string = "$USER_HIS$ sinuses are inflamed and running." + manual_diagnosis_string = "$USER_THEIR$ sinuses are inflamed and running." /datum/ailment/head/sneezing/can_apply_to(obj/item/organ/_organ) - . = ..() - if(. && (!_organ.owner || !_organ.owner.usable_emotes["sneeze"])) - return FALSE + . = ..() && _organ.owner + if(.) + var/decl/emote/emote = GET_DECL(/decl/emote/audible/sneeze) + return emote.mob_can_use(_organ.owner) /datum/ailment/head/sneezing/on_ailment_event() - if(organ.owner.usable_emotes["sneeze"]) - organ.owner.emote("sneeze") + organ.owner.emote(/decl/emote/audible/sneeze) organ.owner.setClickCooldown(3) /datum/ailment/sprain @@ -56,8 +56,8 @@ applies_to_organ = list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT) treated_by_item_type = /obj/item/stack/medical/bruise_pack third_person_treatment_message = "$USER$ wraps $TARGET$'s sprained $ORGAN$ in $ITEM$." - self_treatment_message = "$USER$ wraps $USER_HIS$ sprained $ORGAN$ in $ITEM$." - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is visibly swollen." + self_treatment_message = "$USER$ wraps $USER_THEIR$ sprained $ORGAN$ in $ITEM$." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is visibly swollen." /datum/ailment/sprain/on_ailment_event() to_chat(organ.owner, SPAN_DANGER("Your sprained [organ.name] aches distractingly.")) @@ -70,8 +70,8 @@ name = "rash" treated_by_item_type = /obj/item/stack/medical/ointment third_person_treatment_message = "$USER$ salves $TARGET$'s rash-stricken $ORGAN$ with $ITEM$." - self_treatment_message = "$USER$ salves $USER_HIS$ rash-stricken $ORGAN$ with $ITEM$." - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is covered in a bumpy red rash." + self_treatment_message = "$USER$ salves $USER_THEIR$ rash-stricken $ORGAN$ with $ITEM$." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is covered in a bumpy red rash." /datum/ailment/rash/on_ailment_event() to_chat(organ.owner, SPAN_DANGER("A bright red rash on your [organ.name] itches distractingly.")) @@ -83,12 +83,13 @@ applies_to_organ = list(BP_LUNGS) treated_by_reagent_type = /decl/material/liquid/antiseptic medication_treatment_message = "The tickling in your throat fades away." - manual_diagnosis_string = "$USER_HIS$ throat is red and inflamed." + manual_diagnosis_string = "$USER_THEIR$ throat is red and inflamed." /datum/ailment/coughing/can_apply_to(obj/item/organ/_organ) - . = ..() - if(. && (!_organ.owner || !_organ.owner.usable_emotes["cough"])) - return FALSE + . = ..() && _organ.owner + if(.) + var/decl/emote/emote = GET_DECL(/decl/emote/audible/cough) + return emote.mob_can_use(_organ.owner) /datum/ailment/coughing/on_ailment_event() organ.owner.cough() @@ -99,7 +100,7 @@ treated_by_chem_effect = CE_PAINKILLER treated_by_chem_effect_strength = 25 medication_treatment_message = "The dull pulse of pain in your $ORGAN$ fades away." - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is visibly swollen." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is visibly swollen." /datum/ailment/sore_joint/on_ailment_event() var/obj/item/organ/external/E = organ diff --git a/code/modules/organs/ailments/faults/_fault.dm b/code/modules/organs/ailments/faults/_fault.dm index 0eb2ec462f8..4a4d72c6fe5 100644 --- a/code/modules/organs/ailments/faults/_fault.dm +++ b/code/modules/organs/ailments/faults/_fault.dm @@ -7,5 +7,5 @@ ) treated_by_item_cost = 3 third_person_treatment_message = "$USER$ patches $TARGET$'s faulty $ORGAN$ with $ITEM$." - self_treatment_message = "$USER$ patches $USER_HIS$ faulty $ORGAN$ with $ITEM$." + self_treatment_message = "$USER$ patches $USER_THEIR$ faulty $ORGAN$ with $ITEM$." initial_ailment_message = "Damage to your $ORGAN$ has caused a fault..." diff --git a/code/modules/organs/ailments/faults/fault_acid_discharge.dm b/code/modules/organs/ailments/faults/fault_acid_discharge.dm index 505eeee331d..cc2281544a6 100644 --- a/code/modules/organs/ailments/faults/fault_acid_discharge.dm +++ b/code/modules/organs/ailments/faults/fault_acid_discharge.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/acid name = "acidic discharge" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is leaking some kind of chemical." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is leaking some kind of chemical." /datum/ailment/fault/acid/on_ailment_event() organ.owner.custom_pain("A burning sensation spreads through your [organ.name].", 5, affecting = organ.owner) diff --git a/code/modules/organs/ailments/faults/fault_elec_discharge.dm b/code/modules/organs/ailments/faults/fault_elec_discharge.dm index 09d5b3fdaf4..8e7ec518031 100644 --- a/code/modules/organs/ailments/faults/fault_elec_discharge.dm +++ b/code/modules/organs/ailments/faults/fault_elec_discharge.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/elec_discharge name = "electrical discharge" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ gives you a static shock when you touch it!" + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ gives you a static shock when you touch it!" /datum/ailment/fault/elec_discharge/on_ailment_event() organ.owner.custom_pain("Shock jolts through your [organ.name], staggering you!", 50, affecting = organ.owner) diff --git a/code/modules/organs/ailments/faults/fault_leaky.dm b/code/modules/organs/ailments/faults/fault_leaky.dm index d3d44a66280..d8659a9fb51 100644 --- a/code/modules/organs/ailments/faults/fault_leaky.dm +++ b/code/modules/organs/ailments/faults/fault_leaky.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/leaky name = "leaky prosthetic" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is leaking some kind of chemical." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is leaking some kind of chemical." var/static/list/chemicals = list( /decl/material/liquid/enzyme, /decl/material/liquid/frostoil, diff --git a/code/modules/organs/ailments/faults/fault_locking_thumbs.dm b/code/modules/organs/ailments/faults/fault_locking_thumbs.dm index a0df179ed84..faa71d72568 100644 --- a/code/modules/organs/ailments/faults/fault_locking_thumbs.dm +++ b/code/modules/organs/ailments/faults/fault_locking_thumbs.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/locking_thumbs name = "self-locking thumbs" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ makes a grinding sound when you move the joints." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ makes a grinding sound when you move the joints." applies_to_organ = list( BP_L_ARM, BP_L_HAND, diff --git a/code/modules/organs/ailments/faults/fault_noisemaker.dm b/code/modules/organs/ailments/faults/fault_noisemaker.dm index 981cefb72ba..c99f9e2cc37 100644 --- a/code/modules/organs/ailments/faults/fault_noisemaker.dm +++ b/code/modules/organs/ailments/faults/fault_noisemaker.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/noisemaker name = "noisemaker" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is emitting a low capacitor whine." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is emitting a low capacitor whine." /datum/ailment/fault/noisemaker/on_ailment_event() organ.owner.audible_message(SPAN_DANGER("[organ.owner]'s [organ.name] emits a loud, piezoelectric screal."), hearing_distance = 7) diff --git a/code/modules/organs/ailments/faults/fault_overstimulation.dm b/code/modules/organs/ailments/faults/fault_overstimulation.dm index d334212b1e6..49244c9fe9d 100644 --- a/code/modules/organs/ailments/faults/fault_overstimulation.dm +++ b/code/modules/organs/ailments/faults/fault_overstimulation.dm @@ -2,5 +2,5 @@ name = "motor control overstimulation" /datum/ailment/fault/overstimulation/on_ailment_event() - organ.owner.emote("collapse") + organ.owner.emote(/decl/emote/visible/collapse) SET_STATUS_MAX(organ.owner, STAT_STUN, rand(2, 4)) \ No newline at end of file diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index a5800fb5563..a98d171a762 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -1241,7 +1241,7 @@ Note that amputating the affected organ does in fact remove the infection from t "You hear a sickening crack.") jostle_bone() if(can_feel_pain()) - owner.emote("scream") + owner.emote(/decl/emote/audible/scream) playsound(src.loc, "fracture", 100, 1, -2) status |= ORGAN_BROKEN diff --git a/code/modules/organs/external/_external_damage.dm b/code/modules/organs/external/_external_damage.dm index ca5c44974f9..b8f7c33f6f1 100644 --- a/code/modules/organs/external/_external_damage.dm +++ b/code/modules/organs/external/_external_damage.dm @@ -68,7 +68,7 @@ if((status & ORGAN_BROKEN) && brute) jostle_bone(brute) if(can_feel_pain() && prob(40)) - owner.emote("scream") //getting hit on broken hand hurts + owner.emote(/decl/emote/audible/scream) //getting hit on broken hand hurts // If the limbs can break, make sure we don't exceed the maximum damage a limb can take before breaking var/datum/wound/created_wound @@ -282,7 +282,7 @@ return pain = max(0,min(max_damage,pain+amount)) if(owner && ((amount > 15 && prob(20)) || (amount > 30 && prob(60)))) - owner.emote("scream") + owner.emote(/decl/emote/audible/scream) return pain-last_pain /obj/item/organ/external/proc/stun_act(var/stun_amount, var/agony_amount) diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index d84032440d0..f990df6ae80 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -188,7 +188,7 @@ SET_STATUS_MAX(owner, STAT_STUN, 10) switch(rand(1, 3)) if(1) - owner.emote("twitch") + owner.emote(/decl/emote/visible/twitch) if(2 to 3) owner.say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") ADJ_STATUS(owner, STAT_JITTER, 100) diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm index a6013149427..4402f09783d 100644 --- a/code/modules/organs/internal/lungs.dm +++ b/code/modules/organs/internal/lungs.dm @@ -189,7 +189,7 @@ if(inhale_efficiency < 1) if(prob(20) && active_breathing) if(inhale_efficiency < 0.6) - owner.emote("gasp") + owner.emote(/decl/emote/audible/gasp) else if(prob(20)) to_chat(owner, SPAN_WARNING("It's hard to breathe...")) breath_fail_ratio = clamp(0,(1 - inhale_efficiency + breath_fail_ratio)/2,1) @@ -259,9 +259,9 @@ if(prob(15) && !owner.nervous_system_failure()) if(!owner.is_asystole()) if(active_breathing) - owner.emote("gasp") + owner.emote(/decl/emote/audible/gasp) else - owner.emote(pick("shiver","twitch")) + owner.emote(pick(/decl/emote/visible/shiver,/decl/emote/visible/twitch)) if(damage || GET_CHEMICAL_EFFECT(owner, CE_BREATHLOSS) || world.time > last_successful_breath + 2 MINUTES) owner.adjustOxyLoss(HUMAN_MAX_OXYLOSS*breath_fail_ratio) diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index d9bff64a519..6ec0982199b 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -47,7 +47,7 @@ if(.) var/force_emote = species.get_pain_emote(src, power) if(force_emote && prob(power)) - var/decl/emote/use_emote = usable_emotes[force_emote] + var/decl/emote/use_emote = GET_DECL(force_emote) if(!(use_emote.message_type == AUDIBLE_MESSAGE &&HAS_STATUS(src, STAT_SILENCE))) emote(force_emote) diff --git a/code/modules/reagents/chems/chems_compounds.dm b/code/modules/reagents/chems/chems_compounds.dm index fb4e91ed42d..bb2ff0beee5 100644 --- a/code/modules/reagents/chems/chems_compounds.dm +++ b/code/modules/reagents/chems/chems_compounds.dm @@ -74,7 +74,7 @@ /decl/material/liquid/frostoil/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) M.bodytemperature = max(M.bodytemperature - 10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0) if(prob(1)) - M.emote("shiver") + M.emote(/decl/emote/visible/shiver) holder.remove_reagent(/decl/material/liquid/capsaicin, 5) /decl/material/liquid/capsaicin @@ -423,7 +423,7 @@ else if(E.organ_tag != BP_CHEST && E.organ_tag != BP_GROIN && prob(15)) to_chat(H, SPAN_DANGER("Your [E.name] is being lacerated from within!")) if(E.can_feel_pain()) - H.emote("scream") + H.emote(/decl/emote/audible/scream) if(prob(25)) for(var/i = 1 to rand(3,5)) new /obj/item/shard(get_turf(E), result_mat) diff --git a/code/modules/reagents/chems/chems_drugs.dm b/code/modules/reagents/chems/chems_drugs.dm index d03237b924d..f19a6179760 100644 --- a/code/modules/reagents/chems/chems_drugs.dm +++ b/code/modules/reagents/chems/chems_drugs.dm @@ -12,7 +12,7 @@ /decl/material/liquid/amphetamines/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) if(prob(5)) - M.emote(pick("twitch", "blink_r", "shiver")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/visible/blink_r, /decl/emote/visible/shiver)) M.add_chemical_effect(CE_SPEEDBOOST, 1) M.add_chemical_effect(CE_PULSE, 3) @@ -33,7 +33,7 @@ if(prob(50)) SET_STATUS_MAX(M, STAT_DROWSY, 3) if(prob(10)) - M.emote("drool") + M.emote(/decl/emote/visible/drool) /decl/material/liquid/nicotine name = "nicotine" @@ -79,7 +79,7 @@ var/dose = LAZYACCESS(M.chem_doses, type) if(dose < 0.5 * threshold) if(dose == metabolism * 2 || prob(5)) - M.emote("yawn") + M.emote(/decl/emote/audible/yawn) else if(dose < 1 * threshold) SET_STATUS_MAX(M, STAT_BLURRY, 10) else if(dose < 2 * threshold) @@ -148,7 +148,7 @@ M.apply_effect(3, STUTTER) ADJ_STATUS(M, STAT_DIZZY, 1) if(prob(5)) - M.emote(pick("twitch", "giggle")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/audible/giggle)) else if(dose < 2 * threshold) M.apply_effect(3, STUTTER) ADJ_STATUS(M, STAT_JITTER, 2) @@ -156,7 +156,7 @@ SET_STATUS_MAX(M, STAT_DRUGGY, 35) if(prob(10)) - M.emote(pick("twitch", "giggle")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/audible/giggle)) else M.add_chemical_effect(CE_MIND, -1) M.apply_effect(3, STUTTER) @@ -164,7 +164,7 @@ ADJ_STATUS(M, STAT_DIZZY, 5) SET_STATUS_MAX(M, STAT_DRUGGY, 40) if(prob(15)) - M.emote(pick("twitch", "giggle")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/audible/giggle)) // Welcome back, Three Eye /decl/material/liquid/glowsap/gleam diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index aec8e1ff55d..b8a0f52247f 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -478,9 +478,9 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 /decl/species/proc/handle_sleeping(var/mob/living/carbon/human/H) if(prob(2) && !H.failed_last_breath && !H.isSynthetic()) if(!HAS_STATUS(H, STAT_PARA)) - H.emote("snore") + H.emote(/decl/emote/audible/snore) else - H.emote("groan") + H.emote(/decl/emote/audible/groan) /decl/species/proc/handle_environment_special(var/mob/living/carbon/human/H) return @@ -724,8 +724,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/pain_level = pain_emotes_with_pain_level[pain_emotes] if(pain_level >= pain_power) // This assumes that if a pain-level has been defined it also has a list of emotes to go with it - var/decl/emote/E = GET_DECL(pick(pain_emotes)) - return E.key + return pick(pain_emotes) /decl/species/proc/handle_post_move(var/mob/living/carbon/human/H) handle_exertion(H) diff --git a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm index cc1c0166504..cd593387c8f 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm @@ -78,7 +78,8 @@ stunned(value * 2) set_cooldown(value * 100) - if(prob(value*10)) owner.emote("scream") + if(prob(value*10)) + owner.emote(/decl/emote/audible/scream) // Your head asplode. owner.adjustBrainLoss(value) diff --git a/mods/content/psionics/system/psionics/faculties/coercion.dm b/mods/content/psionics/system/psionics/faculties/coercion.dm index f619d38dd3f..cd856169ab9 100644 --- a/mods/content/psionics/system/psionics/faculties/coercion.dm +++ b/mods/content/psionics/system/psionics/faculties/coercion.dm @@ -45,7 +45,7 @@ if(prob(60) && iscarbon(M)) var/mob/living/carbon/C = M if(C.can_feel_pain()) - M.emote("scream") + M.emote(/decl/emote/audible/scream) to_chat(M, SPAN_DANGER("Your senses are blasted into oblivion by a psionic scream!")) M.flash_eyes() SET_STATUS_MAX(M, STAT_BLIND, 3) @@ -132,7 +132,7 @@ to_chat(user, "You lash out, stabbing into \the [target] with a lance of psi-power.") to_chat(target, "The muscles in your arms cramp horrendously!") if(prob(75)) - target.emote("scream") + target.emote(/decl/emote/audible/scream) for(var/hand_slot in target.get_held_item_slots()) var/obj/item/thing = target.get_equipped_item(hand_slot) if(thing?.simulated && prob(75) && target.try_unequip(thing)) diff --git a/mods/content/xenobiology/emotes.dm b/mods/content/xenobiology/emotes.dm index d98ee2307b1..263221ad6fb 100644 --- a/mods/content/xenobiology/emotes.dm +++ b/mods/content/xenobiology/emotes.dm @@ -2,7 +2,7 @@ var/static/list/default_emotes = list( /decl/emote/audible/moan, /decl/emote/visible/twitch, - /decl/emote/visible/tail/sway, + /decl/emote/visible/sway, /decl/emote/visible/shiver, /decl/emote/visible/bounce, /decl/emote/visible/jiggle, @@ -27,7 +27,7 @@ slime_ai.mood = mood user.update_icon() -/decl/emote/slime/mob_can_use(var/atom/user) +/decl/emote/slime/mob_can_use(mob/living/user, assume_available = FALSE) return isslime(user) && ..() /decl/emote/slime/pout diff --git a/mods/content/xenobiology/slime/slime_AI.dm b/mods/content/xenobiology/slime/slime_AI.dm index b79fcc0a3a1..9ab005ea9b0 100644 --- a/mods/content/xenobiology/slime/slime_AI.dm +++ b/mods/content/xenobiology/slime/slime_AI.dm @@ -193,7 +193,7 @@ if(prob(1)) if(prob(50)) - body.emote(pick("bounce","sway","light","vibrate","jiggle")) + body.emote(pick(/decl/emote/visible/bounce, /decl/emote/visible/sway, /decl/emote/visible/lightup, /decl/emote/visible/vibrate, /decl/emote/visible/jiggle)) else var/list/possible_comments var/list/all_slime_comments = decls_repository.get_decls_of_subtype(/decl/slime_comment) diff --git a/mods/mobs/dionaea/datums/ai.dm b/mods/mobs/dionaea/datums/ai.dm index 6af2cc080bb..750c1668076 100644 --- a/mods/mobs/dionaea/datums/ai.dm +++ b/mods/mobs/dionaea/datums/ai.dm @@ -10,4 +10,4 @@ if(prob(wander_prob) && !LAZYLEN(body.grabbed_by) && isturf(body.loc)) //won't move if being pulled body.SelfMove(pick(global.cardinal)) if(prob(emote_prob)) - body.emote(pick("scratch","jump","chirp","tail")) \ No newline at end of file + body.emote(pick(/decl/emote/visible/scratch, /decl/emote/visible/jump, /decl/emote/audible/chirp, /decl/emote/visible/tail)) diff --git a/mods/mobs/dionaea/mob/nymph_emotes.dm b/mods/mobs/dionaea/mob/nymph_emotes.dm index 19624be8f82..1c7c78bdbcc 100644 --- a/mods/mobs/dionaea/mob/nymph_emotes.dm +++ b/mods/mobs/dionaea/mob/nymph_emotes.dm @@ -4,7 +4,7 @@ /decl/emote/visible/scratch, /decl/emote/visible/drool, /decl/emote/visible/nod, - /decl/emote/visible/tail/sway, + /decl/emote/visible/sway, /decl/emote/visible/sulk, /decl/emote/visible/twitch, /decl/emote/visible/dance, @@ -28,5 +28,5 @@ /decl/emote/audible/chirp key = "chirp" - emote_message_3p = "USER chirps!" + emote_message_3p = "$USER$ chirps!" emote_sound = 'mods/mobs/dionaea/sounds/nymphchirp.ogg' diff --git a/mods/species/ascent/datum/emotes.dm b/mods/species/ascent/datum/emotes.dm index 12e09f1d025..7c34edae0b4 100644 --- a/mods/species/ascent/datum/emotes.dm +++ b/mods/species/ascent/datum/emotes.dm @@ -20,40 +20,40 @@ return default_emotes /decl/emote/audible/ascent_purr - key = "purr" - emote_message_3p = "USER purrs." + key = "apurr" + emote_message_3p = "$USER$ purrs." emote_sound = 'mods/species/ascent/sounds/ascent1.ogg' /decl/emote/audible/ascent_hiss - key = "hiss" - emote_message_3p = "USER hisses." + key = "ahiss" + emote_message_3p = "$USER$ hisses." emote_sound = 'mods/species/ascent/sounds/razorweb.ogg' /decl/emote/audible/ascent_snarl - key = "snarl" - emote_message_3p = "USER snarls." + key = "asnarl" + emote_message_3p = "$USER$ snarls." emote_sound = 'mods/species/ascent/sounds/razorweb_hiss.ogg' /decl/emote/visible/ascent_flicker - key = "flicker" - emote_message_3p = "USER flickers prismatically." + key = "aflicker" + emote_message_3p = "$USER$ flickers prismatically." /decl/emote/visible/ascent_glint - key = "glint" - emote_message_3p = "USER glints." + key = "aglint" + emote_message_3p = "$USER$ glints." /decl/emote/visible/ascent_glimmer - key = "glimmer" - emote_message_3p = "USER glimmers." + key = "aglimmer" + emote_message_3p = "$USER$ glimmers." /decl/emote/visible/ascent_pulse - key = "pulse" - emote_message_3p = "USER pulses with light." + key = "apulse" + emote_message_3p = "$USER$ pulses with light." /decl/emote/visible/ascent_shine - key = "shine" - emote_message_3p = "USER shines brightly!" + key = "ashine" + emote_message_3p = "$USER$ shines brightly!" /decl/emote/visible/ascent_dazzle - key = "dazzle" - emote_message_3p = "USER dazzles!" + key = "adazzle" + emote_message_3p = "$USER$ dazzles!" diff --git a/mods/species/ascent/mobs/nymph/nymph_emotes.dm b/mods/species/ascent/mobs/nymph/nymph_emotes.dm index d2905f7701d..23b96c70bfa 100644 --- a/mods/species/ascent/mobs/nymph/nymph_emotes.dm +++ b/mods/species/ascent/mobs/nymph/nymph_emotes.dm @@ -4,7 +4,7 @@ /decl/emote/visible/scratch, /decl/emote/visible/drool, /decl/emote/visible/nod, - /decl/emote/visible/tail/sway, + /decl/emote/visible/sway, /decl/emote/visible/sulk, /decl/emote/visible/twitch, /decl/emote/visible/roll, diff --git a/mods/species/bayliens/adherent/datum/emotes.dm b/mods/species/bayliens/adherent/datum/emotes.dm index 7babbbd83c0..dd347dedd15 100644 --- a/mods/species/bayliens/adherent/datum/emotes.dm +++ b/mods/species/bayliens/adherent/datum/emotes.dm @@ -6,10 +6,10 @@ /decl/emote/audible/adherent_ding key = "ding" - emote_message_3p = "USER dings." + emote_message_3p = "$USER$ dings." emote_sound = 'mods/species/bayliens/adherent/sound/ding.ogg' /decl/emote/audible/adherent_chime key = "chime" - emote_message_3p = "USER chimes." + emote_message_3p = "$USER$ chimes." emote_sound = 'mods/species/bayliens/adherent/sound/chime.ogg' diff --git a/mods/species/bayliens/skrell/datum/emotes.dm b/mods/species/bayliens/skrell/datum/emotes.dm index 6f773783d63..3bb122ec912 100644 --- a/mods/species/bayliens/skrell/datum/emotes.dm +++ b/mods/species/bayliens/skrell/datum/emotes.dm @@ -9,21 +9,21 @@ /decl/emote/audible/warble key = "warble" - emote_message_3p = "USER warbles." + emote_message_3p = "$USER$ warbles." emote_sound = 'mods/species/bayliens/skrell/sound/warble.ogg' /decl/emote/audible/croak key = "croak" - emote_message_3p = "USER croaks!" + emote_message_3p = "$USER$ croaks!" /decl/emote/audible/trill key = "trill" - emote_message_3p = "USER trills melodically!" + emote_message_3p = "$USER$ trills melodically!" /decl/emote/audible/hum key = "hum" - emote_message_3p = "USER hums a melodic, warbly chorus of notes!" + emote_message_3p = "$USER$ hums a melodic, warbly chorus of notes!" /decl/emote/audible/coo key = "coo" - emote_message_3p = "USER lets out an audible, warbly coo." \ No newline at end of file + emote_message_3p = "$USER$ lets out an audible, warbly coo." \ No newline at end of file diff --git a/mods/species/bayliens/tajaran/datum/emotes.dm b/mods/species/bayliens/tajaran/datum/emotes.dm index f5e07f697b9..adeed0c5c8d 100644 --- a/mods/species/bayliens/tajaran/datum/emotes.dm +++ b/mods/species/bayliens/tajaran/datum/emotes.dm @@ -1,9 +1,9 @@ /decl/emote/audible/purr key = "purr" - emote_message_3p = "USER purrs." + emote_message_3p = "$USER$ purrs." emote_sound = 'mods/species/bayliens/tajaran/sound/cat_purr.ogg' /decl/emote/audible/purrlong key = "purrl" - emote_message_3p = "USER purrs." + emote_message_3p = "$USER$ purrs." emote_sound = 'mods/species/bayliens/tajaran/sound/cat_purr_long.ogg' diff --git a/mods/species/vox/datum/species.dm b/mods/species/vox/datum/species.dm index 66470af4395..8a361b59902 100644 --- a/mods/species/vox/datum/species.dm +++ b/mods/species/vox/datum/species.dm @@ -166,5 +166,5 @@ /decl/emote/audible/vox_shriek key = "shriek" - emote_message_3p = "USER SHRIEKS!" + emote_message_3p = "$USER$ SHRIEKS!" emote_sound = 'mods/species/vox/sounds/shriek1.ogg'