// --------------------------------------------------------------------------
//
//	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("SwitchFlashlight",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",20)
		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("SmokeToken",20,2)
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 //A_GunFlash
	Ready3:
		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 ReadyNoAmmo
		CHAG A 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory("Spin",1,1)
		Loop
		CHAG C 1 A_WeaponReady
		TNT1 A 0 A_AlertMonsters
		Loop

	ReadyNoAmmo:
		CHAE A 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory("Spin",1,1)
		Goto Ready3
		CHAE C 1 A_WeaponReady
		TNT1 A 0 A_AlertMonsters
		Goto Ready3

// --------------------------------------------------------------------------
//
//	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_JumpIfInventory("FireSeq",1,2)
		TNT1 A 0 A_GunFlash("ExtraBullet")
		TNT1 A 0 A_ZoomFactor(0.97)
		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("50CaseSpawn",0,0,-12,-20)
		TNT1 A 0 A_FireCustomMissile("DecorativeTracer",frandom(-2,2),0,0,-12,0,frandom(-2,2))
		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_SpawnItemEx("PlayerMuzzle2",30,5,27)
		TNT1 A 0 A_ZoomFactor(1.0)
		TNT1 A 0 A_SetAngle(frandom(1,-1) + angle)
		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_SetPitch(frandom(-0.4,-0.3) + pitch)
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_FireCustomMissile("Alerter",0,0,0,0)
		TNT1 A 0 A_ReFire
		TNT1 A 0 A_GunFlash("Smoke")
		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 0
		TNT1 A 0 A_JumpIfInventory("SmokeToken",18,24)
		TNT1 A 0 A_JumpIfInventory("SmokeToken",14,19)
		TNT1 A 0 A_JumpIfInventory("SmokeToken",11,14)
		TNT1 A 0 A_JumpIfInventory("SmokeToken",7,9)
		TNT1 A 0 A_JumpIfInventory("SmokeToken",4,4)
		TNT1 AAAaAA 1 A_FireCustomMissile("SmokeSpawner11",0,0,0,0)
		TNT1 AaAA 2 A_FireCustomMissile("SmokeSpawner11",0,0,0,0)
		TNT1 AaAA 3 A_FireCustomMissile("SmokeSpawner11",0,0,0,0)
		TNT1 AaAA 3 A_FireCustomMissile("SmokeSpawner12",0,0,0,0)
		TNT1 AaAA 3 A_FireCustomMissile("SmokeSpawner13",0,0,0,0)
		TNT1 A 0 A_GiveInventory("SmokeToken",20)
		//Goto Flash
		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))
		TNT1 A 0 A_TakeInventory("SmokeToken",1)
		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_FireCustomMissile("Alerter",0,0,0,0)
		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

// --------------------------------------------------------------------------
//
//	Misc.
//
// --------------------------------------------------------------------------

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

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

	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

	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

	SlideKickStartFlash:
		TNT1 A 0 A_JumpIfInventory("Spin",1,"SlideKickStartFlashSpin")
		CHAK ABCD 1
		CHAK E 17
		Stop

	SlideKickStartFlashSpin:
		CHAK AFCG 1
		CHAK EHEHEHEHEHEHEHEHE 1
		Stop

	SlideKickEndFlash:
		TNT1 A 0 A_JumpIfInventory("Spin",1,"SlideKickEndFlashSpin")
		CHAK EDCBA 2
		CHAG A 1
		Stop

	SlideKickEndFlashSpin:
		CHAK HEDGCCBFAA 1
		CHAG A 1
		Stop

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