diff --git a/code/__DEFINES/voreconstants.dm b/code/__DEFINES/voreconstants.dm
index bb5d808bf9..e101747b74 100644
--- a/code/__DEFINES/voreconstants.dm
+++ b/code/__DEFINES/voreconstants.dm
@@ -55,30 +55,9 @@ GLOBAL_LIST_INIT(pred_vore_sounds, list(
"Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg',
"Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg',
"Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg',
- //Extreme SPLURT degeneracy starts here
- "Fart" = 'modular_splurt/sound/voice/farts/fart.ogg',
- "Fart 1" = 'modular_splurt/sound/voice/farts/fart1.ogg',
- "Fart 2" = 'modular_splurt/sound/voice/farts/fart2.ogg',
- "Fart 3" = 'modular_splurt/sound/voice/farts/fart3.ogg',
- "Fart 4" = 'modular_splurt/sound/voice/farts/fart4.ogg',
- "Fart 5" = 'modular_splurt/sound/voice/farts/fart5.ogg',
- "Fart 6" = 'modular_splurt/sound/voice/farts/fart6.ogg',
- "Fart 7" = 'modular_splurt/sound/voice/farts/fart7.ogg',
- "Burp 1" = 'modular_splurt/sound/voice/burps/belch1.ogg',
- "Burp 2" = 'modular_splurt/sound/voice/burps/belch2.ogg',
- "Burp 3" = 'modular_splurt/sound/voice/burps/belch3.ogg',
- "Burp 4" = 'modular_splurt/sound/voice/burps/belch4.ogg',
- "Burp 5" = 'modular_splurt/sound/voice/burps/belch5.ogg',
- "Burp 6" = 'modular_splurt/sound/voice/burps/belch6.ogg',
- "Burp 7" = 'modular_splurt/sound/voice/burps/belch7.ogg',
- "Burp 8" = 'modular_splurt/sound/voice/burps/belch8.ogg',
- "Burp 9" = 'modular_splurt/sound/voice/burps/belch9.ogg',
- "Burp 10" = 'modular_splurt/sound/voice/burps/belch10.ogg',
- "Burp 11" = 'modular_splurt/sound/voice/burps/belch11.ogg',
- "Burp 12" = 'modular_splurt/sound/voice/burps/belch12.ogg',
- "Burp 13" = 'modular_splurt/sound/voice/burps/belch13.ogg',
- "Burp 14" = 'modular_splurt/sound/voice/burps/belch14.ogg',
- "Burp 15" = 'modular_splurt/sound/voice/burps/belch15.ogg',
+ //RIP Great SPLURT Fart & Burp Library, Wont Be Missed
+ "Fart" = 'modular_splurt/sound/voice/fart.ogg',
+ "Burp" = 'modular_splurt/sound/voice/burp.ogg',
"None" = null
))
@@ -99,30 +78,9 @@ GLOBAL_LIST_INIT(prey_vore_sounds, list(
"Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg',
"Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg',
"Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg',
- //Extreme SPLURT degeneracy starts here
- "Fart" = 'modular_splurt/sound/voice/farts/fart.ogg',
- "Fart 1" = 'modular_splurt/sound/voice/farts/fart1.ogg',
- "Fart 2" = 'modular_splurt/sound/voice/farts/fart2.ogg',
- "Fart 3" = 'modular_splurt/sound/voice/farts/fart3.ogg',
- "Fart 4" = 'modular_splurt/sound/voice/farts/fart4.ogg',
- "Fart 5" = 'modular_splurt/sound/voice/farts/fart5.ogg',
- "Fart 6" = 'modular_splurt/sound/voice/farts/fart6.ogg',
- "Fart 7" = 'modular_splurt/sound/voice/farts/fart7.ogg',
- "Burp 1" = 'modular_splurt/sound/voice/burps/belch1.ogg',
- "Burp 2" = 'modular_splurt/sound/voice/burps/belch2.ogg',
- "Burp 3" = 'modular_splurt/sound/voice/burps/belch3.ogg',
- "Burp 4" = 'modular_splurt/sound/voice/burps/belch4.ogg',
- "Burp 5" = 'modular_splurt/sound/voice/burps/belch5.ogg',
- "Burp 6" = 'modular_splurt/sound/voice/burps/belch6.ogg',
- "Burp 7" = 'modular_splurt/sound/voice/burps/belch7.ogg',
- "Burp 8" = 'modular_splurt/sound/voice/burps/belch8.ogg',
- "Burp 9" = 'modular_splurt/sound/voice/burps/belch9.ogg',
- "Burp 10" = 'modular_splurt/sound/voice/burps/belch10.ogg',
- "Burp 11" = 'modular_splurt/sound/voice/burps/belch11.ogg',
- "Burp 12" = 'modular_splurt/sound/voice/burps/belch12.ogg',
- "Burp 13" = 'modular_splurt/sound/voice/burps/belch13.ogg',
- "Burp 14" = 'modular_splurt/sound/voice/burps/belch14.ogg',
- "Burp 15" = 'modular_splurt/sound/voice/burps/belch15.ogg',
+ //RIP Great SPLURT Fart & Burp Library, Wont Be Missed
+ "Fart" = 'modular_splurt/sound/voice/fart.ogg',
+ "Burp" = 'modular_splurt/sound/voice/burp.ogg',
"None" = null
))
@@ -135,31 +93,9 @@ GLOBAL_LIST_INIT(pred_release_sounds, list(
"Stomach Move" = 'sound/vore/pred/stomachmove.ogg',
"Pred Escape" = 'sound/vore/pred/escape.ogg',
"Splatter" = 'sound/effects/splat.ogg',
- //Extreme SPLURT degeneracy starts here
- "Fart" = 'modular_splurt/sound/voice/farts/fart.ogg',
- "Fart 1" = 'modular_splurt/sound/voice/farts/fart1.ogg',
- "Fart 2" = 'modular_splurt/sound/voice/farts/fart2.ogg',
- "Fart 3" = 'modular_splurt/sound/voice/farts/fart3.ogg',
- "Fart 4" = 'modular_splurt/sound/voice/farts/fart4.ogg',
- "Fart 5" = 'modular_splurt/sound/voice/farts/fart5.ogg',
- "Fart 6" = 'modular_splurt/sound/voice/farts/fart6.ogg',
- "Fart 7" = 'modular_splurt/sound/voice/farts/fart7.ogg',
- "Fart 8" = 'modular_splurt/sound/voice/farts/fart8.ogg',
- "Burp 1" = 'modular_splurt/sound/voice/burps/belch1.ogg',
- "Burp 2" = 'modular_splurt/sound/voice/burps/belch2.ogg',
- "Burp 3" = 'modular_splurt/sound/voice/burps/belch3.ogg',
- "Burp 4" = 'modular_splurt/sound/voice/burps/belch4.ogg',
- "Burp 5" = 'modular_splurt/sound/voice/burps/belch5.ogg',
- "Burp 6" = 'modular_splurt/sound/voice/burps/belch6.ogg',
- "Burp 7" = 'modular_splurt/sound/voice/burps/belch7.ogg',
- "Burp 8" = 'modular_splurt/sound/voice/burps/belch8.ogg',
- "Burp 9" = 'modular_splurt/sound/voice/burps/belch9.ogg',
- "Burp 10" = 'modular_splurt/sound/voice/burps/belch10.ogg',
- "Burp 11" = 'modular_splurt/sound/voice/burps/belch11.ogg',
- "Burp 12" = 'modular_splurt/sound/voice/burps/belch12.ogg',
- "Burp 13" = 'modular_splurt/sound/voice/burps/belch13.ogg',
- "Burp 14" = 'modular_splurt/sound/voice/burps/belch14.ogg',
- "Burp 15" = 'modular_splurt/sound/voice/burps/belch15.ogg',
+ //RIP Great SPLURT Fart & Burp Library, Wont Be Missed
+ "Fart" = 'modular_splurt/sound/voice/fart.ogg',
+ "Burp" = 'modular_splurt/sound/voice/burp.ogg',
"None" = null
))
@@ -172,30 +108,7 @@ GLOBAL_LIST_INIT(prey_release_sounds, list(
"Stomach Move" = 'sound/vore/prey/stomachmove.ogg',
"Pred Escape" = 'sound/vore/prey/escape.ogg',
"Splatter" = 'sound/effects/splat.ogg',
- //Extreme SPLURT degeneracy starts here
- "Fart" = 'modular_splurt/sound/voice/farts/fart.ogg',
- "Fart 1" = 'modular_splurt/sound/voice/farts/fart1.ogg',
- "Fart 2" = 'modular_splurt/sound/voice/farts/fart2.ogg',
- "Fart 3" = 'modular_splurt/sound/voice/farts/fart3.ogg',
- "Fart 4" = 'modular_splurt/sound/voice/farts/fart4.ogg',
- "Fart 5" = 'modular_splurt/sound/voice/farts/fart5.ogg',
- "Fart 6" = 'modular_splurt/sound/voice/farts/fart6.ogg',
- "Fart 7" = 'modular_splurt/sound/voice/farts/fart7.ogg',
- "Fart 8" = 'modular_splurt/sound/voice/farts/fart8.ogg',
- "Burp 1" = 'modular_splurt/sound/voice/burps/belch1.ogg',
- "Burp 2" = 'modular_splurt/sound/voice/burps/belch2.ogg',
- "Burp 3" = 'modular_splurt/sound/voice/burps/belch3.ogg',
- "Burp 4" = 'modular_splurt/sound/voice/burps/belch4.ogg',
- "Burp 5" = 'modular_splurt/sound/voice/burps/belch5.ogg',
- "Burp 6" = 'modular_splurt/sound/voice/burps/belch6.ogg',
- "Burp 7" = 'modular_splurt/sound/voice/burps/belch7.ogg',
- "Burp 8" = 'modular_splurt/sound/voice/burps/belch8.ogg',
- "Burp 9" = 'modular_splurt/sound/voice/burps/belch9.ogg',
- "Burp 10" = 'modular_splurt/sound/voice/burps/belch10.ogg',
- "Burp 11" = 'modular_splurt/sound/voice/burps/belch11.ogg',
- "Burp 12" = 'modular_splurt/sound/voice/burps/belch12.ogg',
- "Burp 13" = 'modular_splurt/sound/voice/burps/belch13.ogg',
- "Burp 14" = 'modular_splurt/sound/voice/burps/belch14.ogg',
- "Burp 15" = 'modular_splurt/sound/voice/burps/belch15.ogg',
+ "Fart" = 'modular_splurt/sound/voice/fart.ogg',
+ "Burp" = 'modular_splurt/sound/voice/burp.ogg',
"None" = null
))
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index a1d7705b09..633df695c4 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -78,11 +78,6 @@
for(var/path in subtypesof(/datum/surgery))
GLOB.surgeries_list += new path()
- //Emotes
- for(var/path in subtypesof(/datum/emote))
- var/datum/emote/E = new path()
- E.emote_list[E.key] = E
-
for(var/path in subtypesof(/datum/bark))
var/datum/bark/B = new path()
GLOB.bark_list[B.id] = path
@@ -96,7 +91,7 @@
// Keybindings
init_keybindings()
-
+ GLOB.emote_list = init_emote_list()
init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes)
INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(init_ref_coin_values)) //so the current procedure doesn't sleep because of UNTIL()
diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm
index 5cbfd9f212..07c250d836 100644
--- a/code/_globalvars/lists/mobs.dm
+++ b/code/_globalvars/lists/mobs.dm
@@ -39,6 +39,8 @@ GLOBAL_LIST_EMPTY(sentient_disease_instances)
GLOBAL_LIST_EMPTY(latejoin_ai_cores)
+GLOBAL_LIST_EMPTY(emote_list)
+
GLOBAL_LIST_EMPTY(mob_config_movespeed_type_lookup)
GLOBAL_LIST_EMPTY(mob_config_movespeed_type_lookup_floating)
@@ -99,6 +101,24 @@ GLOBAL_LIST_EMPTY(pre_setup_antags) //minds that have been picked as antag by th
var/mob/M = i
M.update_config_movespeed()
+/proc/init_emote_list()
+ . = list()
+ for(var/path in subtypesof(/datum/emote))
+ var/datum/emote/E = new path()
+ if(E.key)
+ if(!.[E.key])
+ .[E.key] = list(E)
+ else
+ .[E.key] += E
+ else if(E.message) //Assuming all non-base emotes have this
+ stack_trace("Keyless emote: [E.type]")
+
+ if(E.key_third_person) //This one is optional
+ if(!.[E.key_third_person])
+ .[E.key_third_person] = list(E)
+ else
+ .[E.key_third_person] |= E
+
//blood types
GLOBAL_LIST_INIT(regular_bloods,list(
"O-",
diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm
index e5a453b2e8..a26e345e95 100644
--- a/code/datums/emotes.dm
+++ b/code/datums/emotes.dm
@@ -1,6 +1,7 @@
/datum/emote
var/key = "" //What calls the emote
var/key_third_person = "" //This will also call the emote
+ var/name = "" // Needed for more user-friendly emote names, so emotes with keys like "aflap" will show as "flap angry". Defaulted to key.
var/message = "" //Message displayed when emote is used
var/message_mime = "" //Message displayed if the user is a mime
var/message_alien = "" //Message displayed if the user is a grown alien
@@ -11,21 +12,19 @@
var/message_simple = "" //Message to display if the user is a simple_animal
var/message_param = "" //Message to display if a param was given
var/emote_type = EMOTE_VISIBLE //Whether the emote is visible or audible
+ var/sound
var/restraint_check = FALSE //Checks if the mob is restrained before performing the emote
var/muzzle_ignore = FALSE //Will only work if the emote is EMOTE_AUDIBLE
var/list/mob_type_allowed_typecache = /mob //Types that are allowed to use that emote
var/list/mob_type_blacklist_typecache //Types that are NOT allowed to use that emote
var/list/mob_type_ignore_stat_typecache
var/stat_allowed = CONSCIOUS
- var/static/list/emote_list = list()
var/static/regex/stop_bad_mime = regex(@"says|exclaims|yells|asks")
var/chat_popup = TRUE //Skyrat edit
var/image_popup
/datum/emote/New()
- if(key_third_person)
- emote_list[key_third_person] = src
if (ispath(mob_type_allowed_typecache))
switch (mob_type_allowed_typecache)
if (/mob)
@@ -39,6 +38,9 @@
mob_type_blacklist_typecache = typecacheof(mob_type_blacklist_typecache)
mob_type_ignore_stat_typecache = typecacheof(mob_type_ignore_stat_typecache)
+ if(!name)
+ name = key
+
/datum/emote/proc/run_emote(mob/user, params, type_override, intentional = FALSE)
. = TRUE
if(!can_run_emote(user, TRUE, intentional))
@@ -81,6 +83,9 @@
flick_emote_popup_on_mob(user, image_popup, 40)
//End of skyrat changes
+/datum/emote/proc/get_sound(mob/living/user)
+ return sound //by default just return this var.
+
/datum/emote/proc/replace_pronoun(mob/user, message)
if(findtext(message, "their"))
message = replacetext(message, "their", user.p_their())
@@ -149,12 +154,61 @@
return FALSE
/datum/emote/sound
- var/sound //Sound to play when emote is called
var/vary = FALSE //used for the honk borg emote
var/volume = 50
+ // Default time before using another audio emote
+ var/emote_cooldown = 1 SECONDS
+
+ // Default volume of the emote
+ var/emote_volume = 50
+
+ // Default range modifier
+ var/emote_range = -1
+ var/emote_distance_multiplier = SOUND_DEFAULT_DISTANCE_MULTIPLIER
+ var/emote_distance_multiplier_min_range = SOUND_DEFAULT_MULTIPLIER_EFFECT_RANGE
+
+ // Default pitch variance
+ var/emote_pitch_variance = 1
+
+ // Default audio falloff settings
+ var/emote_falloff_exponent = SOUND_FALLOFF_EXPONENT
+ var/emote_falloff_distance = SOUND_DEFAULT_FALLOFF_DISTANCE
+
+ // Default frequency
+ var/emote_frequency = null
+
+ // Default channel
+ var/emote_channel = 0
+
+ // Should the emote consider atmospheric pressure?
+ var/emote_check_pressure = TRUE
+
+ // Should the emote ignore walls?
+ var/emote_ignore_walls = FALSE
+
+ // Default wet and dry settings (???)
+ var/emote_wetness = -10000
+ var/emote_dryness = 0
mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/camera/aiEye)
+/datum/emote/sound/can_run_emote(mob/living/user, status_check, intentional = FALSE)
+ . = ..()
+
+ // Check parent return
+ if(!.)
+ return FALSE
+
+ // Check cooldown
+ if(user?.nextsoundemote >= world.time)
+ return FALSE
+
+ // Allow use
+ return TRUE
+
/datum/emote/sound/run_emote(mob/user, params)
. = ..()
if(.)
- playsound(user.loc, sound, volume, vary)
+ playsound(user.loc, sound, emote_volume, emote_pitch_variance, emote_range, emote_falloff_exponent, emote_frequency, emote_channel, emote_check_pressure, emote_ignore_walls, emote_falloff_distance, emote_wetness, emote_dryness, emote_distance_multiplier, emote_distance_multiplier_min_range)
+
+ //Cooldown.
+ user.nextsoundemote = world.time + emote_cooldown
diff --git a/code/modules/emote_panel/emote_panel.dm b/code/modules/emote_panel/emote_panel.dm
new file mode 100644
index 0000000000..029f69ebb9
--- /dev/null
+++ b/code/modules/emote_panel/emote_panel.dm
@@ -0,0 +1,64 @@
+/datum/emote_panel
+ var/list/blacklisted_emotes = list("me", "help")
+
+/datum/emote_panel/ui_static_data(mob/user)
+ var/list/data = list()
+
+ var/list/emotes = list()
+ var/list/keys = list()
+
+ for(var/key in GLOB.emote_list)
+ for(var/datum/emote/emote in GLOB.emote_list[key])
+ if(emote.key in keys)
+ continue
+ if(emote.key in blacklisted_emotes)
+ continue
+ if(emote.can_run_emote(user, status_check = FALSE))
+ keys += emote.key
+ emotes += list(list(
+ "key" = emote.key,
+ "name" = emote.name,
+ "hands" = emote.restraint_check,
+ "visible" = emote.emote_type & (EMOTE_VISIBLE || EMOTE_BOTH || EMOTE_OMNI),
+ "audible" = emote.emote_type & (EMOTE_AUDIBLE || EMOTE_BOTH || EMOTE_OMNI),
+ "sound" = !isnull(emote.get_sound(user)),
+ "use_params" = emote.message_param,
+ ))
+
+ data["emotes"] = emotes
+
+ return data
+
+/datum/emote_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if(.)
+ return
+ switch(action)
+ if("play_emote")
+ var/emote_key = params["emote_key"]
+ if(isnull(emote_key) || !GLOB.emote_list[emote_key])
+ return
+ var/use_params = params["use_params"]
+ var/datum/emote/emote = GLOB.emote_list[emote_key][1]
+ var/emote_param
+ if(emote.message_param && use_params)
+ emote_param = tgui_input_text(ui.user, "Add params to the emote...", emote.message_param)
+ ui.user.emote(emote_key, message = emote_param, intentional = TRUE)
+
+/datum/emote_panel/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "EmotePanel")
+ ui.open()
+
+/datum/emote_panel/ui_state(mob/user)
+ return GLOB.always_state
+
+/mob/living/verb/emote_panel()
+ set name = "Emote Panel"
+ set category = "IC"
+
+ var/static/datum/emote_panel/emote_panel
+ if(isnull(emote_panel))
+ emote_panel = new
+ emote_panel.ui_interact(src)
diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm
index 3c7476ff3b..1652997149 100644
--- a/code/modules/mob/emote.dm
+++ b/code/modules/mob/emote.dm
@@ -7,12 +7,14 @@
param = copytext(act, custom_param + length(act[custom_param]))
act = copytext(act, 1, custom_param)
- var/datum/emote/E
- E = E.emote_list[act]
- if(!E)
- to_chat(src, "Unusable emote '[act]'. Say *help for a list.")
+ var/list/key_emotes = GLOB.emote_list[act]
+ for(var/datum/emote/emote in key_emotes)
+ if(!emote.can_run_emote(src, TRUE, intentional, param))
+ continue
+ emote.run_emote(src, param, m_type, intentional)
+ if(!key_emotes)
+ to_chat(src, span_notice("Unusable emote '[act]'. Say *help for a list."))
return
- E.run_emote(src, param, m_type, intentional)
/datum/emote/flip
key = "flip"
diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm
index 49501e0315..f59c24635b 100644
--- a/code/modules/mob/living/carbon/emote.dm
+++ b/code/modules/mob/living/carbon/emote.dm
@@ -10,9 +10,10 @@
/datum/emote/living/carbon/blink_r
key = "blink_r"
+ name = "blink rapidly"
message = "blinks rapidly."
-/datum/emote/living/carbon/clap
+/datum/emote/sound/human/clap
key = "clap"
key_third_person = "claps"
message = "claps."
@@ -20,18 +21,9 @@
restraint_check = TRUE
emote_type = EMOTE_AUDIBLE
-/datum/emote/living/carbon/clap/run_emote(mob/living/user, params)
+/datum/emote/sound/human/clap/run_emote(mob/user, params)
+ sound = pick('sound/misc/clap1.ogg', 'sound/misc/clap2.ogg', 'sound/misc/clap3.ogg', 'sound/misc/clap4.ogg')
. = ..()
- if (.)
- if (ishuman(user))
- // Need hands to clap
- if (!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM))
- return
- var/clap = pick('sound/misc/clap1.ogg',
- 'sound/misc/clap2.ogg',
- 'sound/misc/clap3.ogg',
- 'sound/misc/clap4.ogg')
- playsound(user, clap, 50, 1, -1)
/datum/emote/living/carbon/gnarl
key = "gnarl"
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 2f5a4e01e9..cc41a8afd3 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -99,7 +99,7 @@
else
H.dna.species.stop_wagging_tail(H)
-/datum/emote/living/carbon/human/wag/can_run_emote(mob/user, status_check = TRUE)
+/datum/emote/living/carbon/human/wag/can_run_emote(mob/user, status_check = TRUE, intentional = FALSE)
if(!..() || !ishuman(user))
return FALSE
var/mob/living/carbon/human/H = user
@@ -135,7 +135,7 @@
else
. = "closes " + message
-/datum/emote/living/carbon/human/wing/can_run_emote(mob/user, status_check = TRUE)
+/datum/emote/living/carbon/human/wing/can_run_emote(mob/user, status_check = TRUE, intentional = FALSE)
if(!..() || !ishuman(user))
return FALSE
var/mob/living/carbon/human/H = user
@@ -162,7 +162,7 @@
T.Entered(src)
/datum/emote/sound/human
- mob_type_allowed_typecache = list(/mob/living/carbon/human)
+ mob_type_allowed_typecache = list(/mob/living/) // /sound/human/ became the global emote type, so this is now the only valid typecache
emote_type = EMOTE_AUDIBLE
/datum/emote/sound/human/buzz
@@ -247,6 +247,7 @@
//the actual emotes
/datum/emote/living/carbon/human/rockpaperscissors
+ key = "rps" // Give rockpaperscissors a key so it STOPS RUNTIMING
message = "is attempting to play rock paper scissors!"
/datum/emote/living/carbon/human/rockpaperscissors/rock
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index e2ed7830f7..45adeaee7d 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -15,12 +15,6 @@
message_param = "bows to %t."
restraint_check = TRUE
-/datum/emote/living/burp
- key = "burp"
- key_third_person = "burps"
- message = "burps."
- emote_type = EMOTE_AUDIBLE
-
/datum/emote/living/choke
key = "choke"
key_third_person = "chokes"
@@ -222,7 +216,7 @@
/datum/emote/living/audio_emote
emote_type = EMOTE_AUDIBLE
-/datum/emote/living/audio_emote/can_run_emote(mob/living/user, status_check = TRUE)
+/datum/emote/living/audio_emote/can_run_emote(mob/living/user, status_check = TRUE, intentional = FALSE)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
@@ -508,14 +502,12 @@
var/list/keys = list()
var/list/message = list("Available emotes, you can use them with say \"*emote\": ")
- var/datum/emote/E
- var/list/emote_list = E.emote_list
- for(var/e in emote_list)
- if(e in keys)
- continue
- E = emote_list[e]
- if(E.can_run_emote(user, status_check = FALSE))
- keys += E.key
+ for(var/key in GLOB.emote_list)
+ for(var/datum/emote/emote_action in GLOB.emote_list[key])
+ if(emote_action.key in keys)
+ continue
+ if(emote_action.can_run_emote(user, status_check = FALSE , intentional = TRUE))
+ keys += emote_action.key
keys = sort_list(keys)
diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml
index 01718eead0..ea4daf1e0d 100644
--- a/html/changelogs/archive/2024-09.yml
+++ b/html/changelogs/archive/2024-09.yml
@@ -38,3 +38,6 @@
2024-09-26:
Just-Sim:
- bugfix: Fixed cluttercode.
+2024-09-28:
+ Just-Sim:
+ - code_imp: Changed a lot of emotes.
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml
new file mode 100644
index 0000000000..1990d91292
--- /dev/null
+++ b/html/changelogs/archive/2024-10.yml
@@ -0,0 +1,8 @@
+2024-10-01:
+ Just-Sim:
+ - rscadd: Added Emote Panel
+ - rscdel: Remove herobrine.
+ - refactor: refactored emote code.
+2024-10-05:
+ Just-Sim:
+ - bugfix: fixes bugs brought about by the emote panel
diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm
index 88ea10b943..79c5499e76 100644
--- a/modular_citadel/code/modules/mob/cit_emotes.dm
+++ b/modular_citadel/code/modules/mob/cit_emotes.dm
@@ -68,268 +68,162 @@
message = "makes a very loud noise."
. = ..()
-/datum/emote/living/snap
+/datum/emote/sound/human/snap
key = "snap"
key_third_person = "snaps"
message = "snaps their fingers."
emote_type = EMOTE_AUDIBLE
muzzle_ignore = TRUE
restraint_check = TRUE
+ emote_pitch_variance = FALSE
+ sound = 'modular_citadel/sound/voice/snap.ogg'
-/datum/emote/living/snap/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/snap.ogg', 50, 1, -1)
-
-/datum/emote/living/snap2
+/datum/emote/sound/human/snap2
key = "snap2"
key_third_person = "snaps twice"
+ name = "snap twice"
message = "snaps twice."
emote_type = EMOTE_AUDIBLE
muzzle_ignore = TRUE
restraint_check = TRUE
+ emote_pitch_variance = FALSE
+ sound = 'modular_citadel/sound/voice/snap2.ogg'
-/datum/emote/living/snap2/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/snap2.ogg', 50, 1, -1)
-
-/datum/emote/living/snap3
+/datum/emote/sound/human/snap3
key = "snap3"
key_third_person = "snaps thrice"
+ name = "snap thrice"
message = "snaps thrice."
emote_type = EMOTE_AUDIBLE
muzzle_ignore = TRUE
restraint_check = TRUE
+ emote_pitch_variance = FALSE
+ sound = 'modular_citadel/sound/voice/snap3.ogg'
-/datum/emote/living/snap3/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/snap3.ogg', 50, 1, -1)
-
-/datum/emote/living/awoo
+/datum/emote/sound/human/awoo
key = "awoo"
key_third_person = "lets out an awoo"
message = "lets out an awoo!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ sound = 'modular_citadel/sound/voice/awoo.ogg'
-/datum/emote/living/awoo/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/awoo.ogg', 50, 1, -1)
-
-/datum/emote/living/hiss
+/datum/emote/sound/human/hiss
key = "hiss"
key_third_person = "hisses"
message = "hisses!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ sound = 'modular_citadel/sound/voice/hiss.ogg'
-/datum/emote/living/hiss/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/hiss.ogg', 50, 1, -1)
-
-/datum/emote/living/purr
+/datum/emote/sound/human/purr
key = "purr"
key_third_person = "purrs softly"
message = "purrs softly."
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ sound = 'modular_citadel/sound/voice/purr.ogg'
-/datum/emote/living/purr/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/purr.ogg', 50, 1, -1)
-
-/datum/emote/living/nya
+/datum/emote/sound/human/nya
key = "nya"
key_third_person = "lets out a nya"
message = "lets out a nya!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ sound = 'modular_citadel/sound/voice/nya.ogg'
-/datum/emote/living/nya/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/nya.ogg', 50, 1, -1)
-
-/datum/emote/living/weh
+/datum/emote/sound/human/weh
key = "weh"
key_third_person = "lets out a weh"
message = "lets out a weh!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ sound = 'modular_citadel/sound/voice/weh.ogg'
-/datum/emote/living/weh/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/weh.ogg', 50, 1, -1)
-
-/datum/emote/living/peep
+/datum/emote/sound/human/peep
key = "peep"
key_third_person = "peeps like a bird"
message = "peeps like a bird!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ sound = 'modular_citadel/sound/voice/peep.ogg'
-/datum/emote/living/peep/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/peep.ogg', 50, 1, -1)
-
-/datum/emote/living/dab
+/datum/emote/sound/human/dab
key = "dab"
key_third_person = "suddenly hits a dab"
message = "suddenly hits a dab!"
emote_type = EMOTE_AUDIBLE
restraint_check = TRUE
-/datum/emote/living/mothsqueak
+/datum/emote/sound/human/mothsqueak
key = "msqueak"
key_third_person = "lets out a tiny squeak"
message = "lets out a tiny squeak!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ sound = 'modular_citadel/sound/voice/mothsqueak.ogg'
-/datum/emote/living/mothsqueak/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/mothsqueak.ogg', 50, 1, -1)
-
-/datum/emote/living/merp
+/datum/emote/sound/human/merp
key = "merp"
key_third_person = "merps"
message = "merps!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ emote_cooldown = 0.6 SECONDS
+ sound = 'modular_citadel/sound/voice/merp.ogg'
-/datum/emote/living/merp/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- playsound(user, 'modular_citadel/sound/voice/merp.ogg', 50, 1, -1)
-
-/datum/emote/living/bark
+/datum/emote/sound/human/bark
key = "bark"
key_third_person = "barks"
message = "barks!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ emote_cooldown = 0.6 SECONDS
-/datum/emote/living/bark/run_emote(mob/living/user, params)
+/datum/emote/sound/human/bark/run_emote(mob/user, params)
+ sound = pick('modular_citadel/sound/voice/bark1.ogg', 'modular_citadel/sound/voice/bark2.ogg')
. = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- var/sound = pick('modular_citadel/sound/voice/bark1.ogg', 'modular_citadel/sound/voice/bark2.ogg')
- playsound(user, sound, 50, 1, -1)
-/datum/emote/living/squish
+/datum/emote/sound/human/squish
key = "squish"
key_third_person = "squishes"
message = "squishes!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ sound = 'sound/voice/slime_squish.ogg'
-/datum/emote/living/squish/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- var/sound = pick('sound/voice/slime_squish.ogg')
- playsound(user, sound, 50, 1, -1)
-
-/datum/emote/living/pain
+/datum/emote/sound/human/pain
key = "pain"
key_third_person = "cries out in pain!"
message = "cries out in pain!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
+ emote_pitch_variance = FALSE
-/datum/emote/living/pain/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- if(user.nextsoundemote >= world.time)
- return
- user.nextsoundemote = world.time + 7
- var/sound
+/datum/emote/sound/human/pain/run_emote(mob/user, params)
if(user.gender == MALE)
sound = pick('modular_citadel/sound/voice/human_male_pain_1.ogg', 'modular_citadel/sound/voice/human_male_pain_2.ogg', 'modular_citadel/sound/voice/human_male_pain_3.ogg', 'modular_citadel/sound/voice/human_male_pain_rare.ogg', 'modular_citadel/sound/voice/human_male_scream_1.ogg', 'modular_citadel/sound/voice/human_male_scream_2.ogg', 'modular_citadel/sound/voice/human_male_scream_3.ogg', 'modular_citadel/sound/voice/human_male_scream_4.ogg')
else
sound = pick('modular_citadel/sound/voice/human_female_pain_1.ogg', 'modular_citadel/sound/voice/human_female_pain_2.ogg', 'modular_citadel/sound/voice/human_female_pain_3.ogg', 'modular_citadel/sound/voice/human_female_scream_2.ogg', 'modular_citadel/sound/voice/human_female_scream_3.ogg', 'modular_citadel/sound/voice/human_female_scream_4.ogg')
- playsound(user, sound, 50, 0, 0)
+ . = ..()
-/datum/emote/living/clap1
+/datum/emote/sound/human/clap1
key = "clap1"
- key_third_person = "claps"
+ key_third_person = "clap1s"
+ name = "clap once"
message = "claps their hands together."
emote_type = EMOTE_AUDIBLE
muzzle_ignore = TRUE
restraint_check = TRUE
-
-/datum/emote/living/clap1/run_emote(mob/living/user, params)
- . = ..()
- if(!.)
- return
- playsound(user, 'modular_citadel/sound/voice/clap.ogg', 50, 1, -1)
+ sound = 'modular_citadel/sound/voice/clap.ogg'
diff --git a/modular_splurt/code/_globalvars/lists/global_lewd.dm b/modular_splurt/code/_globalvars/lists/global_lewd.dm
index a2b49a5e21..5a1f917c01 100644
--- a/modular_splurt/code/_globalvars/lists/global_lewd.dm
+++ b/modular_splurt/code/_globalvars/lists/global_lewd.dm
@@ -1,15 +1,3 @@
-GLOBAL_LIST_INIT(brap_noises, list(
- 'modular_splurt/sound/voice/farts/fart.ogg',
- 'modular_splurt/sound/voice/farts/fart1.ogg',
- 'modular_splurt/sound/voice/farts/fart2.ogg',
- 'modular_splurt/sound/voice/farts/fart3.ogg',
- 'modular_splurt/sound/voice/farts/fart4.ogg',
- 'modular_splurt/sound/voice/farts/fart5.ogg',
- 'modular_splurt/sound/voice/farts/fart6.ogg',
- 'modular_splurt/sound/voice/farts/fart7.ogg',
- 'modular_splurt/sound/voice/farts/fart8.ogg'
- ))
-
GLOBAL_LIST_INIT(breast_nouns, list("breasts", "boobs", "honkers", "tatas", "tiddies", "milktanks", "mammaries", "milk bags", "boobers", "boobies")) //Yeah I need help coming up with better names
GLOBAL_LIST_INIT(balls_nouns, list("balls", "nuts", "ballsack", "testicles", "sack", "cum orbs", "cum spheres", "cum tanks", "cum holders", "cum churners", "spunk orbs", "spunk spheres", "spunk tanks", "spunk holders", "spunk churners", "nut orbs", "nut spheres", "nut tanks", "nut holders", "nut churners", "jizz orbs", "jizz spheres", "jizz tanks", "jizz holders", "jizz churners", "seed orbs", "seed spheres", "seed tanks", "seed holders", "seed churners"))
diff --git a/modular_splurt/code/datums/traits/good.dm b/modular_splurt/code/datums/traits/good.dm
index 9367835f2e..e2025ae166 100644
--- a/modular_splurt/code/datums/traits/good.dm
+++ b/modular_splurt/code/datums/traits/good.dm
@@ -96,9 +96,8 @@
SIGNAL_HANDLER
. = FALSE
- var/datum/emote/E
- E = E.emote_list[lowertext(emote_args[EMOTE_ACT])]
- if(TIMER_COOLDOWN_CHECK(quirk_holder, COOLDOWN_DOMINANT_SNAP) || !findtext(E?.key, "snap"))
+ var/key = GLOB.emote_list[lowertext(emote_args[EMOTE_ACT])]
+ if(TIMER_COOLDOWN_CHECK(quirk_holder, COOLDOWN_DOMINANT_SNAP) || !findtext(key, "snap"))
return
for(var/mob/living/carbon/human/sub in hearers(DOMINANT_DETECT_RANGE, quirk_holder))
if(!sub.has_quirk(/datum/quirk/well_trained) || (sub == quirk_holder))
@@ -109,7 +108,7 @@
good_x = "boy"
if(FEMALE)
good_x = "girl"
- switch(E?.key)
+ switch(key)
if("snap")
sub.dir = get_dir(sub, quirk_holder)
sub.emote(pick("blush", "pant"))
diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species_types/teshari.dm b/modular_splurt/code/modules/mob/living/carbon/human/species_types/teshari.dm
index 1cb171d13c..70ddf0212c 100644
--- a/modular_splurt/code/modules/mob/living/carbon/human/species_types/teshari.dm
+++ b/modular_splurt/code/modules/mob/living/carbon/human/species_types/teshari.dm
@@ -61,60 +61,60 @@
/datum/language/schechi
-/datum/emote/living/audio/teshari/teshsqueak
+/datum/emote/sound/teshari/teshsqueak
key = "surprised"
key_third_person = "surprised"
message = "chirps in surprise!"
message_mime = "lets out an inaudible chirp!"
- emote_sound = 'modular_splurt/sound/voice/teshsqueak.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
+ sound = 'modular_splurt/sound/voice/teshsqueak.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
emote_cooldown = 2.1 SECONDS
-/datum/emote/living/audio/teshari/teshsqueak/run_emote(mob/user, params)
+/datum/emote/sound/teshari/teshsqueak/run_emote(mob/user, params)
var/datum/dna/D = user.has_dna()
if(D.species.name != "Teshari")
return
// Return normally
. = ..()
-/datum/emote/living/audio/teshari/teshchirp
+/datum/emote/sound/teshari/teshchirp
key = "tchirp"
key_third_person = "tchirp"
message = "chirps!"
message_mime = "lets out an inaudible chirp!"
- emote_sound = 'modular_splurt/sound/voice/teshchirp.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
+ sound = 'modular_splurt/sound/voice/teshchirp.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
emote_cooldown = 2.1 SECONDS
-/datum/emote/living/audio/teshari/teshchirp/run_emote(mob/user, params)
+/datum/emote/sound/teshari/teshchirp/run_emote(mob/user, params)
var/datum/dna/D = user.has_dna()
if(D.species.name != "Teshari")
return
// Return normally
. = ..()
-/datum/emote/living/audio/teshari/trill
+/datum/emote/sound/teshari/trill
key = "trill"
key_third_person = "trill"
message = "trills!"
message_mime = "lets out an inaudible chirp!"
- emote_sound = 'modular_splurt/sound/voice/teshtrill.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
+ sound = 'modular_splurt/sound/voice/teshtrill.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
emote_cooldown = 2.1 SECONDS
-/datum/emote/living/audio/teshari/trill/run_emote(mob/user, params)
+/datum/emote/sound/teshari/trill/run_emote(mob/user, params)
var/datum/dna/D = user.has_dna()
if(D.species.name != "Teshari")
return
// Return normally
. = ..()
-/datum/emote/living/audio/teshari/teshscream
+/datum/emote/sound/teshari/teshscream
key = "teshscream"
key_third_person = "teshscream"
message = "screams!"
message_mime = "lets out an inaudible screams!"
- emote_sound = 'modular_splurt/sound/voice/teshscream.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
+ sound = 'modular_splurt/sound/voice/teshscream.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
emote_cooldown = 2.1 SECONDS
-/datum/emote/living/audio/teshari/teshscream/run_emote(mob/user, params)
+/datum/emote/sound/teshari/teshscream/run_emote(mob/user, params)
var/datum/dna/D = user.has_dna()
if(D.species.name != "Teshari")
return
diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species_types/vox.dm b/modular_splurt/code/modules/mob/living/carbon/human/species_types/vox.dm
index a6da9f28c3..78883aea56 100644
--- a/modular_splurt/code/modules/mob/living/carbon/human/species_types/vox.dm
+++ b/modular_splurt/code/modules/mob/living/carbon/human/species_types/vox.dm
@@ -60,15 +60,15 @@
emote_type = EMOTE_AUDIBLE
-/datum/emote/living/audio/vox/shriek
+/datum/emote/sound/vox/shriek
key = "shriek"
key_third_person = "shrieks"
message = "shrieks!"
message_mime = "lets out an inaudible shriek!"
- emote_sound = 'modular_splurt/sound/voice/shriek1.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
+ sound = 'modular_splurt/sound/voice/shriek1.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
emote_cooldown = 2.1 SECONDS
-/datum/emote/living/audio/vox/shriek/run_emote(mob/user, params)
+/datum/emote/sound/vox/shriek/run_emote(mob/user, params)
var/datum/dna/D = user.has_dna()
if(D.species.name != "Vox")
return
diff --git a/modular_splurt/code/modules/mob/living/emotes.dm b/modular_splurt/code/modules/mob/living/emotes.dm
index 50ba8cbee8..159199c5e7 100644
--- a/modular_splurt/code/modules/mob/living/emotes.dm
+++ b/modular_splurt/code/modules/mob/living/emotes.dm
@@ -1,3 +1,31 @@
+/* VENUS STATION Guide:
+To create an emote, create a new /datum/emote/sound/human/ entry.
+ Here are the variables you can set:
+ - "key" is the command that a person will run to execute your emote.
+ - "key_third_person" is another way the command can be run to execute your emote, but in case of third person. (Example: "laugh" & "laughs")
+ - "name" is the name that shows up in the emote panel.
+ - "message" is the message that gets displayed when your emote is executed.
+ - "message_mime" is the message that gets displayed when your emote is executed by a mime.
+ - "emote_cooldown" is the cooldown of your emote (in SECONDS).
+ - "sound" is the sound file that gets played when your emote is executed.
+ - "emote_type" is the type of emote that your emote is.
+ EMOTE_AUDIBLE: Your emote will be audible to everyone. (Except deaf people)
+ EMOTE_VISIBLE: Your emote will be visible to everyone. (Except people who are blind)
+ EMOTE_BOTH: Your emote will be both audible and visible to everyone.
+ EMOTE_OMNI: Your emote will be audible to everyone, and visible to everyone who can see the user.
+ !!! THESE ARE IMPORTANT. THE EMOTE PANEL USES THESE !!!
+ - "restraint_check" is a boolean. If true, the emote will not be able to be used if the user is restrained. Defaults to FALSE.
+ - "mob_type_allowed_typecache" is a list of mob types that are allowed to use your emote. Do not use this unless necessary. Defaults to list(/mob/living).
+ - "emote_volume" is the volume of your emote. Defaults to 50.
+ - "emote_pitch_variance" is a boolean. If true, the emote will have a random pitch. Defaults to FALSE.
+
+To add randomization to your emote, copy and paste this line of code:
+ /datum/emote/sound/human/your_emote_name/run_emote(mob/user, params)
+ sound = pick('sound1.ogg', 'sound2.ogg', 'sound3.ogg')
+ . = ..()
+*/
+
+
//Main code edits
/datum/emote/living/audio_emote/laugh/run_emote(mob/user, params)
. = ..()
@@ -28,24 +56,7 @@
// Set laugh sound
laugh_sound = 'sound/voice/human/womanlaugh.ogg'
- /*
- * Please add more gendered laughs
- *
- // Male
- if(MALE)
- // Set laugh sound
- laugh_sound = 'sound/voice/human/laugh_male.ogg'
-
- // Non-binary
- if(PLURAL)
- // Set laugh sound
- laugh_sound = 'sound/voice/human/laugh_nonbinary.ogg'
-
- // Object
- if(NEUTER)
- // Set laugh sound
- laugh_sound = 'sound/voice/human/laugh_object.ogg'
- */
+ //Gendered laughs were never added. A shame, trully.
// Other
else
@@ -55,88 +66,6 @@
// Play laugh sound
playsound(carbon_user, laugh_sound, 50, 1)
-// Living variant
-/datum/emote/living/audio
- // List of mob types that can run emote
- mob_type_allowed_typecache = list(/mob/living)
-
- // Default type
- // Can be EMOTE_AUDIBLE, EMOTE_VISIBLE, EMOTE_BOTH, or EMOTE_OMNI
- emote_type = EMOTE_AUDIBLE
-
- // Placeholder variables
- // These should NOT appear in-game
- message = "makes an indescribable noise"
- var/emote_sound = 'sound/arcade/Boom.ogg'
-
- // Default time before using another audio emote
- var/emote_cooldown = 1 SECONDS
-
- // Default volume of the emote
- var/emote_volume = 50
-
- // Default range modifier
- var/emote_range = -1
- var/emote_distance_multiplier = SOUND_DEFAULT_DISTANCE_MULTIPLIER
- var/emote_distance_multiplier_min_range = SOUND_DEFAULT_MULTIPLIER_EFFECT_RANGE
-
- // Default pitch variance
- var/emote_pitch_variance = 1
-
- // Default audio falloff settings
- var/emote_falloff_exponent = SOUND_FALLOFF_EXPONENT
- var/emote_falloff_distance = SOUND_DEFAULT_FALLOFF_DISTANCE
-
- // Default frequency
- var/emote_frequency = null
-
- // Default channel
- var/emote_channel = 0
-
- // Should the emote consider atmospheric pressure?
- var/emote_check_pressure = TRUE
-
- // Should the emote ignore walls?
- var/emote_ignore_walls = FALSE
-
- // Default wet and dry settings (???)
- var/emote_wetness = -10000
- var/emote_dryness = 0
-
-// Check if audio emote can run
-/datum/emote/living/audio/can_run_emote(mob/living/user, status_check)
- . = ..()
-
- // Check parent return
- if(!.)
- return FALSE
-
- // Check cooldown
- if(user?.nextsoundemote >= world.time)
- return FALSE
-
- // Allow use
- return TRUE
-
-// Run audio emote
-/datum/emote/living/audio/run_emote(mob/user, params)
- . = ..()
-
- // Check parent return
- if(!.)
- return
-
- // Check if user is miming
- if(user?.mind?.miming)
- // Do nothing
- return
-
- // Play sound
- // Accepts all possible parameters
- playsound(user.loc, emote_sound, emote_volume, emote_pitch_variance, emote_range, emote_falloff_exponent, emote_frequency, emote_channel, emote_check_pressure, emote_ignore_walls, emote_falloff_distance, emote_wetness, emote_dryness, emote_distance_multiplier, emote_distance_multiplier_min_range)
-
- // Set cooldown
- user.nextsoundemote = world.time + emote_cooldown
/datum/emote/living/surrender/run_emote(mob/user, params, type_override, intentional)
// Set message with pronouns
@@ -155,82 +84,36 @@
/datum/emote/living/squint
key = "squint"
key_third_person = "squints"
- message = "squints their eyes." // i dumb
+ message = "squints their eyes."
emote_type = EMOTE_VISIBLE
/datum/emote/living/ruffle
key = "ruffle"
key_third_person = "ruffles"
message = "ruffles their wings for a moment."
+ restraint_check = TRUE
+ emote_type = EMOTE_VISIBLE
-/datum/emote/living/fart
+/datum/emote/sound/human/fart
key = "fart"
key_third_person = "farts"
- message = "farts out shitcode."
+ message = "farts."
+ emote_type = EMOTE_AUDIBLE // lets mimes fart
+ sound = 'modular_splurt/sound/voice/fart.ogg'
+ emote_cooldown = 0.6 SECONDS
-/datum/emote/living/fart/run_emote(mob/living/user, params, type_override, intentional)
- if(TIMER_COOLDOWN_CHECK(user, COOLDOWN_EMOTE_FART))
- to_chat(user, span_warning("You try your hardest, but no shart comes out."))
- return
- var/list/fart_emotes = list( //cope goonies
- "lets out a girly little 'toot' from [user.p_their()] butt.",
- "farts loudly!",
- "lets one rip!",
- "farts! It sounds wet and smells like rotten eggs.",
- "farts robustly!",
- "farted! It smells like something died.",
- "farts like a muppet!",
- "defiles the station's air supply.",
- "farts for a whole ten seconds.",
- "groans and moans, farting like the world depended on it.",
- "breaks wind!",
- "expels intestinal gas through [user.p_their()] anus.",
- "releases an audible discharge of intestinal gas.",
- "is a farting motherfucker!!!",
- "suffers from flatulence!",
- "releases flatus.",
- "releases methane.",
- "farts up a storm.",
- "farts. It smells like Soylent Surprise!",
- "farts. It smells like pizza!",
- "farts. It smells like George Melons' perfume!",
- "farts. It smells like the kitchen!",
- "farts. It smells like medbay in here now!",
- "farts. It smells like the bridge in here now!",
- "farts like a pubby!",
- "farts like a goone!",
- "sharts! That's just nasty.",
- "farts delicately.",
- "farts timidly.",
- "farts very, very quietly. The stench is OVERPOWERING.",
- "farts egregiously.",
- "farts voraciously.",
- "farts cantankerously.",
- "farts in [user.p_their()] own mouth. A shameful \the [user].",
- "breaks wind noisily!",
- "releases gas with the power of the gods! The very station trembles!!",
- "farts!",
- "laughs! [user.p_their(TRUE)] breath smells like a fart.",
- "farts, and as such, blob cannot evoulate.",
- "farts. It might have been the Citizen Kane of farts."
- )
- var/new_message = pick(fart_emotes)
- //new_message = replacetext(new_message, "%OWNER", "\the [user]")
- message = new_message
- . = ..()
- if(.)
- playsound(user, pick(GLOB.brap_noises), 50, 1, -1)
- TIMER_COOLDOWN_START(user, COOLDOWN_EMOTE_FART, 3 SECONDS)
+// Rest in Piss the SPLURT fart library.
-/datum/emote/living/audio/cackle
+/datum/emote/sound/human/cackle
key = "cackle"
key_third_person = "cackles"
message = "cackles hysterically!"
message_mime = "cackles silently!"
- emote_sound = 'modular_splurt/sound/voice/cackle_yeen.ogg'
+ sound = 'modular_splurt/sound/voice/cackle_yeen.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 1.6 SECONDS
-/datum/emote/living/audio/speen
+/datum/emote/sound/human/speen
key = "speen"
key_third_person = "speens"
message = "speeeeens!"
@@ -238,10 +121,10 @@
restraint_check = TRUE
mob_type_allowed_typecache = list(/mob/living)
mob_type_ignore_stat_typecache = list(/mob/dead/observer)
- emote_sound = 'modular_splurt/sound/voice/speen.ogg'
+ sound = 'modular_splurt/sound/voice/speen.ogg'
// No cooldown var required
-/datum/emote/living/audio/speen/run_emote(mob/user, params)
+/datum/emote/sound/human/speen/run_emote(mob/user, params)
. = ..()
// Check parent return
@@ -272,558 +155,611 @@
// Unbuckle all mobs
user_cyborg.unbuckle_all_mobs()
-/datum/emote/living/audio/chirp
+/datum/emote/sound/human/chirp
key = "chirp"
key_third_person = "chirps"
message = "chirps!"
message_mime = "chirps silently!"
- emote_sound = 'modular_splurt/sound/voice/chirp.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/chirp.ogg'
emote_cooldown = 0.2 SECONDS
-/datum/emote/living/audio/caw
+/datum/emote/sound/human/caw
key = "caw"
key_third_person = "caws"
message = "caws!"
message_mime = "caws silently!"
- emote_sound = 'modular_splurt/sound/voice/caw.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/caw.ogg'
emote_cooldown = 0.35 SECONDS
-/datum/emote/living/audio/mew
+/datum/emote/sound/human/mew
key = "mew"
key_third_person = "mews"
message = "mews hysterically!"
message_mime = "makes a cat face!"
- emote_sound = 'modular_splurt/sound/voice/meow_meme.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/meow_meme.ogg'
emote_cooldown = 1 SECONDS
-/datum/emote/living/burp/run_emote(mob/user, params, type_override, intentional)
- . = ..()
- var/list/burp_noises = list(
- 'modular_splurt/sound/voice/burps/belch1.ogg','modular_splurt/sound/voice/burps/belch2.ogg','modular_splurt/sound/voice/burps/belch3.ogg','modular_splurt/sound/voice/burps/belch4.ogg',
- 'modular_splurt/sound/voice/burps/belch5.ogg','modular_splurt/sound/voice/burps/belch6.ogg','modular_splurt/sound/voice/burps/belch7.ogg','modular_splurt/sound/voice/burps/belch8.ogg',
- 'modular_splurt/sound/voice/burps/belch9.ogg','modular_splurt/sound/voice/burps/belch10.ogg','modular_splurt/sound/voice/burps/belch11.ogg','modular_splurt/sound/voice/burps/belch12.ogg',
- 'modular_splurt/sound/voice/burps/belch13.ogg','modular_splurt/sound/voice/burps/belch14.ogg','modular_splurt/sound/voice/burps/belch15.ogg'
- )
- if(.)
- playsound(user, pick(burp_noises), 50, 1)
+// Moved *burp to modular_splurt to use the sound variables written here. Also removed the 14 other types of burp sounds.
+/datum/emote/sound/human/burp
+ key = "burp"
+ key_third_person = "burps"
+ message = "burps."
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/burp.ogg'
+ emote_cooldown = 0.6 SECONDS
-/datum/emote/living/audio/bleat
+/datum/emote/sound/human/bleat
key = "bleat"
key_third_person = "bleats"
message = "bleats loudly!"
message_mime = "bleats silently!"
- emote_sound = 'modular_splurt/sound/voice/bleat.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bleat.ogg'
emote_cooldown = 0.7 SECONDS
-// /datum/emote/living/carbon/moan/run_emote(mob/user, params, type_override, intentional) //I can't not port this shit, come on.
-// if(user.nextsoundemote >= world.time || user.stat != CONSCIOUS)
-// return
-// var/sound
-// var/miming = user.mind ? user.mind.miming : 0
-// if(!user.is_muzzled() && !miming)
-// user.nextsoundemote = world.time + 7
-// sound = pick('modular_splurt/sound/voice/moan_m1.ogg', 'modular_splurt/sound/voice/moan_m2.ogg', 'modular_splurt/sound/voice/moan_m3.ogg')
-// if(user.gender == FEMALE)
-// sound = pick('modular_splurt/sound/voice/moan_f1.ogg', 'modular_splurt/sound/voice/moan_f2.ogg', 'modular_splurt/sound/voice/moan_f3.ogg', 'modular_splurt/sound/voice/moan_f4.ogg', 'modular_splurt/sound/voice/moan_f5.ogg', 'modular_splurt/sound/voice/moan_f6.ogg', 'modular_splurt/sound/voice/moan_f7.ogg')
-// if(isalien(user))
-// sound = 'sound/voice/hiss6.ogg'
-// playlewdinteractionsound(user.loc, sound, 50, 1, 4, 1.2)
-// message = "moans!"
-// else if(miming)
-// message = "acts out a moan."
-// else
-// message = "makes a very loud noise."
-// . = ..()
-
-/datum/emote/living/audio/chitter2
+/datum/emote/sound/human/chitter2
key = "chitter2"
key_third_person = "chitters2"
+ name = "chitter silently"
message = "chitters."
message_mime = "chitters silently!"
- emote_sound = 'modular_splurt/sound/voice/moth/mothchitter2.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/moth/mothchitter2.ogg'
emote_cooldown = 0.3 SECONDS
-/datum/emote/living/audio/monkeytwerk
+/datum/emote/sound/human/monkeytwerk
key = "twerk"
key_third_person = "twerks"
message = "shakes it harder than James Russle himself!"
- emote_sound = 'modular_splurt/sound/misc/monkey_twerk.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/misc/monkey_twerk.ogg'
emote_cooldown = 3.2 SECONDS
-/datum/emote/living/audio/bruh
+/datum/emote/sound/human/bruh
key = "bruh"
key_third_person = "bruhs"
message = "thinks this is a bruh moment."
message_mime = "silently acknowledges the bruh moment."
- emote_sound = 'modular_splurt/sound/voice/bruh.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bruh.ogg'
emote_cooldown = 0.6 SECONDS
-/datum/emote/living/audio/bababooey
+/datum/emote/sound/human/bababooey
key = "bababooey"
key_third_person = "bababooeys"
message = "spews bababooey."
message_mime = "spews something silently."
- emote_sound = 'modular_splurt/sound/voice/bababooey/bababooey.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bababooey/bababooey.ogg'
emote_cooldown = 0.9 SECONDS
-/datum/emote/living/audio/bababooey/run_emote(mob/user, params)
+/datum/emote/sound/human/bababooey/run_emote(mob/user, params)
// Check if user is muzzled
if(user.is_muzzled())
// Set muzzled sound
- emote_sound = 'modular_splurt/sound/voice/bababooey/ffff.ogg'
+ sound = 'modular_splurt/sound/voice/bababooey/ffff.ogg'
// User is not muzzled
else
// Set random emote sound
- emote_sound = pick('modular_splurt/sound/voice/bababooey/bababooey.ogg', 'modular_splurt/sound/voice/bababooey/bababooey2.ogg')
+ sound = pick('modular_splurt/sound/voice/bababooey/bababooey.ogg', 'modular_splurt/sound/voice/bababooey/bababooey2.ogg')
// Return normally
. = ..()
-/datum/emote/living/audio/babafooey
+/datum/emote/sound/human/babafooey
key = "babafooey"
key_third_person = "babafooeys"
message = "spews babafooey."
message_mime = "spews something silently."
- emote_sound = 'modular_splurt/sound/voice/bababooey/babafooey.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bababooey/babafooey.ogg'
emote_cooldown = 0.85 SECONDS
-/datum/emote/living/audio/fafafooey
+/datum/emote/sound/human/fafafooey
key = "fafafooey"
key_third_person = "fafafooeys"
message = "spews fafafooey."
message_mime = "spews something silently."
- emote_sound = 'modular_splurt/sound/voice/bababooey/fafafooey.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bababooey/fafafooey.ogg'
emote_cooldown = 0.7 SECONDS
-/datum/emote/living/audio/fafafooey/run_emote(mob/user, params)
+/datum/emote/sound/human/fafafooey/run_emote(mob/user, params)
// Check if user is muzzled
if(user.is_muzzled())
// Set muzzled sound
- emote_sound = 'modular_splurt/sound/voice/bababooey/ffff.ogg'
+ sound = 'modular_splurt/sound/voice/bababooey/ffff.ogg'
// User is not muzzled
else
// Set random emote sound
- emote_sound = pick('modular_splurt/sound/voice/bababooey/fafafooey.ogg', 'modular_splurt/sound/voice/bababooey/fafafooey2.ogg', 'modular_splurt/sound/voice/bababooey/fafafooey3.ogg')
+ sound = pick('modular_splurt/sound/voice/bababooey/fafafooey.ogg', 'modular_splurt/sound/voice/bababooey/fafafooey2.ogg', 'modular_splurt/sound/voice/bababooey/fafafooey3.ogg')
// Return normally
. = ..()
-/datum/emote/living/audio/fafafoggy
+/datum/emote/sound/human/fafafoggy
key = "fafafoggy"
key_third_person = "fafafoggys"
message = "spews fafafoggy."
message_mime = "spews something silently."
- emote_sound = 'modular_splurt/sound/voice/bababooey/fafafoggy.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bababooey/fafafoggy.ogg'
emote_cooldown = 0.9 SECONDS
-/datum/emote/living/audio/fafafoggy/run_emote(mob/user, params)
+/datum/emote/sound/human/fafafoggy/run_emote(mob/user, params)
// Check if user is muzzled
if(user.is_muzzled())
// Set muzzled sound
- emote_sound = 'modular_splurt/sound/voice/bababooey/ffff.ogg'
+ sound = 'modular_splurt/sound/voice/bababooey/ffff.ogg'
// User is not muzzled
else
// Set random emote sound
- emote_sound = pick('modular_splurt/sound/voice/bababooey/fafafoggy.ogg', 'modular_splurt/sound/voice/bababooey/fafafoggy2.ogg')
+ sound = pick('modular_splurt/sound/voice/bababooey/fafafoggy.ogg', 'modular_splurt/sound/voice/bababooey/fafafoggy2.ogg')
// Return normally
. = ..()
-/datum/emote/living/audio/hohohoy
+/datum/emote/sound/human/hohohoy
key = "hohohoy"
key_third_person = "hohohoys"
message = "spews hohohoy."
message_mime = "spews something silently."
- emote_sound = 'modular_splurt/sound/voice/bababooey/hohohoy.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bababooey/hohohoy.ogg'
emote_cooldown = 0.7 SECONDS
-/datum/emote/living/audio/ffff
+/datum/emote/sound/human/ffff
key = "ffff"
key_third_person = "ffffs"
message = "spews something softly."
message_mime = "spews something silently."
muzzle_ignore = TRUE
- emote_sound = 'modular_splurt/sound/voice/bababooey/ffff.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bababooey/ffff.ogg'
emote_cooldown = 0.85 SECONDS
-/datum/emote/living/audio/fafafail
+/datum/emote/sound/human/fafafail
key = "fafafail"
key_third_person = "fafafails"
message = "spews something unintelligible."
message_mime = "spews something silent."
- emote_sound = 'modular_splurt/sound/voice/bababooey/ffffhvh.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bababooey/ffffhvh.ogg'
emote_cooldown = 1.15 SECONDS
-/datum/emote/living/audio/boowomp
+/datum/emote/sound/human/boowomp
key = "boowomp"
key_third_person = "boowomps"
message = "produces a sad boowomp."
message_mime = "produces a silent boowomp."
- emote_sound = 'modular_splurt/sound/voice/boowomp.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/boowomp.ogg'
emote_cooldown = 0.4 SECONDS
-/datum/emote/living/audio/swaos
+/datum/emote/sound/human/swaos
key = "swaos"
key_third_person = "swaos"
message = "mutters swaos."
message_mime = "imitates swaos."
- emote_sound = 'modular_splurt/sound/voice/swaos.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/swaos.ogg'
emote_cooldown = 0.7 SECONDS
-/datum/emote/living/audio/eyebrow2
+/datum/emote/sound/human/eyebrow2
key = "eyebrow2"
key_third_person = "eyebrows2"
+ name = "raise eyebrow"
message = "raises an eyebrow."
message_mime = "raises an eyebrow with quaking force!"
- emote_sound = 'modular_splurt/sound/voice/vineboom.ogg'
+ emote_type = EMOTE_VISIBLE
+ sound = 'modular_splurt/sound/voice/vineboom.ogg'
emote_cooldown = 2.9 SECONDS
-/datum/emote/living/audio/eyebrow3
+/datum/emote/sound/human/eyebrow3
key = "eyebrow3"
key_third_person = "eyebrows3"
+ name = "eyebrow quizzaciously"
message = "raises an eyebrow quizzaciously."
- emote_sound = 'modular_splurt/sound/voice/moonmen.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/moonmen.ogg'
emote_cooldown = 7 SECONDS
-/datum/emote/living/audio/blink2
+/datum/emote/sound/human/blink2
key = "blink2"
key_third_person = "blinks2"
+ name = "blink expressively"
message = "blinks."
message_mime = "blinks expressively."
- emote_sound = 'modular_splurt/sound/voice/blink.ogg'
+ emote_type = EMOTE_VISIBLE
+ sound = 'modular_splurt/sound/voice/blink.ogg'
emote_cooldown = 0.25 SECONDS
-/datum/emote/living/audio/laugh2
+/datum/emote/sound/human/laugh2
key = "laugh2"
key_third_person = "laughs2"
+ name = "king laugh"
message = "laughs like a king."
message_mime = "acts out laughing like a king."
- emote_sound = 'modular_splurt/sound/voice/laugh_king.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/laugh_king.ogg'
// No cooldown var required
-/datum/emote/living/audio/laugh3
+/datum/emote/sound/human/laugh3
key = "laugh3"
key_third_person = "laughs3"
+ name = "silly laugh"
message = "laughs silly."
message_mime = "acts out laughing silly."
- emote_sound = 'modular_splurt/sound/voice/lol.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/lol.ogg'
emote_cooldown = 6.1 SECONDS
-/datum/emote/living/audio/laugh4
+/datum/emote/sound/human/laugh4
key = "laugh4"
key_third_person = "laughs4"
+ name = "burst laughter"
message = "burst into laughter!"
message_mime = "acts out bursting into laughter."
- emote_sound = 'modular_splurt/sound/voice/laugh_muta.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/laugh_muta.ogg'
emote_cooldown = 3 SECONDS
-/datum/emote/living/audio/laugh5
+/datum/emote/sound/human/laugh5
key = "laugh5"
key_third_person = "laughs5"
+ name = "scottish laugh"
message = "laughs in Scottish."
message_mime = "acts out laughing in Scottish."
- emote_sound = 'modular_splurt/sound/voice/laugh_deman.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/laugh_deman.ogg'
emote_cooldown = 2.75 SECONDS
-/datum/emote/living/audio/laugh6
+/datum/emote/sound/human/laugh6
key = "laugh6"
key_third_person = "laughs6"
+ name = "kettle laugh"
message = "laughs like a kettle!"
message_mime = "acts out laughing like a kettle."
- emote_sound = 'modular_splurt/sound/voice/laugh6.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/laugh6.ogg'
emote_cooldown = 4.45 SECONDS
-/datum/emote/living/audio/breakbad
+/datum/emote/sound/human/breakbad
key = "breakbad"
key_third_person = "breakbads"
message = "stares intensively with determination."
- emote_sound = 'modular_splurt/sound/voice/breakbad.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/breakbad.ogg'
emote_cooldown = 6.4 SECONDS
-/datum/emote/living/audio/lawyerup
+/datum/emote/sound/human/lawyerup
key = "lawyerup"
key_third_person = "lawyerups"
+ name = "aura expertise"
message = "emits an aura of expertise."
- emote_sound = 'modular_splurt/sound/voice/lawyerup.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/lawyerup.ogg'
emote_cooldown = 7.5 SECONDS
-/datum/emote/living/audio/goddamn
+/datum/emote/sound/human/goddamn
key = "damn"
key_third_person = "damns"
+ name = "gah damn"
message = "is in utter stupor."
message_mime = "appears to be in utter stupor."
- emote_sound = 'modular_splurt/sound/voice/god_damn.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/god_damn.ogg'
emote_cooldown = 1.25 SECONDS
-/datum/emote/living/audio/spoonful
+/datum/emote/sound/human/spoonful
key = "spoonful"
key_third_person = "spoonfuls"
message = "asks for a spoonful."
message_mime = "pretends to ask for a spoonful."
- emote_sound = 'modular_splurt/sound/voice/spoonful.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/spoonful.ogg'
// No cooldown var required
-/datum/emote/living/audio/ohhmygod
+/datum/emote/sound/human/ohhmygod
key = "mygod"
key_third_person = "omgs"
+ name = "oooh my god"
message = "invokes the presence of Jesus Christ."
message_mime = "invokes the presence of Jesus Christ through silent prayer."
- emote_sound = 'modular_splurt/sound/voice/OMG.ogg'
+ emote_type = EMOTE_OMNI
+ sound = 'modular_splurt/sound/voice/OMG.ogg'
emote_cooldown = 1.6 SECONDS
-/datum/emote/living/audio/whatthehell
+/datum/emote/sound/human/whatthehell
key = "wth"
key_third_person = "wths"
+ name = "whut the heeell"
message = "condemns the abysses of hell!"
message_mime = "silently condemns the abysses of hell!"
- emote_sound = 'modular_splurt/sound/voice/WTH.ogg'
+ emote_type = EMOTE_OMNI
+ sound = 'modular_splurt/sound/voice/WTH.ogg'
emote_cooldown = 4.4 SECONDS
-/datum/emote/living/audio/fusrodah
+/datum/emote/sound/human/fusrodah
key = "fusrodah"
key_third_person = "furodahs"
message = "yells, \"FUS RO DAH!!!\""
message_mime = "acts out a dragon shout."
- emote_sound = 'modular_splurt/sound/voice/fusrodah.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/fusrodah.ogg'
emote_cooldown = 7 SECONDS
-/datum/emote/living/audio/skibidi
+/datum/emote/sound/human/skibidi
key = "skibidi"
key_third_person = "skibidis"
+ name = "skibidi bop mm dada"
message = "yells, \"Skibidi bop mm dada!\""
message_mime = "makes incoherent mouth motions."
- emote_sound = 'modular_splurt/sound/voice/skibidi.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/skibidi.ogg'
emote_cooldown = 1.1 SECONDS
-/datum/emote/living/audio/fbi
+/datum/emote/sound/human/fbi
key = "fbi"
key_third_person = "fbis"
message = "yells, \"FBI OPEN UP!\""
message_mime = "acts out being the FBI."
- emote_sound = 'modular_splurt/sound/voice/fbi.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/fbi.ogg'
emote_cooldown = 2 SECONDS
-/datum/emote/living/audio/illuminati
+/datum/emote/sound/human/illuminati
key = "illuminati"
key_third_person = "illuminatis"
message = "exudes a mysterious aura!"
- emote_sound = 'modular_splurt/sound/voice/illuminati.ogg'
+ emote_type = EMOTE_OMNI
+ sound = 'modular_splurt/sound/voice/illuminati.ogg'
emote_cooldown = 7.8 SECONDS
-/datum/emote/living/audio/bonerif
+/datum/emote/sound/human/bonerif
key = "bonerif"
key_third_person = "bonerifs"
message = "riffs!"
message_mime = "riffs silently!"
- emote_sound = 'modular_splurt/sound/voice/bonerif.ogg'
+ emote_type = EMOTE_VISIBLE
+ restraint_check = TRUE
+ sound = 'modular_splurt/sound/voice/bonerif.ogg'
emote_cooldown = 2 SECONDS
-/datum/emote/living/audio/cry2
+/datum/emote/sound/human/cry2
key = "cry2"
key_third_person = "cries2"
+ name = "king cry"
message = "cries like a king."
message_mime = "acts out crying like a king."
- emote_sound = 'modular_splurt/sound/voice/cry_king.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/cry_king.ogg'
emote_cooldown = 1.6 SECONDS // Uses longest sound's time
-/datum/emote/living/audio/cry2/run_emote(mob/user, params)
+/datum/emote/sound/human/cry2/run_emote(mob/user, params)
// Set random emote sound
- emote_sound = pick('modular_splurt/sound/voice/cry_king.ogg', 'modular_splurt/sound/voice/cry_king2.ogg')
+ sound = pick('modular_splurt/sound/voice/cry_king.ogg', 'modular_splurt/sound/voice/cry_king2.ogg')
// Return normally
. = ..()
-/datum/emote/living/audio/choir
+/datum/emote/sound/human/choir
key = "choir"
key_third_person = "choirs"
message = "let out a choir!"
message_mime = "acts out a choir."
- emote_sound = 'modular_splurt/sound/voice/choir.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/choir.ogg'
emote_cooldown = 6 SECONDS
-/datum/emote/living/audio/agony
+/datum/emote/sound/human/agony
key = "agony"
key_third_person = "agonys"
message = "let out a choir of agony!"
message_mime = "is visibly in agony."
- emote_sound = 'modular_splurt/sound/voice/agony.ogg'
+ emote_type = EMOTE_OMNI
+ sound = 'modular_splurt/sound/voice/agony.ogg'
emote_cooldown = 7 SECONDS
-/datum/emote/living/audio/wtune
+/datum/emote/sound/human/wtune
key = "whistletune"
key_third_person = "whistletunes"
message = "whistles a tune."
message_mime = "makes an expression as if whistling."
- emote_sound = 'modular_splurt/sound/voice/wtune1.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/wtune1.ogg'
emote_cooldown = 4.55 SECONDS // Uses longest sound's time.
-/datum/emote/living/audio/wtune/run_emote(mob/user, params)
+/datum/emote/sound/human/wtune/run_emote(mob/user, params)
// Set random emote sound
- emote_sound = pick('modular_splurt/sound/voice/wtune1.ogg', 'modular_splurt/sound/voice/wtune2.ogg')
+ sound = pick('modular_splurt/sound/voice/wtune1.ogg', 'modular_splurt/sound/voice/wtune2.ogg')
// Return normally
. = ..()
-/datum/emote/living/audio/fiufiu
+/datum/emote/sound/human/fiufiu
key = "wolfwhistle"
key_third_person = "wolfwhistles"
message = "wolf-whistles!" // i am not creative
message_param = "audibly approves %t's appearance."
message_mime = "makes an expression as if inappropriately whistling."
- emote_sound = 'modular_splurt/sound/voice/wolfwhistle.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/wolfwhistle.ogg'
emote_cooldown = 0.78 SECONDS
-/datum/emote/living/audio/terror
+/datum/emote/sound/human/terror
key = "terror"
key_third_person = "terrors"
+ name = "dreadful tune"
message = "whistles some dreadful tune..."
message_mime = "stares with aura full of dread..."
- emote_sound = 'modular_splurt/sound/voice/terror1.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/terror1.ogg'
emote_cooldown = 13.07 SECONDS // Uses longest sound's time.
-/datum/emote/living/audio/terror/run_emote(mob/user, params)
+/datum/emote/sound/human/terror/run_emote(mob/user, params)
// Set random emote sound
- emote_sound = pick('modular_splurt/sound/voice/terror1.ogg', 'modular_splurt/sound/voice/terror2.ogg')
+ sound = pick('modular_splurt/sound/voice/terror1.ogg', 'modular_splurt/sound/voice/terror2.ogg')
// Return normally
. = ..()
-/datum/emote/living/audio/deathglare
+/datum/emote/sound/human/deathglare
key = "glare2"
key_third_person = "glares2"
message = "glares."
message_param = "glares at %t."
- emote_sound = 'modular_splurt/sound/voice/deathglare.ogg'
+ emote_type = EMOTE_VISIBLE
+ sound = 'modular_splurt/sound/voice/deathglare.ogg'
emote_cooldown = 4.4 SECONDS
-/datum/emote/living/audio/sicko
- key = "sicko"
- key_third_person = "sickos"
- message = "briefly goes sicko mode!"
- message_mime = "briefly imitates sicko mode!"
- emote_sound = 'modular_splurt/sound/voice/sicko.ogg'
- emote_cooldown = 0.8 SECONDS
-/datum/emote/living/audio/chill
+/datum/emote/sound/human/chill
key = "chill"
key_third_person = "chills"
message = "feels a chill running down their spine..."
message_mime = "acts out a chill running down their spine..."
- emote_sound = 'modular_splurt/sound/voice/waterphone.ogg'
+ emote_type = EMOTE_VISIBLE
+ sound = 'modular_splurt/sound/voice/waterphone.ogg'
emote_cooldown = 3.4 SECONDS
-/datum/emote/living/audio/taunt
+/datum/emote/sound/human/taunt
key = "tt"
key_third_person = "taunts"
+ name = "strike pose"
message = "strikes a pose!"
message_param = "taunts %t!"
- emote_sound = 'modular_splurt/sound/voice/phillyhit.ogg'
+ emote_type = EMOTE_VISIBLE
+ restraint_check = TRUE
+ sound = 'modular_splurt/sound/voice/phillyhit.ogg'
-/datum/emote/living/audio/taunt/alt
+/datum/emote/sound/human/taunt/alt
key = "tt2"
key_third_person = "taunts2"
+ name = "strike pose 2"
emote_volume = 100
- emote_sound = 'modular_splurt/sound/voice/orchestrahit.ogg'
+ sound = 'modular_splurt/sound/voice/orchestrahit.ogg'
-/datum/emote/living/audio/weh2
+/datum/emote/sound/human/weh2
key = "weh2"
key_third_person = "wehs2"
+ name = "weh 2"
message = "let out a weh!"
message_mime = "acts out a weh!"
- emote_sound = 'modular_splurt/sound/voice/weh2.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/weh2.ogg'
emote_cooldown = 0.25 SECONDS
-/datum/emote/living/audio/weh3
+/datum/emote/sound/human/weh3
key = "weh3"
key_third_person = "wehs3"
+ name = "weh 3"
message = "let out a weh!"
message_mime = "acts out a weh!"
- emote_sound = 'modular_splurt/sound/voice/weh3.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/weh3.ogg'
emote_cooldown = 0.25 SECONDS
-/datum/emote/living/audio/weh4
+/datum/emote/sound/human/weh4
key = "weh4"
key_third_person = "wehs4"
+ name = "surprised weh"
message = "let out a surprised weh!"
message_mime = "acts out a surprised weh!"
- emote_sound = 'modular_splurt/sound/voice/weh_s.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/weh_s.ogg'
emote_cooldown = 0.35 SECONDS
-/datum/emote/living/audio/waa
+/datum/emote/sound/human/waa
key = "waa"
key_third_person = "waas"
message = "let out a waa!"
message_mime = "acts out a waa!"
- emote_sound = 'modular_splurt/sound/voice/waa.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/waa.ogg'
emote_cooldown = 3.5 SECONDS
-/datum/emote/living/audio/bark2
+/datum/emote/sound/human/bark2
key = "bark2"
key_third_person = "barks2"
+ name = "bark 2"
message = "barks!"
message_mime = "acts out a bark!"
- emote_sound = 'modular_splurt/sound/voice/bark_alt.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bark_alt.ogg'
emote_cooldown = 0.35 SECONDS
-/datum/emote/living/audio/yap
+/datum/emote/sound/human/yap
key = "yap"
key_third_person = "yaps"
message = "yaps!"
message_mime = "acts out a yap!"
- emote_sound = 'modular_splurt/sound/voice/yap.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/yap.ogg'
emote_cooldown = 0.28 SECONDS
-/datum/emote/living/audio/yip
+/datum/emote/sound/human/yip
key = "yip"
key_third_person = "yips"
message = "yips!"
message_mime = "acts out a yip!"
- emote_sound = 'modular_splurt/sound/voice/yip.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/yip.ogg'
emote_cooldown = 0.2 SECONDS
-/datum/emote/living/audio/bork
+/datum/emote/sound/human/bork
key = "bork"
key_third_person = "borks"
message = "borks!"
message_mime = "acts out a bork!"
- emote_sound = 'modular_splurt/sound/voice/bork.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bork.ogg'
emote_cooldown = 0.4 SECONDS
-/datum/emote/living/audio/woof
+/datum/emote/sound/human/woof
key = "woof"
key_third_person = "woofs"
message = "woofs!"
message_mime = "acts out a woof!"
- emote_sound = 'modular_splurt/sound/voice/woof.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/woof.ogg'
emote_cooldown = 0.71 SECONDS
-/datum/emote/living/audio/woof/alt
+/datum/emote/sound/human/woof/alt
key = "woof2"
key_third_person = "woofs2"
- emote_sound = 'modular_splurt/sound/voice/woof2.ogg'
+ name = "woof 2"
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/woof2.ogg'
emote_cooldown = 0.3 SECONDS
-/datum/emote/living/audio/howl
+/datum/emote/sound/human/howl
key = "howl"
key_third_person = "howls"
message = "howls!"
message_mime = "acts out a howl!"
- emote_sound = 'modular_splurt/sound/voice/wolfhowl.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/wolfhowl.ogg'
emote_cooldown = 2.04 SECONDS
-/datum/emote/living/audio/coyhowl
+/datum/emote/sound/human/coyhowl
key = "coyhowl"
key_third_person = "coyhowls"
+ name = "coyote howl"
message = "howls like coyote!"
message_mime = "acts out a coyote's howl!"
- emote_sound = 'modular_splurt/sound/voice/coyotehowl.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/coyotehowl.ogg'
emote_cooldown = 2.94 SECONDS // Uses longest sound's time
-/datum/emote/living/audio/coyhowl/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/coyotehowl.ogg', 'modular_splurt/sound/voice/coyotehowl2.ogg', 'modular_splurt/sound/voice/coyotehowl3.ogg', 'modular_splurt/sound/voice/coyotehowl4.ogg', 'modular_splurt/sound/voice/coyotehowl5.ogg')
+/datum/emote/sound/human/coyhowl/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/coyotehowl.ogg', 'modular_splurt/sound/voice/coyotehowl2.ogg', 'modular_splurt/sound/voice/coyotehowl3.ogg', 'modular_splurt/sound/voice/coyotehowl4.ogg', 'modular_splurt/sound/voice/coyotehowl5.ogg')
. = ..()
/datum/emote/living/mlem
@@ -832,15 +768,17 @@
message = "sticks their tongue for a moment. Mlem!"
emote_type = EMOTE_VISIBLE
-/datum/emote/living/audio/snore/snore2
+/datum/emote/sound/human/snore/snore2
key = "snore2"
key_third_person = "snores2"
+ name = "earthshaking snore"
message = "lets out an earthshaking snore"
message_mime = "lets out an inaudible snore!"
- emote_sound = 'modular_splurt/sound/voice/aauugghh1.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/aauugghh1.ogg'
emote_cooldown = 2.1 SECONDS
-/datum/emote/living/audio/snore/snore2/run_emote(mob/user, params)
+/datum/emote/sound/human/snore/snore2/run_emote(mob/user, params)
var/datum/dna/D = user.has_dna()
var/say_mod = (D ? D.species.say_mod : "says")
var/list/aaauughh = list(
@@ -851,7 +789,7 @@
message = pick(aaauughh)
// Set random emote sound
- emote_sound = pick('modular_splurt/sound/voice/aauugghh1.ogg', 'modular_splurt/sound/voice/aauugghh2.ogg')
+ sound = pick('modular_splurt/sound/voice/aauugghh1.ogg', 'modular_splurt/sound/voice/aauugghh2.ogg')
// Return normally
. = ..()
@@ -859,6 +797,7 @@
/datum/emote/living/pant
key = "pant"
key_third_person = "pants"
+ emote_type = EMOTE_VISIBLE
message = "pants!"
/datum/emote/living/pant/run_emote(mob/user, params, type_override, intentional)
@@ -866,107 +805,80 @@
"pants!",
"pants like a dog.",
"lets out soft pants.",
- "pulls [user.p_their()] tongue out, panting."
+ "pulls their tongue out, panting."
)
message = pick(pants)
. = ..()
-/datum/emote/living/audio/yippee
+/datum/emote/sound/human/yippee
key = "yippee"
key_third_person = "yippees"
message = "lets out a yippee!"
message_mime = "acts out a yippee!"
- emote_sound = 'modular_splurt/sound/voice/yippee.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/yippee.ogg'
emote_cooldown = 1.2 SECONDS
-/datum/emote/living/audio/mewo
+/datum/emote/sound/human/mewo
key = "mewo"
key_third_person = "mewos"
message = "mewos!"
message_mime = "mewos silently!"
- emote_sound = 'modular_splurt/sound/voice/mewo.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/mewo.ogg'
emote_cooldown = 0.7 SECONDS
-/datum/emote/living/audio/ara_ara
+/datum/emote/sound/human/ara_ara
key = "ara"
key_third_person = "aras"
+ name = "ara ara"
message = "coos with sultry surprise~..."
message_mime = "exudes a sultry aura~"
- emote_sound = 'modular_splurt/sound/voice/ara-ara.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/ara-ara.ogg'
emote_cooldown = 1.25 SECONDS
-/datum/emote/living/audio/ara_ara/alt
+/datum/emote/sound/human/ara_ara/alt
key = "ara2"
- emote_sound = 'modular_splurt/sound/voice/ara-ara2.ogg'
+ name = "ara ara 2"
+ sound = 'modular_splurt/sound/voice/ara-ara2.ogg'
emote_cooldown = 1.3 SECONDS
-/datum/emote/living/audio/missouri
+/datum/emote/sound/human/missouri
key = "missouri"
key_third_person = "missouris"
message = "has relocated to Missouri."
message_mime = "starts thinking about Missouri."
- emote_sound = 'modular_splurt/sound/voice/missouri.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/missouri.ogg'
emote_cooldown = 3.4 SECONDS
-/datum/emote/living/audio/missouri/run_emote(mob/user, params)
+/datum/emote/sound/human/missouri/run_emote(mob/user, params)
// Set message pronouns
message = "appears to believe [user.p_theyre()] in Missouri."
// Return normally
. = ..()
-/datum/emote/living/audio/facemetacarpus
- key = "facehand" // Facepalm was taken
+/datum/emote/sound/human/facemetacarpus
+ key = "facehand"
key_third_person = "facepalms"
- // Message is generated from metacarpus_type below. You shouldn't see this!
- message = "creates an error in the code." // Hear a slapping sound
- muzzle_ignore = TRUE // Not a spoken emote
- restraint_check = TRUE // Uses your hands
- emote_sound = 'modular_splurt/sound/effects/slap.ogg'
- // Defines appendage type for generated message
- var/metacarpus_type = "palm" // Default to hands
+ message = "facepalms."
+ emote_type = EMOTE_VISIBLE
+ sound = 'modular_splurt/sound/effects/slap.ogg'
emote_cooldown = 0.25 SECONDS
-/datum/emote/living/audio/facemetacarpus/run_emote(mob/user, params)
- // Randomly pick a message using metacarpus_type for hand
- message = pick(list(
- "places [usr.p_their()] [metacarpus_type] across [usr.p_their()] face.",
- "lowers [usr.p_their()] face into [usr.p_their()] [metacarpus_type].",
- "face[metacarpus_type]s",
- ))
-
- // Return normally
- . = ..()
-
-/datum/emote/living/audio/facemetacarpus/paw
- key = "facepaw" // For furries
- key_third_person = "facepaws"
- metacarpus_type = "paw"
-
-/datum/emote/living/audio/facemetacarpus/claw
- key = "faceclaw" // For scalies and avians
- key_third_person = "faceclaws"
- metacarpus_type = "claw"
-
-/datum/emote/living/audio/facemetacarpus/wing
- key = "facewing" // For avians, harpies or just anyone with wings
- key_third_person = "facewings"
- metacarpus_type = "wing"
-
-/datum/emote/living/audio/facemetacarpus/hoof
- key = "facehoof" // For horse enthusiasts
- key_third_person = "facehoofs"
- metacarpus_type = "hoof"
-
-/datum/emote/living/audio/poyo
+/datum/emote/sound/human/poyo
key = "poyo"
key_third_person = "poyos"
message = "%SAYS, \"Poyo!\""
message_mime = "acts out an excited motion!"
- emote_sound = 'modular_splurt/sound/voice/barks/poyo.ogg'
- // No cooldown var required
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/barks/poyo.ogg'
+ emote_cooldown = 1 SECONDS // Absolutely give this emote a cooldown.
-/datum/emote/living/audio/poyo/run_emote(mob/user, params)
+
+/datum/emote/sound/human/poyo/run_emote(mob/user, params)
var/datum/dna/D = user.has_dna()
var/say_mod = (D ? D.species.say_mod : "says")
message = replacetextEx(message, "%SAYS", say_mod)
@@ -974,541 +886,610 @@
// Return normally
. = ..()
-/datum/emote/living/audio/rizz
+/datum/emote/sound/human/rizz
key = "rizz"
key_third_person = "rizzes"
+ name = "THE LOOK"
message = "gives \[The Look\]."
message_param = "looks at %t with bedroom eyes."
message_mime = "makes bedroom eyes."
- emote_sound = 'modular_splurt/sound/voice/rizz.ogg'
+ emote_type = EMOTE_VISIBLE
+ sound = 'modular_splurt/sound/voice/rizz.ogg'
emote_cooldown = 1.43 SECONDS
-/datum/emote/living/audio/buff
+/datum/emote/sound/human/buff
key = "buff"
key_third_person = "buffs"
+ name = "show muscles"
message = "shows off their muscles."
message_param = "shows off their muscles to %t."
- emote_sound = 'modular_splurt/sound/voice/buff.ogg'
+ emote_type = EMOTE_VISIBLE
+ sound = 'modular_splurt/sound/voice/buff.ogg'
emote_cooldown = 4.77 SECONDS
emote_pitch_variance = FALSE
-/datum/emote/living/audio/merowr
+/datum/emote/sound/human/merowr
key = "merowr"
key_third_person = "merowrs"
message = "merowrs!"
message_mime = "acts out a merowr!"
- emote_sound = 'modular_splurt/sound/voice/merowr.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/merowr.ogg'
emote_cooldown = 1.2 SECONDS
-/datum/emote/living/audio/hoot
+/datum/emote/sound/human/hoot
key = "hoot"
key_third_person = "hoots"
message = "hoots!"
message_mime = "acts out a hoot!"
- emote_sound = 'modular_splurt/sound/voice/hoot.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/hoot.ogg'
emote_cooldown = 2.4 SECONDS
-/datum/emote/living/audio/wurble
+/datum/emote/sound/human/wurble
key = "wurble"
key_third_person = "wurbles"
message = "wurbles!"
message_mime = "acts out a wurbling!"
- emote_sound = 'modular_splurt/sound/voice/wurble.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/wurble.ogg'
emote_cooldown = 2.3 SECONDS
-/datum/emote/living/audio/warble
+/datum/emote/sound/human/warble
key = "warble"
key_third_person = "warbles"
message = "warbles!"
message_mime = "acts out a warbling!"
- emote_sound = 'modular_splurt/sound/voice/warble.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/warble.ogg'
emote_cooldown = 0.4 SECONDS
-// At the moment of adding it I just realized there's Tesh test-merge going on, so I've added numeral in case if that gets merged in the long run.
-/datum/emote/living/audio/trill2
+//Teshari took *trill
+/datum/emote/sound/human/trill2
key = "trill2"
key_third_person = "trills2"
+ name = "trill"
message = "trills!"
message_mime = "acts out a trilling!"
- emote_sound = 'modular_splurt/sound/voice/trill.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/trill.ogg'
emote_cooldown = 1 SECONDS
-/datum/emote/living/audio/rattlesnek
+/datum/emote/sound/human/rattlesnek
key = "rattle"
key_third_person = "rattles"
message = "rattles!"
message_mime = "acts like a rattling snake."
- emote_sound = 'modular_splurt/sound/voice/rattle.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/rattle.ogg'
emote_cooldown = 4 SECONDS
-/datum/emote/living/audio/rpurr
+/datum/emote/sound/human/rpurr
key = "rpurr"
key_third_person = "rpurrs"
+ name = "raptor purr"
message = "purrs like raptor!"
message_mime = "acts like a purring raptor."
- emote_sound = 'modular_splurt/sound/voice/raptor_purr.ogg'
+ emote_type = EMOTE_BOTH
+ sound = 'modular_splurt/sound/voice/raptor_purr.ogg'
emote_cooldown = 1.5 SECONDS
-/datum/emote/living/audio/bawk
+/datum/emote/sound/human/bawk
key = "bawk"
key_third_person = "bawks"
message = "bawks!"
message_mime = "acts like a bawking chicken."
- emote_sound = 'modular_splurt/sound/voice/bawk.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/bawk.ogg'
emote_cooldown = 0.5 SECONDS
-/datum/emote/living/audio/moo
+/datum/emote/sound/human/moo
key = "moo"
key_third_person = "moos"
message = "moos!"
message_mime = "acts like a mooing cow."
- emote_sound = 'modular_splurt/sound/voice/moo.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/moo.ogg'
emote_cooldown = 1.7 SECONDS
-/datum/emote/living/audio/coo
+/datum/emote/sound/human/coo
key = "coo"
key_third_person = "coos"
message = "coos."
message_mime = "acts like a cooing pidgeon."
emote_volume = 30
- emote_sound = 'modular_splurt/sound/voice/coo.ogg'
+ sound = 'modular_splurt/sound/voice/coo.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 0.78 SECONDS
-/datum/emote/living/audio/untitledgoose
+/datum/emote/sound/human/untitledgoose
key = "goosehonk"
- key_third_person = "honks"
+ key_third_person = "goosehonks"
+ name = "goose honk"
message = "honks!"
message_mime = "looks like a duck from hell!"
- emote_sound = 'modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_01.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_01.ogg'
emote_cooldown = 0.8 SECONDS
-/datum/emote/living/audio/untitledgoose/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_01.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_02.ogg','modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_03.ogg','modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_06.ogg')
+/datum/emote/sound/human/untitledgoose/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_01.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_02.ogg','modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_03.ogg','modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_06.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_02.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_03.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_04.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_06.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_07.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_08.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_09.ogg')
. = ..()
-/datum/emote/living/audio/untitledgooseB
- key = "goosehonkb"
- key_third_person = "honks differently"
- message = "honks differently!"
- message_mime = "looks like a duck from hell!"
- emote_sound = 'modular_splurt/sound/voice/goosehonk/sfx_goose_honk_b_01.ogg'
- emote_cooldown = 0.8 SECONDS
-
-/datum/emote/living/audio/untitledgooseB/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_02.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_03.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_04.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_06.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_07.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_08.ogg', 'modular_splurt/sound/voice/goosehonk/sfx_gooseB_honk_09.ogg')
- . = ..()
-
-/datum/emote/living/audio/scream2
+/datum/emote/sound/human/scream2
key = "scream2"
key_third_person = "screams2"
+ name = "silly scream"
message = "screams!"
message_mime = "acts out a rather silly scream!"
- emote_sound = 'modular_splurt/sound/voice/cscream1.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/cscream1.ogg'
emote_cooldown = 3.3 SECONDS // Uses longest sound's time.
emote_pitch_variance = FALSE
-/datum/emote/living/audio/scream2/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/cscream1.ogg', 'modular_splurt/sound/voice/cscream2.ogg', 'modular_splurt/sound/voice/cscream3.ogg', 'modular_splurt/sound/voice/cscream4.ogg', 'modular_splurt/sound/voice/cscream5.ogg', 'modular_splurt/sound/voice/cscream6.ogg', 'modular_splurt/sound/voice/cscream7.ogg', 'modular_splurt/sound/voice/cscream8.ogg', 'modular_splurt/sound/voice/cscream9.ogg', 'modular_splurt/sound/voice/cscream10.ogg', 'modular_splurt/sound/voice/cscream11.ogg', 'modular_splurt/sound/voice/cscream12.ogg')
+/datum/emote/sound/human/scream2/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/cscream1.ogg', 'modular_splurt/sound/voice/cscream2.ogg', 'modular_splurt/sound/voice/cscream3.ogg', 'modular_splurt/sound/voice/cscream4.ogg', 'modular_splurt/sound/voice/cscream5.ogg', 'modular_splurt/sound/voice/cscream6.ogg', 'modular_splurt/sound/voice/cscream7.ogg', 'modular_splurt/sound/voice/cscream8.ogg', 'modular_splurt/sound/voice/cscream9.ogg', 'modular_splurt/sound/voice/cscream10.ogg', 'modular_splurt/sound/voice/cscream11.ogg', 'modular_splurt/sound/voice/cscream12.ogg')
. = ..()
// Here comes gachimuchi
-/datum/emote/living/audio/scream3
+/datum/emote/sound/human/scream3
key = "scream3"
key_third_person = "screams3"
+ name = "gachi scream"
message = "screams manly!"
message_mime = "acts out a rather manly scream!"
- emote_sound = 'modular_splurt/sound/voice/gachi/scream1.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/gachi/scream1.ogg'
emote_cooldown = 4.64 SECONDS // Uses longest sound's time.
-/datum/emote/living/audio/scream3/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/gachi/scream1.ogg', 'modular_splurt/sound/voice/gachi/scream2.ogg', 'modular_splurt/sound/voice/gachi/scream3.ogg', 'modular_splurt/sound/voice/gachi/scream4.ogg')
+/datum/emote/sound/human/scream3/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/gachi/scream1.ogg', 'modular_splurt/sound/voice/gachi/scream2.ogg', 'modular_splurt/sound/voice/gachi/scream3.ogg', 'modular_splurt/sound/voice/gachi/scream4.ogg')
. = ..()
-/datum/emote/living/audio/moan2
+/datum/emote/sound/human/moan2
key = "moan2"
key_third_person = "moans2"
+ name = "gachi moan"
message = "moans somewhat manly!"
message_mime = "acts out a rather manly moan!"
- emote_sound = 'modular_splurt/sound/voice/gachi/moan1.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/gachi/moan1.ogg'
emote_cooldown = 2.7 SECONDS // Uses longest sound's time.
-/datum/emote/living/audio/moan2/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/gachi/moan1.ogg', 'modular_splurt/sound/voice/gachi/moan2.ogg', 'modular_splurt/sound/voice/gachi/moan3.ogg', 'modular_splurt/sound/voice/gachi/moan4.ogg')
+/datum/emote/sound/human/moan2/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/gachi/moan1.ogg', 'modular_splurt/sound/voice/gachi/moan2.ogg', 'modular_splurt/sound/voice/gachi/moan3.ogg', 'modular_splurt/sound/voice/gachi/moan4.ogg')
. = ..()
-/datum/emote/living/audio/woop
+/datum/emote/sound/human/woop
key = "woop"
key_third_person = "woops"
+ name = "gachi woop"
message = "woops!"
message_mime = "silently woops!"
- emote_sound = 'modular_splurt/sound/voice/gachi/woop.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/woop.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_volume = 35
emote_cooldown = 0.4 SECONDS
-/datum/emote/living/audio/whatthehell/right
+/datum/emote/sound/human/whatthehell/right
key = "wth2"
key_third_person = "wths2"
- emote_sound = 'modular_splurt/sound/voice/gachi/wth2.ogg'
+ name = "gachi what the hell"
+ sound = 'modular_splurt/sound/voice/gachi/wth2.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_volume = 100
emote_cooldown = 1.0 SECONDS
-/datum/emote/living/audio/pardon
+/datum/emote/sound/human/pardon
key = "sorry"
key_third_person = "sorrys"
+ name = "gachi sorry"
message = "exclaims, \"Oh shit, I am sorry!\""
- emote_sound = 'modular_splurt/sound/voice/gachi/sorry.ogg'
+ emote_type = EMOTE_AUDIBLE
+ sound = 'modular_splurt/sound/voice/gachi/sorry.ogg'
emote_cooldown = 1.3 SECONDS
-/datum/emote/living/audio/pardonfor
+/datum/emote/sound/human/pardonfor
key = "sorryfor"
key_third_person = "sorrysfor"
+ name = "gachi for what?"
message = "asks, \"Sorry for what?\""
- emote_sound = 'modular_splurt/sound/voice/gachi/sorryfor.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/sorryfor.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 0.9 SECONDS
-/datum/emote/living/audio/fock
+/datum/emote/sound/human/fock
key = "fuckyou"
key_third_person = "fuckyous"
+ name = "gachi fuck you"
message = "curses someone!"
message_param = "curses %t!"
message_mime = "silently curses someone!"
- emote_sound = 'modular_splurt/sound/voice/gachi/fockyou1.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/fockyou1.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 1.18 SECONDS // Uses longest sound's time.
-/datum/emote/living/audio/fock/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/gachi/fockyou1.ogg', 'modular_splurt/sound/voice/gachi/fockyou2.ogg')
+/datum/emote/sound/human/fock/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/gachi/fockyou1.ogg', 'modular_splurt/sound/voice/gachi/fockyou2.ogg')
. = ..()
-/datum/emote/living/audio/letsgo
+/datum/emote/sound/human/letsgo
key = "go"
key_third_person = "goes"
+ name = "gachi come on"
message = "yells, \"Come on, lets go!\""
message_mime = "motions moving forward!"
- emote_sound = 'modular_splurt/sound/voice/gachi/go.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/go.ogg'
+ emote_type = EMOTE_BOTH
emote_cooldown = 1.6 SECONDS
-/datum/emote/living/audio/chuckle2
+/datum/emote/sound/human/chuckle2
key = "chuckle2"
key_third_person = "chuckles2"
+ name = "gachi chuckle"
message = "chuckles."
message_mime = "chuckles silently."
- emote_sound = 'modular_splurt/sound/voice/gachi/chuckle.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/chuckle.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 1.01 SECONDS
-/datum/emote/living/audio/fockslaves
+/datum/emote/sound/human/fockslaves
key = "slaves"
key_third_person = "slaves"
+ name = "gachi slaves"
message = "curses slaves!"
message_mime = "silently curses slaves!"
- emote_sound = 'modular_splurt/sound/voice/gachi/fokensleves.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/fokensleves.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 1.2 SECONDS
-/datum/emote/living/audio/getbuttback
+/datum/emote/sound/human/getbuttback
key = "assback"
key_third_person = "assbacks"
+ name = "gachi ass back"
message = "demands someone's ass to get back here!"
message_param = "demands %t's ass to get back here!"
message_mime = "motions for someone's ass to get back here!"
- emote_sound = 'modular_splurt/sound/voice/gachi/assback.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/assback.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 1.9 SECONDS
-/datum/emote/living/audio/boss
+/datum/emote/sound/human/boss
key = "boss"
key_third_person = "boss"
+ name = "gachi boss of this gym"
message = "seeks the boss of this place!"
message_mime = "stares at the potential boss of this place!"
- emote_sound = 'modular_splurt/sound/voice/gachi/boss.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/boss.ogg'
+ emote_type = EMOTE_VISIBLE
emote_cooldown = 1.68 SECONDS
-/datum/emote/living/audio/attention
+/datum/emote/sound/human/attention
key = "attention"
key_third_person = "attentions"
+ name = "atteeention"
message = "demands an attention!"
message_mime = "seems to be looking for an attention."
emote_volume = 100
- emote_sound = 'modular_splurt/sound/voice/gachi/attention.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/attention.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 1.36 SECONDS
-/datum/emote/living/audio/ah
+/datum/emote/sound/human/ah
key = "ah"
key_third_person = "ahs"
+ name = "gachi ah"
message = "ahs!"
message_mime = "ahs silently!"
- emote_sound = 'modular_splurt/sound/voice/gachi/ah.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/ah.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 0.67 SECONDS
emote_volume = 25
-/datum/emote/living/audio/boolets
+/datum/emote/sound/human/boolets
key = "ammo"
key_third_person = "ammos"
+ name = "more boolets"
message = "is requesting ammo!"
message_mime = "seem to ask for ammo!"
- emote_sound = 'modular_splurt/sound/voice/gachi/boolets.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/boolets.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 1.1 SECONDS // Uses longest sound's time.
emote_volume = 10
-/datum/emote/living/audio/boolets/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/gachi/boolets.ogg', 'modular_splurt/sound/voice/gachi/boolets2.ogg')
+/datum/emote/sound/human/boolets/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/gachi/boolets.ogg', 'modular_splurt/sound/voice/gachi/boolets2.ogg')
. = ..()
-/datum/emote/living/audio/wepon
+/datum/emote/sound/human/wepon
key = "wepon"
key_third_person = "wepons"
+ name = "bigger wepons"
message = "is requesting bigger weapons!"
message_mime = "seem to ask for weapons!"
- emote_sound = 'modular_splurt/sound/voice/gachi/wepons.ogg'
+ sound = 'modular_splurt/sound/voice/gachi/wepons.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 1.07 SECONDS
emote_volume = 10
-/datum/emote/living/audio/sciteam
+/datum/emote/sound/human/sciteam
key = "sciteam"
key_third_person = "sciteams"
+ name = "Science Team"
message = "exclaims, \"I am with the Science team!\""
message_mime = "gestures being with the Science team!"
- emote_sound = 'modular_splurt/sound/voice/sciteam.ogg'
+ sound = 'modular_splurt/sound/voice/sciteam.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 1.32 SECONDS
emote_volume = 90
-/datum/emote/living/audio/ambatukam
+/datum/emote/sound/human/ambatukam
key = "ambatukam"
key_third_person = "ambatukams"
message = "is about to come!"
message_mime = "seems like about to come!"
- emote_sound = 'modular_splurt/sound/voice/ambatukam.ogg'
+ sound = 'modular_splurt/sound/voice/ambatukam.ogg'
+ emote_type = EMOTE_BOTH
emote_cooldown = 2.75 SECONDS
//emote_volume = 30
-/datum/emote/living/audio/ambatukam2
+/datum/emote/sound/human/ambatukam2
key = "ambatukam2"
key_third_person = "ambatukams2"
+ name = "ambatukam 2"
message = "is about to come in harmony!"
message_mime = "seems like about to come in harmony!"
- emote_sound = 'modular_splurt/sound/voice/ambatukam_harmony.ogg'
+ sound = 'modular_splurt/sound/voice/ambatukam_harmony.ogg'
+ emote_type = EMOTE_BOTH
emote_cooldown = 3.42 SECONDS
//emote_volume = 60
-/datum/emote/living/audio/eekum
+/datum/emote/sound/human/eekum
key = "eekumbokum"
key_third_person = "eekumbokums"
message = "eekum-bokums!"
message_mime = "seem to eekum-bokum!"
- emote_sound = 'modular_splurt/sound/voice/eekum-bokum.ogg'
+ sound = 'modular_splurt/sound/voice/eekum-bokum.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 0.9 SECONDS // Uses longest sound's time.
-/datum/emote/living/audio/eekum/run_emote(mob/user, params)
+/datum/emote/sound/human/eekum/run_emote(mob/user, params)
switch(user.gender)
if(MALE) // Game's SFX
- emote_sound = 'modular_splurt/sound/voice/eekum-bokum.ogg'
+ sound = 'modular_splurt/sound/voice/eekum-bokum.ogg'
if(FEMALE) // Korone's
- emote_sound = pick('modular_splurt/sound/voice/eekum-bokum_f1.ogg', 'modular_splurt/sound/voice/eekum-bokum_f2.ogg')
+ sound = pick('modular_splurt/sound/voice/eekum-bokum_f1.ogg', 'modular_splurt/sound/voice/eekum-bokum_f2.ogg')
else // Both
- emote_sound = pick('modular_splurt/sound/voice/eekum-bokum.ogg', 'modular_splurt/sound/voice/eekum-bokum_f1.ogg', 'modular_splurt/sound/voice/eekum-bokum_f2.ogg')
+ sound = pick('modular_splurt/sound/voice/eekum-bokum.ogg', 'modular_splurt/sound/voice/eekum-bokum_f1.ogg', 'modular_splurt/sound/voice/eekum-bokum_f2.ogg')
. = ..()
-/datum/emote/living/audio/bazinga
+/datum/emote/sound/human/bazinga
key = "bazinga"
key_third_person = "bazingas"
message = "exclaims, \"Bazinga!\""
message_mime = "fools someone, silently."
- emote_sound = 'modular_splurt/sound/voice/bazinga.ogg'
+ sound = 'modular_splurt/sound/voice/bazinga.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 0.65 SECONDS
-/datum/emote/living/audio/bazinga/run_emote(mob/user, params)
+/datum/emote/sound/human/bazinga/run_emote(mob/user, params)
if(prob(1)) // If Empah had TTS #25
- emote_sound = 'modular_splurt/sound/voice/bazinga_ebil.ogg'
+ sound = 'modular_splurt/sound/voice/bazinga_ebil.ogg'
emote_pitch_variance = FALSE
emote_cooldown = 1.92 SECONDS
emote_volume = 110
else
- emote_sound = 'modular_splurt/sound/voice/bazinga.ogg'
+ sound = 'modular_splurt/sound/voice/bazinga.ogg'
emote_pitch_variance = TRUE
emote_cooldown = 0.65 SECONDS
emote_volume = 50
. = ..()
-/datum/emote/living/audio/yooo
+/datum/emote/sound/human/yooo
key = "yooo"
key_third_person = "yooos"
message = "thinks they are part of Kabuki play."
- emote_sound = 'modular_splurt/sound/voice/yooo.ogg'
+ sound = 'modular_splurt/sound/voice/yooo.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 2.54 SECONDS
-/datum/emote/living/audio/buzzer_correct
+/datum/emote/sound/human/buzzer_correct
key = "correct"
key_third_person = "corrects"
message = "thinks someone is correct."
message_param = "thinks %t is correct."
- emote_sound = 'modular_splurt/sound/voice/buzzer_correct.ogg'
+ sound = 'modular_splurt/sound/voice/buzzer_correct.ogg'
+ emote_type = EMOTE_OMNI
emote_cooldown = 0.84 SECONDS
-/datum/emote/living/audio/buzzer_incorrect
+/datum/emote/sound/human/buzzer_incorrect
key = "incorrect"
key_third_person = "incorrects"
message = "thinks someone is incorrect."
message_param = "thinks %t is incorrect."
- emote_sound = 'modular_splurt/sound/voice/buzzer_incorrect.ogg'
+ sound = 'modular_splurt/sound/voice/buzzer_incorrect.ogg'
+ emote_type = EMOTE_OMNI
emote_cooldown = 1.21 SECONDS
-/datum/emote/living/audio/ace/
+/datum/emote/sound/human/ace/
key = "objection0"
key_third_person = "objects0"
+ name = "OBJECTION!!"
message = "\<\< OBJECTION!! \>\>"
message_param = "\<\< %t \>\>" // Allows for custom objections, but alas only in lowercase.
message_mime = "points their finger with determination!"
- emote_sound = 'modular_splurt/sound/voice/ace/ace_objection_generic.ogg'
+ sound = 'modular_splurt/sound/voice/ace/ace_objection_generic.ogg'
+ emote_type = EMOTE_OMNI
emote_cooldown = 6.0 SECONDS // This is regardless of sound's length.
emote_volume = 30
-/datum/emote/living/audio/ace/objection
+/datum/emote/sound/human/ace/objection
key = "objection"
key_third_person = "objects"
- emote_sound = 'modular_splurt/sound/voice/ace/ace_objection_m1.ogg'
+ name = "Objection!"
+ sound = 'modular_splurt/sound/voice/ace/ace_objection_m1.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_pitch_variance = FALSE // IT BREAKS THESE SOMEHOW
-/datum/emote/living/audio/ace/objection/run_emote(mob/user, params)
+/datum/emote/sound/human/ace/objection/run_emote(mob/user, params)
switch(user.gender)
if(MALE)
- emote_sound = pick('modular_splurt/sound/voice/ace/ace_objection_m1.ogg', 'modular_splurt/sound/voice/ace/ace_objection_m2.ogg', 'modular_splurt/sound/voice/ace/ace_objection_m3.ogg')
+ sound = pick('modular_splurt/sound/voice/ace/ace_objection_m1.ogg', 'modular_splurt/sound/voice/ace/ace_objection_m2.ogg', 'modular_splurt/sound/voice/ace/ace_objection_m3.ogg')
if(FEMALE)
- emote_sound = pick('modular_splurt/sound/voice/ace/ace_objection_f1.ogg', 'modular_splurt/sound/voice/ace/ace_objection_f2.ogg')
+ sound = pick('modular_splurt/sound/voice/ace/ace_objection_f1.ogg', 'modular_splurt/sound/voice/ace/ace_objection_f2.ogg')
else // Both because I am lazy.
- emote_sound = pick('modular_splurt/sound/voice/ace/ace_objection_m1.ogg', 'modular_splurt/sound/voice/ace/ace_objection_m2.ogg', 'modular_splurt/sound/voice/ace/ace_objection_m3.ogg', 'modular_splurt/sound/voice/ace/ace_objection_f1.ogg', 'modular_splurt/sound/voice/ace/ace_objection_f2.ogg')
+ sound = pick('modular_splurt/sound/voice/ace/ace_objection_m1.ogg', 'modular_splurt/sound/voice/ace/ace_objection_m2.ogg', 'modular_splurt/sound/voice/ace/ace_objection_m3.ogg', 'modular_splurt/sound/voice/ace/ace_objection_f1.ogg', 'modular_splurt/sound/voice/ace/ace_objection_f2.ogg')
. = ..()
-/datum/emote/living/audio/ace/hold_it
+/datum/emote/sound/human/ace/hold_it
key = "holdit"
key_third_person = "holdsit"
+ name = "HOLD IT!!"
message = "\<\< HOLD IT!! \>\>"
- emote_sound = 'modular_splurt/sound/voice/ace/ace_holdit_m1.ogg'
+ sound = 'modular_splurt/sound/voice/ace/ace_holdit_m1.ogg'
+ emote_type = EMOTE_OMNI
emote_pitch_variance = FALSE // IT BREAKS THESE SOMEHOW
-/datum/emote/living/audio/ace/hold_it/run_emote(mob/user, params)
+/datum/emote/sound/human/ace/hold_it/run_emote(mob/user, params)
switch(user.gender)
if(MALE)
- emote_sound = pick('modular_splurt/sound/voice/ace/ace_holdit_m1.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_m2.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_m3.ogg')
+ sound = pick('modular_splurt/sound/voice/ace/ace_holdit_m1.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_m2.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_m3.ogg')
if(FEMALE)
- emote_sound = pick('modular_splurt/sound/voice/ace/ace_holdit_f1.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_f2.ogg')
+ sound = pick('modular_splurt/sound/voice/ace/ace_holdit_f1.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_f2.ogg')
else // Both because I am lazy.
- emote_sound = pick('modular_splurt/sound/voice/ace/ace_holdit_m1.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_m2.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_m3.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_f1.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_f2.ogg')
+ sound = pick('modular_splurt/sound/voice/ace/ace_holdit_m1.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_m2.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_m3.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_f1.ogg', 'modular_splurt/sound/voice/ace/ace_holdit_f2.ogg')
. = ..()
-/datum/emote/living/audio/ace/take_that
+/datum/emote/sound/human/ace/take_that
key = "takethat"
key_third_person = "takesthat"
+ name = "TAKE THAT!!"
message = "\<\< TAKE THAT!! \>\>"
- emote_sound = 'modular_splurt/sound/voice/ace/ace_takethat_m1.ogg'
+ sound = 'modular_splurt/sound/voice/ace/ace_takethat_m1.ogg'
+ emote_type = EMOTE_OMNI
emote_pitch_variance = FALSE // IT BREAKS THESE SOMEHOW
-/datum/emote/living/audio/ace/take_that/run_emote(mob/user, params)
+/datum/emote/sound/human/ace/take_that/run_emote(mob/user, params)
switch(user.gender)
if(MALE)
- emote_sound = pick('modular_splurt/sound/voice/ace/ace_takethat_m1.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_m2.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_m3.ogg')
+ sound = pick('modular_splurt/sound/voice/ace/ace_takethat_m1.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_m2.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_m3.ogg')
if(FEMALE)
- emote_sound = pick('modular_splurt/sound/voice/ace/ace_takethat_f1.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_f2.ogg')
+ sound = pick('modular_splurt/sound/voice/ace/ace_takethat_f1.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_f2.ogg')
else // Both because I am lazy.
- emote_sound = pick('modular_splurt/sound/voice/ace/ace_takethat_m1.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_m2.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_m3.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_f1.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_f2.ogg')
+ sound = pick('modular_splurt/sound/voice/ace/ace_takethat_m1.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_m2.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_m3.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_f1.ogg', 'modular_splurt/sound/voice/ace/ace_takethat_f2.ogg')
. = ..()
-/datum/emote/living/audio/realize
+/datum/emote/sound/human/realize
key = "realize"
key_third_person = "realizes"
message = "realizes something."
- emote_sound = 'modular_splurt/sound/voice/ace/ace_realize.ogg'
+ sound = 'modular_splurt/sound/voice/ace/ace_realize.ogg'
+ emote_type = EMOTE_VISIBLE
emote_cooldown = 1.19 SECONDS
-/datum/emote/living/audio/smirk2
+/datum/emote/sound/human/smirk2
key = "smirk2"
key_third_person = "smirks2"
+ name = "smirk 2"
message = "smirks."
- emote_sound = 'modular_splurt/sound/voice/ace/ace_wubs.ogg'
+ sound = 'modular_splurt/sound/voice/ace/ace_wubs.ogg'
+ emote_type = EMOTE_VISIBLE
emote_cooldown = 0.84 SECONDS
-/datum/emote/living/audio/nani
+/datum/emote/sound/human/nani
key = "nani"
key_third_person = "nanis"
message = "seems confused."
- emote_sound = 'modular_splurt/sound/voice/nani.ogg'
+ sound = 'modular_splurt/sound/voice/nani.ogg'
+ emote_type = EMOTE_VISIBLE
emote_cooldown = 0.5 SECONDS
-/datum/emote/living/audio/canonevent
+/datum/emote/sound/human/canonevent
key = "2099"
key_third_person = "canons"
+ name = "canon event"
message = "thinks this is a canon event."
- emote_sound = 'modular_splurt/sound/voice/canon_event.ogg'
+ sound = 'modular_splurt/sound/voice/canon_event.ogg'
+ emote_type = EMOTE_OMNI
emote_cooldown = 5.0 SECONDS
emote_volume = 27
-/datum/emote/living/audio/meow
+/datum/emote/sound/human/meow
key = "meow"
key_third_person = "meows"
message = "meows!"
emote_type = EMOTE_AUDIBLE // No reason mimes shouldn't meow.
- emote_sound = 'modular_splurt/sound/voice/catpeople/cat_meow1.ogg'
+ restraint_check = FALSE
+ sound = 'modular_splurt/sound/voice/catpeople/cat_meow1.ogg'
+
emote_cooldown = 0.8 SECONDS // the longest audio is 1 second but who gives a fuck mrrp mrrp meow
emote_pitch_variance = FALSE // why would you
-/datum/emote/living/audio/meow/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/catpeople/cat_meow1.ogg', 'modular_splurt/sound/voice/catpeople/cat_meow2.ogg', 'modular_splurt/sound/voice/catpeople/cat_meow3.ogg') // Credit to Nyanotrasen (https://github.com/Nyanotrasen/Nyanotrasen)
+/datum/emote/sound/human/meow/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/catpeople/cat_meow1.ogg', 'modular_splurt/sound/voice/catpeople/cat_meow2.ogg', 'modular_splurt/sound/voice/catpeople/cat_meow3.ogg') // Credit to Nyanotrasen (https://github.com/Nyanotrasen/Nyanotrasen)
. = ..()
-/datum/emote/living/audio/meow2
+/datum/emote/sound/human/meow2
key = "meow2"
key_third_person = "meows2"
+ name = "meow 2"
message = "mews!"
message_mime = "mews silently!"
- emote_sound = 'modular_splurt/sound/voice/catpeople/cat_mew1.ogg'
+ sound = 'modular_splurt/sound/voice/catpeople/cat_mew1.ogg'
emote_type = EMOTE_AUDIBLE
emote_cooldown = 0.8 SECONDS // mrrp mrrp meow
emote_pitch_variance = FALSE
-/datum/emote/living/audio/meow2/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/catpeople/cat_mew1.ogg', 'modular_splurt/sound/voice/catpeople/cat_mew2.ogg') // Credit to Nyanotrasen (https://github.com/Nyanotrasen/Nyanotrasen)
+/datum/emote/sound/human/meow2/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/catpeople/cat_mew1.ogg', 'modular_splurt/sound/voice/catpeople/cat_mew2.ogg') // Credit to Nyanotrasen (https://github.com/Nyanotrasen/Nyanotrasen)
. = ..()
-/datum/emote/living/audio/mrrp
+/datum/emote/sound/human/mrrp
key = "mrrp"
key_third_person = "mrrps"
message = "trills like a cat!"
message_mime = "trills silently!"
- emote_sound = 'modular_splurt/sound/voice/catpeople/cat_mrrp1.ogg'
+ sound = 'modular_splurt/sound/voice/catpeople/cat_mrrp1.ogg'
emote_type = EMOTE_AUDIBLE
emote_cooldown = 0.8 SECONDS // mrrp mrrp meow
emote_pitch_variance = FALSE
-/datum/emote/living/audio/mrrp/run_emote(mob/user, params)
- emote_sound = pick('modular_splurt/sound/voice/catpeople/cat_mrrp1.ogg', 'modular_splurt/sound/voice/catpeople/cat_mrrp2.ogg')
+/datum/emote/sound/human/mrrp/run_emote(mob/user, params)
+ sound = pick('modular_splurt/sound/voice/catpeople/cat_mrrp1.ogg', 'modular_splurt/sound/voice/catpeople/cat_mrrp2.ogg')
. = ..()
-/datum/emote/living/audio/mrowl
+/datum/emote/sound/human/mrowl
key = "mrowl"
key_third_person = "mrowls"
message = "mrowls."
- emote_sound = 'modular_splurt/sound/voice/mrowl.ogg'
+ sound = 'modular_splurt/sound/voice/mrowl.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 0.95 SECONDS
emote_pitch_variance = FALSE
-/datum/emote/living/audio/gay
+/datum/emote/sound/human/gay
key = "gay"
- key_third_person = "points at a player"
+ key_third_person = "gays" // *point [ref] is already an emote. Also "*points at a user" is a key nobody would ever use.
message = "saw something gay."
- emote_sound = 'modular_splurt/sound/voice/gay-echo.ogg'
+ sound = 'modular_splurt/sound/voice/gay-echo.ogg'
+ emote_type = EMOTE_BOTH
emote_cooldown = 0.95 SECONDS
emote_pitch_variance = FALSE
-/datum/emote/living/audio/flabbergast
+/datum/emote/sound/human/flabbergast
key = "flabbergast"
- key_third_person = "is flabbergasted"
+ key_third_person = "flabbergasted"
message = "looks flabbergasted!"
- emote_sound = 'modular_splurt/sound/voice/flabbergasted.ogg'
+ sound = 'modular_splurt/sound/voice/flabbergasted.ogg'
+ emote_type = EMOTE_AUDIBLE
emote_cooldown = 3.0 SECONDS
emote_pitch_variance = FALSE
emote_volume = 70
-/datum/emote/living/audio/sadness
- key = "sadness"
- key_third_person = "feels sadness"
- message = "is experiencing Profound Sadness!"
- emote_sound = 'modular_splurt/sound/voice/sadness.ogg'
- emote_cooldown = 4.0 SECONDS
- emote_pitch_variance = FALSE
- emote_volume = 30
+/datum/emote/sound/human/rawr
+ key = "rawr"
+ key_third_person = "rawrs"
+ message = "lets out a rawr!"
+ sound = 'modular_sand/sound/voice/rawr.ogg'
+ emote_type = EMOTE_AUDIBLE
+ emote_cooldown = 0.8 SECONDS
diff --git a/modular_splurt/sound/voice/burps/belch10.ogg b/modular_splurt/sound/voice/burp.ogg
similarity index 100%
rename from modular_splurt/sound/voice/burps/belch10.ogg
rename to modular_splurt/sound/voice/burp.ogg
diff --git a/modular_splurt/sound/voice/burps/belch1.ogg b/modular_splurt/sound/voice/burps/belch1.ogg
deleted file mode 100644
index 875e1be1b1..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch1.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch11.ogg b/modular_splurt/sound/voice/burps/belch11.ogg
deleted file mode 100644
index d1ab4d425b..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch11.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch12.ogg b/modular_splurt/sound/voice/burps/belch12.ogg
deleted file mode 100644
index dfd6b6210f..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch12.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch13.ogg b/modular_splurt/sound/voice/burps/belch13.ogg
deleted file mode 100644
index 1863c1d817..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch13.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch14.ogg b/modular_splurt/sound/voice/burps/belch14.ogg
deleted file mode 100644
index 8941c9b31f..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch14.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch15.ogg b/modular_splurt/sound/voice/burps/belch15.ogg
deleted file mode 100644
index 8cb87ee579..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch15.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch2.ogg b/modular_splurt/sound/voice/burps/belch2.ogg
deleted file mode 100644
index df18412d04..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch2.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch3.ogg b/modular_splurt/sound/voice/burps/belch3.ogg
deleted file mode 100644
index 5aae9d182d..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch3.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch4.ogg b/modular_splurt/sound/voice/burps/belch4.ogg
deleted file mode 100644
index a69f66b369..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch4.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch5.ogg b/modular_splurt/sound/voice/burps/belch5.ogg
deleted file mode 100644
index c95bf30e0a..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch5.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch6.ogg b/modular_splurt/sound/voice/burps/belch6.ogg
deleted file mode 100644
index 8e981f3b50..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch6.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch7.ogg b/modular_splurt/sound/voice/burps/belch7.ogg
deleted file mode 100644
index 70d5aab6c8..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch7.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch8.ogg b/modular_splurt/sound/voice/burps/belch8.ogg
deleted file mode 100644
index 1703c9999d..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch8.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/burps/belch9.ogg b/modular_splurt/sound/voice/burps/belch9.ogg
deleted file mode 100644
index ffb092b1da..0000000000
Binary files a/modular_splurt/sound/voice/burps/belch9.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/farts/fart.ogg b/modular_splurt/sound/voice/fart.ogg
similarity index 100%
rename from modular_splurt/sound/voice/farts/fart.ogg
rename to modular_splurt/sound/voice/fart.ogg
diff --git a/modular_splurt/sound/voice/farts/fart1.ogg b/modular_splurt/sound/voice/farts/fart1.ogg
deleted file mode 100644
index c7937a0f29..0000000000
Binary files a/modular_splurt/sound/voice/farts/fart1.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/farts/fart2.ogg b/modular_splurt/sound/voice/farts/fart2.ogg
deleted file mode 100644
index c99b4833a3..0000000000
Binary files a/modular_splurt/sound/voice/farts/fart2.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/farts/fart3.ogg b/modular_splurt/sound/voice/farts/fart3.ogg
deleted file mode 100644
index 287e7fdbbe..0000000000
Binary files a/modular_splurt/sound/voice/farts/fart3.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/farts/fart4.ogg b/modular_splurt/sound/voice/farts/fart4.ogg
deleted file mode 100644
index 71a1e4177c..0000000000
Binary files a/modular_splurt/sound/voice/farts/fart4.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/farts/fart5.ogg b/modular_splurt/sound/voice/farts/fart5.ogg
deleted file mode 100644
index 87db542e4e..0000000000
Binary files a/modular_splurt/sound/voice/farts/fart5.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/farts/fart6.ogg b/modular_splurt/sound/voice/farts/fart6.ogg
deleted file mode 100644
index a0b041ba2b..0000000000
Binary files a/modular_splurt/sound/voice/farts/fart6.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/farts/fart7.ogg b/modular_splurt/sound/voice/farts/fart7.ogg
deleted file mode 100644
index db96b8cac2..0000000000
Binary files a/modular_splurt/sound/voice/farts/fart7.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/farts/fart8.ogg b/modular_splurt/sound/voice/farts/fart8.ogg
deleted file mode 100644
index 8809ff9bb8..0000000000
Binary files a/modular_splurt/sound/voice/farts/fart8.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/sadness.ogg b/modular_splurt/sound/voice/sadness.ogg
deleted file mode 100644
index 189b148830..0000000000
Binary files a/modular_splurt/sound/voice/sadness.ogg and /dev/null differ
diff --git a/modular_splurt/sound/voice/sicko.ogg b/modular_splurt/sound/voice/sicko.ogg
deleted file mode 100644
index cde47d7d16..0000000000
Binary files a/modular_splurt/sound/voice/sicko.ogg and /dev/null differ
diff --git a/tgstation.dme b/tgstation.dme
index 4eba0b2beb..e40eaa411e 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2257,6 +2257,7 @@
#include "code\modules\economy\account.dm"
#include "code\modules\economy\paystand.dm"
#include "code\modules\emoji\emoji_parse.dm"
+#include "code\modules\emote_panel\emote_panel.dm"
#include "code\modules\error_handler\error_handler.dm"
#include "code\modules\error_handler\error_viewer.dm"
#include "code\modules\events\_event.dm"
diff --git a/tgui/packages/tgui/interfaces/EmotePanel.tsx b/tgui/packages/tgui/interfaces/EmotePanel.tsx
new file mode 100644
index 0000000000..75f5402be8
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/EmotePanel.tsx
@@ -0,0 +1,247 @@
+import { useLocalState } from '../backend';
+
+import { BooleanLike } from '../../common/react';
+import { capitalize } from '../../common/string';
+import { useBackend } from '../backend';
+import { Box, Button, Flex, Icon, Section } from '../components';
+import { Window } from '../layouts';
+import { SearchBar } from './common/SearchBar';
+
+type Emote = {
+ key: string;
+ name: string;
+ hands: BooleanLike;
+ visible: BooleanLike;
+ audible: BooleanLike;
+ sound: BooleanLike;
+ use_params: BooleanLike;
+};
+
+type EmotePanelData = {
+ emotes: Emote[];
+};
+
+export const EmotePanelContent = (props, context) => {
+ const { act, data } = useBackend(context);
+ const { emotes } = data;
+
+ const [filterVisible, toggleVisualFilter] = useLocalState(context, 'filterVisible', false);
+ const [filterAudible, toggleAudibleFilter] = useLocalState(context, 'filterAudible', false);
+ const [filterSound, toggleSoundFilter] = useLocalState(context, 'filterSound', false);
+ const [filterHands, toggleHandsFilter] = useLocalState(context, 'filterHands', false);
+ const [filterUseParams, toggleUseParamsFilter] = useLocalState(context, 'filterUseParams', false);
+ const [useParams, toggleUseParams] = useLocalState(context, 'useParams', false);
+ const [searchText, setSearchText] = useLocalState(context, 'searchText', '');
+ const [showNames, toggleShowNames] = useLocalState(context, 'showNames', true);
+ const [showIcons, toggleShowIcons] = useLocalState(context, 'showIcons', false);
+
+ return (
+
+
+
+ 0
+ ? `Search results of "${searchText}"`
+ : `All Emotes`
+ }
+ buttons={
+
+ toggleShowNames(!showNames)}
+ height="20px"
+ >
+ {showNames ? 'Show Names' : 'Show Keys'}
+
+ toggleShowIcons(!showIcons)}
+ height="20px"
+ >
+ Show Icons
+
+ toggleUseParams(!useParams)}
+ height="20px" // God knows why classic tg just breaks this button, this is a patchwork solution.
+ >
+ Use Params
+
+
+ }
+ >
+
+
+ {emotes
+ .filter(
+ (emote) =>
+ emote.key &&
+ (searchText.length > 0
+ ? emote.key
+ .toLowerCase()
+ .includes(searchText.toLowerCase()) ||
+ emote.name
+ .toLowerCase()
+ .includes(searchText.toLowerCase())
+ : true) &&
+ (filterVisible ? emote.visible : true) &&
+ (filterAudible ? emote.audible : true) &&
+ (filterSound ? emote.sound : true) &&
+ (filterHands ? emote.hands : true) &&
+ (filterUseParams ? emote.use_params : true),
+ )
+ .sort((a, b) => (a.name > b.name ? 1 : -1))
+ .map((emote) => (
+
+ )
+ }
+ onClick={() =>
+ act('play_emote', {
+ emote_key: emote.key,
+ use_params: useParams,
+ })
+ }
+ >
+
+ {showNames
+ ? capitalize(emote.name.toLowerCase())
+ : emote.key}
+
+ {showIcons ? (
+
+ ) : (
+ ''
+ )}
+
+ ))}
+
+
+
+
+ );
+};
+
+const EmoteIcons = (props) => {
+ const { visible, audible, sound, hands, use_params, margin } = props;
+
+ return (
+
+
+
+
+
+
+
+ );
+};
+
+export const EmotePanel = (props) => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/common/SearchBar.tsx b/tgui/packages/tgui/interfaces/common/SearchBar.tsx
new file mode 100644
index 0000000000..ab82dfd708
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/common/SearchBar.tsx
@@ -0,0 +1,52 @@
+import { Icon, Input, Stack } from '../../components';
+
+type RequiredProps = {
+ /** The state variable. */
+ query: string;
+ /** The function to call when the user searches. */
+ onSearch: (query: string) => void;
+};
+
+type OptionalProps = Partial<{
+ /** Whether the input should be focused on mount. */
+ autoFocus: boolean;
+ /** Whether to show the search icon. */
+ noIcon: boolean;
+ /** The placeholder text. */
+ placeholder: string;
+ /** Override styles of the search bar. */
+ style: Partial;
+}>;
+
+type Props = RequiredProps & OptionalProps;
+
+/**
+ * Simple component for searching.
+ * This component does not accept box props - just recreate it if needed
+ */
+export function SearchBar(props: Props) {
+ const {
+ autoFocus,
+ noIcon = false,
+ onSearch,
+ placeholder = 'Search...',
+ query = '',
+ style,
+ } = props;
+
+ return (
+
+ {!noIcon && }
+
+ onSearch(value)}
+ placeholder={placeholder}
+ value={query}
+ />
+
+
+ );
+}