// --------------------------------------------------------------------------
//
//	Revolver
//
// --------------------------------------------------------------------------

ACTOR DualRevolver : BaseWeapon
{
	Weapon.AmmoUse1 0
	Weapon.AmmoUse2 0
	Weapon.AmmoGive1 6
	Weapon.AmmoGive2 0
	Weapon.AmmoType1 "RevolverBullets"
	Weapon.AmmoType2 "DualRevolverAmmo"
	Weapon.SelectionOrder 5000
	Weapon.Kickback 20
	-WEAPON.CHEATNOTWEAPON
	+POWERED_UP
	Weapon.SisterWeapon "TE_Revolver"
	Inventory.PickupSound "revolver/draw"
	Inventory.Pickupmessage "You got the Revolver!"
	Obituary "%o got shot into pieces by %k's revolvers."
	tag "Dual Revolvers"
	Scale 0.6
	States
	{
	Spawn:
		RVIC A -1
		Stop

	Select:
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist", 1, "PuristGun")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,2)==0, "PuristGun")
		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_PlaySound("weapons/changing")
		TNT1 A 0 A_GunFlash("StopLeft")
		2RES ABCDEF 1
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1028)==2, 2)
		TNT1 A 0 A_Takeinventory("PowerWeaponLevel2",1)
		TNT1 A 0 A_Lower
		Wait
		
	StopLeft:
		TNT1 A 0
		Stop
		
	Ready:
		TNT1 A 0 A_JumpIfInventory("GoFatality", 1, "Steady")
		TNT1 A 0 A_PlaySound("revolver/draw", 5)
	Ready1:
		2RES FEDCBA 1
		TNT1 A 0 A_Gunflash("Ready3")
	Ready2:
		TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
		TNT1 A 0 A_JumpIfInventory("Reloading",1,"Reload")
		TNT1 A 0 A_JumpIfInventory("Taunting",1,"Taunt")
		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("StartDualWield",1,"DualWield")
		TNT1 A 0 A_JumpIfInventory("IdleCounter",200,"PlayerIsIdle")
		2REF A 1 A_WeaponReady
		Goto Ready2
	
	Ready3:
		2REF I 1 A_JumpIfInventory("PressedUse",1,"TryUse2")
		Loop

	Tryuse2:
		TNT1 A 0
		TNT1 A 0 A_TakeInventory("PressedUse",100)
		TNT1 A 0 A_FireCustomMissile("UseAttack",0,0,0,0,0,0)
		TNT1 A 0 A_FireCustomMissile("StealthAttack",0,0,0,0,0,0)
		2REF I 10
		TNT1 A 0 A_JumpIfInventory("PressedUse",1,"Interrupt2")
		Goto Ready3

	Interrupt2:
		TNT1 A 0
		TNT1 A 0 A_TakeInventory("PressedUse",1)
		2REF I 10
		TNT1 A 0 A_JumpIfInventory("PressedUse",1,"Interrupt2")
		Goto Ready3


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

//DualRightFire		1 means that the right weapon is currently playing it's fire animation.
//					It sets to 1 at the beginning of the animation, and returns to 0 after the animation is done.
//
//DualLeftFire		1 means that the left weapon is currently playing it's fire animation.
//					It sets to 1 at the beginning of the animation, and returns to 0 after the animation is done.
//
//FireSeq			Toggles between 0 and 1 every time we shoot.
//					If = 0, the next weapon to fire will be the left. Set to 1
//					If = 1, the next weapon to fire will be the right. Set to 0
//
//DualFireState		This keeps track of the frames for the right weapon animation.
//
	AltFire:
		TNT1 A 0 A_JumpIfInventory("DualRightFire",1,"ContinueAnimation")
		TNT1 A 0 A_JumpIfInventory("DualLeftFire",1,"ContinueAnimation")
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",2,1)
		Goto Reload
		TNT1 A 0 A_Giveinventory("RevolverDummyToken",1)//Give this token to let the animations know that we fired both guns simultaneously
		TNT1 A 0 A_Gunflash("FireLeft")
		Goto FireRight

	Fire:
