
//==============================================================================
//============================ Corvus' Hell Staff ==============================
//==============================================================================


ACTOR BrutalHellStaff : Weapon
{
	+AMMO_OPTIONAL
	+ALT_AMMO_OPTIONAL
	Weapon.SelectionOrder 1
	Inventory.RestrictedTo "BrutalCorvus"
	Inventory.ForbiddenTo "Corvette"
	Weapon.AmmoUse1 1
	Weapon.AmmoUse2 20
	Weapon.AmmoGive1 0
	Weapon.YAdjust 15
	Weapon.Kickback 1
	Weapon.AmmoType1 "SkullRodCharge"
	Weapon.AmmoType2 "SkullRodCharge"
	Weapon.SisterWeapon "None"
	ConversationID 190
	Inventory.PickupMessage "Picked up the Hellstaff, engulf everything in radiant plasma!"
	Tag "$TAG_SKULLROD"
	Weapon.SlotNumber 5
	Speed 4

	States
	{
		Spawn:
			TNT1 A 0 A_SpawnItemEx("RedFlareSmall",0,0,40)
			WSKL XX 1 Bright A_SetAngle(angle+speed)
			Goto Spawn
		Ready:
			TNT1 A 0 A_Light(0)
			TNT1 A 0 A_SetCrosshair (11)
			TNT1 A 0 A_StopSound(50)
			TNT1 A 0 A_StopSound(1)
			HROD A 1
			{
				If (CountInv("Action1") == 1)
				{
					return state("Kicking");
				}				
				Else
				{
					A_WeaponReady (WRF_ALLOWZOOM|WRF_ALLOWRELOAD);
					
					If (CallACS("MagicReload")== 1)
					{
						If (A_JumpIfInventory("SkullRodCharge",0,1))
						{
							return state("");
						}
						If (CountInv("BrutalSkullRodAmmo") == 0)
						{
							return state("");
						}
						Else
						{
							return state("Reload");
						}
					}
					If (CallACS("MagicReload")== 2)
					{
						If (A_JumpIfInventory("SkullRodCharge",0,1))
						{
							return state("");
						}
						If (CountInv("BrutalSkullRodAmmo") == 0)
						{
							return state("");
						}
						Else
						{
							If (CountInv("RedAmmoToken") > (20 - (CountInv("Level"))))
							{
								A_GiveInventory("SkullRodCharge",1);
								A_Takeinventory("BrutalSkullRodAmmo",1);
								A_TakeInventory("RedAmmoToken",20);								
							}
							Else
							{
								A_GiveInventory("RedAmmoToken");
							}
						}
						return state("");
					}
					Else
					{
						return state("");
					}
				}
			}	
			Loop
		Deselect:
			HROD A 0 A_Lower
			TNT1 A 0 A_StopSound(1)
			TNT1 A 0 A_StopSound(50)
			HROD A 1 A_Lower
			Loop
		Select:
			HROD A 0 A_Raise
			HROD A 1 A_Raise
			Loop
		Fire:
			TNT1 A 0 A_StopSound(50)
			HROD A 0 A_JumpIfNoAmmo("Reload")
			TNT1 A 0 A_JumpIfInventory("PowerHDLevel2",1,"PoweredFire")
			HROD CDE 1
		Hold:
			HROD A 0 A_JumpIfNoAmmo("Reload")
			TNT1 A 0 A_JumpIfInventory("PowerHDLevel2",1,"PoweredFire")
			//TNT1 A 0 A_PlayWeaponSound("HSNEW")
			TNT1 A 0 A_StartSound("HSNEW",1,CHANF_NOPAUSE)
			HROD F 1 Bright Offset(0,37) A_SetPitch(pitch-(0.4 * GetCVAR("SteadyHand")))
			HROD F 1 Bright Offset(0,35) A_SetPitch(pitch+(0.15 * GetCVAR("SteadyHand")))
			TNT1 A 0
			{
				
				If (GetCVAR("NoScalingPlz") == 1)
				{
					A_FireProjectile("WimpyBrutalHellStaffMissile",0,true,0,-3,0,-1);
				}
				Else
				{
					A_FireProjectile("BrutalHellStaffMissile",0,true,0,-3,0,-1);
				}
			}
			TNT1 A 0 A_Recoil(1 * GetCVAR("SteadyHand"))
			HROD B 1 Offset(0,34) A_SetPitch(pitch+(0.2 * GetCVAR("SteadyHand")))
			HROD B 1 Offset(0,33)
			TNT1 A 0 A_Recoil(-1 * GetCVAR("SteadyHand"))
			HROD B 0 A_ReFire
			HROD EDC 2
			Goto Ready
		AltFire:
			TNT1 A 0 A_StopSound(50)
			HROD A 0 A_JumpIfNoAmmo("Reload")
			TNT1 A 0 A_JumpIfInventory("PowerHDLevel2",1,"PoweredFire2Check")
			TNT1 A 0 A_JumpIf(CallACS("ExpressSkills")==1, "SuperAttack")
			TNT1 A 0 A_JumpIfInventory("Level",6,"SuperAttack")
			TNT1 A 0 ACS_NamedExecuteAlways("NeedLevelAttack",0,6)
			Goto Ready
		SuperAttack:
			HROD A 0 A_JumpIfNoAmmo("Reload")
			//TNT1 A 0 A_PlayWeaponSound("PLASBLST")
			TNT1 A 0 A_StartSound("PLASBLST",1,CHANF_NOPAUSE)
			HROD C 1 A_FireCustomMissile("BrutalHellRainSpawner",0,true,0,-3)
			TNT1 A 0 A_Recoil(1 * GetCVAR("SteadyHand"))
			HROD DE 2 Bright Offset(0,37) A_SetPitch(pitch-(0.4 * GetCVAR("SteadyHand")))
			TNT1 A 0 A_Recoil(-1 * GetCVAR("SteadyHand"))
			HROD F 2 Bright Offset(0,35) A_SetPitch(pitch+(0.15 * GetCVAR("SteadyHand")))
			HROD G 2 Bright Offset(0,34) A_SetPitch(pitch+(0.2 * GetCVAR("SteadyHand")))
			HROD G 2 Offset(0,33)
			HROD B 0 A_Refire("Waiting")
			Goto Ready
		PoweredFire:
			HROD A 0 A_JumpIfNoAmmo("Reload")
			//TNT1 A 0 A_PlayWeaponSound("HSNEW")
			TNT1 A 0
			{
				A_StartSound("HSNEW",1,CHANF_NOPAUSE);
				
				If (GetCVAR("NoScalingPlz") == 1)
				{
					A_FireCustomMissile("WimpyPoweredBrutalHellStaffMissile",0,True,0,18);
					A_FireCustomMissile("WimpyPoweredBrutalHellStaffMissile",0,True,-6,12);
					A_FireCustomMissile("WimpyPoweredBrutalHellStaffMissile",0,False,6,12);
					A_FireCustomMissile("WimpyPoweredBrutalHellStaffMissile",0,CountInv("TokenOfCost"),0,0);
					A_FireCustomMissile("WimpyPoweredBrutalHellStaffMissile",0,False,-12,0);
					A_FireCustomMissile("WimpyPoweredBrutalHellStaffMissile",0,False,12,0);
					A_FireCustomMissile("WimpyPoweredBrutalHellStaffMissile",0,False,-12,-12);
					A_FireCustomMissile("WimpyPoweredBrutalHellStaffMissile",0,False,12,-12);
					A_FireCustomMissile("WimpyPoweredBrutalHellStaffMissile",0,False,0,-18);
				}
				Else
				{
					A_FireCustomMissile("PoweredBrutalHellStaffMissile",0,True,0,18);
					A_FireCustomMissile("PoweredBrutalHellStaffMissile",0,True,-6,12);
					A_FireCustomMissile("PoweredBrutalHellStaffMissile",0,False,6,12);
					A_FireCustomMissile("PoweredBrutalHellStaffMissile",0,CountInv("TokenOfCost"),0,0);
					A_FireCustomMissile("PoweredBrutalHellStaffMissile",0,False,-12,0);
					A_FireCustomMissile("PoweredBrutalHellStaffMissile",0,False,12,0);
					A_FireCustomMissile("PoweredBrutalHellStaffMissile",0,False,-12,-12);
					A_FireCustomMissile("PoweredBrutalHellStaffMissile",0,False,12,-12);
					A_FireCustomMissile("PoweredBrutalHellStaffMissile",0,False,0,-18);
				}
			}
			TNT1 A 0 A_Recoil(1 * GetCVAR("SteadyHand"))
			HROD B 2 Bright Offset(0,37) A_SetPitch(pitch-(0.4 * GetCVAR("SteadyHand")))
			TNT1 A 0 A_Recoil(-1 * GetCVAR("SteadyHand"))
			HROD B 2 Bright Offset(0,35) A_SetPitch(pitch+(0.15 * GetCVAR("SteadyHand")))
			HROD A 2 Offset(0,34) A_SetPitch(pitch+(0.2 * GetCVAR("SteadyHand")))
			HROD A 2 Offset(0,33)
			HROD B 0 A_ReFire("Waiting")
			Goto Ready
		PoweredFire2Check:
			TNT1 A 0 A_JumpIf(CallACS("ExpressSkills")==1, "PoweredFire2")
			TNT1 A 0 A_JumpIfInventory("Level",14,"PoweredFire2")
			TNT1 A 0 ACS_NamedExecuteAlways("NeedLevelAttack",0,14)
			Goto Ready
		PoweredFire2:
			HROD A 0 A_JumpIfNoAmmo("Reload")
			HROD CDEF 2
			TNT1 A 0 A_StartSound("PLASALT",1,CHANF_NOPAUSE|CHANF_LOOPING)
			Goto PoweredFire2Loop
		PoweredFire2Loop:
			HROD A 0 A_JumpIfInventory("SkullRodCharge",3,1)
			Goto Reload
			TNT1 A 0 
			{
				A_SetPitch(frandom(pitch-(0.5 * GetCVAR("SteadyHand")),pitch+(0.5 * GetCVAR("SteadyHand"))));
				A_SetAngle(frandom(angle-(0.5 * GetCVAR("SteadyHand")),angle+(0.5 * GetCVAR("SteadyHand"))));
					
				If (CountInv("TokenOfCost") == 1)
				{
					A_TakeInventory("SkullRodCharge",2);
				}
				If (CountInv("TokenOfCost") == 0)
				{
					A_TakeInventory("SkullRodCharge",1);
				}
			}
			HROD CDEFG 1
			{
				
				If (GetCVAR("NoScalingPlz") == 1)
				{
					A_CustomRailgun(25,0,"Red","Red",RGF_SILENT|RGF_FULLBRIGHT|RGF_CENTERZ,0,10,"BrutalStaffPuffSpark",0,0,0,0,5,5,"HellRainParticle2",10,270);
				}
				Else
				{
					A_CustomRailgun(25,0,"Red","Red",RGF_SILENT|RGF_FULLBRIGHT|RGF_CENTERZ,0,10,"BrutalStaffPuffSpark",0,0,0,0,5,5,"HellRainParticle2",10,270);
				}
			}
			HROD B 2 A_Refire("PoweredFire2Loop")
			Goto Ready
		Reload:
			TNT1 A 0 A_StopSound(1)
			TNT1 A 0 A_JumpIfInventory("BrutalSkullRodAmmo",1,"ReadyChecked")
			TNT1 A 0 A_JumpIfInventory("SkullRodCharge", 1, "Ready")
			TNT1 A 0 A_SelectWeapon("BrutalMeleeStaff")
			Goto Ready
		ReadyChecked:
			TNT1 A 0 A_JumpIfInventory("SkullRodCharge", 0, "Ready")
			HROR ABC 2 A_Weaponready(WRF_NOBOB|WRF_ALLOWZOOM)
			TNT1 A 0 A_StartSound("HRNCHRG",50,CHANF_NOPAUSE|CHANF_LOOPING)
		ReloadLoop:
			HROR DEFG 1 Bright
			{
				A_WeaponReady (WRF_ALLOWZOOM);
				
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("HellRainParticle2",frandom(5,-5),frandom(20,-20),frandom(3,-3),frandom(3,-3),frandom(3,-3),6,0,SXF_NOCHECKPOSITION);
								
				If (CountInv("Action1") == 1)
				{
					return state("KickOverlay");
				}				
				If (A_JumpIfInventory("SkullRodCharge",0,"Ready"))
				{
					return state("ReloadFinish");
				}
				If (CountInv("BrutalSkullRodAmmo") == 0)
				{
					return state("ReloadFinish");
				}
				Else
				{	
					If (CountInv("RedAmmoToken") > (2 - ((CountInv("Level")/5))))
					{
						A_GiveInventory("SkullRodCharge",1);
						A_Takeinventory("BrutalSkullRodAmmo",1);
						A_TakeInventory("RedAmmoToken",20);
						
						If (CountInv("Level") >= 20)
						{
							If (A_JumpIfInventory("SkullRodCharge",0,"Ready"))
							{
								return state("ReloadFinish");
							}
							If (CountInv("BrutalSkullRodAmmo") == 0)
							{
								return state("ReloadFinish");
							}
							Else
							{
								A_GiveInventory("SkullRodCharge",1);
								A_Takeinventory("BrutalSkullRodAmmo",1);
							}
						}
						return state("");
					}
					Else
					{
						A_GiveInventory("RedAmmoToken");
						return state("");
					}
					return state("");
					
				}
			}
			Loop
		ReloadFinish:
			TNT1 A 0 A_StopSound(50)
			HROR CBA 2
			Goto Ready
		Waiting:
			HROD A 1 A_WeaponReady(WRF_NOSECONDARY)
			TNT1 A 0 A_ReFire("Waiting")
			Goto Ready
		Kicking:
			HROD A 1 Offset(0,42)
			HROD A 1 Offset(0,52)
			HROD A 1 Offset(0,62)
			HROD A 1 Offset(0,72)
			HROD A 1 Offset(0,82)
			//TNT1 A 0 A_PlaySound("WHOP")
			TNT1 A 0 A_StartSound("WHOP",4,CHANF_NOPAUSE)
			CKCK ABCD 1 Offset(0,32)
			//TNT1 A 0 A_CustomPunch(random(20,40)+(CallACS("StrengthCalculator")/4),1,0,"BrutalKickPuff", 104)
			TNT1 A 0 A_FireCustomMissile("BootOfFury",0,0,0,0)
			TNT1 A 0 A_Recoil(-6)
			CKCK E 3
			TNT1 A 0 A_Recoil(3)
			CKCK DCB 1
			CKCK AA 1 A_WeaponReady(WRF_NOSECONDARY)
			TNT1 AAA 1 A_WeaponReady(WRF_NOSECONDARY)
			HROD A 1 Offset(0,82)
			HROD A 1 Offset(0,72)
			HROD A 1 Offset(0,62)
			HROD A 1 Offset(0,52)
			HROD A 1 Offset(0,42)
			HROD A 0 Offset(0,32)
			TNT1 A 0 A_JumpIfInventory("Action1",1,"Kicking")
			Goto Ready
		KickOverlay:
			TNT1 A 0 A_StopSound(50)
			TNT1 A 0 A_Overlay(6,"KickingOnly",True)
			HROR C 1 Offset(-10,40)
			HROR C 1 Offset(-20,45)
			HROR C 1 Offset(-30,50)
			HROR B 1 Offset(-40,55)
			HROR B 1 Offset(-50,60)
			HROR B 1 Offset(-60,65)
			HROR A 1 Offset(-70,70)
			HROD A 1 Offset(-80,75)
			HROD A 1 Offset(-90,80)
			HROD A 2 Offset(-100,85)
			HROD A 1 Offset(-90,80)
			HROR A 1 Offset(-80,75)
			HROR A 1 Offset(-70,70)
			HROR A 1 Offset(-60,65)
			HROR A 1 Offset(-50,60)
			HROR A 1 Offset(-40,55)
			HROR A 1 Offset(-30,50)
			HROR A 1 Offset(-20,45)
			HROR A 1 Offset(-10,40)
			HROR A 1 Offset(0,0)
			TNT1 A 0 A_ClearOverlays(6,6)
			goto Reload
		KickingOnly:
			//TNT1 A 0 A_PlaySound("WHOP")
			TNT1 A 0 A_StartSound("WHOP",4,CHANF_NOPAUSE)
			CKCK ABCD 2 Offset(70,-40)
			//TNT1 A 0 A_CustomPunch(random(20,40)+(CallACS("StrengthCalculator")/4),1,0,"BrutalKickPuff", 104)
			TNT1 A 0 A_FireCustomMissile("BootOfFury",0,0,0,0)
			TNT1 A 0 A_Recoil(-6)
			CKCK E 4
			TNT1 A 0 A_Recoil(3)
			CKCK DCB 2
			CKCK A 2 A_WeaponReady(WRF_NOSECONDARY|WRF_NOPRIMARY|WRF_NOSWITCH)
			TNT1 A 0 A_JumpIfInventory("Action1",1,"Kicking")
			TNT1 A 0 Offset(0,0)
			TNT1 A 0 A_ClearOverlays(6,6)
  }
}