diff --git a/Assets/Scripts/Boss/ElementalHealth.cs b/Assets/Scripts/Boss/ElementalHealth.cs
index a8b995bfcd9b99e4d301f1ccf3f35db26c2addbf..9701e425f19409f99ffb24fb2c3faa2a5fa1137c 100644
--- a/Assets/Scripts/Boss/ElementalHealth.cs
+++ b/Assets/Scripts/Boss/ElementalHealth.cs
@@ -1,6 +1,6 @@
 using UnityEngine;
 
-public class ElementalHealth : MonoBehaviour
+public class ElementalHealth : MonoBehaviour, IEnemyHealthHandler
 {
     public int startingHealth = 500;
     public int currentHealth;
diff --git a/Assets/Scripts/Enemy/EnemyHealth.cs b/Assets/Scripts/Enemy/EnemyHealth.cs
index f9ba8eaa92c649c890242126a0e4f49721b38565..7174196242dec53cb9edb5c6a0ed5b01f080c41d 100644
--- a/Assets/Scripts/Enemy/EnemyHealth.cs
+++ b/Assets/Scripts/Enemy/EnemyHealth.cs
@@ -1,6 +1,6 @@
 using UnityEngine;
 
-public class EnemyHealth : MonoBehaviour
+public class EnemyHealth : MonoBehaviour, IEnemyHealthHandler
 {
     public int startingHealth = 100;
     public int currentHealth;
@@ -9,6 +9,8 @@ public class EnemyHealth : MonoBehaviour
     public AudioClip deathClip;
     public EnemyType enemyType;
 
+    GameObject pet;
+    PetHealth petHealth;
     PetType petType;
     Animator anim;
     AudioSource enemyAudio;
@@ -28,6 +30,12 @@ public class EnemyHealth : MonoBehaviour
 
         currentHealth = startingHealth;
         questTemple = FindObjectOfType<Temple>();
+        pet = GameObject.FindGameObjectWithTag("Pet");
+        if (pet != null)
+        {
+            petHealth = pet.GetComponent<PetHealth>();
+            petType = petHealth.GetPetType();
+        }
     }
 
 
diff --git a/Assets/Scripts/GameOver/GameOverCanvas.cs b/Assets/Scripts/GameOver/GameOverCanvas.cs
index 954256e873de70a01003c1d52c8ffa5607e9d3ff..f5c66899ad28a7d420a8573fbe8d85af2090f50f 100644
--- a/Assets/Scripts/GameOver/GameOverCanvas.cs
+++ b/Assets/Scripts/GameOver/GameOverCanvas.cs
@@ -30,6 +30,7 @@ public class GameOverCanvas : MonoBehaviour
 
     public void OnClickLatestSave()
     {
+        GlobalManager.Instance.IsFirstLoad = true;
         SceneManager.LoadScene("Quest");
         IsSet = true;
     }
diff --git a/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs b/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8c3471976afe9ae3670c7012a23050c757142770
--- /dev/null
+++ b/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+
+public interface IEnemyHealthHandler
+{
+    public void TakeDamage(int amount, Vector3 hitPoint);
+
+    public Transform transform { get; }
+}
diff --git a/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs.meta b/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1270a9ac6c246bcb5d0a18cf29cc233fd808cd64
--- /dev/null
+++ b/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e83f67c5f57e60d42bd9a210c6144486
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Managers/EnemyManager.cs b/Assets/Scripts/Managers/EnemyManager.cs
index 9353fffc9382b1a138403bebc2d0544673b67403..7cc72627406b2c260b61c5dc7deab6882697032e 100644
--- a/Assets/Scripts/Managers/EnemyManager.cs
+++ b/Assets/Scripts/Managers/EnemyManager.cs
@@ -21,7 +21,7 @@ public class EnemyManager : MonoBehaviour
 
     void Start()
     {
-
+        isBoss = GlobalStateManager.Instance.IdxQuest == 3;
     }
 
 
diff --git a/Assets/Scripts/Managers/GlobalManager.cs b/Assets/Scripts/Managers/GlobalManager.cs
index d1ba4a5c914b491152dd1d552152a5b9bddfd5cd..acfa9b7fee806ec87d0912d0a9c9d3ac3dce5e32 100644
--- a/Assets/Scripts/Managers/GlobalManager.cs
+++ b/Assets/Scripts/Managers/GlobalManager.cs
@@ -12,7 +12,7 @@ public class GlobalManager : MonoBehaviour
     private string defaultName = "PLAYER";
     private string playerName;
     private double totalTime;
-    private int volume = 60;
+    private float volume = 60;
 
     public bool isFromEnding = false;
     public string PlayerName
@@ -35,7 +35,7 @@ public class GlobalManager : MonoBehaviour
             totalTime = value;
         }
     }
