diff --git a/Assets/Resources/Prefabs/Mobs.meta b/Assets/Resources/Prefabs/Mobs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..94fc82805eadea58c568447d7f6146fdb44f22e2
--- /dev/null
+++ b/Assets/Resources/Prefabs/Mobs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 99247f2431d8d804f9fbb93d5804a600
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Mobs/Dummy.meta b/Assets/Resources/Prefabs/Mobs/Dummy.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f57cd2f10afe6e4ecc3798f0557d99ec1ba7110c
--- /dev/null
+++ b/Assets/Resources/Prefabs/Mobs/Dummy.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: eaa2c1bd313f8484991336c8b7f5f534
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Mobs/Dummy/Dummy.prefab b/Assets/Resources/Prefabs/Mobs/Dummy/Dummy.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..5b4df5b2868d5ccae97680b5237e526fc2fb4ad9
--- /dev/null
+++ b/Assets/Resources/Prefabs/Mobs/Dummy/Dummy.prefab
@@ -0,0 +1,277 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &1626430850021745201
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 42222099870390294}
+  - component: {fileID: 4005595574687960794}
+  - component: {fileID: 8000563134980268694}
+  - component: {fileID: 5575106368289396507}
+  m_Layer: 7
+  m_Name: Dummy
+  m_TagString: Enemy
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &42222099870390294
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1626430850021745201}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -1.59, y: 0, z: 1.93}
+  m_LocalScale: {x: 5, y: 1, z: 5}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 2384853256735062225}
+  - {fileID: 7885174992267022071}
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &4005595574687960794
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1626430850021745201}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 0
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 3
+  m_Size: {x: 0.4, y: 1.5, z: 0.4}
+  m_Center: {x: 0, y: 0.75, z: 0}
+--- !u!54 &8000563134980268694
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1626430850021745201}
+  serializedVersion: 4
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_CenterOfMass: {x: 0, y: 0, z: 0}
+  m_InertiaTensor: {x: 1, y: 1, z: 1}
+  m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ImplicitCom: 1
+  m_ImplicitTensor: 1
+  m_UseGravity: 1
+  m_IsKinematic: 0
+  m_Interpolate: 0
+  m_Constraints: 80
+  m_CollisionDetection: 0
+--- !u!114 &5575106368289396507
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1626430850021745201}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 36e5aa8cb18425941b8dede35c491e0e, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  Id: 
+  knockbackResistance: 1
+  baseSpeed: 0
+  maxHealth: 100000
+  health: 100000
+  baseDamage: 0
+--- !u!1 &7650759306955463222
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7885174992267022071}
+  - component: {fileID: 5248822067544974682}
+  - component: {fileID: 7671431549252728022}
+  m_Layer: 7
+  m_Name: Hitbox
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &7885174992267022071
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7650759306955463222}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0.59, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 42222099870390294}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &5248822067544974682
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7650759306955463222}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 1
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 3
+  m_Size: {x: 0.4, y: 1.5, z: 0.4}
+  m_Center: {x: 0, y: 0.75, z: 0}
+--- !u!114 &7671431549252728022
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7650759306955463222}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d305728f9c09ee84d861e4d2a18c0be0, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  damage: 0
+  knockbackPower: 10
+--- !u!1 &8652275233143689981
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2384853256735062225}
+  - component: {fileID: 2999634125714444267}
+  - component: {fileID: 6034341801195886003}
+  - component: {fileID: 3938199748560579814}
+  m_Layer: 7
+  m_Name: Model
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2384853256735062225
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8652275233143689981}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0.75, z: 0}
+  m_LocalScale: {x: 0.4, y: 1.5, z: 0.4}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 42222099870390294}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &2999634125714444267
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8652275233143689981}
+  m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &6034341801195886003
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8652275233143689981}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!95 &3938199748560579814
+Animator:
+  serializedVersion: 5
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8652275233143689981}
+  m_Enabled: 1
+  m_Avatar: {fileID: 0}
+  m_Controller: {fileID: 0}
+  m_CullingMode: 0
+  m_UpdateMode: 0
+  m_ApplyRootMotion: 0
+  m_LinearVelocityBlending: 0
+  m_StabilizeFeet: 0
+  m_WarningMessage: 
+  m_HasTransformHierarchy: 1
+  m_AllowConstantClipSamplingOptimization: 1
+  m_KeepAnimatorStateOnDisable: 0
+  m_WriteDefaultValuesOnDisable: 0
diff --git a/Assets/Resources/Prefabs/Mobs/Dummy/Dummy.prefab.meta b/Assets/Resources/Prefabs/Mobs/Dummy/Dummy.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..342d57a4de9ff03557d0a6be87bad277af0f1720
--- /dev/null
+++ b/Assets/Resources/Prefabs/Mobs/Dummy/Dummy.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 390863d613c9cc344aa16e3796881ed1
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
index 6f5bf0d10685cfe3b8bd6ca837d79104bc83f9f3..75386b6ac61ec54f45ee08c879b5ca1065adff12 100644
--- a/Assets/Scenes/SampleScene.unity
+++ b/Assets/Scenes/SampleScene.unity
@@ -154,6 +154,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   backButton: 27
   attackButton: 122
