// Dependencies
actor PhaserLight
{ 
  Scale 0.2
  +DONTSPLASH
  +CLIENTSIDEONLY
  +NOINTERACTION
  +FORCEXYBILLBOARD
  RenderStyle Add
  States
  {
  Spawn:
    PHAS C 1 bright A_FadeOut(0.04)
    Loop
  }
}

actor PhaserLight2 : PhaserLight
{ 
  XScale 0.25
}

actor PhaserLight3 : PhaserLight
{ 
  XScale 0.3
}

actor PhaserLight4 : PhaserLight
{ 
  XScale 0.35
}

actor PhaserLight5 : PhaserLight
{ 
  XScale 0.4
}

actor PhaserFlare
{
  Speed 23
  PROJECTILE
  +DONTSPLASH
  +NOCLIP
  +CLIENTSIDEONLY
  RenderStyle None
  States
  {
  Spawn:
	TNT1 A 0
	TNT1 A 1 A_SpawnItemEx("PhaserLight",0,0,0,0,0,0,0,128)
	Stop
  }
}

// KamehameHa
actor Kamehameha : Weapon 10012
{
  Weapon.SelectionOrder 2800
  Weapon.AmmoUse 1
  Weapon.ammogive 400
  Weapon.AmmoType "Kame"
  Weapon.SlotNumber 1
  +WEAPON.BFG
  +NOALERT
  +WEAPON.NOAUTOAIM
  inventory.pickupsound "misc/i_pkup"
  +WEAPON.NOAUTOFIRE
  Inventory.PickupMessage "You got the Kamehameha!"
  States
  {
  Ready:
    KAME A 1 A_WeaponReady
    KAME B 0 A_StopSound(CHAN_WEAPON)
    loop
  Deselect: 
    KAME B 0 A_Light0
    KAME A 1 A_Lower
    KAME B 0 A_StopSound(CHAN_WEAPON)
    loop
  Select:
    KAME A 0 A_TakeInventory("KameCache",999)
    KAME A 1 A_Raise
    loop
  Fire:
    KAME A 0 A_PlaySound("DSKAM1",CHAN_WEAPON,1,1)
    KAME A 0 A_PlaySound("DSKAMEHM",CHAN_VOICE,1)
  Hold:
    KAME A 1 Bright A_AlertMonsters
    KAME A 1 A_TakeInventory("Kame",1)
    KAME A 0 A_GiveInventory("KameCache",2)
    KAME A 0 A_JumpIfInventory ("KameCache", 50, 3)
    KAME A 0 A_FireCustomMissile("KameFlare3",0,0,14,-15+random(-.1,.1),0)
    KAME A 0 A_Refire
    goto KameFire0
    KAME A 0 A_JumpIfInventory ("KameCache", 70, 3)
    KAME A 0 A_FireCustomMissile("KameFlare2",0,0,14,-15+random(-.1,.1),0)
    KAME A 0 A_Refire
    goto KameFire0
    KAME A 0 A_JumpIfInventory ("KameCache", 100, 3)
    KAME A 0 A_FireCustomMissile("KameFlare1",0,0,14,-15+random(-.1,.1),0)
    KAME A 0 A_Refire
    goto KameFire0
    KAME A 0 A_FireCustomMissile("KameFlare",0,0,14,-15+random(-.1,.1),0)
    KAME A 0 A_Refire
  KameFire0:
    KAME B 0 A_StopSound(CHAN_WEAPON)
    KAME A 0 A_JumpIfInventory ("KameCache", 100, "KameFireFull")
    KAME A 0 A_JumpIfInventory ("KameCache", 70, "KameFire3")
    KAME A 0 A_JumpIfInventory ("KameCache", 50, "KameFire2")
  KameFire1:
    KAME B 0 A_StopSound(CHAN_VOICE)
    KAME B 20 Bright A_FireCustomMissile("KameBeam4",0,1,0,0,0) 
    goto CoolDown
  KameFire2:
    KAME B 0 A_PlaySound("DSHAAAH2",CHAN_VOICE,1)
    KAME B 0 A_GunFlash
    KAME B 20 Bright A_FireCustomMissile("KameBeam3",0,1,0,0,0)
    goto CoolDown
  KameFire3:
    KAME B 0 A_PlaySound("DSHAAAH2",CHAN_VOICE,1)
    KAME B 0 ACS_ExecuteAlways(906,0)
    KAME B 0 A_GunFlash
    KAME B 20 Bright A_FireCustomMissile("KameBeam2",0,1,0,0,0) 
    goto CoolDown
  KameFireFull:
    KAME B 0 A_PlaySound("DSHAAAH",CHAN_VOICE,1)
    KAME B 0 ACS_ExecuteAlways(906,0)
    KAME B 0 A_GunFlash
    KAME B 20 Bright A_FireCustomMissile("KameBeam",0,1,0,0,0)
  CoolDown:
    KAME A 0 A_TakeInventory("KameCache",999)
    KAME B 20 Bright
    goto Ready
  Flash:
    KAME A 0 A_JumpIfInventory ("KameCache", 100, 3)
    KAME A 0 A_JumpIfInventory ("KameCache", 70, 3)
    KAME A 0 A_JumpIfInventory ("KameCache", 50, 3)
    TNT1 A 70 A_Light(20)
    TNT1 A 20 A_Light(15)
    TNT1 A 10 A_Light(10)
    TNT1 A 7 A_Light(5)
    TNT1 A 5 A_Light(1)
    Goto LightDone
  AltFire:
    KAME A 0 A_PlaySound("DSPWCHRG",CHAN_WEAPON,1,1)
  AltHold:
    KAME A 1 
    KAME A 1 ACS_ExecuteAlways(909,0) 
    KAME A 2 A_SpawnItemEx ("KameReload",-5,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
    KAME A 0 A_GiveInventory("Kame",2)
    KAME A 0 A_Refire
    KAME A 0 A_PlaySound("DSPWCHRG",CHAN_WEAPON,1,0)
    goto Ready
  Spawn:
    KAME C -1
    stop
  }
}

ACTOR Kame : Ammo
{
  Inventory.MaxAmount 800
  +INVENTORY.UNDROPPABLE
  -inventory.invbar
}

ACTOR KameCache : Inventory
{ 
  +INVENTORY.IGNORESKILL
  Inventory.MaxAmount 110
  +INVENTORY.UNDROPPABLE
  -inventory.invbar
}

actor KameBeam
{
  Radius 32
  Height 16
  Speed 30
  Damage 400
  Renderstyle Add
  Decal KameHole
  SeeSound "DSKAMBLO"
  DeathSound "DSKAMBL2"
  ActiveSound "DSKAMBLO"
  Projectile 
  YScale .9 
  Scale 1.5
  +RIPPER
  +BLOODLESSIMPACT
  +FORCERADIUSDMG
  DamageType Railgun
  Obituary "%o power level was to low for %k's Kamehameha."
  States
  {
  Spawn:
    KMEH A 0 
    KMEH A 0 A_LoopActiveSound
    KMEH A 0 bright A_SpawnItemEx (KameTrail, 64, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail, 0, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail, -64, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail, -128, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail, -192, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail, -256, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail, -320, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail, -384, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail, -448, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 A_Jump (192,2,3,4)
    KMEH A 5 bright
    loop
    KMEH B 5 bright
    loop
    KMEH M 5 bright
    loop
    KMEH N 5 bright
    loop
  Death:
    KMEH A 0 ACS_ExecuteAlways(907,0) 
    KMEH A 0 Radius_quake(6,100,0,64,0) 
    KMEH A 0 A_Jump (128,"Death2")
    KMEH CDE 5 bright A_Explode(9001,310)
	KMEH E 1 A_Explode(800, 910, XF_NOTMISSILE, 0, 0, "Blast")
	KMEH E 1 A_Explode(400, 1300, XF_NOTMISSILE, 0, 0, "SuperPlasma")
	KMEH E 1 A_Explode(300, 1500, XF_NOTMISSILE, 0, 0, "Fire")
    KMEH FHI 8 bright
    KMEH JKL 12 bright A_FadeOut (0.1)
    KMEH XXXXXX 12 bright A_FadeOut (0.1)
    stop
  Death2:
    KMEH OPQ 5 bright A_Explode(9001,310)
	KMEH Q 1 A_Explode(800, 910, XF_NOTMISSILE, 0, 0, "Blast")
	KMEH Q 1 A_Explode(400, 1300, XF_NOTMISSILE, 0, 0, "SuperPlasma")
	KMEH Q 1 A_Explode(300, 1500, XF_NOTMISSILE, 0, 0, "Fire")
    KMEH RST 8 bright
    KMEH UVW 12 bright A_FadeOut (0.1)
    KMEH YYYYYY 12 bright A_FadeOut (0.1)
    stop
  }
}

actor KameTrail
{
  RenderStyle Add 
  Scale 1.5  
  +NOINTERACTION
  states
  {
  Spawn:
    KMEH A 0
    KMEH A 0 A_Jump(256, "Spawn1", "Spawn2", "Spawn3", "Spawn4")
  Spawn1:
    KMEH A 4 bright A_FadeOut (0.05)
	TNT1 A 0 A_Explode(1, 600, XF_NOTMISSILE, 0, 0, "Blast")
    loop
  Spawn2:
    KMEH B 4 bright A_FadeOut (0.05)
	TNT1 A 0 A_Explode(1, 600, XF_NOTMISSILE, 0, 0, "Blast")
    loop
  Spawn3:
    KMEH M 4 bright A_FadeOut (0.05)
	TNT1 A 0 A_Explode(1, 600, XF_NOTMISSILE, 0, 0, "Blast")
    loop
  Spawn4:
    KMEH N 4 bright A_FadeOut (0.05)
	TNT1 A 0 A_Explode(1, 600, XF_NOTMISSILE, 0, 0, "Blast")	
    loop
  }
}

actor KameTrail2 : KameTrail
{ 
  Scale 1 
}

actor KameBeam2 : KameBeam
{
  Speed 25
  Radius 13
  Height 8
  Damage 30
  Renderstyle Add
  Decal KameHole1 
  Scale 1
  States
  {
  Spawn:
    KMEH A 0 
    KMEH A 0 A_LoopActiveSound
    KMEH A 0 bright A_SpawnItemEx (KameTrail2, 48, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail2, 0, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail2, -48, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail2, -96, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail2, -144, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail2, -192, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail2, -240, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail2, -288, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail2, -336, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 A_Jump (192,2,3,4)
    KMEH A 5 bright
    loop
    KMEH B 5 bright
    loop
    KMEH M 5 bright
    loop
    KMEH N 5 bright
    loop
  Death: 
    KMEH A 0 A_Jump (128,"Death2")
    KMEH CDE 8 bright
    KMEH FHI 8 bright
    KMEH JJJKKKLL 8 bright A_FadeOut (0.05)
    stop
  Death2:
    KMEH OPQ 8 bright
    KMEH RST 8 bright
    KMEH UUUVVVWW 8 bright A_FadeOut (0.05)
    stop
  }
}

actor KameTrail3 : KameTrail
{ 
  Scale .7 
}

actor KameBeam3 : KameBeam2
{ 
  Radius 8
  Height 4
  Speed 20
  Damage 20
  Renderstyle Add
  Decal KameHole1 
  Scale .7
  States
  {
  Spawn:
    KMEH A 0 
    KMEH A 0 A_LoopActiveSound
    KMEH A 0 bright A_SpawnItemEx (KameTrail3, 32, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail3, 0, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail3, -32, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail3, -64, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail3, -96, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail3, -128, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail3, -160, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail3, -192, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail3, -224, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 A_Jump (192,2,3,4)
    KMEH A 5 bright
    loop
    KMEH B 5 bright
    loop
    KMEH M 5 bright
    loop
    KMEH N 5 bright
    loop
  }
}

actor KameTrail4 : KameTrail
{ 
  Scale .3 
}

actor KameBeam4 : KameBeam2
{ 
  Radius 8
  Height 4
  Speed 18
  Damage 10
  Renderstyle Add
  Decal KameHole2 
  Scale .3
  States
  {
  Spawn:
    KMEH A 0 
    KMEH A 0 A_LoopActiveSound
    KMEH A 0 bright A_SpawnItemEx (KameTrail4, 16, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail4, 0, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail4, -16, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail4, -32, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail4, -48, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail4, -64, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail4, -80, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail4, -98, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 bright A_SpawnItemEx (KameTrail4, -112, 0, 0, 0, 0, 0, 0, 160)
    KMEH A 0 A_Jump (192,2,3,4)
    KMEH A 5 bright
    loop
    KMEH B 5 bright
    loop
    KMEH M 5 bright
    loop
    KMEH N 5 bright
    loop
  }
}

actor KameFlare : PhaserFlare
{
  States
  {
  Spawn:
	TNT1 A 0
	TNT1 A 1 A_SpawnItemEx("KameCharge",0,0,0,0,0,0,0,128)
	Stop
  }
}

actor KameFlare1 : PhaserFlare
{
  States
  {
  Spawn:
	TNT1 A 0
	TNT1 A 1 A_SpawnItemEx("KameCharge1",0,0,0,0,0,0,0,128)
	Stop
  }
}

actor KameFlare2 : PhaserFlare
{
  States
  {
  Spawn:
	TNT1 A 0
	TNT1 A 1 A_SpawnItemEx("KameCharge2",0,0,0,0,0,0,0,128)
	Stop
  }
}

actor KameFlare3 : PhaserFlare
{
  States
  {
  Spawn:
	TNT1 A 0
	TNT1 A 1 A_SpawnItemEx("KameCharge3",0,0,0,0,0,0,0,128)
	Stop
  }
}

actor KameCharge
{ 
  Scale .3
  +CLIENTSIDEONLY
  +NOINTERACTION
  RenderStyle Add
  States
  {
  Spawn:
   KMCG A 0
   KMCG A 0 A_Jump (255,1,2,3,4,5,6,7,8)
   KMCG A 2 Bright
   Stop
   KMCG B 2 Bright
   Stop
   KMCG C 2 Bright
   Stop
   KMCG D 2 Bright
   Stop
   KMCG E 2 Bright
   Stop
   KMCG F 2 Bright
   Stop
   KMCG G 2 Bright
   Stop
   KMCG H 2 Bright
   Stop 
  }
}

actor KameCharge1 : KameCharge
{ 
  Scale .2
}

actor KameCharge2 : KameCharge
{ 
  Scale .1
}

actor KameCharge3 : KameCharge
{ 
  Scale .05
}

actor KameReload
{ 
  Scale 1
  +CLIENTSIDEONLY
  +NOINTERACTION
  RenderStyle Add
  Alpha 0.8
  States
  {
  Spawn:
    KMCG A 0
    KMCG A 0 A_Jump (128,"Spawn2")
    KMCR ABCD 1 Bright
    Stop
  Spawn2:
    KMCR EFGH 1 Bright
    Stop 
  }
}
