diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index 65acdf880b..1c6e3ad2a7 100644 --- a/OpenRA.Mods.Common/Traits/Cloak.cs +++ b/OpenRA.Mods.Common/Traits/Cloak.cs @@ -71,6 +71,7 @@ namespace OpenRA.Mods.Common.Traits CPos? lastPos; bool wasCloaked = false; + bool firstTick = true; int cloakedToken = ConditionManager.InvalidConditionToken; public Cloak(CloakInfo info) @@ -153,7 +154,8 @@ namespace OpenRA.Mods.Common.Traits if (conditionManager != null && cloakedToken == ConditionManager.InvalidConditionToken && !string.IsNullOrEmpty(Info.CloakedCondition)) cloakedToken = conditionManager.GrantCondition(self, Info.CloakedCondition); - if (!self.TraitsImplementing().Any(a => a != this && a.Cloaked)) + // Sounds shouldn't play if the actor starts cloaked + if (!(firstTick && Info.InitialDelay == 0) && !self.TraitsImplementing().Any(a => a != this && a.Cloaked)) Game.Sound.Play(SoundType.World, Info.CloakSound, self.CenterPosition); } else if (!isCloaked && wasCloaked) @@ -161,11 +163,12 @@ namespace OpenRA.Mods.Common.Traits if (cloakedToken != ConditionManager.InvalidConditionToken) cloakedToken = conditionManager.RevokeCondition(self, cloakedToken); - if (!self.TraitsImplementing().Any(a => a != this && a.Cloaked)) + if (!(firstTick && Info.InitialDelay == 0) && !self.TraitsImplementing().Any(a => a != this && a.Cloaked)) Game.Sound.Play(SoundType.World, Info.UncloakSound, self.CenterPosition); } wasCloaked = isCloaked; + firstTick = false; } public bool IsVisible(Actor self, Player viewer)