+  attackAlternateButton: 120
   interactButton: 120
 --- !u!4 &6125823
 Transform:
@@ -245,7 +246,7 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 117855954}
   serializedVersion: 2
-  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
@@ -352,6 +353,7 @@ Transform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
+  - {fileID: 1374546119}
   - {fileID: 117855957}
   - {fileID: 542408818}
   m_Father: {fileID: 239523007}
@@ -413,107 +415,11 @@ Transform:
   m_Children: []
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &542408817
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 542408818}
-  - component: {fileID: 542408820}
-  - component: {fileID: 542408819}
-  - component: {fileID: 542408821}
-  m_Layer: 7
-  m_Name: Dummy
-  m_TagString: Enemy
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &542408818
+--- !u!4 &542408818 stripped
 Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+  m_PrefabInstance: {fileID: 2621625618582748302}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 542408817}
-  serializedVersion: 2
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: -1.59, y: 0, z: 1.93}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_ConstrainProportionsScale: 0
-  m_Children:
-  - {fileID: 763963990}
-  m_Father: {fileID: 484130345}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!54 &542408819
-Rigidbody:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 542408817}
-  serializedVersion: 4
-  m_Mass: 1
-  m_Drag: 0
-  m_AngularDrag: 0.05
-  m_CenterOfMass: {x: 0, y: 0, z: 0}
-  m_InertiaTensor: {x: 1, y: 1, z: 1}
-  m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_IncludeLayers:
-    serializedVersion: 2
-    m_Bits: 0
-  m_ExcludeLayers:
-    serializedVersion: 2
-    m_Bits: 0
-  m_ImplicitCom: 1
-  m_ImplicitTensor: 1
-  m_UseGravity: 1
-  m_IsKinematic: 0
-  m_Interpolate: 0
-  m_Constraints: 80
-  m_CollisionDetection: 0
---- !u!65 &542408820
-BoxCollider:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 542408817}
-  m_Material: {fileID: 0}
-  m_IncludeLayers:
-    serializedVersion: 2
-    m_Bits: 0
-  m_ExcludeLayers:
-    serializedVersion: 2
-    m_Bits: 0
-  m_LayerOverridePriority: 0
-  m_IsTrigger: 0
-  m_ProvidesContacts: 0
-  m_Enabled: 1
-  serializedVersion: 3
-  m_Size: {x: 0.4, y: 1.5, z: 0.4}
-  m_Center: {x: 0, y: 0.75, z: 0}
---- !u!114 &542408821
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 542408817}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 36e5aa8cb18425941b8dede35c491e0e, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  Id: 
-  knockbackResistance: 1
-  baseSpeed: 0
-  maxHealth: 100000
-  health: 100000
-  baseDamage: 0
 --- !u!1 &675919034
 GameObject:
   m_ObjectHideFlags: 0
@@ -713,180 +619,11 @@ Transform:
   m_Children: []
   m_Father: {fileID: 1098815287}
   m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
---- !u!1 &763963989
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 763963990}
-  - component: {fileID: 763963992}
-  - component: {fileID: 763963991}
-  - component: {fileID: 763963993}
-  m_Layer: 7
-  m_Name: Model
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &763963990
+--- !u!4 &766737620 stripped
 Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 763963989}
-  serializedVersion: 2
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0.75, z: 0}
-  m_LocalScale: {x: 0.4, y: 1.5, z: 0.4}
-  m_ConstrainProportionsScale: 0
-  m_Children: []
-  m_Father: {fileID: 542408818}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!23 &763963991
-MeshRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 763963989}
-  m_Enabled: 1
-  m_CastShadows: 1
-  m_ReceiveShadows: 1
-  m_DynamicOccludee: 1
-  m_StaticShadowCaster: 0
-  m_MotionVectors: 1
-  m_LightProbeUsage: 1
-  m_ReflectionProbeUsage: 1
-  m_RayTracingMode: 2
-  m_RayTraceProcedural: 0
-  m_RenderingLayerMask: 1
-  m_RendererPriority: 0
-  m_Materials:
-  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
-  m_StaticBatchInfo:
-    firstSubMesh: 0
-    subMeshCount: 0
-  m_StaticBatchRoot: {fileID: 0}
-  m_ProbeAnchor: {fileID: 0}
-  m_LightProbeVolumeOverride: {fileID: 0}
-  m_ScaleInLightmap: 1
-  m_ReceiveGI: 1
-  m_PreserveUVs: 0
-  m_IgnoreNormalsForChartDetection: 0
-  m_ImportantGI: 0
-  m_StitchLightmapSeams: 1
-  m_SelectedEditorRenderState: 3
-  m_MinimumChartSize: 4
-  m_AutoUVMaxDistance: 0.5
-  m_AutoUVMaxAngle: 89
-  m_LightmapParameters: {fileID: 0}
-  m_SortingLayerID: 0
-  m_SortingLayer: 0
-  m_SortingOrder: 0
-  m_AdditionalVertexStreams: {fileID: 0}
---- !u!33 &763963992
-MeshFilter:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 763963989}
-  m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
---- !u!95 &763963993
-Animator:
-  serializedVersion: 5
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 763963989}
-  m_Enabled: 1
-  m_Avatar: {fileID: 0}
-  m_Controller: {fileID: 0}
-  m_CullingMode: 0
-  m_UpdateMode: 0
-  m_ApplyRootMotion: 0
-  m_LinearVelocityBlending: 0
-  m_StabilizeFeet: 0
-  m_WarningMessage: 
-  m_HasTransformHierarchy: 1
-  m_AllowConstantClipSamplingOptimization: 1
-  m_KeepAnimatorStateOnDisable: 0
-  m_WriteDefaultValuesOnDisable: 0
---- !u!1 &766737619
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 766737620}
-  - component: {fileID: 766737622}
-  - component: {fileID: 766737621}
-  m_Layer: 0
-  m_Name: TestCollectible
-  m_TagString: Collectible
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &766737620
-Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 766737619}
-  serializedVersion: 2
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: -1.597, y: 0.843, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_ConstrainProportionsScale: 0
-  m_Children:
-  - {fileID: 1792976464}
-  m_Father: {fileID: 2127634081}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &766737621
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 766737619}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 6a318ebd05eb15c4fabf9cbe7355eb41, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  Id: 
-  TimeToLive: 5
---- !u!135 &766737622
-SphereCollider:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+  m_PrefabInstance: {fileID: 2131633842949370138}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 766737619}
-  m_Material: {fileID: 0}
-  m_IncludeLayers:
-    serializedVersion: 2
-    m_Bits: 0
-  m_ExcludeLayers:
-    serializedVersion: 2
-    m_Bits: 0
-  m_LayerOverridePriority: 0
-  m_IsTrigger: 1
-  m_ProvidesContacts: 0
-  m_Enabled: 1
-  serializedVersion: 3
-  m_Radius: 0.5
-  m_Center: {x: 0, y: 0, z: 0}
 --- !u!1 &770593019
 GameObject:
   m_ObjectHideFlags: 0
