diff --git a/code/__DEFINES/~ff_defines/__HELPERS/global_lists.dm b/code/__DEFINES/~ff_defines/__HELPERS/global_lists.dm new file mode 100644 index 00000000000..80f5c2a54e5 --- /dev/null +++ b/code/__DEFINES/~ff_defines/__HELPERS/global_lists.dm @@ -0,0 +1,2 @@ +GLOBAL_LIST_EMPTY(blooper_list) +GLOBAL_LIST_EMPTY(blooper_random_list) diff --git a/code/__DEFINES/~ff_defines/say.dm b/code/__DEFINES/~ff_defines/say.dm new file mode 100644 index 00000000000..528ec2362fc --- /dev/null +++ b/code/__DEFINES/~ff_defines/say.dm @@ -0,0 +1,19 @@ +//BLOOPER defines +#define BLOOPER_DEFAULT_MINPITCH 0.4 +#define BLOOPER_DEFAULT_MAXPITCH 2 +#define BLOOPER_DEFAULT_MINVARY 0.1 +#define BLOOPER_DEFAULT_MAXVARY 0.8 +#define BLOOPER_DEFAULT_MINSPEED 2 +#define BLOOPER_DEFAULT_MAXSPEED 16 + +#define BLOOPER_SPEED_BASELINE 4 //Used to calculate delay between BLOOPERs, any BLOOPER speeds below this feature higher BLOOPER density, any speeds above feature lower BLOOPER density. Keeps BLOOPERing length consistent + +#define BLOOPER_MAX_BLOOPERS 24 +#define BLOOPER_MAX_TIME (1.5 SECONDS) // More or less the amount of time the above takes to process through with a BLOOPER speed of 2. + +#define BLOOPER_PITCH_RAND(gend) ((gend == MALE ? rand(60, 120) : (gend == FEMALE ? rand(80, 140) : rand(60,140))) / 100) //Macro for determining random pitch based off gender +#define BLOOPER_VARIANCE_RAND (rand(BLOOPER_DEFAULT_MINVARY * 100, BLOOPER_DEFAULT_MAXVARY * 100) / 100) //Macro for randomizing BLOOPER variance to reduce the amount of copy-pasta necessary for that + +#define BLOOPER_DO_VARY(pitch, variance) (rand(((pitch * 100) - (variance*50)), ((pitch*100) + (variance*50))) / 100) + +#define BLOOPER_SOUND_FALLOFF_EXPONENT 0.5 //At lower ranges, we want the exponent to be below 1 so that whispers don't sound too awkward. At higher ranges, we want the exponent fairly high to make yelling less obnoxious diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 994aa6cfa81..1fa97eda328 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -54,6 +54,14 @@ sort_list(GLOB.laugh_types, GLOBAL_PROC_REF(cmp_typepaths_asc)) //SKYRAT EDIT END + //THE FLUFFY FRONTIER EDIT ADDITION BEGIN - Blooper + for(var/sound_blooper_path in subtypesof(/datum/blooper)) + var/datum/blooper/B = new sound_blooper_path() + GLOB.blooper_list[B.id] = sound_blooper_path + if(B.allow_random) + GLOB.blooper_random_list[B.id] = sound_blooper_path + //THE FLUFFY FRONTIER EDIT END + /// Inits GLOB.species_list. Not using GLOBAL_LIST_INIT b/c it depends on GLOB.string_lists /proc/init_species_list() for(var/spath in subtypesof(/datum/species)) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 41172ff552d..3c5bee182d6 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -476,6 +476,12 @@ if(NAMEOF(src, glide_size)) set_glide_size(var_value) . = TRUE + // THE FLUFFY FRONTIER EDIT ADDITION BEGIN - BLOOPER + if(NAMEOF(src, blooper)) // Sorry, Vishenka. + if(isfile(var_value)) + blooper = sound(var_value) //bark() expects vocal_bark to already be a sound datum, for performance reasons. adminbus QoL! + . = TRUE + // THE FLUFFY FRONTIER EDIT ADDITION END if(!isnull(.)) datum_flags |= DF_VAR_EDITED diff --git a/tff_modular/modules/blooper/atoms_movable.dm b/tff_modular/modules/blooper/atoms_movable.dm new file mode 100644 index 00000000000..3ab14b8ead8 --- /dev/null +++ b/tff_modular/modules/blooper/atoms_movable.dm @@ -0,0 +1,84 @@ +/atom/movable + // Text-to-blooper sounds + // Да. У нас все атом могут иметь звучение для say. + var/sound/blooper + var/blooper_id + var/blooper_pitch = 1 + var/blooper_pitch_range = 0.2 //Actual pitch is (pitch - (blooper_pitch_range*0.5)) to (pitch + (blooper_pitch_range*0.5)) + var/blooper_volume = 70 + var/blooper_speed = 4 //Lower values are faster, higher values are slower + var/blooper_current_blooper //When bloopers are queued, this gets passed to the blooper proc. If blooper_current_blooper doesn't match the args passed to the blooper proc (if passed at all), then the blooper simply doesn't play. Basic curtailing of spam~ + +/atom/movable/proc/set_blooper(id) + if(!id) + return FALSE + var/datum/blooper/B = GLOB.blooper_list[id] + if(!B) + return FALSE + blooper = sound(initial(B.soundpath)) + blooper_id = id + return blooper + +/atom/movable/proc/blooper(list/listeners, distance, volume, pitch, queue_time) + if(!GLOB.blooper_allowed) + return + if(queue_time && blooper_current_blooper != queue_time) + return + if(!blooper) + if(!blooper_id || !set_blooper(blooper_id)) //just-in-time blooper generation + return + volume = min(volume, 100) + var/turf/T = get_turf(src) + for(var/mob/M in listeners) + M.playsound_local(T, vol = volume, vary = TRUE, frequency = pitch, max_distance = distance, falloff_distance = 0, falloff_exponent = BLOOPER_SOUND_FALLOFF_EXPONENT, sound_to_use = blooper, distance_multiplier = 1) + +/atom/movable/send_speech(message, range = 7, obj/source = src, bubble_type, list/spans, datum/language/message_language, list/message_mods = list(), forced = FALSE, tts_message, list/tts_filter) + . = ..() + var/list/listeners = get_hearers_in_view(range, source) + if(blooper || blooper_id) + for(var/mob/M in listeners) + if(!M.client) + continue + if(!(M.client?.prefs.read_preference(/datum/preference/toggle/hear_sound_blooper))) + listeners -= M + var/bloopers = min(round((LAZYLEN(message) / blooper_speed)) + 1, BLOOPER_MAX_BLOOPERS) + var/total_delay + blooper_current_blooper = world.time //this is juuuuust random enough to reliably be unique every time send_speech() is called, in most scenarios + for(var/i in 1 to bloopers) + if(total_delay > BLOOPER_MAX_TIME) + break + addtimer(CALLBACK(src, PROC_REF(blooper), listeners, range, blooper_volume, BLOOPER_DO_VARY(blooper_pitch, blooper_pitch_range), blooper_current_blooper), total_delay) + total_delay += rand(DS2TICKS(blooper_speed / BLOOPER_SPEED_BASELINE), DS2TICKS(blooper_speed / BLOOPER_SPEED_BASELINE) + DS2TICKS(blooper_speed / BLOOPER_SPEED_BASELINE)) TICKS + +/randomize_human(mob/living/carbon/human/human) + . = ..() + human.set_blooper(pick(GLOB.blooper_random_list)) + human.blooper_pitch = BLOOPER_PITCH_RAND(human.gender) + human.blooper_pitch_range = BLOOPER_VARIANCE_RAND + +/mob/living/send_speech(message_raw, message_range = 6, obj/source = src, bubble_type = bubble_icon, list/spans, datum/language/message_language = null, list/message_mods = list(), forced = null, tts_message, list/tts_filter) + . = ..() + if(client) + if(!(client?.prefs.read_preference(/datum/preference/toggle/send_sound_blooper))) + return + blooper_volume = 55 + if(message_mods[WHISPER_MODE]) + blooper_volume = 25 + message_range++ + var/list/listening = get_hearers_in_view(message_range, source) + var/is_yell = (say_test(message_raw) == "2") + //Listening gets trimmed here if a blooper blooper's present. If anyone ever makes this proc return listening, make sure to instead initialize a copy of listening in here to avoid wonkiness + if(blooper || blooper_id) + for(var/mob/M in listening) + if(!M.client) + continue + if(!(M.client?.prefs.read_preference(/datum/preference/toggle/hear_sound_blooper))) + listening -= M + var/bloopers = min(round((LAZYLEN(message_raw) / blooper_speed)) + 1, BLOOPER_MAX_BLOOPERS) + var/total_delay + blooper_current_blooper = world.time + for(var/i in 1 to bloopers) + if(total_delay > BLOOPER_MAX_TIME) + break + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/movable, blooper), listening, message_range + 1, (blooper_volume * (is_yell ? 2 : 1)), BLOOPER_DO_VARY(blooper_pitch, blooper_pitch_range), blooper_current_blooper), total_delay) //На седьмом тайле функция равна нулю, поэтому мы обязаны ставить максимум на 1 тайл дальше. + total_delay += rand(DS2TICKS(blooper_speed / BLOOPER_SPEED_BASELINE), DS2TICKS(blooper_speed / BLOOPER_SPEED_BASELINE) + DS2TICKS((blooper_speed / BLOOPER_SPEED_BASELINE) * (is_yell ? 0.5 : 1))) TICKS diff --git a/tff_modular/modules/blooper/bark.dm b/tff_modular/modules/blooper/bark.dm new file mode 100644 index 00000000000..b1a45d45bf9 --- /dev/null +++ b/tff_modular/modules/blooper/bark.dm @@ -0,0 +1,148 @@ +GLOBAL_VAR_INIT(blooper_allowed, TRUE) // For administrators + +/datum/smite/normalblooper + name = "Normal blooper" + +/datum/smite/normalblooper/effect(client/user, mob/living/carbon/human/target) + . = ..() + target.blooper = null + target.blooper_id = pick(GLOB.blooper_random_list) + target.blooper_speed = round((BLOOPER_DEFAULT_MINSPEED + BLOOPER_DEFAULT_MAXSPEED) / 2) + target.blooper_pitch = round((BLOOPER_DEFAULT_MINPITCH + BLOOPER_DEFAULT_MAXPITCH) / 2) + target.blooper_pitch_range = 0.2 + + +/datum/admins/proc/toggleblooper() + set category = "Server" + set desc = "Toggle ANNOYING NOIZES" + set name = "Toggle Blooper" + toggle_blooper() + log_admin("[key_name(usr)] toggled Blooper.") + message_admins("[key_name_admin(usr)] toggled Blooper.") + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Blooper", "[GLOB.blooper_allowed ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + +/world/AVerbsAdmin() + . = ..() + return . + /datum/admins/proc/toggleblooper + +/proc/toggle_blooper(toggle = null) + if(toggle != null) + if(toggle != GLOB.blooper_allowed) + GLOB.blooper_allowed = toggle + else + return + else + GLOB.blooper_allowed = !GLOB.blooper_allowed + to_chat(world, "The Blooper has been globally [GLOB.blooper_allowed ? "enabled" : "disabled"].") + +/datum/preference/choiced/blooper + category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "blooper_speech" + +/datum/preference/choiced/blooper/init_possible_values() + return assoc_to_keys(GLOB.blooper_list) + +/datum/preference/choiced/blooper/apply_to_human(mob/living/carbon/human/target, value, /datum/preference/numeric/blooper_speech_speed) + target.set_blooper(value) + +/datum/preference_middleware/blooper + /// Cooldown on requesting a Blooper preview. + COOLDOWN_DECLARE(blooper_cooldown) + + action_delegations = list( + "play_blooper" = PROC_REF(play_blooper), + ) + +/datum/preference_middleware/blooper/proc/play_blooper(list/params, mob/user) + if(!COOLDOWN_FINISHED(src, blooper_cooldown)) + return TRUE + var/atom/movable/blooperbox = new(get_turf(user)) + blooperbox.set_blooper(preferences.read_preference(/datum/preference/choiced/blooper)) + blooperbox.blooper_pitch = preferences.read_preference(/datum/preference/numeric/blooper_speech_pitch) + blooperbox.blooper_speed = preferences.read_preference(/datum/preference/numeric/blooper_speech_speed) + blooperbox.blooper_pitch_range = preferences.read_preference(/datum/preference/numeric/blooper_pitch_range) + var/total_delay + for(var/i in 1 to (round((32 / blooperbox.blooper_speed)) + 1)) + addtimer(CALLBACK(blooperbox, TYPE_PROC_REF(/atom/movable, blooper), list(user), 7, 70, BLOOPER_DO_VARY(blooperbox.blooper_pitch, blooperbox.blooper_pitch_range)), total_delay) + total_delay += rand(DS2TICKS(blooperbox.blooper_speed/4), DS2TICKS(blooperbox.blooper_speed/4) + DS2TICKS(blooperbox.blooper_speed/4)) TICKS + QDEL_IN(blooperbox, total_delay) + COOLDOWN_START(src, blooper_cooldown, 2 SECONDS) + return TRUE + +/datum/preference/numeric/blooper_speech_speed + category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "blooper_speech_speed" + minimum = BLOOPER_DEFAULT_MINSPEED + maximum = BLOOPER_DEFAULT_MAXSPEED + step = 0.01 + +/datum/preference/numeric/blooper_speech_speed/apply_to_human(mob/living/carbon/human/target, value) + target.blooper_speed = value + +/datum/preference/numeric/blooper_speech_speed/create_default_value() + return round((BLOOPER_DEFAULT_MINSPEED + BLOOPER_DEFAULT_MAXSPEED) / 2) + +/datum/preference/numeric/blooper_speech_pitch + category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "blooper_speech_pitch" + minimum = BLOOPER_DEFAULT_MINPITCH + maximum = BLOOPER_DEFAULT_MAXPITCH + step = 0.01 + +/datum/preference/numeric/blooper_speech_pitch/apply_to_human(mob/living/carbon/human/target, value) + target.blooper_pitch = value + +/datum/preference/numeric/blooper_speech_pitch/create_default_value() + return round((BLOOPER_DEFAULT_MINPITCH + BLOOPER_DEFAULT_MAXPITCH) / 2) + +/datum/preference/numeric/blooper_pitch_range + category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "blooper_pitch_range" + minimum = BLOOPER_DEFAULT_MINVARY + maximum = BLOOPER_DEFAULT_MAXVARY + step = 0.01 + +/datum/preference/numeric/blooper_pitch_range/apply_to_human(mob/living/carbon/human/target, value) + target.blooper_pitch_range = value + +/datum/preference/numeric/blooper_pitch_range/create_default_value() + return 0.2 + + +/// Могу ли я использовать свой блупер? +/datum/preference/toggle/send_sound_blooper + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_key = "send_sound_blooper" + savefile_identifier = PREFERENCE_PLAYER + default_value = FALSE + +/// Могу ли я слышать блупки остальных? +/datum/preference/toggle/hear_sound_blooper + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_key = "hear_sound_blooper" + savefile_identifier = PREFERENCE_PLAYER + default_value = FALSE + +/// It's was stoolen from Splurt build >:3 +/datum/blooper + var/name = "None" + var/id = "Default" + var/soundpath + + var/minpitch = BLOOPER_DEFAULT_MINPITCH + var/maxpitch = BLOOPER_DEFAULT_MAXPITCH + var/minvariance = BLOOPER_DEFAULT_MINVARY + var/maxvariance = BLOOPER_DEFAULT_MAXVARY + + // Speed vars. Speed determines the number of characters required for each blooper, with lower speeds being faster with higher blooper density + var/minspeed = BLOOPER_DEFAULT_MINSPEED + var/maxspeed = BLOOPER_DEFAULT_MAXSPEED + + // Visibility vars. Regardless of what's set below, these can still be obtained via adminbus and genetics. Rule of fun. + var/list/ckeys_allowed + var/ignore = FALSE // If TRUE - only for admins + var/allow_random = FALSE diff --git a/tff_modular/modules/blooper/bark_list.dm b/tff_modular/modules/blooper/bark_list.dm new file mode 100644 index 00000000000..d726fb7584e --- /dev/null +++ b/tff_modular/modules/blooper/bark_list.dm @@ -0,0 +1,432 @@ +/datum/blooper/mutedc2 + name = "Muted String (Low)" + id = "mutedc2" + soundpath = 'sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C2.ogg' + allow_random = TRUE + +/datum/blooper/mutedc3 + name = "Muted String (Medium)" + id = "mutedc3" + soundpath = 'sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C3.ogg' + allow_random = TRUE + +/datum/blooper/mutedc4 + name = "Muted String (High)" + id = "mutedc4" + soundpath = 'sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C4.ogg' + allow_random = TRUE + +/datum/blooper/banjoc3 + name = "Banjo (Medium)" + id = "banjoc3" + soundpath = 'sound/runtime/instruments/banjo/Cn3.ogg' + allow_random = TRUE + +/datum/blooper/banjoc4 + name = "Banjo (High)" + id = "banjoc4" + soundpath = 'sound/runtime/instruments/banjo/Cn4.ogg' + allow_random = TRUE + +/datum/blooper/squeaky + name = "Squeaky" + id = "squeak" + soundpath = 'sound/items/toysqueak1.ogg' + maxspeed = 4 + +/datum/blooper/beep + name = "Beepy" + id = "beep" + soundpath = 'sound/machines/terminal_select.ogg' + maxpitch = 1 //Bringing the pitch higher just hurts your ears :< + maxspeed = 4 //This soundbyte's too short for larger speeds to not sound awkward + +/datum/blooper/chitter + name = "Chittery" + id = "chitter" + minspeed = 4 //Even with the sound being replaced with a unique, shorter sound, this is still a little too long for higher speeds + soundpath = 'tff_modular/modules/blooper/voice/bloopers/chitter.ogg' + +/datum/blooper/synthetic_grunt + name = "Synthetic (Grunt)" + id = "synthgrunt" + soundpath = 'sound/misc/bloop.ogg' + +/datum/blooper/synthetic + name = "Synthetic (Normal)" + id = "synth" + soundpath = 'sound/machines/uplinkerror.ogg' + +/datum/blooper/bullet + name = "Windy" + id = "bullet" + maxpitch = 1.6 + soundpath = 'sound/weapons/bulletflyby.ogg' + +/datum/blooper/coggers + name = "Brassy" + id = "coggers" + soundpath = 'sound/machines/clockcult/integration_cog_install.ogg' + +/datum/blooper/moff/short + name = "Moff squeak" + id = "moffsqueak" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/mothsqueak.ogg' + allow_random = TRUE + ignore = FALSE + +/datum/blooper/meow //Meow blooper? + name = "Meow" + id = "meow" + allow_random = TRUE + soundpath = 'tff_modular/modules/blooper/voice/bloopers/meow1.ogg' + minspeed = 5 + maxspeed = 11 + +/datum/blooper/chirp + name = "Chirp" + id = "chirp" + allow_random = TRUE + soundpath = 'tff_modular/modules/blooper/voice/bloopers/chirp.ogg' + +/datum/blooper/caw + name = "Caw" + id = "caw" + allow_random = TRUE + soundpath = 'tff_modular/modules/blooper/voice/bloopers/caw.ogg' + +//Undertale +/datum/blooper/alphys + name = "Alphys" + id = "alphys" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_alphys.ogg' + minvariance = 0 + +/datum/blooper/asgore + name = "Asgore" + id = "asgore" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_asgore.ogg' + minvariance = 0 + +/datum/blooper/flowey + name = "Flowey (normal)" + id = "flowey1" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_flowey_1.ogg' + minvariance = 0 + +/datum/blooper/flowey/evil + name = "Flowey (evil)" + id = "flowey2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_flowey_2.ogg' + minvariance = 0 + +/datum/blooper/papyrus + name = "Papyrus" + id = "papyrus" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_papyrus.ogg' + minvariance = 0 + +/datum/blooper/ralsei + name = "Ralsei" + id = "ralsei" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_ralsei.ogg' + minvariance = 0 + +/datum/blooper/sans //real + name = "Sans" + id = "sans" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_sans.ogg' + minvariance = 0 + +/datum/blooper/toriel + name = "Toriel" + id = "toriel" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_toriel.ogg' + minvariance = 0 + maxpitch = BLOOPER_DEFAULT_MAXPITCH*2 + +/datum/blooper/undyne + name = "Undyne" + id = "undyne" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_undyne.ogg' + minvariance = 0 + +/datum/blooper/temmie + name = "Temmie" + id = "temmie" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_temmie.ogg' + minvariance = 0 + +/datum/blooper/susie + name = "Susie" + id = "susie" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_susie.ogg' + minvariance = 0 + +/datum/blooper/gaster + name = "Gaster" + id = "gaster" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_1.ogg' + minvariance = 0 + +/datum/blooper/mettaton + name = "Mettaton" + id = "mettaton" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_metta_1.ogg' + minvariance = 0 + +/datum/blooper/gen_monster + name = "Generic Monster 1" + id = "gen_monster_1" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_monster1.ogg' + minvariance = 0 + +/datum/blooper/gen_monster/alt + name = "Generic Monster 2" + id = "gen_monster_2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/undertale/voice_monster2.ogg' + minvariance = 0 + +/datum/blooper/wilson + name = "Wilson" + id = "wilson" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/dont_starve/wilson_blooper.ogg' + +/datum/blooper/wolfgang + name = "Wolfgang" + id = "wolfgang" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/dont_starve/wolfgang_blooper.ogg' + minspeed = 4 + maxspeed = 10 + +/datum/blooper/woodie + name = "Woodie" + id = "woodie" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/dont_starve/woodie_blooper.ogg' + minspeed = 4 + maxspeed = 10 + +/datum/blooper/wurt + name = "Wurt" + id = "wurt" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/dont_starve/wurt_blooper.ogg' + +/datum/blooper/wx78 + name = "wx78" + id = "wx78" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/dont_starve/wx78_blooper.ogg' + minspeed = 3 + maxspeed = 9 + +/datum/blooper/blub + name = "Blub" + id = "blub" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/blub.ogg' + +/datum/blooper/bottalk + name = "Bottalk 1" + id = "bottalk1" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/bottalk_1.ogg' + minspeed = 3 + maxspeed = 9 + +/datum/blooper/bottalk/alt1 + name = "Bottalk 2" + id = "bottalk2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/bottalk_2.ogg' + +/datum/blooper/bottalk/alt2 + name = "Bottalk 3" + id = "bottalk3" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/bottalk_3.ogg' + +/datum/blooper/bottalk/alt3 + name = "Bottalk 4" + id = "bottalk4" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/bottalk_4.ogg' + +/datum/blooper/buwoo + name = "Buwoo" + id = "buwoo" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/buwoo.ogg' + +/datum/blooper/cow + name = "Cow" + id = "cow" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/cow.ogg' + +/datum/blooper/lizard + name = "Lizard" + id = "lizard" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/lizard.ogg' + +/datum/blooper/pug + name = "Pug" + id = "pug" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/pug.ogg' + +/datum/blooper/pugg + name = "Pugg" + id = "pugg" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/pugg.ogg' + +/datum/blooper/radio + name = "Radio 1" + id = "radio1" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/radio.ogg' + +/datum/blooper/radio/short + name = "Radio 2" + id = "radio2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/radio2.ogg' + +/datum/blooper/radio/ai + name = "Radio (AI)" + id = "radio_ai" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/radio_ai.ogg' + +/datum/blooper/roach //Turkish characters be like + name = "Roach" + id = "roach" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/roach.ogg' + +/datum/blooper/skelly + name = "Skelly" + id = "skelly" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/skelly.ogg' + +/datum/blooper/speak + name = "Speak 1" + id = "speak1" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/speak_1.ogg' + +/datum/blooper/speak/alt1 + name = "Speak 2" + id = "speak2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/speak_2.ogg' + +/datum/blooper/speak/alt2 + name = "Speak 3" + id = "speak3" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/speak_3.ogg' + +/datum/blooper/speak/alt3 + name = "Speak 4" + id = "speak4" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/goon/speak_4.ogg' + +/datum/blooper/chitter/alt + name = "Chittery Alt" + id = "chitter2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/moth/mothchitter2.ogg' + +// The Mayhem Special +/datum/blooper/whistle + name = "Whistle 1" + id = "whistle1" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/birdwhistle.ogg' + +/datum/blooper/whistle/alt1 + name = "Whistle 2" + id = "whistle2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/birdwhistle2.ogg' + +/datum/blooper/caw/alt1 + name = "Caw 2" + id = "caw2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/caw.ogg' + minspeed = 4 + maxspeed = 9 + +/datum/blooper/caw/alt2 + name = "Caw 3" + id = "caw3" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/caw2.ogg' + minspeed = 3 + maxspeed = 9 + +/datum/blooper/caw/alt3 + name = "Caw 4" + id = "caw4" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/caw3.ogg' + minspeed = 3 + maxspeed = 9 + +/datum/blooper/ehh + name = "Ehh 1" + id = "ehh1" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/ehh.ogg' + minspeed = 3 + maxspeed = 9 + +/datum/blooper/ehh/alt1 + name = "Ehh 2" + id = "ehh2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/ehh2.ogg' + +/datum/blooper/ehh/alt2 + name = "Ehh 3" + id = "ehh3" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/ehh3.ogg' + +/datum/blooper/ehh/alt3 + name = "Ehh 4" + id = "ehh4" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/ehh4.ogg' + minspeed = 3 + maxspeed = 9 + +/datum/blooper/ehh/alt5 + name = "Ehh 5" + id = "ehh5" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/ehh5.ogg' + +/datum/blooper/faucet + name = "Faucet 1" + id = "faucet1" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/faucet.ogg' + +/datum/blooper/faucet/alt1 + name = "Faucet 2" + id = "faucet2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/faucet2.ogg' + +/datum/blooper/ribbit + name = "Ribbit" + id = "ribbit" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/ribbit.ogg' + +/datum/blooper/hoot + name = "Hoot" + id = "hoot" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/hoot.ogg' + minspeed = 4 + maxspeed = 9 + +/datum/blooper/tweet + name = "Tweet" + id = "tweet" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/tweet.ogg' + +/datum/blooper/dwoop + name = "Dwoop" + id = "dwoop" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/dwoop.ogg' + minspeed = 3 + maxspeed = 9 + +/datum/blooper/uhm + name = "Uhm" + id = "uhm" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/uhm.ogg' + +/datum/blooper/wurtesh + name = "Wurtesh" + id = "wurtesh" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/wurble1.ogg' + +/datum/blooper/chitter2 + name = "Chitter2" + id = "chitter2" + soundpath = 'tff_modular/modules/blooper/voice/bloopers/kazooie/chitter1.ogg' + diff --git a/tff_modular/modules/blooper/voice/bababooey/bababooey.ogg b/tff_modular/modules/blooper/voice/bababooey/bababooey.ogg new file mode 100644 index 00000000000..87c7e802bde Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/bababooey.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/bababooey2.ogg b/tff_modular/modules/blooper/voice/bababooey/bababooey2.ogg new file mode 100644 index 00000000000..53b2b3d0d49 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/bababooey2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/babafooey.ogg b/tff_modular/modules/blooper/voice/bababooey/babafooey.ogg new file mode 100644 index 00000000000..63f7db4b12c Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/babafooey.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/fafafoggy.ogg b/tff_modular/modules/blooper/voice/bababooey/fafafoggy.ogg new file mode 100644 index 00000000000..9851fb66717 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/fafafoggy.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/fafafoggy2.ogg b/tff_modular/modules/blooper/voice/bababooey/fafafoggy2.ogg new file mode 100644 index 00000000000..425be3a4c72 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/fafafoggy2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/fafafooey.ogg b/tff_modular/modules/blooper/voice/bababooey/fafafooey.ogg new file mode 100644 index 00000000000..b3d58813586 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/fafafooey.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/fafafooey2.ogg b/tff_modular/modules/blooper/voice/bababooey/fafafooey2.ogg new file mode 100644 index 00000000000..d4602643ecb Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/fafafooey2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/fafafooey3.ogg b/tff_modular/modules/blooper/voice/bababooey/fafafooey3.ogg new file mode 100644 index 00000000000..183344cb7dc Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/fafafooey3.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/ffff.ogg b/tff_modular/modules/blooper/voice/bababooey/ffff.ogg new file mode 100644 index 00000000000..c55f5ced519 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/ffff.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/ffffhvh.ogg b/tff_modular/modules/blooper/voice/bababooey/ffffhvh.ogg new file mode 100644 index 00000000000..88b9f1a1e1e Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/ffffhvh.ogg differ diff --git a/tff_modular/modules/blooper/voice/bababooey/hohohoy.ogg b/tff_modular/modules/blooper/voice/bababooey/hohohoy.ogg new file mode 100644 index 00000000000..241668ea67b Binary files /dev/null and b/tff_modular/modules/blooper/voice/bababooey/hohohoy.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/caw.ogg b/tff_modular/modules/blooper/voice/bloopers/caw.ogg new file mode 100644 index 00000000000..a560d00908c Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/caw.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/chirp.ogg b/tff_modular/modules/blooper/voice/bloopers/chirp.ogg new file mode 100644 index 00000000000..73cb0376d21 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/chirp.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/chitter.ogg b/tff_modular/modules/blooper/voice/bloopers/chitter.ogg new file mode 100644 index 00000000000..0d162fa3035 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/chitter.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/dont_starve/wilson_blooper.ogg b/tff_modular/modules/blooper/voice/bloopers/dont_starve/wilson_blooper.ogg new file mode 100644 index 00000000000..e8aaa06eb0d Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/dont_starve/wilson_blooper.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/dont_starve/wolfgang_blooper.ogg b/tff_modular/modules/blooper/voice/bloopers/dont_starve/wolfgang_blooper.ogg new file mode 100644 index 00000000000..31cbfdf7202 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/dont_starve/wolfgang_blooper.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/dont_starve/woodie_blooper.ogg b/tff_modular/modules/blooper/voice/bloopers/dont_starve/woodie_blooper.ogg new file mode 100644 index 00000000000..8092d66e618 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/dont_starve/woodie_blooper.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/dont_starve/wurt_blooper.ogg b/tff_modular/modules/blooper/voice/bloopers/dont_starve/wurt_blooper.ogg new file mode 100644 index 00000000000..d5ede2f3b9d Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/dont_starve/wurt_blooper.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/dont_starve/wx78_blooper.ogg b/tff_modular/modules/blooper/voice/bloopers/dont_starve/wx78_blooper.ogg new file mode 100644 index 00000000000..ee58058eb3f Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/dont_starve/wx78_blooper.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/blub.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/blub.ogg new file mode 100644 index 00000000000..ee6de6ede44 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/blub.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_1.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_1.ogg new file mode 100644 index 00000000000..b7272249989 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_1.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_2.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_2.ogg new file mode 100644 index 00000000000..745b1a4edcc Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_3.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_3.ogg new file mode 100644 index 00000000000..e91f6bc1567 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_3.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_4.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_4.ogg new file mode 100644 index 00000000000..3cf58966f7f Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/bottalk_4.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/buwoo.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/buwoo.ogg new file mode 100644 index 00000000000..45bcbd50c6b Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/buwoo.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/cow.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/cow.ogg new file mode 100644 index 00000000000..db6c0a63ca2 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/cow.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/lizard.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/lizard.ogg new file mode 100644 index 00000000000..48638b0f236 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/lizard.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/pug.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/pug.ogg new file mode 100644 index 00000000000..86d50225a52 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/pug.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/pugg.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/pugg.ogg new file mode 100644 index 00000000000..90fa070e8b7 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/pugg.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/radio.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/radio.ogg new file mode 100644 index 00000000000..0dcb87214ff Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/radio.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/radio2.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/radio2.ogg new file mode 100644 index 00000000000..a9364857a53 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/radio2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/radio_ai.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/radio_ai.ogg new file mode 100644 index 00000000000..97eaf17417d Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/radio_ai.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/roach.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/roach.ogg new file mode 100644 index 00000000000..1bc765fa989 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/roach.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/skelly.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/skelly.ogg new file mode 100644 index 00000000000..b8e1a2921a4 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/skelly.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/speak_1.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/speak_1.ogg new file mode 100644 index 00000000000..ab8ddde4a66 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/speak_1.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/speak_2.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/speak_2.ogg new file mode 100644 index 00000000000..a8c9444a52f Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/speak_2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/speak_3.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/speak_3.ogg new file mode 100644 index 00000000000..33ec079b84d Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/speak_3.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/goon/speak_4.ogg b/tff_modular/modules/blooper/voice/bloopers/goon/speak_4.ogg new file mode 100644 index 00000000000..6de26114aee Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/goon/speak_4.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/birdwhistle.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/birdwhistle.ogg new file mode 100644 index 00000000000..f970f8af458 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/birdwhistle.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/birdwhistle2.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/birdwhistle2.ogg new file mode 100644 index 00000000000..61fd3e850bd Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/birdwhistle2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/caw.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/caw.ogg new file mode 100644 index 00000000000..21181b65194 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/caw.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/caw2.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/caw2.ogg new file mode 100644 index 00000000000..e4e4645034b Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/caw2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/caw3.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/caw3.ogg new file mode 100644 index 00000000000..8339440d779 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/caw3.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/chitter1.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/chitter1.ogg new file mode 100644 index 00000000000..1854d50a426 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/chitter1.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/dwoop.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/dwoop.ogg new file mode 100644 index 00000000000..785a18431fd Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/dwoop.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh.ogg new file mode 100644 index 00000000000..c0b5591ed5b Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh2.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh2.ogg new file mode 100644 index 00000000000..830bb1e29e3 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh3.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh3.ogg new file mode 100644 index 00000000000..bb0925b68b1 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh3.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh4.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh4.ogg new file mode 100644 index 00000000000..5797b131797 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh4.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh5.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh5.ogg new file mode 100644 index 00000000000..970a2040bcd Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/ehh5.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/faucet.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/faucet.ogg new file mode 100644 index 00000000000..56a98a8539f Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/faucet.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/faucet2.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/faucet2.ogg new file mode 100644 index 00000000000..02af88442a6 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/faucet2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/hoot.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/hoot.ogg new file mode 100644 index 00000000000..316949652ce Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/hoot.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/ribbit.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/ribbit.ogg new file mode 100644 index 00000000000..a4299d2a744 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/ribbit.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/tweet.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/tweet.ogg new file mode 100644 index 00000000000..b784636e251 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/tweet.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/uhm.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/uhm.ogg new file mode 100644 index 00000000000..857e99c7c5a Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/uhm.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/kazooie/wurble1.ogg b/tff_modular/modules/blooper/voice/bloopers/kazooie/wurble1.ogg new file mode 100644 index 00000000000..047eca3510a Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/kazooie/wurble1.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/meow1.ogg b/tff_modular/modules/blooper/voice/bloopers/meow1.ogg new file mode 100644 index 00000000000..be9393d7d6e Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/meow1.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/moth/mothchitter2.ogg b/tff_modular/modules/blooper/voice/bloopers/moth/mothchitter2.ogg new file mode 100644 index 00000000000..07619ba1437 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/moth/mothchitter2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/mothsqueak.ogg b/tff_modular/modules/blooper/voice/bloopers/mothsqueak.ogg new file mode 100644 index 00000000000..5a345df09d2 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/mothsqueak.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_alphys.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_alphys.ogg new file mode 100644 index 00000000000..5b136e8f90b Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_alphys.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_asgore.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_asgore.ogg new file mode 100644 index 00000000000..e823a486cc9 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_asgore.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_flowey_1.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_flowey_1.ogg new file mode 100644 index 00000000000..86d00963a3b Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_flowey_1.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_flowey_2.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_flowey_2.ogg new file mode 100644 index 00000000000..8c06e29d21c Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_flowey_2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_1.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_1.ogg new file mode 100644 index 00000000000..1301f1fabd8 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_1.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_2.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_2.ogg new file mode 100644 index 00000000000..e6fa2fd4d51 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_3.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_3.ogg new file mode 100644 index 00000000000..1d6bc2cfc65 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_3.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_4.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_4.ogg new file mode 100644 index 00000000000..047d33aa37d Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_4.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_5.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_5.ogg new file mode 100644 index 00000000000..e5d2e73970a Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_5.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_6.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_6.ogg new file mode 100644 index 00000000000..85211ad1353 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_6.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_7.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_7.ogg new file mode 100644 index 00000000000..ad584a52e6c Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_gaster_7.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_metta_1.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_metta_1.ogg new file mode 100644 index 00000000000..0d4acf2b637 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_metta_1.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_monster1.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_monster1.ogg new file mode 100644 index 00000000000..94f109c3050 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_monster1.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_monster2.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_monster2.ogg new file mode 100644 index 00000000000..baec7392ec3 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_monster2.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_papyrus.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_papyrus.ogg new file mode 100644 index 00000000000..3a69144f389 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_papyrus.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_ralsei.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_ralsei.ogg new file mode 100644 index 00000000000..ee7dbb25135 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_ralsei.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_sans.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_sans.ogg new file mode 100644 index 00000000000..7ccfe7b9786 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_sans.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_susie.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_susie.ogg new file mode 100644 index 00000000000..bfe3552bb33 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_susie.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_temmie.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_temmie.ogg new file mode 100644 index 00000000000..6e1b72dee2a Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_temmie.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_toriel.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_toriel.ogg new file mode 100644 index 00000000000..326d1c2f9c6 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_toriel.ogg differ diff --git a/tff_modular/modules/blooper/voice/bloopers/undertale/voice_undyne.ogg b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_undyne.ogg new file mode 100644 index 00000000000..eebf78fb2f9 Binary files /dev/null and b/tff_modular/modules/blooper/voice/bloopers/undertale/voice_undyne.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 23c43f07d47..87d8eaa9a95 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -366,9 +366,11 @@ #include "code\__DEFINES\research\slimes.dm" #include "code\__DEFINES\~ff_defines\DNA.dm" #include "code\__DEFINES\~ff_defines\nabber_clothes_pathes.dm" +#include "code\__DEFINES\~ff_defines\say.dm" #include "code\__DEFINES\~ff_defines\signals.dm" #include "code\__DEFINES\~ff_defines\text.dm" #include "code\__DEFINES\~ff_defines\traits.dm" +#include "code\__DEFINES\~ff_defines\__HELPERS\global_lists.dm" #include "code\__DEFINES\~ff_defines\__HELPERS\ishelpers.dm" #include "code\__DEFINES\~ff_defines\__HELPERS\names.dm" #include "code\__DEFINES\~skyrat_defines\_organ_defines.dm" @@ -7709,6 +7711,9 @@ #include "tff_modular\master_files\code\modules\mod\_module.dm" #include "tff_modular\master_files\code\modules\mod\mod_clothes.dm" #include "tff_modular\modules\autoaccent\code\autoaccent.dm" +#include "tff_modular\modules\blooper\atoms_movable.dm" +#include "tff_modular\modules\blooper\bark.dm" +#include "tff_modular\modules\blooper\bark_list.dm" #include "tff_modular\modules\blueshield-mod\code.dm" #include "tff_modular\modules\blueshield-rearm\code\holster.dm" #include "tff_modular\modules\blueshield-rearm\code\projectiles.dm" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/character_voice.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/character_voice.tsx new file mode 100644 index 00000000000..23cf24448c8 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/character_voice.tsx @@ -0,0 +1,56 @@ +import { Button, Stack } from '../../../../../../components'; +import { CheckboxInput, FeatureChoiced, FeatureChoicedServerData, FeatureDropdownInput, FeatureNumberInput, FeatureNumeric, FeatureToggle, FeatureValueProps } from '../../base'; + +const FeatureBlooperDropdownInput = ( + props: FeatureValueProps +) => { + return ( + + + + + +