diff --git a/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity b/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity
index 60dabcd742046f7f88d7720e04e613774a927b81..9f79613f0bb49b8adc8ea6013139302d0f7ba797 100644
--- a/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity
+++ b/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity
@@ -123,6 +123,64 @@ NavMeshSettings:
     debug:
       m_Flags: 0
   m_NavMeshData: {fileID: 0}
+--- !u!1 &15892650 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 894685680894697031, guid: a86eab177ff764e97a1897373332925e, type: 3}
+  m_PrefabInstance: {fileID: 1435488303}
+  m_PrefabAsset: {fileID: 0}
+--- !u!4 &15892651 stripped
+Transform:
+  m_CorrespondingSourceObject: {fileID: 513796622886044925, guid: a86eab177ff764e97a1897373332925e, type: 3}
+  m_PrefabInstance: {fileID: 1435488303}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &15892652
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 15892650}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 00fc180867ed6bb49a4c324f4c933ef5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  maxHealth: 3
+  health: 3
+  damageable: 0
+  invulnerableAfterDamage: 0
+  playerInfo: {fileID: 0}
+  onDamage:
+    m_PersistentCalls:
+      m_Calls: []
+  onDeath:
+    m_PersistentCalls:
+      m_Calls: []
+  onHeal:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &15892653
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 15892650}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e8ff7d50993ec0343b65319b7664078e, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  layers: 8
+  damage: 1
+  damageOverTime: 0
+  damageEverXSeconds: 1
+  damagePerTick: 1
+  hasAttack: 1
+  attackPosition: {fileID: 1604040539}
+  attackRange: 2
+  affectedActors: 2
+  animationFinishTime: 0.9
 --- !u!1 &80620903
 GameObject:
   m_ObjectHideFlags: 0
@@ -331,6 +389,36 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &380224755
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 380224756}
+  m_Layer: 0
+  m_Name: StepRayLower (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &380224756
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 380224755}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0.324}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 15892651}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &501061641
 GameObject:
   m_ObjectHideFlags: 0
@@ -344,7 +432,7 @@ GameObject:
   - component: {fileID: 501061644}
   - component: {fileID: 501061643}
   - component: {fileID: 501061642}
-  m_Layer: 0
+  m_Layer: 3
   m_Name: Cube
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -360,20 +448,20 @@ MonoBehaviour:
   m_GameObject: {fileID: 501061641}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5cace9c7ea0a48a4fa7b70997311a98a, type: 3}
+  m_Script: {fileID: 11500000, guid: 3edb2e826c9590a4d8c46dd2d83caf58, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  eventTrigger: 0
-  layers: 0
-  checkByTag: 0
-  tag: []
-  enterEvents:
+  maxHealth: 3
+  health: 3
+  damageable: 1
+  invulnerableAfterDamage: 0
+  onDamage:
     m_PersistentCalls:
       m_Calls: []
-  stayEvents:
+  onDeath:
     m_PersistentCalls:
       m_Calls: []
-  exitEvents:
+  onHeal:
     m_PersistentCalls:
       m_Calls: []
 --- !u!65 &501061643
@@ -384,7 +472,7 @@ BoxCollider:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 501061641}
   m_Material: {fileID: 0}
-  m_IsTrigger: 1
+  m_IsTrigger: 0
   m_Enabled: 1
   serializedVersion: 2
   m_Size: {x: 1, y: 1, z: 1}
