Actor DrainEffectItem : Custominventory
{
	Inventory.MaxAmount 0
	+Inventory.AUTOACTIVATE
	states
	{
		Use:
		TNT1 A 0 A_SpawnItemEx("DrainEffectPuff", frandom(-16,16), frandom(-16,16), frandom(height/2-8,height/2+8), 0, 0, 0.5*frandom(2,5), 0, 0, 0)
		Stop
	}
}

Actor DrainPuffGiver : Custominventory
{
	Inventory.MaxAmount 0
	+Inventory.AUTOACTIVATE
	states
	{
	Use:
		TNT1 A 0 A_SpawnItemEx("DrainBulletPuff",0,0,32)
		Stop
	}
}

Actor DrainEffectPuff
{
	Projectile
	+NOCLIP
    RenderStyle Add
	Scale 0.67
    States
    {
    Spawn:
	SKP1 ABCDEF 3 Bright
	Stop
    }
}

Actor UseDrain : Custominventory
{
	Inventory.MaxAmount 0
	+Inventory.AUTOACTIVATE
	states
	{
	Use:
		TNT1 A 0 A_FireCustomMissile ("DrainCurseProjectile",0,0)
		Stop
	}
}

Actor DrainHitscan : Custominventory
{
	Inventory.MaxAmount 0
	+Inventory.AUTOACTIVATE
	states
	{
	Use:
		TNT1 A 0 A_FireBullets(0,0,1,0,"DrainBulletPuff",0)
		Stop
	}
}

Actor DrainBulletPuff
{
	Mass 5
	+NOBLOCKMAP
	+NOGRAVITY
	+ALWAYSPUFF
	+PUFFONACTORS
	+BLOODLESSIMPACT
	+MTHRUSPECIES
	States
	{
	Spawn:
		TNT1 CCCCCCCCCCC 0 bright A_SpawnItemEx("DrainBoom", 0, 0, 0, 0, 0, 0, 0, 160, 0)
		TNT1 CCCCCCCCCCC 0 bright A_SpawnItemEx("DrainBoom", 0, 0, 0, 0, 0, 0, 0, 160, 0)
		TNT1 CCCCCCCCCCC 0 bright A_SpawnItemEx("DrainBoom", 0, 0, 0, 0, 0, 0, 0, 160, 0)
		TNT1 CCCCCCCCCCC 0 bright A_SpawnItemEx("DrainBoom", 0, 0, 0, 0, 0, 0, 0, 160, 0)
		TNT1 A 1
		Stop
	}
}

Actor DrainCurseProjectile
{
	Radius 8
	Height 6
	Speed 25
	damage (0)
	Decal "BaronScorch"
	Renderstyle Add
	Projectile
	+RANDOMIZE
	+HITTRACER
	+MTHRUSPECIES +NODAMAGETHRUST +DONTBLAST
	states
	{
	Spawn:
		TNT1 A 1
		TNT1 AAA 0 A_SpawnItemEx ("DrainEffectPuff2", 0, random (1,-1), random (1,-1), 0, 0, 0, 0, 160)
		loop
	Death:
		TNT1 CCCCCCCCCCC 0 bright A_SpawnItemEx("DrainBoom", 0, 0, 0, 0, 0, 0, 0, 160, 0)
			TNT1 CCCCCCCCCCC 0 bright A_SpawnItemEx("DrainBoom", 0, 0, 0, 0, 0, 0, 0, 160, 0)
			TNT1 CCCCCCCCCCC 0 bright A_SpawnItemEx("DrainBoom", 0, 0, 0, 0, 0, 0, 0, 160, 0)
			TNT1 CCCCCCCCCCC 0 bright A_SpawnItemEx("DrainBoom", 0, 0, 0, 0, 0, 0, 0, 160, 0)
		TNT1 A 0 A_JumpIfInTargetInventory("IsHarvester", 1, "Harvester")
		TNT1 A 15 ACS_ExecuteAlways(WOC_CASTDRAIN, 0, 0, 0, ACS_ExecuteWithResult(WOC_DECORATE,NECROMANCERSKILLS,ABIL_DRAIN,TARGET))
		stop
	Harvester:
		TNT1 A 15 A_GiveInventory("DrainAOEGiver")
		stop
	}
}

