diff --git a/Assets/Audio/Effects/Player Shotgun.wav b/Assets/Audio/Effects/Player Shotgun.wav
new file mode 100644
index 0000000000000000000000000000000000000000..c970e149b279ab382838061d51cd514f9a35319a
--- /dev/null
+++ b/Assets/Audio/Effects/Player Shotgun.wav	
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:24cf272760716eaf15f007bd76ed6c4110ace4f8667f415c288aded55a52c7ac
+size 479310
diff --git a/Assets/Audio/Effects/Player Shotgun.wav.meta b/Assets/Audio/Effects/Player Shotgun.wav.meta
new file mode 100644
index 0000000000000000000000000000000000000000..631e35bbcc24563877190b204e144e51ab140b98
--- /dev/null
+++ b/Assets/Audio/Effects/Player Shotgun.wav.meta	
@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: ba7220d25e509f9409ceacf04b5962e2
+AudioImporter:
+  externalObjects: {}
+  serializedVersion: 6
+  defaultSettings:
+    loadType: 0
+    sampleRateSetting: 0
+    sampleRateOverride: 44100
+    compressionFormat: 1
+    quality: 1
+    conversionMode: 0
+  platformSettingOverrides: {}
+  forceToMono: 0
+  normalize: 1
+  preloadAudioData: 1
+  loadInBackground: 0
+  ambisonic: 0
+  3D: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/Level_01.unity b/Assets/Scenes/Level_01.unity
index 301b0934253ac5a741d1d14774ff92d8d165068c..18b914bd8c4277450ca9613c8490ab76af477a49 100644
--- a/Assets/Scenes/Level_01.unity
+++ b/Assets/Scenes/Level_01.unity
@@ -2889,6 +2889,11 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   gunMode: 1
   damagePerShot: 30
+  gunAudioSrc:
+  - {fileID: 8300000, guid: fa7f046ce321d4021b5e753bf1152916, type: 3}
+  - {fileID: 8300000, guid: ba7220d25e509f9409ceacf04b5962e2, type: 3}
+  - {fileID: 0}
+  - {fileID: 0}
 --- !u!82 &880479557
 AudioSource:
   m_ObjectHideFlags: 0
@@ -3091,6 +3096,14 @@ LineRenderer:
   m_Positions:
   - {x: 0, y: 0, z: 0}
   - {x: 0, y: 0, z: 1}
+  - {x: 0, y: 0, z: 0}
+  - {x: 0, y: 0, z: 1}
+  - {x: 0, y: 0, z: 0}
+  - {x: 0, y: 0, z: 1}
+  - {x: 0, y: 0, z: 0}
+  - {x: 0, y: 0, z: 1}
+  - {x: 0, y: 0, z: 0}
+  - {x: 0, y: 0, z: 1}
   m_Parameters:
     serializedVersion: 3
     widthMultiplier: 1
@@ -10047,7 +10060,6 @@ MonoBehaviour:
   isShopOpen: 0
   isShopping: 0
   petFactory: {fileID: 734232483}
-  pdm: {fileID: 1546708125}
   currentWeapon: 0
   hudManager: {fileID: 491809539}
 --- !u!114 &1644740160
diff --git a/Assets/Scripts/Player/PlayerGunSwitcher.cs b/Assets/Scripts/Player/PlayerGunSwitcher.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3ff125a5fdc7e845612e7cc678c36777dfcb989c
--- /dev/null
+++ b/Assets/Scripts/Player/PlayerGunSwitcher.cs
@@ -0,0 +1 @@
+// TODO: Switch Gun Mesh for Player
\ No newline at end of file
diff --git a/Assets/Scripts/Player/PlayerGunSwitcher.cs.meta b/Assets/Scripts/Player/PlayerGunSwitcher.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e11cb5076f0577aad4c0ae358c389d6cb9a39789
--- /dev/null
+++ b/Assets/Scripts/Player/PlayerGunSwitcher.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f089648e71edb4542936007945e8e427
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Player/PlayerShooting.cs b/Assets/Scripts/Player/PlayerShooting.cs
index 5214acca086d7f84bd0f423dac157d7f7e5ec3cb..e2a662637513251668ddff57c47a840efe94b98b 100644
--- a/Assets/Scripts/Player/PlayerShooting.cs
+++ b/Assets/Scripts/Player/PlayerShooting.cs
@@ -9,10 +9,10 @@ public class PlayerShooting : MonoBehaviour
     */
     public int gunMode = 1;
     public int damagePerShot = 30;
+    public AudioClip[] gunAudioSrc = new AudioClip[4];
     private float timeBetweenBullets = 0.15f;
+    private float timeBulletsShot = 0.15f;
     private float range = 100f;
-    private bool multiRange = false;
- 
     float timer;
     Ray shootRay = new Ray();
     Ray[] shootRays = new Ray[5];
@@ -23,6 +23,7 @@ public class PlayerShooting : MonoBehaviour
     AudioSource gunAudio;
     Light gunLight;
     float effectsDisplayTime = 0.2f;
+    RaycastHit[] enemiesHit;
 
     void Awake ()
     {
@@ -45,6 +46,10 @@ public class PlayerShooting : MonoBehaviour
         {
             gunMode = 2;
         }
+        else if (Input.GetKeyDown("3"))
+        {
+            gunMode = 3;
+        }
     }
 
     void UpdateGunMode(int gunMode)
@@ -53,20 +58,18 @@ public class PlayerShooting : MonoBehaviour
             case 1:
                 damagePerShot = 30;
                 timeBetweenBullets = 0.15f;
+                
                 range = 100f;
-                multiRange = false;
                 break;
             case 2:
