// Frag grenade
actor FragGrenade : AOWWeapon {
    Weapon.BobSpeed 1.75
    Weapon.BobRangeX 0.2
    Weapon.BobRangeY 0.4
    Weapon.BobStyle Alpha
	+NOALERT
	Inventory.PickupMessage "Fragmentation Grenade"  
	Inventory.PickupSound "misc/ammo_pkup"
	Attacksound "frag/pinpull"
	Weapon.Kickback 5
	Weapon.AmmoType "FragGrenadeAmmo"
	Weapon.AmmoUse 1
	Weapon.AmmoGive 1
	Weapon.AmmoType2 "FragGrenadePower"
	Weapon.AmmoUse2 0
	Weapon.AmmoGive2 0
	Weapon.PreferredSkin "MarineFist"
	Weapon.UpSound "weapons/up/fragnade"
	Tag "Fragmentation Grenade"
	DropItem "FragGrenadeItem"
	Obituary "$OB_FRAGGRENADE"
	Scale 0.25
	States {
	Select:
	    FRAG A 1 offset (90,100)
		FRAG A 1 offset (80,89)
		FRAG A 1 offset (70,79)
		FRAG A 1 offset (60,70)
		FRAG A 1 offset (50,62)
		FRAG A 1 offset (40,55)
		FRAG A 1 offset (30,49)
		FRAG A 1 offset (20,44)
		FRAG A 1 offset (15,40)
		FRAG A 1 offset (10,37)
		FRAG A 1 offset (5,34)
		FRAG A 1 offset (0,0)
		TNT1 A 0 A_TakeInventory("SelectAnimation",1)	
		goto ready
    Deselect:
	    TNT1 A 0 A_TakeInventory("ActionFragGrenade",1)	
        TNT1 A 0 A_TakeInventory("ActionFlashbang",1)
        TNT1 A 0 A_TakeInventory("ActionRemoteC4",1)	
        TNT1 A 0 A_TakeInventory("ActionMeleeAttack",1)
		TNT1 A 0 A_TakeInventory("ActionReload",1)	
	    FRAG A 0 A_JumpIfNoAmmo ("DeselectNoAmmo")
		FRAG A 1 offset (0,34)
		FRAG A 1 offset (0,40)
		FRAG A 1 offset (0,49)
		FRAG A 1 offset (0,62)
		FRAG A 1 offset (0,79)
		FRAG A 1 offset (0,100)
		TNT1 A 0 offset (0,33)
		TNT1 A 0 A_Lower
		Wait
	DeselectNoAmmo:
		/*TNT1 A 0 A_Lower
		TNT1 A 1 A_Lower
		loop*/	
		TNT1 A 0 A_TakeInventory("FragGrenade")
		Stop
	Ready:
		TNT1 A 0 A_JumpIfInventory("SelectAnimation",1,"Select")
	    TNT1 A 0 A_JumpIfInventory("ActionFragGrenade",1,"UseFragGrenade")
		TNT1 A 0 A_JumpIfInventory("ActionFlashbang",1,"UseFlashbang")
		TNT1 A 0 A_JumpIfInventory("ActionRemoteC4",1,"UseRemoteC4")
		TNT1 A 0 A_JumpIfInventory("ActionMeleeAttack",1,"UseMeleeAttack")
		TNT1 A 0 A_JumpIfNoAmmo ("ReadyNoAmmo")
		FRAG A 1 A_WeaponReady
		loop
	ReadyNoAmmo:
		TNT1 A 0 A_JumpIfInventory("FragGrenadeAmmo",1,"Ready")
		TNT1 A 1 A_WeaponReady
		wait
	Fire:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "Ready")
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "Ready")
		FRAG A 0 A_TakeInventory ("FragGrenadePower", 100)
		FRAG BCD 1
		FRAG EFG 2
		FRAG H 2 A_PlaySound ("frag/pinpull", CHAN_WEAPON)
		FRAG H 0 A_GiveInventory ("Hasgrenadeon", 1)
		FRAG IJ 2
		FRAG KLMNOPQR 1
		TNT1 A 3 	
		TNT1 A 0 A_ReFire
		TNT1 A 7	
		FSH1 A 1
		FSH1 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH1 A 0 A_FireCustomMissile ("FragGrenadeThrown",-1,1,10,5)
        FSH1 A 0 A_TakeInventory ("FragGrenadePower", 100)
		FSH1 A 0 A_TakeInventory ("Hasgrenadeon", 1)
		FSH1 BCD 1
        FSH1 E 1 A_CheckReload
		goto Select
	Hold:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "ClearItem")
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "ClearItem")
		TNT1 A 2 A_GiveInventory ("FragGrenadePower", 3)
		TNT1 A 1 A_ReFire
		TNT1 A 3
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 100, "Throw10")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 90, "Throw9")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 80, "Throw8")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 70, "Throw7")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 60, "Throw6")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 50, "Throw5")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 40, "Throw4")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 30, "Throw3")		
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 20, "Throw2")		
		FSH1 A 1
		FLSH D 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FLSH D 0 A_FireCustomMissile ("FragGrenadeThrown", -1, 1, 10, 5)
	FireEnd:
		TNT1 A 0 A_TakeInventory ("FragGrenadePower", 100)
		FSH1 A 0 A_TakeInventory ("Hasgrenadeon", 1)
        FSH1 BCD 1
		FSH1 E 1 A_CheckReload
        Goto Select	
	FireEnd2:
		TNT1 A 0 A_TakeInventory ("FragGrenadePower", 100)
		FSH1 A 0 A_TakeInventory ("Hasgrenadeon", 1)
        FSH2 BCDEFGH 1
		FSH2 I 1 A_CheckReload	
		goto Select
	ClearItem:
		TNT1 A 0
		TNT1 A 0 A_TakeInventory ("FragGrenadePower", 100)
		Goto Ready
	Throw2:
		FSH1 A 1
		FSH1 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH1 A 0 A_FireCustomMissile ("FragGrenadeThrown2", -1, 1, 10, 5)
		goto FireEnd
	Throw3:
		FSH1 A 1
		FSH1 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH1 A 0 A_FireCustomMissile ("FragGrenadeThrown3", -1, 1, 10, 5)
		goto FireEnd
	Throw4:
	    FSH2 A 1
		FSH2 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH2 A 0 A_FireCustomMissile ("FragGrenadeThrown4", -1, 1, 10, 15)
		goto FireEnd2
	Throw5:
	    FSH2 A 1
		FSH2 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH2 A 0 A_FireCustomMissile ("FragGrenadeThrown5", -1, 1, 10, 15)
		goto FireEnd2
	Throw6:
	    FSH2 A 1
		FSH2 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH2 A 0 A_FireCustomMissile ("FragGrenadeThrown6", -1, 1, 10, 15)
		goto FireEnd2
	Throw7:
	    FSH2 A 1
		FSH2 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH2 A 0 A_FireCustomMissile ("FragGrenadeThrown7", -1, 1, 10, 15)
		goto FireEnd2
	Throw8:
	    FSH2 A 1
		FSH2 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH2 A 0 A_FireCustomMissile ("FragGrenadeThrown8", -1, 1, 10, 15)
		goto FireEnd2
	Throw9:
	    FSH2 E 1
		FSH2 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH2 A 0 A_FireCustomMissile ("FragGrenadeThrown9", -1, 1, 10, 15)
		goto FireEnd2	
	Throw10:
	    FSH2 A 1
		FSH2 A 0 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FSH2 A 0 A_FireCustomMissile ("FragGrenadeThrown10", -1, 1, 10, 15)
		goto FireEnd2
	Spawn:
		TNT1 A 0
		stop
	}
}

