diff --git a/Assets/Models/Basic/Animations/Basic.controller b/Assets/Models/Basic/Animations/Basic.controller
index ad18fd02355d9f260b8f8eaa847a5e1b2571c0e2..b7c2463ff752b87904cc6483847d88bf36b06120 100644
--- a/Assets/Models/Basic/Animations/Basic.controller
+++ b/Assets/Models/Basic/Animations/Basic.controller
@@ -79,19 +79,19 @@ AnimatorController:
   m_Name: Basic
   serializedVersion: 5
   m_AnimatorParameters:
-  - m_Name: walk_param
+  - m_Name: Walk_param
     m_Type: 9
     m_DefaultFloat: 0
     m_DefaultInt: 0
     m_DefaultBool: 0
     m_Controller: {fileID: 0}
-  - m_Name: idle_param
+  - m_Name: Idle_param
     m_Type: 9
     m_DefaultFloat: 0
     m_DefaultInt: 0
     m_DefaultBool: 0
     m_Controller: {fileID: 0}
-  - m_Name: sprint_param
+  - m_Name: Sprint_param
     m_Type: 9
     m_DefaultFloat: 0
     m_DefaultInt: 0
@@ -119,7 +119,7 @@ AnimatorStateTransition:
   m_Name: 
   m_Conditions:
   - m_ConditionMode: 1
-    m_ConditionEvent: sprint_param
+    m_ConditionEvent: Sprint_param
     m_EventTreshold: 0
   m_DstStateMachine: {fileID: 0}
   m_DstState: {fileID: 216794943233935662}
@@ -194,7 +194,7 @@ AnimatorStateTransition:
   m_Name: 
   m_Conditions:
   - m_ConditionMode: 1
-    m_ConditionEvent: walk_param
+    m_ConditionEvent: Walk_param
     m_EventTreshold: 0
   m_DstStateMachine: {fileID: 0}
   m_DstState: {fileID: 5134214328135974500}
@@ -219,7 +219,7 @@ AnimatorStateTransition:
   m_Name: 
   m_Conditions:
   - m_ConditionMode: 1
-    m_ConditionEvent: walk_param
+    m_ConditionEvent: Walk_param
     m_EventTreshold: 0
   m_DstStateMachine: {fileID: 0}
   m_DstState: {fileID: 5134214328135974500}
@@ -376,7 +376,7 @@ AnimatorStateTransition:
   m_Name: 
   m_Conditions:
   - m_ConditionMode: 1
-    m_ConditionEvent: idle_param
+    m_ConditionEvent: Idle_param
     m_EventTreshold: 0
   m_DstStateMachine: {fileID: 0}
   m_DstState: {fileID: 7334495444875549740}
diff --git a/Assets/Resources/Prefabs/Collectibles/TestCollectible.meta b/Assets/Resources/Prefabs/Collectibles/TestCollectible.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a0288b265af5956c40ed4ec3a8f5f2010e7c41a1
--- /dev/null
+++ b/Assets/Resources/Prefabs/Collectibles/TestCollectible.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1426de7d01c8ca341848b04b939bd9ff
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Collectibles/TestCollectible/Animations.meta b/Assets/Resources/Prefabs/Collectibles/TestCollectible/Animations.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d61897b60d89044d23ab9b2dbd24c0c7e6d303fc
--- /dev/null
+++ b/Assets/Resources/Prefabs/Collectibles/TestCollectible/Animations.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ac05b56fa5d08a5429b7e3a35146dd45
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Collectibles/TestCollectible.prefab b/Assets/Resources/Prefabs/Collectibles/TestCollectible/TestCollectible.prefab
similarity index 100%
rename from Assets/Resources/Prefabs/Collectibles/TestCollectible.prefab
rename to Assets/Resources/Prefabs/Collectibles/TestCollectible/TestCollectible.prefab
diff --git a/Assets/Resources/Prefabs/Collectibles/TestCollectible.prefab.meta b/Assets/Resources/Prefabs/Collectibles/TestCollectible/TestCollectible.prefab.meta
similarity index 100%
rename from Assets/Resources/Prefabs/Collectibles/TestCollectible.prefab.meta
rename to Assets/Resources/Prefabs/Collectibles/TestCollectible/TestCollectible.prefab.meta
diff --git a/Assets/Resources/Prefabs/Environment.meta b/Assets/Resources/Prefabs/Environment.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b4109c108e5dba97c90aa5becb3b7e686be7118d
--- /dev/null
+++ b/Assets/Resources/Prefabs/Environment.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 205b6225969da8e4bae4c81ef593baa4
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Environment/TestInteractable.meta b/Assets/Resources/Prefabs/Environment/TestInteractable.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a369b9b0588335d196f03b84072a36447923c9a6
--- /dev/null
+++ b/Assets/Resources/Prefabs/Environment/TestInteractable.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cdceda7f1e218c84e9fa621940e3ce18
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Environment/TestInteractable/TestInteractable.prefab b/Assets/Resources/Prefabs/Environment/TestInteractable/TestInteractable.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..19478644b37acb9a71cc9d7a8042cf8921205731
--- /dev/null
+++ b/Assets/Resources/Prefabs/Environment/TestInteractable/TestInteractable.prefab
@@ -0,0 +1,196 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &5938789937870366390
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8784878119171665620}
+  - component: {fileID: 7833412508114504922}
+  - component: {fileID: 7910034603869321074}
+  - component: {fileID: 7395825880064783078}
+  - component: {fileID: 6685900256318991376}
+  m_Layer: 0
+  m_Name: Model
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &8784878119171665620
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5938789937870366390}
+  serializedVersion: 2
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0.5, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 3345887698500519422}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &7833412508114504922
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5938789937870366390}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &7910034603869321074
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5938789937870366390}
+  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!65 &7395825880064783078
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5938789937870366390}
+  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: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!95 &6685900256318991376
+Animator:
+  serializedVersion: 5
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5938789937870366390}
+  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 &7848228299116585289
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3345887698500519422}
+  - component: {fileID: 6285618725572213290}
+  - component: {fileID: 8838369842862591701}
+  m_Layer: 12
+  m_Name: TestInteractable
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &3345887698500519422
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7848228299116585289}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 3, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8784878119171665620}
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &6285618725572213290
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7848228299116585289}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: afc0fd7c16afe4a42a82353df9b3a73b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!65 &8838369842862591701
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7848228299116585289}
+  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: -1, y: 0.5, z: 0}
diff --git a/Assets/Resources/Prefabs/Environment/TestInteractable/TestInteractable.prefab.meta b/Assets/Resources/Prefabs/Environment/TestInteractable/TestInteractable.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..39a6435b5b572f1472ea5de6d00cf62539c678df
--- /dev/null
+++ b/Assets/Resources/Prefabs/Environment/TestInteractable/TestInteractable.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c98b222ded23bb24690e674886e5741a
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations.meta b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e4aaff731b7760af323d8ebc10326b77a4ab3d39
--- /dev/null
+++ b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5293e747addf9b24d988dcb3f1152a20
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAnimator.controller b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAnimator.controller
new file mode 100644
index 0000000000000000000000000000000000000000..1d53dd5d7d1483fd246adce4a112baeb8cc03292
--- /dev/null
+++ b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAnimator.controller
@@ -0,0 +1,156 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1107 &-7269437133143438300
+AnimatorStateMachine:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Base Layer
+  m_ChildStates:
+  - serializedVersion: 1
+    m_State: {fileID: -3107778627061189562}
+    m_Position: {x: 310, y: 120, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: -4939630507117564808}
+    m_Position: {x: 310, y: 0, z: 0}
+  m_ChildStateMachines: []
+  m_AnyStateTransitions: []
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 50, y: 20, z: 0}
+  m_EntryPosition: {x: 50, y: 120, z: 0}
+  m_ExitPosition: {x: 800, y: 120, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: -3107778627061189562}
+--- !u!1102 &-4939630507117564808
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: TestWeaponAttack
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 7779578295501471183}
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 7400000, guid: 995f4cb0103324743949d5c430b427d4, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1102 &-3107778627061189562
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: TestWeaponIdle
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 1543260411605107280}
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 7400000, guid: d70a28206dd239b4c9cdb5df7eb4dc15, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!91 &9100000
+AnimatorController:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: TestWeaponAnimator
+  serializedVersion: 5
+  m_AnimatorParameters:
+  - m_Name: AlternateAttack_param
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 0}
+  m_AnimatorLayers:
+  - serializedVersion: 5
+    m_Name: Base Layer
+    m_StateMachine: {fileID: -7269437133143438300}
+    m_Mask: {fileID: 0}
+    m_Motions: []
+    m_Behaviours: []
+    m_BlendingMode: 0
+    m_SyncedLayerIndex: -1
+    m_DefaultWeight: 0
+    m_IKPass: 0
+    m_SyncedLayerAffectsTiming: 0
+    m_Controller: {fileID: 9100000}
+--- !u!1101 &1543260411605107280
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: AlternateAttack_param
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -4939630507117564808}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &7779578295501471183
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions: []
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -3107778627061189562}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
diff --git a/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAnimator.controller.meta b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAnimator.controller.meta
new file mode 100644
index 0000000000000000000000000000000000000000..52aa2266202aa11723ac70addb8f7d075e09cfd3
--- /dev/null
+++ b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAnimator.controller.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 240e48418e1611c46a18fa4fd9cbe79f
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 9100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAttack.anim b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAttack.anim
new file mode 100644
index 0000000000000000000000000000000000000000..f0cc5c1997b22b09f6df42898ffd5335a3a13c15
--- /dev/null
+++ b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAttack.anim
@@ -0,0 +1,409 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: TestWeaponAttack
+  serializedVersion: 7
+  m_Legacy: 0
+  m_Compressed: 0
+  m_UseHighQualityCurve: 1
+  m_RotationCurves: []
+  m_CompressedRotationCurves: []
+  m_EulerCurves:
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: {x: 0, y: 0, z: 0}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+      - serializedVersion: 3
+        time: 0.5
+        value: {x: 0, y: -60, z: 0}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+      - serializedVersion: 3
+        time: 1
+        value: {x: 0, y: 0, z: 0}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    path: 
+  m_PositionCurves:
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: {x: 0, y: 0, z: 0}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+      - serializedVersion: 3
+        time: 0.5
+        value: {x: 0, y: 0, z: 0.5}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+      - serializedVersion: 3
+        time: 1
+        value: {x: 0, y: 0, z: 0}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    path: 
+  m_ScaleCurves: []
+  m_FloatCurves: []
+  m_PPtrCurves: []
+  m_SampleRate: 60
+  m_WrapMode: 0
+  m_Bounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 0, y: 0, z: 0}
+  m_ClipBindingConstant:
+    genericBindings:
+    - serializedVersion: 2
+      path: 0
+      attribute: 1
+      script: {fileID: 0}
+      typeID: 4
+      customType: 0
+      isPPtrCurve: 0
+      isIntCurve: 0
+      isSerializeReferenceCurve: 0
+    - serializedVersion: 2
+      path: 0
+      attribute: 4
+      script: {fileID: 0}
+      typeID: 4
+      customType: 4
+      isPPtrCurve: 0
+      isIntCurve: 0
+      isSerializeReferenceCurve: 0
+    pptrCurveMapping: []
+  m_AnimationClipSettings:
+    serializedVersion: 2
+    m_AdditiveReferencePoseClip: {fileID: 0}
+    m_AdditiveReferencePoseTime: 0
+    m_StartTime: 0
+    m_StopTime: 1
+    m_OrientationOffsetY: 0
+    m_Level: 0
+    m_CycleOffset: 0
+    m_HasAdditiveReferencePose: 0
+    m_LoopTime: 0
+    m_LoopBlend: 0
+    m_LoopBlendOrientation: 0
+    m_LoopBlendPositionY: 0
+    m_LoopBlendPositionXZ: 0
+    m_KeepOriginalOrientation: 0
+    m_KeepOriginalPositionY: 1
+    m_KeepOriginalPositionXZ: 0
+    m_HeightFromFeet: 0
+    m_Mirror: 0
+  m_EditorCurves:
+  - serializedVersion: 2
+    curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 0.5
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 1
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.x
+    path: 
+    classID: 4
+    script: {fileID: 0}
+    flags: 0
+  - serializedVersion: 2
+    curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 0.5
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 1
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.y
+    path: 
+    classID: 4
+    script: {fileID: 0}
+    flags: 0
+  - serializedVersion: 2
+    curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 0.5
+        value: 0.5
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 1
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.z
+    path: 
+    classID: 4
+    script: {fileID: 0}
+    flags: 0
+  - serializedVersion: 2
+    curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 0.5
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 1
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: localEulerAnglesRaw.x
+    path: 
+    classID: 4
+    script: {fileID: 0}
+    flags: 0
+  - serializedVersion: 2
+    curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 0.5
+        value: -60
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 1
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: localEulerAnglesRaw.y
+    path: 
+    classID: 4
+    script: {fileID: 0}
+    flags: 0
+  - serializedVersion: 2
+    curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 0.5
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 1
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: localEulerAnglesRaw.z
+    path: 
+    classID: 4
+    script: {fileID: 0}
+    flags: 0
+  m_EulerEditorCurves:
+  - serializedVersion: 2
+    curve:
+      serializedVersion: 2
+      m_Curve: []
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalEulerAngles.x
+    path: 
+    classID: 4
+    script: {fileID: 0}
+    flags: 0
+  - serializedVersion: 2
+    curve:
+      serializedVersion: 2
+      m_Curve: []
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalEulerAngles.y
+    path: 
+    classID: 4
+    script: {fileID: 0}
+    flags: 0
+  - serializedVersion: 2
+    curve:
+      serializedVersion: 2
+      m_Curve: []
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalEulerAngles.z
+    path: 
+    classID: 4
+    script: {fileID: 0}
+    flags: 0
+  m_HasGenericRootTransform: 1
+  m_HasMotionFloatCurves: 0
+  m_Events: []
diff --git a/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAttack.anim.meta b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAttack.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9ce44f4034fc329dbb137091bde37408a738e86c
--- /dev/null
+++ b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponAttack.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 995f4cb0103324743949d5c430b427d4
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 7400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponIdle.anim b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponIdle.anim
new file mode 100644
index 0000000000000000000000000000000000000000..95fb1053b298a263457b32280d0cb480e299629b
--- /dev/null
+++ b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponIdle.anim
@@ -0,0 +1,53 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: TestWeaponIdle
+  serializedVersion: 7
+  m_Legacy: 0
+  m_Compressed: 0
+  m_UseHighQualityCurve: 1
+  m_RotationCurves: []
+  m_CompressedRotationCurves: []
+  m_EulerCurves: []
+  m_PositionCurves: []
+  m_ScaleCurves: []
+  m_FloatCurves: []
+  m_PPtrCurves: []
+  m_SampleRate: 60
+  m_WrapMode: 0
+  m_Bounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 0, y: 0, z: 0}
+  m_ClipBindingConstant:
+    genericBindings: []
+    pptrCurveMapping: []
+  m_AnimationClipSettings:
+    serializedVersion: 2
+    m_AdditiveReferencePoseClip: {fileID: 0}
+    m_AdditiveReferencePoseTime: 0
+    m_StartTime: 0
+    m_StopTime: 1
+    m_OrientationOffsetY: 0
+    m_Level: 0
+    m_CycleOffset: 0
+    m_HasAdditiveReferencePose: 0
+    m_LoopTime: 0
+    m_LoopBlend: 0
+    m_LoopBlendOrientation: 0
+    m_LoopBlendPositionY: 0
+    m_LoopBlendPositionXZ: 0
+    m_KeepOriginalOrientation: 0
+    m_KeepOriginalPositionY: 1
+    m_KeepOriginalPositionXZ: 0
+    m_HeightFromFeet: 0
+    m_Mirror: 0
+  m_EditorCurves: []
+  m_EulerEditorCurves: []
+  m_HasGenericRootTransform: 0
+  m_HasMotionFloatCurves: 0
+  m_Events: []
diff --git a/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponIdle.anim.meta b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponIdle.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..87351edcc6fbe04e184356529438a6b2f2afa48c
--- /dev/null
+++ b/Assets/Resources/Prefabs/Weapons/TestWeapon/Animations/TestWeaponIdle.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d70a28206dd239b4c9cdb5df7eb4dc15
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 7400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
index 4c19e5e8343a76f955090776877c98da680d2605..c06c9a050523dd4f5f3ae9b3d77872fd466b1f9d 100644
--- a/Assets/Scenes/SampleScene.unity
+++ b/Assets/Scenes/SampleScene.unity
@@ -152,10 +152,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 277e6d37ad3220543a05009070b3a2b8, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  backButton: 27
-  attackButton: 122
-  attackAlternateButton: 120
-  interactButton: 120
 --- !u!4 &6125823
 Transform:
   m_ObjectHideFlags: 0
@@ -171,6 +167,32 @@ Transform:
   m_Children: []
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &111203058 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 5423466746631264166, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
+  m_PrefabInstance: {fileID: 4718921866596059802}
+  m_PrefabAsset: {fileID: 0}
+--- !u!95 &111203062
+Animator:
+  serializedVersion: 5
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 111203058}
+  m_Enabled: 1
+  m_Avatar: {fileID: 0}
+  m_Controller: {fileID: 9100000, guid: 240e48418e1611c46a18fa4fd9cbe79f, type: 2}
+  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 &117855954
 GameObject:
   m_ObjectHideFlags: 0
@@ -323,111 +345,6 @@ Transform:
   - {fileID: 2127634081}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &315870489
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 315870490}
-  - component: {fileID: 315870493}
-  - component: {fileID: 315870492}
-  - component: {fileID: 315870491}
-  m_Layer: 0
-  m_Name: Model
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &315870490
-Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 315870489}
-  serializedVersion: 2
-  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 0, y: 0.5, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_ConstrainProportionsScale: 0
-  m_Children: []
-  m_Father: {fileID: 1628232501}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!65 &315870491
-BoxCollider:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 315870489}
-  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: 1, y: 1, z: 1}
-  m_Center: {x: 0, y: 0, z: 0}
---- !u!23 &315870492
-MeshRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 315870489}
-  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 &315870493
-MeshFilter:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 315870489}
-  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!1 &484130344
 GameObject:
   m_ObjectHideFlags: 0
@@ -1261,73 +1178,11 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: c54dc993f0d1e36499ea37e182a87cbc, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
---- !u!1 &1628232500
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 1628232501}
-  - component: {fileID: 1628232503}
-  - component: {fileID: 1628232502}
-  m_Layer: 12
-  m_Name: TestInteractable
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &1628232501
+--- !u!4 &1628232501 stripped
 Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1628232500}
-  serializedVersion: 2
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 3, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_ConstrainProportionsScale: 0
-  m_Children:
-  - {fileID: 315870490}
-  m_Father: {fileID: 1098815287}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!65 &1628232502
-BoxCollider:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1628232500}
-  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: -1, y: 0.5, z: 0}
---- !u!114 &1628232503
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+  m_PrefabInstance: {fileID: 8676018873226186172}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1628232500}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: afc0fd7c16afe4a42a82353df9b3a73b, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
 --- !u!1 &2127634080
 GameObject:
   m_ObjectHideFlags: 0
@@ -1558,8 +1413,68 @@ PrefabInstance:
     m_RemovedComponents: []
     m_RemovedGameObjects: []
     m_AddedGameObjects: []
-    m_AddedComponents: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 5423466746631264166, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 111203062}
   m_SourcePrefab: {fileID: 100100000, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
+--- !u!1001 &8676018873226186172
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 1098815287}
+    m_Modifications:
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3345887698500519422, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7848228299116585289, guid: c98b222ded23bb24690e674886e5741a, type: 3}
+      propertyPath: m_Name
+      value: TestInteractable
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: c98b222ded23bb24690e674886e5741a, type: 3}
 --- !u!1660057539 &9223372036854775807
 SceneRoots:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/Config/GameEnvironmentConfig.cs b/Assets/Scripts/Config/GameEnvironmentConfig.cs