-                damagePerShot = 200;
+                damagePerShot = 50;
                 timeBetweenBullets = 1f;
                 range = 10f;
-                multiRange = true;
                 break;
             default:
-                damagePerShot = 30;
-                timeBetweenBullets = 0.15f;
-                range = 100f;
-                multiRange = false;
+                damagePerShot = 80;
+                timeBetweenBullets = 0.5f;
+                range = 2f;
                 break;
         }
     }
@@ -82,7 +85,7 @@ public class PlayerShooting : MonoBehaviour
             Shoot ();
         }
 
-        if(timer >= timeBetweenBullets * effectsDisplayTime)
+        if(timer >= timeBulletsShot * effectsDisplayTime)
         {
             DisableEffects ();
         }
@@ -98,57 +101,69 @@ public class PlayerShooting : MonoBehaviour
         gunLight.enabled = false;
     }
 
-
-    void Shoot ()
-    {
+    void GunShoot() {
         timer = 0f;
 
         //Play audio
+        gunAudio.clip = gunAudioSrc[0];
         gunAudio.Play ();
 
-        //enable Light
-        gunLight.enabled = true;
-
         //Play gun particle
         gunParticles.Stop ();
         gunParticles.Play ();
 
-        //enable Line renderer dan set first position
+        //enable Line renderer
         gunLine.enabled = true;
+        gunLine.positionCount = 2;
         gunLine.SetPosition (0, transform.position);
 
-        //Set posisi ray shoot dan direction
-        if (multiRange) {
-            for (int i = 0; i < shootRays.Length; i++) {
-                shootRays[i].origin = transform.position;
-                shootRays[i].direction = Quaternion.Euler(0, (-10 + i * 5), 0) * transform.forward;
-                //Lakukan raycast jika mendeteksi id nemy hit apapun
-                if (Physics.Raycast (shootRays[i], out shootHit, range, shootableMask))
-                {
-                    //Lakukan raycast hit hace component Enemyhealth
-                    EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> ();
-        
-                    if(enemyHealth != null)
-                    {
-                        //Lakukan Take Damage
-                        enemyHealth.TakeDamage (damagePerShot, shootHit.point);
-                    }
-
-                    //Set line end position ke hit position
-                    gunLine.SetPosition (1, shootHit.point);
-                }
-                else
-                {
-                    //set line end position ke range freom barrel
-                    gunLine.SetPosition (1, shootRays[i].origin + shootRays[i].direction * range);
-                }
+        // set shoot rays
+        shootRay.origin = transform.position;
+        shootRay.direction = transform.forward;
+        //Lakukan raycast jika mendeteksi id nemy hit apapun
+        if (Physics.Raycast (shootRay, out shootHit, range, shootableMask))
+        {
+            //Lakukan raycast hit hace component Enemyhealth
+            EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> ();
+
+            if(enemyHealth != null)
+            {
+                //Lakukan Take Damage
+                enemyHealth.TakeDamage (damagePerShot, shootHit.point);
             }
+
+            //Set line end position ke hit position
+            gunLine.SetPosition (1, shootHit.point);
         }
-        else {
-            shootRays[2].origin = transform.position;
-            shootRays[2].direction = transform.forward;
+        else
+        {
+            //set line end position ke range freom barrel
+            gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
+        }
+    }
+
+    void ShotgunShoot() {
+        timer = 0f;
+
+        //Play audio
+        gunAudio.clip = gunAudioSrc[1];
+        gunAudio.Play ();
+
+        //Play gun particle
+        gunParticles.Stop ();
+        gunParticles.Play ();
+
+        //enable Line renderer
+        gunLine.enabled = true;
+        gunLine.positionCount = 10;
+
+        //set shooting rays
+        for (int i = 0; i < shootRays.Length; i++) {
+            gunLine.SetPosition (2 * i, transform.position);
+            shootRays[i].origin = transform.position;
+            shootRays[i].direction = Quaternion.Euler(0, (-10 + i * 5), 0) * transform.forward;
             //Lakukan raycast jika mendeteksi id nemy hit apapun
-            if (Physics.Raycast (shootRays[2], out shootHit, range, shootableMask))
+            if (Physics.Raycast (shootRays[i], out shootHit, range, shootableMask))
             {
                 //Lakukan raycast hit hace component Enemyhealth
                 EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> ();
@@ -160,13 +175,37 @@ public class PlayerShooting : MonoBehaviour
                 }
 
                 //Set line end position ke hit position
-                gunLine.SetPosition (1, shootHit.point);
+                gunLine.SetPosition (2*i+1, shootHit.point);
             }
             else
             {
                 //set line end position ke range freom barrel
-                gunLine.SetPosition (1, shootRays[2].origin + shootRays[2].direction * range);
+                gunLine.SetPosition (2*i+1, shootRays[i].origin + shootRays[i].direction * range);
             }
         }
     }
+
+    void SwordAttack() {
+        timer = 0f;
+
+        enemiesHit = Physics.SphereCastAll(transform.position, range, transform.forward, 0, shootableMask);
+        for (int i = 0; i < enemiesHit.Length; i++) {
+            EnemyHealth enemyHealth = enemiesHit[i].collider.gameObject.GetComponent<EnemyHealth>();
+            if(enemyHealth != null)
+            {
+                //Lakukan Take Damage
+                enemyHealth.TakeDamage (damagePerShot, shootHit.point);
+            }
+        }
+    }
+
+    void Shoot ()
+    {
+        switch (gunMode) {
+            case 1: GunShoot(); break;
+            case 2: ShotgunShoot(); break;
+            case 3: SwordAttack(); break;
+            default: GunShoot(); break;
+        }
+    }
 }
\ No newline at end of file