diff --git a/Assets/Prefabs/Pet/Buff.prefab b/Assets/Prefabs/Pet/Buff.prefab
index 677976de48893b94a6bcae98596a79881225a308..5f54aa726d87b2e398f216433c49981a6bac3e6f 100644
--- a/Assets/Prefabs/Pet/Buff.prefab
+++ b/Assets/Prefabs/Pet/Buff.prefab
@@ -120,6 +120,10 @@ PrefabInstance:
       propertyPath: m_Layer
       value: 6
       objectReference: {fileID: 0}
+    - target: {fileID: 919132149155446097, guid: 61658b50bcfbe8640ac586f05f6340c4, type: 3}
+      propertyPath: m_TagString
+      value: Buff
+      objectReference: {fileID: 0}
     - target: {fileID: 2546548812389723016, guid: 61658b50bcfbe8640ac586f05f6340c4, type: 3}
       propertyPath: m_Layer
       value: 6
diff --git a/Assets/Prefabs/Pet/Fighter.prefab b/Assets/Prefabs/Pet/Fighter.prefab
index c004d5a9269cc18a75cc971bec0625b08235c4cc..532a6883fbc1bbf77ddfb7753410f62df8744b15 100644
--- a/Assets/Prefabs/Pet/Fighter.prefab
+++ b/Assets/Prefabs/Pet/Fighter.prefab
@@ -5240,7 +5240,7 @@ GameObject:
   - component: {fileID: 1125665594388806363}
   m_Layer: 6
   m_Name: Fighter
-  m_TagString: Pet
+  m_TagString: Fighter
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
@@ -5354,6 +5354,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   target: {fileID: 0}
+  previousTarget: {fileID: 0}
   targetCandidates: []
   pet: {fileID: 4851026634604710378}
 --- !u!136 &3236930153314902909
diff --git a/Assets/Prefabs/Pet/Healer.prefab b/Assets/Prefabs/Pet/Healer.prefab
index 64e02caa703275cf6b274156eee14febbb361768..d703b580f0369570620c14a09ff006143c5ea5d8 100644
--- a/Assets/Prefabs/Pet/Healer.prefab
+++ b/Assets/Prefabs/Pet/Healer.prefab
@@ -122,7 +122,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 919132149155446097, guid: 46f311046d2104da8b56be3d0a49a119, type: 3}
       propertyPath: m_TagString
-      value: Pet
+      value: Healer
       objectReference: {fileID: 0}
     - target: {fileID: 2546548812389723016, guid: 46f311046d2104da8b56be3d0a49a119, type: 3}
       propertyPath: m_Layer
diff --git a/Assets/Scenes/Level01.unity b/Assets/Scenes/Level01.unity
index c9bbeec0775ff33d4e5942f651a5e5805dee4085..eda8a9dea05008eb616b3f7057cea9178ba35042 100644
--- a/Assets/Scenes/Level01.unity
+++ b/Assets/Scenes/Level01.unity
@@ -38,7 +38,7 @@ RenderSettings:
   m_ReflectionIntensity: 1
   m_CustomReflection: {fileID: 8900000, guid: a7bed68887a07e34394d4191b3081359, type: 3}
   m_Sun: {fileID: 0}
-  m_IndirectSpecularColor: {r: 0.13346876, g: 0.18373644, b: 0.2600042, a: 1}
+  m_IndirectSpecularColor: {r: 0.13346848, g: 0.18373615, b: 0.26000363, a: 1}
   m_UseRadianceAmbientProbe: 0
 --- !u!157 &4
 LightmapSettings:
@@ -1473,7 +1473,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: c32067ea884548644b13cf9baddd4573, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  startingHealth: 100
+  startingHealth: 300
   currentHealth: 0
   healthSlider: {fileID: 1027680864}
   damageImage: {fileID: 582750447}
diff --git a/Assets/Scripts/Enemy/EnemyAttack.cs b/Assets/Scripts/Enemy/EnemyAttack.cs
index 663719b31792ac67cc6c8678ef0b611484fdaf75..7a95426b0de0aa9de8dbc031048b28758033116a 100644
--- a/Assets/Scripts/Enemy/EnemyAttack.cs
+++ b/Assets/Scripts/Enemy/EnemyAttack.cs
@@ -1,5 +1,7 @@
 using UnityEngine;
 using System.Collections;
