ACTOR "Flak Cannon" : Weapon 2052
{
	Game Doom
	Tag "Flak Cannon"
    Radius 20
    Weapon.Kickback 50
	Weapon.SelectionOrder 400
	Weapon.AmmoGive 30
	Weapon.AmmoType "NewShell"
	Weapon.AmmoUse 1
	Weapon.KickBack 5
	+WEAPON.NOAUTOFIRE
	+FORCEXYBILLBOARD
	Inventory.PickupMessage "Flak Cannon"
	Obituary "%k caught %o in a flak attack"
    Inventory.PickupSound "Weapon/FLAKPKUP"
	DamageType SSG
	+WEAPON.NOAUTOAIM
	+INVENTORY.UNDROPPABLE
	States
	{
	Spawn:
		FKGN Z -1
		Loop
	Ready:
		TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheck")
		TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheck")
		FKGN A 1 A_WeaponReady
		Loop
	Deselect:
		TNT1 A 0 A_PlayWeaponSound("weapons/weapondown")
		FKGN A 1 A_Lower
		Goto Deselect+1
	Select:
		TNT1 AAAAAAAAAAAA 0 A_Raise
		FKGN LMN 2
        TNT1 A 0 A_PlaySound("Weapon/FLAKSLCT")
        FKGN A 8
		Goto Ready
    NoAmmo:
        FKGN A 4 A_PlaySound("Weapon/Empty", 2)
        Goto Ready+6
	Fire:
		TNT1 A 0 A_Recoil(5)
        FKGN B 1 BRIGHT A_playsound("Weapon/FLAKFIRE", 5)
		FKGN B 1 BRIGHT A_FireCustomMissile("FlakShake", 0, 0, 0, 0)
		FKGN B 0 A_FireCustomMissile("FlakShard",0+Random(-20,20),1,8,0)
		FKGN B 0 A_FireCustomMissile("FlakShard",0+Random(-20,20),0,5,4)
		FKGN B 0 A_FireCustomMissile("FlakShard",0+Random(-20,20),0,8,0)
		FKGN B 0 A_FireCustomMissile("FlakShard",0+Random(-20,20),0,5,4)
		FKGN B 0 A_FireCustomMissile("FlakShard",0+Random(-20,20),0,8,0)
		FKGN B 0 A_FireCustomMissile("FlakShard",0+Random(-20,20),0,8,0)
		FKGN B 0 A_FireCustomMissile("Flak",0+Random(-20,20),1,8,0)
		FKGN B 0 A_FireCustomMissile("Flak",0+Random(-20,20),0,5,4)
		FKGN B 0 A_FireCustomMissile("Flak",0+Random(-20,20),0,8,0)
		FKGN B 0 A_FireCustomMissile("Flak",0+Random(-20,20),0,5,4)
		FKGN B 0 A_FireCustomMissile("Flak",0+Random(-20,20),0,8,0)
		FKGN B 0 A_FireCustomMissile("Flak",0+Random(-20,20),0,8,0)
		TNT1 A 0 A_FireBullets (24, 6, 6, 7, "BulletPuff")
		TNT1 A 0 A_SetPitch(-16.0 + pitch)
		TNT1 A 0 A_FireCustomMissile("FlakShake", 0, 0, 0, 0)
        FKGN B 1 BRIGHT A_SetPitch(+2.0 + pitch)
        FKGN C 1
	    TNT1 A 0 A_SetPitch(+2.0 + pitch)
        FKGN C 1
	    TNT1 A 0 A_SetPitch(+2.0 + pitch)
        FKGN C 1
	    TNT1 A 0 A_SetPitch(+2.0 + pitch)
        FKGN C 2
		TNT1 A 0 A_SetPitch(+2.0 + pitch)
        FKGN C 2
		TNT1 A 0 A_SetPitch(+2.0 + pitch)
        FKGN C 3 A_SetPitch(+2.0 + pitch)
		TNT1 A 0 A_SetPitch(+2.0 + pitch)
		FKGN C 2

		//Don't go through reload if we don't have any ammo!
		TNT1 A 0 A_CheckReload

		FKGN DDEEFF 2
		FKGN G 2 A_PlaySound("Weapon/FLAKSNAP")
		FKGN HHOOII 2
		FKGN I 4
		FKGN JK 2
        TNT1 A 0 A_playsound("Weapon/FLAKRELD")
		FKGN L 6
		FKGN MNAA 2
		TNT1 A 0 A_ReFire
		FKGN A 2
        Goto Ready+7

  GrenadeCheck:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"GrenadeToss")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto Ready
	
  GrenadeToss:
  	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown") 
	FKGN A 1 Offset(0,30)
	FKGN A 1 Offset(0,40)
	FKGN A 1 Offset(0,50)
	FKGN A 1 Offset(0,60)
	FKGN A 1 Offset(0,70)
	TNT1 A 4 Offset(0,10)
	HGRN ABC 1 
	HGRN D 2
	HGRN EFG 1
	HGRN HI 2
	TNT1 A 15 A_PlayWeaponSound("weapons/hgrenadepin")
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	TNT1 A 0 A_TakeInventory("HandGrenadeAmmo",1)
	HGNE A 1 A_FireCustomMissile("ThrownGrenade",0,0,0,0)
	HGRN J 1
	HGRN KLM 2
	HGRN NO 1
	TNT1 A 6
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,2)
    TNT1 A 0 A_TakeInventory("Hand Grenade",1)
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	TNT1 A 0
	FKGN A 1 Offset(0,70)
	FKGN A 1 Offset(0,60)
	FKGN A 1 Offset(0,50)
	FKGN A 1 Offset(0,40)
	FKGN A 1 Offset(0,30)
	Goto Ready
	
  MineCheck:
	TNT1 A 0 A_JumpIfInventory("MineAmmo",1,"MineToss")
	TNT1 A 0 A_TakeInventory("MineAction",1)
	Goto Ready
	
  MineToss:
  	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown") 
	FKGN A 1 Offset(0,30)
	FKGN A 1 Offset(0,40)
	FKGN A 1 Offset(0,50)
	FKGN A 1 Offset(0,60)
	FKGN A 1 Offset(0,70)
	TNT1 A 8 Offset(0,10)
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	MINE ABCDEF 1		
	TNT1 A 0 A_TakeInventory("MineAmmo",1)	  
	MINE G 1 A_FireCustomMissile("ThrownMine",0,0,0,0)
	MINE HI 1
	MINE JK 2
	TNT1 A 0 A_JumpIfInventory("MineAmmo",1,2)
    TNT1 A 0 A_TakeInventory("Land Mine",1)
	TNT1 A 0 A_TakeInventory("MineAction",1)
	TNT1 A 0
	TNT1 A 5
	FKGN A 1 Offset(0,70)
	FKGN A 1 Offset(0,60)
	FKGN A 1 Offset(0,50)
	FKGN A 1 Offset(0,40)
	FKGN A 1 Offset(0,30)
	Goto Ready
	}
}