// Check which weapon should be fired next,
// and abort if that weapon is currently playing it's animation. Continue otherwise.
		TNT1 A 0 A_JumpIfInventory("FireSeq", 1, 3)
		TNT1 A 0 A_JumpIfInventory("DualLeftFire",1,"ContinueAnimation")
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_JumpIfInventory("DualRightFire",1,"ContinueAnimation")
// Check if we are out of ammo.
// Then check if any animations are currently playing. If so, we abort. Otherwise we reload the weapons.
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",1,3)
		TNT1 A 0 A_JumpIfInventory("DualRightFire",1,"ContinueAnimation")
		TNT1 A 0 A_JumpIfInventory("DualLeftFire",1,"ContinueAnimation")
		Goto Reload
// A weapon is ready to fire, and we have ammo,
// check which weapon to fire and go to that weapons fire state.
		TNT1 A 0 A_JumpIfInventory("FireSeq", 1, "FireRight")
		TNT1 A 0 A_Giveinventory("FireSeq",1)
		TNT1 A 0 A_Gunflash("FireLeft")														
		
	ContinueAnimation:
		TNT1 A 0 A_JumpIfInventory("DualFireState",7,58)
		TNT1 A 0 A_JumpIfInventory("DualFireState",6,54)
		TNT1 A 0 A_JumpIfInventory("DualFireState",5,50)
		TNT1 A 0 A_JumpIfInventory("DualFireState",4,46)
		TNT1 A 0 A_JumpIfInventory("DualFireState",3,15)
		TNT1 A 0 A_JumpIfInventory("DualFireState",2,10)
		TNT1 A 0 A_JumpIfInventory("DualFireState",1,7)
		TNT1 A 0
		Goto Ready2

	FireRight:
		TNT1 A 0 A_Takeinventory("FireSeq",1)
		TNT1 A 0 A_Giveinventory("DualRightFire",1)
		TNT1 A 0 A_PlaySound("revolver/fire1", 1)
		TNT1 A 0 A_PlaySound("revolver/fire2", 5,0.7)
		TNT1 A 0 A_Giveinventory("DualFireState",1)
		2REF B 1 A_WeaponReady
		TNT1 A 0 A_Giveinventory("DualFireState",1)
		2REF C 1 A_WeaponReady
		TNT1 A 0 A_ZoomFactor(0.80)
		TNT1 A 0 A_FireCustomMissile("SmokeSpawner",0,0,15,5)
		TNT1 A 0 A_Giveinventory("DualFireState",1)
		2REF D 1 BRIGHT A_WeaponReady
		TNT1 AAAA 0 A_FireCustomMissile("ShotgunParticles",random(-10,10),0,15,-8,0,random(-10,10))
		TNT1 A 0 A_FireCustomMissile("YellowFlareSpawn",0,0,15,0)
		TNT1 AA 0 A_FireCustomMissile("GunFireSmoke",0,0,15,0,0,0)
		TNT1 A 0 A_FireCustomMissile("Tracer",frandom(-2,2),0,15,0)
		TNT1 A 0 A_FireCustomMissile("ShakeYourAssDouble",0,0,0,0)
		TNT1 A 0 A_SpawnItemEx("PlayerMuzzle2",30,5,27)
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_SetAngle(frandom(1.0,-3.2) + angle)
		TNT1 A 0 A_SetPitch(frandom(1.2,-1.2) + pitch)

		TNT1 A 0 A_Jump(25,6) //10% chance to do a critical hit.
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff1B")
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff1B")
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff1A")
		TNT1 A 0 A_FireCustomMissile("RWP", 0, 0, 0, 0) //RevolverWallPenetrator
		TNT1 A 0 A_Jump(256,5)
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff2B")
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff2B")
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff2A")
		TNT1 A 0 A_FireCustomMissile("RWP", 0, 0, 0, 0) //RevolverWallPenetrator
		
		TNT1 A 0 A_Takeinventory("DualRevolverAmmo",1)
		TNT1 A 0 A_Recoil(0.3)
		TNT1 A 0 A_SetAngle(frandom(2,-2) + angle)
		
		TNT1 A 0 A_JumpIfInventory("RevolverDummyToken",1,2)
		TNT1 A 0 A_setpitch(pitch - 8.0)
		
		TNT1 A 0 A_ZoomFactor(1.00)
		TNT1 A 0 A_Giveinventory("DualFireState",1)
		2REF E 1 A_WeaponReady
		
		TNT1 A 0 A_JumpIfInventory("RevolverDummyToken",1,2)
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_setpitch(pitch - 8.0)
		
		TNT1 A 0 A_setpitch(pitch + 1.3)
		TNT1 A 0 A_Giveinventory("DualFireState",1)
		2REF F 1 A_WeaponReady
		TNT1 A 0 A_setpitch(pitch + 1.3)
		TNT1 A 0 A_Giveinventory("DualFireState",1)
		2REF G 1 A_WeaponReady
		TNT1 A 0 A_setpitch(pitch + 1.3)
		TNT1 A 0 A_Giveinventory("DualFireState",1)
		2REF H 1 A_WeaponReady
		TNT1 A 0 A_setpitch(pitch + 1.3)
		TNT1 A 0 A_Takeinventory("DualRightFire",1)
		TNT1 A 0 A_Takeinventory("DualFireState",10)
		2REF A 7 A_WeaponReady
		Goto Ready2
		
	FireLeft:
		TNT1 A 0 A_Giveinventory("DualLeftFire",1)
		TNT1 A 0 A_PlaySound("revolver/fire1", 1)
		TNT1 A 0 A_PlaySound("revolver/fire2", 5,0.7)
		2REF JK 1 
		TNT1 A 0 A_ZoomFactor(0.80)
		TNT1 A 0 A_FireCustomMissile("SmokeSpawner",0,0,-15,5)
		2REF L 1 BRIGHT 
		TNT1 AAAA 0 A_FireCustomMissile("ShotgunParticles",random(-10,10),0,-15,-8,0,random(-10,10))
		TNT1 A 0 A_FireCustomMissile("YellowFlareSpawn",0,0,-15,0)
		TNT1 AA 0 A_FireCustomMissile("GunFireSmoke",0,0,-15,0,0,0)
		TNT1 A 0 A_FireCustomMissile("Tracer",frandom(-2,2),0,-15,0)
		TNT1 A 0 A_FireCustomMissile("ShakeYourAssDouble",0,0,0,0)
		TNT1 A 0 A_SpawnItemEx("PlayerMuzzle2",30,5,27)
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_SetAngle(frandom(3.2,-1.0) + angle)
		TNT1 A 0 A_SetPitch(frandom(1.2,-1.2) + pitch)

		TNT1 A 0 A_jump(25,6) //10% chance to do a critical hit.
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff1B")
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff1B")
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff1A")
		TNT1 A 0 A_FireCustomMissile("RWP", 0, 0, 0, 0) //RevolverWallPenetrator
		TNT1 A 0 A_Jump(256,5)
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff2B")
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff2B")
		TNT1 A 0 A_FireBullets(0, 0, -1, 21, "RevolverPuff2A")
		TNT1 A 0 A_FireCustomMissile("RWP", 0, 0, 0, 0) //RevolverWallPenetrator
		
		TNT1 A 0 A_Takeinventory("DualRevolverAmmo",1)
		TNT1 A 0 A_Recoil(0.3)
		TNT1 A 0 A_SetAngle(frandom(2,-2) + angle)
		TNT1 A 0 A_setpitch(pitch - 8.0)
		TNT1 A 0 A_ZoomFactor(1.00)
		2REF MNOP 1 A_setpitch(pitch + 1.3)
		TNT1 A 0 A_Takeinventory("DualLeftFire",1)
		TNT1 A 0 A_Takeinventory("RevolverDummyToken",1,1)
		Goto Ready3
				