+using UnityEngine.UIElements;
+using System.Linq;
 
 namespace Nightmare
 {
@@ -14,10 +16,13 @@ namespace Nightmare
         AudioSource swordAudio;
 
         GameObject player;
+        GameObject petObject;
+        PetHealth petObjectHealth;
         PlayerHealth playerHealth;
         EnemyHealth enemyHealth;
         public ShotgunEnemyShooting shotgunEnemyShooting;
         bool playerInRange;
+        bool goodPetInRange;
         float timer;
 
         void Awake ()
@@ -54,6 +59,14 @@ namespace Nightmare
                 // ... the player is in range.
                 playerInRange = true;
             }
+            else if(other.gameObject.CompareTag("Healer") || other.gameObject.CompareTag("Fighter"))
+            {
+                goodPetInRange = true;
+                petObject = other.gameObject;
+                petObjectHealth = petObject.GetComponent<PetHealth>();
+
+            }
+           
         }
 
         void OnTriggerExit (Collider other)
@@ -64,13 +77,43 @@ namespace Nightmare
                 // ... the player is no longer in range.
                 playerInRange = false;
             }
+            else if(other.gameObject.CompareTag("Healer") || other.gameObject.CompareTag("Fighter")){
+                goodPetInRange = false;
+                petObject = null;
+                petObjectHealth = null;
+            }
+        }
+        void findNearbyPet()
+        {
+            GameObject[] goodPets = GameObject.FindGameObjectsWithTag("Healer");
+            GameObject[] fighter = GameObject.FindGameObjectsWithTag("Fighter");
+            goodPets = goodPets.Concat(fighter).ToArray();
+            float shortestDistance;
+            float temp;
+            if(goodPets.Length > 0)
+            {
+                shortestDistance = Vector3.Distance(transform.position, goodPets[0].GetComponent<Transform>().position);
+                foreach(GameObject pet in goodPets)
+                {
+                    temp = Vector3.Distance(transform.position, pet.GetComponent<Transform>().position);
+                    if(temp < shortestDistance)
+                    {
+                        shortestDistance = temp;
+                        petObject = pet;
+                        petObjectHealth = petObject.GetComponent<PetHealth>();
+
+                    }
+                }
+            }
+    
         }
 
         void Update ()
         {
             if (isPaused)
                 return;
-            
+
+            findNearbyPet();
             // Add the time since Update was last called to the timer.
             timer += Time.deltaTime;
 
@@ -81,10 +124,12 @@ namespace Nightmare
                 if (shotgunEnemyShooting)
                 {
                     // Calculate the distance between the enemy and the player
-                    float distanceToPlayer = Vector3.Distance(transform.position, player.transform.position);
-                    if (distanceToPlayer < 10) ShotgunAttack();
+                    ShotgunAttack();
+
                 }
-                else if (playerInRange) SwordAttack();
+                else if (playerInRange || goodPetInRange) SwordAttack();
+                
+      
             }
 
             // If the player has zero or less health...
@@ -99,16 +144,32 @@ namespace Nightmare
         {
             // Reset the timer.
             timer = 0f;
-
-            // If the player has health to lose...
-            if(playerHealth.currentHealth > 0)
+            float distanceToPlayer = Vector3.Distance(transform.position, player.transform.position);
+            float distanceToPet;
+            
+            if (distanceToPlayer < 10)
             {
-                // Rotate the enemy to face the player
-                transform.LookAt(player.transform.position);
+                // If the player has health to lose...
+                if (playerHealth.currentHealth > 0)
+                {
+                    // Rotate the enemy to face the player
+                    transform.LookAt(player.transform.position);
 
-                // ... damage the player.
-                shotgunEnemyShooting.Shoot(attackDamage);
+                    // ... damage the player.
+                    shotgunEnemyShooting.Shoot(attackDamage);
+                }
+            }
+            else if(petObject != null)
+            {
+                distanceToPet = Vector3.Distance(transform.position, petObject.transform.position);
+                if (petObject.GetComponent<PetHealth>().currentHealth > 0 && distanceToPet < 10)
+                {
+                    transform.LookAt(petObject.transform.position);
+                    shotgunEnemyShooting.Shoot(attackDamage); 
+                }
             }
+            
+
         }
 
         void SwordAttack()