@@ -452,7 +540,142 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &999645247
+--- !u!1 &1418784925 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 142786442390584196, guid: a86eab177ff764e97a1897373332925e, type: 3}
+  m_PrefabInstance: {fileID: 1435488303}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1001 &1435488303
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 2964776070120258367, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0.000000029802319
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070120258367, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.000000002163767
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070120258367, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 3.9615505e-10
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070640493478, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0.00000002235174
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070640493478, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.0000000069690205
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070640493478, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0.000000001275929
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 5.2267866
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: -2.5166266
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 6.149029
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776070906462467, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_Name
+      value: PLAYER
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776071172871079, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0.09041651
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776071172871079, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 4.596334e-16
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776071172871079, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -9.266409e-20
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776071241958025, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0.00000002235174
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776071241958025, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0.0000000012717155
+      objectReference: {fileID: 0}
+    - target: {fileID: 2964776071241958025, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -2.3283314e-10
+      objectReference: {fileID: 0}
+    - target: {fileID: 3158857365447649064, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_Enabled
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 3158857365447649064, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: stepRayLower
+      value: 
+      objectReference: {fileID: 1486070605}
+    - target: {fileID: 3158857365447649064, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: stepRayUpper
+      value: 
+      objectReference: {fileID: 1418784925}
+    - target: {fileID: 3158857365447649064, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: stepRayLower2
+      value: 
+      objectReference: {fileID: 380224755}
+    - target: {fileID: 3398012958249569980, guid: a86eab177ff764e97a1897373332925e, type: 3}
+      propertyPath: m_Enabled
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a86eab177ff764e97a1897373332925e, type: 3}
+--- !u!1 &1486070605 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 142786442075079187, guid: a86eab177ff764e97a1897373332925e, type: 3}
+  m_PrefabInstance: {fileID: 1435488303}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1 &1604040539
 GameObject:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
@@ -460,80 +683,27 @@ GameObject:
   m_PrefabAsset: {fileID: 0}
   serializedVersion: 6
   m_Component:
-  - component: {fileID: 999645250}
-  - component: {fileID: 999645249}
-  - component: {fileID: 999645248}
+  - component: {fileID: 1604040540}
   m_Layer: 0
-  m_Name: Main Camera
-  m_TagString: MainCamera
+  m_Name: AttackPosition
+  m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
---- !u!81 &999645248
-AudioListener:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 999645247}
-  m_Enabled: 1
---- !u!20 &999645249
-Camera:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 999645247}
-  m_Enabled: 1
-  serializedVersion: 2
-  m_ClearFlags: 1
-  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
-  m_projectionMatrixMode: 1
-  m_GateFitMode: 2
-  m_FOVAxisMode: 0
-  m_SensorSize: {x: 36, y: 24}
-  m_LensShift: {x: 0, y: 0}
-  m_FocalLength: 50
-  m_NormalizedViewPortRect:
-    serializedVersion: 2
-    x: 0
-    y: 0
-    width: 1
-    height: 1
-  near clip plane: 0.3
-  far clip plane: 1000
-  field of view: 60
-  orthographic: 0
-  orthographic size: 5
-  m_Depth: -1
-  m_CullingMask:
-    serializedVersion: 2
-    m_Bits: 4294967295
-  m_RenderingPath: -1
-  m_TargetTexture: {fileID: 0}
-  m_TargetDisplay: 0
-  m_TargetEye: 3
-  m_HDR: 1
-  m_AllowMSAA: 1
-  m_AllowDynamicResolution: 0
-  m_ForceIntoRT: 0
-  m_OcclusionCulling: 1
-  m_StereoConvergence: 10
-  m_StereoSeparation: 0.022
---- !u!4 &999645250
+--- !u!4 &1604040540
 Transform:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 999645247}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 1, z: -10}
