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={ + + + + + + } + > + + + {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) => ( + + ))} + + +
+
+ ); +}; + +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} + /> + + + ); +}