@@ -117,14 +178,30 @@ namespace Nightmare
             timer = 0f;
 
             // If the player has health to lose...
-            if (playerHealth.currentHealth > 0)
+            if (playerHealth != null && playerHealth.currentHealth > 0)
             {
                 // ... damage the player.
                 // If sword
-                if (swordAnim) swordAnim.SetTrigger("Attack");
-                if (swordAudio) swordAudio.Play();
-                playerHealth.TakeDamage(attackDamage);
+                if (playerInRange)
+                {
+                    if (swordAnim) swordAnim.SetTrigger("Attack");
+                    if (swordAudio) swordAudio.Play();
+                    playerHealth.TakeDamage(attackDamage);
+                }
+               //If the pet has health to lose
+            }
+            else if(petObjectHealth != null && petObjectHealth.currentHealth > 0)
+            {
+                // and in range
+              if (goodPetInRange)
+                {
+                    if (swordAnim) swordAnim.SetTrigger("Attack");
+                    if (swordAudio) swordAudio.Play();
+                    petObjectHealth.TakeDamage(attackDamage);
+
+                }
             }
+
         }
     }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Enemy/JenderalAbility.cs b/Assets/Scripts/Enemy/JenderalAbility.cs
index de72943228f5f6cc0a2bc10a0bad9d5eebfd89ac..94409326d83dd026d92de8b051e78f9475ef8753 100644
--- a/Assets/Scripts/Enemy/JenderalAbility.cs
+++ b/Assets/Scripts/Enemy/JenderalAbility.cs
@@ -3,12 +3,17 @@ using System.Collections.Generic;
 using UnityEngine;
 
 using Nightmare;
+using System.Linq;
+
 public class JenderalAbility : MonoBehaviour
 {
     Animator anim;
     GameObject player;
+    GameObject petObject;
     PlayerHealth playerHealth;
+    PetHealth petObjectHealth;
     bool playerInRange;
+    bool petInRange;
     float timer;
     public int damageOvertime = 10;
     public float abilityRadius = 5f;
@@ -27,9 +32,10 @@ public class JenderalAbility : MonoBehaviour
     {
         // Check if player is in radius of its unique ability
         CheckPlayerInRange();
+        CheckPetInRange();
         timer += Time.deltaTime;
 
-        if (timer >= 1 && playerInRange) 
+        if (timer >= 1 && (playerInRange || petInRange)) 
         {
             Ability();
         }
@@ -39,6 +45,32 @@ public class JenderalAbility : MonoBehaviour
             anim.SetTrigger("PlayerDead");
         }
     }
+    void findNearbyPet()
+    {
+        GameObject[] goodPets;
+        GameObject[] fighter;
+        goodPets = GameObject.FindGameObjectsWithTag("Healer");
+        fighter = GameObject.FindGameObjectsWithTag("Fighter");
+        goodPets = goodPets.Concat(fighter).ToArray();
+        float shortestDistance;
+        float temp;
+        if (goodPets != null && goodPets.Length > 0)
+        {
+            shortestDistance = Vector3.Distance(transform.position, goodPets[0].GetComponent<Transform>().position);
+            foreach (GameObject pet in goodPets)
+            {
+                temp = Vector3.Distance(transform.position, pet.GetComponent<Transform>().position);
+                if (temp < shortestDistance)
+                {
+                    shortestDistance = temp;
+                    petObject = pet;
+                    petObjectHealth = petObject.GetComponent<PetHealth>();
+
+                }
+            }
+        }
+
+    }
 
     private void CheckPlayerInRange()
     {
@@ -57,16 +89,56 @@ public class JenderalAbility : MonoBehaviour
         }
     }
 