-    public int Volume
+    public float Volume
     {
         get => volume;
         set
diff --git a/Assets/Scripts/Managers/SettingManager.cs b/Assets/Scripts/Managers/SettingManager.cs
index acf3fe2a38e03ac53448bcf0829a484c9a0b0e5e..b6cfb2e77b353b0383cf359b4a605d262b64682d 100644
--- a/Assets/Scripts/Managers/SettingManager.cs
+++ b/Assets/Scripts/Managers/SettingManager.cs
@@ -21,7 +21,10 @@ public class SettingManager : MonoBehaviour
     void Update()
     {
         GlobalManager.Instance.PlayerName = nameInput.text;
-        GlobalManager.Instance.Volume = (int) (volumeInput.GetComponent<Slider>()).value;  
+        var volume = (volumeInput.GetComponent<Slider>()).value * 0.1f;
+        GlobalManager.Instance.Volume = volume;
+        AudioListener.volume = volume;
+
         Debug.Log("PLAYER NAME: " + GlobalManager.Instance.PlayerName);
         Debug.Log("VOLUME: " + GlobalManager.Instance.Volume);
         if (Input.GetKeyDown(KeyCode.Escape))
diff --git a/Assets/Scripts/Pet/AnglerAttack.cs b/Assets/Scripts/Pet/AnglerAttack.cs
index 7d6d06050fefb41628d15184c16d733b3c0c2e5a..dbc5a79186600e68a0f25a8ce800bfc0fc98e622 100644
--- a/Assets/Scripts/Pet/AnglerAttack.cs
+++ b/Assets/Scripts/Pet/AnglerAttack.cs
@@ -47,7 +47,10 @@ public class AnglerAttack : MonoBehaviour
         shootRay.direction = transform.forward;
         if (timer >= timeBetweenBullets && !GameControl.control.cantShoot && Physics.Raycast(shootRay, out shootHit, range, shootableMask))
         {
-            Shoot();
+            if (!shootHit.collider.CompareTag("Player"))
+            {
+                Shoot();
+            }
         }
 
         if (timer >= timeBetweenBullets * effectsDisplayTime)
diff --git a/Assets/Scripts/Pet/PetMovement.cs b/Assets/Scripts/Pet/PetMovement.cs
index 1cdb399e508686a6dbd7e8441555ff4627c93ce8..7791e1e09a4092e653c5520c41fbc97f555ecf1b 100644
--- a/Assets/Scripts/Pet/PetMovement.cs
+++ b/Assets/Scripts/Pet/PetMovement.cs
@@ -51,6 +51,13 @@ public class PetMovement : MonoBehaviour
                 if (enemyHealth.currentHealth > 0)
                 {
                     nav.SetDestination (enemyPosition.position);
+                    var damping = 2;
+                    var target = enemy.transform;
+
+                    var lookPos = target.position - transform.position;
+                    lookPos.y = 0;
+                    var rotation = Quaternion.LookRotation(lookPos);
+                    transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
                 }
             }
             else
diff --git a/Assets/Scripts/Player/PlayerHealth.cs b/Assets/Scripts/Player/PlayerHealth.cs
index 7ebbd46cac4fccafc6703ac726c7d1f9179cf708..367a65399bbe6de3e4cd7446f617934d40bf609f 100644
--- a/Assets/Scripts/Player/PlayerHealth.cs
+++ b/Assets/Scripts/Player/PlayerHealth.cs
@@ -70,6 +70,8 @@ public class PlayerHealth : MonoBehaviour
 
         damaged = false;
         frozen = false;
+
+        healthSlider.value = currentHealth;
     }
 
     public void TakeDamage(int amount)