// --------------------------------------------------------------------------
//
//	Reload
//
// --------------------------------------------------------------------------
		
	Reload:
		TNT1 A 0 A_TakeInventory("Reloading",1)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",12,"Ready2")//Don't reload if weapons are full.
		TNT1 A 0 A_JumpIfInventory("RevolverBullets",1,1)//Do we have any ammo to reload with?
		Goto DryFire
		TNT1 A 0 A_GunFlash("StopLeft")
		TNT1 A 0 A_JumpIfInventory("TurboReload",1,"ReloadLoop")
		TNT1 A 0 A_GiveInventory("Pumping", 1)
		
		2RES ABCDEF 1
		TNT1 A 0 A_PlaySound("revolver/reload",1)
		TNT1 A 8
		//REVF A 5
		//REVR A 2
		//REVR BC 2
		//REVR DEF 1
		//REVR GG 2
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",10,10)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",8,8)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",6,6)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",4,4)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",2,2)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 30
		//REVR HIJKLMNOPQRSTUEDCBA 2
		//REVF Z 2
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",11,"ReloadLoop")//If we have 11 ammo, just reload that one bullet.
		TNT1 A 4
		TNT1 A 0 A_PlaySound("revolver/reload",5)
		TNT1 A 9
		//REVF A 5
		//REVR A 2
		//REVR BC 2
		//REVR DEF 1
		//REVR GG 2
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",9,10)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",7,8)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",5,6)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",3,4)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,8,0)
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",1,2)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,8,0)
		TNT1 A 30
		//REVR HIJKLMNOPQRSTUEDCBA 2
		//REVF Z 2
		TNT1 A 0 A_TakeInventory("Reloading",1)
		Goto ReloadLoop

	ReloadLoop:
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo",12,"ReloadDone")
		TNT1 A 0 A_JumpIfInventory("RevolverBullets",1,1)
		Goto ReloadDone
		TNT1 A 0 A_Giveinventory("DualRevolverAmmo",1)
		TNT1 A 0 A_Takeinventory("RevolverBullets",1)
		Goto ReloadLoop
		
	ReloadDone:
		TNT1 A 0 A_Takeinventory("Reloading",1)
		TNT1 A 0 A_JumpIfInventory("TurboReload",1,1)
		Goto Ready1
		TNT1 A 0 A_Refire
		Goto Ready2

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

	DualWield:
		TNT1 A 0 A_Takeinventory("StartDualWield",1)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1028)==2, "Ready2")
		TNT1 A 0 A_Takeinventory("PowerSphere2",1)
		Goto Deselect

	PuristGun:
		TNT1 A 0 A_TakeInventory("DualRevolver", 1)
		Goto Deselect
	
	DryFire:
		TNT1 A 0 A_JumpIfInventory("DualRevolverAmmo", 1, "Ready2")
		TNT1 A 0 A_JumpIfInventory("FireSeq", 1, 2)
		
		TNT1 A 0 A_Gunflash("DryFire2")
		Goto Ready2
		TNT1 A 0 A_JumpIfInventory("DualRightFire",1,"ContinueAnimation")
		TNT1 A 0 A_Takeinventory("FireSeq",1)
		2REF BC 2
		2REF A 1 A_PlaySound("weapons/empty2")
		Goto Ready2
		
	DryFire2:
		TNT1 A 0 A_JumpIfInventory("DualLeftFire",1,"ContinueAnimation")
		TNT1 A 0 A_Giveinventory("FireSeq",1)
		2REF JK 2
		2REF I 1 A_PlaySound("weapons/empty2")
		Goto Ready3

