actor Thunderball : FastProjectile
{
  Radius 12
  Height 16
  Speed 20
  Damage 0
  Projectile
  +NOGRAVITY
  -THRUGHOST
  +DONTSPLASH
  +EXPLODEONWATER
  +RIPPER
  +BLOODLESSIMPACT
  +FORCERADIUSDMG
  +DONTREFLECT
  +DONTBLAST
  DamageType Lightning
  MissileHeight 16
  MissileType "CauterizerTrailSpawner"
  Decal "CauterizerLightning"
  States
  {
  Spawn:
    TNT1 A 0
  Looplet:
    TNT1 AAAAA 0 A_SpawnItemEx("CauterizerSpark",random(16,16),random(16,-16),random(16,-16),frandom(0.1,1.0),frandom(0.1,1.0),frandom(-1.0,1.0),random(0,359),128,0)
    TNT1 A 0 A_Quake (3, 1, 0, 192, none)
    TNT1 A 0 A_PlaySound("Cauterizer/Fly",5,0.8,1)
    TNT1 A 1 A_Explode((10*random(2,3)),72,0,0)
    Loop
  Death:
    TNT1 A 0 A_CheckFloor("Watercheck")
    TNT1 A 0 A_Quake (5, 17, 0, 384, none)
    TNT1 A 0 A_Quake (2, 52, 0, 384, none)
    TNT1 A 0 A_PlaySound("Cauterizer/Hit",4,0.6)
    TNT1 A 0 A_PlaySound("Cauterizer/Blast",5,0.4)
    TNT1 A 0 A_Explode((60*random(2,3)),128,0)
    TNT1 A 0 A_AlertMonsters
	TNT1 A 0 A_SpawnItemEx("CauterizerSparkBlast")
	TNT1 A 0 A_SpawnItemEx("CauterizerFX")
	TNT1 A 0 A_SpawnItemEx("CauterizerParticleSpawner")
	TNT1 A 0 A_SpawnItemEx("CyanLightningSpawner")
	TNT1 AAAA 0 A_SpawnItemEx("CauterizerDisruption")
    TNT1 AAA 1 A_SpawnItemEx("CauterizerSparkBlast")
	TNT1 A 2
    TNT1 AAAAAAAAAAABBBBBBBBBBB 2 A_Explode((5*random(2,3)),36,0)
    stop
  Watercheck:
	TNT1 A 0 A_JumpIf(CallACS("WaterBollocks") == true, "Supercharge")
	Goto Death+2
  Supercharge:
    TNT1 A 0 A_Quake (7, 17, 0, 384, none)
    TNT1 A 0 A_Quake (4, 52, 0, 384, none)
    TNT1 A 0 A_PlaySound("Cauterizer/Hit",4,0.6)
    TNT1 A 0 A_PlaySound("Cauterizer/Blast",5,0.4)
    TNT1 A 0 A_Explode((90*random(2,3)),192,0)
    TNT1 A 0 A_AlertMonsters
	TNT1 A 0 A_SpawnItemEx("CauterizerFX")
	TNT1 AA 0 A_SpawnItemEx("CauterizerParticleSuperSpawner")
	TNT1 AA 0 A_SpawnItemEx("CyanLightningSuperSpawner")
	TNT1 AAAAA 0 A_SpawnItemEx("CauterizerSuperDisruption")
    TNT1 A 0 A_SpawnItemEx("CauterizerSuperSparkBlast")
    TNT1 AAAAA 1 A_SpawnItemEx("CauterizerSparkBlast")
    TNT1 AAAAAAAAAAABBBBBBBBBBB 2 A_Explode((7*random(2,3)),72,0)
    stop
  }
}

ACTOR CauterizerFX //For GLDEF
{ 
    +NOGRAVITY
    +NOINTERACTION
    States
    {
    Spawn:
      TNT1 A 50
      Stop
    }
}

ACTOR CauterizerTrailSpawner
{ 
    +NOGRAVITY
    +NOINTERACTION
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 1 A_SpawnItemEx("CauterizerTrail",0,0,0,0,0,0,0,128,0)
      Stop
    }
}

