diff --git a/Assets/Prefabs/Pet/Fighter.prefab b/Assets/Prefabs/Pet/Fighter.prefab
index 680dedd60bce4c637b2d3cf0809553fe3807e291..0987b18112698cf7ac7961da5c38a9576af8995f 100644
--- a/Assets/Prefabs/Pet/Fighter.prefab
+++ b/Assets/Prefabs/Pet/Fighter.prefab
@@ -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/Scenes/Level01.unity b/Assets/Scenes/Level01.unity
index d30d5567fee988addbbaf10e3f0225b4ca56989a..67f96892856887593a13e13525ded304cf62fa0c 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:
@@ -1527,7 +1527,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 68fb0dde382be48e5ceb1d3e8098d7115eb9caae..e46f375611fa6c339a37497ced3e6d7dc6749e51 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,19 +16,22 @@ 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 ()
+        void Awake()
         {
             // Setting up the references.
-            player = GameObject.FindGameObjectWithTag ("Player");
-            playerHealth = player.GetComponent <PlayerHealth> ();
+            player = GameObject.FindGameObjectWithTag("Player");
+            playerHealth = player.GetComponent<PlayerHealth>();
             enemyHealth = GetComponent<EnemyHealth>();
-            anim = GetComponent <Animator> ();
+            anim = GetComponent<Animator>();
             Transform swingingSword = transform.Find("Sword");
             if (swingingSword != null)
             {
@@ -46,69 +51,126 @@ namespace Nightmare
             StopPausible();
         }
 
-        void OnTriggerEnter (Collider other)
+        void OnTriggerEnter(Collider other)
         {
             // If the entering collider is the player...
-            if(other.gameObject == player)
+            if (other.gameObject == player)
             {
                 // ... the player is in range.
                 playerInRange = true;
             }
+            else if (other.gameObject.CompareTag("PetHealer") || other.gameObject.CompareTag("PetFighter"))
+            {
+                goodPetInRange = true;
+                petObject = other.gameObject;
+                petObjectHealth = petObject.GetComponent<PetHealth>();
+
+            }
+
         }
 
-        void OnTriggerExit (Collider other)
+        void OnTriggerExit(Collider other)
         {
             // If the exiting collider is the player...
-            if(other.gameObject == player)
+            if (other.gameObject == player)
             {
                 // ... the player is no longer in range.
                 playerInRange = false;
             }
+            else if (other.gameObject.CompareTag("PetHealer") || other.gameObject.CompareTag("PetFighter"))
+            {
+                goodPetInRange = false;
+                petObject = null;
+                petObjectHealth = null;
+            }
+        }
+        void findNearbyPet()
+        {
+            GameObject[] goodPets = GameObject.FindGameObjectsWithTag("PetHealer");
+            GameObject[] fighter = GameObject.FindGameObjectsWithTag("PetFighter");
+            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 ()
+        void Update()
         {
             if (isPaused)
                 return;
-            
+
+            findNearbyPet();
             // Add the time since Update was last called to the timer.
             timer += Time.deltaTime;
 
             // If the timer exceeds the time between attacks, the player is in range and this enemy is alive...
-            if(timer >= timeBetweenAttacks && enemyHealth.CurrentHealth() > 0)
+            if (timer >= timeBetweenAttacks && enemyHealth.CurrentHealth() > 0)
             {
                 // ... attack.
                 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...
-            if(playerHealth.currentHealth <= 0)
+            if (playerHealth.currentHealth <= 0)
             {
                 // ... tell the animator the player is dead.
-                anim.SetTrigger ("PlayerDead");
+                anim.SetTrigger("PlayerDead");
             }
         }
 
-        void ShotgunAttack ()
+        void ShotgunAttack()
         {
             // Reset the timer.
             timer = 0f;
+            float distanceToPlayer = Vector3.Distance(transform.position, player.transform.position);
+            float distanceToPet;
 
-            // If the player has health to lose...
-            if(playerHealth.currentHealth > 0)
+            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 +179,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..246f6b293cfe8eb1f552fa02c20f80d7e39c27fd 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("PetHealer");
+        fighter = GameObject.FindGameObjectsWithTag("PetFighter");
+        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,57 @@ 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..eaaad180e1e623858517b394ec108b62dd148796 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("PetHealer");
+        GameObject[] fighter = GameObject.FindGameObjectsWithTag("PetFighter");
+        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..3a16f6a4447c1da5aec8f972176270be1e4ca1b1 100644
--- a/Assets/Scripts/Pet/FighterMove.cs
+++ b/Assets/Scripts/Pet/FighterMove.cs
@@ -7,40 +7,64 @@ 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 findNearbyEnermy()
+    {
+        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++)
+            {
+                current = Vector3.Distance(this.transform.position, targetCandidates[i].transform.position);
+                if (current > shortestDistance)
+                {
+                    shortestDistance = current;
+                    target = targetCandidates[i];
+                }
+            }
+        }
+
+    }
+
     void Update()
     {
         if (goodPetHealth != null && !goodPetHealth.isDead())
         {
-            targetCandidates = GameObject.FindGameObjectsWithTag("Enemy");
-            if (targetCandidates.Length > 0)
+            if (previousTarget != null && previousTarget.GetComponent<EnemyHealth>().currentHealth > 0)
+            {
+                pet.SetDestination(previousTarget.transform.position);
+            }
+            else
             {
-                target = targetCandidates[0];
-                float shortestDistance = Vector3.Distance(this.transform.position, target.transform.position);
-                float current;
-                for (int i = 0; i < targetCandidates.Length; i++)
+                findNearbyEnermy();
+                if(target != null)
                 {
-                    current = Vector3.Distance(this.transform.position, targetCandidates[i].transform.position);
-                    if (current > shortestDistance)
-                    {
-                        shortestDistance = current;
-                        target = targetCandidates[i];
-                    }
+                    pet.SetDestination(target.transform.position);
+                    previousTarget = target;
                 }
-                pet.SetDestination(target.transform.position);
+
             }
         }
 
+
+
+
         
     }
 }
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 b1e1705040b9dea1181a17c2ab02dc6066031b1b..c90b7fbfa88659878ad2daf094c6884ec3c43a39 100644
--- a/Assets/Scripts/Pet/GoodPetHealth.cs
+++ b/Assets/Scripts/Pet/GoodPetHealth.cs
@@ -17,8 +17,7 @@ public class PetHealth : MonoBehaviour
 
     void Start()
     {
-        GameObject player = GameObject.FindGameObjectWithTag ("Player");
-        playerHealth = player.GetComponent<PlayerHealth>();
+        playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerHealth>();
         anim = GetComponent<Animator>();
     }
 
@@ -29,6 +28,7 @@ public class PetHealth : MonoBehaviour
         {
             currentHealth -= amount;
             anim.SetBool("IsAttacked", true);
+            Debug.Log("update health pet: " + currentHealth);
             StartCoroutine(ResetIsAttacked());
         }
 
@@ -61,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 42ff1566be8468460855bc8010748e64d5a7e888..7a4a3918e382a21d054b6648a6d1e00317c7f913 100644
--- a/Assets/Scripts/Pet/Healer.cs
+++ b/Assets/Scripts/Pet/Healer.cs
@@ -10,17 +10,14 @@ public class PetHealer : MonoBehaviour
     public float healingInterval = 2;
     void Start()
     {
-        GameObject player = GameObject.FindGameObjectWithTag ("Player");
-        playerHealth = player.GetComponent<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 c40c69a87d0a2e25f27d67bf09edbf85a32e29a9..24cfe158069a4abf64e0f8520b214c34ff2670bb 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 6f95eba278c7b7cfd145693de6917c6dbde38d21..7bb75afe4bbf934353fa9bc71231f722018bfab8 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -14,14 +14,11 @@ TagManager:
   - Sword
   - WeaponManager
   - Pet
-<<<<<<< HEAD
   - Announcement
   - Quest
-=======
   - PetBuff
   - PetFighter
   - PetHealer
->>>>>>> 8795b50a017b190d698825c55eacf05b1fa8024f
   layers:
   - Default
   - TransparentFX