+    private void CheckPetInRange()
+    {
+        findNearbyPet();
+        if(petObject != null)
+        {
+            float distance = Mathf.Sqrt(Mathf.Pow(transform.position.x - petObject.transform.position.x, 2) +
+            Mathf.Pow(transform.position.y - petObject.transform.position.y, 2) +
+            Mathf.Pow(transform.position.z - petObject.transform.position.z, 2));
+
+
+            if (distance <= abilityRadius)
+            {
+                petInRange = true;
+            }
+            else
+            {
+                petInRange = false;
+            }
+        }
+
+
+    }
+
+
+
+
     private void Ability()
     {
         // Reset timer
         timer = 0f;
 
-        // If the player has health to lose...
-        if (playerHealth.currentHealth > 0)
+        // If the player in range
+        if (playerInRange)
         {
-            // ... damage the player.
-            playerHealth.TakeDamage(damageOvertime);
+            // if the player has health to lose
+            if (playerHealth.currentHealth > 0)
+            {
+                // ... damage the player.
+                playerHealth.TakeDamage(damageOvertime);
+            }
+            // if the pet in range
+        }else if (petInRange)
+        {
+            // if the pet has health to lose
+            if(petObjectHealth.currentHealth > 0)
+            {
+                // ... damage the pet
+                petObjectHealth.TakeDamage(damageOvertime);
+            }
         }
+
     }
 }
