diff --git a/OpenRA.Game/Sound/Sound.cs b/OpenRA.Game/Sound/Sound.cs index d61a5ac692..aab58260ab 100644 --- a/OpenRA.Game/Sound/Sound.cs +++ b/OpenRA.Game/Sound/Sound.cs @@ -96,8 +96,9 @@ namespace OpenRA ISound Play(SoundType type, Player player, string name, bool headRelative, WPos pos, float volumeModifier = 1f, bool loop = false) { - if (string.IsNullOrEmpty(name)) + if (string.IsNullOrEmpty(name) || (DisableWorldSounds && type == SoundType.World)) return null; + if (player != null && player != player.World.LocalPlayer) return null; @@ -121,6 +122,7 @@ namespace OpenRA soundEngine.Volume = 1f; } + public bool DisableWorldSounds { get; set; } public ISound Play(SoundType type, string name) { return Play(type, null, name, true, WPos.Zero, 1f); } public ISound Play(SoundType type, string name, WPos pos) { return Play(type, null, name, false, pos, 1f); } public ISound Play(SoundType type, string name, float volumeModifier) { return Play(type, null, name, true, WPos.Zero, volumeModifier); } @@ -308,7 +310,7 @@ namespace OpenRA if (ruleset == null) throw new ArgumentNullException("ruleset"); - if (definition == null) + if (definition == null || (DisableWorldSounds && soundType == SoundType.World)) return false; if (ruleset.Voices == null || ruleset.Notifications == null) diff --git a/OpenRA.Mods.Common/Traits/World/MusicPlaylist.cs b/OpenRA.Mods.Common/Traits/World/MusicPlaylist.cs index 3510b733b8..3cda83ef79 100644 --- a/OpenRA.Mods.Common/Traits/World/MusicPlaylist.cs +++ b/OpenRA.Mods.Common/Traits/World/MusicPlaylist.cs @@ -32,6 +32,9 @@ namespace OpenRA.Mods.Common.Traits "It cannot be paused, but can be overridden by selecting a new track.")] public readonly string BackgroundMusic = null; + [Desc("Disable all world sounds (combat etc).")] + public readonly bool DisableWorldSounds = false; + public object Create(ActorInitializer init) { return new MusicPlaylist(init.World, this); } } @@ -55,6 +58,9 @@ namespace OpenRA.Mods.Common.Traits this.info = info; this.world = world; + if (info.DisableWorldSounds) + Game.Sound.DisableWorldSounds = true; + IsMusicInstalled = world.Map.Rules.InstalledMusic.Any(); if (!IsMusicInstalled) return; @@ -220,6 +226,8 @@ namespace OpenRA.Mods.Common.Traits { if (currentSong != null) Game.Sound.StopMusic(); + + Game.Sound.DisableWorldSounds = false; } } } diff --git a/mods/cnc/maps/shellmap/rules.yaml b/mods/cnc/maps/shellmap/rules.yaml index dd30591281..dcd2b78e81 100644 --- a/mods/cnc/maps/shellmap/rules.yaml +++ b/mods/cnc/maps/shellmap/rules.yaml @@ -8,6 +8,7 @@ World: Scripts: shellmap.lua MusicPlaylist: BackgroundMusic: map1 + DisableWorldSounds: true LST: Mobile: diff --git a/mods/d2k/maps/shellmap/rules.yaml b/mods/d2k/maps/shellmap/rules.yaml index 27a52e0df1..59a89e5d9e 100644 --- a/mods/d2k/maps/shellmap/rules.yaml +++ b/mods/d2k/maps/shellmap/rules.yaml @@ -13,6 +13,7 @@ World: Maximum: 3 MusicPlaylist: BackgroundMusic: options + DisableWorldSounds: true LuaScript: Scripts: d2k-shellmap.lua diff --git a/mods/ra/maps/desert-shellmap/rules.yaml b/mods/ra/maps/desert-shellmap/rules.yaml index 96760317c5..63f2a7a1cb 100644 --- a/mods/ra/maps/desert-shellmap/rules.yaml +++ b/mods/ra/maps/desert-shellmap/rules.yaml @@ -7,6 +7,7 @@ World: -MPStartLocations: MusicPlaylist: BackgroundMusic: intro + DisableWorldSounds: true ResourceType@ore: ValuePerUnit: 0 LuaScript: diff --git a/mods/ts/maps/fields-of-green/map.yaml b/mods/ts/maps/fields-of-green/map.yaml index 88c2c68da3..c7c0017e0d 100644 --- a/mods/ts/maps/fields-of-green/map.yaml +++ b/mods/ts/maps/fields-of-green/map.yaml @@ -1433,6 +1433,7 @@ Rules: ValuePerUnit: 0 MusicPlaylist: BackgroundMusic: intro + DisableWorldSounds: true GlobalLightingPaletteEffect: Blue: 0.7 Ambient: 0.7