// --------------------------------------------------------------------------
//
//	Minigun
//
// --------------------------------------------------------------------------

ACTOR U_MiniGun : BaseWeapon replaces MiniGun
{
	Weapon.AmmoUse 0
	Weapon.AmmoGive 30
	Weapon.AmmoType "MinigunAmmo"
	Weapon.SelectionOrder 700
	-WEAPON.CHEATNOTWEAPON
	Inventory.PickupSound "CBOXPKUP"
	Inventory.PickupMessage "You got the Minigun!"
	Obituary "%o was mowed down by %k's Minigun."
	Scale 0.9
	tag "Minigun"
	States
	{
	Spawn:
		MGUN A -1
		Stop

	Select:
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist", 1, "PuristGun")
		TNT1 A 0 A_Giveinventory("HeavyAutomaticWeapon",1)
		TNT1 A 0 A_Giveinventory("MinigunSelected",1)
		TNT1 A 0 A_Giveinventory("GoSpecial",1)
		TNT1 A 0 A_Takeinventory("Unloading",1)
		TNT1 A 0 A_Takeinventory("Reloading",1)
		TNT1 A 0 A_TakeInventory("TossGrenade", 1)
		TNT1 A 0 A_Takeinventory("WeapSpecial",1)
		TNT1 A 0 A_Takeinventory("Taunting",1)
		TNT1 A 0 A_Takeinventory("IdleCounter",200)
		TNT1 A 4
		TNT1 A 0 A_Raise
		Wait

	Deselect:
		TNT1 A 0 A_JumpIfInventory("Spin", 1, 2)
		TNT1 A 0 A_Jump(256,3)
		TNT1 A 0 A_TakeInventory("Spin",1)
		TNT1 A 0 A_PlaySound("CHAINSTO", 6)
		TNT1 A 0 A_JumpIfInventory("MinigunAmmo",1,8)
		CHGS GHIJKL 1
		TNT1 A 0 A_Jump(256,7)
		CHGS ABCDEF 1
		TNT1 A 0 A_TakeInventory("MinigunSelected", 1)
		TNT1 A 0 A_Takeinventory("HeavyAutomaticWeapon",1)
		TNT1 A 0 A_Lower
		Wait

	Ready:
		TNT1 A 0 A_JumpIfInventory("GoFatality", 1, "Steady")
		TNT1 A 0 A_PlaySound("CHGNPKUP")
	Ready1:
		TNT1 A 0 A_GiveInventory("SmokeToken",10)
		TNT1 A 0 A_JumpIfInventory("MinigunAmmo",1,8)
		CHGS LKJIHG 1
		TNT1 A 0 A_Jump(256,"Ready2")
		CHGS FEDCBA 1
	Ready2:
        TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
        TNT1 A 0 A_JumpIfInventory("Taunting",1,"TauntR")
		TNT1 A 0 A_JumpIfInventory("Salute1",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		//TNT1 A 0 A_JumpIfInventory("WeapSpecial",1,"WeapSpecial")
		TNT1 A 0 A_JumpIfInventory("IdleCounter",200,"PlayerIsIdle")
		TNT1 A 0 A_JumpIfInventory("MinigunAmmo",1,1)
		Goto IdleNoAmmo
		CHAG A 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory("Spin",1,"ReadySpin")
		Goto Ready2

	ReadySpin:
		CHAG C 1 A_WeaponReady
		TNT1 A 0 A_AlertMonsters
		Goto Ready2

	IdleNoAmmo:
		CHAE A 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory("Spin",1,"IdleSpin")
		Goto Ready2

	IdleSpin:
		CHAE C 1 A_WeaponReady
		TNT1 A 0 A_AlertMonsters
		Goto Ready2

	PuristGun:
		TNT1 A 0 A_GiveInventory("ClassicChaingun", 1)
		TNT1 A 0 A_TakeInventory("U_Minigun", 1)
		Goto Ready

// --------------------------------------------------------------------------
//
//	Fire
//
// --------------------------------------------------------------------------

	Fire:
		TNT1 A 0 A_JumpIfInventory("Spin",1,"Hold")
		TNT1 A 0 A_PlaySound("CHAINSTA", 6)
		TNT1 A 0 A_JumpIfInventory("MinigunAmmo",1,1)
		Goto DryFire
		CHAG BCD 1
		TNT1 A 0 A_FireCustomMissile("Alerter", 0, 0, 0, 0)
		TNT1 A 0 A_AlertMonsters
		CHAG ABC 1
		TNT1 A 0 A_PlaySound("CHAINSPI", 6, 0.8, 1)
	Hold:
		TNT1 A 0 A_JumpIfInventory("MinigunAmmo",1,1)
		Goto DryFireHold
		TNT1 A 0 A_GunFlash("ExtraBullet")
		TNT1 A 0 A_ZoomFactor(0.98)
		TNT1 AA 0 A_FireCustomMissile("YellowFlareSpawn",0,0,0,0)
		TNT1 A 0 A_FireBullets(2, 2, -1, 8, "MachineGunBulletPuff")
		TNT1 A 0 A_PlaySound("UMINI6",1,0.5)
		TNT1 A 0 A_JumpIfInventory("FireSeq", 1, 3)
		CHAF A 1 BRIGHT A_PlaySound("UMINIGUN")
		TNT1 A 0 A_Jump(256,2)
		CHAF C 1 BRIGHT A_PlaySound("UMINIGUN")
		TNT1 A 0 A_TakeInventory("MinigunAmmo",1)
		TNT1 A 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 0, 0, 0, 0)
		TNT1 A 0 A_SetPitch(frandom(-0.7,-0.8) + pitch)
		TNT1 A 0 A_Firecustommissile("50CaseSpawn",0,0,-12,-20)
		TNT1 A 0 A_SpawnItemEx("PlayerMuzzle2",30,5,27)
		TNT1 A 0 A_FireCustomMissile("DecorativeTracer", frandom(-2,2), 0, 0, -12, 0, frandom(-2,2))
		TNT1 A 0 A_ZoomFactor(1.0)
		TNT1 A 0 A_SetAngle(frandom(1, -1) + angle)
		TNT1 A 0 A_JumpIfInventory("MinigunTurbo", 1, 5)
		TNT1 A 0 A_JumpIfInventory("FireSeq", 1, 3)
		CHAF B 1 A_GiveInventory("FireSeq",1)
		TNT1 A 0 A_Jump(256,2)
		CHAF D 1 A_TakeInventory("FireSeq",1)
		TNT1 A 0 A_TakeInventory("SmokeToken",1)
		TNT1 A 0 A_SetPitch(-0.4 + pitch)
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_FireCustomMissile("Alerter", 0, 0, 0, 0)
		TNT1 A 0 A_GunFlash("Smoke")
		TNT1 A 0 A_ReFire
		TNT1 A 0 A_JumpIfInventory("Spin",1,"Ready2")
		TNT1 A 0 A_PlaySound("CHAINSTO", 6)
		CHAG ACACAB 1 A_WeaponReady
		CHAG CDABCDABCD 2 A_WeaponReady
		CHAG ABCD 3 A_WeaponReady
		Goto Ready2

	DryFire:
		CHAE BCD 1
		TNT1 A 0 A_FireCustomMissile("Alerter", 0, 0, 0, 0)
		TNT1 A 0 A_AlertMonsters
		CHAE ABC 1
		TNT1 A 0 A_PlaySound("CHAINSPI", 6, 0.8, 1)
	DryFireHold:
		TNT1 A 0 A_PlaySound("weapons/empty2",1,0.7)
		CHAE AC 1
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_ReFire
		TNT1 A 0 A_JumpIfInventory("Spin",1,"Ready2")
		TNT1 A 0 A_PlaySound("CHAINSTO", 6)
		CHAE ACACAB 1 A_WeaponReady
		CHAE CDABCDABCD 2 A_WeaponReady
		CHAE ABCD 3 A_WeaponReady
		Goto Ready2

	Smoke:
		TNT1 A 1
		TNT1 A 0 A_JumpIfInventory("SmokeToken",8,19)
		TNT1 A 0 A_JumpIfInventory("SmokeToken",6,14)
		TNT1 A 0 A_JumpIfInventory("SmokeToken",4,9)
		TNT1 A 0 A_JumpIfInventory("SmokeToken",2,4)
		TNT1 AAAaAA 1 A_FireCustomMissile("SmokeSpawner11",0,0,0,0)
		TNT1 AaAA 2 A_FireCustomMissile("SmokeSpawner11",0,0,0,0)
		TNT1 Aa 3 A_FireCustomMissile("SmokeSpawner11",0,0,0,0)
		TNT1 A 4 A_FireCustomMissile("SmokeSpawner11",0,0,0,0)
		TNT1 A 5 A_FireCustomMissile("SmokeSpawner11",0,0,0,0)
		TNT1 A 6 A_FireCustomMissile("SmokeSpawner12",0,0,0,0)
		TNT1 a 8 A_FireCustomMissile("SmokeSpawner13",0,0,0,0)
		TNT1 A 0 A_GiveInventory("SmokeToken",10)
		Stop
		
	ExtraBullet: //I made this as a flash state, in case I want to decrase the RPM again.
		TNT1 A 1
		TNT1 A 0 A_FireBullets(2, 2, -1, 8, "MachineGunBulletPuff")
		TNT1 A 0 A_TakeInventory("MinigunAmmo",1)
		TNT1 A 0 A_Firecustommissile("50CaseSpawn",0,0,-12,-20)
		TNT1 A 0 A_FireCustomMissile("DecorativeTracer", frandom(-2,2), 0, 0, -12, 0, frandom(-2,2))
		Stop

	AltFire:
		TNT1 A 0 A_JumpIfInventory("MinigunAmmo",1,1)
		Goto DryAltFire
		TNT1 A 0 A_JumpIfInventory("Spin",1,"StopAlt")
		TNT1 A 0 A_GiveInventory("Spin",1)
		TNT1 A 0 A_PlaySound("CHAINSTA", 6)
		CHAG BCD 1
		TNT1 A 0 A_FireCustomMissile("Alerter", 0, 0, 0, 0)
		TNT1 A 0 A_AlertMonsters
		CHAG ABC 1
		TNT1 A 0 A_PlaySound("CHAINSPI", 6, 0.8, 1)
		Goto Ready2

	StopAlt:
		TNT1 A 0 A_TakeInventory("Spin",1)
		TNT1 A 0 A_PlaySound("CHAINSTO", 6)
		CHAG ACACAB 1 A_WeaponReady
		CHAG CDABCDABCD 2 A_WeaponReady
		CHAG ABCD 3 A_WeaponReady
		Goto Ready2
		
	DryAltFire:
		TNT1 A 0 A_JumpIfInventory("Spin",1,"DryStopAlt")
		TNT1 A 0 A_GiveInventory("Spin",1)
		TNT1 A 0 A_PlaySound("CHAINSTA", 6)
		CHAE BCD 1
		TNT1 A 0 A_AlertMonsters
		CHAE ABC 1
		TNT1 A 0 A_PlaySound("CHAINSPI", 6, 0.8, 1)
		Goto Ready2

	DryStopAlt:
		TNT1 A 0 A_TakeInventory("Spin",1)
		TNT1 A 0 A_PlaySound("CHAINSTO", 6)
		CHAE ACACAB 1 A_WeaponReady
		CHAE CDABCDABCD 2 A_WeaponReady
		CHAE ABCD 3 A_WeaponReady
		Goto Ready2

	WeapSpecial:
		TNT1 A 0 A_Takeinventory("WeapSpecial",1)
		TNT1 A 0 A_PlaySound("weapons/empty",1,0.7)
		TNT1 A 0 A_JumpIfInventory("MinigunTurbo",1,2)
		TNT1 A 0 A_GiveInventory("MinigunTurbo",1)
		Goto Ready2
		TNT1 A 0 A_TakeInventory("MinigunTurbo",1)
		Goto Ready2

// --------------------------------------------------------------------------
//
//	End Stuff
//
// --------------------------------------------------------------------------

	KickFlash:
		TNT1 A 0 A_JumpIfInventory("Spin",1,"KickFlashSpin")
		CHAK ABCD 1
		CHAK E 8
		CHAK DCBA 1
		CHAG A 1
		Stop
		
	KickFlashSpin:
		CHAK AFCG 1
		CHAK EHEHEHEH 1
		CHAK GCFA 1
		CHAG A 1
		Stop

	AirKickFlash:
		TNT1 A 0 A_JumpIfInventory("Spin",1,"AirKickFlashSpin")
		CHAK ABCD 1
		CHAK E 10
		CHAK DCBA 1
		CHAG A 1
		Stop
		
	AirKickFlashSpin:
		CHAK AFCG 1
		CHAK EHEHEHEHEH 1
		CHAK GCFA 1
		CHAG A 1
		Stop

	TauntFlash:
		TNT1 A 0 A_JumpIfInventory("Spin",1,"TauntFlashSpin")
		CHAK ABCD 1
		CHAK E 35
		CHAK DCBA 1
		CHAG A 1
		Stop
		
	TauntFlashSpin:
		CHAK AFCG 1
		CHAK EHEHEHEHEH 1
		CHAK EHEHEHEHEH 1
		CHAK EHEHEHEHEH 1
		CHAK EHEHE 1
		CHAK GCFA 1
		CHAG A 1
		Stop

	GrenadeFlash:
		TNT1 A 0 A_JumpIfInventory("MinigunAmmo",1,7)
		CHGS GHIJKL 1
		Stop
		CHGS ABCDEF 1
		Stop
	}
}