@@ -1004,9 +741,10 @@ GameObject:
   - component: {fileID: 963194227}
   - component: {fileID: 963194226}
   - component: {fileID: 963194229}
+  - component: {fileID: 963194230}
   m_Layer: 0
   m_Name: MainCamera
-  m_TagString: MainCamera
+  m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
@@ -1078,13 +816,13 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 963194225}
   serializedVersion: 2
-  m_LocalRotation: {x: 0.15573853, y: 0.0017222604, z: 0.00027153606, w: 0.9877968}
-  m_LocalPosition: {x: 0.17, y: 1.52, z: -3.42}
+  m_LocalRotation: {x: 0.08715578, y: 0, z: 0, w: 0.9961947}
+  m_LocalPosition: {x: 0, y: 3, z: -8}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 239523007}
-  m_LocalEulerAnglesHint: {x: 17.919, y: 0.21, z: 0.065}
+  m_LocalEulerAnglesHint: {x: 10, y: 0, z: 0}
 --- !u!114 &963194229
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -1094,12 +832,34 @@ MonoBehaviour:
   m_GameObject: {fileID: 963194225}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: e879762b280218e4ea3042376813400a, type: 3}
+  m_Script: {fileID: 11500000, guid: 7558c354360ba85428bc25c0e0a3d83b, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   target: {fileID: 117855957}
   followingTime: 0.2
-  offset: {x: 0, y: 2.52, z: -3.42}
+  mouseSensitivity: 2
+  mouseTurn: {x: 0, y: 0}
+--- !u!65 &963194230
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 963194225}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 1
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 3
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
 --- !u!4 &1093326602 stripped
 Transform:
   m_CorrespondingSourceObject: {fileID: 8728181779748450929, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
@@ -1137,7 +897,6 @@ Transform:
   m_Children:
   - {fileID: 705507995}
   - {fileID: 770593023}
-  - {fileID: 1374546119}
   m_Father: {fileID: 239523007}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!114 &1098815288
@@ -1164,7 +923,7 @@ GameObject:
   - component: {fileID: 1374546122}
   - component: {fileID: 1374546121}
   - component: {fileID: 1374546120}
-  m_Layer: 0
+  m_Layer: 7
   m_Name: Marker
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -1180,11 +939,11 @@ Transform:
   m_GameObject: {fileID: 1374546118}
   serializedVersion: 2
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 2, y: 1, z: 2}
-  m_LocalScale: {x: 1, y: 2, z: 1}
+  m_LocalPosition: {x: 5, y: 2.5, z: 5}
+  m_LocalScale: {x: 5, y: 5, z: 5}
   m_ConstrainProportionsScale: 0
   m_Children: []
-  m_Father: {fileID: 1098815287}
+  m_Father: {fileID: 484130345}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!65 &1374546120
 BoxCollider:
@@ -1257,89 +1016,6 @@ MeshFilter:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1374546118}
   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
