//Basis
ACTOR AnnihilationSpray
{  
   Scale 0.8
   Alpha 0.8
   +NOGRAVITY
   +NOINTERACTION
   +NOTONAUTOMAP
   +FORCEXYBILLBOARD
   RenderStyle Add
   States
   {
   Spawn:
      ANNH IJKLM 4 Bright
      Stop
   }
}

ACTOR AnnihilationShot1
{
   Radius 4
   Height 8
   Speed 2
   Scale 0.2
   Damage 3
   PROJECTILE
   ProjectileKickback 400
   RenderStyle Add
   Alpha 0.8
   DamageType "Annihilation"
   Obituary "%o got caught in %k's annihilation. Enough said."
   +DONTREFLECT
   +FOILINVUL
   +FORCEXYBILLBOARD
   +SEEKERMISSILE
   +LOOKALLAROUND
   var int User_Counter;
   var int User_Frame;
   States
   {
   Spawn:
	  "####" "#" 0 NoDelay A_SetUserVar("User_Counter",24)
   Frame:
	  "####" "#" 0 A_JumpIf(User_Frame == 8, "FrameH")
	  "####" "#" 0 A_JumpIf(User_Frame == 7, "FrameG")
	  "####" "#" 0 A_JumpIf(User_Frame == 6, "FrameF")
	  "####" "#" 0 A_JumpIf(User_Frame == 5, "FrameE")
	  "####" "#" 0 A_JumpIf(User_Frame == 4, "FrameD")
	  "####" "#" 0 A_JumpIf(User_Frame == 3, "FrameC")
	  "####" "#" 0 A_JumpIf(User_Frame == 2, "FrameB")
	  "####" "#" 0 A_JumpIf(User_Frame == 1, "FrameA")
   Reset:
	 "####" "#" 0 A_SetUserVar("User_Frame",1)
   FrameA:
	  ANNH A 0
	  Goto Main
   FrameB:
	  ANNH B 0
	  Goto Main
   FrameC:
	  ANNH C 0
	  Goto Main
   FrameD:
	  ANNH A 0
	  Goto Main
   FrameE:
	  ANNH E 0
	  Goto Main
   FrameF:
	  ANNH F 0
	  Goto Main
   FrameG:
	  ANNH G 0
	  Goto Main
   FrameH:
	  ANNH H 0
	  Goto Main
   Main:
	  "####" "#" 1 Bright A_SeekerMissile(0,0,SMF_LOOK|SMF_CURSPEED,256)
	  "####" "#" 0 A_SetUserVar("User_Counter", User_Counter - 1)
	  "####" "#" 0 A_SetUserVar("User_Frame", User_Frame + 1)
	  "####" "#" 0 A_JumpIf(User_Counter <= 0, "Release")
	  "####" "#" 0 A_JumpIf(User_Frame >= 8, "Reset")
	  Goto Frame
   Release:
	  TNT1 A 0 A_JumpIf(IsPointerEqual(AAPTR_TRACER, AAPTR_DEFAULT|AAPTR_NULL) == TRUE, "NoTarget")
	  TNT1 AAAA 0 A_SeekerMissile(90,90,SMF_LOOK|SMF_CURSPEED,256)
	  TNT1 A 0 A_ScaleVelocity(15)
   Looplet:
	  //ANNH AA 0 A_SeekerMissile(8,6,SMF_LOOK|SMF_PRECISE|SMF_CURSPEED,50,5)
      ANNH A 3 Bright A_SpawnItemEx("AnnihilationShot1Trail",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	  //ANNH A 0 A_SeekerMissile(8,6,SMF_LOOK|SMF_PRECISE|SMF_CURSPEED,50,5)
      ANNH C 3 Bright A_SpawnItemEx("AnnihilationShot1Trail",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	  //ANNH A 0 A_SeekerMissile(8,6,SMF_LOOK|SMF_PRECISE|SMF_CURSPEED,50,5)
      ANNH E 3 Bright A_SpawnItemEx("AnnihilationShot1Trail",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	  //ANNH A 0 A_SeekerMissile(8,6,SMF_LOOK|SMF_PRECISE|SMF_CURSPEED,50,5)
      ANNH G 3 Bright A_SpawnItemEx("AnnihilationShot1Trail",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	  Loop
   Death:
      ANNH I 0 A_PlaySound("Annihilation/Hit1",5,0.6)
      ANNH I 0 A_Explode(10,48,0)
      ANNH IJKLM 4 Bright
	  Stop
   NoTarget:
	  ANNH IJKLM 1 Bright
      Stop
   }
}

ACTOR AnnihilationShot2 : AnnihilationShot1 //Non-aimin' shot
{
   Speed 30
   States
   {
   Spawn:
      ANNH ACEG 3 Bright A_SpawnItemEx("AnnihilationShot1Trail",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	  Loop
   }
}

ACTOR AnnihilationShot1Trail
{
   +NOTONAUTOMAP
   +NOINTERACTION
   +FORCEXYBILLBOARD
   Scale 0.1
   RenderStyle Add
   Alpha 0.8
   States
   {
   Spawn:
      ANNH ABCDEFGHIJKM 1 Bright
      Stop
   }
}

/*
ACTO
ACTOR AnnihilationAutoBlast : AnnihilationShot1
{
   Radius 3
   Height 4
   Speed 2
   Scale 0.2
   +MISSILE
   +NOTONAUTOMAP
   +SEEKERMISSILE
   States
   {
   Spawn:
      ANNH ABCDEFGHABCDEFGHABCDEFGH 1 Bright
      Goto Death
   Death:
      //B122 I 0 A_SpawnItemEx("AnnihilationAttacker",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
	  B122 I 0 A_SeekerMissile(0,0,SMF_LOOK|SMF_CURSPEED,256)
	  B122 I 0 A_CustomMissile("AnnihilationShot2",0,0,0,CMF_TRACKOWNER,0,AAPTR_TRACER)
      ANNH IJKLM 1 Bright
      Stop
   }
}

R AnnihilationAttacker
{  
   Radius 1
   Height 2
   Scale 0.8
   +ISMONSTER
   +FRIENDLY
   +LOOKALLAROUND
   +NOGRAVITY
   +NOINTERACTION
   +NOTONAUTOMAP
   +FORCEXYBILLBOARD
   States
   {
   Spawn:
      TNT1 A 0 A_Look
   See:
      TNT1 A 0 A_Chase
   Missile:
      B122 A 0 A_FaceTarget
      B122 A 1 A_CustomMissile("AnnihilationShot2",0,0,0,CMF_TRACKOWNER)
      Stop
   }
}
*/

ACTOR AnnihilationShotBlast : AnnihilationShot1
{
   Radius 13
   Height 9
   Speed 25
   Damage 5
   Scale 0.9
   States
   {
   Spawn:
      B122 AB 3 Bright A_SpawnItemEx("AnnihilationShotBlastTrail",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
      Loop
   Death:
      B122 CD 1 Bright
      TNT1 AAAAA 0 A_CustomMissile("AnnihilationShot2", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
      B122 E 1 Bright
      B122 FGH 1 Bright
      Stop
   }
}

ACTOR AnnihilationShotBlastTrail : AnnihilationShot1Trail
{
   Scale 0.4
}


//Non-tomed
ACTOR AnnihilationShot : AnnihilationShot1
{
   Radius 13
   Height 12
   Speed 40
   Damage 5
   Scale 0.7
   Alpha 1.0
   States
   {
   Spawn:
      ANNH A 0 A_PlaySound("Annihilation/Loop1",5,0.6)
      ANNH A 2 Bright
   Wololo:
      TNT1 AAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
      ANNH A 2 Bright
      TNT1 AAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
      ANNH B 2 Bright
      TNT1 AAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
      ANNH C 2 Bright
      TNT1 AAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH D 2 Bright
      TNT1 AAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH E 2 Bright
      TNT1 AAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH F 2 Bright
      TNT1 AAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH G 2 Bright
      TNT1 AAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH H 2 Bright
      TNT1 AAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
      Loop
   Death:
   	  TNT1 A 0 A_SetUserVar("User_Counter", 30)
   DeathLoop:
      TNT1 A 0 A_JumpIf(User_Counter <=0, "End")
      TNT1 A 0 A_CustomMissile("AnnihilationSuperblast", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
	  Loop
   End:
      ANNH I 0 A_PlaySound("Annihilation/Hit2",5,0.7)
      ANNH I 0 A_PlaySound("Annihilation/Hit3",6,0.7)
      ANNH I 0 A_SpawnItemEx("AnnihilationShotGLDEF",0,0,0,25.0,0,frandom(25.0,-25.0),frandom(0.0,360.0),SXF_CLIENTSIDE)
	  ANNH I 4 Bright A_Explode(100,192,0)
      ANNH I 4 Bright A_CustomMissile("AnnihilationSprayer",0,0,0,CMF_TRACKOWNER)
      ANNH JKLM 4 Bright
      Stop
   }
}

ACTOR AnnihilationShotGLDEF
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	States
	{
	Spawn:
	TNT1 A 35
	Stop
	}
}

ACTOR AnnihilationSprayer
{  
   Radius 1
   Height 2
   PROJECTILE
   Obituary "%o was annihilated by %k's glaring stare."
   +NOTONAUTOMAP
   States
   {
   Spawn:
      TNT1 A 0
      TNT1 A 1 A_BFGSpray("AnnihilationSpray",10,10)
      Stop
   }
}

//Tomed
ACTOR TomedAnnihilationShot : AnnihilationShot1
{
   Radius 18
   Height 12
   Speed 40
   Damage 10
   Scale 0.8
   Alpha 1
   States
   {
   Spawn:
      ANNH AA 0 A_PlaySound("Annihilation/Loop2",5,0.6)
   	  TNT1 A 0 A_SetUserVar("User_Counter", 20)
      ANNH A 2 Bright
   Wololo:
      TNT1 AAAAAAAAAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
      ANNH A 2 Bright
      TNT1 AAAAAAAAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
      ANNH B 2 Bright
      TNT1 AAAAAAAAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
      ANNH C 2 Bright
      TNT1 AAAAAAAAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH D 2 Bright
      TNT1 AAAAAAAAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH E 2 Bright
      TNT1 AAAAAAAAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH F 2 Bright
      TNT1 AAAAAAAAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH G 2 Bright
      TNT1 AAAAAAAAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  ANNH H 2 Bright
      TNT1 AAAAAAAAAA 0 A_CustomMissile("AnnihilationShot1", 0, 0, random(0, 360), CMF_AIMDIRECTION|CMF_TRACKOWNER, random(0, 360))
	  Loop
   Death:
      ANNH I 0 A_PlaySound("Annihilation/Hit4",5,0.8)
	  ANNH I 0  A_QuakeEx(9,9,7,70,0,8192,"none",QF_SCALEDOWN|QF_WAVE,1.0,1.0,2.0)
	  ANNH I 0  A_Quake(9,70,0,8192,"none")
      ANNH I 0 A_SpawnItemEx("TomedAnnihilationShotGLDEF",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
      TNT1 A 0 A_Explode(200,256,0)
      TNT1 A 0 A_CustomMissile("TomedAnnihilationSprayer",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER)
      TNT1 A 0 A_SpawnItemEx("AnnihilationBoom",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
   Looplo:
	  TNT1 A 0 A_JumpIf(User_Counter <=0, "End")
      TNT1 A 0 A_SpawnItemEx("AnnihilationSuperblast",0,0,0,frandom(25.0,20.0),0,frandom(25.0,-25.0),frandom(0.0,360.0),SXF_TRANSFERPOINTERS,0)
	  TNT1 A 3 A_SetUserVar("User_Counter", User_Counter - 1)
	  Loop
   End:
	  TNT1 A 105
	  Stop
   }
}

ACTOR TomedAnnihilationShotGLDEF
{
	+NOINTERACTION
	+NOGRAVITY
	States
	{
	Spawn:
	TNT1 A 50
	Stop
	}
}

ACTOR AnnihilationBoom
{
	+NOINTERACTION
	var int User_Cycle;
	var int User_Pitch;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetPitch(Pitch + 80) //Default position.
		TNT1 A 0 A_SpawnItemEx("AnnihilationSuperblast",0,0,0,0,0,25,0,SXF_TRANSFERPOINTERS)
	Cycle1:
		TNT1 A 0 A_SetUserVar("User_Cycle",18) //one projectile every 20 degrees.
	Cycle2:
		TNT1 A 0 A_JumpIf(User_Cycle <= 0, "SwitchGear") //Are we done with this ring? Then let's pump the pitch a notch.
		TNT1 A 0 A_SetUserVar("User_Cycle", User_Cycle - 1) //Projectile launched? Remove one from the cycle.
		TNT1 A 0 A_SpawnItemEx("AnnihilationSuperblast",0,0,0,cos(-pitch)*25,0,sin(pitch)*25,Angle,SXF_TRANSFERPITCH|SXF_TRANSFERPOINTERS) //Here it gooooes.
		TNT1 A 0 A_SetAngle(Angle + 20) //Projectile launched? Turn it a bit.
		Loop
	SwitchGear:
		TNT1 A 0 A_JumpIf(User_Pitch >= 16, "Death") //Did we hit the upper head? Well, that's all, folks.
		TNT1 A 0 A_SetUserVar("User_Pitch", User_Pitch + 1)
		TNT1 A 0 A_SetPitch(Pitch - 10, SPF_FORCECLAMP) //Move it up a pinch.
		Goto Cycle1
	Death:
		TNT1 A 0 A_SpawnItemEx("AnnihilationSuperblast",0,0,0,0,0,-25,0,SXF_TRANSFERPOINTERS)
		Stop
	}
}

ACTOR AnnihilationSuperblast : AnnihilationShot1
{
   Radius 14
   Height 10
   Speed 25
   Damage 4
   Scale 0.5
   Alpha 1
   States
   {
   Spawn:
      ANNH ABCDEFGH 3 Bright A_SpawnItemEx("AnnihilationShotBlastTrail",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
      Loop
   Death:
      TNT1 AAA 0 A_SpawnItemEx("AnnihilationShotBlast",0,0,0,frandom(25.0,20.0),0,frandom(25.0,-25.0),frandom(0.0,360.0),SXF_TRANSFERPOINTERS)
      ANNH I 2 Bright A_Explode(30,192,0)
      ANNH I 2 Bright
      ANNH JKLM 2 Bright
      Stop
   }
}

ACTOR TomedAnnihilationSprayer
{  
   Radius 1
   Height 2
   PROJECTILE
   Obituary "%o was annihilated by %k's glaring stare."
   +NOTONAUTOMAP
   States
   {
   Spawn:
      TNT1 A 0
      TNT1 A 1 A_BFGSpray("AnnihilationSpray",20,20)
      Stop
   }
}
