diff --git a/Assets/Animations.meta b/Assets/Animations.meta
new file mode 100644
index 0000000000000000000000000000000000000000..78c77bd9d7e915381517c703b45b0ce86a84cfee
--- /dev/null
+++ b/Assets/Animations.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 4f34a1a30634fc648941b706d105f9dc
+folderAsset: yes
+timeCreated: 1506670737
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animations/Explosion.anim b/Assets/Animations/Explosion.anim
new file mode 100644
index 0000000000000000000000000000000000000000..0023cb052a1b45798413eb9333f8b64e98f86cd2
Binary files /dev/null and b/Assets/Animations/Explosion.anim differ
diff --git a/Assets/Animations/Explosion.anim.meta b/Assets/Animations/Explosion.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..609efb012540a35cc1cb933ea2440a88a97ccbce
--- /dev/null
+++ b/Assets/Animations/Explosion.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5a5ff37b4ac1aa549b65cebc96b93f46
+timeCreated: 1506673134
+licenseType: Free
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animations/explosjon3_0.controller b/Assets/Animations/explosjon3_0.controller
new file mode 100644
index 0000000000000000000000000000000000000000..aa549ca78b94752f66d7d90adcb02725efbb6f61
Binary files /dev/null and b/Assets/Animations/explosjon3_0.controller differ
diff --git a/Assets/Animations/explosjon3_0.controller.meta b/Assets/Animations/explosjon3_0.controller.meta
new file mode 100644
index 0000000000000000000000000000000000000000..097cbf9861142435f911fb693151e9c44845bc84
--- /dev/null
+++ b/Assets/Animations/explosjon3_0.controller.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 238401a8632a17d4bac76cdaadb2080b
+timeCreated: 1506673134
+licenseType: Free
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Fonts.meta b/Assets/Fonts.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c8a7beaa7b4e2c824b26263b36bf4027ceaad59c
--- /dev/null
+++ b/Assets/Fonts.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 21a4121c77aad0c468e5669eab22c854
+folderAsset: yes
+timeCreated: 1506587374
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Fonts/OCRASTD.OTF b/Assets/Fonts/OCRASTD.OTF
new file mode 100644
index 0000000000000000000000000000000000000000..3e9ded838a1299a5a7e888a1c11bc793c1fe6675
Binary files /dev/null and b/Assets/Fonts/OCRASTD.OTF differ
diff --git a/Assets/Fonts/OCRASTD.OTF.meta b/Assets/Fonts/OCRASTD.OTF.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2e9c61ec494fc8c3a8b3b8a399521206f7c8eb23
--- /dev/null
+++ b/Assets/Fonts/OCRASTD.OTF.meta
@@ -0,0 +1,21 @@
+fileFormatVersion: 2
+guid: efd564c62027a0849ad015f581c44a35
+timeCreated: 1506587425
+licenseType: Free
+TrueTypeFontImporter:
+  serializedVersion: 4
+  fontSize: 16
+  forceTextureCase: -2
+  characterSpacing: 0
+  characterPadding: 1
+  includeFontData: 1
+  fontName: OCR A Std
+  fontNames:
+  - OCR A Std
+  fallbackFontReferences: []
+  customCharacters: 
+  fontRenderingMode: 0
+  ascentCalculationMode: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Prefabs/BaseBullet.prefab b/Assets/Prefabs/BaseBullet.prefab
index 26b502e020ef244211ec6a9627ca9fd41e25f3ca..d2a7b7f25e2e97cdd6938d97497fd0e873016e33 100644
Binary files a/Assets/Prefabs/BaseBullet.prefab and b/Assets/Prefabs/BaseBullet.prefab differ
diff --git a/Assets/Prefabs/BaseEnemyBullet.prefab b/Assets/Prefabs/BaseEnemyBullet.prefab
index 52ba1f680957d0c9ee050936ed2aaf8d5b8ae538..57737d9df3284023d451603902c6b00a0f8e2bd1 100644
Binary files a/Assets/Prefabs/BaseEnemyBullet.prefab and b/Assets/Prefabs/BaseEnemyBullet.prefab differ
diff --git a/Assets/Prefabs/Enemy1.prefab b/Assets/Prefabs/Enemy1.prefab
index f47967ce0530ef1785da3da2ef48411ef4f5d8b6..ddf75f0456fccff30af55adda27844ec0a60ccf3 100644
Binary files a/Assets/Prefabs/Enemy1.prefab and b/Assets/Prefabs/Enemy1.prefab differ
diff --git a/Assets/Prefabs/Enemy2.prefab b/Assets/Prefabs/Enemy2.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..36b760fc4f413ebb003d36a6064e111604a8a4d3
Binary files /dev/null and b/Assets/Prefabs/Enemy2.prefab differ
diff --git a/Assets/Prefabs/Enemy2.prefab.meta b/Assets/Prefabs/Enemy2.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b66638bb4f8d6284119e91b5645fab26b59e65df
--- /dev/null
+++ b/Assets/Prefabs/Enemy2.prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a0c7da998a25fa04f8465e15b1559371
+timeCreated: 1506433459
+licenseType: Free
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Prefabs/EnemyGreen.prefab b/Assets/Prefabs/EnemyGreen.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..3ee3265f6e40d755d9f48dd9203bca6d6e0a8da9
Binary files /dev/null and b/Assets/Prefabs/EnemyGreen.prefab differ
diff --git a/Assets/Prefabs/EnemyGreen.prefab.meta b/Assets/Prefabs/EnemyGreen.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..feb20103f5ad5fb3178813fc1f12252d949631f9
--- /dev/null
+++ b/Assets/Prefabs/EnemyGreen.prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a25d4d65ed6ee8c4fb1deec4e2b746ca
+timeCreated: 1506614175
+licenseType: Free
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Prefabs/EnemyWhite.prefab b/Assets/Prefabs/EnemyWhite.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..d13aef8c731a99c20213dd5353383c78a2957382
Binary files /dev/null and b/Assets/Prefabs/EnemyWhite.prefab differ
diff --git a/Assets/Prefabs/EnemyWhite.prefab.meta b/Assets/Prefabs/EnemyWhite.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a2211c41138a2752895292883d15dc2ab9b6a1bb
--- /dev/null
+++ b/Assets/Prefabs/EnemyWhite.prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4f048b68244437a458222b93f81aa164
+timeCreated: 1506614132
+licenseType: Free
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Prefabs/Explosion.prefab b/Assets/Prefabs/Explosion.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..f2c32fffc977e15f984302e4aee373d6884ad05f
Binary files /dev/null and b/Assets/Prefabs/Explosion.prefab differ
diff --git a/Assets/Prefabs/Explosion.prefab.meta b/Assets/Prefabs/Explosion.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bfd05530041441f7b98b2a3e1f5aec05152b4185
--- /dev/null
+++ b/Assets/Prefabs/Explosion.prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a97d3acd84a472045a53a983f15f5dc8
+timeCreated: 1506673157
+licenseType: Free
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Prefabs/NightBackground.prefab b/Assets/Prefabs/NightBackground.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..25ff55eeed459ce696fabc4b1dfc9cfb6abcc4a0
Binary files /dev/null and b/Assets/Prefabs/NightBackground.prefab differ
diff --git a/Assets/Prefabs/NightBackground.prefab.meta b/Assets/Prefabs/NightBackground.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e6b12c335bdfef380294a3896df465df28e5a538
--- /dev/null
+++ b/Assets/Prefabs/NightBackground.prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 26b2b345536d41a488b3b95bde3ce931
+timeCreated: 1506438286
+licenseType: Free
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/BaseMenu.unity b/Assets/Scenes/BaseMenu.unity
new file mode 100644
index 0000000000000000000000000000000000000000..f93aa90e541a78ca8f788172b95435bcee1018aa
Binary files /dev/null and b/Assets/Scenes/BaseMenu.unity differ
diff --git a/Assets/Scenes/BaseMenu.unity.meta b/Assets/Scenes/BaseMenu.unity.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d4b36fbea2e67dd538339c33c5166053c0ff83c1
--- /dev/null
+++ b/Assets/Scenes/BaseMenu.unity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2e3c5f1dcace31a469ad039cd3922cd6
+timeCreated: 1506587746
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/BaseScene.unity b/Assets/Scenes/BaseScene.unity
index d004c1e1d0a83aa138a073d56853e0a42d1cb4e1..d8589492ca8c6b3a4effff6f8d636aec8a7963bb 100644
Binary files a/Assets/Scenes/BaseScene.unity and b/Assets/Scenes/BaseScene.unity differ
diff --git a/Assets/Scenes/GameOver.unity b/Assets/Scenes/GameOver.unity
new file mode 100644
index 0000000000000000000000000000000000000000..d422e0fd5307641442f7269f538f23817b34de56
Binary files /dev/null and b/Assets/Scenes/GameOver.unity differ
diff --git a/Assets/Scenes/GameOver.unity.meta b/Assets/Scenes/GameOver.unity.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c62122e31242ab5b956ee18265f4fa727ceffe4c
--- /dev/null
+++ b/Assets/Scenes/GameOver.unity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 428008de01b7ff449b526604642ec437
+timeCreated: 1506690960
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/EnergyManager.cs b/Assets/Scripts/EnergyManager.cs
deleted file mode 100644
index 55bf6ea8703b264f2386e7b6f7b99eb7ace44f6c..0000000000000000000000000000000000000000
--- a/Assets/Scripts/EnergyManager.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class EnergyManager : MonoBehaviour {
-
-	// Use this for initialization
-	void Start () {
-		
-	}
-	
-	// Update is called once per frame
-	void Update () {
-		
-	}
-}
diff --git a/Assets/Scripts/Game.meta b/Assets/Scripts/Game.meta
new file mode 100644
index 0000000000000000000000000000000000000000..17560d7bc603cb707b13fdd55fbec09a235bef13
--- /dev/null
+++ b/Assets/Scripts/Game.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: e694f2184c65a0e489eac65214772d76
+folderAsset: yes
+timeCreated: 1506587542
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/BackgroundManager.cs b/Assets/Scripts/Game/BackgroundManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..657ca37bda05481d47b9d231630844fd562eed51
--- /dev/null
+++ b/Assets/Scripts/Game/BackgroundManager.cs
@@ -0,0 +1,72 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BackgroundManager : MonoBehaviour
+{
+    [SerializeField]
+    GameObject backgroundPrefab;
+    float spriteWidth = 5;
+    [SerializeField]
+    int numberOfSideBackgroundTiles = 1;
+    GameObject[] tiles;
+    int currentFirstTileIndex = 0;
+
+    // Use this for initialization
+	void Start ()
+    {
+        tiles = new GameObject[1 + 2 * numberOfSideBackgroundTiles];
+        SpriteRenderer spriteRenderer = backgroundPrefab.GetComponent<SpriteRenderer>();
+        if(spriteRenderer)
+        {
+            spriteWidth = 2 * spriteRenderer.sprite.bounds.size.x;
+        }
+        for (int i = -numberOfSideBackgroundTiles; i <= numberOfSideBackgroundTiles; i++)
+        {
+            tiles[numberOfSideBackgroundTiles + i] = Instantiate(backgroundPrefab);
+            tiles[numberOfSideBackgroundTiles + i].transform.position = new Vector3(spriteWidth * i, 0, 1);
+        }
+	}
+
+    int PreviousIndex(int currentIndex)
+    {
+        if(currentIndex == 0)
+        {
+            return tiles.Length - 1;
+        }
+        else
+        {
+            return currentIndex - 1;
+        }
+    }
+
+    int NextIndex(int currentIndex)
+    {
+        if (currentIndex == tiles.Length - 1)
+        {
+            return 0;
+        }
+        else
+        {
+            return currentIndex + 1;
+        }
+    }
+
+    // Update is called once per frame
+    void Update ()
+    {
+        if(tiles[currentFirstTileIndex].transform.position.x < - UtilityMeasures.ScreenWidthInUnits() / 2f - spriteWidth)
+        {
+            int currentLastTileIndex = PreviousIndex(currentFirstTileIndex);
+            tiles[currentFirstTileIndex].transform.position = new Vector3(spriteWidth + tiles[currentLastTileIndex].transform.position.x, 0, 1);
+            if(currentFirstTileIndex < tiles.Length - 1)
+            {
+                currentFirstTileIndex ++;
+            }
+            else
+            {
+                currentFirstTileIndex = 0;
+            }
+        }
+    }
+}
diff --git a/Assets/Scripts/Game/BackgroundManager.cs.meta b/Assets/Scripts/Game/BackgroundManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..43a4e1c7f2dff389fd0397195bdd24add5283504
--- /dev/null
+++ b/Assets/Scripts/Game/BackgroundManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6d2e389c4b68ced4ca8a8c87a4e0d2ed
+timeCreated: 1506436569
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/BackgroundScroller.cs b/Assets/Scripts/Game/BackgroundScroller.cs
new file mode 100644
index 0000000000000000000000000000000000000000..58d761f11ff9860eabe75493180d71d8722fc46e
--- /dev/null
+++ b/Assets/Scripts/Game/BackgroundScroller.cs
@@ -0,0 +1,15 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BackgroundScroller : MonoBehaviour
+{
+    [SerializeField]
+    MoveableManager moveableManager;
+
+	// Update is called once per frame
+	void Update ()
+    {
+        moveableManager.Move(new Vector3(-1, 0, 0));
+	}
+}
diff --git a/Assets/Scripts/Game/BackgroundScroller.cs.meta b/Assets/Scripts/Game/BackgroundScroller.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..886fc99d08c7a74b7758b4457590c806f4adf93d
--- /dev/null
+++ b/Assets/Scripts/Game/BackgroundScroller.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9a5dfd725e6dd9141a78caf781354901
+timeCreated: 1506497907
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/BaseEnemyManager.cs b/Assets/Scripts/Game/BaseEnemyManager.cs
similarity index 84%
rename from Assets/Scripts/BaseEnemyManager.cs
rename to Assets/Scripts/Game/BaseEnemyManager.cs
index ad43d0cae48a1689e9ca8d9d05302e6f362c0406..a278699523da3564fab591a983d60412f5e3ce06 100644
--- a/Assets/Scripts/BaseEnemyManager.cs
+++ b/Assets/Scripts/Game/BaseEnemyManager.cs
@@ -14,7 +14,7 @@ public class BaseEnemyManager : MonoBehaviour
     float maxTimeBetweenBullets = 0.6f;
 
     [SerializeField]