ACTOR FlakShard
  {
  Projectile
  +RANDOMIZE
  +FORCEXYBILLBOARD
  +BOUNCEONFLOORS
  +BOUNCEONCEILINGS
  +NOGRAVITY
  +NOBLOCKMAP
  +RIPPER
  +DROPOFF
  +MISSILE 
  +ACTIVATEIMPACT 
  +DOOMBOUNCE
  +DONTSPLASH
  +THRUSPECIES
  BounceType Grenade
  bouncefactor 1
  BounceSound "ricochet/hit"
  wallbouncefactor 1
  damage (15+5*random(0, 2))
  radius 2
  height 2
  damage 3
  speed 45
  alpha 0.9
  scale 0.4
  Decal "BulletChip"
  DamageType SSG
  states
	{
	Spawn:
		FKSD ABCDABCD 1 BRIGHT Light("FLAKHI")
		FKSD EFGHEFGHEFGH 1 BRIGHT Light("FLAKLO")
		TNT1 A 1 A_CustomMissile("FlakResidue",-5,0,0,CMF_AIMDIRECTION)
	Death:
		FKSD IJKIJKIJK 1
		FKSD KKKK 1 A_FadeOut(0.50)
		Stop
	XDeath:
	TNT1 A 0
	Stop
	}
}