ACTOR CauterizerTrail
{ 
    Scale 0.125
    Alpha 0.98
    Renderstyle Add
    +NOGRAVITY
    +NOINTERACTION
    States
    {
    Spawn:
	  TNT1 A 0
	  WINS A 0 A_SetScale(ScaleX-0.01,ScaleY-0.01)
	  XELB A 1 A_FadeOut(0.1)
	  Loop
    }
}

ACTOR CauterizerSpark
{ 
    Scale 0.15
    Alpha 1
    Renderstyle Add
    +NOGRAVITY
    +NOINTERACTION
    States
    {
    Spawn:
	  TNT1 A 0
	  XELC AAABBBCCCDDDEEEFFF 1 A_FadeOut(0.025)
	  Stop
    }
}

ACTOR CauterizerSparkBlast
{
    +NOGRAVITY
    +NOINTERACTION
    ReactionTime 50
	States
    {
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("CauterizerSpark",random(24,-24),random(24,-24),random(24,-24),frandom(3.0,10.0),frandom(3.0,10.0),frandom(-10.0,10.0),frandom(0.0,360.0))
	TNT1 A 0 A_Countdown
	Loop
	Death:
	Stop
	}
}

ACTOR CauterizerSuperSparkBlast
{
    +NOGRAVITY
    +NOINTERACTION
    ReactionTime 250
	States
    {
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("CauterizerSpark",random(24,-24),random(24,-24),random(24,-24),frandom(9.0,25.0),frandom(9.0,25.0),frandom(-15.0,15.0),frandom(0.0,360.0))
	TNT1 A 0 A_Countdown
	Loop
	Death:
	Stop
	}
}

ACTOR CauterizerDisruption
{
    +NOGRAVITY
    +NOINTERACTION
    ReactionTime 30
	States
    {
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("CauterizerForce",random(3,-3),random(3,-3),random(3,-3),frandom(2.0,3.0),frandom(2.0,3.0),frandom(-3.0,3.0),frandom(0.0,359.0))
	TNT1 A 1 A_Countdown
	Loop
	Death:
	Stop
	}
}

ACTOR CauterizerSuperDisruption
{
    +NOGRAVITY
    +NOINTERACTION
    ReactionTime 30
	States
    {
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("CauterizerSuperForce",random(9,-9),random(9,-9),random(9,-9),frandom(3.0,4.0),frandom(3.0,4.0),frandom(-4.0,4.0),frandom(0.0,359.0))
	TNT1 A 1 A_Countdown
	Loop
	Death:
	Stop
	}
}

ACTOR CauterizerForce
{ 
    Scale 0.05
    Alpha 1
    Renderstyle Add
    +NOGRAVITY
    +NOINTERACTION
    States
    {
    Spawn:
	  TNT1 A 0
	  WINS A 0 A_SetScale(ScaleX+0.01,ScaleY+0.01)
	  XELB A 1 A_FadeOut(0.075)
	  Loop
    }
}

ACTOR CauterizerSuperForce : CauterizerForce
{ 
    Scale 0.07
    States
    {
    Spawn:
	  TNT1 A 0
	  WINS A 0 A_SetScale(ScaleX+0.015,ScaleY+0.015)
	  XELB A 1 A_FadeOut(0.075)
	  Loop
    }
}

ACTOR CyanLightning
{
	+NOINTERACTION
	+NOGRAVITY
	Renderstyle Add
	Alpha 0.99
	Scale 0
	States
	{
	Spawn:
	TNT1 AA 0 A_SetScale(ScaleX + frandom(0.6,0.8))
	TNT1 A 0 A_Jump(256,"SpriteA","SpriteB","SpriteC","SpriteD","SpriteE","SpriteF","SpriteG","SpriteH")
	SpriteA:
	CLIT A 0 A_Jump(256,"Main")
	SpriteB:
	CLIT B 0 A_Jump(256,"Main")
	SpriteC:
	CLIT C 0 A_Jump(256,"Main")
	SpriteD:
	CLIT D 0 A_Jump(256,"Main")
	SpriteE:
	CLIT E 0 A_Jump(256,"Main")
	SpriteF:
	CLIT F 0 A_Jump(256,"Main")
	SpriteG:
	CLIT G 0 A_Jump(256,"Main")
	SpriteH:
	CLIT H 0 A_Jump(256,"Main")
	Main:
	"####" "#" 2 Bright A_Jump(92,"Fade")
	Loop
	Fade:
	"####" "#" 1 Bright A_FadeOut(frandom(0.1,0.15))
	Loop
	}
}