-    Vector3 moveDirection = new Vector3(-1, 0, 0);
+    protected Vector3 moveDirection = new Vector3(-1, 0, 0);
     [SerializeField]
     Vector3 shootDirection = new Vector3(-1, 0, 0);
 
@@ -26,7 +26,7 @@ public class BaseEnemyManager : MonoBehaviour
     Renderer renderer;
 
     // Use this for initialization
-    void Start ()
+    protected void Start ()
     {
         if (moveableManager)
         {
@@ -39,11 +39,11 @@ public class BaseEnemyManager : MonoBehaviour
 	}
 	
 	// Update is called once per frame
-	void Update ()
+	protected virtual void Update ()
     {
         moveableManager.Move(moveDirection);
         shooterManager.Shoot(shootDirection);
-        if (Time.time > 0.05f && renderer && !renderer.isVisible)
+        if (transform.position.x < - UtilityMeasures.ScreenWidthInUnits() / 2f - 1f)
         {
             Destroy(this.gameObject);
         }
diff --git a/Assets/Scripts/BaseEnemyManager.cs.meta b/Assets/Scripts/Game/BaseEnemyManager.cs.meta
similarity index 100%
rename from Assets/Scripts/BaseEnemyManager.cs.meta
rename to Assets/Scripts/Game/BaseEnemyManager.cs.meta
diff --git a/Assets/Scripts/Game/BulletFactory.cs b/Assets/Scripts/Game/BulletFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e633e3695df029ddb3aa6d174766f61ad27f6493
--- /dev/null
+++ b/Assets/Scripts/Game/BulletFactory.cs
@@ -0,0 +1,54 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BulletFactory : MonoBehaviour
+{
+    public enum BulletType
+    {
+        playerBullet = 0,
+        enemyBullet = 1
+    }
+
+    [SerializeField]
+    GameObject[] bulletPrefabs = new GameObject[2];
+
+    List<GameObject>[] bulletStock = new List<GameObject>[2];
+
+    private void Start()
+    {
+        bulletStock[0] = new List<GameObject>();
+        bulletStock[1] = new List<GameObject>();
+    }
+
+    public GameObject GetBullet(BulletType bulletType)
+    {
+        GameObject newBullet;
+        if (bulletStock[(int)bulletType].Count == 0)
+        {
+            newBullet = Instantiate(bulletPrefabs[(int)bulletType]);
+            BulletManager bulletManager = newBullet.GetComponent<BulletManager>();
+            if(bulletManager)
+            {
+                bulletManager.bulletFactory = this;
+            }
+        }
+        else
+        {
+            newBullet = bulletStock[(int)bulletType][0];
+            bulletStock[(int)bulletType].RemoveAt(0);
+            newBullet.SetActive(true);
+        }
+        return newBullet;
+    }
+
+    public void Release(GameObject bullet)
+    {
+        bullet.SetActive(false);
+        BulletManager bulletManager = bullet.GetComponent<BulletManager>();
+        if(bulletManager)
+        {
+            bulletStock[(int)bulletManager.bulletType].Add(bullet);
+        }
+    }
+}
diff --git a/Assets/Scripts/Game/BulletFactory.cs.meta b/Assets/Scripts/Game/BulletFactory.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5c5a4e2c2b37bb109730036ef61727c38b4bc2cb
--- /dev/null
+++ b/Assets/Scripts/Game/BulletFactory.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b6d6fa421f8b6af43906f5fccb87d0c6
+timeCreated: 1506681232
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/BulletManager.cs b/Assets/Scripts/Game/BulletManager.cs
similarity index 57%
rename from Assets/Scripts/BulletManager.cs
rename to Assets/Scripts/Game/BulletManager.cs
index c7db861ab4fd026f0b59ef9ad4f8322d03142b05..f42da5a4fbd675175e2730497e7a35fe52dd6363 100644
--- a/Assets/Scripts/BulletManager.cs
+++ b/Assets/Scripts/Game/BulletManager.cs
@@ -7,28 +7,30 @@ public class BulletManager : MonoBehaviour
     [SerializeField]
     private MoveableManager moveableManager;
     [SerializeField]
-    private Renderer renderer;
-    [SerializeField]
     private int damage = 1;
 
+    public BulletFactory bulletFactory;
+
     public Vector3 direction { private get; set; }
-    public bool player { private get; set; }
+    
+    public BulletFactory.BulletType bulletType = BulletFactory.BulletType.enemyBullet;
 
     private void Update()
     {
         moveableManager.Move(direction);
-        if (!renderer.isVisible)
+        if (Mathf.Abs(transform.position.x) > UtilityMeasures.ScreenWidthInUnits() / 2f + 1f)
         {
-            Destroy(this.gameObject);
+            bulletFactory.Release(this.gameObject);
         }
     }
 
     private void OnTriggerEnter2D(Collider2D collision)
     {
         GameObject other = collision.gameObject;
-        if ((player && other.CompareTag("Enemy")) || (!player && other.CompareTag("Player")))
+        if ((bulletType.Equals(BulletFactory.BulletType.playerBullet) && other.CompareTag("Enemy")) ||
+            (bulletType.Equals(BulletFactory.BulletType.enemyBullet) && other.CompareTag("Player")))
         {
-            Destroy(this.gameObject);
+            bulletFactory.Release(this.gameObject);
             HealthManager otherHealthManager = other.GetComponent<HealthManager>();
             if(otherHealthManager)
             {
diff --git a/Assets/Scripts/BulletManager.cs.meta b/Assets/Scripts/Game/BulletManager.cs.meta
similarity index 100%
rename from Assets/Scripts/BulletManager.cs.meta
rename to Assets/Scripts/Game/BulletManager.cs.meta
diff --git a/Assets/Scripts/Game/DashManager.cs b/Assets/Scripts/Game/DashManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e9ac54b74b5cff9462ad213a587b1c67ed31e9a8
--- /dev/null
+++ b/Assets/Scripts/Game/DashManager.cs
@@ -0,0 +1,51 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DashManager : MonoBehaviour
+{
+    [SerializeField]
+    MoveableManager moveableManager;
+
+    [SerializeField]
+    EnergyManager energyManager;
+
+    [SerializeField]
+    float dashFactor = 10;
+
+    [SerializeField]
+    int dashEnergyCost = 2;
+
+    [SerializeField]
+    float dashTime = 0.1f;
+
+    bool isDashing = false;
+    float dashStart = 0;
+    Vector3 dashDirection;
+
+    public void Dash(Vector3 direction)
+    {
+        if(energyManager.SpendEnergy(dashEnergyCost))
+        {
+            dashStart = Time.time;
+            dashDirection = direction;
+            isDashing = true;
+        }
+    }
+	
+	// Update is called once per frame
+	void Update ()
+    {
+        if(isDashing)
+        {
+		    if(Time.time - dashStart < dashTime)
+            {
+                moveableManager.Move(dashFactor * dashDirection);
+            }
+            else
+            {
+                isDashing = !isDashing;
+            }
+        }
+	}
+}
diff --git a/Assets/Scripts/Game/DashManager.cs.meta b/Assets/Scripts/Game/DashManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7c80ce285ef0129e89d4f84bcaad921294b3fe00
--- /dev/null
+++ b/Assets/Scripts/Game/DashManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 74eca0b9f2414e4469264728229df6d9
+timeCreated: 1506504483
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/DeathManager.cs b/Assets/Scripts/Game/DeathManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ccac580b57556f7332fa1d07f1ca47825993f0f5
--- /dev/null
+++ b/Assets/Scripts/Game/DeathManager.cs
@@ -0,0 +1,20 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DeathManager : MonoBehaviour
+{
+    [SerializeField]
+    GameObject explosion;
+
+    virtual public void Die()
+    {
+        GameObject newExplosion = Instantiate(explosion);
+        newExplosion.transform.position = transform.position;
+        Animator explosionAnimator = newExplosion.GetComponent<Animator>();
+        if(explosionAnimator)
+        {
+            explosionAnimator.SetTrigger("Died");
+        }
+    }
+}
diff --git a/Assets/Scripts/Game/DeathManager.cs.meta b/Assets/Scripts/Game/DeathManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..04f992a163263d2c1973291e74db61dd95b19b4d
--- /dev/null
+++ b/Assets/Scripts/Game/DeathManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 67566b2132111154ea7a0a76006b8c08
+timeCreated: 1506676393
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/EnemyGenerator.cs b/Assets/Scripts/Game/EnemyGenerator.cs
similarity index 51%
rename from Assets/Scripts/EnemyGenerator.cs
rename to Assets/Scripts/Game/EnemyGenerator.cs
index 9bcc7f6fd8064b511df41834ce95968de6649c14..df5eb7d19ce07d440b4541a64aeca391b839485b 100644
--- a/Assets/Scripts/EnemyGenerator.cs
+++ b/Assets/Scripts/Game/EnemyGenerator.cs
@@ -6,31 +6,51 @@ public class EnemyGenerator : MonoBehaviour {
 
     [SerializeField]
     GameObject[] enemyPrefabs;
-    [SerializeField]
     float minY = -8;
-    [SerializeField]
     float maxY = 8;
-    [SerializeField]
     float X = 10;
     [SerializeField]
     float timeBetweenEnemies = 0.5f;
     float lastEnemyTime = float.NegativeInfinity;
+    [SerializeField]
+    BulletFactory bulletFactory;
 
 	// Use this for initialization
-	void Start () {
-		
+	void Start ()
+    {
+        X = UtilityMeasures.ScreenWidthInUnits() / 2f + 1f;
+        minY = - UtilityMeasures.ScreenHeightInUnits() / 2f;
+        maxY = - minY;
 	}
+
+    void UpdateSizes()
+    {
+        X = UtilityMeasures.ScreenWidthInUnits() / 2f + 1f;
+        minY = -UtilityMeasures.ScreenHeightInUnits() / 2f;
+        maxY = -minY;
+    }
 	
 	// Update is called once per frame
 	void Update ()
     {
+        UpdateSizes();
         if (enemyPrefabs.Length > 0 && Time.time - lastEnemyTime > timeBetweenEnemies)
         {
-            int selectedEnemy = Random.Range((int)0, (int)enemyPrefabs.Length - 1);
+            int selectedEnemy = Random.Range((int)0, (int)enemyPrefabs.Length);
             float Y = Random.Range(minY, maxY);
             GameObject newEnemy = Instantiate(enemyPrefabs[selectedEnemy]);
+            ShooterManager enemyShooterManager = newEnemy.GetComponent<ShooterManager>();
+            if(enemyShooterManager)
+            {
+                enemyShooterManager.bulletFactory = bulletFactory;
+            }
             newEnemy.transform.position = new Vector3(X, Y, 0);
             lastEnemyTime = Time.time;
+            ZigzagEnemyManager zigzag = newEnemy.GetComponent<ZigzagEnemyManager>();
+            if(zigzag)
+            {
+                zigzag.baseHeight = Y;
+            }
         }
 	}
 }
diff --git a/Assets/Scripts/EnemyGenerator.cs.meta b/Assets/Scripts/Game/EnemyGenerator.cs.meta
similarity index 100%
rename from Assets/Scripts/EnemyGenerator.cs.meta
rename to Assets/Scripts/Game/EnemyGenerator.cs.meta
diff --git a/Assets/Scripts/Game/EnergyManager.cs b/Assets/Scripts/Game/EnergyManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8b35468f5b8a4ba37a0be6771de5829ced52b80e
--- /dev/null
+++ b/Assets/Scripts/Game/EnergyManager.cs
@@ -0,0 +1,64 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EnergyManager : MonoBehaviour {
+
+    [SerializeField]
+    public float maxEnergy = 10;
+    public float currentEnergy;
+    [SerializeField]
+    float energyPerSecond = 1;
+    float energyPerSecondOnceEmpty;
+    bool hasEmptied = false;
+
+    [SerializeField]
+    float cooldownTime = 0.3f;
+    float lastExpenseTime = float.NegativeInfinity;
+
+    private void Start()
+    {
+        currentEnergy = maxEnergy;
+        energyPerSecondOnceEmpty = energyPerSecond * 3f / 4f;
+    }
+
+    public bool SpendEnergy(float expense)
+    {
+        if(expense > currentEnergy || hasEmptied)
+        {
+            return false;
+        }
+        currentEnergy -= expense;
+        if(currentEnergy < 1)
+        {
+            hasEmptied = true;
+        }
+        lastExpenseTime = Time.time;
+        return true;
+    }
+
+    // Update is called once per frame
+    void Update ()
+    {
+		if(currentEnergy < maxEnergy && Time.time - lastExpenseTime > cooldownTime)
+        {
+            if(hasEmptied)
+            {
+                currentEnergy += energyPerSecondOnceEmpty * Time.deltaTime;
+                if(currentEnergy >= maxEnergy)
+                {
+                    hasEmptied = false;
+                }
+            }
+            else
+            {
+                currentEnergy += energyPerSecond * Time.deltaTime;
+            }
+        }
+	}
+
+    public override string ToString()
+    {
+        return currentEnergy + " / " + maxEnergy;
+    }
+}
diff --git a/Assets/Scripts/EnergyManager.cs.meta b/Assets/Scripts/Game/EnergyManager.cs.meta
similarity index 100%
rename from Assets/Scripts/EnergyManager.cs.meta
rename to Assets/Scripts/Game/EnergyManager.cs.meta
diff --git a/Assets/Scripts/Game/EnergySliderManager.cs b/Assets/Scripts/Game/EnergySliderManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..301504781af9762fdca0d52e176fa13f75a4dcaf
--- /dev/null
+++ b/Assets/Scripts/Game/EnergySliderManager.cs
@@ -0,0 +1,24 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EnergySliderManager : MonoBehaviour {
+
+    [SerializeField]
+    UnityEngine.UI.Slider energySlider;
+
+    [SerializeField]
+    EnergyManager energyManager;
+
+    // Use this for initialization
+    void Start()
+    {
+        energySlider.maxValue = energyManager.maxEnergy;
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        energySlider.value = energyManager.currentEnergy;
+    }
+}
diff --git a/Assets/Scripts/Game/EnergySliderManager.cs.meta b/Assets/Scripts/Game/EnergySliderManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f28b7f3be4e840388a14547e22e545198c13de31
--- /dev/null
+++ b/Assets/Scripts/Game/EnergySliderManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c3e93ef788418854fae76bc1b21f2914
+timeCreated: 1506538977
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/ExplosionTimeout.cs b/Assets/Scripts/Game/ExplosionTimeout.cs
new file mode 100644
index 0000000000000000000000000000000000000000..46a5462a745337c11abd84f5bf94522d6ad2606d
--- /dev/null
+++ b/Assets/Scripts/Game/ExplosionTimeout.cs
@@ -0,0 +1,25 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ExplosionTimeout : MonoBehaviour
+{
+    Animator explosionAnimator;
+
+    private void Start()
+    {
+        explosionAnimator = GetComponent<Animator>();
+    }
+
+    private void Update()
+    {
+        
+        if(explosionAnimator)
+        {
+            if(explosionAnimator.GetCurrentAnimatorStateInfo(0).IsName("EndOfExplosion"))
+            {
+                Destroy(this.gameObject);
+            }
+        }
+    }
+}
diff --git a/Assets/Scripts/Game/ExplosionTimeout.cs.meta b/Assets/Scripts/Game/ExplosionTimeout.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a1ac1328b401d9fa4d0469645ea333ff7d5e391c
--- /dev/null
+++ b/Assets/Scripts/Game/ExplosionTimeout.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: afd70be758710dc48bd024f0040dfaf4
+timeCreated: 1506678366
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/HealthAndEnergyPrinter.cs b/Assets/Scripts/Game/HealthAndEnergyPrinter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9afbb990d85537d0ae5342004eaad517c14e79aa
--- /dev/null
+++ b/Assets/Scripts/Game/HealthAndEnergyPrinter.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class HealthAndEnergyPrinter : MonoBehaviour {
+
+    [SerializeField]
+    UnityEngine.UI.Text text;
+    [SerializeField]
+    EnergyManager playerEnergyManager;
+    [SerializeField]
+    HealthManager playerHealthManager;
+	
+	// Update is called once per frame
+	void Update ()
+    {
+        text.text = "Health : " + playerHealthManager + "\nEnergy : " + playerEnergyManager;
+	}
+}
diff --git a/Assets/Scripts/Game/HealthAndEnergyPrinter.cs.meta b/Assets/Scripts/Game/HealthAndEnergyPrinter.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5d1369cf1ec22738a1cd940a5dcd96de0a238ab3
--- /dev/null
+++ b/Assets/Scripts/Game/HealthAndEnergyPrinter.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0635f866c6a120a4b9d4440f20959697
+timeCreated: 1506420527
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/HealthManager.cs b/Assets/Scripts/Game/HealthManager.cs
similarity index 53%
rename from Assets/Scripts/HealthManager.cs
rename to Assets/Scripts/Game/HealthManager.cs
index 26228d03e2a45f91779540c094007bdc92280225..f849941fee31a9b88201036abaa740ef87806056 100644
--- a/Assets/Scripts/HealthManager.cs
+++ b/Assets/Scripts/Game/HealthManager.cs
@@ -4,8 +4,11 @@ using UnityEngine;
 
 public class HealthManager : MonoBehaviour
 {
-    [SerializeField] int maxHealth = 1;
-    int currentHealth;
+    [SerializeField] public int maxHealth = 1;
+    public int currentHealth;
+
+    [SerializeField]
+    DeathManager deathManager;
 
     private void Start()
     {
@@ -17,7 +20,16 @@ public class HealthManager : MonoBehaviour
         currentHealth -= damage;
         if(currentHealth <= 0)
         {
+            if(deathManager)
+            {
+                deathManager.Die();
+            }
             Destroy(this.gameObject);
         }
     }
+
+    public override string ToString()
+    {
+        return currentHealth + " / " + maxHealth;
+    }
 }
diff --git a/Assets/Scripts/HealthManager.cs.meta b/Assets/Scripts/Game/HealthManager.cs.meta
similarity index 100%
rename from Assets/Scripts/HealthManager.cs.meta
rename to Assets/Scripts/Game/HealthManager.cs.meta
diff --git a/Assets/Scripts/Game/HealthSliderManager.cs b/Assets/Scripts/Game/HealthSliderManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3b3783f12f57530dbc4f79623d38a16113bc133d
--- /dev/null
+++ b/Assets/Scripts/Game/HealthSliderManager.cs
@@ -0,0 +1,25 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class HealthSliderManager : MonoBehaviour
+{
+
+    [SerializeField]
+    UnityEngine.UI.Slider healthSlider;
+
+    [SerializeField]
+    HealthManager healthManager;
+
+	// Use this for initialization
+	void Start ()
+    {
+        healthSlider.maxValue = healthManager.maxHealth;
+	}
+	
+	// Update is called once per frame
+	void Update ()
+    {
+        healthSlider.value = healthManager.currentHealth;
+	}
+}
diff --git a/Assets/Scripts/Game/HealthSliderManager.cs.meta b/Assets/Scripts/Game/HealthSliderManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bd42dafe765509af894001c1cd722ad3e9ae2962
--- /dev/null
+++ b/Assets/Scripts/Game/HealthSliderManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 633e0fb79b5ca1d4a84897680854853c
+timeCreated: 1506538655
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/MoveableManager.cs b/Assets/Scripts/Game/MoveableManager.cs
similarity index 100%
rename from Assets/Scripts/MoveableManager.cs
rename to Assets/Scripts/Game/MoveableManager.cs
diff --git a/Assets/Scripts/MoveableManager.cs.meta b/Assets/Scripts/Game/MoveableManager.cs.meta
similarity index 100%
rename from Assets/Scripts/MoveableManager.cs.meta
rename to Assets/Scripts/Game/MoveableManager.cs.meta
diff --git a/Assets/Scripts/Game/PlayerController.cs b/Assets/Scripts/Game/PlayerController.cs
new file mode 100644
index 0000000000000000000000000000000000000000..42abae9557151c371b34ec85b6017bed25081dfe
--- /dev/null
+++ b/Assets/Scripts/Game/PlayerController.cs
@@ -0,0 +1,113 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class PlayerController : MonoBehaviour {
+
+    [SerializeField]
+    private MoveableManager moveableManager;
+
+    [SerializeField]
+    private WeaponryManager weaponryManager;
+
+    [SerializeField]
+    private DashManager dashManager;
+    
+    float movementWidth = 6;
+    float movementLength = 1;
+
+    [SerializeField]
+    Vector3 basePosition = new Vector3(-9, 0, 0);
+
+    [SerializeField]
+    float dashKeyDelay = 0.5f;
+
+    KeyCode lastKey = KeyCode.O;
+    float lastKeyTime = float.NegativeInfinity;
+
+    private void Start()
+    {
+        transform.position = basePosition;
+        UpdateSizes();
+    }
+
+    void UpdateSizes()
+    {
+        movementWidth = UtilityMeasures.ScreenHeightInUnits() / 2f;
+        movementLength = (UtilityMeasures.ScreenWidthInUnits() / 2f) + basePosition.x;
+    }
+
+    // Update is called once per frame
+    void Update ()
+    {
+        UpdateSizes();
+        if (moveableManager)
+        {
+            Vector3 moveDirection = new Vector3(0, 0, 0);
+            if (Input.GetKey(KeyCode.Z) && transform.position.y < basePosition.y + movementWidth)
+            {
+                moveDirection += new Vector3(0, 1, 0);
+                if(Input.GetKeyDown(KeyCode.Z))
+                {
+                    if (lastKey == KeyCode.Z && Time.time - lastKeyTime < dashKeyDelay)
+                    {
+                        dashManager.Dash(new Vector3(0, 1, 0));
+                    }
+                    lastKey = KeyCode.Z;
+                    lastKeyTime = Time.time;
+                }
+            }
+            if (Input.GetKey(KeyCode.S) && transform.position.y > basePosition.y - movementWidth)
+            {
+                moveDirection += new Vector3(0, -1, 0);
+                if (Input.GetKeyDown(KeyCode.S))
+                {
+                    if (lastKey == KeyCode.S && Time.time - lastKeyTime < dashKeyDelay)
+                    {
+                        dashManager.Dash(new Vector3(0, -1, 0));
+                    }
+                    lastKey = KeyCode.S;
+                    lastKeyTime = Time.time;
+                }
+            }
+            if (Input.GetKey(KeyCode.Q) && transform.position.x > basePosition.x - movementLength)
+            {
+                moveDirection += new Vector3(-1, 0, 0);
+                if (Input.GetKeyDown(KeyCode.Q))
+                {
+                    if (lastKey == KeyCode.Q && Time.time - lastKeyTime < dashKeyDelay)
+                    {
+                        dashManager.Dash(new Vector3(-1, 0, 0));
+                    }
+                    lastKey = KeyCode.Q;
+                    lastKeyTime = Time.time;
+                }
+            }
+            if (Input.GetKey(KeyCode.D) && transform.position.x < basePosition.x + movementLength)
+            {
+                moveDirection += new Vector3(1, 0, 0);
+                if (Input.GetKeyDown(KeyCode.D))
+                {
+                    if (lastKey == KeyCode.D && Time.time - lastKeyTime < dashKeyDelay)
+                    {
+                        dashManager.Dash(new Vector3(1, 0, 0));
+                    }
+                    lastKey = KeyCode.D;
+                    lastKeyTime = Time.time;
+                }
+            }
+            moveableManager.Move(moveDirection);
+        }
+        if(weaponryManager)
+        {
+            if (Input.GetKey(KeyCode.Space))
+            {
+                weaponryManager.Shoot();
+            }
+            if (Input.GetKeyDown(KeyCode.Tab))
+            {
+                weaponryManager.SwitchGuns();
+            }
+        }
+    }
+}
diff --git a/Assets/Scripts/PlayerController.cs.meta b/Assets/Scripts/Game/PlayerController.cs.meta
similarity index 100%
rename from Assets/Scripts/PlayerController.cs.meta
rename to Assets/Scripts/Game/PlayerController.cs.meta
diff --git a/Assets/Scripts/Game/PlayerDeathManager.cs b/Assets/Scripts/Game/PlayerDeathManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..feb41a93a406d35427773a92eed6581f198dbcbc
--- /dev/null
+++ b/Assets/Scripts/Game/PlayerDeathManager.cs
@@ -0,0 +1,12 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class PlayerDeathManager : DeathManager
+{
+    public override void Die()
+    {
+        base.Die();
+        UnityEngine.SceneManagement.SceneManager.LoadScene("GameOver");
+    }
+}
diff --git a/Assets/Scripts/Game/PlayerDeathManager.cs.meta b/Assets/Scripts/Game/PlayerDeathManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..88559233cc41390fe8795c268aa3341cb639df46
--- /dev/null
+++ b/Assets/Scripts/Game/PlayerDeathManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 90a715ec1f1e47940897277a4a3bad9f
+timeCreated: 1506691606
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/PlayerShooterManager.cs b/Assets/Scripts/Game/PlayerShooterManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2ff3df1d0a3fbaa4abdd8788b041acb38eabb583
--- /dev/null
+++ b/Assets/Scripts/Game/PlayerShooterManager.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class PlayerShooterManager : ShooterManager
+{
+    [SerializeField]
+    EnergyManager energyManager;
+
+    protected override bool CanShoot()
+    {
+        if(base.CanShoot())
+        {
+            return energyManager.SpendEnergy(1);
+        }
+        else
+        {
+            return false;
+        }
+    }
+}
diff --git a/Assets/Scripts/Game/PlayerShooterManager.cs.meta b/Assets/Scripts/Game/PlayerShooterManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8d2693ec364562c2aff1675109f1e7822fab1138
--- /dev/null
+++ b/Assets/Scripts/Game/PlayerShooterManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 577e577be22a78349a669a3331648dfc
+timeCreated: 1506421796
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/ShooterManager.cs b/Assets/Scripts/Game/ShooterManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..987d0e9b55ae18f26bb971600fc87bada8c673cd
--- /dev/null
+++ b/Assets/Scripts/Game/ShooterManager.cs
@@ -0,0 +1,42 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ShooterManager : MonoBehaviour
+{
+    //[SerializeField]
+    //private GameObject bullet;
+    [SerializeField]
+    public float timeBetweenBullets = 0.5f;
+    private float lastBulletTime = float.NegativeInfinity;
+    public BulletFactory bulletFactory;
+    [SerializeField]
+    protected BulletFactory.BulletType bulletType = BulletFactory.BulletType.enemyBullet;
+
+    protected virtual bool CanShoot()
+    {
+        return Time.time > lastBulletTime + timeBetweenBullets;
+    }
+
+    public bool Shoot(Vector3 shootDirection)
+    {
+        if(CanShoot())
+        {
+            //GameObject newBullet = Instantiate(bullet);
+            if(bulletFactory)
+            {
+                GameObject bullet = bulletFactory.GetBullet(bulletType);
+                BulletManager newBulletManager = bullet.GetComponent<BulletManager>();
+                if (newBulletManager)
+                {
+                    newBulletManager.direction = shootDirection;
+                }
+                bullet.transform.position = transform.position;
+                lastBulletTime = Time.time;
+                return true;
+            }
+            //BulletManager newBulletManager = newBullet.GetComponent<BulletManager>();
+        }
+        return false;
+    }
+}
diff --git a/Assets/Scripts/ShooterManager.cs.meta b/Assets/Scripts/Game/ShooterManager.cs.meta
similarity index 100%
rename from Assets/Scripts/ShooterManager.cs.meta
rename to Assets/Scripts/Game/ShooterManager.cs.meta
diff --git a/Assets/Scripts/Game/UIGunType.cs b/Assets/Scripts/Game/UIGunType.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b0d10df101cc4bf059ac260d88ce38479c41ba59
--- /dev/null
+++ b/Assets/Scripts/Game/UIGunType.cs
@@ -0,0 +1,24 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class UIGunType : MonoBehaviour
+{
+    [SerializeField]
+    WeaponryManager weaponryManager;
+
+    [SerializeField]
+    Sprite[] weaponSprites = new Sprite[3];
+
+    [SerializeField]
+    UnityEngine.UI.Image weaponImage;
+
+    private void Update()
+    {
+        Sprite currentWeaponSprite = weaponSprites[weaponryManager.currentGunSet];
+        if(currentWeaponSprite)
+        {
+            weaponImage.sprite = currentWeaponSprite;
+        }
+    }
+}
diff --git a/Assets/Scripts/Game/UIGunType.cs.meta b/Assets/Scripts/Game/UIGunType.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e58790e9d14701e380e53fa4d02d8c0800c76501
--- /dev/null
+++ b/Assets/Scripts/Game/UIGunType.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c361933492e964c4b9910798ee78e708
+timeCreated: 1506609999
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/UtilityMeasures.cs b/Assets/Scripts/Game/UtilityMeasures.cs
new file mode 100644
index 0000000000000000000000000000000000000000..04ae62521b24c88e7ca0cbe5387bfd666c9dedf5
--- /dev/null
+++ b/Assets/Scripts/Game/UtilityMeasures.cs
@@ -0,0 +1,23 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public static class UtilityMeasures
+{
+    public static float UnitsPerPixel()
+    {
+        var p1 = Camera.main.ScreenToWorldPoint(Vector3.zero);
+        var p2 = Camera.main.ScreenToWorldPoint(Vector3.right);
+        return Vector3.Distance(p1, p2);
+    }
+
+    public static float ScreenHeightInUnits()
+    {
+        return Screen.height * UnitsPerPixel();
+    }
+
+    public static float ScreenWidthInUnits()
+    {
+        return Screen.width * UnitsPerPixel();
+    }
+}
diff --git a/Assets/Scripts/Game/UtilityMeasures.cs.meta b/Assets/Scripts/Game/UtilityMeasures.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..30650167603a57af620e901b9680a34bb7320333
--- /dev/null
+++ b/Assets/Scripts/Game/UtilityMeasures.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c0441f8a36e67f240bf8d7333980f2a2
+timeCreated: 1506583552
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/WeaponryManager.cs b/Assets/Scripts/Game/WeaponryManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..81f05b969ac5c9764b147bb2e1bb8be713a8a13d
--- /dev/null
+++ b/Assets/Scripts/Game/WeaponryManager.cs
@@ -0,0 +1,75 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class WeaponryManager : MonoBehaviour
+{
+    GunSet[] gunSets;
+
+    class GunSet
+    {
+        public Vector3[] directions = new Vector3[1];
+        public int currentDirection = 0;
+    }
+
+    [SerializeField]
+    ShooterManager shooterManager;
+
+    public int currentGunSet { get; private set; }
+
+    private void Start()
+    {
+        gunSets = new GunSet[3];
+        Vector3[] firstSet = new Vector3[1];
+        firstSet[0] = new Vector3(1, 0, 0);
+        Vector3[] secondSet = new Vector3[2];
+        secondSet[0] = new Vector3(Mathf.Cos(Mathf.PI / 4f), Mathf.Sin(Mathf.PI / 4f), 0);
+        secondSet[1] = new Vector3(Mathf.Cos(Mathf.PI / 4f), -Mathf.Sin(Mathf.PI / 4f), 0);
+        Vector3[] thirdSet = new Vector3[8];
+        thirdSet[0] = new Vector3(Mathf.Cos(Mathf.PI / 4f), Mathf.Sin(Mathf.PI / 4f), 0);
+        thirdSet[1] = new Vector3(Mathf.Cos(Mathf.PI / 8f), Mathf.Sin(Mathf.PI / 8f), 0);
+        thirdSet[2] = new Vector3(1, 0, 0);
+        thirdSet[3] = new Vector3(Mathf.Cos(Mathf.PI / 8f), -Mathf.Sin(Mathf.PI / 8f), 0);
+        thirdSet[4] = new Vector3(Mathf.Cos(Mathf.PI / 4f), -Mathf.Sin(Mathf.PI / 4f), 0);
+        thirdSet[5] = new Vector3(Mathf.Cos(Mathf.PI / 8f), -Mathf.Sin(Mathf.PI / 8f), 0);
+        thirdSet[6] = new Vector3(1, 0, 0);
+        thirdSet[7] = new Vector3(Mathf.Cos(Mathf.PI / 8f), Mathf.Sin(Mathf.PI / 8f), 0);
+        gunSets[0] = new GunSet();
+        gunSets[0].directions = firstSet;
+        gunSets[1] = new GunSet();
+        gunSets[1].directions = secondSet;
+        gunSets[2] = new GunSet();
+        gunSets[2].directions = thirdSet;
+        currentGunSet = 0;
+    }
+
+    public void SwitchGuns()
+    {
+        if(currentGunSet < gunSets.Length - 1)
+        {
+            currentGunSet++;
+        }
+        else
+        {
+            currentGunSet = 0;
+        }
+    }
+
+    public void Shoot()
+    {
+        if(shooterManager)
+        {
+            if(shooterManager.Shoot(gunSets[currentGunSet].directions[gunSets[currentGunSet].currentDirection]))
+            {
+                if (gunSets[currentGunSet].currentDirection < gunSets[currentGunSet].directions.Length - 1)
+                {
+                    gunSets[currentGunSet].currentDirection++;
+                }
+                else
+                {
+                    gunSets[currentGunSet].currentDirection = 0;
+                }
+            }
+        }
+    }
+}
diff --git a/Assets/Scripts/Game/WeaponryManager.cs.meta b/Assets/Scripts/Game/WeaponryManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fcc04bd25b32271901930ecaba3d0febf8b9ee75
--- /dev/null
+++ b/Assets/Scripts/Game/WeaponryManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 97953d33281c6ab4a93e1a03b7272f0e
+timeCreated: 1506519785
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Game/ZigzagEnemyManager.cs b/Assets/Scripts/Game/ZigzagEnemyManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ddc7b3a5ff49572073204bb69d705f3f5ac85c07
--- /dev/null
+++ b/Assets/Scripts/Game/ZigzagEnemyManager.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ZigzagEnemyManager : BaseEnemyManager
+{
+    [SerializeField]
+    float zigzagWidth = 1;
+    public float baseHeight { private get; set; }
+	
+	// Update is called once per frame
+	override protected void Update ()
+    {
+		if((moveDirection.y > 0 && transform.position.y > baseHeight + zigzagWidth) ||
+            (moveDirection.y < 0 && transform.position.y < baseHeight - zigzagWidth))
+        {
+            moveDirection = new Vector3(moveDirection.x, -moveDirection.y, moveDirection.z);
+        }
+        base.Update();
+	}
+}
diff --git a/Assets/Scripts/Game/ZigzagEnemyManager.cs.meta b/Assets/Scripts/Game/ZigzagEnemyManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..490e128dc414b065108f95f99f92398d7478004f
--- /dev/null
+++ b/Assets/Scripts/Game/ZigzagEnemyManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 92ee7318480b4b94dba038b82355f538
+timeCreated: 1506432399
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Menus.meta b/Assets/Scripts/Menus.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b325330f611fb36e6f50ad106731db0953ae2868
--- /dev/null
+++ b/Assets/Scripts/Menus.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 9eb007d3cc1ad2c48ac5269c952ebab0
+folderAsset: yes
+timeCreated: 1506587578
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Menus/ContinueButton.cs b/Assets/Scripts/Menus/ContinueButton.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d98f478d8f28ff7750f35bebf3fbfbdabec98bcb
--- /dev/null
+++ b/Assets/Scripts/Menus/ContinueButton.cs
@@ -0,0 +1,11 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ContinueButton : MonoBehaviour
+{
+    public void Continue()
+    {
+        UnityEngine.SceneManagement.SceneManager.LoadScene("BaseMenu");
+    }
+}
diff --git a/Assets/Scripts/Menus/ContinueButton.cs.meta b/Assets/Scripts/Menus/ContinueButton.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7c5ca783f6a2530b4643678472919d59aaa0acaa
--- /dev/null
+++ b/Assets/Scripts/Menus/ContinueButton.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 98dfede33df349a4a8b1dd9e0bfd5388
+timeCreated: 1506691289
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Menus/ExitButton.cs b/Assets/Scripts/Menus/ExitButton.cs
new file mode 100644
index 0000000000000000000000000000000000000000..83f3cb1dd08b5d41d3f412d645090409a4de1730
--- /dev/null
+++ b/Assets/Scripts/Menus/ExitButton.cs
@@ -0,0 +1,11 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ExitButton : MonoBehaviour
+{
+    public void Exit()
+    {
+        Application.Quit();
+    }
+}
diff --git a/Assets/Scripts/Menus/ExitButton.cs.meta b/Assets/Scripts/Menus/ExitButton.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..143089ce909dd1457d4a8bdb92e8c080b37e20e0
--- /dev/null
+++ b/Assets/Scripts/Menus/ExitButton.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2fcde3e3c0dc08142a5be9ed66764e50
+timeCreated: 1506587828
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Menus/PlayButton.cs b/Assets/Scripts/Menus/PlayButton.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7cb0a83d0c26d7e217560e2f4e0223aab8724cb8
--- /dev/null
+++ b/Assets/Scripts/Menus/PlayButton.cs
@@ -0,0 +1,11 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class PlayButton : MonoBehaviour
+{
+    public void Play()
+    {
+        UnityEngine.SceneManagement.SceneManager.LoadScene("BaseScene");
+    }
+}
diff --git a/Assets/Scripts/Menus/PlayButton.cs.meta b/Assets/Scripts/Menus/PlayButton.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1e6bec336879e67c1699d440fc5c3428f430c41c
--- /dev/null
+++ b/Assets/Scripts/Menus/PlayButton.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: bca4410d14d1a3e479146ee82b89b476
+timeCreated: 1506587591
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs
deleted file mode 100644
index 32293b17e747f3f6dad0d14168873ec6944906da..0000000000000000000000000000000000000000
--- a/Assets/Scripts/PlayerController.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class PlayerController : MonoBehaviour {
-
-    [SerializeField]
-    private MoveableManager moveableManager;
-
-    [SerializeField]
-    private ShooterManager shooterManager;
-
-    // Update is called once per frame
-    void Update ()
-    {
-        if(moveableManager)
-        {
-            Vector3 moveDirection = new Vector3(0, 0, 0);
-            if(Input.GetKey(KeyCode.Z))
-            {
-                moveDirection += new Vector3(0, 1, 0);
-            }
-            if(Input.GetKey(KeyCode.S))
-            {
-                moveDirection += new Vector3(0, -1, 0);
-            }
-            if (Input.GetKey(KeyCode.Q))
-            {
-                moveDirection += new Vector3(-1, 0, 0);
-            }
-            if (Input.GetKey(KeyCode.D))
-            {
-                moveDirection += new Vector3(1, 0, 0);
-            }
-            moveableManager.Move(moveDirection);
-        }
-        if(shooterManager)
-        {
-            if(Input.GetKey(KeyCode.Space))
-            {
-                shooterManager.Shoot(new Vector3(1, 0, 0));
-            }
-        }
-    }
-}
diff --git a/Assets/Scripts/ShooterManager.cs b/Assets/Scripts/ShooterManager.cs
deleted file mode 100644
index a30a5b55ae3b57361f69aae33472c545e1515955..0000000000000000000000000000000000000000
--- a/Assets/Scripts/ShooterManager.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class ShooterManager : MonoBehaviour
-{
-    [SerializeField]
-    private GameObject bullet;
-    [SerializeField]
-    public float timeBetweenBullets = 0.5f;
-    [SerializeField]
-    private bool player = false;
-    private float lastBulletTime = float.NegativeInfinity;
-
-    public void Shoot(Vector3 shootDirection)
-    {
-        if(Time.time > lastBulletTime + timeBetweenBullets)
-        {
-            GameObject newBullet = Instantiate(bullet);
-            BulletManager newBulletManager = newBullet.GetComponent<BulletManager>();
-            if (newBulletManager)
-            {
-                newBulletManager.direction = shootDirection;
-                newBulletManager.player = player;
-            }
-            newBullet.transform.position = transform.position;
-            lastBulletTime = Time.time;
-        }
-    }
-}
diff --git a/Assets/Sprites/BarBackground.png b/Assets/Sprites/BarBackground.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d30b34227fda8081370e084acb686b29be7ae61
Binary files /dev/null and b/Assets/Sprites/BarBackground.png differ
diff --git a/Assets/Sprites/BarBackground.png.meta b/Assets/Sprites/BarBackground.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c362befa7a4d92092eefcf6a61047141e7efc895
--- /dev/null
+++ b/Assets/Sprites/BarBackground.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: d862bca6362460c4caea9709371ec030
+timeCreated: 1506611809
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/BasicScreen.png b/Assets/Sprites/BasicScreen.png
new file mode 100644
index 0000000000000000000000000000000000000000..fca403684454fe63cee5eea13b57bbde20794220
Binary files /dev/null and b/Assets/Sprites/BasicScreen.png differ
diff --git a/Assets/Sprites/BasicScreen.png.meta b/Assets/Sprites/BasicScreen.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5d504e3ae3ea59305512529c49a04400b3727513
--- /dev/null
+++ b/Assets/Sprites/BasicScreen.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 268a913e867f5374b929bbbcc9471267
+timeCreated: 1506609292
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/DoubleShot.png b/Assets/Sprites/DoubleShot.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c163747dd31b64642b2cf005a43a7dc6364a26e
Binary files /dev/null and b/Assets/Sprites/DoubleShot.png differ
diff --git a/Assets/Sprites/DoubleShot.png.meta b/Assets/Sprites/DoubleShot.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..34061bcc90dfefcfd7d4cf9f828bab3345aca0de
--- /dev/null
+++ b/Assets/Sprites/DoubleShot.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 101e778518082044b9ce3bfa9b0b839b
+timeCreated: 1506608923
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/EnergySlider.png b/Assets/Sprites/EnergySlider.png
new file mode 100644
index 0000000000000000000000000000000000000000..705973d63cfe2408d52d810cc61d175353ee4a80
Binary files /dev/null and b/Assets/Sprites/EnergySlider.png differ
diff --git a/Assets/Sprites/EnergySlider.png.meta b/Assets/Sprites/EnergySlider.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1cbecfb3c6380b844e32aea1251bf1adfcc18c8e
--- /dev/null
+++ b/Assets/Sprites/EnergySlider.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 459adcc3eb33e80438ec2b2241c5cdbb
+timeCreated: 1506672767
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Explosion.png b/Assets/Sprites/Explosion.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3886761054cf80af13a0793afa818dbf4dd032f
Binary files /dev/null and b/Assets/Sprites/Explosion.png differ
diff --git a/Assets/Sprites/Explosion.png.meta b/Assets/Sprites/Explosion.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..db76cf0750e6db56597b46ef5b94299236b5fa4f
--- /dev/null
+++ b/Assets/Sprites/Explosion.png.meta
@@ -0,0 +1,308 @@
+fileFormatVersion: 2
+guid: 3951a09a17d88344d9821498fd4c0954
+timeCreated: 1506670677
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName:
+    21300000: explosjon3_0
+    21300002: explosjon3_1
+    21300004: explosjon3_2
+    21300006: explosjon3_3
+    21300008: explosjon3_4
+    21300010: explosjon3_5
+    21300012: explosjon3_6
+    21300014: explosjon3_7
+    21300016: explosjon3_8
+    21300018: explosjon3_9
+    21300020: explosjon3_10
+    21300022: explosjon3_11
+    21300024: explosjon3_12
+    21300026: explosjon3_13
+    21300028: explosjon3_14
+    21300030: explosjon3_15
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 2
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  - buildTarget: Standalone
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  - buildTarget: Android
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites:
+    - serializedVersion: 2
+      name: explosjon3_0
+      rect:
+        serializedVersion: 2
+        x: 0
+        y: 384
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_1
+      rect:
+        serializedVersion: 2
+        x: 128
+        y: 384
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_2
+      rect:
+        serializedVersion: 2
+        x: 256
+        y: 384
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_3
+      rect:
+        serializedVersion: 2
+        x: 384
+        y: 384
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_4
+      rect:
+        serializedVersion: 2
+        x: 0
+        y: 256
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_5
+      rect:
+        serializedVersion: 2
+        x: 128
+        y: 256
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_6
+      rect:
+        serializedVersion: 2
+        x: 256
+        y: 256
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_7
+      rect:
+        serializedVersion: 2
+        x: 384
+        y: 256
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_8
+      rect:
+        serializedVersion: 2
+        x: 0
+        y: 128
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_9
+      rect:
+        serializedVersion: 2
+        x: 128
+        y: 128
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_10
+      rect:
+        serializedVersion: 2
+        x: 256
+        y: 128
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_11
+      rect:
+        serializedVersion: 2
+        x: 384
+        y: 128
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_12
+      rect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_13
+      rect:
+        serializedVersion: 2
+        x: 128
+        y: 0
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_14
+      rect:
+        serializedVersion: 2
+        x: 256
+        y: 0
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    - serializedVersion: 2
+      name: explosjon3_15
+      rect:
+        serializedVersion: 2
+        x: 384
+        y: 0
+        width: 128
+        height: 128
+      alignment: 0
+      pivot: {x: 0, y: 0}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      tessellationDetail: 0
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/HealthSlider.png b/Assets/Sprites/HealthSlider.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f02e6a35c898462148c39532288a0c0e8b766d8
Binary files /dev/null and b/Assets/Sprites/HealthSlider.png differ
diff --git a/Assets/Sprites/HealthSlider.png.meta b/Assets/Sprites/HealthSlider.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ad6616f533c1281eb965e3fb06fc75be3501c9b3
--- /dev/null
+++ b/Assets/Sprites/HealthSlider.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 93efaf5df11a1184493ff550b12771d3
+timeCreated: 1506672768
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Night.jpg b/Assets/Sprites/Night.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b24a2c8c971515af20402ea4af72fa1fa9268fea
Binary files /dev/null and b/Assets/Sprites/Night.jpg differ
diff --git a/Assets/Sprites/Night.jpg.meta b/Assets/Sprites/Night.jpg.meta
new file mode 100644
index 0000000000000000000000000000000000000000..269dfd5eaa5677d9190480da743294b1174a29ce
--- /dev/null
+++ b/Assets/Sprites/Night.jpg.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 8c14f13b5bf5e974597069440e6005db
+timeCreated: 1506436453
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Screen.png b/Assets/Sprites/Screen.png
new file mode 100644
index 0000000000000000000000000000000000000000..24b171d35915425c9176129a4f596e1df4aa8f06
Binary files /dev/null and b/Assets/Sprites/Screen.png differ
diff --git a/Assets/Sprites/Screen.png.meta b/Assets/Sprites/Screen.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..14a48985a166df8190cccad760f662359d9da396
--- /dev/null
+++ b/Assets/Sprites/Screen.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: f8150b99b89df5344be6484b7eae8487
+timeCreated: 1506611681
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/SimpleShot.png b/Assets/Sprites/SimpleShot.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad62db3802f57ae5b481d8b4d7adefe67a0a0acd
Binary files /dev/null and b/Assets/Sprites/SimpleShot.png differ
diff --git a/Assets/Sprites/SimpleShot.png.meta b/Assets/Sprites/SimpleShot.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c9c5d6a61ca843fad2d07d947f64b1a36de4c079
--- /dev/null
+++ b/Assets/Sprites/SimpleShot.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 4eb4ca6531de93447afabf16e1d830df
+timeCreated: 1506608924
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/SpiralShot.png b/Assets/Sprites/SpiralShot.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d75893c8c208cbb4d35b4832660277cc1165af1
Binary files /dev/null and b/Assets/Sprites/SpiralShot.png differ
diff --git a/Assets/Sprites/SpiralShot.png.meta b/Assets/Sprites/SpiralShot.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e23c6ebcf8c3f65b97ad5694811b690a1728a3f0
--- /dev/null
+++ b/Assets/Sprites/SpiralShot.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 10b3bb6c71c601646a76e8620512189b
+timeCreated: 1506608923
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/greenSpaceship.png b/Assets/Sprites/greenSpaceship.png
new file mode 100644
index 0000000000000000000000000000000000000000..e66039b59354d62e0c0cd75551b1103c15ca5db3
Binary files /dev/null and b/Assets/Sprites/greenSpaceship.png differ
diff --git a/Assets/Sprites/greenSpaceship.png.meta b/Assets/Sprites/greenSpaceship.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2838532f7d019f721ed1faad2facf4305448ad98
--- /dev/null
+++ b/Assets/Sprites/greenSpaceship.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 311eb42ee0fe30a488535fce30579891
+timeCreated: 1506614032
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/whiteSpaceship.png b/Assets/Sprites/whiteSpaceship.png
new file mode 100644
index 0000000000000000000000000000000000000000..79dcbcb5bd334486a3ab103a1ed10d53d3418513
Binary files /dev/null and b/Assets/Sprites/whiteSpaceship.png differ
diff --git a/Assets/Sprites/whiteSpaceship.png.meta b/Assets/Sprites/whiteSpaceship.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d473b921e281a907f0d32f7398ca7eec5ddbf4f4
--- /dev/null
+++ b/Assets/Sprites/whiteSpaceship.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: eaf485069aed1764ca0bb63cd89eead1
+timeCreated: 1506614032
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..ed53c41c59c6e5117e095961a4b8a8d6534a746f
Binary files /dev/null and b/ProjectSettings/AudioManager.asset differ
diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..737873b285f5416fec39303449bc58539f7777de
Binary files /dev/null and b/ProjectSettings/ClusterInputManager.asset differ
diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..fb91439007262691bed3fce3e5c9db851b12e356
Binary files /dev/null and b/ProjectSettings/DynamicsManager.asset differ
diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..76e521f6b89ddb37c491a02e55d2889c9a59e36a
Binary files /dev/null and b/ProjectSettings/EditorBuildSettings.asset differ
diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..626c342ba7d6da1fbf3439523200836d305de1cc
Binary files /dev/null and b/ProjectSettings/EditorSettings.asset differ
diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..5bbdb35fbe913484fbd86af278a43035139c1c0b
Binary files /dev/null and b/ProjectSettings/GraphicsSettings.asset differ
diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..47a3d0e918f42489647410379bec7a97debc75d4
Binary files /dev/null and b/ProjectSettings/InputManager.asset differ
diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset
new file mode 100644
index 0000000000000000000000000000000000000000..fd9f06a665d51543f235118074c434343c5b7c62
Binary files /dev/null and b/ProjectSettings/NavMeshAreas.asset differ
diff --git a/ProjectSettings/NetworkManager.asset b/ProjectSettings/NetworkManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..fe4422c5ca78ade8c07ec2c361b26929fdf69864
Binary files /dev/null and b/ProjectSettings/NetworkManager.asset differ
diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..59764e6b3ebe1ed90c3ae00b16ed0408fe3ba1eb
Binary files /dev/null and b/ProjectSettings/Physics2DSettings.asset differ
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..ec701203fdc656a3d60805f6fb8b20855058f116
Binary files /dev/null and b/ProjectSettings/ProjectSettings.asset differ
diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt
new file mode 100644
index 0000000000000000000000000000000000000000..66e05aa7862f8f5d4544d233802839bd677eb578
--- /dev/null
+++ b/ProjectSettings/ProjectVersion.txt
@@ -0,0 +1 @@
+m_EditorVersion: 5.5.0f3
diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..3b545db6f24782646cc34c909f531586472a4698
Binary files /dev/null and b/ProjectSettings/QualitySettings.asset differ
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..907a5c5e1ae5b6add2e587c8567dad6d66327234
Binary files /dev/null and b/ProjectSettings/TagManager.asset differ
diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..3327a24512d1277a660fe653a9cfed8d6e2ddf0b
Binary files /dev/null and b/ProjectSettings/TimeManager.asset differ
diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..a94f5c635ea883846d6003300c85ad8563584246
Binary files /dev/null and b/ProjectSettings/UnityConnectSettings.asset differ
diff --git a/Shoot'em up.csproj b/Shoot'em up.csproj
index eb6e061b3cca075c54f8c7cb9a332bf1f1250c50..a4996741293e1fb7f4dc86603facf8bfaa9b4460 100644
--- a/Shoot'em up.csproj	
+++ b/Shoot'em up.csproj	
@@ -75,14 +75,32 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Assets\Scripts\BaseEnemyManager.cs" />
-    <Compile Include="Assets\Scripts\BulletManager.cs" />
-    <Compile Include="Assets\Scripts\EnemyGenerator.cs" />
-    <Compile Include="Assets\Scripts\EnergyManager.cs" />
-    <Compile Include="Assets\Scripts\HealthManager.cs" />
-    <Compile Include="Assets\Scripts\MoveableManager.cs" />
-    <Compile Include="Assets\Scripts\PlayerController.cs" />
-    <Compile Include="Assets\Scripts\ShooterManager.cs" />
+    <Compile Include="Assets\Scripts\Game\BackgroundManager.cs" />
+    <Compile Include="Assets\Scripts\Game\BackgroundScroller.cs" />
+    <Compile Include="Assets\Scripts\Game\BaseEnemyManager.cs" />
+    <Compile Include="Assets\Scripts\Game\BulletFactory.cs" />
+    <Compile Include="Assets\Scripts\Game\BulletManager.cs" />
+    <Compile Include="Assets\Scripts\Game\DashManager.cs" />
+    <Compile Include="Assets\Scripts\Game\DeathManager.cs" />
+    <Compile Include="Assets\Scripts\Game\EnemyGenerator.cs" />
+    <Compile Include="Assets\Scripts\Game\EnergyManager.cs" />
+    <Compile Include="Assets\Scripts\Game\EnergySliderManager.cs" />
+    <Compile Include="Assets\Scripts\Game\ExplosionTimeout.cs" />
+    <Compile Include="Assets\Scripts\Game\HealthAndEnergyPrinter.cs" />
+    <Compile Include="Assets\Scripts\Game\HealthManager.cs" />
+    <Compile Include="Assets\Scripts\Game\HealthSliderManager.cs" />
+    <Compile Include="Assets\Scripts\Game\MoveableManager.cs" />
+    <Compile Include="Assets\Scripts\Game\PlayerController.cs" />
+    <Compile Include="Assets\Scripts\Game\PlayerDeathManager.cs" />
+    <Compile Include="Assets\Scripts\Game\PlayerShooterManager.cs" />
+    <Compile Include="Assets\Scripts\Game\ShooterManager.cs" />
+    <Compile Include="Assets\Scripts\Game\UIGunType.cs" />
+    <Compile Include="Assets\Scripts\Game\UtilityMeasures.cs" />
+    <Compile Include="Assets\Scripts\Game\WeaponryManager.cs" />
+    <Compile Include="Assets\Scripts\Game\ZigzagEnemyManager.cs" />
+    <Compile Include="Assets\Scripts\Menus\ContinueButton.cs" />
+    <Compile Include="Assets\Scripts\Menus\ExitButton.cs" />
+    <Compile Include="Assets\Scripts\Menus\PlayButton.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="GenerateTargetFrameworkMonikerAttribute" />