+  m_GameObject: {fileID: 1604040539}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -0.26741314, y: 1.3737164, z: 0.8802147}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
-  m_Father: {fileID: 0}
-  m_RootOrder: 0
+  m_Father: {fileID: 15892651}
+  m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1626715799
 GameObject:
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5e437c58eb20fe9d8253866df2dfadf64154f484
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 020eb23c4b2f86d47bc1232b21c5e182
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..516d397196cb3008155426b71d48c3937f3914f9
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs
@@ -0,0 +1,120 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+public class DamageDealer : MonoBehaviour
+{
+    public LayerMask layermask;
+    public int damage = 1;
+    public bool damageOverTime = false;
+    public float damageEveryXSeconds;
+    public int damagePerTick = 1;
+    public bool hasAttack = false;
+    public GameObject attackPosition;
+    public float attackRange;
+    public DamageActor affectedActors;
+    
+    [SerializeField] private float animationFinishTime = 0.9f;
+    private bool isAttacking;
+    private int isAttackingHash;
+    private bool canTakeDamage = true;
+
+    
+    private Animator animator;
+    private PlayerInput input;
+    private InputAction attack;
+
+    private void Awake()
+    {
+        input = new PlayerInput();
+        animator = GetComponent<Animator>();
+        isAttackingHash = Animator.StringToHash("attack");
+    }
+
+    private void OnEnable()
+    {
+        input.Enable();
+        input.Player.Attack.started += Attack;
+    }
+
+    private void OnDisable()
+    {
+        input.Player.Attack.started -= Attack;
+        input.Disable();
+    }
+
+    private void FixedUpdate()
+    {
+        if (isAttacking && animator.GetCurrentAnimatorStateInfo(1).normalizedTime >= animationFinishTime)
+        {
+            isAttacking = false;
+        }
+    }
+
+
+    private void OnTriggerEnter(Collider other)
+    {
+        var damageable = other.GetComponent<Damageable>();
+        if (hasAttack || !affectedActors.HasFlag(damageable.Actor) || damageOverTime || layermask != (layermask | (1<< other.gameObject.layer)))
+            return;
+        
+        damageable.Damage(damage);
+    }
+
+    private void OnTriggerStay(Collider other)
+    {
+        var damageable = other.GetComponent<Damageable>();
+        if (hasAttack || !affectedActors.HasFlag(damageable.Actor) || !damageOverTime || layermask != (layermask | (1<< other.gameObject.layer)))
+            return;
+        if (canTakeDamage)
+        {
+            StartCoroutine(DamagePerSecond(damageEveryXSeconds));
+            damageable.Damage(damagePerTick);
+        }
+        
+
+    }
+
+    private IEnumerator DamagePerSecond(float value)
+    {
+        canTakeDamage = false;
+        yield return new WaitForSecondsRealtime(value);
+        canTakeDamage = true;
+    }
+
+
+    private void Attack(InputAction.CallbackContext obj)
+    {
+        if (!isAttacking && hasAttack)
+        {
+            animator.SetTrigger(isAttackingHash);
+            StartCoroutine(InitializeAttack());
+            Debug.Log("Attack");
+            Collider[] hitEnemies = Physics.OverlapSphere(attackPosition.transform.position, attackRange, layermask);
+
+            foreach (var enemy in hitEnemies)
+            {
+                if (layermask == (layermask | (1<< enemy.gameObject.layer)))
+                    Debug.Log("layermask works");
+                var damageable = enemy.GetComponent<Damageable>();
+                if (!affectedActors.HasFlag(damageable.Actor))
+                    return;
+                damageable.Damage(damage);
+            }
+        }
+    }
+    
+    IEnumerator InitializeAttack()
+    {
+        yield return new WaitForSeconds(0.1f);
+        isAttacking = true;
+    }
+    
+    private void OnDrawGizmosSelected()
+    {
+        Gizmos.DrawWireSphere(attackPosition.transform.position, attackRange);
+    }
+    
+}
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7f74e60b0df8fdd9104255c0568f909c1a53bdfc
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e8ff7d50993ec0343b65319b7664078e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d28bd665b6b0cf67c6f7873ddb8404716b1e33d5
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs
@@ -0,0 +1,85 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+
+public abstract class Damageable : MonoBehaviour
+{
+    [SerializeField] protected int maxHealth;
+    [SerializeField] protected int health;
+
+    public bool damageable;
+
+    public float invulnerableAfterDamage = 0;
+    
+    public abstract DamageActor Actor { get; }
+
+
+    private void Awake()
+    {
+        Health = MaxHealth;
+    }
+
+    public virtual int MaxHealth
+    {
+        get => maxHealth;
+        set
+        {
+            if (value == maxHealth)
+                return;
+
+            int difference = value - maxHealth;
+            maxHealth = value;
+            Heal(difference);
+        }
+    }
+    
+    public virtual int Health
+    {
+        get => health;
+        set => health = Mathf.Clamp(value,0,MaxHealth);
+    }
+    
+
+    public virtual void Damage(int amount)
+    {
+        if (damageable)
+        {
+            if (amount == 0) return;
+            amount = Mathf.Abs(amount);
+            Health -= amount;
+            if (Health <= 0) Death();
+            
+            if (invulnerableAfterDamage != 0) StartCoroutine(MakeInvulnerable(invulnerableAfterDamage));
+        }
+    }
+
+    public virtual void Heal(int amount)
+    {
+        if (amount == 0)
+            return;
+        amount = Mathf.Abs(amount);
+        Health += amount;
+    }
+
+    public virtual void Death()
+    {
+        return;
+    }
+
+    public IEnumerator MakeInvulnerable(float value)
+    {
+        damageable = false;
+        yield return new WaitForSecondsRealtime(value);
+        damageable = true;
+    }
+
+}
+
+public enum DamageActor
+{
+    Player = 1<<0,
+    Enemy = 1<<1,
+    Environment = 1<<2
+}
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ff5609d01143dcc102fea7c4985a192a5ca95e84
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 28e94e39546edd74696e0ff7c1e0de23
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6942d5423660ff2f108ccd175177b8e71428eb72
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs
@@ -0,0 +1,62 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Events;
+
+public class EnemyDamageable : Damageable
+{
+    public UnityEvent onDamage;
+
+    public UnityEvent onDeath;
+
+    public UnityEvent onHeal;
+    
+    public override DamageActor Actor { get; } = DamageActor.Enemy;
+    
+    
+
+    public override int Health
+    {
+        get => health;
+        set
+        {
+            health = Mathf.Clamp(value, 0, MaxHealth);
+            if (health == 0)
+            {
+                Death();
+            }
+        }
+    }
+    
+
+    public override void Damage(int amount)
+    {
+        base.Damage(amount);
+        Debug.Log(gameObject.name+ " Hit");
+        onDamage?.Invoke();
+            
+        //Animation
+        //Sound
+    }
+
+    public override void Heal(int amount)
+    {
+        base.Heal(amount);
+        
+        onHeal?.Invoke();
+        
+        //Animation
+        //Sound
+    }
+
+    public override void Death()
+    {
+        base.Death();
+        
+        onDamage.Invoke();
+        Debug.Log(gameObject.name+" Dead");
+        
+        //Animation
+        //Sound
+    }
+}
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..19662aa70ecdc957ccbd1d5536c19e0f23a1d330
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3edb2e826c9590a4d8c46dd2d83caf58
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b35da8b68638dfa161ea67ef695c52d99b93ba97
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs
@@ -0,0 +1,77 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Events;
+
+public class PlayerDamageable : Damageable
+{
+    public PlayerInformation playerInfo;
+
+    public UnityEvent onDamage;
+
+    public UnityEvent onDeath;
+
+    public UnityEvent onHeal;
+    
+    
+    public override DamageActor Actor { get; } = DamageActor.Player;
+
+
+    public override int MaxHealth
+    {
+        get => playerInfo.maxHealth;
+        set
+        {
+            if (value == playerInfo.maxHealth)
+                return;
+
+            int difference = value - playerInfo.maxHealth;
+            playerInfo.maxHealth = value;
+            Heal(difference);
+        }
+    }
+
+    public override int Health
+    {
+        get => playerInfo.health;
+        set
+        {
+            playerInfo.health = Mathf.Clamp(value, 0, MaxHealth);
+            if (playerInfo.health == 0)
+            {
+                Death();
+            }
+        }
+    }
+    
+
+    public override void Damage(int amount)
+    {
+        base.Damage(amount);
+        Debug.Log("Player Damaged");
+        onDamage?.Invoke();
+            
+        //Animation
+        //Sound
+    }
+
+    public override void Heal(int amount)
+    {
+        base.Heal(amount);
+        
+        onHeal?.Invoke();
+        
+        //Animation
+        //Sound
+    }
+
+    public override void Death()
+    {
+        base.Death();
+        Debug.Log("Player Died");
+        onDamage.Invoke();
+        
+        //Animation
+        //Sound
+    }
+}
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2c1e73b8d20c7778f3bb49aa43d49c6c9601dacf
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 00fc180867ed6bb49a4c324f4c933ef5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Tenebrissilva/Assets/_Project/Scripts/Player/PlayerMovement.cs b/Tenebrissilva/Assets/_Project/Scripts/Player/PlayerMovement.cs
index 09205709513379a270c25f49e284dc4c5584932e..be38cfc5b518fc7befecfba92a6203be08b57946 100644
--- a/Tenebrissilva/Assets/_Project/Scripts/Player/PlayerMovement.cs
+++ b/Tenebrissilva/Assets/_Project/Scripts/Player/PlayerMovement.cs
@@ -43,13 +43,12 @@ public class PlayerMovement : MonoBehaviour
         // Hash references
         isJumpingUpHash = Animator.StringToHash("jump");
         isJumpingDownHash = Animator.StringToHash("down");