actor DrainBoom
{
  radius 0
  height 1
  speed 0
  damage 0
  renderstyle Add
  alpha 0.75
  PROJECTILE
  -RANDOMIZE
  Scale 0.5
  +DONTSPLASH
   +NOINTERACTION
  +CLIENTSIDEONLY
  +NOCLIP
  +RIPPER
  +BLOODLESSIMPACT
  +PAINLESS
  states
  {
  Spawn:
    TNT1 A 0 
    TNT1 A 0 A_CustomMissile("DrainEffectPuff2",0,0,frandom(-180,180),2,frandom(-180,180))
    TNT1 A 2 A_CustomMissile("DrainEffectPuff2",0,0,frandom(-180,180),2,frandom(-180,180))
    stop
  Death:
    TNT1 A 3 
    stop
  }
}

ACTOR DrainEffectPuff2
{
    Projectile
	Speed 6
	+PAINLESS
	+NOCLIP
	+NOINTERACTION
	+CLIENTSIDEONLY
	+DONTSPLASH
    RenderStyle Add
	Alpha 0.6
	Scale 0.4
    States
    {
    Spawn:
	SKP4 ABCDEF 1 Bright
	Stop
    }
}

Actor DrainDuration : Inventory { Inventory.MaxAmount 0x7fffffff }

Actor DrainAOEGiver : CustomInventory
{
	Inventory.MaxAmount 0
	+INVENTORY.AUTOACTIVATE
	Inventory.Icon "TNT1A0"
	States
	{
	Use:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 32,"Use32")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 31,"Use31")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 30,"Use30")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 29,"Use29")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 28,"Use28")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 27,"Use27")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 26,"Use26")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 25,"Use25")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 24,"Use24")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 23,"Use23")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 22,"Use22")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 21,"Use21")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 20,"Use20")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 19,"Use19")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 18,"Use18")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 17,"Use17")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 16,"Use16")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 15,"Use15")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 14,"Use14")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 13,"Use13")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 12,"Use12")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 11,"Use11")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 10,"Use10")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 9,"Use9")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 8,"Use8")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 7,"Use7")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 6,"Use6")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 5,"Use5")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 4,"Use4")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 3,"Use3")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 2,"Use2")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,PLAYERNUM,TARGET) == 1,"Use1")
		TNT1 A 0 A_RadiusGive("DrainAOE0", 256, RGF_MONSTERS)
		Stop
		Use1: TNT1 A 0 A_RadiusGive("DrainAOE1", 256, RGF_MONSTERS) Stop
		Use2: TNT1 A 0 A_RadiusGive("DrainAOE2", 256, RGF_MONSTERS) Stop
		Use3: TNT1 A 0 A_RadiusGive("DrainAOE3", 256, RGF_MONSTERS) Stop
		Use4: TNT1 A 0 A_RadiusGive("DrainAOE4", 256, RGF_MONSTERS) Stop
		Use5: TNT1 A 0 A_RadiusGive("DrainAOE5", 256, RGF_MONSTERS) Stop
		Use6: TNT1 A 0 A_RadiusGive("DrainAOE6", 256, RGF_MONSTERS) Stop
		Use7: TNT1 A 0 A_RadiusGive("DrainAOE7", 256, RGF_MONSTERS) Stop
		Use8: TNT1 A 0 A_RadiusGive("DrainAOE8", 256, RGF_MONSTERS) Stop
		Use9: TNT1 A 0 A_RadiusGive("DrainAOE9", 256, RGF_MONSTERS) Stop
		
		Use10: TNT1 A 0 A_RadiusGive("DrainAOE10", 256, RGF_MONSTERS) Stop
		Use11: TNT1 A 0 A_RadiusGive("DrainAOE11", 256, RGF_MONSTERS) Stop
		Use12: TNT1 A 0 A_RadiusGive("DrainAOE12", 256, RGF_MONSTERS) Stop
		Use13: TNT1 A 0 A_RadiusGive("DrainAOE13", 256, RGF_MONSTERS) Stop
		Use14: TNT1 A 0 A_RadiusGive("DrainAOE14", 256, RGF_MONSTERS) Stop
		Use15: TNT1 A 0 A_RadiusGive("DrainAOE15", 256, RGF_MONSTERS) Stop
		Use16: TNT1 A 0 A_RadiusGive("DrainAOE16", 256, RGF_MONSTERS) Stop
		Use17: TNT1 A 0 A_RadiusGive("DrainAOE17", 256, RGF_MONSTERS) Stop
		Use18: TNT1 A 0 A_RadiusGive("DrainAOE18", 256, RGF_MONSTERS) Stop
		Use19: TNT1 A 0 A_RadiusGive("DrainAOE19", 256, RGF_MONSTERS) Stop
		
		Use20: TNT1 A 0 A_RadiusGive("DrainAOE20", 256, RGF_MONSTERS) Stop
		Use21: TNT1 A 0 A_RadiusGive("DrainAOE21", 256, RGF_MONSTERS) Stop
		Use22: TNT1 A 0 A_RadiusGive("DrainAOE22", 256, RGF_MONSTERS) Stop
		Use23: TNT1 A 0 A_RadiusGive("DrainAOE23", 256, RGF_MONSTERS) Stop
		Use24: TNT1 A 0 A_RadiusGive("DrainAOE24", 256, RGF_MONSTERS) Stop
		Use25: TNT1 A 0 A_RadiusGive("DrainAOE25", 256, RGF_MONSTERS) Stop
		Use26: TNT1 A 0 A_RadiusGive("DrainAOE26", 256, RGF_MONSTERS) Stop
		Use27: TNT1 A 0 A_RadiusGive("DrainAOE27", 256, RGF_MONSTERS) Stop
		Use28: TNT1 A 0 A_RadiusGive("DrainAOE28", 256, RGF_MONSTERS) Stop
		Use29: TNT1 A 0 A_RadiusGive("DrainAOE29", 256, RGF_MONSTERS) Stop
		Use30: TNT1 A 0 A_RadiusGive("DrainAOE30", 256, RGF_MONSTERS) Stop
		Use31: TNT1 A 0 A_RadiusGive("DrainAOE31", 256, RGF_MONSTERS) Stop
		Use32: TNT1 A 0 A_RadiusGive("DrainAOE32", 256, RGF_MONSTERS) Stop
	}
}
//, 256, RGF_MONSTERS)
Actor DrainAOE0 : CustomInventory
{
	Inventory.MaxAmount 0
	+AUTOACTIVATE
	+ALWAYSPICKUP
	Inventory.PickupSound "pickup/health"
	Inventory.PickupMessage "NATURE'S SALVE" // "QUARTZ FLASK"
	var int user_Amount;
	States
	{
	Use:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,ISFRIEND,ACTIVATOR) == 0, "Healing")
		Stop
	Healing:
		TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,0,1,0)
		Stop
	}
}