diff --git a/Assets/Scripts/Enemy/RajaAbility.cs b/Assets/Scripts/Enemy/RajaAbility.cs
index f26e31ea3ab05848108928130c52202a53523b77..07b7ec629723217b428dc4b40a7cd3c1d7cf37e8 100644
--- a/Assets/Scripts/Enemy/RajaAbility.cs
+++ b/Assets/Scripts/Enemy/RajaAbility.cs
@@ -2,15 +2,21 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using Nightmare;
+using System.Linq;
+using UnityEngine.AI;
 
 public class RajaAbility : MonoBehaviour
 {
     Animator anim;
     GameObject player;
     PlayerHealth playerHealth;
+    GameObject petObject;
+    PetHealth petObjectHealth;
+    NavMeshAgent navmeshPet;
     PlayerMovement playerMovement;
     WeaponManager weaponManager;
     bool playerInRange;
+    bool petInRange;
     float timer;
     public int damageOvertime = 10;
     public float abilityRadius = 7f;
@@ -37,9 +43,10 @@ public class RajaAbility : MonoBehaviour
     {
         // Check if player is in radius of its unique ability
         CheckPlayerInRange();
+        CheckPetInRange();
         timer += Time.deltaTime;
 
-        if (timer >= 1 && playerInRange)
+        if (timer >= 1 && (playerInRange || petInRange))
         {
             Ability();
         }
@@ -48,6 +55,23 @@ public class RajaAbility : MonoBehaviour
         {
             playerMovement.speed = playerMovement.originSpeed;
         }
+        if (!petInRange && petObject != null)
+        {
+            if (petObject.GetComponent<Follow>() != null)
+            {
+                navmeshPet.speed = petObject.GetComponent<Follow>().initialSpeed;
+            }
+            else if (petObject.GetComponent<FighterMove>() != null)
+            {
+                navmeshPet.speed = petObject.GetComponent<FighterMove>().initialSpeed;
+            }
+
+            if (petObject.GetComponent<FighterAttack>() != null)
+            {
+                petObject.GetComponent<FighterAttack>().currentDamage = petObject.GetComponent<FighterAttack>().initialDamage;
+            }
+
+        }
 
         if (playerHealth.currentHealth <= 0)
         {
@@ -55,6 +79,52 @@ public class RajaAbility : MonoBehaviour
         }
     }
 
+    void findNearbyPet()
+    {
+        GameObject[] goodPets = GameObject.FindGameObjectsWithTag("Healer");
+        GameObject[] fighter = GameObject.FindGameObjectsWithTag("Fighter");
+        goodPets = goodPets.Concat(fighter).ToArray();
+        float shortestDistance;
+        float temp;
+        if (goodPets.Length > 0)
+        {
+            shortestDistance = Vector3.Distance(transform.position, goodPets[0].GetComponent<Transform>().position);
+            foreach (GameObject pet in goodPets)
+            {
+                temp = Vector3.Distance(transform.position, pet.GetComponent<Transform>().position);
+                if (temp < shortestDistance)
+                {
+                    shortestDistance = temp;
+                    petObject = pet;
+                    petObjectHealth = petObject.GetComponent<PetHealth>();
+                    navmeshPet = petObject.GetComponent<NavMeshAgent>();
+                }
+            }
+        }
+
+    }
+    private void CheckPetInRange()
+    {
+        findNearbyPet();
+        if(petObject != null)
+        {
+            float distance = Mathf.Sqrt(Mathf.Pow(transform.position.x - petObject.transform.position.x, 2) +
+            Mathf.Pow(transform.position.y - petObject.transform.position.y, 2) +
+            Mathf.Pow(transform.position.z - petObject.transform.position.z, 2));
+
+
+            if (distance <= abilityRadius)
+            {
+                petInRange = true;
+            }
+            else
+            {
+                petInRange = false;
+            }
+        }
+
+
+    }
     private void CheckPlayerInRange()
     {
         float distance = Mathf.Sqrt(Mathf.Pow(transform.position.x - player.transform.position.x, 2) +
@@ -78,17 +148,32 @@ public class RajaAbility : MonoBehaviour
         timer = 0f;
 
         // If the player has health to lose...
-        if (playerHealth.currentHealth > 0)
+        if (playerHealth.currentHealth > 0 && playerInRange)
         {
             // ... damage the player.
             playerHealth.TakeDamage(damageOvertime);
-            if (!playerMovement.isTwoTimeSpeed){
+            if (!playerMovement.isTwoTimeSpeed)
+            {
                 playerMovement.speed -= playerMovement.speed * 0.2f;
             }
-            if (!weaponManager.cheatOn){
+            if (!weaponManager.cheatOn)
+            {
                 weaponManager.baseDamage -= weaponManager.baseDamage * 0.2f;
             }
         }
+        if (petObjectHealth.currentHealth > 0 && petInRange)
+        {
+            petObjectHealth.TakeDamage(damageOvertime);
+            navmeshPet.speed -= navmeshPet.speed * 0.2f;
+
+            if (petObject.GetComponent<FighterAttack>() != null)
+            {
+                petObject.GetComponent<FighterAttack>().currentDamage -= 0.2 * petObject.GetComponent<FighterAttack>().currentDamage;
+
+            }
 
+
+        }
     }
-}
\ No newline at end of file
+}
+
diff --git a/Assets/Scripts/Pet/FighterAttack.cs b/Assets/Scripts/Pet/FighterAttack.cs
index 274cad8b782c5fe46d27bc8e7079e5efbf80dddf..138fd4b092d34e09ef00d88f8d21736f175b3a86 100644
--- a/Assets/Scripts/Pet/FighterAttack.cs
+++ b/Assets/Scripts/Pet/FighterAttack.cs
@@ -7,7 +7,8 @@ using static UnityEngine.GraphicsBuffer;
 public class FighterAttack : PausibleObject
 {
     public float intervalAttack = 0.7f;
-    public int damage = 3;
+    public double initialDamage = 5;
+    public double currentDamage;
     PetHealth health;
     GameObject enemy;
     Vector3 hitpoint;
@@ -19,6 +20,7 @@ public class FighterAttack : PausibleObject
         health = GetComponent<PetHealth>();
         anim = GetComponent<Animator>();
         StartPausible();
+        currentDamage = initialDamage;
         
     }
     void OnDestroy()
@@ -54,6 +56,7 @@ public class FighterAttack : PausibleObject
         }
 
     }