actor FragGrenadePower : Ammo {
	+IGNORESKILL
	inventory.amount 0
	inventory.maxamount 100
	ammo.backpackamount 0
	ammo.backpackmaxamount 100
}

// =============================================================================
actor FragGrenadeThrown {
	PROJECTILE
	-NOGRAVITY
	+RANDOMIZE
	+HEXENBOUNCE
	+NOEXTREMEDEATH
	+FORCERADIUSDMG
	+CANBOUNCEWATER
	+BOUNCEONACTORS
	Obituary "$OB_FRAGGRENADE"
	Seesound "weapons/fragbounce"
	Radius 5
	Height 5
	Speed 17
	Damage (0)
	Scale 0.22
	Gravity 0.6
	BounceFactor 0.5
	DamageType "Mine"
	States {
	Spawn:
		FRGX ABCDEFGHABB 5
	Death:
		TNT1 A 0 A_JumpIf (ACS_ExecuteWithResult (SC_SillyThings) == 1, "BigDeath")
	DeathGo:
		TNT1 A 0 A_PlaySound ("weapons/rocklx", CHAN_WEAPON)
		TNT1 A 0 A_Explode (190, 256)
		TNT1 A 0 A_SpawnItemEx ("FlameDecay", random(-16,16), random(-16,16), 4, 0, 0, 0, 0, 0, 160)
		TNT1 AAAAAAAA 0 A_CustomMissile("FragGrenadeShrapnel",0,0,random(0,360),6,random(2,80))
		TNT1 A 5 A_SpawnItemEx ("ExplosionMain")
		stop
	BigDeath:
		TNT1 A 0 A_Jump (224, "DeathGo")
		TNT1 A 5 A_SpawnItemEx ("NukeKamikaze", 0, 0, 32, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
		stop
	}
}

// =============================================================================
actor FragGrenadeShrapnel {
	PROJECTILE
	+RIPPER
	+BLOODSPLATTER
	+HEXENBOUNCE
	Radius 10
	Height 8
	Damage (4)
	Speed 60
	Obituary "$OB_FRAGGRENADESHRAPNEL"
	Scale 0.3
	Gravity 0.6
	BounceCount 10
	DamageType "Rifle"
	States {
	Spawn:
		SHRA A 5 BRIGHT
		SHRA A 4 A_Gravity
		SHRA A 55
		goto Death1
	Death1:
		SHRA A 4 A_FadeOut (0.2)
		loop
	}
}

ACTOR FragGrenadeItem : CustomInventory
{
   Inventory.Amount 1
   Inventory.MaxAmount 1
   Inventory.PickupSound "frag/pinpull"
   Inventory.PickupMessage "Picked up a frag grenade."
   Scale 0.25
   +FLOORCLIP
   States
   {
   Spawn:
      FRGP A 1
      Loop
   Pickup:
	  TNT1 A 0 A_JumpIfInventory("FragGrenade",1,"GiveAmmo")
	  Goto GiveItem
   GiveAmmo:
      TNT1 A 0 A_GiveInventory("FragGrenadeAmmo",1)
      Stop
   GiveItem:
      TNT1 A 0 A_GiveInventory("FragGrenade")
	  Stop
   } 
}

// =============================================================================
actor FragGrenadeDropped : FragGrenadeThrown {Speed 10}
actor FragGrenadeThrown2 : FragGrenadeThrown {Speed 21}
actor FragGrenadeThrown3 : FragGrenadeThrown {Speed 24}
actor FragGrenadeThrown4 : FragGrenadeThrown {Speed 27}
actor FragGrenadeThrown5 : FragGrenadeThrown {Speed 30}
actor FragGrenadeThrown6 : FragGrenadeThrown {Speed 33}
actor FragGrenadeThrown7 : FragGrenadeThrown {Speed 36}
actor FragGrenadeThrown8 : FragGrenadeThrown {Speed 39}
actor FragGrenadeThrown9 : FragGrenadeThrown {Speed 42}
actor FragGrenadeThrown10 : FragGrenadeThrown {Speed 45}

// Special drop on death grenades.
actor deathgrenade : FragGrenadeThrown
{
	Obituary "$OB_FRAGGRENADESPECIAL"
	States
	{
	Spawn:
		FRGX CDEFGHABB 5
		goto Death
	}
}
