// Whether or not to KABLAM on enemies
ACTOR PulverizerLoaded : Boolean {}

//---------------------------------------------//
// Pulverizer AMMO: PRIMARY
//---------------------------------------------//

ACTOR PulvPrimary : Ammo
{
  Inventory.Amount 1
  Inventory.MaxAmount 9
  Ammo.BackpackAmount 0
  Ammo.BackpackMaxAmount 9
  Inventory.Icon "SHELA0"
}

//---------------------------------------------//
// Pulverizer AMMO: SECONDARY
//---------------------------------------------//

ACTOR PulvSecondary : Ammo
{
  Inventory.Amount 1
  Inventory.MaxAmount 15
  Ammo.BackpackAmount 5
  Ammo.BackpackMaxAmount 15
  Inventory.Icon "SHELA0"
}

ACTOR Pulverizer : ZTMeleeWeapon
{
	+WEAPON.MELEEWEAPON
	Weapon.Kickback 100
	Obituary "%k smashed %o's ribcage open with the Pulverizer."
	Tag "Pulverizer"
	Weapon.AmmoType "PulvPrimary"
	Weapon.AmmoType2 "PulvSecondary"
	Weapon.AmmoUse2 0
	Weapon.AmmoGive2 10
	Scale 0.25
	States
	{
		// - - - - - - - - - - - - - - - -
		
		Hip:
			PULI A 1 A_WeaponReady
			Goto Super::Main
			
		// - - - - - - - - - - - - - - - -
		
		DeselectAnim:
			PULI BCDE 1 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
			Goto Super::Deselecting
			
		QuickSelect:
			PULI EDCB 1 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
			Goto Super::Main
		
		SelectAnim:
			PULS A 0 A_PlaySoundEx("pulv/pullout","SoundSlot6")
			PULS ABCDEFGHIJKLM 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			Goto Super::Main
			
		// - - - - - - - - - - - - - - - -
		
		Fire:
			PUNG A 0 A_TakeInventory("PulverizerLoaded",1)
			Goto FireDecide
		AltFire:
			PUNG A 0 A_GiveInventory("PulverizerLoaded",1)
			Goto FireDecide
			
		FireDecide:
			PUNG A 0 A_TakeInventory("HitSomething",1)
			PULI A 0 A_PlaySoundEx("cloth/default","SoundSlot5")
			PULI ABCDE 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			PUNG A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(559,0,0,0)), "SwingLeft")
			PUNG A 0 A_JumpIf(1 == (ACS_ExecuteWithResult(559,0,0,0)), "SwingRight")
			Goto AutoLeft
			
		AutoLeft:
			TNT1 A 0 A_JumpIfInventory("SwungLeft",1,"AutoRight")
			TNT1 A 0 A_GiveInventory("SwungLeft",1)
			Goto SwingLeft
		AutoRight:
			TNT1 A 0 A_TakeInventory("SwungLeft",1)
			Goto SwingRight
			
		// - - - - - - - - - - - - - - - -
			
		// Hefty swings
		SwingLeftHard:
			PUSL A 0 ACS_NamedExecuteAlways("VocalSwingHeavy",0)
			KATA A 0 A_PlaySoundEx("pulv/swingheavy","Weapon")
			Goto SwingLeft+7
		SwingRightHard:
			PUSL A 0 ACS_NamedExecuteAlways("VocalSwingHeavy",0)
			KATA A 0 A_PlaySoundEx("pulv/swingheavy","Weapon")
			Goto SwingRight+7
			
		// - - - - - - - - - - - - - - - -
		
		SwingLeft:
			PUSL ABCD 1
			PUSL A 0 A_JumpIfInventory("PulverizerLoaded",1,"SwingLeftHard")
			PUSL A 0 ACS_NamedExecuteAlways("VocalSwingLight",0)
			KATA A 0 A_PlaySoundEx("pulv/swinglight","Weapon")
			PUSL EFGH 1
			TNT1 A 0 A_JumpIfInventory("PulverizerLoaded",1,"SwingLeftSmasher")
		SwingLeftNormal:
			MBBA A 0 A_CustomPunch(50, FALSE, 0, "PulverizerImpacter", 90)
			Goto SwingLeftEnd
		SwingLeftSmasher:
			TNT1 A 0 A_JumpIfInventory("PulvPrimary",1,2)
			MBBA A 0 A_CustomPunch(100, FALSE, 0, "PulverizerImpacter", 90)
			Goto SwingLeftEnd
			MCFI H 0 A_FireCustomMissile("PulverizerPuff",0,0,0,-2)
			MBBA A 0 A_CustomPunch(0.2, FALSE, 0, "PulverizerImpacter", 90)
			Goto SwingLeftEnd
		SwingLeftEnd:
			PUSL IJKLM 1 A_JumpIfInventory("HitSomething",1,"InterceptLeft")
			TNT1 A 2
			TNT1 A 0 A_ReFire("AutoLeft")
			Goto QuickSelect
			
		// - - - - - - - - - - - - - - - -
			
		SwingRight:
			PUSR ABCD 1
			PUSL A 0 A_JumpIfInventory("PulverizerLoaded",1,"SwingRightHard")
			PUSL A 0 ACS_NamedExecuteAlways("VocalSwingLight",0)
			KATA A 0 A_PlaySoundEx("pulv/swinglight","Weapon")
			PUSR EFGH 1
			TNT1 A 0 A_JumpIfInventory("PulverizerLoaded",1,"SwingRightSmasher")
		SwingRightNormal:
			MBBA A 0 A_CustomPunch(50, FALSE, 0, "PulverizerImpacter", 90)
			Goto SwingRightEnd
		SwingRightSmasher:
			TNT1 A 0 A_JumpIfInventory("PulvPrimary",1,2)
			MBBA A 0 A_CustomPunch(100, FALSE, 0, "PulverizerImpacter", 90)
			Goto SwingRightEnd
			MCFI H 0 A_FireCustomMissile("PulverizerPuff",0,0,0,-2)
			MBBA A 0 A_CustomPunch(0.2, FALSE, 0, "PulverizerImpacter", 90)
			Goto SwingRightEnd
		SwingRightEnd:
			PUSR IJKLM 1 A_JumpIfInventory("HitSomething",1,"InterceptRight")
			TNT1 A 2
			TNT1 A 0 A_ReFire("AutoLeft")
			Goto QuickSelect
			
		// - - - - - - - - - - - - - - - -
			
		// We HIT something!
		InterceptLeft:
			PUIL A 0 A_TakeInventory("PulvPrimary",1)
			PUIL A 0 A_Recoil(2)
			PUIL A 0 A_CustomMissile("ShakeYourAssDouble")
			PUIL C 1 A_SetAngle(angle-9)
			PUIL A 0 A_SetPitch(pitch-2.0)
			PUIL D 1 A_SetAngle(angle-4)
			PUIL A 0 A_SetPitch(pitch-1.0)
			PUIL E 1 A_SetAngle(angle-1)
			PUIL A 0 A_SetPitch(pitch-0.5)
			PUIL F 1 A_SetAngle(angle-0.5)
			PUIL G 1 A_SetAngle(angle+0.1)
			TNT1 A 1 A_SetAngle(angle+0.25)
			TNT1 A 1 A_SetAngle(angle+0.5)
			TNT1 A 1 A_SetAngle(angle+0.8)
			Goto HandleRetract
		InterceptRight:
			PUIL A 0 A_TakeInventory("PulvPrimary",1)
			PUIL A 0 A_Recoil(2)
			PUIL A 0 A_CustomMissile("ShakeYourAssDouble")
			PUIR C 1 A_SetAngle(angle+9)
			PUIL A 0 A_SetPitch(pitch-2.0)
			PUIR D 1 A_SetAngle(angle+4)
			PUIL A 0 A_SetPitch(pitch-1.0)
			PUIR E 1 A_SetAngle(angle+1)
			PUIL A 0 A_SetPitch(pitch-0.5)
			PUIR F 1 A_SetAngle(angle+0.5)
			PUIR G 1 A_SetAngle(angle-0.1)
			TNT1 A 1 A_SetAngle(angle-0.25)
			TNT1 A 1 A_SetAngle(angle-0.5)
			TNT1 A 1 A_SetAngle(angle-0.8)
			Goto HandleRetract
		HandleRetract:
			PURL ABCDEFGH 1 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
			PURL I 0 A_PlaySoundEx("pulv/handledown","SoundSlot6")
			PURL IJKLMNOPQRS 1 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
			Goto QuickSelect
			
		// - - - - - - - - - - - - - - - -

		ReloadAnim:
			PULI ABCDE 1 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
			TNT1 A 2 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
			
			// Bring up
			PURX A 1 Offset(0,200)
			PURX A 1 Offset(0,120)
			PURX A 1 Offset(0,60)
			PURX A 1 Offset(0,30)
			PURX A 1 Offset(0,32)
			
			// Reach for it
			PURX B 1 Offset(-2,34)
			PURX C 1 Offset(-4,36)
			PURX D 1 Offset(-7,37)
			PURX E 1 Offset(-8,38)
			PURX E 2 Offset(-9,39)
			PURX E 1 Offset(-8,38)
			
			PPRL G 0 A_PlaySoundEx("pulv/handledown","SoundSlot6")
			
			// Sling it up
			PURX F 1 Offset(-6,8)
			PURX G 1 Offset(-5,6)
			PURX G 2 Offset(-5,5)
			PURX G 1 Offset(-4,7)
			PURX G 1 Offset(-3,9)
			
			// Bring it down to grab the mag
			PURX G 1 Offset(-1,18)
			PURX G 1 Offset(0,45)
			PURX G 1 Offset(1,60)
			PURX G 1 Offset(2,80)
			PURX G 1 Offset(3,90)
			PURX G 1 Offset(4,94)
			PURX G 1 Offset(5,92)
			
			// Actually grab the mag
			PURX H 1 Offset(5,91)
			PURX I 1 Offset(5,90)
			PURX J 1 Offset(5,89)
			
			// Grabbed it, hold onto it for a minute
			PURX K 1 Offset(5,88)
			PURX K 1 Offset(6,89)
			PURX K 1 Offset(8,91)
			PURX K 1 Offset(10,93)
			
			PURN B 0 A_PlaySoundEx("pulv/magout","SoundSlot5")
			
			// Yank it out
			PURX L 1 Offset(12,102)
			PURX M 1 Offset(14,104)
			PURX N 1 Offset(13,103)
			
			// Linger around for a minute
			PURX N 2 Offset(12,101)
			PURX N 3 Offset(11,100)
			PURX N 2 Offset(10,99)
			
			// Stick it back in
			PURX M 1 Offset(9,98)
			PURX L 1 Offset(8,97)
			
			PURN K 0 A_PlaySoundEx("pulv/magin","SoundSlot6")
			"####" A 0 ACS_NamedExecuteAlways("ReloadAmmo",0,0,0,0)
			
			// Linger
			PURX K 1 Offset(6,70)
			PURX K 2 Offset(5,68)
			PURX K 1 Offset(5,69)
			PURX K 1 Offset(6,72)
			
			// Take our hand off
			PURX O 1 Offset(7,90)
			PURX P 1 Offset(8,100)
			PURX P 1 Offset(10,115)
			
			// Take our other hand off
			PURX R 1 Offset(10,117)
			PURX S 1 Offset(10,116)
			PURX T 1 Offset(10,114)
			
			// Linger
			PURX U 1 Offset(10,111)
			PURX U 1 Offset(9,106)
			
			PURN K 0 A_PlaySoundEx("pulv/handleup","SoundSlot5")
			
			// Snap it back up
			PURX A 1 Offset(4,13)
			PURX A 2 Offset(3,11)
			PURX A 1 Offset(3,12)
			PURX A 1 Offset(2,14)
			
			// Bring it back down to idle
			PURX A 1 Offset(1,18)
			PURX A 1 Offset(0,23)
			PURX A 1 Offset(0,35)
			PURX A 1 Offset(0,48)
			PURX A 1 Offset(0,64)
			PURX A 1 Offset(0,100)
			PURX A 1 Offset(0,150)
			PURX A 1 Offset(0,200)
			
			// Bring it back up
			TNT1 A 1 Offset(0,32)
			PULI EDCBA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
			Goto Super::ReloadComplete

		ReloadAnimOld:
			PURM ABCDEFGHI 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
			PPRL G 0 A_PlaySoundEx("pulv/handledown","SoundSlot6")
			PURM JKLMNOPQRSTUVWXYZ 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
			PURN A 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
			PURN B 0 A_PlaySoundEx("pulv/magout","SoundSlot5")
			PURN BCDEFGHHIIIJK 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
			PURN K 0 A_PlaySoundEx("pulv/magin","SoundSlot6")
			
			"####" A 0 ACS_NamedExecuteAlways("ReloadAmmo",0,0,0,0)

			PURN LMNOPQRSTUVWX 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
			PURN K 0 A_PlaySoundEx("pulv/handleup","SoundSlot5")
			PURN YZ 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
			PURO ABCDEFGH 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
			
			PULI EDCB 1 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
			Goto Super::ReloadComplete
			
		// - - - - - - - - - - - - - - - -
		
		Spawn:
			PULV M -1
			Stop
	}
}