---- !u!1 &1792976463
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 1792976464}
-  - component: {fileID: 1792976466}
-  - component: {fileID: 1792976465}
-  m_Layer: 0
-  m_Name: Model
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &1792976464
-Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1792976463}
-  serializedVersion: 2
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_ConstrainProportionsScale: 0
-  m_Children: []
-  m_Father: {fileID: 766737620}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!23 &1792976465
-MeshRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1792976463}
-  m_Enabled: 1
-  m_CastShadows: 1
-  m_ReceiveShadows: 1
-  m_DynamicOccludee: 1
-  m_StaticShadowCaster: 0
-  m_MotionVectors: 1
-  m_LightProbeUsage: 1
-  m_ReflectionProbeUsage: 1
-  m_RayTracingMode: 2
-  m_RayTraceProcedural: 0
-  m_RenderingLayerMask: 1
-  m_RendererPriority: 0
-  m_Materials:
-  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
-  m_StaticBatchInfo:
-    firstSubMesh: 0
-    subMeshCount: 0
-  m_StaticBatchRoot: {fileID: 0}
-  m_ProbeAnchor: {fileID: 0}
-  m_LightProbeVolumeOverride: {fileID: 0}
-  m_ScaleInLightmap: 1
-  m_ReceiveGI: 1
-  m_PreserveUVs: 0
-  m_IgnoreNormalsForChartDetection: 0
-  m_ImportantGI: 0
-  m_StitchLightmapSeams: 1
-  m_SelectedEditorRenderState: 3
-  m_MinimumChartSize: 4
-  m_AutoUVMaxDistance: 0.5
-  m_AutoUVMaxAngle: 89
-  m_LightmapParameters: {fileID: 0}
-  m_SortingLayerID: 0
-  m_SortingLayer: 0
-  m_SortingOrder: 0
-  m_AdditionalVertexStreams: {fileID: 0}
---- !u!33 &1792976466
-MeshFilter:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1792976463}
-  m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!1 &2127634080
 GameObject:
   m_ObjectHideFlags: 0
@@ -1385,6 +1061,120 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: c051aae39aef0264ba144bc30cbe301e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+--- !u!1001 &2131633842949370138
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 2127634081}
+    m_Modifications:
+    - target: {fileID: 1946870712216142017, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_Name
+      value: TestCollectible
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: -1.597
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0.843
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4380898715013208265, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: c21e0108f08f0d74b92e3576ec7a7ecc, type: 3}
+--- !u!1001 &2621625618582748302
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 484130345}
+    m_Modifications:
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: -1.59
+      objectReference: {fileID: 0}
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 1.93
+      objectReference: {fileID: 0}
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1626430850021745201, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
+      propertyPath: m_Name
+      value: Dummy
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
 --- !u!1001 &4718921866596059802
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -1393,13 +1183,21 @@ PrefabInstance:
     serializedVersion: 3
     m_TransformParent: {fileID: 117855957}
     m_Modifications:
