diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index 3aaa5f0da13..377a4959c25 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -202,7 +202,6 @@ to_chat(target, announcement) if(!should_play_sound || (should_play_sound_callback && !should_play_sound_callback.Invoke(target))) continue - if(target.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements)) SEND_SOUND(target, sound(sound_to_play)) diff --git a/code/controllers/subsystem/ambience.dm b/code/controllers/subsystem/ambience.dm index 80e15349212..b8d2f56cfc8 100644 --- a/code/controllers/subsystem/ambience.dm +++ b/code/controllers/subsystem/ambience.dm @@ -55,7 +55,7 @@ SUBSYSTEM_DEF(ambience) /area/proc/play_ambience(mob/M, sound/override_sound, volume = 27) var/sound/new_sound = override_sound || pick(ambientsounds) /// volume modifier for ambience as set by the player in preferences. - var/volume_modifier = (M.client?.prefs.read_preference(/datum/preference/numeric/sound_ambience_volume))/100 + var/volume_modifier = (M.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_ambience_volume))/100 new_sound = sound(new_sound, repeat = 0, wait = 0, volume = volume*volume_modifier, channel = CHANNEL_AMBIENCE) SEND_SOUND(M, new_sound) @@ -114,9 +114,9 @@ SUBSYSTEM_DEF(ambience) var/area/my_area = get_area(src) var/sound_to_use = my_area.ambient_buzz - var/volume_modifier = client.prefs.read_preference(/datum/preference/numeric/sound_ship_ambience_volume) + var/volume_modifier = client.prefs.read_preference(/datum/preference/numeric/volume/sound_ship_ambience_volume) - if(!sound_to_use || !(client.prefs.read_preference(/datum/preference/numeric/sound_ship_ambience_volume))) + if(!sound_to_use || !(client.prefs.read_preference(/datum/preference/numeric/volume/sound_ship_ambience_volume))) SEND_SOUND(src, sound(null, repeat = 0, volume = volume_modifier, wait = 0, channel = CHANNEL_BUZZ)) client.current_ambient_sound = null return diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 58296bcd732..e08cddbb9d2 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -732,11 +732,10 @@ SUBSYSTEM_DEF(ticker) gather_newscaster() //called here so we ensure the log is created even upon admin reboot if(!round_end_sound) round_end_sound = choose_round_end_song() - ///The reference to the end of round sound that we have chosen. - var/sound/end_of_round_sound_ref = sound(round_end_sound) for(var/mob/M in GLOB.player_list) - if(M.client.prefs.read_preference(/datum/preference/toggle/sound_endofround)) - SEND_SOUND(M.client, end_of_round_sound_ref) + var/pref_volume = M.client.prefs.read_preference(/datum/preference/numeric/volume/sound_midi) + if(pref_volume > 0) + SEND_SOUND(M.client, sound(round_end_sound, volume = pref_volume)) text2file(login_music, "data/last_round_lobby_music.txt") diff --git a/code/controllers/subsystem/tts.dm b/code/controllers/subsystem/tts.dm index dc206522bca..a7492bbcedb 100644 --- a/code/controllers/subsystem/tts.dm +++ b/code/controllers/subsystem/tts.dm @@ -111,7 +111,7 @@ SUBSYSTEM_DEF(tts) stack_trace("TTS tried to play a sound to a deleted mob.") continue /// volume modifier for TTS as set by the player in preferences. - var/volume_modifier = listening_mob.client?.prefs.read_preference(/datum/preference/numeric/sound_tts_volume)/100 + var/volume_modifier = listening_mob.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_tts_volume)/100 var/tts_pref = listening_mob.client?.prefs.read_preference(/datum/preference/choiced/sound_tts) if(volume_modifier == 0 || (tts_pref == TTS_SOUND_OFF)) continue diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index d9d796782c2..5f2134acb0a 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -242,8 +242,7 @@ SUBSYSTEM_DEF(vote) new_voter.player_details.player_actions += voting_action generated_actions += voting_action - - if(current_vote.vote_sound && (new_voter.prefs.read_preference(/datum/preference/toggle/sound_announcements))) + if(current_vote.vote_sound && new_voter.prefs.read_preference(/datum/preference/toggle/sound_announcements)) SEND_SOUND(new_voter, sound(current_vote.vote_sound)) return TRUE diff --git a/code/datums/components/jukebox.dm b/code/datums/components/jukebox.dm index 071e284756f..f5593e1ab0f 100644 --- a/code/datums/components/jukebox.dm +++ b/code/datums/components/jukebox.dm @@ -1,6 +1,3 @@ -/// Checks if the mob has jukebox muted in their preferences -#define IS_PREF_MUTED(mob) (!isnull(mob.client) && !mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox)) - // Reasons for appling STATUS_MUTE to a mob's sound status /// The mob is deaf #define MUTE_DEAF (1<<0) @@ -220,8 +217,8 @@ RegisterSignal(new_listener, COMSIG_MOVABLE_MOVED, PROC_REF(listener_moved)) RegisterSignals(new_listener, list(SIGNAL_ADDTRAIT(TRAIT_DEAF), SIGNAL_REMOVETRAIT(TRAIT_DEAF)), PROC_REF(listener_deaf)) - - if(HAS_TRAIT(new_listener, TRAIT_DEAF) || IS_PREF_MUTED(new_listener)) + var/pref_volume = new_listener.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_instruments) + if(HAS_TRAIT(new_listener, TRAIT_DEAF) || !pref_volume) listeners[new_listener] |= SOUND_MUTE if(isnull(active_song_sound)) @@ -230,7 +227,7 @@ active_song_sound.channel = CHANNEL_JUKEBOX active_song_sound.priority = 255 active_song_sound.falloff = 2 - active_song_sound.volume = volume + active_song_sound.volume = volume * (pref_volume/100) active_song_sound.y = 1 active_song_sound.environment = juke_area.sound_environment || SOUND_ENVIRONMENT_NONE active_song_sound.repeat = sound_loops @@ -283,8 +280,8 @@ if((reason & MUTE_DEAF) && HAS_TRAIT(listener, TRAIT_DEAF)) return FALSE - - if((reason & MUTE_PREF) && IS_PREF_MUTED(listener)) + var/pref_volume = listener.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_instruments) + if((reason & MUTE_PREF) && !pref_volume) return FALSE if(reason & MUTE_RANGE) @@ -380,8 +377,6 @@ /datum/jukebox/single_mob/start_music(mob/solo_listener) register_listener(solo_listener) -#undef IS_PREF_MUTED - #undef MUTE_DEAF #undef MUTE_PREF #undef MUTE_RANGE diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 4d67b4a0e38..e0ffc2fc167 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -352,7 +352,7 @@ if(isliving(talking_movable)) var/mob/living/talking_living = talking_movable - var/volume_modifier = (talking_living.client?.prefs.read_preference(/datum/preference/numeric/sound_radio_noise)) + var/volume_modifier = (talking_living.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_radio_noise)) if(radio_noise && talking_living.can_hear() && volume_modifier && signal.frequency != FREQ_COMMON && !LAZYACCESS(message_mods, MODE_SEQUENTIAL) && COOLDOWN_FINISHED(src, audio_cooldown)) COOLDOWN_START(src, audio_cooldown, 0.5 SECONDS) var/sound/radio_noise = sound('sound/items/radio/radio_talk.ogg', volume = volume_modifier) @@ -434,8 +434,8 @@ return var/mob/living/holder = loc - var/volume_modifier = (holder.client?.prefs.read_preference(/datum/preference/numeric/sound_radio_noise)) - if(!radio_noise || HAS_TRAIT(holder, TRAIT_DEAF) || !holder.client?.prefs.read_preference(/datum/preference/numeric/sound_radio_noise)) + var/volume_modifier = (holder.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_radio_noise)) + if(!radio_noise || HAS_TRAIT(holder, TRAIT_DEAF) || !holder.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_radio_noise)) return var/list/spans = data["spans"] if(COOLDOWN_FINISHED(src, audio_cooldown)) diff --git a/code/game/sound.dm b/code/game/sound.dm index cbbe9c5090c..0878b75e720 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -206,7 +206,7 @@ set waitfor = FALSE UNTIL(SSticker.login_music) //wait for SSticker init to set the login music - var/volume_modifier = prefs.read_preference(/datum/preference/numeric/sound_lobby_volume) + var/volume_modifier = prefs.read_preference(/datum/preference/numeric/volume/sound_lobby_volume) if((prefs && volume_modifier) && !CONFIG_GET(flag/disallow_title_music)) SEND_SOUND(src, sound(SSticker.login_music, repeat = 0, wait = 0, volume = volume_modifier, channel = CHANNEL_LOBBYMUSIC)) // MAD JAMS diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm index 165b882ab46..6a71db4f046 100644 --- a/code/modules/admin/sound_emitter.dm +++ b/code/modules/admin/sound_emitter.dm @@ -141,8 +141,9 @@ if(SOUND_EMITTER_GLOBAL) hearing_mobs = GLOB.player_list.Copy() for(var/mob/M in hearing_mobs) - if(M.client.prefs.read_preference(/datum/preference/toggle/sound_midi)) - M.playsound_local(M, sound_file, sound_volume, FALSE, channel = CHANNEL_ADMIN, pressure_affected = FALSE) + var/pref_volume = M.client.prefs.read_preference(/datum/preference/numeric/volume/sound_midi) + if(pref_volume > 0) + M.playsound_local(M, sound_file, (sound_volume * (pref_volume/100)), FALSE, channel = CHANNEL_ADMIN, pressure_affected = FALSE) if(user) log_admin("[ADMIN_LOOKUPFLW(user)] activated a sound emitter with file \"[sound_file]\" at [AREACOORD(src)]") flick("shield1", src) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 5e68dcedbfa..50b74d703c8 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -31,8 +31,9 @@ ADMIN_VERB(play_sound, R_SOUND, "Play Global Sound", "Play a sound to all connec message_admins("[key_name_admin(user)] played sound [sound]") for(var/mob/M in GLOB.player_list) - if(M.client.prefs.read_preference(/datum/preference/toggle/sound_midi)) - admin_sound.volume = vol * M.client.admin_music_volume + var/volume_modifier = M.client.prefs.read_preference(/datum/preference/numeric/volume/sound_midi) + if(volume_modifier > 0) + admin_sound.volume = vol * M.client.admin_music_volume * (volume_modifier/100) SEND_SOUND(M, admin_sound) admin_sound.volume = vol @@ -148,7 +149,7 @@ ADMIN_VERB(play_direct_mob_sound, R_SOUND, "Play Direct Mob Sound", "Play a soun for(var/m in GLOB.player_list) var/mob/M = m var/client/C = M.client - if(C.prefs.read_preference(/datum/preference/toggle/sound_midi)) + if(C.prefs.read_preference(/datum/preference/numeric/volume/sound_midi)) if(!stop_web_sounds) C.tgui_panel?.play_music(web_sound_url, music_extra_data) else diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 16f0fd1deca..fb40674b31f 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -541,7 +541,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, span_warning("Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.")) - update_ambience_pref(prefs.read_preference(/datum/preference/numeric/sound_ambience_volume)) + update_ambience_pref(prefs.read_preference(/datum/preference/numeric/volume/sound_ambience_volume)) check_ip_intel() //This is down here because of the browse() calls in tooltip/New() diff --git a/code/modules/client/preferences/migrations/legacy_sound_toggles_migration.dm b/code/modules/client/preferences/migrations/legacy_sound_toggles_migration.dm index 01e86574413..5a098da5209 100644 --- a/code/modules/client/preferences/migrations/legacy_sound_toggles_migration.dm +++ b/code/modules/client/preferences/migrations/legacy_sound_toggles_migration.dm @@ -3,11 +3,10 @@ /// This migration transfers the player's existing preferences into the new toggles /datum/preferences/proc/migrate_legacy_sound_toggles(savefile/savefile) - write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_ambience_volume], toggles & 1<<2) + write_preference(GLOB.preference_entries[/datum/preference/numeric/volume/sound_ambience_volume], toggles & 1<<2) write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_announcements], toggles & 1<<11) write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_combatmode], toggles & 1<<22) - write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_endofround], toggles & 1<<20) - write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_instruments], toggles & 1<<7) - write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_lobby_volume], toggles & 1<<3) - write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_midi], toggles & 1<<1) - write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_ship_ambience_volume], toggles & 1<<8) + write_preference(GLOB.preference_entries[/datum/preference/numeric/volume/sound_instruments], toggles & 1<<7) + write_preference(GLOB.preference_entries[/datum/preference/numeric/volume/sound_lobby_volume], toggles & 1<<3) + write_preference(GLOB.preference_entries[/datum/preference/numeric/volume/sound_midi], toggles & 1<<1) + write_preference(GLOB.preference_entries[/datum/preference/numeric/volume/sound_ship_ambience_volume], toggles & 1<<8) diff --git a/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm b/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm index 3af7f5a6171..ca0d583f650 100644 --- a/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm +++ b/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm @@ -13,8 +13,27 @@ var/ship_ambience_pref = savefile.get_entry("sound_ship_ambience_volume") var/lobby_music_pref = savefile.get_entry("sound_lobby_volume") var/radio_noise_pref = savefile.get_entry("sound_radio_noise") - write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_ambience_volume], ambience_pref*100) - write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_ship_ambience_volume], ship_ambience_pref*100) - write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_lobby_volume], lobby_music_pref*100) - write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_radio_noise], radio_noise_pref*100) + write_preference(GLOB.preference_entries[/datum/preference/numeric/volume/sound_ambience_volume], ambience_pref*100) + write_preference(GLOB.preference_entries[/datum/preference/numeric/volume/sound_ship_ambience_volume], ship_ambience_pref*100) + write_preference(GLOB.preference_entries[/datum/preference/numeric/volume/sound_lobby_volume], lobby_music_pref*100) + write_preference(GLOB.preference_entries[/datum/preference/numeric/volume/sound_radio_noise], radio_noise_pref*100) + return + + +/datum/preferences/proc/migrate_boolean_sound_prefs_to_default_volume_v2() + var/list/entries = list( + /datum/preference/numeric/volume/sound_ai_vox = savefile.get_entry("sound_ai_vox"), + /datum/preference/numeric/volume/sound_midi = savefile.get_entry("sound_midi"), + /datum/preference/numeric/volume/sound_instruments = savefile.get_entry("sound_instruments"), + /datum/preference/numeric/volume/sound_ambience_volume = savefile.get_entry("sound_ambience_volume"), + /datum/preference/numeric/volume/sound_ship_ambience_volume = savefile.get_entry("sound_ship_ambience_volume"), + /datum/preference/numeric/volume/sound_lobby_volume = savefile.get_entry("sound_lobby_volume"), + /datum/preference/numeric/volume/sound_radio_noise = savefile.get_entry("sound_radio_noise"), + + ) + for(var/entry as anything in entries) + var/pref_data = entries[entry] + if(pref_data <= 1) + pref_data *= 100 + write_preference(GLOB.preference_entries[entry], min(pref_data, 100)) return diff --git a/code/modules/client/preferences/sounds.dm b/code/modules/client/preferences/sounds.dm index c73fc3049f7..376e06cad6f 100644 --- a/code/modules/client/preferences/sounds.dm +++ b/code/modules/client/preferences/sounds.dm @@ -1,17 +1,18 @@ +/datum/preference/numeric/volume + abstract_type = /datum/preference/numeric/volume + minimum = 0 + maximum = 100 + +/datum/preference/numeric/volume/create_default_value() + return maximum + /// Controls ambience volume -/datum/preference/numeric/sound_ambience_volume +/datum/preference/numeric/volume/sound_ambience_volume category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_ambience_volume" savefile_identifier = PREFERENCE_PLAYER - minimum = 0 - maximum = 200 - -/// default value is max/2 because 100 1x modifier, while 200 is 2x -/datum/preference/numeric/sound_ambience_volume/create_default_value() - return maximum/2 - -/datum/preference/numeric/sound_ambience_volume/apply_to_client(client/client, value) +/datum/preference/numeric/volume/sound_ambience_volume/apply_to_client(client/client, value) client.update_ambience_pref(value) /datum/preference/toggle/sound_breathing @@ -25,24 +26,22 @@ savefile_key = "sound_announcements" savefile_identifier = PREFERENCE_PLAYER -/// Controls hearing the combat mode toggle sound +/// Controls hearing the combat mode sound /datum/preference/toggle/sound_combatmode category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_combatmode" savefile_identifier = PREFERENCE_PLAYER -/// Controls hearing round end sounds -/datum/preference/toggle/sound_endofround - category = PREFERENCE_CATEGORY_GAME_PREFERENCES - savefile_key = "sound_endofround" - savefile_identifier = PREFERENCE_PLAYER - /// Controls hearing instruments -/datum/preference/toggle/sound_instruments +/datum/preference/numeric/volume/sound_instruments category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_instruments" savefile_identifier = PREFERENCE_PLAYER +/datum/preference/numeric/volume/sound_instruments/apply_to_client_updated(client/client, value) + if (!value) + client.mob.stop_sound_channel(CHANNEL_JUKEBOX) + /datum/preference/choiced/sound_tts category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_tts" @@ -54,18 +53,11 @@ /datum/preference/choiced/sound_tts/create_default_value() return TTS_SOUND_ENABLED -/datum/preference/numeric/sound_tts_volume +/datum/preference/numeric/volume/sound_tts_volume category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_tts_volume" savefile_identifier = PREFERENCE_PLAYER - minimum = 0 - maximum = 200 - -/// default value is max/2 because 100 1x modifier, while 200 is 2x -/datum/preference/numeric/sound_tts_volume/create_default_value() - return maximum/2 - /datum/preference/choiced/sound_achievement category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_achievement" @@ -82,78 +74,41 @@ if(sound_to_send) SEND_SOUND(client.mob, sound_to_send) -/// Controls hearing dance machines -/datum/preference/toggle/sound_jukebox - category = PREFERENCE_CATEGORY_GAME_PREFERENCES - savefile_key = "sound_jukebox" - savefile_identifier = PREFERENCE_PLAYER - -/datum/preference/toggle/sound_jukebox/apply_to_client_updated(client/client, value) - if (!value) - client.mob.stop_sound_channel(CHANNEL_JUKEBOX) - /// Controls hearing lobby music -/datum/preference/numeric/sound_lobby_volume +/datum/preference/numeric/volume/sound_lobby_volume category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_lobby_volume" savefile_identifier = PREFERENCE_PLAYER - minimum = 0 - maximum = 200 - -/// default value is max/2 because 100 1x modifier, while 200 is 2x -/datum/preference/numeric/sound_lobby_volume/create_default_value() - return maximum/2 - -/datum/preference/numeric/sound_lobby_volume/apply_to_client_updated(client/client, value) +/datum/preference/numeric/volume/sound_lobby_volume/apply_to_client_updated(client/client, value) if (value && isnewplayer(client.mob)) client.playtitlemusic() else client.mob.stop_sound_channel(CHANNEL_LOBBYMUSIC) /// Controls hearing admin music -/datum/preference/toggle/sound_midi +/datum/preference/numeric/volume/sound_midi category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_midi" savefile_identifier = PREFERENCE_PLAYER /// Controls ship ambience volume -/datum/preference/numeric/sound_ship_ambience_volume +/datum/preference/numeric/volume/sound_ship_ambience_volume category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_ship_ambience_volume" savefile_identifier = PREFERENCE_PLAYER - minimum = 0 - maximum = 200 - -/// default value is max/2 because 100 1x modifier, while 200 is 2x -/datum/preference/numeric/sound_ship_ambience_volume/create_default_value() - return maximum/2 - -/datum/preference/numeric/sound_ship_ambience_volume/apply_to_client_updated(client/client, value) +/datum/preference/numeric/volume/sound_ship_ambience_volume/apply_to_client_updated(client/client, value) client.mob.refresh_looping_ambience() -/// Controls hearing elevator music -/datum/preference/toggle/sound_elevator - category = PREFERENCE_CATEGORY_GAME_PREFERENCES - savefile_key = "sound_elevator" - savefile_identifier = PREFERENCE_PLAYER - /// Controls radio noise volume -/datum/preference/numeric/sound_radio_noise +/datum/preference/numeric/volume/sound_radio_noise category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_radio_noise" savefile_identifier = PREFERENCE_PLAYER - minimum = 0 - maximum = 200 - -/// default value is max/2 because 100 1x modifier, while 200 is 2x -/datum/preference/numeric/sound_radio_noise/create_default_value() - return maximum/2 - /// Controls hearing AI VOX announcements -/datum/preference/toggle/sound_ai_vox +/datum/preference/numeric/volume/sound_ai_vox category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_ai_vox" savefile_identifier = PREFERENCE_PLAYER diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 16a263cc14f..ea76675cd2a 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 46 +#define SAVEFILE_VERSION_MAX 47 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -112,6 +112,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car ) if (current_version < 46) migrate_boolean_sound_prefs_to_default_volume() + if (current_version < 47) + migrate_boolean_sound_prefs_to_default_volume_v2() /// checks through keybindings for outdated unbound keys and updates them /datum/preferences/proc/check_keybindings() diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 2fdd1615149..fe71b762984 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -25,8 +25,9 @@ return for(var/V in GLOB.player_list) var/mob/M = V - if((M.client.prefs.read_preference(/datum/preference/toggle/sound_midi)) && is_station_level(M.z)) - M.playsound_local(M, 'sound/ambience/aurora_caelus/aurora_caelus.ogg', 20, FALSE, pressure_affected = FALSE) + var/pref_volume = M.client.prefs.read_preference(/datum/preference/numeric/volume/sound_midi) + if(pref_volume > 0 && is_station_level(M.z)) + M.playsound_local(M, 'sound/ambience/aurora_caelus/aurora_caelus.ogg', 20 * (pref_volume/100), FALSE, pressure_affected = FALSE) fade_space(fade_in = TRUE) fade_kitchen(fade_in = TRUE) diff --git a/code/modules/instruments/songs/play_legacy.dm b/code/modules/instruments/songs/play_legacy.dm index c49122d4641..bb60d63c3b5 100644 --- a/code/modules/instruments/songs/play_legacy.dm +++ b/code/modules/instruments/songs/play_legacy.dm @@ -85,7 +85,8 @@ if(player && HAS_TRAIT(player, TRAIT_MUSICIAN) && isliving(M)) var/mob/living/L = M L.apply_status_effect(/datum/status_effect/good_music) - if(!(M?.client?.prefs.read_preference(/datum/preference/toggle/sound_instruments))) + var/pref_volume = M?.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_instruments) + if(!pref_volume) continue - M.playsound_local(source, null, volume * using_instrument.volume_multiplier, sound_to_use = music_played) + M.playsound_local(source, null, volume * using_instrument.volume_multiplier * (pref_volume/100), sound_to_use = music_played) // Could do environment and echo later but not for now diff --git a/code/modules/instruments/songs/play_synthesized.dm b/code/modules/instruments/songs/play_synthesized.dm index 05e23a8c97a..6f9cf2280b2 100644 --- a/code/modules/instruments/songs/play_synthesized.dm +++ b/code/modules/instruments/songs/play_synthesized.dm @@ -64,9 +64,10 @@ if(player && HAS_TRAIT(player, TRAIT_MUSICIAN) && isliving(M)) var/mob/living/L = M L.apply_status_effect(/datum/status_effect/good_music) - if(!(M?.client?.prefs.read_preference(/datum/preference/toggle/sound_instruments))) + var/pref_volume = M?.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_instruments) + if(!pref_volume) continue - M.playsound_local(get_turf(parent), null, volume, FALSE, K.frequency, null, channel, null, copy) + M.playsound_local(get_turf(parent), null, volume * (pref_volume/100), FALSE, K.frequency, null, channel, null, copy) // Could do environment and echo later but not for now /** diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index f906fb63304..0854da41284 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -195,7 +195,7 @@ combat_mode = new_mode if(hud_used?.action_intent) hud_used.action_intent.update_appearance() - if(silent || !(client?.prefs.read_preference(/datum/preference/toggle/sound_combatmode))) + if(silent || !client?.prefs.read_preference(/datum/preference/toggle/sound_combatmode)) return if(combat_mode) SEND_SOUND(src, sound('sound/misc/ui_togglecombat.ogg', volume = 25)) //Sound from interbay! diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index 0c7828a4fa5..65764b4fc54 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -161,28 +161,32 @@ if(GLOB.vox_sounds[word]) var/sound_file = GLOB.vox_sounds[word] - var/sound/voice = sound(sound_file, wait = 1, channel = CHANNEL_VOX) - voice.status = SOUND_STREAM // If there is no single listener, broadcast to everyone in the same z level if(!only_listener) // Play voice for all mobs in the z level for(var/mob/player_mob as anything in GLOB.player_list) - if(!player_mob.can_hear() || !safe_read_pref(player_mob.client, /datum/preference/toggle/sound_ai_vox)) + var/pref_volume = safe_read_pref(player_mob.client, /datum/preference/numeric/volume/sound_ai_vox) + if(!player_mob.can_hear() || !pref_volume) continue var/turf/player_turf = get_turf(player_mob) if(!is_valid_z_level(ai_turf, player_turf)) continue + var/sound/voice = sound(sound_file, wait = 1, channel = CHANNEL_VOX, volume = pref_volume) + voice.status = SOUND_STREAM SEND_SOUND(player_mob, voice) else + var/pref_volume = safe_read_pref(only_listener.client, /datum/preference/numeric/volume/sound_ai_vox) + var/sound/voice = sound(sound_file, wait = 1, channel = CHANNEL_VOX, volume = pref_volume) + voice.status = SOUND_STREAM SEND_SOUND(only_listener, voice) return TRUE return FALSE /proc/does_target_have_vox_off(mob/target) - return !safe_read_pref(target.client, /datum/preference/toggle/sound_ai_vox) + return !safe_read_pref(target.client, /datum/preference/numeric/volume/sound_ai_vox) #undef VOX_DELAY #endif diff --git a/code/modules/transport/elevator/elev_music_zone.dm b/code/modules/transport/elevator/elev_music_zone.dm index f5b3de8a67c..9a8b2e98c15 100644 --- a/code/modules/transport/elevator/elev_music_zone.dm +++ b/code/modules/transport/elevator/elev_music_zone.dm @@ -73,9 +73,11 @@ GLOBAL_LIST_EMPTY(elevator_music) if (entered in tracked_mobs) return - - if (entered.client?.prefs.read_preference(/datum/preference/toggle/sound_elevator)) - tracked_mobs[entered] = new soundloop_type(_parent = entered, _direct = TRUE, start_immediately = enabled) + var/pref_volume = entered.client?.prefs.read_preference(/datum/preference/numeric/volume/sound_ambience_volume) + if (pref_volume > 0) + var/datum/looping_sound/soundloop = new soundloop_type(_parent = entered, _direct = TRUE, start_immediately = enabled) + soundloop.volume *= pref_volume/100 + tracked_mobs[entered] = soundloop else tracked_mobs[entered] = null // Still add it to the list so we don't keep making this check RegisterSignal(entered, COMSIG_QDELETING, PROC_REF(mob_destroyed)) diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx index b1683a8ef37..51b257b3ff1 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx @@ -35,18 +35,11 @@ export const sound_combatmode: FeatureToggle = { component: CheckboxInput, }; -export const sound_endofround: FeatureToggle = { - name: 'Enable end of round sounds', +export const sound_instruments: Feature = { + name: 'Instruments volume', category: 'SOUND', - description: 'When enabled, hear a sound when the server is rebooting.', - component: CheckboxInput, -}; - -export const sound_instruments: FeatureToggle = { - name: 'Enable instruments', - category: 'SOUND', - description: 'When enabled, be able hear instruments in game.', - component: CheckboxInput, + description: 'Volume of instruments.', + component: FeatureSliderInput, }; export const sound_tts: FeatureChoiced = { @@ -66,24 +59,17 @@ export const sound_tts_volume: Feature = { component: FeatureSliderInput, }; -export const sound_jukebox: FeatureToggle = { - name: 'Enable jukebox music', - category: 'SOUND', - description: 'When enabled, hear music for jukeboxes, dance machines, etc.', - component: CheckboxInput, -}; - export const sound_lobby_volume: Feature = { name: 'Lobby music volume', category: 'SOUND', component: FeatureSliderInput, }; -export const sound_midi: FeatureToggle = { - name: 'Enable admin music', +export const sound_midi: Feature = { + name: 'Admin music volume', category: 'SOUND', - description: 'When enabled, admins will be able to play music to you.', - component: CheckboxInput, + description: 'Volume of admin musics.', + component: FeatureSliderInput, }; export const sound_ship_ambience_volume: Feature = { @@ -93,12 +79,6 @@ export const sound_ship_ambience_volume: Feature = { component: FeatureSliderInput, }; -export const sound_elevator: FeatureToggle = { - name: 'Enable elevator music', - category: 'SOUND', - component: CheckboxInput, -}; - export const sound_achievement: FeatureChoiced = { name: 'Achievement unlock sound', category: 'SOUND', @@ -116,10 +96,9 @@ export const sound_radio_noise: Feature = { component: FeatureSliderInput, }; -export const sound_ai_vox: FeatureToggle = { - name: 'Enable AI VOX announcements', +export const sound_ai_vox: Feature = { + name: 'AI VOX announcements volume', category: 'SOUND', - description: - 'When enabled, hear vocal AI announcements (also known as "VOX").', - component: CheckboxInput, + description: 'Volume of vocal AI announcements (also known as "VOX").', + component: FeatureSliderInput, };