diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj
index 67a316fd7d..3a894ecdb8 100755
--- a/OpenRA.Game/OpenRA.Game.csproj
+++ b/OpenRA.Game/OpenRA.Game.csproj
@@ -83,6 +83,7 @@
+
diff --git a/OpenRA.Game/Traits/Modifiers/FrozenUnderFog.cs b/OpenRA.Game/Traits/Modifiers/FrozenUnderFog.cs
new file mode 100644
index 0000000000..3a7fb5a297
--- /dev/null
+++ b/OpenRA.Game/Traits/Modifiers/FrozenUnderFog.cs
@@ -0,0 +1,57 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
+ * This file is part of OpenRA.
+ *
+ * OpenRA is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * OpenRA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with OpenRA. If not, see .
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+
+namespace OpenRA.Traits
+{
+ class FrozenUnderFogInfo : ITraitInfo
+ {
+ public object Create(ActorInitializer init) { return new FrozenUnderFog(init.self); }
+ }
+
+ class FrozenUnderFog : IRenderModifier
+ {
+ Shroud shroud;
+ Renderable[] cache = { };
+
+ public FrozenUnderFog(Actor self)
+ {
+ shroud = self.World.WorldActor.traits.Get();
+ }
+
+ bool IsVisible(Actor self)
+ {
+ return self.World.LocalPlayer == null
+ || self.Owner == self.World.LocalPlayer
+ || self.World.LocalPlayer.Shroud.Disabled
+ || Shroud.GetVisOrigins(self).Any(o => self.World.Map.IsInMap(o) && shroud.visibleCells[o.X, o.Y] != 0);
+ }
+
+ public IEnumerable ModifyRender(Actor self, IEnumerable r)
+ {
+ if (IsVisible(self))
+ cache = r.ToArray();
+
+ return r;
+ }
+ }
+}
diff --git a/mods/ra/defaults.yaml b/mods/ra/defaults.yaml
index 310595fc12..8b2c06c129 100644
--- a/mods/ra/defaults.yaml
+++ b/mods/ra/defaults.yaml
@@ -65,6 +65,7 @@
ActorTypes: e1,e1,e1,c1,c2,e6
MustBeDestroyed:
GivesExperience:
+ FrozenUnderFog:
^Wall:
Category: Building