// --------------------------------------------------------------------------
//
//	End stuff
//
// --------------------------------------------------------------------------

	Taunt:
		2RES S 5
		TNT1 A 0 A_PlaySound("FUCK", 2)
		TNT1 A 0 A_FireCustomMissile("Taunter", 0, 0, -1, 0)
		TNT1 A 0 A_FireCustomMissile("Taunter", -9, 0, -1, 0)
		TNT1 A 0 A_FireCustomMissile("Taunter", 9, 0, -1, 0)
		TNT1 A 0 A_AlertMonsters
		2RES S 20
		TNT1 A 0 A_Takeinventory("Taunting",1)
		TNT1 A 0 A_Gunflash("Ready3")
		Goto Ready2

	KickFlash:
		2RES ABCDE 1
		2RES F 6
		2RES EDCBA 1
		2RES S 1
		Goto Ready3
		
	AirKickFlash:
		2RES ABCDE 1
		2RES F 8
		2RES EDCBA 1
		2RES S 1
		Goto Ready3
		
	GrenadeFlash:
		2RES ABCDEF 1
		Stop
	}
}

ACTOR DualRevolverAmmo: Ammo
{
	+INVENTORY.IGNORESKILL
	Inventory.Amount 0
	Inventory.MaxAmount 12
	Ammo.BackpackAmount 0
	Ammo.BackpackMaxAmount 12
	Inventory.Icon "RVICA0"
}