diff --git a/Assets/Scripts/Player/PlayerShotGunning.cs b/Assets/Scripts/Player/PlayerShotGunning.cs
index bbcaa887a41f2ca26e7eafd07b20a1d585ab46b3..ef02c547ccf22e0b873a552546a662e6ce860fdf 100644
--- a/Assets/Scripts/Player/PlayerShotGunning.cs
+++ b/Assets/Scripts/Player/PlayerShotGunning.cs
@@ -7,7 +7,7 @@ public class PlayerShotGunning : MonoBehaviour, WeaponHandler
     [SerializeField]
     private float damagePerShot = 30f;
     [SerializeField]
-    private float timeBetweenBullets = 0.15f;
+    private float timeBetweenBullets = 1f;
     [SerializeField]
     private float range = 100f;
     public GameObject prefabEffect;
@@ -22,7 +22,7 @@ public class PlayerShotGunning : MonoBehaviour, WeaponHandler
     Light gunLight;
     readonly float effectsDisplayTime = 0.2f;
 
-    private readonly float maxDist = 8f;
+    private readonly float maxDist = 10f;
 
     int numBullet = 3;
     List<GameObject> effects = new List<GameObject>();
@@ -36,6 +36,13 @@ public class PlayerShotGunning : MonoBehaviour, WeaponHandler
         }
         set
         {
+            var diff = value - level;
+            for (int i = 0; i < diff; i++)
+            {
+                AddBullet();
+                numBullet++;
+            }
+
             level = value;
         }
     }
@@ -116,14 +123,16 @@ public class PlayerShotGunning : MonoBehaviour, WeaponHandler
 
             if (Physics.Raycast(shootRay, out shootHit, range, shootableMask))
             {
-                EnemyHealth enemyHealth = shootHit.collider.GetComponent<EnemyHealth>();
+                IEnemyHealthHandler enemyHealth = shootHit.collider.GetComponent<ElementalHealth>();
+                enemyHealth ??= shootHit.collider.GetComponent< EnemyHealth>(); 
+
                 if (enemyHealth != null)
                 {
                     var dist = Vector3.Distance(shootHit.transform.position, transform.position);
                     if (dist <= maxDist)
                     {
                         Debug.Log("Enemy is On Distance");
-                        int finalDamage = (int)(damagePerShot / Math.Sqrt(range));
+                        int finalDamage = (int)(damagePerShot / Math.Sqrt(dist));
                         enemyHealth.TakeDamage(finalDamage, shootHit.point);
                     }
                     else
diff --git a/Assets/Scripts/Player/Weapons/PlayerArrow.cs b/Assets/Scripts/Player/Weapons/PlayerArrow.cs
index bf6587dc8c990f260d0dd55bbdf47f32a0b1e940..cc98fc3a04b47b6e60304ad51988d5d02ae0fc09 100644
--- a/Assets/Scripts/Player/Weapons/PlayerArrow.cs
+++ b/Assets/Scripts/Player/Weapons/PlayerArrow.cs
@@ -35,18 +35,17 @@ public class PlayerArrow : MonoBehaviour
         if (didHit) return;
 
         didHit = true;
-        if (other.gameObject.TryGetComponent<EnemyHealth>(out var enemyHealth))
+
+        IEnemyHealthHandler enemyHealth = other.gameObject.GetComponent<ElementalHealth>();
+        enemyHealth ??= other.gameObject.GetComponent<EnemyHealth>();
+
+        if (enemyHealth != null)
         {
             var energy = 0.5 * rb.mass * rb.velocity.magnitude * rb.velocity.magnitude;
             var damage = energy * damageMultiplier;
             Debug.Log("damage: "+ damage);
             enemyHealth.TakeDamage((int)damage, enemyHealth.transform.position);
         }
-
-        /*        rb.velocity = Vector3.zero;
-                rb.angularVelocity = Vector3.zero;
-                rb.isKinematic = true;
-                transform.parent = other.transform;*/
         Destroy(gameObject);
     }
 }