Actor DrainAOE1 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,1,1,0) Stop } }
Actor DrainAOE2 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,2,1,0) Stop } }
Actor DrainAOE3 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,3,1,0) Stop } }
Actor DrainAOE4 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,4,1,0) Stop } }
Actor DrainAOE5 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,5,1,0) Stop } }
Actor DrainAOE6 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,6,1,0) Stop } }
Actor DrainAOE7 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,7,1,0) Stop } }
Actor DrainAOE8 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,8,1,0) Stop } }
Actor DrainAOE9 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,9,1,0) Stop } }

Actor DrainAOE10 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,10,1,0) Stop } }
Actor DrainAOE11 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,11,1,0) Stop } }
Actor DrainAOE12 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,12,1,0) Stop } }
Actor DrainAOE13 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,13,1,0) Stop } }
Actor DrainAOE14 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,14,1,0) Stop } }
Actor DrainAOE15 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,15,1,0) Stop } }
Actor DrainAOE16 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,16,1,0) Stop } }
Actor DrainAOE17 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,17,1,0) Stop } }
Actor DrainAOE18 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,18,1,0) Stop } }
Actor DrainAOE19 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,19,1,0) Stop } }

Actor DrainAOE20 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,20,1,0) Stop } }
Actor DrainAOE21 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,21,1,0) Stop } }
Actor DrainAOE22 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,22,1,0) Stop } }
Actor DrainAOE23 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,23,1,0) Stop } }
Actor DrainAOE24 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,24,1,0) Stop } }
Actor DrainAOE25 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,25,1,0) Stop } }
Actor DrainAOE26 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,26,1,0) Stop } }
Actor DrainAOE27 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,27,1,0) Stop } }
Actor DrainAOE28 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,28,1,0) Stop } }
Actor DrainAOE29 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,29,1,0) Stop } }

Actor DrainAOE30 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,30,1,0) Stop } }
Actor DrainAOE31 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,31,1,0) Stop } }
Actor DrainAOE32 : DrainAOE0 { States { Healing: TNT1 A 0 ACS_ExecuteAlways(WOC_CASTDRAIN,0,32,1,0) Stop } }