diff --git a/Assets/Scenes/Level_01.unity b/Assets/Scenes/Level_01.unity
index 69ca4b2764c88cc36e29bf4ad49debca719a19e9..d8f98bce1fc0930b0884e66d8c1257dbdfe94eb1 100644
--- a/Assets/Scenes/Level_01.unity
+++ b/Assets/Scenes/Level_01.unity
@@ -6131,7 +6131,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   damagePerShot: 20
-  damagePerShotMax: 50
+  damagePerShotMax: 100
   timeBetweenBullets: 0.15
   range: 100
   text: {fileID: 1214467935}
@@ -7543,7 +7543,8 @@ MonoBehaviour:
     type: 3}
   respawnTime: 5
   center: {x: 0, y: 0, z: 0}
-  size: {x: 20, y: 20, z: 20}
+  size: {x: 30, y: 30, z: 30}
+  player: {fileID: 33458244}
 --- !u!114 &1901065586
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -7560,7 +7561,8 @@ MonoBehaviour:
     type: 3}
   respawnTime: 5
   center: {x: 0, y: 0, z: 0}
-  size: {x: 20, y: 20, z: 20}
+  size: {x: 30, y: 30, z: 30}
+  player: {fileID: 33458244}
 --- !u!114 &1901065587
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -7577,7 +7579,8 @@ MonoBehaviour:
     type: 3}
   respawnTime: 5
   center: {x: 0, y: 0, z: 0}