ACTOR CyanLightningSpawner
{
	+NOINTERACTION
	+NOGRAVITY
	var int User_Count;
	States
	{
	Spawn:
	TNT1 AA 0 A_SetUserVar("User_Count",16)
	Looplo:
	TNT1 A 0 A_SpawnItemEx("CyanLightning",random(5,-5),random(5,-5),random(5,-5),frandom(0.2,0.1),frandom(0.2,0.1),frandom(0.2,-0.2),0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SetUserVar("User_Count", User_Count - 1)
	TNT1 A random(1,3) A_JumpIf(User_Count <= 0,"NULL")
	Loop
	}
}

ACTOR CyanLightningSuperSpawner
{
	+NOINTERACTION
	+NOGRAVITY
	var int User_Count;
	States
	{
	Spawn:
	TNT1 AA 0 A_SetUserVar("User_Count",16)
	Looplo:
	TNT1 A 0 A_SpawnItemEx("CyanLightning",random(50,-50),random(50,-50),random(50,-50),frandom(0.2,0.1),frandom(0.2,0.1),frandom(0.2,-0.2),0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SetUserVar("User_Count", User_Count - 1)
	TNT1 A random(1,3) A_JumpIf(User_Count <= 0,"NULL")
	Loop
	}
}

ACTOR CauterizerParticle
{
	+NOINTERACTION
	+NOGRAVITY
	Renderstyle Add
	Alpha 0
	Scale 0
	States
	{
	Spawn:
	TNT1 AA 0 A_SetScale(ScaleX + frandom(0.075,0.15))
	In:
	"####" "#" 0 A_ChangeVelocity(frandom(-0.3,0.3),frandom(-0.3,0.3),frandom(0.0,0.01),0)	
	CPRT A 1 Bright A_FadeIn(frandom(0.04,0.05))
	CPRT A 0 A_JumpIf(Alpha >= 0.95,"Main")
	Loop
	Main:
	"####" "##" 1 Bright A_ChangeVelocity(frandom(-0.3,0.3),frandom(-0.2,0.2),0,0)
	"####" "#" 0 A_Jump(64,"Out")
	Loop
	Out:
	"####" "#" 0 A_ChangeVelocity(frandom(-0.3,0.3),frandom(-0.3,0.3),frandom(-0.2,0.0),0)
	"####" "#" 1 Bright A_FadeOut(frandom(0.07,0.04))
	Loop
	}
}

ACTOR CauterizerParticleSpawner
{
	+NOINTERACTION
	+NOGRAVITY
	var int User_Count;
	States
	{
	Spawn:
	TNT1 AA 0 A_SetUserVar("User_Count",25)
	Looplo:
	TNT1 A 0 A_SpawnItemEx("CauterizerParticle",random(50,-50),random(50,-50),random(30,-30),0,0,frandom(1.0,3.0),0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SetUserVar("User_Count", User_Count - 1)
	TNT1 A 1 A_JumpIf(User_Count <= 0,"NULL")
	Loop
	}
}

ACTOR CauterizerParticleSuperSpawner
{
	+NOINTERACTION
	+NOGRAVITY
	var int User_Count;
	States
	{
	Spawn:
	TNT1 AA 0 A_SetUserVar("User_Count",25)
	Looplo:
	TNT1 A 0 A_SpawnItemEx("CauterizerParticle",random(70,-70),random(70,-70),random(70,-70),0,0,frandom(1.0,3.0),0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SetUserVar("User_Count", User_Count - 1)
	TNT1 A 1 A_JumpIf(User_Count <= 0,"NULL")
	Loop
	}
}