ACTOR FlakResidue {
  +FORCEXYBILLBOARD
  +BOUNCEONFLOORS
  +BOUNCEONCEILINGS
  +THRUACTORS
  BounceType Grenade
  bouncefactor 0.5
  wallbouncefactor 0.5
  BounceSound "weapons/flak"
  radius 2
  height 2
  speed 45
  alpha 0.9
  scale 0.4
  states
	{
	Spawn:
		TNT1 AAAA 0 A_Jump(256, "Type1", "Type2", "Type3", "Type4")
	Type1:
		FKSD I 60
		Stop
	Type2:
		FKSD J 62
		Stop
	Type3:
		FKSD K 55
		Stop
	Type4:
		FKSD L 57
		Stop
	Death:
		Stop
	XDeath:
	TNT1 A 0
	Stop
	}
}

actor FlakShake
{
  height 8
  radius 4
  +NOBLOCKMAP
  +NOGRAVITY
  +NOSECTOR
  +NOCLIP
  +CLIENTSIDEONLY
  states
  {
  Spawn:
  TNT1 A 0
  TNT1 A 0 Radius_Quake (8, 6, 0, 1, 0)
  TNT1 A 10
    Stop
  }
}

actor Flak
{
+ThruSpecies
Species "Player"
Decal BulletChip
Radius 8
Height 8
Damage 3
Scale 0.5
Speed 35
BounceSound "ricochet/hit"
+RANDOMIZE
+FORCEXYBILLBOARD
+NOBLOCKMAP
+RIPPER
+DROPOFF 
+MISSILE 
+ACTIVATEIMPACT 
+DOOMBOUNCE
+BOUNCEONFLOORS
+BOUNCEONCEILINGS
+DONTSPLASH
+THRUSPECIES
States
{
Spawn:
FKSD ABCDABCD 1 BRIGHT Light("FLAKHI")
FKSD EFGHEFGHEFGH 1 BRIGHT Light("FLAKLO")
TNT1 A 1 A_CustomMissile("FlakResidue",-5,0,0,CMF_AIMDIRECTION)
FKSD FGH 4 A_SpawnItem("ShrapnelSmoke",0)
Loop
Death:
FKSD IJKIJKIJK 1
FKSD KKKK 1 A_FadeOut(0.50)
Stop
}
}

actor ShrapnelSmoke
{
Radius 1
Height 1
+NOGRAVITY
Scale 0.6
RenderStyle Translucent
Alpha 0.5
States
{
Spawn:
WSMK ABCD 3
Goto Death
Death:
WSMK E 3
Stop
}
}

ACTOR ShrapnelCasing
{
+NOTELEPORT
+DONTSPLASH
-NOBLOCKMAP
Height 12
Radius 9
Speed 4
Scale 0.45
PROJECTILE
+DOOMBOUNCE
- NOGRAVITY
- NOLIFTDROP
SeeSound "FlakShell"
States
{
Spawn:
NULL A 0
CASE A 0 A_PlaySound("NULL")
CASE A 3
CASE ACBHEGFD 1 A_CustomMissile("Smoke",0,0,0)
Goto Spawn+2
Death:
CASE A 0 A_Jump(32,8)
CASE A 0 A_Jump(37,8)
CASE A 0 A_Jump(43,8)
CASE A 0 A_Jump(51,8)
CASE A 0 A_Jump(64,8)
CASE A 0 A_Jump(85,8)
CASE A 0 A_Jump(128,8)
CASE A 5 A_CustomMissile("SmokeFinish",0,0,3)
CASE B 5 A_CustomMissile("SmokeFinish",0,0,3)
CASE C 5 A_CustomMissile("SmokeFinish",0,0,3)
CASE D 5 A_CustomMissile("SmokeFinish",0,0,3)
CASE E 5 A_CustomMissile("SmokeFinish",0,0,3)
CASE F 5 A_CustomMissile("SmokeFinish",0,0,3)
CASE G 5 A_CustomMissile("SmokeFinish",0,0,3)
CASE H 5 A_CustomMissile("SmokeFinish",0,0,3)
CASE H 1
Stop
}
}

ACTOR SmokeFinish
{
+NOTELEPORT
Height 12
Radius 9
Speed 0
Scale 0.8
PROJECTILE
SeeSound ""
RENDERSTYLE TRANSLUCENT
ALPHA 0.2
States
{
Spawn:
FLSK A 1
Death:
FLSK ABCDEFGH 2
Stop
}
}