-  size: {x: 20, y: 20, z: 20}
+  size: {x: 30, y: 30, z: 30}
+  player: {fileID: 33458244}
 --- !u!1 &2070728228
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/Orb/HealthOrb.cs b/Assets/Scripts/Orb/HealthOrb.cs
index 33038cd441639425eae0c208a1b0f68549965b18..0f799b5686e1add5151fc0eb64f51f55de060e68 100644
--- a/Assets/Scripts/Orb/HealthOrb.cs
+++ b/Assets/Scripts/Orb/HealthOrb.cs
@@ -5,7 +5,18 @@ using UnityEngine;
 public class HealthOrb : MonoBehaviour
 {
     public int healthCure = 50;
-    GameObject player;
+    public float interval = 5f;
+    private GameObject player;
+
+    private void Update(){
+        // mendestroy orb setelah interval waktu
+        if (interval > 0){
+            interval -= Time.deltaTime;
+        } else {
+            enabled = false;
+            Destroy(gameObject, 0f);
+        }
+    }
 
     private void OnTriggerEnter(Collider other)
     {
diff --git a/Assets/Scripts/Orb/PowerOrb.cs b/Assets/Scripts/Orb/PowerOrb.cs
index 1129f3a1e16a4c2cd60f2c52d965a8897ff42009..20c708be5306dbd2755805e495e3d518d6f9740b 100644
--- a/Assets/Scripts/Orb/PowerOrb.cs
+++ b/Assets/Scripts/Orb/PowerOrb.cs
@@ -5,8 +5,19 @@ using UnityEngine;
 public class PowerOrb : MonoBehaviour
 {
     public int powerBoost = 10;
-    GameObject player;
-    GameObject gunBarrelEnd;
+    public float interval = 5f;
+    private GameObject player;
+    private GameObject gunBarrelEnd;
+
+    private void Update(){
+        // mendestroy orb setelah interval waktu
+        if (interval > 0){
+            interval -= Time.deltaTime;
+        } else {
+            enabled = false;
+            Destroy(gameObject, 0f);
+        }
+    }
 
     private void OnTriggerEnter(Collider other)
     {
diff --git a/Assets/Scripts/Orb/Spawner.cs b/Assets/Scripts/Orb/Spawner.cs
index e7d50ffe6169c626241fe52c94e7a4d1a7db8118..ce5c919b5fc037463386c93e712fa14620aba79e 100644
--- a/Assets/Scripts/Orb/Spawner.cs
+++ b/Assets/Scripts/Orb/Spawner.cs
@@ -7,21 +7,30 @@ public class Spawner : MonoBehaviour
     public GameObject orbPrefab;
     public float respawnTime = 5.0f;
     public Vector3 center;
-    public Vector3 size = new Vector3(20f, 20f, 20f);
+    public Vector3 size = new Vector3(30f, 30f, 30f);
+    public GameObject player;
+    private GameObject gunBarrelEnd;
 
     void Start()
     {
-        StartCoroutine(OrbWave());
+        InvokeRepeating("SpawnOrb", respawnTime, respawnTime);
     }
 
-    IEnumerator OrbWave(){
-        while(true){
-            yield return new WaitForSeconds(respawnTime);
-            SpawnOrb();
+    private void SpawnOrb(){
+        gunBarrelEnd = player.transform.Find("GunBarrelEnd").gameObject;
+        PlayerShooting playerShooting = gunBarrelEnd.GetComponent<PlayerShooting>();
+        PlayerMovement playerMovement = player.GetComponent<PlayerMovement>();
+
+        // Speed Orb berhenti di spawn apabila kecepatan player sudah maksimal
+        if (orbPrefab.name == "SpeedOrb" && playerMovement.speed == playerMovement.maxSpeed){
+            return;
+        }
+
+        // Power Orb berhenti di spawn apabila kekuatan player sudah maksimal
+        if (orbPrefab.name == "PowerOrb" && playerShooting.damagePerShot == playerShooting.damagePerShotMax){
+            return;
         }
-    }
 
-    private void SpawnOrb(){
         Vector3 pos = center + new Vector3(Random.Range(-size.x/2, size.x/2), 0.5f,Random.Range(-size.z/2, size.z/2));
         Instantiate(orbPrefab, pos, Quaternion.identity);
     }
diff --git a/Assets/Scripts/Orb/SpeedOrb.cs b/Assets/Scripts/Orb/SpeedOrb.cs
index 21e50301e42a227c394856a3329a5b1536776b8a..53645e716d7b39aacc4497d7b9d98c16f5d283fd 100644
--- a/Assets/Scripts/Orb/SpeedOrb.cs
+++ b/Assets/Scripts/Orb/SpeedOrb.cs
@@ -5,7 +5,18 @@ using UnityEngine;
 public class SpeedOrb : MonoBehaviour
 {
     public float speedBoost = 3f;
-    GameObject player;
+    public float interval = 5f;
+    private GameObject player;
+
+    private void Update(){
+        // mendestroy orb setelah interval waktu
+        if (interval > 0){
+            interval -= Time.deltaTime;
+        } else {
+            enabled = false;
+            Destroy(gameObject, 0f);
+        }
+    }
 
     private void OnTriggerEnter(Collider other)
     {
diff --git a/Assets/Scripts/Player/PlayerHealth.cs b/Assets/Scripts/Player/PlayerHealth.cs
index 01d3b1f114878a5604e8a97ba2eb252e09cdb005..75a8c2b7246f818500efcbd0faa27c9503c103b4 100644
--- a/Assets/Scripts/Player/PlayerHealth.cs
+++ b/Assets/Scripts/Player/PlayerHealth.cs
@@ -90,10 +90,10 @@ public class PlayerHealth : MonoBehaviour
         SceneManager.LoadScene(0);
     }
     
-     public void TakeCure(int amount)
+    public void TakeCure(int amount)
     {
         int addedHealth = currentHealth + amount;
-        if (addedHealth > startingHealth){
+        if (addedHealth >= startingHealth){
             currentHealth = startingHealth;
         } else{
             currentHealth = addedHealth;
diff --git a/Assets/Scripts/Player/PlayerMovement.cs b/Assets/Scripts/Player/PlayerMovement.cs
index a8dc4ecb3a73d6ce4d4a181ff4716e84ac764531..459c0a5351a52a0772605b8fe5631fdbcb1e00e0 100644
--- a/Assets/Scripts/Player/PlayerMovement.cs
+++ b/Assets/Scripts/Player/PlayerMovement.cs
@@ -81,6 +81,11 @@ public class PlayerMovement : MonoBehaviour
         anim.SetBool("IsWalking", walking);
     }
     public void BoostSpeed(float amount){
-        speed += amount;
+        float addedSpeed = speed + amount;
+        if (addedSpeed >= maxSpeed){
+            speed = maxSpeed;
+        } else{
+            speed = addedSpeed;
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Player/PlayerShooting.cs b/Assets/Scripts/Player/PlayerShooting.cs
index 42eecc96e450696c3bf10fed3a0db23f3274a49d..1301ca944d3af90b2f70556734079fa5cc4098ac 100644
--- a/Assets/Scripts/Player/PlayerShooting.cs
+++ b/Assets/Scripts/Player/PlayerShooting.cs
@@ -84,7 +84,12 @@ public class PlayerShooting : MonoBehaviour
             gunLine.SetPosition(1, shootRay.origin + shootRay.direction * range);
         }
     }
-     public void BoostPower(int amount){
-        damagePerShot += amount;
+    public void BoostPower(int amount){
+        int addedPower = damagePerShot + amount;
+        if (addedPower >= damagePerShotMax){
+            damagePerShot = damagePerShotMax;
+        } else{
+            damagePerShot = addedPower;
+        }
     }
 }
\ No newline at end of file