// Frag grenade
actor FragGrenade : AOWWeapon {
	+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"
	Tag "Fragmentation Grenade"
	DropItem "FragGrenadeAmmo"
	Scale 0.25
	States {
	Ready:
		FRGS A 0 
		FRGS A 0 A_JumpIfNoAmmo ("ReadyNoAmmo")
		FRGS ABCDEFG 1
	ReadyIdle:
		FRGI A 1 A_WeaponReady
		wait
	ReadyNoAmmo:
		TNT1 A 1 A_WeaponReady
		loop
	Deselect:
		FRGI A 0 A_JumpIfNoAmmo ("DeselectNoAmmo")
		FRGI A 0 A_Lower
		FRGI A 1 A_Lower
		goto Deselect+1
	DeselectNoAmmo:
		TNT1 A 0 A_Lower
		TNT1 A 1 A_Lower
		loop
	Select:
		FRGI A 0 A_Raise
		wait
	Fire:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "ReadyIdle")
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "ReadyIdle")
		FRGI A 2 A_TakeInventory ("FragGrenadePower", 100)
		FRG1 BCDEFGH 2
		FRG1 I 0 A_PlaySound ("frag/pinpull", CHAN_WEAPON)
		FRG1 IJK 1
		TNT1 A 10
		TNT1 A 1 A_ReFire
		TNT1 A 3 A_PlaySound ("frag/voice", CHAN_BODY)
		FRG2 AB 2
		FRG2 C 2 A_PlaySound ("frag/throw", CHAN_WEAPON)
		TNT1 A 0 A_TakeInventory ("FragGrenadePower", 100)
		FRG2 D 2 A_FireCustomMissile ("FragGrenadeThrown",-1,1,10,5)
		FRG2 EFG 2
		goto Ready
	Hold:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "Select")
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "Select")
		TNT1 A 2 A_GiveInventory ("FragGrenadePower", 3)
		TNT1 A 1 A_ReFire
		TNT1 A 3 A_PlaySound ("frag/voice", CHAN_BODY)
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 80, "Throw5")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 60, "Throw4")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 40, "Throw3")
		TNT1 A 0 A_JumpIfInventory ("FragGrenadePower", 20, "Throw2")
		FRG2 AB 2
		FRG2 C 2 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FRG2 D 2 A_FireCustomMissile ("FragGrenadeThrown", -1, 1, 10, 5)
	FireEnd:
		TNT1 A 0 A_TakeInventory ("FragGrenadePower", 100)
		FRG2 EFG 2
		goto Ready
	FireEnd2:
		TNT1 A 0 A_TakeInventory ("FragGrenadePower", 100)
		FRG3 BCD 2
		TNT1 AA 2
		goto Ready
	Throw2:
		FRG2 AB 2
		FRG2 C 2 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FRG2 D 2 A_FireCustomMissile ("FragGrenadeThrown2", -1, 1, 10, 5)
		goto FireEnd
	Throw3:
		TNT1 A 2 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FRG3 A 2 A_FireCustomMissile ("FragGrenadeThrown3", -1, 1, 10, 15)
		goto FireEnd2
	Throw4:
		TNT1 A 2 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FRG3 A 2 A_FireCustomMissile ("FragGrenadeThrown4", -1, 1, 10, 15)
		goto FireEnd2
	Throw5:
		TNT1 A 2 A_PlaySound ("frag/throw", CHAN_WEAPON)
		FRG3 A 2 A_FireCustomMissile ("FragGrenadeThrown5", -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"
	Radius 5
	Height 5
	Speed 17
	Damage (0)
	Scale 0.22
	Gravity 0.6
	BounceFactor 0.5
	DamageType "Rifle"
	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_FRAGGRENADE"
	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 FragGrenadeDropped : FragGrenadeThrown {Speed 10}
actor FragGrenadeThrown2 : FragGrenadeThrown {Speed 22}
actor FragGrenadeThrown3 : FragGrenadeThrown {Speed 29}
actor FragGrenadeThrown4 : FragGrenadeThrown {Speed 34}
actor FragGrenadeThrown5 : FragGrenadeThrown {Speed 46}