ACTOR HellStaff : Weapon
{
  Weapon.KickBack 0
  Weapon.YAdjust 0
  Weapon.AmmoType1 "DemonAmmo"
  Weapon.AmmoType2 "DemonAmmo"
  Weapon.AmmoUse1 1
  Weapon.AmmoUse2 2
  Weapon.AmmoGive 20
  inventory.pickupsound "HellStaff/Pickup"
  Attacksound "HellStaff/LeechFire"
  Tag "Hell Staff"
  +INVENTORY.UNDROPPABLE
  Inventory.PickupMessage "You have acquired the Hell Staff!"
  States
  {
  Spawn:
    HLS2 F -1
    Loop
  Select:
    HLS2 A 1 A_Raise
    Loop
  Deselect:
    HLS2 A 1 A_Lower
    Loop
  Ready:
    HLS2 ABCDCBA 4 A_WeaponReady
    Loop
  Fire:
    HLS2 D 1
    HLS2 E 2 Bright Offset(0, 48) A_FireCustomMissile("HellStaffBall2")
    HLS2 D 2 Offset(0, 40)
    HLS2 D 2 Offset(0, 36) A_ReFire
    Goto Ready
  AltFire:
	HLS2 D 1
	HLS2 E 4 Bright Offset(0, 48) A_FireBullets(4,3,2,6,"LeechPuff1")
	HLS2 D 2 Offset(0, 40)
    HLS2 D 1 Offset(0, 36) A_ReFire
	Goto Ready
  }
}


Actor LeechPuff1
{
   Radius 3
   Height 3
   RENDERSTYLE ADD
   PROJECTILE
   ALPHA 0.75
   Scale 0.67
   Damagetype soul
   +ALWAYSPUFF
   +PUFFONACTORS
   +PUFFGETSOWNER
   +NOGRAVITY
   +FORCEXYBILLBOARD
   States
   {
   Spawn:
      HSB1 G 1 Bright
      HSB1 G 0 Bright A_SpawnItem("LeechGiver1",0,0)
      HSB1 G 3 Bright A_Playsound("HellStaff/LeechHit")
      HSB1 H 4 Bright
      HSB1 IJ 4 Bright
      HSB1 J 4 A_FadeOut(0.10)
      goto Spawn+10
   Crash:
      HSB1 BCDEF 4 Bright
      stop
      }
}

ACTOR LeechGiver1
{   
   Radius 0
   Height 1
   RENDERSTYLE NONE
   +LOOKALLAROUND
   States
   {
   Spawn:
      NULL A 0 
      NULL A 1 Bright A_Look
      loop
   See:
      NULL A 0
      NULL A 0 A_FaceTarget
      NULL A 0 A_CustomMissile("LeechBall1",0,0,0,0)
      stop
   }
}


ACTOR LeechBall1 : HealthBonus
{
   Radius 8
   Height 12
   Speed 20
   Damage 0
   RENDERSTYLE ADD
   ALPHA 0.75
   Scale 0.67
   ReactionTime 35
   Inventory.PickupMessage "Soul leeched!"
   Inventory.PickupSound "HellStaff/LeechGet"
   Inventory.MaxAmount 150
   Inventory.Amount 2
   SeeSound "HellStaff/leechb"
   DeathSound "weapons/leechh"
   +NOGRAVITY
   +SEEKERMISSILE
   +DROPOFF
   +NOBLOCKMONST
   +CANPASS
   +FORCEXYBILLBOARD
   -COUNTITEM
   States
   {
   Spawn:
      HSB1 A 0 Bright
      HSB1 A 0 Bright A_ChangeFlag("Noblockmap",1)
      HSB1 A 1 Bright
      HSB1 A 0 Bright A_ChangeFlag("Noblockmap",0)
      HSB1 A 1 Bright A_CStaffMissileSlither
      HSB1 A 1 Bright A_SeekerMissile(15,25)
      HSB1 A 0 Bright A_SpawnItem("LeechFX1",0,0)
      HSB1 A 1 Bright A_CStaffMissileSlither
      HSB1 A 1 Bright A_SeekerMissile(15,25)
      HSB1 A 0 Bright A_SpawnItem("LeechFX1",0,0)
      HSB1 A 0 Bright A_CountDown
      goto Spawn+4
   Death:
      HSB1 A 0
      stop
   }
}

Actor LeechFX1 : ImpBallTrail
{
   RENDERSTYLE ADD
   ALPHA 0.75
   Scale 0.67
   +FORCEXYBILLBOARD
   States
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
      TNT1 A 3
      HSB1 BCDEF 4 Bright
      stop
      }
}

ACTOR HellStaffBall1 : HornRodFX1
{
  Radius 12
  Height 8
  Speed 28
  Damage 6
  Projectile
  +THRUSPECIES
  -NOBLOCKMAP
  RenderStyle Add
  Species "Player"
  SeeSound "HellStaff/Fire"
  DeathSound "HellStaff/Explode"
  Obituary "$OB_MPSKULLROD"
  States
  {
  Spawn:
	FX00 AAA 1 BRIGHT A_SpawnItemEx("HellStaffTrail2", 0, 0, 0, 0, 0, 0, 0, 128)
	FX00 BBB 1 BRIGHT A_SpawnItemEx("HellStaffTrail1", 0, 0, 0, 0, 0, 0, 0, 128)
    Loop
  Death:
    TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
    FX00 HI 5 Bright
    FX00 JK 4 Bright
    FX00 LM 3 Bright
    Stop
  }
}



ACTOR HellStaffBall2 : HellStaffBall1
{
  Speed 25
  Damage 8
  Scale 0.8
  +SeekerMissile
  +FORCERADIUSDMG
  States
  {
  Spawn:
	FX00 CCC 1 BRIGHT A_SpawnItemEx("HellStaffTrail1", 0, 0, 0, 0, 0, 0, 0, 128)
	TNT1 A 0 A_SeekerMissile(30, 45)
	FX00 DDD 1 BRIGHT A_SpawnItemEx("HellStaffTrail2", 0, 0, 0, 0, 0, 0, 0, 128)
	FX00 EEE 1 BRIGHT A_SpawnItemEx("HellStaffTrail1", 0, 0, 0, 0, 0, 0, 0, 128)
	TNT1 A 0 A_SeekerMissile(30, 45)
	FX00 FFF 1 BRIGHT A_SpawnItemEx("HellStaffTrail2", 0, 0, 0, 0, 0, 0, 0, 128)
    Loop
  Death:
    TNT1 A 0 A_SpawnItemEx("RedParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
	TNT1 A 0 A_Explode(20,64)
    FX00 HI 5 Bright
    FX00 JK 4 Bright
    FX00 LM 3 Bright
    Stop
  }
}

Actor HellStaffTrail1 : ImpBallTrail
{
  Radius 0
  Height 0
  Speed 0
  Damage 0
  Scale 0.8
  Alpha 0.8
  Renderstyle Add
  PROJECTILE
  +DONTREFLECT
  states
  {
  Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
    FX00 B 1 Bright A_FadeOut(0.1)
    loop
  }
}

Actor HellStaffTrail2 : HellStaffTrail1
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
    FX00 A 1 Bright A_FadeOut(0.1)
    loop
  }
}