diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj
index ae74c3a932..9fa69e1eff 100644
--- a/OpenRa.Game/OpenRa.Game.csproj
+++ b/OpenRa.Game/OpenRa.Game.csproj
@@ -267,6 +267,7 @@
+
@@ -302,4 +303,4 @@
-->
-
\ No newline at end of file
+
diff --git a/OpenRa.Game/Traits/World/ScreenShaker.cs b/OpenRa.Game/Traits/World/ScreenShaker.cs
new file mode 100644
index 0000000000..485197d732
--- /dev/null
+++ b/OpenRa.Game/Traits/World/ScreenShaker.cs
@@ -0,0 +1,38 @@
+
+using System;
+using OpenRa.Traits;
+
+namespace OpenRa.Traits
+{
+ class ScreenShakerInfo : ITraitInfo
+ {
+ public object Create( Actor self ) { return new ScreenShaker( self ); }
+ }
+
+ public class ScreenShaker : ITick
+ {
+ int ticks = 0;
+
+ public ScreenShaker (Actor self){}
+
+ public void Tick (Actor self)
+ {
+ Game.viewport.Scroll(getScrollOffset());
+ ticks++;
+ }
+
+ //public void registerShakeEffect(float2 position, int time)
+ //{
+ //}
+
+ public float2 getScrollOffset()
+ {
+ int xFreq = 4;
+ int yFreq = 5;
+ int intensity = 3;
+
+ return intensity * new float2( (float) Math.Sin((ticks*2*Math.PI)/xFreq) , (float) Math.Cos((ticks*2*Math.PI)/yFreq));
+ }
+
+ }
+}
diff --git a/mods/ra/rules.yaml b/mods/ra/rules.yaml
index 451f38acf4..545e69383f 100644
--- a/mods/ra/rules.yaml
+++ b/mods/ra/rules.yaml
@@ -61,6 +61,7 @@ Player:
SpawnDefaultUnits:
World:
+ ScreenShaker:
WaterPaletteRotation:
ChronoshiftPaletteEffect:
LightPaletteRotator: