diff --git a/Content.Client/EscapeMenu/UI/Tabs/AudioTab.xaml b/Content.Client/EscapeMenu/UI/Tabs/AudioTab.xaml index e4a8d3ff7a..24bc81aed0 100644 --- a/Content.Client/EscapeMenu/UI/Tabs/AudioTab.xaml +++ b/Content.Client/EscapeMenu/UI/Tabs/AudioTab.xaml @@ -63,6 +63,7 @@ + diff --git a/Content.Client/EscapeMenu/UI/Tabs/AudioTab.xaml.cs b/Content.Client/EscapeMenu/UI/Tabs/AudioTab.xaml.cs index 146f4a632b..97b9bf640e 100644 --- a/Content.Client/EscapeMenu/UI/Tabs/AudioTab.xaml.cs +++ b/Content.Client/EscapeMenu/UI/Tabs/AudioTab.xaml.cs @@ -22,6 +22,7 @@ namespace Content.Client.EscapeMenu.UI.Tabs IoCManager.InjectDependencies(this); LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); + RestartSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.RestartSoundsEnabled); EventMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.EventMusicEnabled); AdminSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.AdminSoundsEnabled); StationAmbienceCheckBox.Pressed = _cfg.GetCVar(CCVars.StationAmbienceEnabled); @@ -34,6 +35,7 @@ namespace Content.Client.EscapeMenu.UI.Tabs AmbienceVolumeSlider.OnValueChanged += OnAmbienceVolumeSliderChanged; AmbienceSoundsSlider.OnValueChanged += OnAmbienceSoundsSliderChanged; LobbyMusicCheckBox.OnToggled += OnLobbyMusicCheckToggled; + RestartSoundsCheckBox.OnToggled += OnRestartSoundsCheckToggled; EventMusicCheckBox.OnToggled += OnEventMusicCheckToggled; AdminSoundsCheckBox.OnToggled += OnAdminSoundsCheckToggled; StationAmbienceCheckBox.OnToggled += OnStationAmbienceCheckToggled; @@ -80,7 +82,10 @@ namespace Content.Client.EscapeMenu.UI.Tabs { UpdateChanges(); } - + private void OnRestartSoundsCheckToggled(BaseButton.ButtonEventArgs args) + { + UpdateChanges(); + } private void OnEventMusicCheckToggled(BaseButton.ButtonEventArgs args) { UpdateChanges(); @@ -108,6 +113,7 @@ namespace Content.Client.EscapeMenu.UI.Tabs _cfg.SetCVar(CCVars.AmbienceVolume, LV100ToDB(AmbienceVolumeSlider.Value)); _cfg.SetCVar(CCVars.MaxAmbientSources, (int)AmbienceSoundsSlider.Value); _cfg.SetCVar(CCVars.LobbyMusicEnabled, LobbyMusicCheckBox.Pressed); + _cfg.SetCVar(CCVars.RestartSoundsEnabled, RestartSoundsCheckBox.Pressed); _cfg.SetCVar(CCVars.EventMusicEnabled, EventMusicCheckBox.Pressed); _cfg.SetCVar(CCVars.AdminSoundsEnabled, AdminSoundsCheckBox.Pressed); _cfg.SetCVar(CCVars.StationAmbienceEnabled, StationAmbienceCheckBox.Pressed); @@ -128,6 +134,7 @@ namespace Content.Client.EscapeMenu.UI.Tabs AmbienceVolumeSlider.Value = DBToLV100(_cfg.GetCVar(CCVars.AmbienceVolume)); AmbienceSoundsSlider.Value = _cfg.GetCVar(CCVars.MaxAmbientSources); LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); + RestartSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.RestartSoundsEnabled); EventMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.EventMusicEnabled); AdminSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.AdminSoundsEnabled); StationAmbienceCheckBox.Pressed = _cfg.GetCVar(CCVars.StationAmbienceEnabled); @@ -158,11 +165,12 @@ namespace Content.Client.EscapeMenu.UI.Tabs Math.Abs(AmbienceVolumeSlider.Value - DBToLV100(_cfg.GetCVar(CCVars.AmbienceVolume))) < 0.01f; var isAmbientSoundsSame = (int)AmbienceSoundsSlider.Value == _cfg.GetCVar(CCVars.MaxAmbientSources); var isLobbySame = LobbyMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.LobbyMusicEnabled); + var isRestartSoundsSame = RestartSoundsCheckBox.Pressed == _cfg.GetCVar(CCVars.RestartSoundsEnabled); var isEventSame = EventMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.EventMusicEnabled); var isAdminSoundsSame = AdminSoundsCheckBox.Pressed == _cfg.GetCVar(CCVars.AdminSoundsEnabled); var isStationAmbienceSame = StationAmbienceCheckBox.Pressed == _cfg.GetCVar(CCVars.StationAmbienceEnabled); var isSpaceAmbienceSame = SpaceAmbienceCheckBox.Pressed == _cfg.GetCVar(CCVars.SpaceAmbienceEnabled); - var isEverythingSame = isMasterVolumeSame && isMidiVolumeSame && isAmbientVolumeSame && isAmbientSoundsSame && isLobbySame && isEventSame && isAdminSoundsSame && isStationAmbienceSame && isSpaceAmbienceSame; + var isEverythingSame = isMasterVolumeSame && isMidiVolumeSame && isAmbientVolumeSame && isAmbientSoundsSame && isLobbySame && isRestartSoundsSame && isEventSame && isAdminSoundsSame && isStationAmbienceSame && isSpaceAmbienceSame; ApplyButton.Disabled = isEverythingSame; ResetButton.Disabled = isEverythingSame; MasterVolumeLabel.Text = diff --git a/Content.Client/GameTicking/Managers/ClientGameTicker.cs b/Content.Client/GameTicking/Managers/ClientGameTicker.cs index 6d6f8a972d..c15d0e3ae5 100644 --- a/Content.Client/GameTicking/Managers/ClientGameTicker.cs +++ b/Content.Client/GameTicking/Managers/ClientGameTicker.cs @@ -2,12 +2,14 @@ using Content.Client.Audio; using Content.Client.Lobby; using Content.Client.RoundEnd; using Content.Client.Viewport; +using Content.Shared.CCVar; using Content.Shared.GameTicking; using Content.Shared.GameWindow; using JetBrains.Annotations; using Robust.Client.Graphics; using Robust.Client.State; using Robust.Shared.Audio; +using Robust.Shared.Configuration; using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Utility; @@ -19,6 +21,7 @@ namespace Content.Client.GameTicking.Managers { [Dependency] private readonly IStateManager _stateManager = default!; [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IConfigurationManager _configManager = default!; [ViewVariables] private bool _initialized; private Dictionary> _jobsAvailable = new(); @@ -147,6 +150,12 @@ namespace Content.Client.GameTicking.Managers if (string.IsNullOrEmpty(RestartSound)) return; + if (!_configManager.GetCVar(CCVars.RestartSoundsEnabled)) + { + RestartSound = null; + return; + } + SoundSystem.Play(RestartSound, Filter.Empty()); // Cleanup the sound, we only want it to play when the round restarts after it ends normally. diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 7024395d0f..b5a6c8599f 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -437,6 +437,14 @@ namespace Content.Shared.CCVar public static readonly CVarDef EventMusicEnabled = CVarDef.Create("ambience.event_music_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); + /* + * Specific Sounds + */ + // Round end sound (APC Destroyed) + public static readonly CVarDef RestartSoundsEnabled = + CVarDef.Create("ambience.restart_sounds_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); + + /* * Admin sounds */ diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index 60c39ef41e..0902186943 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -16,6 +16,7 @@ ui-options-midi-volume = MIDI (Instrument) Volume: ui-options-ambience-volume = Ambience volume: ui-options-ambience-max-sounds = Ambience simultaneous sounds: ui-options-lobby-music = Lobby & Round-end Music +ui-options-restart-sounds = Round Restart Sounds ui-options-event-music = Event Music ui-options-admin-sounds = Play Admin Sounds ui-options-station-ambience = Station Ambience