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

ACTOR Revolver : BaseWeapon
{
	Weapon.AmmoUse1 0
	Weapon.AmmoUse2 0
	Weapon.AmmoGive1 6
	Weapon.AmmoGive2 0
	Weapon.AmmoType1 "RevolverBullets"
	Weapon.AmmoType2 "RevolverAmmo"
	Weapon.SelectionOrder 5000
	Weapon.Kickback 200
	-WEAPON.CHEATNOTWEAPON
    Inventory.PickupSound "CLIPIN"
	Inventory.Pickupmessage "You got the Revolver!"
	Obituary "%o was shot down by %k's revolver."
	tag "Revolver"
    Scale 0.75
	States
	{
 	Spawn:
		RVIC A -1
		Stop
	
	Ready:
        TNT1 A 0 A_JumpIfInventory("GoFatality", 1, "Steady")
        TNT1 A 0 A_PlaySound("revolver/draw", 5)
	Ready1:
        REVD DCBA 1
        Goto Ready2
		
	Ready2:
        TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
        TNT1 A 0 A_JumpIfInventory("Taunting",1,"TauntL")
		TNT1 A 0 A_JumpIfInventory("Salute1", 1, "Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2", 1, "Salute")
        TNT1 A 0 A_JumpIfInventory("Reloading",1,"Reload")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		TNT1 A 0 A_JumpIfInventory("WeapSpecial",1, "WeapSpecial")
		REVF A 1 A_WeaponReady
		Loop
		
	Select:
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist", 1, "PuristGun")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002)==0, "PuristGun")
		TNT1 A 0 A_Takeinventory("FistsSelected",1)
		TNT1 A 0 A_Takeinventory("SawSelected",1)
		TNT1 A 0 A_Takeinventory("ShotgunSelected",1)
		TNT1 A 0 A_Takeinventory("SSGSelected",1)
		TNT1 A 0 A_Takeinventory("MinigunSelected",1)
		TNT1 A 0 A_Takeinventory("PlasmaGunSelected",1)
		TNT1 A 0 A_Takeinventory("RocketLauncherSelected",1)
		TNT1 A 0 A_Takeinventory("GrenadeLauncherSelected",1)
		TNT1 A 0 A_Takeinventory("BFGSelected",1)
		TNT1 A 0 A_Takeinventory("BFG10kSelected",1)
		TNT1 A 0 A_Takeinventory("RailGunSelected",1)
		TNT1 A 0 A_Takeinventory("SubMachineGunSelected",1)
		TNT1 A 0 A_Takeinventory("RevenantLauncherSelected",1)
		TNT1 A 0 A_Takeinventory("LostSoulSelected",1)
		TNT1 A 0 A_Takeinventory("FlameCannonSelected",1)
		TNT1 A 0 A_Takeinventory("HasBarrel",1)
		TNT1 A 0 A_TakeInventory("TossGrenade", 1)
		TNT1 A 0 A_Takeinventory("WeapSpecial",1)
		TNT1 A 5
		TNT1 A 0 A_Raise
		Wait
		
	Deselect:
		TNT1 A 0 A_PlaySound("weapons/changing")
		REVF A 1
		REVD ABCD 1
		TNT1 A 0 A_Takeinventory("TossGrenade",1)
		TNT1 A 0 A_Takeinventory("Unloading",1)
		TNT1 A 0 A_Lower
		Wait
		
	PuristGun:
		TNT1 A 0 A_TakeInventory("Revolver", 1)
		Goto Deselect

	NoAmmo:
		REVF BC 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF A 1 A_PlaySound("weapons/empty")
		Goto Ready2

	Fire:
        TNT1 A 0 A_JumpIfInventory("RevolverAmmo",1,3)
		TNT1 A 0 A_JumpIfInventory("RevolverBullets",1,1)
        Goto NoAmmo
		TNT1 A 0
		Goto Reload
		
		//Bring forth next cylinder slot
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_GiveInventory("RevolverCylinderPos", 1)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",7,2)
		TNT1 A 0 A_jump(256, 2)
		TNT1 A 0 A_TakeInventory("RevolverCylinderPos", 6)
		
		//Check if selected slot has a bullet
		//Slot 1
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",2,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot1",1,1)
		Goto NoAmmo
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot1",1)
		TNT1 A 0 A_jump(256, 19)
		//Slot 2
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",3,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot2",1,1)
		Goto NoAmmo
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot2",1)
		TNT1 A 0 A_jump(256, 15)
		//Slot 3
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",4,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot3",1,1)
		Goto NoAmmo
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot3",1)
		TNT1 A 0 A_jump(256, 11)
		//Slot 4
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",5,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot4",1,1)
		Goto NoAmmo
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot4",1)
		TNT1 A 0 A_jump(256, 7)
		//Slot 5
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",6,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot5",1,1)
		Goto NoAmmo
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot5",1)
		TNT1 A 0 A_jump(256, 3)
		//Slot 6
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot6",1,1)
		Goto NoAmmo
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot6",1)
		
		//Slot has a bullet. Fire!
		REVF BC 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_PlaySound("revolver/fire", 1)
        TNT1 A 0 A_FireCustomMissile("SmokeSpawner",0,0,0,5)
		TNT1 A 0 A_jump(128, 3)
		REVF D 1 BRIGHT A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_jump(256, 2)
		REVF E 1 BRIGHT A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_FireCustomMissile("YellowFlareSpawn",0,0,0,0)
		TNT1 A 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 0, 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx("PlayerMuzzle1",30,5,30)
		TNT1 A 0 A_jump(25, 3)
		TNT1 A 0 A_FireBullets (0.7, 0.7, -1, 55, "RevolverPuff")
		TNT1 A 0 A_jump(256, 2)
		TNT1 A 0 A_FireBullets (0.7, 0.7, -1, 55, "RevolverPuff2")
        TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-2,2), 0, -1, 0)
		TNT1 A 0 A_FireCustomMissile("ShakeYourAss", 0, 0, 0, 0)
		TNT1 A 0 A_Takeinventory("RevolverAmmo",1)
		TNT1 A 0 A_Recoil(0.3)
		TNT1 A 0 A_SetAngle(frandom(2, -2) + angle)
		TNT1 A 0 A_setpitch(pitch - 2.0)
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF GGFF 1 A_setpitch(pitch + 0.2)
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF A 7 A_WeaponReady
		Goto Ready2
		
	NoAmmoAltFire:
		TNT1 A 0 A_PlaySound("weapons/empty")
		REVF STUR 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_Refire
		REVF WXYZ 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF A 3 A_WeaponReady
		Goto Ready2
				
	AltFire:
        TNT1 A 0 A_JumpIfInventory("RevolverAmmo",1,3)
		TNT1 A 0 A_JumpIfInventory("RevolverBullets",1,1)
        Goto NoAmmo
		TNT1 A 0
		Goto Reload
		
		//Bring forth next cylinder slot
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF HIJKL 1
		TNT1 A 0 A_Jump(256,7)
		
	AltHold:
        TNT1 A 0 A_JumpIfInventory("RevolverAmmo",1,3)
		TNT1 A 0 A_JumpIfInventory("RevolverBullets",1,1)
        Goto NoAmmo
		TNT1 A 0
		Goto Reload
		REVF VKL 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_GiveInventory("RevolverCylinderPos", 1)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",7,2)
		TNT1 A 0 A_jump(256, 2)
		TNT1 A 0 A_TakeInventory("RevolverCylinderPos", 6)
		
		//Check if selected slot has a bullet
		//Slot 1
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",2,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot1",1,1)
		Goto NoAmmoAltFire
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot1",1)
		TNT1 A 0 A_jump(256, 19)
		//Slot 2
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",3,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot2",1,1)
		Goto NoAmmoAltFire
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot2",1)
		TNT1 A 0 A_jump(256, 15)
		//Slot 3
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",4,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot3",1,1)
		Goto NoAmmoAltFire
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot3",1)
		TNT1 A 0 A_jump(256, 11)
		//Slot 4
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",5,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot4",1,1)
		Goto NoAmmoAltFire
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot4",1)
		TNT1 A 0 A_jump(256, 7)
		//Slot 5
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",6,4)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot5",1,1)
		Goto NoAmmoAltFire
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot5",1)
		TNT1 A 0 A_jump(256, 3)
		//Slot 6
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot6",1,1)
		Goto NoAmmoAltFire
		TNT1 A 0 A_Takeinventory("RevolverCylinderSlot6",1)
		
		//Slot has a bullet. Fire!
        TNT1 A 0 A_PlaySound("revolver/fire", 1)
		TNT1 A 0 A_FireCustomMissile("SmokeSpawner",0,0,0,5)
		TNT1 A 0 A_jump(25, 3)
		REVF M 1 BRIGHT A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_jump(256, 2)
		REVF N 1 BRIGHT A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_FireCustomMissile("YellowFlareSpawn",0,0,0,0)
		TNT1 A 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 0, 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx("PlayerMuzzle1",30,5,30)
		TNT1 A 0 A_jump(192, 3)
		TNT1 A 0 A_FireBullets (1.5, 1.5, -1, 55, "RevolverPuff")
		TNT1 A 0 A_jump(256, 2)
		TNT1 A 0 A_FireBullets (1.5, 1.5, -1, 55, "RevolverPuff2")
        TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-2,2), 0, -1, 0)
		TNT1 A 0 A_FireCustomMissile("ShakeYourAss", 0, 0, 0, 0)
		TNT1 A 0 A_Takeinventory("RevolverAmmo",1)
		TNT1 A 0 A_Recoil(0.3)
		
		TNT1 A 0 A_SetAngle (frandom(3, -3) + angle)
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF O 1 A_SetPitch (pitch - 0.9)
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF P 1 A_SetPitch (pitch - 0.9)
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF Q 1 A_SetPitch (pitch + 0.3)
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF R 1 A_Refire
		REVF WXYZ 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		REVF A 3 A_WeaponReady
		Goto Ready2

	WeapSpecial:
		REVF A 1
        REVR ABC 1 
		REVR DE 1
	SpinMoar:
		TNT1 A 0 A_Takeinventory("WeapSpecial",1)
		TNT1 A 0 A_PlaySound("revolver/spin")
		REVR UTSR 2
		REVS ABCDEFDE 1
		REVS CD 2
		REVS E 3
		TNT1 A 0 A_JumpIfInventory("WeapSpecial",1, "SpinMoar")
		REVR EDCBA 2
		TNT1 A 0 A_GiveInventory("RevolverCylinderPos", random(1, 6))
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderPos",7,2)
		TNT1 A 0 A_jump(256, 2)
		TNT1 A 0 A_TakeInventory("RevolverCylinderPos", 6)
		TNT1 A 0 A_Takeinventory("Reloading",1)
		TNT1 A 0 A_Takeinventory("WeapSpecial",1)
		Goto Ready2
	
    Reload:
		TNT1 A 0 A_Takeinventory("Reloading",1)
		TNT1 A 0 A_JumpIfInventory("RevolverAmmo",6,"Ready2")
        TNT1 A 0 A_JumpIfInventory("RevolverBullets",1,2)
		REVF A 1 A_PlaySound("weapons/empty")
		Goto Ready2
		REVF A 5 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
        TNT1 A 0 A_PlaySound("revolver/reload")
        REVR ABC 2
		REVR DEF 1
        REVR G 2
		
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot1",1,2)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot2",1,2)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot3",1,2)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot4",1,2)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot5",1,2)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		TNT1 A 0 A_JumpIfInventory("RevolverCylinderSlot6",1,2)
		TNT1 A 0 A_FireCustomMissile("RevolverCaseSpawn",-2,0,-8,0)
		
        REVR HIJKLMNOPQRSTUEDCBA 2
		REVF Z 2
				
	InsertBullets:
		TNT1 A 0 A_JumpIfInventory("RevolverAmmo",6,5)
		TNT1 A 0 A_JumpIfInventory("RevolverBullets",1,2)
		TNT1 A 0 A_jump(255,3)
		TNT1 A 0 A_Giveinventory("RevolverAmmo",1)
		TNT1 A 0 A_Takeinventory("RevolverBullets",1)
		Goto InsertBullets
		TNT1 A 0 A_Takeinventory("Reloading",1)
		TNT1 A 0 A_Giveinventory("RevolverCylinderSlot1",1)
		TNT1 A 0 A_Giveinventory("RevolverCylinderSlot2",1)
		TNT1 A 0 A_Giveinventory("RevolverCylinderSlot3",1)
		TNT1 A 0 A_Giveinventory("RevolverCylinderSlot4",1)
		TNT1 A 0 A_Giveinventory("RevolverCylinderSlot5",1)
		TNT1 A 0 A_Giveinventory("RevolverCylinderSlot6",1)
        Goto Ready2
		
	KickFlash:
		REVK ABCD 1
		REVK D 8
		REVK DCBA 1
		Stop
		
	AirKickFlash:
		REVK ABCD 1
		REVK D 10
		REVK DCBA 1
		Stop
		
	TauntFlash:
		REVD ABCD 1
		TNT1 A 35
		REVD DCBA 1
		Stop

	GrenadeFlash:
		REVD ABCD 1
		Stop
	}
}