+   
 
     IEnumerator ResetAttackAnimation()
     {
@@ -72,7 +75,7 @@ public class FighterAttack : PausibleObject
                 enemyCurrentHealth = (int)enemyHealth.CurrentHealth();
                 if (enemyCurrentHealth > 0)
                 {
-                   enemyHealth.TakeDamage(damage, hitpoint);
+                   enemyHealth.TakeDamage(currentDamage, hitpoint);
                    anim.SetBool("IsAttacking", true);
                    StartCoroutine(ResetAttackAnimation());
                 }
diff --git a/Assets/Scripts/Pet/FighterMove.cs b/Assets/Scripts/Pet/FighterMove.cs
index 1399a83651b6853af127b374a1e137f323246dbc..76aa15624684556c2e99606652efdea1e003953d 100644
--- a/Assets/Scripts/Pet/FighterMove.cs
+++ b/Assets/Scripts/Pet/FighterMove.cs
@@ -7,40 +7,60 @@ using UnityEngine.AI;
 public class FighterMove : MonoBehaviour
 {
     public GameObject target;
+    public GameObject previousTarget;
     public GameObject[] targetCandidates;
     public NavMeshAgent pet;
     PetHealth goodPetHealth;
+    public float initialSpeed;
 
     void Start()
     {
         pet = GetComponent<NavMeshAgent>();
         goodPetHealth = GetComponent<PetHealth>();
+        initialSpeed = pet.speed;
   
     }
 
-    void Update()
+    void findNearbyEnermy()
     {
-        if (goodPetHealth != null && !goodPetHealth.isDead())
+        targetCandidates = GameObject.FindGameObjectsWithTag("Enemy");
+        if(targetCandidates.Length > 0)
         {
-            targetCandidates = GameObject.FindGameObjectsWithTag("Enemy");
-            if (targetCandidates.Length > 0)
+            target = targetCandidates[0];
+            float shortestDistance = Vector3.Distance(this.transform.position, target.transform.position);
+            float current;
+            for (int i = 0; i < targetCandidates.Length; i++)
             {
-                target = targetCandidates[0];
-                float shortestDistance = Vector3.Distance(this.transform.position, target.transform.position);
-                float current;
-                for (int i = 0; i < targetCandidates.Length; i++)
+                current = Vector3.Distance(this.transform.position, targetCandidates[i].transform.position);
+                if (current > shortestDistance)
                 {
-                    current = Vector3.Distance(this.transform.position, targetCandidates[i].transform.position);
-                    if (current > shortestDistance)
-                    {
-                        shortestDistance = current;
-                        target = targetCandidates[i];
-                    }
+                    shortestDistance = current;
+                    target = targetCandidates[i];
                 }
+            }
+        }
+
+    }
+
+    void Update()
+    {
+        if (goodPetHealth != null && !goodPetHealth.isDead())
+        {
+            if (previousTarget != null && previousTarget.GetComponent<EnemyHealth>().currentHealth > 0)
+            {
+                pet.SetDestination(previousTarget.transform.position);
+            }
+            else
+            {
+                findNearbyEnermy();
                 pet.SetDestination(target.transform.position);
+                previousTarget = target;
             }
         }
 
+
+
+
         
     }
 }
diff --git a/Assets/Scripts/Pet/Follow.cs b/Assets/Scripts/Pet/Follow.cs
index b46481f9dbc617daf62f46374a92e08393a9d0f3..5b2330e8998802ace6241a608465df6ed87a388f 100644
--- a/Assets/Scripts/Pet/Follow.cs
+++ b/Assets/Scripts/Pet/Follow.cs
@@ -10,12 +10,14 @@ public class Follow : MonoBehaviour
     NavMeshAgent pet;
     public Transform player;
     PetHealth petHealth;
+    public float initialSpeed;
 
     void Start()
     {
         petHealth = GetComponent<PetHealth>();
         pet = GetComponent<NavMeshAgent>();
         player = GameObject.FindGameObjectWithTag("Player").transform;
+        initialSpeed = (float)pet.speed;
 
     }
     // Update is called once per frame
diff --git a/Assets/Scripts/Pet/GoodPetHealth.cs b/Assets/Scripts/Pet/GoodPetHealth.cs
index 8d61d145930524540fce69f44447282eb359960b..86b7a47f20090509e962e5325d0e152884a7d450 100644
--- a/Assets/Scripts/Pet/GoodPetHealth.cs
+++ b/Assets/Scripts/Pet/GoodPetHealth.cs
@@ -28,6 +28,7 @@ public class PetHealth : MonoBehaviour
         {
             currentHealth -= amount;
             anim.SetBool("IsAttacked", true);
+            Debug.Log("update health pet: " + currentHealth);
             StartCoroutine(ResetIsAttacked());
         }
 
@@ -60,6 +61,8 @@ public class PetHealth : MonoBehaviour
 
     void Update()
     {
+        
+        
         if(playerHealth.currentHealth <= 0)
         {
             currentHealth = 0;
diff --git a/Assets/Scripts/Pet/Healer.cs b/Assets/Scripts/Pet/Healer.cs
index 17bdc4c188cea64d3061b1ec98cbffabcbc92a04..7a4a3918e382a21d054b6648a6d1e00317c7f913 100644
--- a/Assets/Scripts/Pet/Healer.cs
+++ b/Assets/Scripts/Pet/Healer.cs
@@ -10,16 +10,14 @@ public class PetHealer : MonoBehaviour
     public float healingInterval = 2;
     void Start()
     {
-        playerHealth = GetComponentInParent<PlayerHealth>();
+        playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerHealth>();
         StartCoroutine(healPlayer());
-        Debug.Log(playerHealth.currentHealth);
     }
 
     private IEnumerator healPlayer()
     {
         while (true)
         {
-            Debug.Log(playerHealth.currentHealth);
             if (playerHealth.currentHealth > 0 && playerHealth.currentHealth < playerHealth.startingHealth)
             {
                 playerHealth.GotHealed(healingAmount);
diff --git a/Assets/Scripts/Weapon/ShotgunEnemyShooting.cs b/Assets/Scripts/Weapon/ShotgunEnemyShooting.cs
index e0919c4399faee2c2561b4308dd7da19936f9a83..4a48fa0c98f48d8105cb7628c5fc2308d5895900 100644
--- a/Assets/Scripts/Weapon/ShotgunEnemyShooting.cs
+++ b/Assets/Scripts/Weapon/ShotgunEnemyShooting.cs
@@ -97,13 +97,20 @@ public class ShotgunEnemyShooting : PausibleObject
             {
                 // Try and find an PlayerHealth script on the gameobject hit.
                 PlayerHealth playerHealth = shootHit.collider.GetComponent<PlayerHealth>();
-
+                PetHealth petHealth = shootHit.collider.GetComponent<PetHealth>();
+                double damage;
                 if (playerHealth != null)
                 {
                     // the damage taken is based on the distance from the player to the enemy
-                    double damage = attackDamage - Vector3.Distance(transform.position, playerHealth.transform.position);
+                    damage = attackDamage - Vector3.Distance(transform.position, playerHealth.transform.position);
                     playerHealth.TakeDamage(damage);
                 }
+                // check if there is pet nearby, if no player
+                else if(petHealth != null)
+                {
+                    damage = attackDamage - Vector3.Distance(transform.position, petHealth.transform.position);
+                    petHealth.TakeDamage(damage);
+                }
 
                 // Set the second position of the line renderer to the point the raycast hit.
                 gunLines[i].SetPosition(1, shootHit.point);
diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt
index e3269c93da0696cc9800511d9c9b30bc2f3c6d69..bc915f164c30c08772499ce93c9d96800b8e9c53 100644
--- a/ProjectSettings/ProjectVersion.txt
+++ b/ProjectSettings/ProjectVersion.txt
@@ -1,2 +1,2 @@
-m_EditorVersion: 2022.3.25f1
-m_EditorVersionWithRevision: 2022.3.25f1 (530ae0ba3889)
+m_EditorVersion: 2022.3.24f1
+m_EditorVersionWithRevision: 2022.3.24f1 (334eb2a0b267)
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
index c65f6a552f729f54317fa2f3415532612482a352..af22911f2a88b799c0521af5257fd116fd1c4c74 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -14,6 +14,9 @@ TagManager:
   - Sword
   - WeaponManager
   - Pet
+  - Buff
+  - Fighter
+  - Healer
   layers:
   - Default
   - TransparentFX