index 32f35ec8c6c248d2b8d2dce2a85502529f3d2046..419338145faf806569c9810035f0d380b1cd399a 100644
--- a/Assets/Scripts/Config/GameEnvironmentConfig.cs
+++ b/Assets/Scripts/Config/GameEnvironmentConfig.cs
@@ -7,9 +7,10 @@ public static class GameEnvironmentConfig{
     public static readonly string TAG_GROUND = "Ground";
 
     // Layers
+    public static readonly string LAYER_PLAYER = "Player";
     public static readonly string LAYER_ENEMY = "Enemy";
     public static readonly string LAYER_PLAYER_ATTACK = "PlayerAttack";
-    public static readonly string LAYER_PLAYER = "Player";
     public static readonly string LAYER_ENEMY_ATTACK = "EnemyAttack";
+    public static readonly string LAYER_ENVIRONMENT_ATTACK = "EnvironmentAttack";
     public static readonly string LAYER_COLLECTIBLE = "Collectible";
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Game/Data/GameInput.cs b/Assets/Scripts/Core/Game/Data/GameInput.cs
index 1bb69dd5f1ca1450177d03a8580b4421377703d2..d9b880e4d465c3ce4f251038754904e73d9e0f9c 100644
--- a/Assets/Scripts/Core/Game/Data/GameInput.cs
+++ b/Assets/Scripts/Core/Game/Data/GameInput.cs
@@ -7,8 +7,8 @@ public class GameInput : MonoBehaviour {
 
     // Attributes
     [NonSerialized] public KeyCode backButton = KeyCode.Escape;
-    [NonSerialized] public KeyCode attackButton = KeyCode.Z;
-    [NonSerialized] public KeyCode attackAlternateButton = KeyCode.X;
+    [NonSerialized] public KeyCode attackButton = KeyCode.Mouse0;
+    [NonSerialized] public KeyCode attackAlternateButton = KeyCode.Mouse1;
     [NonSerialized] public KeyCode interactButton = KeyCode.C;
 
     // Constructor
diff --git a/Assets/Scripts/Core/Objects/Weapons/NoWeapon.meta b/Assets/Scripts/Core/Objects/Weapons/NoWeapon.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c80a39ce0568487c643c47bf5323c709b0e9eea4
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Weapons/NoWeapon.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6309525624d1eef4aa40263d1a30dba3
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Weapons/NoWeapon/NoWeapon.cs b/Assets/Scripts/Core/Objects/Weapons/NoWeapon/NoWeapon.cs
new file mode 100644
index 0000000000000000000000000000000000000000..cd230ac5f0b7942d6b3173ab62941b9654d8eff7
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Weapons/NoWeapon/NoWeapon.cs
@@ -0,0 +1,9 @@
+public class NoWeapon : WeaponObject{
+    public override void Attack(){
+        return;
+    }
+
+    public override void AttackAlternate(){
+        return;
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Weapons/NoWeapon/NoWeapon.cs.meta b/Assets/Scripts/Core/Objects/Weapons/NoWeapon/NoWeapon.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4ad79feff935db8df6da7b6acecd6ca1258c66b8
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Weapons/NoWeapon/NoWeapon.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: aeafa263f26404c4a9f653e7d0889d83
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeapon.cs b/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeapon.cs
index 9fce8365e8eafa5be70c30691bcc426ed4249619..0837d0a4221f019c16e975f9baeb8c41a5464dfe 100644
--- a/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeapon.cs
+++ b/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeapon.cs
@@ -8,23 +8,16 @@ public class TestWeapon : WeaponObject{
     // Attribute
     [SerializeField] private float fireRange = 100;
     [SerializeField] private float projectileSpeed = 100; 
+    private TestWeaponAnimationController animationController;
 
-    // Function
-    public override void Attack(){
-        AttackObject attackHitbox = ObjectFactory.CreateAttackObject(
-            prefabPath: hitboxPrefab,
-            damage: MathUtils.CalculateDamage(bearer.BaseDamage, BaseDamage),
-            knockbackPower: KnockbackPower,
-            type: bearerType,
-            knockbackOrigin: transform.position,
-            parent: transform,
-            objectName: "TestWeapon Hitbox"
-        );
-
-        ObjectFactory.DestroyObject(attackHitbox, 1f);
+    // Constructor
+    protected new void Start(){
+        base.Start();
+        animationController = new TestWeaponAnimationController(this);
     }
 
-    public override void AttackAlternate(){
+    // Function
+    public override void Attack(){
         ProjectileObject attackProjectile = ObjectFactory.CreateAttackObject<ProjectileObject>(
             prefabPath: projectilePrefab,
             damage: MathUtils.CalculateDamage(bearer.BaseDamage, BaseDamage),
@@ -41,4 +34,20 @@ public class TestWeapon : WeaponObject{
 
         ObjectFactory.DestroyObject(attackProjectile, 1f);
     }
+
+    public override void AttackAlternate(){
+        animationController.AnimateAlternateAttack();
+
+        AttackObject attackHitbox = ObjectFactory.CreateAttackObject(
+            prefabPath: hitboxPrefab,
+            damage: MathUtils.CalculateDamage(bearer.BaseDamage, BaseDamage),
+            knockbackPower: KnockbackPower,
+            type: bearerType,
+            knockbackOrigin: transform.position,
+            parent: animationController.model,
+            objectName: "TestWeapon Hitbox"
+        );
+
+        ObjectFactory.DestroyObject(attackHitbox, 1f);
+    }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeaponAnimationController.cs b/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeaponAnimationController.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2d07d1305b6fceefc15cf74a10721f30e73ea75f
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeaponAnimationController.cs
@@ -0,0 +1,19 @@
+using UnityEngine;
+
+public class TestWeaponAnimationController : AnimationController{
+    // Consts
+    private const string ALTERNATE_ATTACK_TRIGGER = "AlternateAttack_param";
+
+    // Attributes
+    private readonly TestWeapon testWeapon;
+    
+    // Constructor
+    public TestWeaponAnimationController(TestWeapon testWeapon) : base(testWeapon){
+        this.testWeapon = testWeapon;
+    }
+
+    // Functions
+    public void AnimateAlternateAttack(){
+        animator.SetBool(ALTERNATE_ATTACK_TRIGGER, true);
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeaponAnimationController.cs.meta b/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeaponAnimationController.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a018adb33c82e630fc2f5d3f8fb7395885abd9ec
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Weapons/TestWeapon/TestWeaponAnimationController.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 26eec6d1e0e0b0a44929f9cb67f3c2e2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Weapons/WeaponObject.cs b/Assets/Scripts/Core/Objects/Weapons/WeaponObject.cs
index a9182287caa7c47cd967fceb5876e0286704f6bf..14a7ad93873298f848ea66260191ab398c87f22b 100644
--- a/Assets/Scripts/Core/Objects/Weapons/WeaponObject.cs
+++ b/Assets/Scripts/Core/Objects/Weapons/WeaponObject.cs
@@ -13,6 +13,7 @@ public abstract class WeaponObject : MonoBehaviour {
         bearer = GetComponentInParent<IArmed>();
         if(bearer is Player) bearerType = AttackObjectType.PLAYER;
         else if(bearer is EnemyEntity) bearerType = AttackObjectType.ENEMY;
+        else bearerType = AttackObjectType.ENVIRONMENT;
     }
 
     // Functions
diff --git a/Assets/Scripts/Core/Player/PlayerAnimationController.cs b/Assets/Scripts/Core/Player/PlayerAnimationController.cs
index d1ff9f092fb2ba42b3f7b2a8b2f6e89a84c66329..ddaf7306aa370fbc499c050c4af9025ef4cfd418 100644
--- a/Assets/Scripts/Core/Player/PlayerAnimationController.cs
+++ b/Assets/Scripts/Core/Player/PlayerAnimationController.cs
@@ -2,9 +2,9 @@ using UnityEngine;
 
 public class PlayerAnimationController : AnimationController{
     // Consts
-    private const string IDLE_TRIGGER = "idle_param"; 
-    private const string WALK_TRIGGER = "walk_param"; 
-    private const string SPRINT_TRIGGER = "sprint_param"; 
+    private const string IDLE_TRIGGER = "Idle_param"; 
+    private const string WALK_TRIGGER = "Walk_param"; 
+    private const string SPRINT_TRIGGER = "Sprint_param"; 
     
     // Attributes
     private readonly Player player;
diff --git a/Assets/Scripts/Core/Player/PlayerInputController.cs b/Assets/Scripts/Core/Player/PlayerInputController.cs
index 4ebfcfcc8fe0c18ef574044eec67615eed409bf3..fb22866ae64f17158a110ca96a8bb20278d41b78 100644
--- a/Assets/Scripts/Core/Player/PlayerInputController.cs
+++ b/Assets/Scripts/Core/Player/PlayerInputController.cs
@@ -31,6 +31,7 @@ public class PlayerInputController{
         }
         else if(Input.GetKeyDown(GameInput.instance.interactButton)){
             Debug.Log("Player is interacting");
+            if(player.stateController.currentInteractables.Count == 0 ) return;
             IInteractable interactable = player.stateController.currentInteractables[player.stateController.currentInteractables.Count - 1];
             interactable.Interact();
         }
diff --git a/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs b/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs
index cb89f776155f632cbecda63c81a644ac1f8834d0..d9c668ff2097b040e7e63d055034961d63061feb 100644
--- a/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs
+++ b/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs
@@ -6,9 +6,13 @@ public abstract class AnimationController {
     public MeshRenderer meshRenderer;
     public Animator animator;
 
-    public AnimationController(MonoBehaviour dummy){
-        model = dummy.transform.Find("Model");
+    public AnimationController(MonoBehaviour animable){
+        model = animable.transform.Find("Model");
         animator = model.GetComponent<Animator>();
         meshRenderer = model.GetComponent<MeshRenderer>();
+
+        if(model == null) Debug.LogWarning("Animated object of " + animable.name + " does not have a model");
+        if(animator == null) Debug.LogWarning("Animated object of " + animable.name + " does not have an animator in its model");
+        if(meshRenderer == null) Debug.LogWarning("Animated object of " + animable.name + " does not have an meshRenderer in its model");
     }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/WorldEntity.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/WorldEntity.cs
index be0e40ef715a6ecc0aa6bfe4627af1407c808b1f..4be30a75f5a0b9c9e9d13965e814781b19dd7361 100644
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/WorldEntity.cs
+++ b/Assets/Scripts/Library/BaseClasses/EntityObject/WorldEntity.cs
@@ -25,6 +25,9 @@ public class WorldEntity : WorldObject, IRigid {
     protected void Start(){
         rigidbody = GetComponent<Rigidbody>();
         collider = GetComponent<Collider>();
+
+        if(rigidbody == null) Debug.LogWarning("Rigid entity " + name + " does not have a rigidbody"); 
+        if(collider == null) Debug.LogWarning("Rigid entity " + name + " does not have a collider"); 
     }
 
     // Functions
diff --git a/Assets/Scripts/Library/Enum/AttackObjectType.cs b/Assets/Scripts/Library/Enum/AttackObjectType.cs
index 72282390b23821b14999ce34dadf5be62fd4a152..070c57a8522c0b64b6271d342af779926adba0e9 100644
--- a/Assets/Scripts/Library/Enum/AttackObjectType.cs
+++ b/Assets/Scripts/Library/Enum/AttackObjectType.cs
@@ -1,4 +1,5 @@
 public enum AttackObjectType {
     PLAYER,
     ENEMY,
+    ENVIRONMENT
 }
diff --git a/Assets/Scripts/Library/Util/ObjectFactory.cs b/Assets/Scripts/Library/Util/ObjectFactory.cs
index a776c4afe627823dddf18b3e2c683d93414aef1f..917786c986ada01705e1fa5e169e4f05adf544a0 100644
--- a/Assets/Scripts/Library/Util/ObjectFactory.cs
+++ b/Assets/Scripts/Library/Util/ObjectFactory.cs
@@ -80,6 +80,9 @@ public static class ObjectFactory{
                 attackObject.gameObject.layer = LayerMask.NameToLayer(GameEnvironmentConfig.LAYER_ENEMY_ATTACK);
                 attackObject.Damage *= GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].EnemyDamageMultiplier;
                 break;
+            case AttackObjectType.ENVIRONMENT:
+                attackObject.gameObject.layer = LayerMask.NameToLayer(GameEnvironmentConfig.LAYER_ENVIRONMENT_ATTACK);
+                break;
             default:
                 Debug.LogError("Invalid AttackObjectType set, please refer to enum AttackObjectType for valid types");
                 break;
diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset
index 17c8f538e2152c0a0310b4870979eeecece2153c..8068b2058b089f9973b15f83648e58cd238688f0 100644
--- a/ProjectSettings/InputManager.asset
+++ b/ProjectSettings/InputManager.asset
@@ -293,3 +293,4 @@ InputManager:
     type: 0
     axis: 0
     joyNum: 0
+  m_UsePhysicalKeys: 1