+    - target: {fileID: 2635269686106844091, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
+      propertyPath: fireRange
+      value: 10
+      objectReference: {fileID: 0}
     - target: {fileID: 2635269686106844091, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
       propertyPath: BaseDamage
       value: 10
       objectReference: {fileID: 0}
     - target: {fileID: 2635269686106844091, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
       propertyPath: KnockbackPower
-      value: 200
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 2635269686106844091, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
+      propertyPath: projectileSpeed
+      value: 50
       objectReference: {fileID: 0}
     - target: {fileID: 3608611397487402253, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
       propertyPath: m_Name
diff --git a/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs b/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs
index 0fec18555cc0c0bec80f7f5c8ad1c85c6dfcffc6..5b9556c9eff16e61d41cda5a308e8847fb2eb645 100644
--- a/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs
+++ b/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs
@@ -20,7 +20,6 @@ public class DummyAnimationController : AnimationController{
 
     // Functions
     private void IndicateDamaged(){
-        Debug.Log("Dummy is damaged");
         meshRenderer.material.color = Color.red;
     }
 
diff --git a/Assets/Scripts/Core/Game/Data/GameControls.cs b/Assets/Scripts/Core/Game/Data/GameInput.cs
similarity index 81%
rename from Assets/Scripts/Core/Game/Data/GameControls.cs
rename to Assets/Scripts/Core/Game/Data/GameInput.cs
index 4e7976ef6ba36294ae307cf791ea424dbda06200..37ac6ace1595d500826f7faaeb270761820e3662 100644
--- a/Assets/Scripts/Core/Game/Data/GameControls.cs
+++ b/Assets/Scripts/Core/Game/Data/GameInput.cs
@@ -1,8 +1,8 @@
 using UnityEngine;
 
-public class GameControls : MonoBehaviour {
+public class GameInput : MonoBehaviour {
     // Static instance
-    public static GameControls instance;
+    public static GameInput instance;
 
     // Attributes
     public KeyCode backButton = KeyCode.Escape;
diff --git a/Assets/Scripts/Core/Game/Data/GameControls.cs.meta b/Assets/Scripts/Core/Game/Data/GameInput.cs.meta
similarity index 100%
rename from Assets/Scripts/Core/Game/Data/GameControls.cs.meta
rename to Assets/Scripts/Core/Game/Data/GameInput.cs.meta
diff --git a/Assets/Scripts/Core/Game/GameCameraController.cs b/Assets/Scripts/Core/Game/GameCameraController.cs
index 257868a304877aecd9152f605acc30ade08acfa9..f0f88a82871a77a0441cc6790f0ed86bbe3571d9 100644
--- a/Assets/Scripts/Core/Game/GameCameraController.cs
+++ b/Assets/Scripts/Core/Game/GameCameraController.cs
@@ -7,6 +7,7 @@ public class GameCameraController {
     private Camera activeCamera;
     private CameraBehaviour behaviour;
     private CameraBehaviourType behaviourType;
+    public Transform Orientation => activeCamera.transform;
 
     // Constructor
     public GameCameraController(Camera camera){
@@ -33,6 +34,7 @@ public class GameCameraController {
         behaviour = cameraBehaviourType switch{
             CameraBehaviourType.STATIC => activeCamera.AddComponent<CameraStatic>(),
             CameraBehaviourType.FOLLOW => activeCamera.AddComponent<CameraFollowObject>(),
+            CameraBehaviourType.MOUSE => activeCamera.AddComponent<CameraMouse>(),
             _ => throw new Exception("Invalid cameraBehaviourType set, please refer to enum CameraBehaviourType for valid types")
         };
 
diff --git a/Assets/Scripts/Core/Game/GameController.cs b/Assets/Scripts/Core/Game/GameController.cs
index b65d354e8b71abbae002fa7679286c60b4c97912..7a8863d18aaa0208a81577d58fdec3d06dff01f2 100644
--- a/Assets/Scripts/Core/Game/GameController.cs
+++ b/Assets/Scripts/Core/Game/GameController.cs
@@ -22,7 +22,7 @@ public class GameController : MonoBehaviour {
 
     // Functions
     protected void Update(){
-         if(Input.GetKeyDown(GameControls.instance.backButton)){
+         if(Input.GetKeyDown(GameInput.instance.backButton)){
             stateController.HandleEscape();
          }
     }
diff --git a/Assets/Scripts/Core/Game/GameStateController.cs b/Assets/Scripts/Core/Game/GameStateController.cs
index 2f73522629ddc0c84adce3e1364956898505cc7d..91d3df00da802da5457f22b5507e6c9a82a70b95 100644
--- a/Assets/Scripts/Core/Game/GameStateController.cs
+++ b/Assets/Scripts/Core/Game/GameStateController.cs
@@ -21,7 +21,7 @@ public class GameStateController{
         Debug.Log(string.Format("GameState {0}; Current gamestate is {1}", e.EventType, e.NewGameState));
     }
 
-    public void PushState(GameState gameState){
+    private void SetState(GameState gameState){
         //TODO: Review cutscenes and menu behaviour
         Time.timeScale = gameState switch{
             GameState.PAUSED => 0,
@@ -30,8 +30,19 @@ public class GameStateController{
             GameState.MENU => 0,
             _ => throw new Exception("Invalid gameState pushed to GameStateController, please refer to enum GameState for valid states"),
         };
+        Cursor.lockState = gameState switch {
+            GameState.PAUSED => CursorLockMode.None,
+            GameState.RUNNING => CursorLockMode.Locked,
+            GameState.CUTSCENE => CursorLockMode.Locked,
+            GameState.MENU => CursorLockMode.None,
+            _ => throw new Exception("Invalid gameState pushed to GameStateController, please refer to enum GameState for valid states"),
+        };
+    }
 
+    public void PushState(GameState gameState){
         gameStateStack.Push(gameState);
+        
+        SetState(gameState);
         OnGameStateChange?.Invoke(new GameStateChangeArgs(
             StackChangeEventType.PUSH,
             gameStateStack.Count,
@@ -42,15 +53,8 @@ public class GameStateController{
     public void PopState(){
         gameStateStack.Pop();
         GameState gameState = gameStateStack.Peek();
-        //TODO: Review cutscenes behaviour
-        Time.timeScale = gameState switch{
-            GameState.PAUSED => 0,
-            GameState.RUNNING => 1,
-            GameState.CUTSCENE => 0,
-            GameState.MENU => 0,
-            _ => throw new Exception("Invalid gameState popped to GameStateController, please refer to enum GameState for valid states"),
-        };
-
+        
+        SetState(gameState);
         OnGameStateChange?.Invoke(new GameStateChangeArgs(
             StackChangeEventType.POP,
             gameStateStack.Count,
diff --git a/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeapon.cs b/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeapon.cs
index 97c829e20bd014e7bf6c8f49e6aca5effbd9114f..9fce8365e8eafa5be70c30691bcc426ed4249619 100644
--- a/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeapon.cs
+++ b/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeapon.cs
@@ -31,13 +31,13 @@ public class TestWeapon : WeaponObject{
             knockbackPower: KnockbackPower / 4,
             type: bearerType,
             position: transform.position,
-            rotation: bearer.Rotation,
-            knockbackOrigin: transform.position - (bearer.Front * projectileSpeed),
+            rotation: bearer.Orientation.rotation,
+            knockbackOrigin: transform.position - (bearer.Orientation.forward * projectileSpeed),
             objectName: "TestWeapon Projectile"
         );
         attackProjectile.travelDistance = fireRange;
         attackProjectile.speed = projectileSpeed;
-        attackProjectile.direction = bearer.Front;
+        attackProjectile.direction = bearer.Orientation.forward;
 
         ObjectFactory.DestroyObject(attackProjectile, 1f);
     }
diff --git a/Assets/Scripts/Core/Player/Player.cs b/Assets/Scripts/Core/Player/Player.cs
index 76f4106ed1c18e28ee7748e4e1da7f79266ff2ae..36a2053474903119b531f746aa6b564d5cb4ace0 100644
--- a/Assets/Scripts/Core/Player/Player.cs
+++ b/Assets/Scripts/Core/Player/Player.cs
@@ -21,9 +21,9 @@ public class Player : PlayerEntity {
         Health *= GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].PlayerHealthMultiplier;
         Weapon = GetComponentInChildren<WeaponObject>();
         stateController = new PlayerStateController(this);
+        inputController = new PlayerInputController(this);
         movementController = new PlayerMovementController(this);
         animationController = new PlayerAnimationController(this);
-        inputController = new PlayerInputController(this);
         stats = new PlayerStats(this);
 
         GameController.instance.player = this;
@@ -39,7 +39,8 @@ public class Player : PlayerEntity {
     new void FixedUpdate(){
         base.FixedUpdate();
 
-        stateController.UpdateState();
         movementController.HandleMovement();
+
+        stateController.UpdateState();
     }
 }
diff --git a/Assets/Scripts/Core/Player/PlayerInputController.cs b/Assets/Scripts/Core/Player/PlayerInputController.cs
index 95ed043a66c86373f48c764703ea178b71b5af12..85e9ba176918365e5d7ace6a34204936acf9562b 100644
--- a/Assets/Scripts/Core/Player/PlayerInputController.cs
+++ b/Assets/Scripts/Core/Player/PlayerInputController.cs
@@ -1,3 +1,4 @@
+using System;
 using UnityEngine;
 
 public class PlayerInputController{
@@ -16,23 +17,17 @@ public class PlayerInputController{
         movementInputX = Input.GetAxisRaw("Horizontal");
         movementInputZ = Input.GetAxisRaw("Vertical");
 
-        if(Input.GetKeyDown(GameControls.instance.attackButton)){
-            Debug.Log("Player is attacking");
-
+        if(Input.GetKeyDown(GameInput.instance.attackButton)){
             if(player.Weapon == null) return;
 
             player.Weapon.Attack();
         }
-        else if(Input.GetKeyDown(GameControls.instance.attackAlternateButton)){
-            Debug.Log("Player is attacking (alternate)");
-
+        else if(Input.GetKeyDown(GameInput.instance.attackAlternateButton)){
             if(player.Weapon == null) return;
 
             player.Weapon.AttackAlternate();
         }
-        else if(Input.GetKeyDown(GameControls.instance.interactButton)){
-            Debug.Log("Player is interacting");
-        
+        else if(Input.GetKeyDown(GameInput.instance.interactButton)){
             ObjectManager.instance.LogObjects();
             EntityManager.instance.LogObjects();
         }
diff --git a/Assets/Scripts/Core/Player/PlayerMovementController.cs b/Assets/Scripts/Core/Player/PlayerMovementController.cs
index 58681cee7b9c00f1dd708f7da43f1d63ed18cd2d..474bb0aef3b0d21ac5ccd1c4a22392e187fa36a0 100644
--- a/Assets/Scripts/Core/Player/PlayerMovementController.cs
+++ b/Assets/Scripts/Core/Player/PlayerMovementController.cs
@@ -4,10 +4,14 @@ using UnityEngine;
 public class PlayerMovementController{
     // Attributes
     private readonly Player player;
+    private Vector3 axisX;
+    private Vector3 axisZ;
 
     // Constructor
     public PlayerMovementController(Player player){
         this.player = player;
+        axisX = new(GameController.instance.mainCamera.Orientation.right.x, 0, GameController.instance.mainCamera.Orientation.right.z);
+        axisZ = new(GameController.instance.mainCamera.Orientation.forward.x, 0, GameController.instance.mainCamera.Orientation.forward.z);
     }
 
     // Functions
@@ -18,18 +22,26 @@ public class PlayerMovementController{
         player.transform.rotation = Quaternion.RotateTowards(player.transform.rotation, target, GameConfig.ROTATION_SMOOTHING * Time.deltaTime);
     }
 
+    private void SnapshotCameraOrientation(){
+        axisX = new(GameController.instance.mainCamera.Orientation.right.x, 0, GameController.instance.mainCamera.Orientation.right.z);
+        axisZ = new(GameController.instance.mainCamera.Orientation.forward.x, 0, GameController.instance.mainCamera.Orientation.forward.z);
+    }
+
     public void HandleMovement(){
         float inputX = player.inputController.movementInputX;
         float inputZ = player.inputController.movementInputZ;
+
+        SnapshotCameraOrientation();
+
         Vector3 velocity = new(player.Rigidbody.velocity.x, player.Rigidbody.velocity.y, player.Rigidbody.velocity.z);
         Vector3 dampVelocity = Vector3.zero;
 
-        Vector3 inputVector = new(inputX, 0, inputZ);
-        Vector3 modifierVector = inputVector.normalized * player.stats.MaxSpeed;
+        Vector3 movementVector = inputX * axisX.normalized + inputZ * axisZ.normalized;
+        Vector3 modifierVector = movementVector.normalized * player.stats.MaxSpeed;
         velocity.x = modifierVector.x;
         velocity.z = modifierVector.z;
 
         player.Rigidbody.velocity = Vector3.SmoothDamp(player.Rigidbody.velocity, velocity, ref dampVelocity, GameConfig.MOVEMENT_SMOOTHING);
-        if(inputVector != Vector3.zero) HandleRotation(inputVector);
+        if(movementVector != Vector3.zero) HandleRotation(movementVector);
     }
 }
diff --git a/Assets/Scripts/Core/UI/Camera.meta b/Assets/Scripts/Core/UI/Camera.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ce9b1c75e29a7c56dc8a6e5d78f82ab4d47c5a1a
--- /dev/null
+++ b/Assets/Scripts/Core/UI/Camera.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c22a8619fa4f8f349be6331f8b2a67e9
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Library/CameraBehaviour/CameraFollowObject.cs b/Assets/Scripts/Core/UI/Camera/CameraFollowObject.cs
similarity index 68%
rename from Assets/Scripts/Library/CameraBehaviour/CameraFollowObject.cs
rename to Assets/Scripts/Core/UI/Camera/CameraFollowObject.cs
index b489f0e11158662e022429929a244effcb909937..f056ec00d7b7cbcb721d9cad8c0dca75a10704b8 100644
--- a/Assets/Scripts/Library/CameraBehaviour/CameraFollowObject.cs
+++ b/Assets/Scripts/Core/UI/Camera/CameraFollowObject.cs
@@ -4,11 +4,17 @@ public class CameraFollowObject : CameraBehaviour {
     // Attributes
     public Transform target;
     public float followingTime = CameraConfig.DEFAULT_FOLLOWING_SPEED;
-    public Vector3 offset = CameraConfig.DEFAULT_CAMERA_OFFSET;
-    private Vector3 velocity = Vector3.zero;
+    private Vector3 offset;
+    private Vector3 velocity;
     
+    // Constructor
+    protected void Start(){
+        offset = transform.position - target.position;
+    }
+
     // Functions
     protected void FixedUpdate(){
+        if(GameController.instance.IsPaused) return;
         Vector3 targetPosition = target.position + offset;
         Vector3 newPosition = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, followingTime);
         transform.position = newPosition;
diff --git a/Assets/Scripts/Library/CameraBehaviour/CameraFollowObject.cs.meta b/Assets/Scripts/Core/UI/Camera/CameraFollowObject.cs.meta
similarity index 100%
rename from Assets/Scripts/Library/CameraBehaviour/CameraFollowObject.cs.meta
rename to Assets/Scripts/Core/UI/Camera/CameraFollowObject.cs.meta
diff --git a/Assets/Scripts/Core/UI/Camera/CameraMouse.cs b/Assets/Scripts/Core/UI/Camera/CameraMouse.cs
new file mode 100644
index 0000000000000000000000000000000000000000..35d9bee6e4f02435990ac31f6c5c87b4f2440e09
--- /dev/null
+++ b/Assets/Scripts/Core/UI/Camera/CameraMouse.cs
@@ -0,0 +1,42 @@
+using UnityEngine;
+
+public class CameraMouse : CameraBehaviour {
+    // Attributes
+    public Transform target;
+    public float mouseSensitivity = 1f;
+    public Vector2 mouseTurn;
+    private Quaternion initialRotation;
+    private Vector3 offset;
+    private readonly float maximumVerticalAngle = 80f;
+
+    protected void Start(){
+        offset = transform.position - target.position;
+        Cursor.lockState = CursorLockMode.Locked;
+        initialRotation = transform.rotation;
+    }
+
+    protected void Update(){
+        if(GameController.instance.IsPaused) return;
+        transform.forward = offset.normalized;
+
+        mouseTurn.x += Input.GetAxis("Mouse X");
+        mouseTurn.y += Input.GetAxis("Mouse Y");
+
+        mouseTurn.y = Mathf.Clamp(mouseTurn.y, -maximumVerticalAngle, maximumVerticalAngle);
+
+        Quaternion rotation = initialRotation;
+        rotation = Quaternion.AngleAxis(-mouseTurn.y, Vector3.right) * rotation;
+        rotation = Quaternion.AngleAxis(mouseTurn.x, Vector3.up) * rotation;
+
+        Vector3 newPosition = target.position + rotation * offset;
+
+        bool hit = Physics.Linecast(target.position, newPosition, out RaycastHit hitLocation, 1);
+        if (hit){
+            Debug.Log("Hit Collider: " + hitLocation.collider.gameObject.name);
+            transform.position = hitLocation.point;
+        } else{
+            transform.position = newPosition;
+        }
+        transform.localRotation = rotation;
+    }
+}
diff --git a/Assets/Scripts/Core/UI/Camera/CameraMouse.cs.meta b/Assets/Scripts/Core/UI/Camera/CameraMouse.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f877cf3def515f7028c53927c59cc6c044571dbc
--- /dev/null
+++ b/Assets/Scripts/Core/UI/Camera/CameraMouse.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7558c354360ba85428bc25c0e0a3d83b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Library/CameraBehaviour/CameraStatic.cs b/Assets/Scripts/Core/UI/Camera/CameraStatic.cs
similarity index 100%
rename from Assets/Scripts/Library/CameraBehaviour/CameraStatic.cs
rename to Assets/Scripts/Core/UI/Camera/CameraStatic.cs
diff --git a/Assets/Scripts/Library/CameraBehaviour/CameraStatic.cs.meta b/Assets/Scripts/Core/UI/Camera/CameraStatic.cs.meta
similarity index 100%
rename from Assets/Scripts/Library/CameraBehaviour/CameraStatic.cs.meta
rename to Assets/Scripts/Core/UI/Camera/CameraStatic.cs.meta
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
index cbf16f3451fda326ed5be4f21ee50797b8289ef6..2eb40e63bd434739e32947a78ef6186b2cdd8c47 100644
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
+++ b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
@@ -37,12 +37,12 @@ public class AttackObject : MonoBehaviour, IAttack{
     }
 
     protected bool Hit(Collider otherCollider){
-
         otherCollider.transform.TryGetComponent<IDamageable>(out var damageableObject);
-        if(damageableObject == null) return false;
+        if(damageableObject == null) return true;
+        
+        Debug.Log(string.Format("Hit in hitbox of {0} by {1} with damage of {2}", transform.name, otherCollider.transform.name, Damage));
         
         if(damageableObject.Damageable){
-            Debug.Log(string.Format("Hit in hitbox of {0} by {1} with damage of {2}", transform.name, otherCollider.transform.name, Damage));
             
             damageableObject.InflictDamage(Damage);
             OnDamageEvent?.Invoke();
@@ -52,7 +52,6 @@ public class AttackObject : MonoBehaviour, IAttack{
 
             return true;
         }
-        
         return false;
     }
 }
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/CombatantEntity.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/CombatantEntity.cs
index c67ac244786f762a3703f3719bc8ec2f1a241281..d279af8e045a326979212af0edca5b0eec1a90d4 100644
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/CombatantEntity.cs
+++ b/Assets/Scripts/Library/BaseClasses/EntityObject/CombatantEntity.cs
@@ -15,13 +15,9 @@ public class CombatantEntity : DamageableEntity, IArmed{
         get => weapon; 
         set => weapon = value;
     }
-    Vector3 IArmed.Front => Front;
-    Quaternion IArmed.Rotation => transform.rotation;
-
+    public Transform Orientation => transform;
 
     // TODO: Test then decide whether to destroy/disable previous weapon
-
-
     public void SwapWeapon(WeaponObject newWeapon){
         Weapon = newWeapon;
     }
diff --git a/Assets/Scripts/Library/Enum/CameraBehaviourType.cs b/Assets/Scripts/Library/Enum/CameraBehaviourType.cs
index f8c1d945ab3e72cb6ab4e1a75e01223d2ab1585e..708d015eb5afad73aca4ae1ef536dd4a1f6638cb 100644
--- a/Assets/Scripts/Library/Enum/CameraBehaviourType.cs
+++ b/Assets/Scripts/Library/Enum/CameraBehaviourType.cs
@@ -1,5 +1,6 @@
 public enum CameraBehaviourType{
     NULL,
     STATIC,
-    FOLLOW
+    FOLLOW,
+    MOUSE
 }
diff --git a/Assets/Scripts/Library/Interfaces/IArmed.cs b/Assets/Scripts/Library/Interfaces/IArmed.cs
index 35c5e8ee2cdf469c9e03bf0c67099d0b893185ff..c75a4e51e7a658a84666bd4871813753c4adca43 100644
--- a/Assets/Scripts/Library/Interfaces/IArmed.cs
+++ b/Assets/Scripts/Library/Interfaces/IArmed.cs
@@ -3,6 +3,5 @@ using UnityEngine;
 public interface IArmed{
     public float BaseDamage { get; set; }
     public WeaponObject Weapon { get; set; }
-    public Vector3 Front { get; }
-    public Quaternion Rotation { get; }
+    public Transform Orientation { get; }
 }
diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset
index c521ed2dbf18ad5edc852599bfda9f70618d4950..818c73dd4c8bed7e3227fc6014516f57769ca8ac 100644
--- a/ProjectSettings/DynamicsManager.asset
+++ b/ProjectSettings/DynamicsManager.asset
@@ -18,7 +18,7 @@ PhysicsManager:
   m_ClothInterCollisionDistance: 0
   m_ClothInterCollisionStiffness: 0
   m_ContactsGeneration: 1
-  m_LayerCollisionMatrix: fffcfffffffcfffffffcfffffffffffffffffffffffcfffffffefffffffdffff98fcffff58fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+  m_LayerCollisionMatrix: fffffffffff0fffffff0fffffff8fffffff0fffffff0fffffffefffffff5ffff81f0ffff41f0ffffc1f0ffff49f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   m_SimulationMode: 0
   m_AutoSyncTransforms: 0
   m_ReuseCollisionCallbacks: 1
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
index 2ad472a77b3f6a487bc0a938381884827aefc77f..6cd419fc84e3ae26d9bc9c118724de2bc2a58f0c 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -11,13 +11,14 @@ TagManager:
   - Default
   - TransparentFX
   - Ignore Raycast
-  - 
+  - Camera
   - Water
   - UI
   - Player
   - Enemy
   - PlayerAttack
   - EnemyAttack
+  - EnvironmentAttack
   - Collectible
   - 
   - 
@@ -39,7 +40,6 @@ TagManager:
   - 
   - 
   - 
-  - 
   m_SortingLayers:
   - name: Default
     uniqueID: 0