diff --git a/Assets/Scenes/Level01.unity b/Assets/Scenes/Level01.unity
index f8026848f2c5aab719796ba7284b3aff34e44ea9..7cd18be87cd5413da41a768e966dd94eef8c3f02 100644
--- a/Assets/Scenes/Level01.unity
+++ b/Assets/Scenes/Level01.unity
@@ -8873,6 +8873,71 @@ Transform:
   m_Children: []
   m_Father: {fileID: 183304858}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &939754510
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 100002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_Name
+      value: ZomBunny
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 2.8748345
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: -0.00000047683716
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 4.49745
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 19800002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: InitialModule.startSizeY.minMaxState
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 19800002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
+      propertyPath: InitialModule.startSizeZ.minMaxState
+      value: 3
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
 --- !u!1 &943920582
 GameObject:
   m_ObjectHideFlags: 0
@@ -17231,6 +17296,63 @@ RectTransform:
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: -14, y: -4}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1001 &1926172071
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 6842458599697738422, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_Name
+      value: Gecko
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 3.8081632
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: -0.00000047683716
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 1.1404972
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3}
 --- !u!1 &1941167242
 GameObject:
   m_ObjectHideFlags: 0
@@ -17284,6 +17406,63 @@ BoxCollider:
   serializedVersion: 3
   m_Size: {x: 1.7261565, y: 1.1397734, z: 3.1002936}
   m_Center: {x: 0.80036193, y: -0.44283915, z: -0.49197662}
+--- !u!1001 &1951416162
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: -1.0720851
+      objectReference: {fileID: 0}
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: -0.0000009536743
+      objectReference: {fileID: 0}
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 2.551804
+      objectReference: {fileID: 0}
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6182162820492919152, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
+      propertyPath: m_Name
+      value: Colobus
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3}
 --- !u!1 &1965662091
 GameObject:
   m_ObjectHideFlags: 0
@@ -19348,6 +19527,7 @@ SceneRoots:
   - {fileID: 7644976519348994449}
   - {fileID: 7887238849551432852}
   - {fileID: 6581340035796196415}
+  - {fileID: 2033424417}
   - {fileID: 183304858}
   - {fileID: 1621979631}
   - {fileID: 1871034396}
@@ -19357,4 +19537,6 @@ SceneRoots:
   - {fileID: 307935225}
   - {fileID: 840882477}
   - {fileID: 1043811713}
-  - {fileID: 2033424417}
+  - {fileID: 939754510}
+  - {fileID: 1951416162}
+  - {fileID: 1926172071}
diff --git a/Assets/Scripts/Pet/PetAttackMovement.cs b/Assets/Scripts/Pet/PetAttackMovement.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8c962f7d77f9d02aabd941604cb87bd39e13106e
--- /dev/null
+++ b/Assets/Scripts/Pet/PetAttackMovement.cs
@@ -0,0 +1,220 @@
+using UnityEngine;
+using System.Collections;
+using UnityEngine.AI;
+using UnityEngine.Events;
+using System;
+using System.Collections.Generic;
+
+namespace Nightmare
+{
+    public class PetAttackMovement : PausibleObject
+    {
+        public float visionRange = 10f;
+        public float hearingRange = 20f;
+        public float wanderDistance = 10f;
+        public Vector2 idleTimeRange;
+        [Range(0f, 1f)]
+        public float psychicLevels = 0.2f;
+
+        private List<GameObject> enemies = new List<GameObject>();
+        float currentVision;
+        Transform player;
+        Animator anim;
+        PlayerHealth playerHealth;
+        PetHealth petHealth;
+        NavMeshAgent nav;
+        public float timer = 0f;
+
+        void Awake()
+        {
+            player = GameObject.FindGameObjectWithTag("Player").transform;
+            playerHealth = player.GetComponent<PlayerHealth>();
+            petHealth = GetComponent<PetHealth>();
+            nav = GetComponent<NavMeshAgent>();
+
+            StartPausible();
+        }
+
+        void OnEnable()
+        {
+            nav.enabled = true;
+            ClearPath();
+            ScaleVision(1f);
+            IsPsychic();
+            timer = 0f;
+        }
+
+        void ClearPath()
+        {
+            if (nav.hasPath)
+                nav.ResetPath();
+        }
+
+        void Update()
+        {
+            if (!isPaused)
+            {
+                // If both the enemy and the player have health left...
+                if (petHealth.CurrentHealth() > 0 && playerHealth.currentHealth > 0)
+                {
+                    LookForPlayer();
+                    WanderOrIdle();
+                }
+                else
+                {
+                    nav.enabled = false;
+                }
+            }
+        }
+
+        void OnDestroy()
+        {
+            nav.enabled = false;
+            StopPausible();
+        }
+
+        public override void OnPause()
+        {
+            if (nav.hasPath)
+                nav.isStopped = true;
+        }
+
+        public override void OnUnPause()
+        {
+            if (nav.hasPath)
+                nav.isStopped = false;
+        }
+
+        private void LookForPlayer()
+        {
+            // Add enemies with different tags to the list
+            enemies.Clear(); // Clear the list before adding enemies
+            enemies.AddRange(GameObject.FindGameObjectsWithTag("ZomBunny"));
+            enemies.AddRange(GameObject.FindGameObjectsWithTag("ZomBear"));
+            enemies.AddRange(GameObject.FindGameObjectsWithTag("Hellephant"));
+            enemies.AddRange(GameObject.FindGameObjectsWithTag("ZomBoss"));
+
+            Transform closestEnemy = null;
+            float closestDistance = Mathf.Infinity;
+
+            foreach (GameObject enemy in enemies)
+            {
+                float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position);
+
+                if (distanceToEnemy < closestDistance && distanceToEnemy <= currentVision)
+                {
+                    closestEnemy = enemy.transform;
+                    closestDistance = distanceToEnemy;
+                }
+            }
+
+            if (closestEnemy != null)
+            {
+                GoToPosition(closestEnemy.position);
+            }
+            else
+            {
+                float distanceToPlayer = Vector3.Distance(transform.position, player.position);
+
+                // Define the stopping distance
+                float stoppingDistance = 3f; // Adjust this value as needed
+
+                // If the distance to the player is less than or equal to the stopping distance, clear the path
+                if (distanceToPlayer <= stoppingDistance)
+                {
+                    anim.SetBool("IsNearPlayer", true); // IsNearPlayer parameter is false
+                    ClearPath();
+                }
+                // Otherwise, continue moving towards the player
+                else
+                {
+                    anim.SetBool("IsNearPlayer", false); // IsNearPlayer parameter is true
+                    GoToPosition(player.position);
+                }
+            }
+        }
+
+        private void HearPoint(Vector3 position)
+        {
+            TestSense(position, hearingRange);
+        }
+
+        private void TestSense(Vector3 position, float senseRange)
+        {
+            if (Vector3.Distance(this.transform.position, position) <= senseRange)
+            {
+                GoToPosition(position);
+            }
+        }
+
+        public void GoToPlayer()
+        {
+            GoToPosition(player.position);
+        }
+
+        private void GoToPosition(Vector3 position)
+        {
+            timer = -1f;
+            if (!petHealth.IsDead())
+            {
+                SetDestination(position);
+            }
+        }
+
+        private void SetDestination(Vector3 position)
+        {
+            if (nav.isOnNavMesh)
+            {
+                nav.SetDestination(position);
+            }
+        }
+
+        private void WanderOrIdle()
+        {
+            if (!nav.hasPath)
+            {
+                if (timer <= 0f)
+                {
+                    SetDestination(GetRandomPoint(wanderDistance, 5));
+                    if (nav.pathStatus == NavMeshPathStatus.PathInvalid)
+                    {
+                        ClearPath();
+                    }
+                    timer = UnityEngine.Random.Range(idleTimeRange.x, idleTimeRange.y);
+                }
+                else
+                {
+                    timer -= Time.deltaTime;
+                }
+            }
+        }
+
+        private void IsPsychic()
+        {
+            GoToPlayer();
+        }
+
+        private Vector3 GetRandomPoint(float distance, int layermask)
+        {
+            Vector3 randomPoint = UnityEngine.Random.insideUnitSphere * distance + this.transform.position; ;
+
+            NavMeshHit navHit;
+            NavMesh.SamplePosition(randomPoint, out navHit, distance, layermask);
+
+            return navHit.position;
+        }
+
+        public void ScaleVision(float scale)
+        {
+            currentVision = visionRange * scale;
+        }
+
+        private int GetCurrentNavArea()
+        {
+            NavMeshHit navHit;
+            nav.SamplePathPosition(-1, 0.0f, out navHit);
+
+            return navHit.mask;
+        }
+    }
+}
diff --git a/Assets/Scripts/Pet/PetAttackMovement.cs.meta b/Assets/Scripts/Pet/PetAttackMovement.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e1cb7495c0bedf15849ec684ead5446a0d3888fd
--- /dev/null
+++ b/Assets/Scripts/Pet/PetAttackMovement.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9abe5aa58720aad4096c73ca8d58d6b4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Pet/PetMovement.cs b/Assets/Scripts/Pet/PetMovement.cs
new file mode 100644
index 0000000000000000000000000000000000000000..830bd61a0086d81a7d5c9bb90b4d2b2e97749061
--- /dev/null
+++ b/Assets/Scripts/Pet/PetMovement.cs
@@ -0,0 +1,191 @@
+using UnityEngine;
+using System.Collections;
+using UnityEngine.AI;
+using UnityEngine.Events;
+using System;
+
+namespace Nightmare
+{
+    public class PetMovement : PausibleObject
+    {
+        public float visionRange = 10f;
+        public float hearingRange = 20f;
+        public float wanderDistance = 10f;
+        public Vector2 idleTimeRange;
+        [Range(0f, 1f)]
+        public float psychicLevels = 0.2f;
+
+        float currentVision;
+        Transform player;
+        Animator anim;
+        PlayerHealth playerHealth;
+        PetHealth petHealth;
+        NavMeshAgent nav;
+        public float timer = 0f;
+
+        void Awake()
+        {
+            anim = GetComponent<Animator>();
+            player = GameObject.FindGameObjectWithTag("Player").transform;
+            playerHealth = player.GetComponent<PlayerHealth>();
+            petHealth = GetComponent<PetHealth>();
+            nav = GetComponent<NavMeshAgent>();
+
+            StartPausible();
+        }
+
+        void OnEnable()
+        {
+            nav.enabled = true;
+            ClearPath();
+            ScaleVision(1f);
+            IsPsychic();
+            timer = 0f;
+        }
+
+        void ClearPath()
+        {
+            if (nav.hasPath)
+                nav.ResetPath();
+        }
+
+        void Update()
+        {
+            if (!isPaused)
+            {
+                // If both the enemy and the player have health left...
+                if (petHealth.CurrentHealth() > 0 && playerHealth.currentHealth > 0)
+                {
+                    LookForPlayer();
+                    WanderOrIdle();
+                }
+                else
+                {
+                    nav.enabled = false;
+                }
+            }
+        }
+
+        void OnDestroy()
+        {
+            nav.enabled = false;
+            StopPausible();
+        }
+
+        public override void OnPause()
+        {
+            if (nav.hasPath)
+                nav.isStopped = true;
+        }
+
+        public override void OnUnPause()
+        {
+            if (nav.hasPath)
+                nav.isStopped = false;
+        }
+
+        private void LookForPlayer()
+        {
+            float distanceToPlayer = Vector3.Distance(transform.position, player.position);
+
+            // Define the stopping distance
+            float stoppingDistance = 3f; // Adjust this value as needed
+
+            // If the distance to the player is less than or equal to the stopping distance, clear the path
+            if (distanceToPlayer <= stoppingDistance)
+            {
+                anim.SetBool("IsNearPlayer", true); // IsNearPlayer parameter is false
+                ClearPath();
+            }
+            // Otherwise, continue moving towards the player
+            else
+            {
+                anim.SetBool("IsNearPlayer", false); // IsNearPlayer parameter is true
+                GoToPosition(player.position);
+            }
+        }
+
+        private void HearPoint(Vector3 position)
+        {
+            TestSense(position, hearingRange);
+        }
+
+        private void TestSense(Vector3 position, float senseRange)
+        {
+            if (Vector3.Distance(this.transform.position, position) <= senseRange)
+            {
+                GoToPosition(position);
+            }
+        }
+
+        public void GoToPlayer()
+        {
+            GoToPosition(player.position);
+        }
+
+        private void GoToPosition(Vector3 position)
+        {
+            timer = -1f;
+            if (!petHealth.IsDead())
+            {
+                SetDestination(position);
+            }
+        }
+
+        private void SetDestination(Vector3 position)
+        {
+            if (nav.isOnNavMesh)
+            {
+                nav.SetDestination(position);
+            }
+        }
+
+        private void WanderOrIdle()
+        {
+            if (!nav.hasPath)
+            {
+                if (timer <= 0f)
+                {
+                    SetDestination(GetRandomPoint(wanderDistance, 5));
+                    if (nav.pathStatus == NavMeshPathStatus.PathInvalid)
+                    {
+                        ClearPath();
+                    }
+                    timer = UnityEngine.Random.Range(idleTimeRange.x, idleTimeRange.y);
+                }
+                else
+                {
+                    timer -= Time.deltaTime;
+                }
+            }
+        }
+
+        private void IsPsychic()
+        {
+            GoToPlayer();
+        }
+
+        private Vector3 GetRandomPoint(float distance, int layermask)
+        {
+            Vector3 randomPoint = UnityEngine.Random.insideUnitSphere * distance + this.transform.position; ;
+
+            NavMeshHit navHit;
+            NavMesh.SamplePosition(randomPoint, out navHit, distance, layermask);
+
+            return navHit.position;
+        }
+
+        public void ScaleVision(float scale)
+        {
+            currentVision = visionRange * scale;
+        }
+
+        private int GetCurrentNavArea()
+        {
+            NavMeshHit navHit;
+            nav.SamplePathPosition(-1, 0.0f, out navHit);
+
+            return navHit.mask;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Pet/PetMovement.cs.meta b/Assets/Scripts/Pet/PetMovement.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..551f0c7bd56795f71b85de3fe5bf88575e519ac4
--- /dev/null
+++ b/Assets/Scripts/Pet/PetMovement.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 12d6f44aa51f99b4bb2f251f9f07e7db
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: