diff --git a/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs b/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs
index ff78922d6c34590ab574eaedb5b229a9e5b60f27..d3be2c1a5c405f3fd9f5415fda21837c3f90c019 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs
@@ -19,6 +19,7 @@ namespace BigSock {
 		public override ulong Id => 201;
 		public override string Name => "Dodge";
 		public override string Description => "A basic dodge move.";
+		public override string IconName => "item/foureyes";
 
 		public AbilityDodge() {
 			StaminaCost = 10;
diff --git a/MrBigsock/Assets/Code/Core/Abilities/Base/AbilityEntity.cs b/MrBigsock/Assets/Code/Core/Abilities/Base/AbilityEntity.cs
new file mode 100644
index 0000000000000000000000000000000000000000..bdb968d64c3a3d68ccf2e4aa70a71bf5bdc08ff2
--- /dev/null
+++ b/MrBigsock/Assets/Code/Core/Abilities/Base/AbilityEntity.cs
@@ -0,0 +1,52 @@
+using System.Collections;
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+
+namespace BigSock {
+	/*
+		An object representing an ability held by a player.
+	*/
+	public class AbilityEntity {
+
+		// The ability held in this slot.
+		public IAbility Ability { get; }
+
+		// The index of the ability
+		public int Index { get; }
+
+		// The time this ability started charging.
+		public float ChargeStarted { get; set; }
+
+		// The keys bound to this ability.
+		public List<KeyCode> Keys { get; }
+
+
+		// Indicates whether or not the ability is charging.
+		public bool IsCharging => ChargeStarted > 0;
+
+		// The time this ability has been charging.
+		public float ChargeTime => Time.time - ChargeStarted;
+
+		// The percent of maximum time the ability has charged for.
+		public float ChargePercent => (Ability.FireType == FireType.Charge && IsCharging)
+			? Math.Clamp(ChargeTime / Ability.MaxCharge, 0, 1)
+			: 0;
+
+
+		// How far into the cooldown the attack is.
+		public float CooldownPercent 
+			=> (float) Math.Clamp((DateTime.Now - Ability.NextTimeCanUse + Ability.Cooldown) / Ability.Cooldown, 0, 1);
+
+
+		public AbilityEntity(IAbility ability, int index, List<KeyCode> keys = null) {
+			if(ability == null) throw new ArgumentNullException(nameof(ability));
+
+			Ability = ability;
+			Index = index;
+			Keys = keys ?? new List<KeyCode>();
+		}
+	}
+}
diff --git a/MrBigsock/Assets/Code/Core/Abilities/Base/AbilityEntity.cs.meta b/MrBigsock/Assets/Code/Core/Abilities/Base/AbilityEntity.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..96d01f0f6d1c4fb2e82dd40074cb12a77d98d924
--- /dev/null
+++ b/MrBigsock/Assets/Code/Core/Abilities/Base/AbilityEntity.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b5734a7700fbf65438b9e4f94e46e5ce
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/MrBigsock/Assets/Code/Core/Abilities/Base/BaseAbility.cs b/MrBigsock/Assets/Code/Core/Abilities/Base/BaseAbility.cs
index 5a788ea1ddd59ef06c4e8683da2cc229b58804fa..920ec10e80ef0c36aa0b34180e2e311673c2f8cc 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/Base/BaseAbility.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/Base/BaseAbility.cs
@@ -6,6 +6,8 @@ using System.Text;
 using UnityEngine;
 using UnityEngine.InputSystem;
 
+using BigSock.Service;
+
 
 namespace BigSock {
 
@@ -33,6 +35,19 @@ namespace BigSock {
 		*/
 		public abstract ulong Id { get; }
 
+
+		/*
+			The icon of the ability.
+		*/
+		public Sprite Icon => SpriteService.SINGLETON.Get(IconName);
+
+		/*
+			The name of the icon this ability uses.
+				Override this to change what icon the item uses.
+		*/
+		public virtual string IconName { get; } = "item/runningshoes";
+
+
 		/*
 			The next time the ability has cooled down.
 		*/
@@ -98,7 +113,7 @@ namespace BigSock {
 				if(par.ChargeTime < MinCharge) return false;
 
 				// Calculate how much optional charging we did.
-				par.ChargeTimePercent = Math.Clamp(par.ChargeTime - MinCharge / MaxCharge - MinCharge, 0f, 1f);
+				par.ChargeTimePercent = Math.Clamp((par.ChargeTime - MinCharge) / (MaxCharge - MinCharge), 0f, 1f);
 			}
 			
 			// Check that the ability is cooled down.
diff --git a/MrBigsock/Assets/Code/Core/Abilities/Base/IAbility.cs b/MrBigsock/Assets/Code/Core/Abilities/Base/IAbility.cs
index e746fa82e6e644cc5b933e853ca0661da79ec52b..7fa26addb551b8ccd6d48dc4c23e0a2088977e7e 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/Base/IAbility.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/Base/IAbility.cs
@@ -31,6 +31,11 @@ namespace BigSock {
 		*/
 		ulong Id { get; }
 
+		/*
+			The icon of the ability.
+		*/
+		Sprite Icon { get; }
+
 		/*
 			The next time the ability has cooled down.
 		*/
diff --git a/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile1.cs b/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile1.cs
index 505c9dc1032e4e731a18029ac9d725032a682a21..430978b0b024ff230733fb3ef367e980aa41c773 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile1.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile1.cs
@@ -23,6 +23,7 @@ namespace BigSock {
 		public override ulong Id => 101;
 		public override string Name => "Basic Player Projectile Attack";
 		public override string Description => "A basic projectile shooting attack the player has.";
+		public override string IconName => "item/coffee";
 
 		public BasicProjectile1() {
 			AttackStats = new AttackStats{
diff --git a/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile2.cs b/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile2.cs
index cf848b71f4371de4d902db420585a41db95339e8..f24257d46c4f0c0a32f5f4db7e87e44c55d1a5b8 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile2.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile2.cs
@@ -23,6 +23,7 @@ namespace BigSock {
 		public override ulong Id => 104;
 		public override string Name => "Chargeable Player Attack";
 		public override string Description => "A basic projectile shooting attack the player has.";
+		public override string IconName => "item/elixirofspeed";
 
 
 
diff --git a/MrBigsock/Assets/Code/Core/Abilities/BiggerSlowerProjectile.cs b/MrBigsock/Assets/Code/Core/Abilities/BiggerSlowerProjectile.cs
index 0fa01a452d9e7c99bf89110718efa1027d7f549a..1c54514c497c53d12bd7ab1877a14ad50662529e 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/BiggerSlowerProjectile.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/BiggerSlowerProjectile.cs
@@ -20,6 +20,7 @@ namespace BigSock {
 		public override ulong Id => 102;
 		public override string Name => "Big Ball";
 		public override string Description => "It's big and slow, but it packs a punch.";
+		public override string IconName => "item/premature";
 
 		public BiggerSlowerProjectile() {
 			AttackStats = new AttackStats{
diff --git a/MrBigsock/Assets/Code/PlayerController.cs b/MrBigsock/Assets/Code/PlayerController.cs
index 8a5b37fd07d91a2d9d23c1d70307761af7bb36b8..d423498a3763cb56be1333ef956ba4cb8f8b0da5 100644
--- a/MrBigsock/Assets/Code/PlayerController.cs
+++ b/MrBigsock/Assets/Code/PlayerController.cs
@@ -20,6 +20,7 @@ namespace BigSock {
 		public const int SKILL_POINTS_START = 0; // Skill points to start with.
 		public const float XP_SCALE_RATE = 3.0f; // Multiplier for xp gain, helps test system while game is tiny.
 
+		public const int ABILITY_COUNT = 4; // Number of abilities.
 
 		public UtilBar utilBar;
 		
@@ -37,13 +38,25 @@ namespace BigSock {
 
 		bool canMove = true;
 
+		// The UI component for displaying abilities.
+		private AbilityCluster AbilityUI;
 
 
+		// The abilities of the player.
+		private List<AbilityEntity> _abilities = new List<AbilityEntity>();
 
-		protected IAttack _testAttack;
-		protected IAttack _testAttack2;
-		protected IAttack _testAttack3;
-		protected IAbility _dodge;
+		// A list of the keycodes that correspond to each of the player's abilities.
+		private List<List<KeyCode>> _keyMapping = new List<List<KeyCode>> {
+			new List<KeyCode>{KeyCode.Space, KeyCode.Mouse0},
+			new List<KeyCode>{KeyCode.Z},
+			new List<KeyCode>{KeyCode.C},
+			new List<KeyCode>{KeyCode.LeftShift},
+		};
+
+		//protected IAttack _testAttack;
+		//protected IAttack _testAttack2;
+		//protected IAttack _testAttack3;
+		//protected IAbility _dodge;
 
 		public DateTime NextTimeCanAttack { get; private set; } = DateTime.Now;
 
@@ -56,6 +69,24 @@ namespace BigSock {
 			TryPickUpItem(ItemService.SINGLETON.Get(101));
 		}
 
+		/*
+			Updates the list of the user's abilities. 
+		*/
+		protected void SetAbilities(List<IAbility> neo) {
+
+			var res = new List<AbilityEntity>();
+			for(int i = 0; i < neo.Count; ++i) 
+				res.Add(new AbilityEntity(neo[i], i, _keyMapping[i]));
+			
+			_abilities = res;
+
+			// Update the UI to reflect the new abilities.
+			AbilityUI?.SetElements(_abilities.Count);
+			foreach (var ability in _abilities) {
+				AbilityUI.SetAbility(ability.Index, ability);
+			}
+		}
+
 		// Start is called before the first frame update 
 		protected override void Start()
 		{
@@ -69,6 +100,7 @@ namespace BigSock {
 			animator = GetComponent<Animator>();
 			spriteRenderer = GetComponent<SpriteRenderer>();
 
+			AbilityUI = GameObject.Find("AbilityCluster")?.GetComponent<AbilityCluster>();
 
 
 			//!! DEBUG: Add item to player at start to test if it works.
@@ -81,10 +113,20 @@ namespace BigSock {
 			//var tmp = PrefabService.SINGLETON;
 			//var tmp = SpriteService.SINGLETON;
 
-			_testAttack = (IAttack)AbilityService.SINGLETON.Get(104);
-			_testAttack2 = (IAttack)AbilityService.SINGLETON.Get(102);
-			_testAttack3 = (IAttack)AbilityService.SINGLETON.Get(101);
-			_dodge = AbilityService.SINGLETON.Get(201);
+			// Get the abilities and set them up.
+			var aService = AbilityService.SINGLETON;
+			var abilities = new List<IAbility> {
+				aService.Get(104),
+				aService.Get(102),
+				aService.Get(101),
+				aService.Get(201),
+			};
+			SetAbilities(abilities);
+
+			//_testAttack = (IAttack)AbilityService.SINGLETON.Get(104);
+			//_testAttack2 = (IAttack)AbilityService.SINGLETON.Get(102);
+			//_testAttack3 = (IAttack)AbilityService.SINGLETON.Get(101);
+			//_dodge = AbilityService.SINGLETON.Get(201);
 
 			_ = AudioService.SINGLETON;
 			_ = SpriteService.SINGLETON;
@@ -131,44 +173,72 @@ namespace BigSock {
 		}
 
 		// Dictionary that holds start times for charging abilities.
-		Dictionary<KeyCode, float> chargeStarts = new Dictionary<KeyCode, float>();
+		//Dictionary<KeyCode, float> chargeStarts = new Dictionary<KeyCode, float>();
 
 		/*
 			Triggers an ability if it should be.
 				Need to add support for mouse buttons n shiet
 		*/
-		private void CheckAbilityInput(KeyCode key, IAbility ability) {
+		private void CheckAbilityInput(AbilityEntity ability) {
 			var par = GetAbilityParam(Camera.main.ScreenToWorldPoint(Input.mousePosition));
 
-			switch(ability.FireType) {
+			// Check input on each key, stop if one was a success.
+			foreach(var key in ability.Keys)
+				if(CheckAbilityInput(key, ability)) break;
+
+			// Update the UI.
+			AbilityUI?.SetCharge(ability.Index, ability.ChargePercent);
+			AbilityUI?.SetCooldown(ability.Index, 1f - ability.CooldownPercent);
+
+		}
+
+		private bool CheckAbilityInput(KeyCode key, AbilityEntity ability) {
+			var par = GetAbilityParam(Camera.main.ScreenToWorldPoint(Input.mousePosition));
+
+			switch (ability.Ability.FireType) {
 				// Standard: Press to fire.
 				case FireType.Standard:
-					if(Input.GetKeyDown(key)) ability.Use(par);
+					if (Input.GetKeyDown(key)) { 
+						ability.Ability.Use(par);
+						return true;
+					}
 					break;
 				// FullAuto: Keep firing while key is down.
 				case FireType.FullAuto:
-					if(Input.GetKey(key)) ability.Use(par);
+					if (Input.GetKey(key)) {
+						ability.Ability.Use(par);
+						return true;
+					}
 					break;
 				// Charge: Fire when let go.
 				case FireType.Charge:
 					// If pressed down: Store start time.
-					if(Input.GetKeyDown(key)) chargeStarts[key] = Time.time;
+					if(Input.GetKeyDown(key)) {
+						// Only start charging if the ability is ready.
+						if(ability.Ability.Ready) ability.ChargeStarted = Time.time;
+						return true;
+					}
 					// If let go: Activate
 					else if(Input.GetKeyUp(key)) {
-						par.ChargeTime = Time.time - chargeStarts[key];
-						var t = ability.Use(par);
-						if(!t) {
-							if(par.ChargeTime < ability.MinCharge)
-								Debug.Log($"[PlayerController.CheckAbilityInput({key})] {ability.Name} not fired ({par.ChargeTime:N3} < {ability.MinCharge:N3})");
+						if(ability.IsCharging) {
+							par.ChargeTime = ability.ChargeTime;
+							var t = ability.Ability.Use(par);
+							if (!t) {
+								if (par.ChargeTime < ability.Ability.MinCharge)
+									Debug.Log($"[PlayerController.CheckAbilityInput({key})] {ability.Ability.Name} not fired ({par.ChargeTime:N3} < {ability.Ability.MinCharge:N3})");
+							}
+							ability.ChargeStarted = 0f; // Reset charge time when we release the key.
 						}
+						return true;
 					}
 					break;
 				default:
 					break;
 			}
-
+			return false;
 		}
 
+
 		private void Update()
 		{
 			// Regenerate mana & stamina.
@@ -187,14 +257,18 @@ namespace BigSock {
 			//	_testAttack.Use(par);
 			//}
 
+			// Check and update all abilities.
+			foreach(var ability in _abilities) {
+				CheckAbilityInput(ability);
+			}
 			// Check ability 1.
-			CheckAbilityInput(KeyCode.Space, _testAttack);
-			CheckAbilityInput(KeyCode.Mouse0, _testAttack);
+			//CheckAbilityInput(KeyCode.Space, _testAttack);
+			//CheckAbilityInput(KeyCode.Mouse0, _testAttack);
 			// Check ability 2.
-			CheckAbilityInput(KeyCode.Z, _testAttack2);
+			//CheckAbilityInput(KeyCode.Z, _testAttack2);
 			// Check ability 3.
-			CheckAbilityInput(KeyCode.LeftShift, _dodge);
-			CheckAbilityInput(KeyCode.C, _testAttack3);
+			//CheckAbilityInput(KeyCode.LeftShift, _dodge);
+			//CheckAbilityInput(KeyCode.C, _testAttack3);
 
 
 			//if(Input.GetKeyDown(KeyCode.Z)) Debug.Log($"[PlayerController.Update()] Z was pressed.");
@@ -246,6 +320,15 @@ namespace BigSock {
 					var controlScheme = PrefabService.SINGLETON.Instance("UI/ControlScheme", canvas.transform);
 				}
 			}
+
+			/* for testing ui
+			if (Input.GetKeyDown(KeyCode.P))
+			{
+				GameObject abil = GameObject.Find("AbilityCluster");
+				var abilScript = abil.GetComponent<AbilityCluster>();
+				abilScript.ResetElements();
+			}
+			*/
 		}
 
 		/*
diff --git a/MrBigsock/Assets/Code/Services/AudioService.cs b/MrBigsock/Assets/Code/Services/AudioService.cs
index d29f40e20c989a7fb2cada91f247b6907e20c989..8cca7d9ac5c8f869ae06424700195c55bf2be757 100644
--- a/MrBigsock/Assets/Code/Services/AudioService.cs
+++ b/MrBigsock/Assets/Code/Services/AudioService.cs
@@ -54,8 +54,8 @@ namespace BigSock.Service {
 				if(file.Contains(".meta")) continue;
 				var name = _sanitize(file.Replace(".wav", "").Replace(".mp3", "").Replace("Assets\\Resources\\sound\\", ""));
 				AudioClip go = Resources.Load<AudioClip>( file.Replace("Assets\\Resources\\", "").Replace(".wav", "").Replace(".mp3", "") );
-				Debug.Log($"[AudioService._loadItems()] {name}");
-				if(go == null) Debug.Log($"[AudioService._loadItems()] ITEM IS NULL!!! {name}");
+				//Debug.Log($"[AudioService._loadItems()] {name}");
+				//if(go == null) Debug.Log($"[AudioService._loadItems()] ITEM IS NULL!!! {name}");
 				dict[name] = go;
 			}
 			
diff --git a/MrBigsock/Assets/Code/UI/AbilityCluster.cs b/MrBigsock/Assets/Code/UI/AbilityCluster.cs
index 44832dbb266aafa942b8210d3656274a6e44c36f..bda6f286c2bab56cac5f2af0474e2b4685ba0d1d 100644
--- a/MrBigsock/Assets/Code/UI/AbilityCluster.cs
+++ b/MrBigsock/Assets/Code/UI/AbilityCluster.cs
@@ -12,23 +12,38 @@ namespace BigSock.UI
         private List<AbilityElement> abilityList;
 
         public void SetElements(int elementAmount)
-		{
+		{           
+            abilityList = new List<AbilityElement>();
+            ResetElements();
             for (int i = 0; i < elementAmount; ++i)
-			{                
+            {               
                 abilityList.Add(PrefabService.SINGLETON.Instance(ABILITYELEMENT, transform).GetComponent<AbilityElement>());
             }
         }
 
-        public void SetCooldown(int index, float amount) 
+        //Clears all elements in ability cluster.
+		public void ResetElements()
 		{
+            abilityList.Clear();
+            var layout = this.GetComponent<HorizontalLayoutGroup>();
+            for (int i = 0; i < layout.transform.childCount; i++)
+			{
+                Destroy(layout.transform.GetChild(i).gameObject);
+            }                
+        }
+
+		public void SetCooldown(int index, float amount) 
+        {
             abilityList[index].WithCooldown(amount);
-		}
+        }
 
         public void SetCharge(int index, float amount)
         {
             abilityList[index].WithCharge(amount);
         }
-
+        public void SetAbility(int index, AbilityEntity ability) {
+            abilityList[index].WithAbility(ability);
+        }
 
     }
 }
diff --git a/MrBigsock/Assets/Code/UI/AbilityElement.cs b/MrBigsock/Assets/Code/UI/AbilityElement.cs
index 21307ed2c9ed44d88bc3c5a4d486a6e68af46b3d..ff8207e7dd33c0adcd88eaf3f7b507a8bb38470d 100644
--- a/MrBigsock/Assets/Code/UI/AbilityElement.cs
+++ b/MrBigsock/Assets/Code/UI/AbilityElement.cs
@@ -6,39 +6,48 @@ using UnityEngine.UI;
 
 namespace BigSock.UI
 {
-    public class AbilityElement : MonoBehaviour
-    {
-        private Slider chargeSlider, cooldownSlider;
+  public class AbilityElement : MonoBehaviour
+  {
+    private Slider chargeSlider, cooldownSlider;
+    private Image _sprite;
 
-        public AbilityElement WithCharge(float? value = null, float? maxValue = null)
-        {
-            if (value != null) chargeSlider.value = value.Value;
+    public AbilityElement WithCharge(float? value = null, float? maxValue = null)
+    {
+        if (value != null) chargeSlider.value = value.Value;
 
-            if (maxValue != null) chargeSlider.maxValue = maxValue.Value;
-            return this;
-        }
+        if (maxValue != null) chargeSlider.maxValue = maxValue.Value;
+        return this;
+    }
         
-        public AbilityElement WithCooldown(float? value = null, float? maxValue = null)
-        {
-            if (value != null) cooldownSlider.value = value.Value;
+    public AbilityElement WithCooldown(float? value = null, float? maxValue = null)
+    {
+        if (value != null) cooldownSlider.value = value.Value;
 
-            if (maxValue != null) cooldownSlider.maxValue = maxValue.Value;
-            return this;
-        }       
+        if (maxValue != null) cooldownSlider.maxValue = maxValue.Value;
+        return this;
+    }
 
 
+    public AbilityElement WithAbility(AbilityEntity ability) {
+      _sprite ??= transform.Find("Sprite").GetComponent<UnityEngine.UI.Image>();
 
-        // Start is called before the first frame update
-        void Start()
-        {
-            chargeSlider = transform.Find("ChargeSlider").GetComponent<Slider>();
-            cooldownSlider = transform.Find("ReloadSlider").GetComponent<Slider>();
-        }
+      if (_sprite != null)
+          _sprite.overrideSprite = ability.Ability.Icon ?? _sprite.overrideSprite;
+      return this;
+    }
 
-        // Update is called once per frame
-        void Update()
-        {
 
-        }
+    // Start is called before the first frame update
+    void Start() {
+      chargeSlider = transform.Find("ChargeSlider").GetComponent<Slider>();
+      cooldownSlider = transform.Find("ReloadSlider").GetComponent<Slider>();
+      _sprite ??= transform.Find("Sprite").GetComponent<UnityEngine.UI.Image>();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+
+    }
     }
 }
diff --git a/MrBigsock/Assets/Prefabs.meta b/MrBigsock/Assets/Prefabs.meta
deleted file mode 100644
index 0ab87e15b25140d4c949b8dbf2a89cf95889910a..0000000000000000000000000000000000000000
--- a/MrBigsock/Assets/Prefabs.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: bbd84b83cc8d3c6469bd9ac57d8ae37c
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/MrBigsock/Assets/Prefabs/UI.meta b/MrBigsock/Assets/Prefabs/UI.meta
deleted file mode 100644
index 60d1f552a9f25e577139a3e0dde019d92e97f5ec..0000000000000000000000000000000000000000
--- a/MrBigsock/Assets/Prefabs/UI.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 4cc5587ab1cdd184ea4bff920c7f5f71
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/MrBigsock/Assets/Prefabs/MapObjects.meta b/MrBigsock/Assets/Resources/Prefabs/MapObjects.meta
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects.meta
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects.meta
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/Canvas.controller b/MrBigsock/Assets/Resources/Prefabs/MapObjects/Canvas.controller
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/Canvas.controller
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/Canvas.controller
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/Canvas.controller.meta b/MrBigsock/Assets/Resources/Prefabs/MapObjects/Canvas.controller.meta
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/Canvas.controller.meta
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/Canvas.controller.meta
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/ClosedChest.controller b/MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedChest.controller
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/ClosedChest.controller
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedChest.controller
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/ClosedChest.controller.meta b/MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedChest.controller.meta
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/ClosedChest.controller.meta
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedChest.controller.meta
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/ClosedChest.prefab b/MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedChest.prefab
similarity index 99%
rename from MrBigsock/Assets/Prefabs/MapObjects/ClosedChest.prefab
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedChest.prefab
index 273c687c80ae7a78c3f5739ac35259042aef0091..29f16eade20fc8fe6c7c517da7c15c17a514bcb9 100644
--- a/MrBigsock/Assets/Prefabs/MapObjects/ClosedChest.prefab
+++ b/MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedChest.prefab
@@ -15,7 +15,7 @@ GameObject:
   - component: {fileID: 532417261}
   m_Layer: 11
   m_Name: ClosedChest
-  m_TagString: Untagged
+  m_TagString: Chest
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/ClosedChest.prefab.meta b/MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedChest.prefab.meta
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/ClosedChest.prefab.meta
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedChest.prefab.meta
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/ClosedDoor.controller b/MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedDoor.controller
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/ClosedDoor.controller
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedDoor.controller
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/ClosedDoor.controller.meta b/MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedDoor.controller.meta
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/ClosedDoor.controller.meta
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedDoor.controller.meta
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/ClosedDoor.prefab b/MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedDoor.prefab
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/ClosedDoor.prefab
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedDoor.prefab
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/ClosedDoor.prefab.meta b/MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedDoor.prefab.meta
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/ClosedDoor.prefab.meta
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/ClosedDoor.prefab.meta
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/OpenDoor.prefab b/MrBigsock/Assets/Resources/Prefabs/MapObjects/OpenDoor.prefab
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/OpenDoor.prefab
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/OpenDoor.prefab
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/OpenDoor.prefab.meta b/MrBigsock/Assets/Resources/Prefabs/MapObjects/OpenDoor.prefab.meta
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/OpenDoor.prefab.meta
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/OpenDoor.prefab.meta
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/OpeningGoldChest.anim b/MrBigsock/Assets/Resources/Prefabs/MapObjects/OpeningGoldChest.anim
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/OpeningGoldChest.anim
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/OpeningGoldChest.anim
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/OpeningGoldChest.anim.meta b/MrBigsock/Assets/Resources/Prefabs/MapObjects/OpeningGoldChest.anim.meta
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/OpeningGoldChest.anim.meta
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/OpeningGoldChest.anim.meta
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/Stairs.prefab b/MrBigsock/Assets/Resources/Prefabs/MapObjects/Stairs.prefab
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/Stairs.prefab
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/Stairs.prefab
diff --git a/MrBigsock/Assets/Prefabs/MapObjects/Stairs.prefab.meta b/MrBigsock/Assets/Resources/Prefabs/MapObjects/Stairs.prefab.meta
similarity index 100%
rename from MrBigsock/Assets/Prefabs/MapObjects/Stairs.prefab.meta
rename to MrBigsock/Assets/Resources/Prefabs/MapObjects/Stairs.prefab.meta
diff --git a/MrBigsock/Packages/packages-lock.json b/MrBigsock/Packages/packages-lock.json
index 3b65785c3697f050801235ccaf41b888ce87c1c2..f7cc484331365fb2a4ab7d290d8a31b242212a26 100644
--- a/MrBigsock/Packages/packages-lock.json
+++ b/MrBigsock/Packages/packages-lock.json
@@ -1,11 +1,11 @@
 {
   "dependencies": {
     "com.unity.2d.animation": {
-      "version": "7.0.6",
+      "version": "7.0.7",
       "depth": 1,
       "source": "registry",
       "dependencies": {
-        "com.unity.2d.common": "6.0.3",
+        "com.unity.2d.common": "6.0.4",
         "com.unity.2d.sprite": "1.0.0",
         "com.unity.modules.animation": "1.0.0",
         "com.unity.modules.uielements": "1.0.0"
@@ -13,7 +13,7 @@
       "url": "https://packages.unity.com"
     },
     "com.unity.2d.common": {
-      "version": "6.0.3",
+      "version": "6.0.4",
       "depth": 2,
       "source": "registry",
       "dependencies": {
@@ -39,12 +39,12 @@
       "url": "https://packages.unity.com"
     },
     "com.unity.2d.psdimporter": {
-      "version": "6.0.4",
+      "version": "6.0.5",
       "depth": 1,
       "source": "registry",
       "dependencies": {
-        "com.unity.2d.animation": "7.0.6",
-        "com.unity.2d.common": "6.0.3",
+        "com.unity.2d.animation": "7.0.7",
+        "com.unity.2d.common": "6.0.4",
         "com.unity.2d.sprite": "1.0.0"
       },
       "url": "https://packages.unity.com"
@@ -56,12 +56,12 @@
       "dependencies": {}
     },
     "com.unity.2d.spriteshape": {
-      "version": "7.0.5",
+      "version": "7.0.6",
       "depth": 1,
       "source": "registry",
       "dependencies": {
         "com.unity.mathematics": "1.1.0",
-        "com.unity.2d.common": "6.0.3",
+        "com.unity.2d.common": "6.0.4",
         "com.unity.2d.path": "5.0.2",
         "com.unity.modules.physics2d": "1.0.0"
       },
@@ -123,11 +123,11 @@
       "depth": 0,
       "source": "builtin",
       "dependencies": {
-        "com.unity.2d.animation": "7.0.6",
+        "com.unity.2d.animation": "7.0.7",
         "com.unity.2d.pixel-perfect": "5.0.1",
-        "com.unity.2d.psdimporter": "6.0.4",
+        "com.unity.2d.psdimporter": "6.0.5",
         "com.unity.2d.sprite": "1.0.0",
-        "com.unity.2d.spriteshape": "7.0.5",
+        "com.unity.2d.spriteshape": "7.0.6",
         "com.unity.2d.tilemap": "1.0.0",
         "com.unity.2d.tilemap.extras": "2.2.3"
       }
diff --git a/MrBigsock/ProjectSettings/ProjectVersion.txt b/MrBigsock/ProjectSettings/ProjectVersion.txt
index 8d9054dca680f2c8f949df23f6ccb8d193bf45ce..1f883d75385d4bf80018ea64aea70244cee1cbf4 100644
--- a/MrBigsock/ProjectSettings/ProjectVersion.txt
+++ b/MrBigsock/ProjectSettings/ProjectVersion.txt
@@ -1,2 +1,2 @@
-m_EditorVersion: 2021.3.9f1
-m_EditorVersionWithRevision: 2021.3.9f1 (ad3870b89536)
+m_EditorVersion: 2021.3.10f1
+m_EditorVersionWithRevision: 2021.3.10f1 (1c7d0df0160b)