From 5f27f78f9f8a68e5822bd011c2d68e0ff6881cee Mon Sep 17 00:00:00 2001 From: buffyuwu <42501819+buffyuwu@users.noreply.github.com> Date: Fri, 31 Jul 2026 13:04:12 -0400 Subject: [PATCH 1/2] license enjoyer port --- code/__DEFINES/~darkpack/voicepack_emotes.dm | 29 ++ .../mob/living/carbon/carbon_defense.dm | 16 +- code/modules/mob/living/living.dm | 8 + .../master_files/code/datums/emotes.dm | 68 ++++ .../modules/emotes/code/emotes.dm | 84 ++++ .../modules/emotes/code/human_vars.dm | 22 ++ .../emotes/code/preferences/middleware.dm | 29 ++ .../emotes/code/preferences/voicepack.dm | 28 ++ .../modules/emotes/code/voicepack.dm | 29 ++ .../emotes/code/voicepacks/creatures.dm | 34 ++ .../emotes/code/voicepacks/feminine.dm | 220 +++++++++++ .../modules/emotes/code/voicepacks/haughty.dm | 52 +++ .../emotes/code/voicepacks/masculine.dm | 372 ++++++++++++++++++ .../modules/emotes/readme_voicepack.md | 32 ++ .../modules/jumping/code/jumper_component.dm | 10 + tgstation.dme | 11 + 16 files changed, 1038 insertions(+), 6 deletions(-) create mode 100644 code/__DEFINES/~darkpack/voicepack_emotes.dm create mode 100644 modular_darkpack/master_files/code/datums/emotes.dm create mode 100644 modular_darkpack/modules/emotes/code/emotes.dm create mode 100644 modular_darkpack/modules/emotes/code/human_vars.dm create mode 100644 modular_darkpack/modules/emotes/code/preferences/middleware.dm create mode 100644 modular_darkpack/modules/emotes/code/preferences/voicepack.dm create mode 100644 modular_darkpack/modules/emotes/code/voicepack.dm create mode 100644 modular_darkpack/modules/emotes/code/voicepacks/creatures.dm create mode 100644 modular_darkpack/modules/emotes/code/voicepacks/feminine.dm create mode 100644 modular_darkpack/modules/emotes/code/voicepacks/haughty.dm create mode 100644 modular_darkpack/modules/emotes/code/voicepacks/masculine.dm create mode 100644 modular_darkpack/modules/emotes/readme_voicepack.md diff --git a/code/__DEFINES/~darkpack/voicepack_emotes.dm b/code/__DEFINES/~darkpack/voicepack_emotes.dm new file mode 100644 index 000000000000..cecb49d55bee --- /dev/null +++ b/code/__DEFINES/~darkpack/voicepack_emotes.dm @@ -0,0 +1,29 @@ +#define VO_SOUND_PATH "[global.config.directory]/darkpack_config/vo" + +#define VOICE_PITCH_MIN 80 +#define VOICE_PITCH_MAX 120 +#define VOICE_PITCH_DEFAULT 100 +#define VOICE_PITCH_VARIATION 8 + +GLOBAL_LIST_INIT(voicepack_list, list( + "None" = null, + "Masculine (M)" = /datum/voicepack/human/male, + "Normal (M)" = /datum/voicepack/human/male/foppish, + "Stern (M)" = /datum/voicepack/human/male/stern, + "Warrior (M)" = /datum/voicepack/human/male/warrior, + "Knightly (M)" = /datum/voicepack/human/male/knight, + "Dignified (M)" = /datum/voicepack/human/male/elf, + "Bearded (M)" = /datum/voicepack/human/male/dwarf, + "Odd (M)" = /datum/voicepack/human/male/goblin, + "Evil (M)" = /datum/voicepack/human/male/evil, + "Old (M)" = /datum/voicepack/human/male/wizard, + "Stoner (M)" = /datum/voicepack/human/male/jester, + "Deep Voice (M)" = /datum/voicepack/human/male/zeth, + "Feminine (F)" = /datum/voicepack/human/female, + "Noble (F)" = /datum/voicepack/human/female/haughty, + "Noble II (F)" = /datum/voicepack/human/female/warrior, + "Dainty (F)" = /datum/voicepack/human/female/dainty, + "Dignified (F)" = /datum/voicepack/human/female/elf, + "Rough (F)" = /datum/voicepack/human/female/dwarf, + "Odd (F)" = /datum/voicepack/human/female/goblin, +)) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 131f38f44020..47bab4f0e953 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -311,10 +311,12 @@ to_chat(helper, span_notice("You shake [src] trying to pick [p_them()] up!")) to_chat(src, span_notice("[helper] shakes you to get you up!")) else if(check_zone(helper.zone_selected) == BODY_ZONE_HEAD && get_bodypart(BODY_ZONE_HEAD)) //Headpats! - helper.visible_message(span_notice("[helper] gives [src] a pat on the head to make [p_them()] feel better!"), \ + // DARKPACK EDIT START - emote sounds port - ORIGINAL: helper.visible_message(span_notice("[helper] gives [src] a pat on the head to make [p_them()] feel better!")) + helper.visible_message(span_notice("[helper] gives [src] a pat on the head."), \ null, span_hear("You hear a soft patter."), DEFAULT_MESSAGE_RANGE, list(helper, src)) - to_chat(helper, span_notice("You give [src] a pat on the head to make [p_them()] feel better!")) - to_chat(src, span_notice("[helper] gives you a pat on the head to make you feel better! ")) + // DARKPACK EDIT END + to_chat(helper, span_notice("You give [src] a pat on the head.")) // DARKPACK EDIT - emote sounds port - ORIGINAL: to_chat(helper, span_notice("You give [src] a pat on the head to make [p_them()] feel better!")) + to_chat(src, span_notice("[helper] gives you a pat on the head.")) // DARKPACK EDIT - emote sounds port - ORIGINAL: to_chat(src, span_notice("[helper] gives you a pat on the head to make you feel better!")) share_blood_on_touch(helper, ITEM_SLOT_HEAD|ITEM_SLOT_MASK) if(HAS_TRAIT(src, TRAIT_BADTOUCH)) @@ -348,10 +350,12 @@ to_chat(helper, span_notice("You wrap [src] into a tight bear hug!")) to_chat(src, span_notice("[helper] squeezes you super tightly in a firm bear hug!")) else - helper.visible_message(span_notice("[helper] hugs [src] to make [p_them()] feel better!"), \ + // DARKPACK EDIT START - emote sounds port - ORIGINAL: helper.visible_message(span_notice("[helper] hugs [src] to make [p_them()] feel better!") + helper.visible_message(span_notice("[helper] hugs [src]."), \ null, span_hear("You hear the rustling of clothes."), DEFAULT_MESSAGE_RANGE, list(helper, src)) - to_chat(helper, span_notice("You hug [src] to make [p_them()] feel better!")) - to_chat(src, span_notice("[helper] hugs you to make you feel better!")) + // DARKPACK EDIT END + to_chat(helper, span_notice("You hug [src].")) // DARKPACK EDIT - emote sounds port - ORIGINAL: to_chat(helper, span_notice("You hug [src] to make [p_them()] feel better!")) + to_chat(src, span_notice("[helper] hugs you.")) // DARKPACK EDIT - emote sounds port - ORIGINAL: to_chat(src, span_notice("[helper] hugs you to make you feel better!")) share_blood_on_touch(helper, ITEM_SLOT_HEAD|ITEM_SLOT_MASK|ITEM_SLOT_GLOVES) // Warm them up with hugs diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 310da8937560..afca091bed37 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -686,6 +686,10 @@ GAME_VERB_PROC(/mob/living, mob_sleep, "Sleep", null) if(!silent) to_chat(src, span_notice("You lay down.")) set_lying_down() + // DARKPACK EDIT ADD START - emote sounds port + if(!HAS_TRAIT(source, TRAIT_OBFUSCATED)) + playsound(src, "[VO_SOUND_PATH]/actions/toggledown.ogg", 50, FALSE) + // DARKPACK EDIT ADD END else if(body_position == STANDING_UP) if(!silent) @@ -697,6 +701,10 @@ GAME_VERB_PROC(/mob/living, mob_sleep, "Sleep", null) if(!silent) to_chat(src, span_notice("You stand up.")) get_up(instant) + // DARKPACK EDIT ADD START - emote sounds port + if(!HAS_TRAIT(source, TRAIT_OBFUSCATED)) + playsound(src, "[VO_SOUND_PATH]/actions/toggleup.ogg", 50, FALSE) + // DARKPACK EDIT ADD END SEND_SIGNAL(src, COMSIG_LIVING_RESTING, new_resting, silent, instant) update_resting() diff --git a/modular_darkpack/master_files/code/datums/emotes.dm b/modular_darkpack/master_files/code/datums/emotes.dm new file mode 100644 index 000000000000..6a18fb7dc120 --- /dev/null +++ b/modular_darkpack/master_files/code/datums/emotes.dm @@ -0,0 +1,68 @@ +// hoots and hollers!! emote sounds from azure peak +/datum/emote/proc/tfn_voicepack_sound(mob/living/carbon/human/H, emote_key) + return H.get_voicepack_sound(emote_key) + +/datum/emote/get_sound(mob/living/user) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/sound/S = tfn_voicepack_sound(H, key) + if(S) + return S + return ..() + +/datum/emote/living/giggle/get_sound(mob/living/carbon/human/user) + if(istype(user)) + var/sound/S = tfn_voicepack_sound(user, "giggle") + if(S) + return S + return ..() + +/datum/emote/living/laugh/get_sound(mob/living/carbon/human/user) + if(istype(user)) + var/sound/S = tfn_voicepack_sound(user, "laugh") + if(S) + return S + return ..() + +/datum/emote/living/scream/get_sound(mob/living/user) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/sound/S = tfn_voicepack_sound(H, "scream") + if(S) + return S + return ..() + +/datum/emote/living/sigh/get_sound(mob/living/carbon/human/user) + if(istype(user)) + var/sound/S = tfn_voicepack_sound(user, "sigh") + if(S) + return S + return ..() + +/datum/emote/living/sneeze/get_sound(mob/living/carbon/human/user) + if(istype(user)) + var/sound/S = tfn_voicepack_sound(user, "sneeze") + if(S) + return S + return ..() + +/datum/emote/living/cough/get_sound(mob/living/carbon/human/user) + if(istype(user)) + var/sound/S = tfn_voicepack_sound(user, "cough") + if(S) + return S + return ..() + +/datum/emote/living/sniff/get_sound(mob/living/carbon/human/user) + if(istype(user)) + var/sound/S = tfn_voicepack_sound(user, "sniff") + if(S) + return S + return ..() + +/datum/emote/living/snore/get_sound(mob/living/carbon/human/user) + if(istype(user)) + var/sound/S = tfn_voicepack_sound(user, "snore") + if(S) + return S + return ..() diff --git a/modular_darkpack/modules/emotes/code/emotes.dm b/modular_darkpack/modules/emotes/code/emotes.dm new file mode 100644 index 000000000000..1732dd481879 --- /dev/null +++ b/modular_darkpack/modules/emotes/code/emotes.dm @@ -0,0 +1,84 @@ +/datum/emote/living/hmm + key = "hmm" + key_third_person = "hmms" + message = "hmms." + message_mime = "looks thoughtful." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/huh + key = "huh" + key_third_person = "sounds confused" + message = "sounds confused." + message_mime = "looks confused." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/hum + key = "hum" + key_third_person = "hums" + message = "hums quietly." + message_mime = "hums silently." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/clearthroat + key = "clearthroat" + key_third_person = "clears their throat" + message = "clears their throat." + message_mime = "clears their throat silently." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/hmph + key = "hmph" + key_third_person = "hmphs" + message = "hmphs." + message_mime = "makes a dismissive gesture." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/haltyell + key = "haltyell" + key_third_person = "calls out" + message = "calls out!" + message_mime = "gestures forcefully!" + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/shh + key = "shh" + key_third_person = "shushes" + message = "shushes." + message_mime = "makes a shushing motion." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/pleased + key = "pleased" + key_third_person = "makes a pleased sound" + message = "makes a pleased sound." + message_mime = "looks pleased." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/warcry + key = "warcry" + key_third_person = "lets out a war cry" + message = "lets out a war cry!" + message_mime = "raises their fists defiantly!" + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/rage + key = "rage" + key_third_person = "lets out a scream in rage" + message = "screams in rage!" + message_mime = "seethes with silent fury!" + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + +/datum/emote/living/sob + key = "sob" + key_third_person = "sobs" + message = "sobs." + message_mime = "sobs silently." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + stat_allowed = SOFT_CRIT + +/datum/emote/living/leap + key = "leap" + key_third_person = "leaps" + message = "leaps!" + message_mime = "leaps!" + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE diff --git a/modular_darkpack/modules/emotes/code/human_vars.dm b/modular_darkpack/modules/emotes/code/human_vars.dm new file mode 100644 index 000000000000..1492cf941395 --- /dev/null +++ b/modular_darkpack/modules/emotes/code/human_vars.dm @@ -0,0 +1,22 @@ +/mob/living/carbon/human + var/datum/voicepack/voicepack + var/voice_pitch = VOICE_PITCH_DEFAULT + +/mob/living/carbon/human/proc/get_voicepack_sound(key) + var/datum/voicepack/voice_pack + if(iscrinos(src) || islupus(src)) + voice_pack = new /datum/voicepack/werewolf() + else + voice_pack = voicepack + if(!voice_pack) + return null + var/raw = voice_pack.get_sound(key, src) + if(!raw && istype(voice_pack, /datum/voicepack/human)) + var/datum/voicepack/fallback = gender == FEMALE ? new /datum/voicepack/human/female() : new /datum/voicepack/human/male() + raw = fallback.get_sound(key, src) + if(!raw) + return null + var/sound/emote_sound = sound(islist(raw) ? pick(raw) : raw) + var/pitched = clamp(voice_pitch + rand(-VOICE_PITCH_VARIATION, VOICE_PITCH_VARIATION), VOICE_PITCH_MIN, VOICE_PITCH_MAX) + emote_sound.frequency = MIN_EMOTE_PITCH + (pitched - VOICE_PITCH_MIN) * (MAX_EMOTE_PITCH - MIN_EMOTE_PITCH) / (VOICE_PITCH_MAX - VOICE_PITCH_MIN) + return emote_sound diff --git a/modular_darkpack/modules/emotes/code/preferences/middleware.dm b/modular_darkpack/modules/emotes/code/preferences/middleware.dm new file mode 100644 index 000000000000..861bc04e97cd --- /dev/null +++ b/modular_darkpack/modules/emotes/code/preferences/middleware.dm @@ -0,0 +1,29 @@ +/datum/preference_middleware/emote_voicepack + COOLDOWN_DECLARE(preview_cooldown) + action_delegations = list( + "preview_voicepack" = PROC_REF(preview_voicepack), + ) + +/datum/preference_middleware/emote_voicepack/proc/preview_voicepack(list/params, mob/user) + if(!COOLDOWN_FINISHED(src, preview_cooldown)) + return TRUE + COOLDOWN_START(src, preview_cooldown, 1 SECONDS) + var/pack_name = preferences.read_preference(/datum/preference/choiced/emote_voicepack) + var/vp_type = GLOB.voicepack_list[pack_name] + if(!vp_type) + return TRUE + var/datum/voicepack/vp = new vp_type() + var/raw + for(var/key in shuffle(list("laugh", "pain", "aggro", "groan", "scream", "hmm", "huh", "painscream"))) + raw = vp.get_sound(key) + if(raw) + break + if(!raw) + return TRUE + var/pitch = preferences.read_preference(/datum/preference/numeric/emote_voice_pitch) + var/picked = islist(raw) ? pick(raw) : raw + var/sound/S = sound(picked) + var/t = clamp(pitch + rand(-VOICE_PITCH_VARIATION, VOICE_PITCH_VARIATION), VOICE_PITCH_MIN, VOICE_PITCH_MAX) + S.frequency = MIN_EMOTE_PITCH + (t - VOICE_PITCH_MIN) * (MAX_EMOTE_PITCH - MIN_EMOTE_PITCH) / (VOICE_PITCH_MAX - VOICE_PITCH_MIN) + SEND_SOUND(user, S) + return TRUE diff --git a/modular_darkpack/modules/emotes/code/preferences/voicepack.dm b/modular_darkpack/modules/emotes/code/preferences/voicepack.dm new file mode 100644 index 000000000000..58c66a896532 --- /dev/null +++ b/modular_darkpack/modules/emotes/code/preferences/voicepack.dm @@ -0,0 +1,28 @@ +/datum/preference/choiced/emote_voicepack + category = PREFERENCE_CATEGORY_VOCALS + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "emote_voicepack" + +/datum/preference/choiced/emote_voicepack/init_possible_values() + return assoc_to_keys(GLOB.voicepack_list) + +/datum/preference/choiced/emote_voicepack/create_default_value() + return "None" + +/datum/preference/choiced/emote_voicepack/apply_to_human(mob/living/carbon/human/target, value) + var/voicepack_type = GLOB.voicepack_list[value] + if(voicepack_type) + target.voicepack = new voicepack_type() + +/datum/preference/numeric/emote_voice_pitch + category = PREFERENCE_CATEGORY_VOCALS + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "emote_voice_pitch" + minimum = VOICE_PITCH_MIN + maximum = VOICE_PITCH_MAX + +/datum/preference/numeric/emote_voice_pitch/create_default_value() + return VOICE_PITCH_DEFAULT + +/datum/preference/numeric/emote_voice_pitch/apply_to_human(mob/living/carbon/human/target, value) + target.voice_pitch = value diff --git a/modular_darkpack/modules/emotes/code/voicepack.dm b/modular_darkpack/modules/emotes/code/voicepack.dm new file mode 100644 index 000000000000..a8337d47ccd8 --- /dev/null +++ b/modular_darkpack/modules/emotes/code/voicepack.dm @@ -0,0 +1,29 @@ +/datum/voicepack + +/datum/voicepack/proc/get_sound(key, mob/living/carbon/human/user) + return + +/datum/voicepack/human + +/datum/voicepack/human/male +/datum/voicepack/human/male/foppish +/datum/voicepack/human/male/stern +/datum/voicepack/human/male/warrior +/datum/voicepack/human/male/knight +/datum/voicepack/human/male/elf +/datum/voicepack/human/male/dwarf +/datum/voicepack/human/male/goblin +/datum/voicepack/human/male/evil +/datum/voicepack/human/male/wizard +/datum/voicepack/human/male/jester +/datum/voicepack/human/male/zeth + +/datum/voicepack/human/female +/datum/voicepack/human/female/haughty +/datum/voicepack/human/female/warrior +/datum/voicepack/human/female/dainty +/datum/voicepack/human/female/elf +/datum/voicepack/human/female/dwarf +/datum/voicepack/human/female/goblin + +/datum/voicepack/werewolf diff --git a/modular_darkpack/modules/emotes/code/voicepacks/creatures.dm b/modular_darkpack/modules/emotes/code/voicepacks/creatures.dm new file mode 100644 index 000000000000..f4e3d23a87b2 --- /dev/null +++ b/modular_darkpack/modules/emotes/code/voicepacks/creatures.dm @@ -0,0 +1,34 @@ +/datum/voicepack/werewolf + +/datum/voicepack/werewolf/get_sound(key, mob/living/carbon/human/user) + if(user && get_corax_splat(user)) + if(iscrinos(user)) + if(key == "jump" || key == "leap") + return list("[VO_SOUND_PATH]/mobs/wwolf/jump_1.ogg","[VO_SOUND_PATH]/mobs/wwolf/jump_2.ogg","[VO_SOUND_PATH]/mobs/wwolf/jump_3.ogg") + return 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/emotes/cawcrinos.ogg' + if(islupus(user)) + if(key == "jump" || key == "leap") + return 'modular_darkpack/modules/external_organs/sounds/wing_flap_flying.ogg' + return list( + 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/emotes/caw.ogg', + 'modular_darkpack/modules/emotes/sound/caw.ogg', + 'modular_darkpack/modules/emotes/sound/caw2.ogg', + ) + + var/used + switch(key) + if("aggro", "rage") + used = "[VO_SOUND_PATH]/mobs/wwolf/roar.ogg" + if("deathgurgle") + used = "[VO_SOUND_PATH]/mobs/wwolf/death.ogg" + if("firescream", "agony") + used = "[VO_SOUND_PATH]/mobs/wwolf/painscream.ogg" + if("jump", "leap") + used = list("[VO_SOUND_PATH]/mobs/wwolf/jump_1.ogg","[VO_SOUND_PATH]/mobs/wwolf/jump_2.ogg","[VO_SOUND_PATH]/mobs/wwolf/jump_3.ogg") + if("pain", "paincrit") + used = list("[VO_SOUND_PATH]/mobs/wwolf/pain_1.ogg","[VO_SOUND_PATH]/mobs/wwolf/pain_2.ogg","[VO_SOUND_PATH]/mobs/wwolf/pain_3.ogg") + if("painscream") + used = "[VO_SOUND_PATH]/mobs/wwolf/painscream.ogg" + if("scream", "howl") + used = list("[VO_SOUND_PATH]/mobs/wwolf/howl_1.ogg","[VO_SOUND_PATH]/mobs/wwolf/howl_2.ogg") + return used diff --git a/modular_darkpack/modules/emotes/code/voicepacks/feminine.dm b/modular_darkpack/modules/emotes/code/voicepacks/feminine.dm new file mode 100644 index 000000000000..4746192f65e8 --- /dev/null +++ b/modular_darkpack/modules/emotes/code/voicepacks/feminine.dm @@ -0,0 +1,220 @@ +/datum/voicepack/human/female/get_sound(key) + var/used + switch(key) + if("attack") + used = list("[VO_SOUND_PATH]/female/gen/attack_1.ogg","[VO_SOUND_PATH]/female/gen/attack_2.ogg","[VO_SOUND_PATH]/female/gen/attack_3.ogg","[VO_SOUND_PATH]/female/gen/attack_4.ogg","[VO_SOUND_PATH]/female/gen/attack_5.ogg") + if("agony") + used = list("[VO_SOUND_PATH]/female/gen/agony_1.ogg","[VO_SOUND_PATH]/female/gen/agony_2.ogg","[VO_SOUND_PATH]/female/gen/agony_3.ogg") + if("breathgasp") + used = "[VO_SOUND_PATH]/female/gen/breathgasp.ogg" + if("burp") + used = "[VO_SOUND_PATH]/female/gen/burp.ogg" + if("chuckle") + used = list("[VO_SOUND_PATH]/female/gen/chuckle_1.ogg","[VO_SOUND_PATH]/female/gen/chuckle_2.ogg") + if("clearthroat") + used = "[VO_SOUND_PATH]/female/gen/clearthroat.ogg" + if("cough") + used = list("[VO_SOUND_PATH]/female/gen/cough_1.ogg","[VO_SOUND_PATH]/female/gen/cough_2.ogg") + if("cry", "sob") + used = list("[VO_SOUND_PATH]/female/gen/cry_1.ogg","[VO_SOUND_PATH]/female/gen/cry_2.ogg","[VO_SOUND_PATH]/female/gen/cry_3.ogg") + if("deathgurgle") + used = list("[VO_SOUND_PATH]/female/gen/deathgurgle_1.ogg","[VO_SOUND_PATH]/female/gen/deathgurgle_2.ogg") + if("drown") + used = list("[VO_SOUND_PATH]/female/gen/drown_1.ogg","[VO_SOUND_PATH]/female/gen/drown_2.ogg") + if("embed") + used = list("[VO_SOUND_PATH]/female/gen/embed_1.ogg","[VO_SOUND_PATH]/female/gen/embed_2.ogg") + if("fatigue") + used = list("[VO_SOUND_PATH]/female/gen/fatigue_1.ogg","[VO_SOUND_PATH]/female/gen/fatigue_2.ogg","[VO_SOUND_PATH]/female/gen/fatigue_3.ogg") + if("firescream") + used = list("[VO_SOUND_PATH]/female/gen/firescream_1.ogg","[VO_SOUND_PATH]/female/gen/firescream_2.ogg") + if("gag") + used = list("[VO_SOUND_PATH]/female/gen/gag_1.ogg","[VO_SOUND_PATH]/female/gen/gag_2.ogg") + if("gasp") + used = list("[VO_SOUND_PATH]/female/gen/gasp_1.ogg","[VO_SOUND_PATH]/female/gen/gasp_2.ogg") + if("giggle") + used = list("[VO_SOUND_PATH]/female/gen/giggle_1.ogg","[VO_SOUND_PATH]/female/gen/giggle_2.ogg") + if("groan") + used = list("[VO_SOUND_PATH]/female/gen/groan_1.ogg","[VO_SOUND_PATH]/female/gen/groan_2.ogg","[VO_SOUND_PATH]/female/gen/groan_3.ogg") + if("haltyell") + used = list("[VO_SOUND_PATH]/female/gen/haltyell_1.ogg","[VO_SOUND_PATH]/female/gen/haltyell_2.ogg") + if("hmm") + used = "[VO_SOUND_PATH]/female/gen/hmm.ogg" + if("hmph") + used = "[VO_SOUND_PATH]/female/gen/hmph_1.ogg" + if("huh") + used = list("[VO_SOUND_PATH]/female/gen/huh_1.ogg","[VO_SOUND_PATH]/female/gen/huh_2.ogg") + if("hum") + used = list("[VO_SOUND_PATH]/female/gen/hum_1.ogg","[VO_SOUND_PATH]/female/gen/hum_2.ogg","[VO_SOUND_PATH]/female/gen/hum_3.ogg") + if("jump") + used = "[VO_SOUND_PATH]/female/gen/jump.ogg" + if("laugh") + used = list("[VO_SOUND_PATH]/female/gen/laugh_1.ogg","[VO_SOUND_PATH]/female/gen/laugh_2.ogg","[VO_SOUND_PATH]/female/gen/laugh_3.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/female/gen/pain_1.ogg","[VO_SOUND_PATH]/female/gen/pain_2.ogg","[VO_SOUND_PATH]/female/gen/pain_3.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/female/gen/paincrit_1.ogg","[VO_SOUND_PATH]/female/gen/paincrit_2.ogg") + if("painmoan") + used = list("[VO_SOUND_PATH]/female/gen/painmoan_1.ogg","[VO_SOUND_PATH]/female/gen/painmoan_2.ogg","[VO_SOUND_PATH]/female/gen/painmoan_3.ogg","[VO_SOUND_PATH]/female/gen/painmoan_4.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/female/gen/painscream_1.ogg","[VO_SOUND_PATH]/female/gen/painscream_2.ogg","[VO_SOUND_PATH]/female/gen/painscream_3.ogg") + if("rage") + used = list("[VO_SOUND_PATH]/female/gen/rage_1.ogg","[VO_SOUND_PATH]/female/gen/rage_2.ogg","[VO_SOUND_PATH]/female/gen/rage_3.ogg") + return used + + +/datum/voicepack/human/female/warrior + +/datum/voicepack/human/female/warrior/get_sound(key) + var/used + switch(key) + if("attack") + used = list("[VO_SOUND_PATH]/female/warrior/attack_1.ogg","[VO_SOUND_PATH]/female/warrior/attack_2.ogg","[VO_SOUND_PATH]/female/warrior/attack_3.ogg","[VO_SOUND_PATH]/female/warrior/attack_4.ogg","[VO_SOUND_PATH]/female/warrior/attack_5.ogg","[VO_SOUND_PATH]/female/warrior/attack_6.ogg") + if("cackle") + used = "[VO_SOUND_PATH]/female/warrior/cackle_1.ogg" + if("chuckle") + used = list("[VO_SOUND_PATH]/female/warrior/chuckle_1.ogg","[VO_SOUND_PATH]/female/warrior/chuckle_2.ogg") + if("fatigue") + used = "[VO_SOUND_PATH]/female/warrior/fatigue_1.ogg" + if("gasp") + used = list("[VO_SOUND_PATH]/female/warrior/gasp_2.ogg") + if("giggle") + used = list("[VO_SOUND_PATH]/female/warrior/giggle_1.ogg","[VO_SOUND_PATH]/female/warrior/giggle_2.ogg") + if("groan") + used = list("[VO_SOUND_PATH]/female/warrior/groan_1.ogg","[VO_SOUND_PATH]/female/warrior/groan_2.ogg","[VO_SOUND_PATH]/female/warrior/groan_3.ogg","[VO_SOUND_PATH]/female/warrior/groan_4.ogg","[VO_SOUND_PATH]/female/warrior/groan_6.ogg") + if("hmm") + used = list("[VO_SOUND_PATH]/female/warrior/hmm_1.ogg","[VO_SOUND_PATH]/female/warrior/hmm_2.ogg") + if("huh") + used = "[VO_SOUND_PATH]/female/warrior/huh_1.ogg" + if("hum") + used = list("[VO_SOUND_PATH]/female/warrior/hum_1.ogg","[VO_SOUND_PATH]/female/warrior/hum_2.ogg","[VO_SOUND_PATH]/female/warrior/hum_3.ogg","[VO_SOUND_PATH]/female/warrior/hum_4.ogg","[VO_SOUND_PATH]/female/warrior/hum_5.ogg","[VO_SOUND_PATH]/female/warrior/hum_6.ogg") + if("jump") + used = list("[VO_SOUND_PATH]/female/warrior/jump_1.ogg","[VO_SOUND_PATH]/female/warrior/jump_2.ogg","[VO_SOUND_PATH]/female/warrior/jump_3.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/female/warrior/laugh_1.ogg","[VO_SOUND_PATH]/female/warrior/laugh_2.ogg","[VO_SOUND_PATH]/female/warrior/laugh_3.ogg","[VO_SOUND_PATH]/female/warrior/laugh_4.ogg","[VO_SOUND_PATH]/female/warrior/laugh_5.ogg","[VO_SOUND_PATH]/female/warrior/laugh_6.ogg","[VO_SOUND_PATH]/female/warrior/laugh_7.ogg","[VO_SOUND_PATH]/female/warrior/laugh_8.ogg") + if("leap") + used = list("[VO_SOUND_PATH]/female/warrior/leap_1.ogg","[VO_SOUND_PATH]/female/warrior/leap_2.ogg","[VO_SOUND_PATH]/female/warrior/leap_3.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/female/warrior/pain_1.ogg","[VO_SOUND_PATH]/female/warrior/pain_2.ogg","[VO_SOUND_PATH]/female/warrior/pain_3.ogg","[VO_SOUND_PATH]/female/warrior/pain_4.ogg","[VO_SOUND_PATH]/female/warrior/pain_5.ogg","[VO_SOUND_PATH]/female/warrior/pain_6.ogg","[VO_SOUND_PATH]/female/warrior/pain_7.ogg","[VO_SOUND_PATH]/female/warrior/pain_8.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/female/warrior/paincrit_1.ogg","[VO_SOUND_PATH]/female/warrior/paincrit_2.ogg","[VO_SOUND_PATH]/female/warrior/paincrit_3.ogg") + if("painmoan") + used = list("[VO_SOUND_PATH]/female/warrior/painmoan_1.ogg","[VO_SOUND_PATH]/female/warrior/painmoan_2.ogg","[VO_SOUND_PATH]/female/warrior/painmoan_3.ogg","[VO_SOUND_PATH]/female/warrior/painmoan_4.ogg","[VO_SOUND_PATH]/female/warrior/painmoan_5.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/female/warrior/painscream_1.ogg","[VO_SOUND_PATH]/female/warrior/painscream_2.ogg","[VO_SOUND_PATH]/female/warrior/painscream_3.ogg","[VO_SOUND_PATH]/female/warrior/painscream_4.ogg","[VO_SOUND_PATH]/female/warrior/painscream_5.ogg") + if("pleased") + used = list("[VO_SOUND_PATH]/female/warrior/pleased_1.ogg","[VO_SOUND_PATH]/female/warrior/pleased_2.ogg","[VO_SOUND_PATH]/female/warrior/pleased_3.ogg") + if("rage") + used = list("[VO_SOUND_PATH]/female/warrior/rage_1.ogg","[VO_SOUND_PATH]/female/warrior/rage_2.ogg","[VO_SOUND_PATH]/female/warrior/rage_3.ogg") + if("sigh") + used = list("[VO_SOUND_PATH]/female/warrior/sigh_1.ogg","[VO_SOUND_PATH]/female/warrior/sigh_2.ogg") + if("warcry") + used = list("[VO_SOUND_PATH]/female/warrior/warcry_1.ogg","[VO_SOUND_PATH]/female/warrior/warcry_2.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/female/dainty + +/datum/voicepack/human/female/dainty/get_sound(key) + var/used + switch(key) + if("chuckle") + used = list("[VO_SOUND_PATH]/female/dainty/chuckle_1.ogg","[VO_SOUND_PATH]/female/dainty/chuckle_2.ogg","[VO_SOUND_PATH]/female/dainty/chuckle_3.ogg") + if("clearthroat") + used = list("[VO_SOUND_PATH]/female/dainty/clearthroat_1.ogg","[VO_SOUND_PATH]/female/dainty/clearthroat_2.ogg") + if("cough") + used = "[VO_SOUND_PATH]/female/dainty/cough_1.ogg" + if("cry", "sob") + used = "[VO_SOUND_PATH]/female/dainty/cry_1.ogg" + if("gasp") + used = list("[VO_SOUND_PATH]/female/dainty/gasp_1.ogg","[VO_SOUND_PATH]/female/dainty/gasp_2.ogg","[VO_SOUND_PATH]/female/dainty/gasp_3.ogg","[VO_SOUND_PATH]/female/haughty/gasp_1.ogg") + if("giggle") + used = list("[VO_SOUND_PATH]/female/dainty/giggle_1.ogg","[VO_SOUND_PATH]/female/dainty/giggle_2.ogg") + if("hmm") + used = list("[VO_SOUND_PATH]/female/dainty/hmm_1.ogg","[VO_SOUND_PATH]/female/dainty/hmm_2.ogg","[VO_SOUND_PATH]/female/dainty/hmm_3.ogg","[VO_SOUND_PATH]/female/dainty/hmm_4.ogg","[VO_SOUND_PATH]/female/dainty/hmm_5.ogg") + if("hmph") + used = list("[VO_SOUND_PATH]/female/gen/hmph_1.ogg","[VO_SOUND_PATH]/female/haughty/hmph_1.ogg") + if("huh") + used = list("[VO_SOUND_PATH]/female/dainty/huh_1.ogg","[VO_SOUND_PATH]/female/dainty/huh_2.ogg","[VO_SOUND_PATH]/female/dainty/huh_3.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/female/dainty/laugh_1.ogg","[VO_SOUND_PATH]/female/dainty/laugh_2.ogg","[VO_SOUND_PATH]/female/dainty/laugh_3.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/female/dainty/pain_1.ogg","[VO_SOUND_PATH]/female/dainty/pain_2.ogg","[VO_SOUND_PATH]/female/dainty/pain_3.ogg","[VO_SOUND_PATH]/female/dainty/pain_4.ogg","[VO_SOUND_PATH]/female/dainty/pain_5.ogg","[VO_SOUND_PATH]/female/dainty/pain_6.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/female/dainty/paincrit_1.ogg","[VO_SOUND_PATH]/female/dainty/paincrit_2.ogg","[VO_SOUND_PATH]/female/dainty/paincrit_3.ogg","[VO_SOUND_PATH]/female/dainty/paincrit_4.ogg","[VO_SOUND_PATH]/female/dainty/paincrit_5.ogg","[VO_SOUND_PATH]/female/dainty/paincrit_6.ogg","[VO_SOUND_PATH]/female/dainty/paincrit_7.ogg") + if("painmoan") + used = list("[VO_SOUND_PATH]/female/dainty/painmoan_1.ogg","[VO_SOUND_PATH]/female/dainty/painmoan_2.ogg","[VO_SOUND_PATH]/female/dainty/painmoan_3.ogg","[VO_SOUND_PATH]/female/dainty/painmoan_4.ogg","[VO_SOUND_PATH]/female/dainty/painmoan_5.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/female/dainty/painscream_1.ogg","[VO_SOUND_PATH]/female/dainty/painscream_2.ogg","[VO_SOUND_PATH]/female/dainty/painscream_3.ogg","[VO_SOUND_PATH]/female/dainty/painscream_4.ogg") + if("shh") + used = list("[VO_SOUND_PATH]/female/dainty/shh_1.ogg","[VO_SOUND_PATH]/female/dainty/shh_2.ogg") + if("sigh") + used = list("[VO_SOUND_PATH]/female/dainty/sigh_1.ogg","[VO_SOUND_PATH]/female/dainty/sigh_2.ogg","[VO_SOUND_PATH]/female/dainty/sigh_3.ogg","[VO_SOUND_PATH]/female/dainty/sigh_4.ogg") + if("sneeze") + used = "[VO_SOUND_PATH]/female/dainty/sneeze_1.ogg" + if(!used) + used = ..() + return used + + +/datum/voicepack/human/female/elf + +/datum/voicepack/human/female/elf/get_sound(key) + var/used + switch(key) + if("breathgasp") + used = list("[VO_SOUND_PATH]/female/elf/breathgasp_1.ogg","[VO_SOUND_PATH]/female/elf/breathgasp_2.ogg") + if("embed") + used = list("[VO_SOUND_PATH]/female/elf/pain_1.ogg","[VO_SOUND_PATH]/female/elf/pain_2.ogg","[VO_SOUND_PATH]/female/elf/pain_3.ogg","[VO_SOUND_PATH]/female/elf/pain_4.ogg") + if("fatigue") + used = "[VO_SOUND_PATH]/female/elf/fatigue.ogg" + if("firescream") + used = "[VO_SOUND_PATH]/female/elf/fatigue.ogg" + if("gasp") + used = list("[VO_SOUND_PATH]/female/elf/gasp_1.ogg","[VO_SOUND_PATH]/female/elf/gasp_2.ogg","[VO_SOUND_PATH]/female/elf/gasp_3.ogg") + if("groan") + used = "[VO_SOUND_PATH]/female/elf/groan.ogg" + if("haltyell") + used = "[VO_SOUND_PATH]/female/elf/haltyell.ogg" + if("hmm") + used = list("[VO_SOUND_PATH]/female/elf/hmm_1.ogg","[VO_SOUND_PATH]/female/elf/hmm_2.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/female/elf/pain_1.ogg","[VO_SOUND_PATH]/female/elf/pain_2.ogg","[VO_SOUND_PATH]/female/elf/pain_3.ogg","[VO_SOUND_PATH]/female/elf/pain_4.ogg") + if("paincrit") + used = "[VO_SOUND_PATH]/female/elf/paincrit.ogg" + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/female/elf/painscream_1.ogg","[VO_SOUND_PATH]/female/elf/painscream_2.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/female/dwarf + +/datum/voicepack/human/female/dwarf/get_sound(key) + var/used + switch(key) + if("chuckle") + used = list("[VO_SOUND_PATH]/female/dwarf/chuckle_1.ogg","[VO_SOUND_PATH]/female/dwarf/chuckle_2.ogg","[VO_SOUND_PATH]/female/dwarf/chuckle_3.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/female/dwarf/laugh_1.ogg","[VO_SOUND_PATH]/female/dwarf/laugh_2.ogg","[VO_SOUND_PATH]/female/dwarf/laugh_3.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/female/goblin + +/datum/voicepack/human/female/goblin/get_sound(key) + var/used + switch(key) + if("chuckle") + used = list("[VO_SOUND_PATH]/female/goblin/chuckle_1.ogg","[VO_SOUND_PATH]/female/goblin/chuckle_3.ogg","[VO_SOUND_PATH]/female/goblin/chuckle_4.ogg") + if("giggle") + used = list("[VO_SOUND_PATH]/female/goblin/giggle_1.ogg","[VO_SOUND_PATH]/female/goblin/giggle_4.ogg","[VO_SOUND_PATH]/female/goblin/giggle_6.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/female/goblin/laugh_1.ogg","[VO_SOUND_PATH]/female/goblin/laugh_2.ogg","[VO_SOUND_PATH]/female/goblin/laugh_4.ogg") + if(!used) + used = ..() + return used diff --git a/modular_darkpack/modules/emotes/code/voicepacks/haughty.dm b/modular_darkpack/modules/emotes/code/voicepacks/haughty.dm new file mode 100644 index 000000000000..6424607a1901 --- /dev/null +++ b/modular_darkpack/modules/emotes/code/voicepacks/haughty.dm @@ -0,0 +1,52 @@ +/datum/voicepack/human/female/haughty/get_sound(key) + var/used + switch(key) + if("giggle") + used = list( + "[VO_SOUND_PATH]/female/haughty/giggle_1.ogg", + "[VO_SOUND_PATH]/female/haughty/giggle_2.ogg", + ) + if("sigh") + used = list( + "[VO_SOUND_PATH]/female/haughty/sigh_1.ogg", + "[VO_SOUND_PATH]/female/haughty/sigh_2.ogg", + ) + if("gasp") + used = list("[VO_SOUND_PATH]/female/haughty/gasp_2.ogg") + if("cackle") + used = list("[VO_SOUND_PATH]/female/haughty/cackle_1.ogg") + if("chuckle") + used = list( + "[VO_SOUND_PATH]/female/haughty/chuckle_1.ogg", + "[VO_SOUND_PATH]/female/haughty/chuckle_2.ogg", + ) + if("laugh") + used = list( + "[VO_SOUND_PATH]/female/haughty/laugh_2.ogg", + "[VO_SOUND_PATH]/female/haughty/laugh_3.ogg", + "[VO_SOUND_PATH]/female/haughty/laugh_4.ogg", + "[VO_SOUND_PATH]/female/old/noble/laugh_1.ogg", + "[VO_SOUND_PATH]/female/old/noble/laugh_2.ogg", + "[VO_SOUND_PATH]/female/old/noble/laugh_3.ogg", + ) + if("painscream", "scream") + used = list( + "[VO_SOUND_PATH]/female/haughty/painscream_1.ogg", + "[VO_SOUND_PATH]/female/haughty/painscream_2.ogg", + ) + if("painmoan") + used = list( + "[VO_SOUND_PATH]/female/haughty/painmoan_1.ogg", + "[VO_SOUND_PATH]/female/haughty/painmoan_2.ogg", + "[VO_SOUND_PATH]/female/haughty/painmoan_3.ogg", + "[VO_SOUND_PATH]/female/haughty/painmoan_4.ogg", + ) + if("paincrit") + used = list( + "[VO_SOUND_PATH]/female/haughty/paincrit_1.ogg", + "[VO_SOUND_PATH]/female/haughty/paincrit_2.ogg", + "[VO_SOUND_PATH]/female/haughty/paincrit_3.ogg", + ) + if(!used) + used = ..() + return used diff --git a/modular_darkpack/modules/emotes/code/voicepacks/masculine.dm b/modular_darkpack/modules/emotes/code/voicepacks/masculine.dm new file mode 100644 index 000000000000..858786c50348 --- /dev/null +++ b/modular_darkpack/modules/emotes/code/voicepacks/masculine.dm @@ -0,0 +1,372 @@ +/datum/voicepack/human/male/get_sound(key) + var/used + switch(key) + if("attack") + used = list("[VO_SOUND_PATH]/male/gen/attack_1.ogg","[VO_SOUND_PATH]/male/gen/attack_2.ogg","[VO_SOUND_PATH]/male/gen/attack_3.ogg","[VO_SOUND_PATH]/male/gen/attack_4.ogg","[VO_SOUND_PATH]/male/gen/attack_5.ogg","[VO_SOUND_PATH]/male/gen/attack_6.ogg") + if("agony") + used = list("[VO_SOUND_PATH]/male/gen/agony_1.ogg","[VO_SOUND_PATH]/male/gen/agony_2.ogg","[VO_SOUND_PATH]/male/gen/agony_3.ogg","[VO_SOUND_PATH]/male/gen/agony_4.ogg","[VO_SOUND_PATH]/male/gen/agony_5.ogg") + if("breathgasp") + used = list("[VO_SOUND_PATH]/male/gen/breathgasp_1.ogg","[VO_SOUND_PATH]/male/gen/breathgasp_2.ogg","[VO_SOUND_PATH]/male/gen/breathgasp_3.ogg") + if("burp") + used = "[VO_SOUND_PATH]/male/gen/burp.ogg" + if("choke") + used = "[VO_SOUND_PATH]/male/gen/choke.ogg" + if("chuckle") + used = "[VO_SOUND_PATH]/male/gen/chuckle.ogg" + if("clearthroat") + used = list("[VO_SOUND_PATH]/male/gen/clearthroat_1.ogg","[VO_SOUND_PATH]/male/gen/clearthroat_2.ogg","[VO_SOUND_PATH]/male/gen/clearthroat_3.ogg") + if("cough") + used = list("[VO_SOUND_PATH]/male/gen/cough_1.ogg","[VO_SOUND_PATH]/male/gen/cough_2.ogg") + if("cry", "sob") + used = list("[VO_SOUND_PATH]/male/gen/cry_1.ogg","[VO_SOUND_PATH]/male/gen/cry_2.ogg","[VO_SOUND_PATH]/male/gen/cry_3.ogg","[VO_SOUND_PATH]/male/gen/cry_4.ogg") + if("deathgurgle") + used = list("[VO_SOUND_PATH]/male/gen/deathgurgle_1.ogg","[VO_SOUND_PATH]/male/gen/deathgurgle_2.ogg","[VO_SOUND_PATH]/male/gen/deathgurgle_3.ogg") + if("drown") + used = list("[VO_SOUND_PATH]/male/gen/drown_1.ogg","[VO_SOUND_PATH]/male/gen/drown_2.ogg","[VO_SOUND_PATH]/male/gen/drown_3.ogg") + if("embed") + used = list("[VO_SOUND_PATH]/male/gen/embed_1.ogg","[VO_SOUND_PATH]/male/gen/embed_2.ogg","[VO_SOUND_PATH]/male/gen/embed_3.ogg") + if("fatigue") + used = "[VO_SOUND_PATH]/male/gen/fatigue.ogg" + if("firescream") + used = list("[VO_SOUND_PATH]/male/gen/firescream_1.ogg","[VO_SOUND_PATH]/male/gen/firescream_2.ogg","[VO_SOUND_PATH]/male/gen/firescream_3.ogg") + if("gag") + used = list("[VO_SOUND_PATH]/male/gen/gag_1.ogg","[VO_SOUND_PATH]/male/gen/gag_2.ogg","[VO_SOUND_PATH]/male/gen/gag_3.ogg") + if("gasp") + used = "[VO_SOUND_PATH]/male/gen/gasp.ogg" + if("groan") + used = list("[VO_SOUND_PATH]/male/gen/groan_1.ogg","[VO_SOUND_PATH]/male/gen/groan_2.ogg","[VO_SOUND_PATH]/male/gen/groan_3.ogg","[VO_SOUND_PATH]/male/gen/groan_4.ogg","[VO_SOUND_PATH]/male/gen/groan_5.ogg") + if("grumble") + used = "[VO_SOUND_PATH]/male/gen/grumble.ogg" + if("haltyell") + used = list("[VO_SOUND_PATH]/male/gen/haltyell_1.ogg","[VO_SOUND_PATH]/male/gen/haltyell_2.ogg") + if("hmm") + used = "[VO_SOUND_PATH]/male/gen/hmm.ogg" + if("hmph") + used = list("[VO_SOUND_PATH]/male/gen/hmph_1.ogg","[VO_SOUND_PATH]/male/gen/hmph_2.ogg") + if("huh") + used = list("[VO_SOUND_PATH]/male/gen/huh_1.ogg","[VO_SOUND_PATH]/male/gen/huh_2.ogg","[VO_SOUND_PATH]/male/gen/huh_3.ogg") + if("hum") + used = list("[VO_SOUND_PATH]/male/gen/hum_1.ogg","[VO_SOUND_PATH]/male/gen/hum_2.ogg","[VO_SOUND_PATH]/male/gen/hum_3.ogg") + if("jump") + used = "[VO_SOUND_PATH]/male/gen/jump.ogg" + if("laugh") + used = list("[VO_SOUND_PATH]/male/gen/laugh_2.ogg","[VO_SOUND_PATH]/male/gen/laugh_3.ogg","[VO_SOUND_PATH]/male/gen/laugh_4.ogg","[VO_SOUND_PATH]/male/gen/laugh_5.ogg","[VO_SOUND_PATH]/male/gen/laugh_6.ogg") + if("leap") + used = "[VO_SOUND_PATH]/male/gen/leap.ogg" + if("pain") + used = list("[VO_SOUND_PATH]/male/gen/pain_1.ogg","[VO_SOUND_PATH]/male/gen/pain_2.ogg","[VO_SOUND_PATH]/male/gen/pain_3.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/male/gen/paincrit_1.ogg","[VO_SOUND_PATH]/male/gen/paincrit_2.ogg") + if("painmoan") + used = list("[VO_SOUND_PATH]/male/gen/painmoan_1.ogg","[VO_SOUND_PATH]/male/gen/painmoan_2.ogg","[VO_SOUND_PATH]/male/gen/painmoan_3.ogg","[VO_SOUND_PATH]/male/gen/painmoan_4.ogg","[VO_SOUND_PATH]/male/gen/painmoan_5.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/male/gen/painscream_1.ogg","[VO_SOUND_PATH]/male/gen/painscream_2.ogg","[VO_SOUND_PATH]/male/gen/painscream_3.ogg") + if("rage") + used = list("[VO_SOUND_PATH]/male/gen/rage_1.ogg","[VO_SOUND_PATH]/male/gen/rage_2.ogg") + return used + + +/datum/voicepack/human/male/foppish + +/datum/voicepack/human/male/foppish/get_sound(key) + var/used + switch(key) + if("attack") + used = list("[VO_SOUND_PATH]/male/foppish/attack_1.ogg","[VO_SOUND_PATH]/male/foppish/attack_2.ogg","[VO_SOUND_PATH]/male/foppish/attack_3.ogg","[VO_SOUND_PATH]/male/foppish/attack_4.ogg","[VO_SOUND_PATH]/male/foppish/attack_5.ogg") + if("cackle") + used = list("[VO_SOUND_PATH]/male/foppish/cackle_1.ogg","[VO_SOUND_PATH]/male/foppish/cackle_2.ogg") + if("chuckle") + used = list("[VO_SOUND_PATH]/male/foppish/chuckle_1.ogg","[VO_SOUND_PATH]/male/foppish/chuckle_2.ogg","[VO_SOUND_PATH]/male/foppish/chuckle_3.ogg") + if("clearthroat") + used = list("[VO_SOUND_PATH]/male/foppish/clearthroat_1.ogg","[VO_SOUND_PATH]/male/foppish/clearthroat_2.ogg","[VO_SOUND_PATH]/male/foppish/clearthroat_3.ogg","[VO_SOUND_PATH]/male/foppish/clearthroat_4.ogg") + if("cry", "sob") + used = list("[VO_SOUND_PATH]/male/foppish/cry_1.ogg","[VO_SOUND_PATH]/male/foppish/cry_2.ogg","[VO_SOUND_PATH]/male/foppish/cry_3.ogg") + if("gasp") + used = list("[VO_SOUND_PATH]/male/foppish/gasp_1.ogg","[VO_SOUND_PATH]/male/foppish/gasp_2.ogg","[VO_SOUND_PATH]/male/foppish/gasp_3.ogg","[VO_SOUND_PATH]/male/foppish/gasp_4.ogg") + if("giggle") + used = list("[VO_SOUND_PATH]/male/foppish/giggle_1.ogg","[VO_SOUND_PATH]/male/foppish/giggle_2.ogg","[VO_SOUND_PATH]/male/foppish/giggle_3.ogg","[VO_SOUND_PATH]/male/foppish/giggle_4.ogg") + if("groan") + used = list("[VO_SOUND_PATH]/male/foppish/groan_1.ogg","[VO_SOUND_PATH]/male/foppish/groanfrust_1.ogg","[VO_SOUND_PATH]/male/foppish/groanfrust_2.ogg","[VO_SOUND_PATH]/male/foppish/groanfrust_3.ogg") + if("hmm") + used = list("[VO_SOUND_PATH]/male/foppish/hmm_1.ogg","[VO_SOUND_PATH]/male/foppish/hmm_2.ogg","[VO_SOUND_PATH]/male/foppish/hmm_3.ogg","[VO_SOUND_PATH]/male/foppish/hmm_4.ogg") + if("hmph") + used = list("[VO_SOUND_PATH]/male/foppish/hmph_1.ogg","[VO_SOUND_PATH]/male/foppish/hmph_2.ogg","[VO_SOUND_PATH]/male/foppish/hmph_3.ogg","[VO_SOUND_PATH]/male/foppish/hmph_4.ogg") + if("huh") + used = list("[VO_SOUND_PATH]/male/foppish/huh_1.ogg","[VO_SOUND_PATH]/male/foppish/huh_2.ogg","[VO_SOUND_PATH]/male/foppish/huh_3.ogg","[VO_SOUND_PATH]/male/foppish/huh_4.ogg") + if("hum") + used = list("[VO_SOUND_PATH]/male/foppish/hum_1.ogg","[VO_SOUND_PATH]/male/foppish/hum_2.ogg","[VO_SOUND_PATH]/male/foppish/hum_3.ogg","[VO_SOUND_PATH]/male/foppish/hum_4.ogg") + if("jump") + used = list("[VO_SOUND_PATH]/male/gen/jump.ogg","[VO_SOUND_PATH]/male/foppish/jump_1.ogg","[VO_SOUND_PATH]/male/foppish/jump_2.ogg","[VO_SOUND_PATH]/male/foppish/jump_3.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/male/foppish/laugh_1.ogg","[VO_SOUND_PATH]/male/foppish/laugh_2.ogg","[VO_SOUND_PATH]/male/foppish/laugh_3.ogg","[VO_SOUND_PATH]/male/foppish/laugh_5.ogg","[VO_SOUND_PATH]/male/foppish/laugh_6.ogg","[VO_SOUND_PATH]/male/foppish/laugh_7.ogg") + if("moan") + used = list("[VO_SOUND_PATH]/male/foppish/moan_1.ogg","[VO_SOUND_PATH]/male/foppish/moan_2.ogg","[VO_SOUND_PATH]/male/foppish/moan_3.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/male/young/pain_1.ogg","[VO_SOUND_PATH]/male/young/pain_2.ogg","[VO_SOUND_PATH]/male/young/pain_3.ogg","[VO_SOUND_PATH]/male/young/pain_4.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/male/young/paincrit_1.ogg","[VO_SOUND_PATH]/male/young/paincrit_2.ogg","[VO_SOUND_PATH]/male/young/paincrit_3.ogg") + if("painmoan") + used = list("[VO_SOUND_PATH]/male/foppish/painmoan_1.ogg","[VO_SOUND_PATH]/male/foppish/painmoan_2.ogg","[VO_SOUND_PATH]/male/foppish/painmoan_3.ogg","[VO_SOUND_PATH]/male/foppish/painmoan_4.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/male/foppish/painscream_1.ogg","[VO_SOUND_PATH]/male/foppish/painscream_2.ogg","[VO_SOUND_PATH]/male/foppish/painscream_3.ogg","[VO_SOUND_PATH]/male/foppish/painscream_4.ogg") + if("pleased") + used = list("[VO_SOUND_PATH]/male/foppish/pleased_1.ogg","[VO_SOUND_PATH]/male/foppish/pleased_2.ogg","[VO_SOUND_PATH]/male/foppish/pleased_3.ogg","[VO_SOUND_PATH]/male/foppish/pleased_4.ogg","[VO_SOUND_PATH]/male/foppish/pleased_5.ogg") + if("rage") + used = "[VO_SOUND_PATH]/male/foppish/rage_1.ogg" + if("sigh") + used = list("[VO_SOUND_PATH]/male/foppish/sigh_1.ogg","[VO_SOUND_PATH]/male/foppish/sigh_2.ogg","[VO_SOUND_PATH]/male/foppish/sigh_3.ogg","[VO_SOUND_PATH]/male/foppish/sigh_4.ogg","[VO_SOUND_PATH]/male/foppish/sigh_5.ogg") + if("sniff") + used = list("[VO_SOUND_PATH]/male/foppish/sniff.ogg","[VO_SOUND_PATH]/male/foppish/sniff_2.ogg","[VO_SOUND_PATH]/male/foppish/sniff_3.ogg","[VO_SOUND_PATH]/male/foppish/sniff_4.ogg") + if("sneeze") + used = "[VO_SOUND_PATH]/male/foppish/sneeze.ogg" + if("snore") + used = list("[VO_SOUND_PATH]/male/foppish/snore_1.ogg","[VO_SOUND_PATH]/male/foppish/snore_2.ogg","[VO_SOUND_PATH]/male/foppish/snore_3.ogg","[VO_SOUND_PATH]/male/foppish/snore_4.ogg") + if("yawn") + used = list("[VO_SOUND_PATH]/male/foppish/yawn_1.ogg","[VO_SOUND_PATH]/male/foppish/yawn_2.ogg","[VO_SOUND_PATH]/male/foppish/yawn_3.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/stern + +/datum/voicepack/human/male/stern/get_sound(key) + var/used + switch(key) + if("attack") + used = list("[VO_SOUND_PATH]/male/stern/attack_1.ogg","[VO_SOUND_PATH]/male/stern/attack_2.ogg","[VO_SOUND_PATH]/male/stern/attack_3.ogg","[VO_SOUND_PATH]/male/stern/attack_4.ogg","[VO_SOUND_PATH]/male/stern/attack_5.ogg") + if("chuckle") + used = list("[VO_SOUND_PATH]/male/stern/chuckle_1.ogg","[VO_SOUND_PATH]/male/stern/chuckle_2.ogg","[VO_SOUND_PATH]/male/stern/chuckle_3.ogg") + if("groan") + used = list("[VO_SOUND_PATH]/male/stern/groan_1.ogg","[VO_SOUND_PATH]/male/stern/groan_2.ogg","[VO_SOUND_PATH]/male/stern/groan_3.ogg","[VO_SOUND_PATH]/male/stern/groan_4.ogg","[VO_SOUND_PATH]/male/stern/groan_5.ogg") + if("hmm") + used = list("[VO_SOUND_PATH]/male/stern/hmm_1.ogg","[VO_SOUND_PATH]/male/stern/hmm_2.ogg") + if("huh") + used = list("[VO_SOUND_PATH]/male/stern/huh_1.ogg") + if("jump") + used = list("[VO_SOUND_PATH]/male/stern/jump_1.ogg","[VO_SOUND_PATH]/male/stern/jump_2.ogg","[VO_SOUND_PATH]/male/stern/jump_3.ogg","[VO_SOUND_PATH]/male/stern/jump_4.ogg","[VO_SOUND_PATH]/male/stern/jump_5.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/male/stern/laugh_1.ogg","[VO_SOUND_PATH]/male/stern/laugh_2.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/male/stern/pain_1.ogg","[VO_SOUND_PATH]/male/stern/pain_2.ogg","[VO_SOUND_PATH]/male/stern/pain_3.ogg","[VO_SOUND_PATH]/male/stern/pain_4.ogg","[VO_SOUND_PATH]/male/stern/pain_5.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/male/stern/paincrit_1.ogg","[VO_SOUND_PATH]/male/stern/paincrit_2.ogg") + if("painmoan") + used = list("[VO_SOUND_PATH]/male/stern/painmoan_1.ogg","[VO_SOUND_PATH]/male/stern/painmoan_2.ogg","[VO_SOUND_PATH]/male/stern/painmoan_3.ogg","[VO_SOUND_PATH]/male/stern/painmoan_4.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/male/stern/painscream_1.ogg","[VO_SOUND_PATH]/male/stern/painscream_2.ogg") + if("pleased") + used = list("[VO_SOUND_PATH]/male/stern/pleased_1.ogg","[VO_SOUND_PATH]/male/stern/pleased_2.ogg","[VO_SOUND_PATH]/male/stern/pleased_3.ogg","[VO_SOUND_PATH]/male/stern/pleased_4.ogg","[VO_SOUND_PATH]/male/stern/pleased_5.ogg","[VO_SOUND_PATH]/male/stern/pleased_6.ogg") + if("snore") + used = list("[VO_SOUND_PATH]/male/stern/snore_1.ogg","[VO_SOUND_PATH]/male/stern/snore_2.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/warrior + +/datum/voicepack/human/male/warrior/get_sound(key) + var/used + switch(key) + if("firescream") + used = list("[VO_SOUND_PATH]/male/warrior/firescream_1.ogg","[VO_SOUND_PATH]/male/warrior/firescream_2.ogg","[VO_SOUND_PATH]/male/warrior/firescream_3.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/male/warrior/laugh_1.ogg","[VO_SOUND_PATH]/male/warrior/laugh_2.ogg","[VO_SOUND_PATH]/male/warrior/laugh_3.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/male/warrior/pain_1.ogg","[VO_SOUND_PATH]/male/warrior/pain_2.ogg","[VO_SOUND_PATH]/male/warrior/pain_3.ogg","[VO_SOUND_PATH]/male/warrior/pain_4.ogg","[VO_SOUND_PATH]/male/warrior/pain_5.ogg","[VO_SOUND_PATH]/male/warrior/pain_6.ogg","[VO_SOUND_PATH]/male/warrior/pain_7.ogg","[VO_SOUND_PATH]/male/warrior/pain_8.ogg","[VO_SOUND_PATH]/male/warrior/pain_9.ogg","[VO_SOUND_PATH]/male/warrior/pain_10.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/male/warrior/paincrit_1.ogg","[VO_SOUND_PATH]/male/warrior/paincrit_2.ogg","[VO_SOUND_PATH]/male/warrior/paincrit_3.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/male/warrior/painscream_1.ogg","[VO_SOUND_PATH]/male/warrior/painscream_2.ogg","[VO_SOUND_PATH]/male/warrior/painscream_3.ogg") + if("rage") + used = list("[VO_SOUND_PATH]/male/warrior/rage_1.ogg","[VO_SOUND_PATH]/male/warrior/rage_2.ogg","[VO_SOUND_PATH]/male/warrior/rage_3.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/knight + +/datum/voicepack/human/male/knight/get_sound(key) + var/used + switch(key) + if("agony") + used = list("[VO_SOUND_PATH]/male/knight/agony_1.ogg","[VO_SOUND_PATH]/male/knight/agony_2.ogg","[VO_SOUND_PATH]/male/knight/agony_3.ogg") + if("firescream") + used = list("[VO_SOUND_PATH]/male/knight/firescream_1.ogg","[VO_SOUND_PATH]/male/knight/firescream_2.ogg","[VO_SOUND_PATH]/male/knight/firescream_3.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/male/knight/laugh_1.ogg","[VO_SOUND_PATH]/male/knight/laugh_2.ogg","[VO_SOUND_PATH]/male/knight/laugh_3.ogg","[VO_SOUND_PATH]/male/knight/laugh_4.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/male/knight/pain_1.ogg","[VO_SOUND_PATH]/male/knight/pain_2.ogg","[VO_SOUND_PATH]/male/knight/pain_3.ogg","[VO_SOUND_PATH]/male/knight/pain_4.ogg","[VO_SOUND_PATH]/male/knight/pain_5.ogg","[VO_SOUND_PATH]/male/knight/pain_6.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/male/knight/paincrit_1.ogg","[VO_SOUND_PATH]/male/knight/paincrit_2.ogg","[VO_SOUND_PATH]/male/knight/paincrit_3.ogg") + if("painmoan") + used = list("[VO_SOUND_PATH]/male/knight/painmoan_1.ogg","[VO_SOUND_PATH]/male/knight/painmoan_2.ogg","[VO_SOUND_PATH]/male/knight/painmoan_3.ogg","[VO_SOUND_PATH]/male/knight/painmoan_4.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/male/knight/painscream_1.ogg","[VO_SOUND_PATH]/male/knight/painscream_2.ogg","[VO_SOUND_PATH]/male/knight/painscream_3.ogg") + if("rage") + used = list("[VO_SOUND_PATH]/male/knight/rage_1.ogg","[VO_SOUND_PATH]/male/knight/rage_2.ogg","[VO_SOUND_PATH]/male/knight/rage_3.ogg","[VO_SOUND_PATH]/male/knight/rage_4.ogg","[VO_SOUND_PATH]/male/knight/rage_5.ogg","[VO_SOUND_PATH]/male/knight/rage_6.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/elf + +/datum/voicepack/human/male/elf/get_sound(key) + var/used + switch(key) + if("agony") + used = "[VO_SOUND_PATH]/male/elf/agony.ogg" + if("chuckle") + used = list("[VO_SOUND_PATH]/male/elf/chuckle_1.ogg","[VO_SOUND_PATH]/male/elf/chuckle_2.ogg","[VO_SOUND_PATH]/male/elf/chuckle_3.ogg","[VO_SOUND_PATH]/male/elf/chuckle_4.ogg","[VO_SOUND_PATH]/male/elf/chuckle_5.ogg") + if("cry", "sob") + used = list("[VO_SOUND_PATH]/male/elf/cry_1.ogg","[VO_SOUND_PATH]/male/elf/cry_2.ogg","[VO_SOUND_PATH]/male/elf/cry_3.ogg") + if("embed") + used = list("[VO_SOUND_PATH]/male/elf/embed_1.ogg","[VO_SOUND_PATH]/male/elf/embed_2.ogg") + if("firescream") + used = list("[VO_SOUND_PATH]/male/elf/firescream_1.ogg","[VO_SOUND_PATH]/male/elf/firescream_2.ogg","[VO_SOUND_PATH]/male/elf/firescream_3.ogg") + if("gasp") + used = list("[VO_SOUND_PATH]/male/elf/gasp_1.ogg","[VO_SOUND_PATH]/male/elf/gasp_2.ogg","[VO_SOUND_PATH]/male/elf/gasp_3.ogg") + if("grumble") + used = "[VO_SOUND_PATH]/male/elf/grumble.ogg" + if("haltyell") + used = "[VO_SOUND_PATH]/male/elf/haltyell.ogg" + if("huh") + used = "[VO_SOUND_PATH]/male/elf/huh.ogg" + if("laugh") + used = list("[VO_SOUND_PATH]/male/elf/laugh_1.ogg","[VO_SOUND_PATH]/male/elf/laugh_3.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/male/elf/pain_1.ogg","[VO_SOUND_PATH]/male/elf/pain_2.ogg","[VO_SOUND_PATH]/male/elf/pain_3.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/male/elf/paincrit_1.ogg","[VO_SOUND_PATH]/male/elf/paincrit_2.ogg","[VO_SOUND_PATH]/male/elf/paincrit_3.ogg") + if("painmoan") + used = list("[VO_SOUND_PATH]/male/elf/painmoan_1.ogg","[VO_SOUND_PATH]/male/elf/painmoan_2.ogg","[VO_SOUND_PATH]/male/elf/painmoan_3.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/male/elf/painscream_1.ogg","[VO_SOUND_PATH]/male/elf/painscream_2.ogg") + if("rage") + used = list("[VO_SOUND_PATH]/male/elf/rage_1.ogg","[VO_SOUND_PATH]/male/elf/rage_2.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/dwarf + +/datum/voicepack/human/male/dwarf/get_sound(key) + var/used + switch(key) + if("chuckle") + used = "[VO_SOUND_PATH]/male/dwarf/chuckle.ogg" + if("cough") + used = list("[VO_SOUND_PATH]/male/dwarf/cough_1.ogg","[VO_SOUND_PATH]/male/dwarf/cough_2.ogg","[VO_SOUND_PATH]/male/dwarf/cough_3.ogg") + if("firescream") + used = list("[VO_SOUND_PATH]/male/dwarf/firescream_1.ogg","[VO_SOUND_PATH]/male/dwarf/firescream_2.ogg","[VO_SOUND_PATH]/male/dwarf/firescream_3.ogg") + if("haltyell") + used = list("[VO_SOUND_PATH]/male/dwarf/haltyell_1.ogg","[VO_SOUND_PATH]/male/dwarf/haltyell_2.ogg") + if("hmm") + used = "[VO_SOUND_PATH]/male/dwarf/hmm.ogg" + if("hum") + used = list("[VO_SOUND_PATH]/male/dwarf/hum_1.ogg","[VO_SOUND_PATH]/male/dwarf/hum_2.ogg","[VO_SOUND_PATH]/male/dwarf/hum_3.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/male/dwarf/laugh_1.ogg","[VO_SOUND_PATH]/male/dwarf/laugh_2.ogg","[VO_SOUND_PATH]/male/dwarf/laugh_3.ogg","[VO_SOUND_PATH]/male/dwarf/laugh_4.ogg","[VO_SOUND_PATH]/male/dwarf/laugh_5.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/male/dwarf/pain_1.ogg","[VO_SOUND_PATH]/male/dwarf/pain_2.ogg","[VO_SOUND_PATH]/male/dwarf/pain_3.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/male/dwarf/paincrit_1.ogg","[VO_SOUND_PATH]/male/dwarf/paincrit_2.ogg","[VO_SOUND_PATH]/male/dwarf/paincrit_3.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/male/dwarf/painscream_1.ogg","[VO_SOUND_PATH]/male/dwarf/painscream_2.ogg","[VO_SOUND_PATH]/male/dwarf/painscream_3.ogg") + if("rage") + used = list("[VO_SOUND_PATH]/male/dwarf/rage_1.ogg","[VO_SOUND_PATH]/male/dwarf/rage_2.ogg","[VO_SOUND_PATH]/male/dwarf/rage_3.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/goblin + +/datum/voicepack/human/male/goblin/get_sound(key) + var/used + switch(key) + if("chuckle") + used = list("[VO_SOUND_PATH]/male/goblin/chuckle_1.ogg","[VO_SOUND_PATH]/male/goblin/chuckle_3.ogg") + if("giggle") + used = list("[VO_SOUND_PATH]/male/goblin/giggle_2.ogg","[VO_SOUND_PATH]/male/goblin/giggle_3.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/male/goblin/laugh_1.ogg","[VO_SOUND_PATH]/male/goblin/laugh_2.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/evil + +/datum/voicepack/human/male/evil/get_sound(key) + var/used + switch(key) + if("firescream") + used = list("[VO_SOUND_PATH]/male/evil/firescream_1.ogg","[VO_SOUND_PATH]/male/evil/firescream_2.ogg","[VO_SOUND_PATH]/male/evil/firescream_3.ogg","[VO_SOUND_PATH]/male/evil/firescream_4.ogg","[VO_SOUND_PATH]/male/evil/firescream_5.ogg","[VO_SOUND_PATH]/male/evil/firescream_6.ogg") + if("grumble") + used = "[VO_SOUND_PATH]/male/evil/grumble.ogg" + if("laugh") + used = list("[VO_SOUND_PATH]/male/evil/laugh_1.ogg","[VO_SOUND_PATH]/male/evil/laugh_2.ogg","[VO_SOUND_PATH]/male/evil/laugh_3.ogg","[VO_SOUND_PATH]/male/evil/laugh_4.ogg","[VO_SOUND_PATH]/male/evil/laugh_5.ogg","[VO_SOUND_PATH]/male/evil/laugh_6.ogg","[VO_SOUND_PATH]/male/evil/laugh_7.ogg","[VO_SOUND_PATH]/male/evil/laugh_8.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/male/evil/pain_1.ogg","[VO_SOUND_PATH]/male/evil/pain_2.ogg","[VO_SOUND_PATH]/male/evil/pain_3.ogg","[VO_SOUND_PATH]/male/evil/pain_4.ogg","[VO_SOUND_PATH]/male/evil/pain_5.ogg","[VO_SOUND_PATH]/male/evil/pain_6.ogg","[VO_SOUND_PATH]/male/evil/pain_7.ogg","[VO_SOUND_PATH]/male/evil/pain_8.ogg") + if("painmoan") + used = list("[VO_SOUND_PATH]/male/evil/painmoan_1.ogg","[VO_SOUND_PATH]/male/evil/painmoan_2.ogg","[VO_SOUND_PATH]/male/evil/painmoan_3.ogg","[VO_SOUND_PATH]/male/evil/painmoan_4.ogg","[VO_SOUND_PATH]/male/evil/painmoan_5.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/male/evil/painscream_1.ogg","[VO_SOUND_PATH]/male/evil/painscream_2.ogg") + if("rage") + used = list("[VO_SOUND_PATH]/male/evil/rage_1.ogg","[VO_SOUND_PATH]/male/evil/rage_2.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/wizard + +/datum/voicepack/human/male/wizard/get_sound(key) + var/used + switch(key) + if("laugh") + used = "[VO_SOUND_PATH]/male/wizard/laugh.ogg" + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/jester + +/datum/voicepack/human/male/jester/get_sound(key) + var/used + switch(key) + if("laugh") + used = list("[VO_SOUND_PATH]/male/jester/laugh_1.ogg","[VO_SOUND_PATH]/male/jester/laugh_2.ogg","[VO_SOUND_PATH]/male/jester/laugh_3.ogg") + if(!used) + used = ..() + return used + + +/datum/voicepack/human/male/zeth + +/datum/voicepack/human/male/zeth/get_sound(key) + var/used + switch(key) + if("chuckle") + used = list("[VO_SOUND_PATH]/male/zeth/chuckle.ogg") + if("grumble") + used = list("[VO_SOUND_PATH]/male/zeth/grumble_1.ogg","[VO_SOUND_PATH]/male/zeth/grumble_2.ogg") + if("laugh") + used = list("[VO_SOUND_PATH]/male/zeth/laugh.ogg") + if("pain") + used = list("[VO_SOUND_PATH]/male/zeth/pain_1.ogg","[VO_SOUND_PATH]/male/zeth/pain_2.ogg","[VO_SOUND_PATH]/male/zeth/pain_3.ogg","[VO_SOUND_PATH]/male/zeth/pain_4.ogg","[VO_SOUND_PATH]/male/zeth/pain_5.ogg","[VO_SOUND_PATH]/male/zeth/pain_6.ogg") + if("paincrit") + used = list("[VO_SOUND_PATH]/male/zeth/paincrit_1.ogg","[VO_SOUND_PATH]/male/zeth/paincrit_2.ogg") + if("painscream", "scream") + used = list("[VO_SOUND_PATH]/male/zeth/painscream_1.ogg","[VO_SOUND_PATH]/male/zeth/painscream_2.ogg") + if("sigh") + used = list("[VO_SOUND_PATH]/male/zeth/sigh_1.ogg","[VO_SOUND_PATH]/male/zeth/sigh_2.ogg") + if(!used) + used = ..() + return used diff --git a/modular_darkpack/modules/emotes/readme_voicepack.md b/modular_darkpack/modules/emotes/readme_voicepack.md new file mode 100644 index 000000000000..d7518b52402b --- /dev/null +++ b/modular_darkpack/modules/emotes/readme_voicepack.md @@ -0,0 +1,32 @@ +# EMOTE_VOICES + +Adds a character preference for selecting a voice style that changes the sounds played during emotes, along with a pitch preference for fine-tuning voice frequency. Originally made for TFN. + +## Core files changed + +- `modular_darkpack/master_files/code/datums/emotes.dm`: Overrides `/datum/emote/get_sound()` to check the human's `voicepack` var and return a pitched sound datum when a voicepack is set. + +## Description + +Players can select a voice pack and pitch value in the Vocals section of character preferences. When an emote plays a sound, it checks if the character has a voicepack assigned. If so, the voicepack is queried by the emote's key string. If a matching sound exists, it is returned as a `/sound` datum with the character's pitch applied. Emotes with no matching voicepack entry fall through to the default emote sound. + +The default `Masculine` and `Feminine` packs use tgstation base sounds and work without any additional files. The `Haughty` pack for example can be made via copying the `sound/vo/` directory from Azure-Peak's repository that includes it. Of course, you can substitute for your own custom files. + +## Adding new voice packs + +1. Create a new subtype of `/datum/voicepack` in `code/voicepacks/`. +2. Override `get_sound(key)` with a switch block mapping emote key strings to sound file references or lists. Return `..()` at the end for fallback to a parent pack!!!! You need it to fallback or no sound will play!! +3. Add an entry to `GLOBAL_LIST_INIT(voicepack_list, ...)` in `code/__DEFINES/~darkpack/voicepack.dm`. +4. Ask your local host REALLY NICELY to add your files to the `darkpack_config/vo` folder. On your local fork, you will place files here to test them (making sure not to accidentally commit them to the repository!) + +## Server-side Stuff + +- The server end of things holds the files in the path of `darkpack_config/vo/` followed by male or female (or mobs for werewolf sounds), then the folder name. + +For example, in the voicepack_list, there is an entry called `Noble II`. + +This entry paths to the 'haughty' voicepack folder. The 'haughty' files are pathed to the server directory located at: `darkpack_config/vo/female/haughty` + +## Credits + +Voice system design ported from Azure-Peak, the sounds are credited to whomever you source them from. No sounds are included in this PR to avoid potential licensing issues; all sounds are (and should be) hosted on your individual server box to avoid violating your repository's license terms accidentally. It's just safer. -buffy diff --git a/modular_darkpack/modules/jumping/code/jumper_component.dm b/modular_darkpack/modules/jumping/code/jumper_component.dm index 3ed0ef927323..45ed73ed29fc 100644 --- a/modular_darkpack/modules/jumping/code/jumper_component.dm +++ b/modular_darkpack/modules/jumping/code/jumper_component.dm @@ -117,6 +117,11 @@ adjusted_target = locate(jumper.loc.x + round(dx * scale), jumper.loc.y + round(dy * scale), jumper.loc.z) playsound(jumper.loc, 'modular_darkpack/modules/jumping/sounds/jump_neutral.ogg', 50, TRUE) + if(ishuman(jumper)) + var/mob/living/carbon/human/human_jumper = jumper + var/sound/jump_sound = human_jumper.get_voicepack_sound("jump") + if(jump_sound) + playsound(jumper, jump_sound, 50, FALSE) if(jumper.combat_mode && get_dist(jumper.loc, target) <= 3 && strength >= 8) addtimer(CALLBACK(src, PROC_REF(jump_boom), jumper),(distance * 0.5)) @@ -147,6 +152,11 @@ //Produces a boom effect for ludicrously high strength/physique scores /datum/component/jumper/proc/jump_boom(mob/living/jumper) playsound(get_turf(jumper), 'modular_darkpack/modules/jumping/sounds/jump_slam.ogg', 40, FALSE) + if(ishuman(jumper)) + var/mob/living/carbon/human/person = jumper + var/sound/leap_sound = person.get_voicepack_sound("leap") + if(leap_sound) + playsound(jumper, leap_sound, 40, FALSE) new /obj/effect/temp_visual/dir_setting/crack_effect(get_turf(jumper)) for(var/mob/living/shaken_person in range(5, jumper)) if(shaken_person == jumper) diff --git a/tgstation.dme b/tgstation.dme index c0bdda7d0859..57bcac850992 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -500,6 +500,7 @@ #include "code\__DEFINES\~darkpack\traits\sources.dm" #include "code\__DEFINES\~zapoc\factions.dm" #include "code\__DEFINES\~zapoc\jobs.dm" +#include "code\__DEFINES\~darkpack\voicepack_emotes.dm" #include "code\__HELPERS\_auxtools_api.dm" #include "code\__HELPERS\_dreamluau.dm" #include "code\__HELPERS\_level_traits.dm" @@ -7142,6 +7143,7 @@ #include "modular_darkpack\master_files\code\datums\station_traits\_station_trait.dm" #include "modular_darkpack\master_files\code\datums\storage\subtypes\bags.dm" #include "modular_darkpack\master_files\code\datums\storage\subtypes\dufflebags.dm" +#include "modular_darkpack\master_files\code\datums\emotes.dm" #include "modular_darkpack\master_files\code\game\atoms_movable.dm" #include "modular_darkpack\master_files\code\game\area\areas.dm" #include "modular_darkpack\master_files\code\game\objects\items.dm" @@ -7383,8 +7385,17 @@ #include "modular_darkpack\modules\electricity\code\generator.dm" #include "modular_darkpack\modules\elevators\code\elevator.dm" #include "modular_darkpack\modules\emotes\code\carbon.dm" +#include "modular_darkpack\modules\emotes\code\emotes.dm" #include "modular_darkpack\modules\emotes\code\human.dm" +#include "modular_darkpack\modules\emotes\code\human_vars.dm" #include "modular_darkpack\modules\emotes\code\living.dm" +#include "modular_darkpack\modules\emotes\code\voicepack.dm" +#include "modular_darkpack\modules\emotes\code\preferences\middleware.dm" +#include "modular_darkpack\modules\emotes\code\preferences\voicepack.dm" +#include "modular_darkpack\modules\emotes\code\voicepacks\creatures.dm" +#include "modular_darkpack\modules\emotes\code\voicepacks\feminine.dm" +#include "modular_darkpack\modules\emotes\code\voicepacks\haughty.dm" +#include "modular_darkpack\modules\emotes\code\voicepacks\masculine.dm" #include "modular_darkpack\modules\ert\code\fbi.dm" #include "modular_darkpack\modules\ert\code\national_guard.dm" #include "modular_darkpack\modules\ert\code\pentex_ert_roles.dm" From e81131f39a451b7a11c2976075a3dff2865c40be Mon Sep 17 00:00:00 2001 From: buffyuwu <42501819+buffyuwu@users.noreply.github.com> Date: Fri, 31 Jul 2026 13:05:43 -0400 Subject: [PATCH 2/2] ui --- .../CharacterPreferences/darkpack_vocals.tsx | 2 + .../character_preferences/emote_voicepack.tsx | 46 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/emote_voicepack.tsx diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/darkpack_vocals.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/darkpack_vocals.tsx index 530fe8295206..9a8a63d0c074 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/darkpack_vocals.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/darkpack_vocals.tsx @@ -27,6 +27,8 @@ const vocalFeatures: VocalFeature[] = [ { id: 'blooper_speed', label: 'Blooper Speed', type: 'number' }, { id: 'blooper_pitch', label: 'Blooper Pitch', type: 'number' }, { id: 'blooper_pitch_range', label: 'Blooper Range', type: 'number' }, + { id: 'emote_voicepack', label: 'Emote Voice Pack', type: 'string' }, + { id: 'emote_voice_pitch', label: 'Emote Voice Pitch', type: 'number' }, ]; type FeatureValueInputProps = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/emote_voicepack.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/emote_voicepack.tsx new file mode 100644 index 000000000000..72e9bbebd5b0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/emote_voicepack.tsx @@ -0,0 +1,46 @@ +// THIS IS A DARKPACK UI FILE +import { useBackend } from 'tgui/backend'; +import { Button, Stack } from 'tgui-core/components'; +import { + type FeatureChoiced, + type FeatureChoicedServerData, + type FeatureNumeric, + FeatureSliderInput, + type FeatureValueProps, +} from '../base'; +import { FeatureDropdownInput } from '../dropdowns'; + +const FeatureVoicepackDropdownInput = ( + props: FeatureValueProps, +) => { + const { act } = useBackend(); + + return ( + + + + + +