-        isAttackingHash = Animator.StringToHash("attack");
+
     }
 
     private void OnEnable()
     {
         input.Player.Jump.started += DoJump;
-        input.Player.Attack.started += DoAttack;
         move = input.Player.Movement;
         input.Player.Enable();
 
@@ -58,7 +57,6 @@ public class PlayerMovement : MonoBehaviour
     private void OnDisable()
     {
         input.Player.Jump.started -= DoJump;
-        input.Player.Attack.started -= DoAttack;
         input.Player.Disable();
     }
 
@@ -137,20 +135,6 @@ public class PlayerMovement : MonoBehaviour
         }
     }
     
-    private void DoAttack(InputAction.CallbackContext obj)
-    {
-        if (!isAttacking)
-        {
-            animator.SetTrigger(isAttackingHash);
-            StartCoroutine(InitializeAttack());
-        }
-    }
-
-    IEnumerator InitializeAttack()
-    {
-        yield return new WaitForSeconds(0.1f);
-        isAttacking = true;
-    }
     
     private bool IsGrounded()
     {
diff --git a/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects.meta b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects.meta
new file mode 100644
index 0000000000000000000000000000000000000000..70421ddde42f92db3a8f09b0a77102432dd1224c
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 87e131775170c7a42b1c932d93f8bd95
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset
new file mode 100644
index 0000000000000000000000000000000000000000..662253a564761e728dd764d51bc554063fb4ed7e
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset
@@ -0,0 +1,18 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8f1eaa3258b22794fb4240121cb711d3, type: 3}
+  m_Name: PlayerInfo
+  m_EditorClassIdentifier: 
+  defaultMaxHealth: 3
+  defaultHealth: 3
+  maxHealth: 3
+  health: 3
diff --git a/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset.meta b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0e565cd5226262840eee49411a85fb31af6daa76
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c15ca0934a7074f4b8a85e282b1c0f2c
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..562e31531bda2ab1076dc749873ef9326c3db096
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+[CreateAssetMenu(fileName = "PlayerInfo")]
+public class PlayerInformation : ScriptableObject
+{
+    [SerializeField] public int defaultMaxHealth = 3;
+    [SerializeField] public int defaultHealth = 3;
+
+    public int maxHealth;
+    public int health;
+
+    private void OnEnable()
+    {
+        maxHealth = defaultMaxHealth;
+        health = defaultHealth;
+    }
+}
diff --git a/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..304a9916c2dd4d9bc18a12cacc89f79e1897e9d4
--- /dev/null
+++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8f1eaa3258b22794fb4240121cb711d3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: