diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs
index 5ac0eed4f4..09c24cccf1 100644
--- a/OpenRa.Game/Game.cs
+++ b/OpenRa.Game/Game.cs
@@ -74,6 +74,10 @@ namespace OpenRa.Game
Game.world.Add(a);
}
+ var worldActor = new Actor(null, new int2(int.MaxValue, int.MaxValue), null);
+ worldActor.traits.Add(new Traits.WaterPaletteRotation(worldActor));
+ Game.world.Add(worldActor);
+
Rules.Map.InitOreDensity();
worldRenderer = new WorldRenderer(renderer);
diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj
index ca5f68d865..108df335a8 100644
--- a/OpenRa.Game/OpenRa.Game.csproj
+++ b/OpenRa.Game/OpenRa.Game.csproj
@@ -201,6 +201,7 @@
+
diff --git a/OpenRa.Game/Traits/WaterPaletteRotation.cs b/OpenRa.Game/Traits/WaterPaletteRotation.cs
new file mode 100644
index 0000000000..02f7cf84b5
--- /dev/null
+++ b/OpenRa.Game/Traits/WaterPaletteRotation.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Drawing;
+
+namespace OpenRa.Game.Traits
+{
+ class WaterPaletteRotation : ITick, IPaletteModifier
+ {
+ public WaterPaletteRotation(Actor self) { }
+
+ float t = 0;
+ public void Tick(Actor self)
+ {
+ t += .25f;
+ }
+
+ public void AdjustPalette(Bitmap b)
+ {
+ var rotate = (int)t % 7;
+ using (var bitmapCopy = new Bitmap(b))
+ for (int j = 0; j < 16; j++)
+ for (int i = 0; i < 7; i++)
+ b.SetPixel(0x60 + (rotate + i) % 7, j, bitmapCopy.GetPixel(0x60 + i, j));
+ }
+ }
+}