ACTOR RevolverCylinderPos : Inventory { Inventory.MaxAmount 12 }
ACTOR RevolverCylinderSlot1 : Ammo { Inventory.MaxAmount 1 }
ACTOR RevolverCylinderSlot2 : Ammo { Inventory.MaxAmount 1 }
ACTOR RevolverCylinderSlot3 : Ammo { Inventory.MaxAmount 1 }
ACTOR RevolverCylinderSlot4 : Ammo { Inventory.MaxAmount 1 }
ACTOR RevolverCylinderSlot5 : Ammo { Inventory.MaxAmount 1 }
ACTOR RevolverCylinderSlot6 : Ammo { Inventory.MaxAmount 1 }

Actor RevolverPuff
{
	Renderstyle Translucent
	Alpha 0.4
	Scale 1.5
	Radius 0
	Height 0
	Gravity 0.01
	DamageType Blast
	Decal "BulletDecalNew1"
	+NOBLOCKMAP
	+NOGRAVITY
	+NOEXTREMEDEATH
	+FORCEXYBILLBOARD
	+DONTSPLASH
	-EXPLODEONWATER
	states
	{
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx ("RicoChet",0,0,-5,0,0,0,0,SXF_NOCHECKPOSITION,0)
	TNT1 A 1 ThrustThingZ(0,80,0,1)
	TNT1 AAAA 0
	Melee:
	TNT1 A 1 ThrustThingZ(0,80,0,1)
	stop
	}
}

Actor RevolverPuff2 : RevolverPuff
{
	DamageType SSG
}

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