diff --git a/Assets/Scripts/Player/Weapons/PlayerSword.cs b/Assets/Scripts/Player/Weapons/PlayerSword.cs
index 3fafc2974234002728b85e645f04ea5531ca6631..76af46b28313890f3ba72e15c1d06db627c04a28 100644
--- a/Assets/Scripts/Player/Weapons/PlayerSword.cs
+++ b/Assets/Scripts/Player/Weapons/PlayerSword.cs
@@ -28,7 +28,10 @@ public class PlayerSword : MonoBehaviour, WeaponHandler
 
     void OnTriggerEnter(Collider other)
     {
-        if (other.gameObject.TryGetComponent<EnemyHealth>(out var enemyHealth))
+        IEnemyHealthHandler enemyHealth = other.gameObject.GetComponent<ElementalHealth>();
+        enemyHealth ??= other.gameObject.GetComponent<EnemyHealth>();
+
+        if (enemyHealth != null)
         {
             if (this.animator.GetCurrentAnimatorStateInfo(0).IsName("SwordSwing"))
             {
diff --git a/Assets/Scripts/Quest/Temple/Temple.cs b/Assets/Scripts/Quest/Temple/Temple.cs
index c1343fc340471aba0efa9f12dea799d3d9429b2f..f2e2d99e71185a023d984387f8b1903beb97f8e2 100644
--- a/Assets/Scripts/Quest/Temple/Temple.cs
+++ b/Assets/Scripts/Quest/Temple/Temple.cs
@@ -111,7 +111,10 @@ public class Temple : MonoBehaviour
         GlobalManager.Instance.TotalTime += questTime;
         ToastManager.Instance.ShowToastQueue(System.TimeSpan.FromSeconds(GlobalManager.Instance.TotalTime).ToString("mm':'ss"), 1);
 
-        StartCoroutine(saveDialogHandler());
+        if (idxCurrentQuest != 4)
+        {
+            StartCoroutine(saveDialogHandler());
+        }
     }
 
     private void OnTriggerEnter(Collider other)
@@ -163,7 +166,7 @@ public class Temple : MonoBehaviour
         if (questNumberEnemy.IsEmpty())
         {
             ExitingQuest();
-            if (idxCurrentQuest == 1)
+            if (idxCurrentQuest == 4)
             {
                 ToastManager.Instance.ShowToast("YOU WIN", 1);
                 StartCoroutine(winHandler());
diff --git a/Assets/Scripts/SaveLoad/SaveLoadManager.cs b/Assets/Scripts/SaveLoad/SaveLoadManager.cs
index cad9cacdcb0b20601fa3edc762880a4fc60b7cf6..d189dfe21e95c645e7ec98aa78e86eb747bbef71 100644
--- a/Assets/Scripts/SaveLoad/SaveLoadManager.cs
+++ b/Assets/Scripts/SaveLoad/SaveLoadManager.cs
@@ -76,6 +76,7 @@ public class SaveLoadManager : MonoBehaviour
     public void LoadState(int Id)
     {
         var state = GetSavedStateFromFile(Id);
+        state.playerStateSave.playerName = GlobalManager.Instance.PlayerName;
         if (state != null)
         {
             Debug.Log("Load State " + Id);
diff --git a/Assets/Scripts/SaveLoad/SavePlace.cs b/Assets/Scripts/SaveLoad/SavePlace.cs
index 05e35ec24d56825249d36dc7a89e62649a4a1b5e..d73dc564ed1b8ae50c111b8011332ab4ca997123 100644
--- a/Assets/Scripts/SaveLoad/SavePlace.cs
+++ b/Assets/Scripts/SaveLoad/SavePlace.cs
@@ -24,11 +24,6 @@ public class SavePlace : MonoBehaviour
             }
             SaveLoadManager.Instance.ShowUI();
         }
-
-        if (onArea && Input.GetKeyDown(KeyCode.N))
-        {
-            SaveLoadManager.Instance.LoadState(2);
-        }
     }
 
     private void OnTriggerEnter(Collider other)
diff --git a/README.md b/README.md
index de72e9d2a92f7a21e1e774f882646e784d29f3fb..e87c1583389233f8f2a114419f2a6c2e90009e80 100644
--- a/README.md
+++ b/README.md
@@ -131,7 +131,7 @@ All the specifications were implemented.
 | 2. | Angelica Winasta Sinisuka | Shopkeeper, Cheat, Enemy | 000
 | 3. | Averrous Saloom | Main Menu, Game Over, HUD, Story Mode | 000
 | 4. | Malik Akbar Hashemi Rafsanjani | Weapon, Story Mode | 000
-| 5. | Nelsen Putra | Initialitazion, Local Scoreboard, ReadMe | 000
+| 5. | Nelsen Putra | Initialization, Local Scoreboard, README | 000
 
 
 ## Contact