ACTOR AzureDragonPlayer : PlayerPawn
{
  Health 20000
  Radius 32
  Height 74
  Mass 800
  Speed 0.8
  Player.MaxHealth 20000
  Player.Jumpz 8
  Player.ViewHeight 56
  Player.DisplayName "AzureDragon"
  Player.SoundClass "AzureDragon"
  Player.MorphWeapon "AzureDragonWeapon0"
  Player.StartItem "Mana", 100
  DamageFactor "Boss", 0 
  DamageFactor Slime, 0
  limitedtoteam 1
  painchance 144
  PainSound "AzureDragon/Pain"
  SEESOUND "AzureDragon/Sight"
  +NOSKIN
  +DONTTRANSLATE
  -PICKUP
  states
{
	Spawn:
		AZDR A 10
		Loop
	See:
		AZDR ABCDEF 4
		Loop
	Pain:
		TNT1 A 0 A_Pain
		AZDR G 4
	    Goto Spawn
	  Missile:
		AZDR HI 8
		Goto Spawn
	  Death:
	    TNT1 A 0 a_givetotarget("BOSSKILLEDSTAT", 1)
		TNT1 A 0 a_givetotarget("reward", 1)
		TNT1 A 0 A_Stop
		AZDR R 6 A_Scream
		AZDR STU 6
		AZDR V 6 A_PlaySound("gibbage/xbody")
		AZDR W 6 A_NoBlocking
		AZDR XY 6
		AZDR Z -1
		Stop
	}
}

Actor AzureDragonMode1 : Inventory
{
	inventory.maxamount 1
}

Actor AzureDragonMode2 : Inventory
{
	inventory.maxamount 1
}

Actor AzureDragonMode3 : Inventory
{
	inventory.maxamount 1
}

Actor AzureDragonMode4 : Inventory
{
	inventory.maxamount 1
}

Actor AzureDragonSwim : Inventory
{
	inventory.maxamount 1
}

ACTOR AzureDragonWeapon0 : Weapon 
{
 Weapon.SelectionOrder 800
 Obituary "%o was raped by %k"
 Inventory.PickupMessage ""
 Inventory.PickupSound "misc/pk_up"
 Weapon.AmmoUse 0
 Weapon.AmmoGive 0
 Weapon.AmmoType "Mana"
 +WEAPON.NOAUTOAIM
  States
 {
  Spawn:
       TNT1 A -1
       Loop
  Ready:
       TNT1 A 1 A_WeaponReady
       goto AltFire
  Fire:
  TNT1 A 1
  goto AltFire
  Deselect:
       TNT1 A 1 A_Lower
       Loop
  Select:
       TNT1 A 0 A_Raise
       Loop
  AltFire:
       TNT1 A 0 A_GiveInventory("AzureDragonWeapon")
       TNT1 A 0 A_SelectWeapon("AzureDragonWeapon")
       TNT1 A 0 
       goto deselect
  Flash:
       SNIF F 3 Bright A_Light2
       SNIF F 3 Bright A_Light1
       SNIF F 0 Bright A_Light0
       Goto LightDone     
       }
}

ACTOR AzureDragonWeapon : Weapon 
{
 Weapon.SelectionOrder 800
 obituary "%o had a taste of AzureDragon' wrath"
 Inventory.PickupMessage ""
 Inventory.PickupSound "misc/pk_up"
 Weapon.AmmoUse 0
 Weapon.AmmoGive 0
 Weapon.AmmoType "Mana"
 +WEAPON.NOAUTOAIM
 +INVENTORY.UNDROPPABLE
  States
 {
  Spawn:
       TNT1 A -1
       Loop
  Ready:
       CLA3 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
       goto ready
  Deselect:
       CLA3 A 1 A_Lower
       Loop
  Select:
       CLA3 A 0 A_Raise
       Loop
  Fire:
       TNT1 A 0 A_jumpIfinventory("AzureDragonMode1", 1, "WaterTorrentCheck")
       TNT1 A 0 A_jumpIfinventory("AzureDragonMode2", 1, "DragonBreathCheck")
       TNT1 A 0 A_jumpIfinventory("AzureDragonMode3", 1, "WaterspoutCheck")
	   TNT1 A 0 A_jumpIfinventory("AzureDragonMode4", 1, "LeviathanForceCheck")
	   CLA3 A 1
	   Goto ready
  AltFire:
  	   CLA3 A 1 ACS_execute(812, 0, 14) //812
       CLA3 A 2
       CLA3 A 10
       goto ready
  WaterTorrent:
	   TNT1 A 0 A_GunFlash
       TNT1 A 0 A_Takeinventory("mana", 15)
	   TNT1 A 0 A_PlayWeaponSound("AzureDragon/Attack")
	   CLA3 A 8 Bright
	   CLA3 BB 0 Bright A_FireCustomMissile("AzureDragonWaterBall",random(-15,15))
	   CLA3 B 8 Bright A_FireCustomMissile("AzureDragonWaterBall")
       goto ready
  DragonBreath:
	   TNT1 A 0 A_GunFlash
       TNT1 A 0 A_Takeinventory("mana", 60)
	   TNT1 A 0 A_PlayWeaponSound("AzureDragon/Attack")
	   CLA3 A 8 Bright
	   CLA3 BBBBBBBBBBBBBBB 2 Bright A_FireCustomMissile("AzureDragonExplosiveBubble",frandom(-20,20))
	   CLA3 A 12 Bright
       goto ready
  Waterspout:
	   TNT1 A 0 A_Takeinventory("mana", 40)
	   CLA3 AAAAAAAA 1 A_SpawnItemEx("AzureDragonWaterBallTrail",frandom(-10,10),frandom(-10,10),0,frandom(-1,1),frandom(-1, 1),frandom(1,10),0,0)
	   TNT1 A 0 ThrustThingZ(0,200,0,0)
	   CLA3 BBBBBBBBBBBBBBBBBBBB 1 A_SpawnItemEx("AzureDragonWaterBallTrail",frandom(-10,10),frandom(-10,10),0,frandom(-1,1),frandom(-1, 1),frandom(1,10),0,0)
       goto ready
  LeviathanForce:
	   TNT1 A 0 A_GunFlash
       TNT1 A 0 A_Takeinventory("mana", 80)
	   TNT1 A 0 A_PlayWeaponSound("AzureDragon/Attack")
	   CLA3 A 8 Bright
	   CLA3 B 8 Bright A_FireCustomMissile("LeviathanForceBubble",0,0,0,0,0,6)
	   CLA3 A 35 Bright
       goto ready
  WaterTorrentCheck:
       TNT1 A 0 A_jumpIfinventory("mana", 15, "WaterTorrent")
  goto ready
  DragonBreathCheck:
       TNT1 A 0 A_jumpIfinventory("mana", 60, "DragonBreath")  
  goto ready
  WaterspoutCheck:
       CLA3 A 1 A_JumpIfInventory("IsOnCorrectPlace", 1, 1)
	   Goto Ready
       TNT1 A 0 A_jumpIfinventory("mana", 40, "Waterspout")  
       Goto ready
  LeviathanForceCheck:
       TNT1 A 0 A_jumpIfinventory("mana", 80, "LeviathanForce")  
		goto ready
  Reload:
       TNT1 A 0 A_GunFlash
	   TNT1 A 0 A_PlayWeaponSound("AzureDragon/Attack")
	   CLA3 A 8 Bright A_CustomPunch(200 , 1 , 0, "BulletPuffCent", 108)
	   CLA3 B 8 Bright A_CustomPunch(200 , 1 , 0, "BulletPuffCent", 108)
       goto ready
  Flash:
       SNIF F 3 Bright A_Light2
       SNIF F 3 Bright A_Light1
       SNIF F 0 Bright A_Light0
       Goto LightDone     
       }
}

actor PowerAzureDragon : PowerMorph
{
	powerup.duration 0x7FFFFFFF
	PowerMorph.PlayerClass "AzureDragonPlayer"
}

ACTOR AzureDragonWaterBall
{
  Radius 9
  Height 16
  Speed 50
  Damage (random(20,100))
  Projectile
  +BOUNCEONACTORS
  +BLOODLESSIMPACT
  +NOGRAVITY 
  +NOEXTREMEDEATH
  +DONTBLAST
  +USEBOUNCESTATE
  BounceType Hexen
  RenderStyle Add
  Translation "112:127=%[0.00,0.00,1.84]:[1.31,1.31,2.00]"
  SeeSound "WaterBall/See"
  DeathSound "WaterBall/Explode"
  BounceSound "WaterBall/Bounce"
  DamageType "Boss"
  BounceCount 5
  Scale 1.25
  States
  {
  Spawn:
    BAL7 AAAABBBB 1 A_SpawnItemEx("AzureDragonWaterBallTrail",frandom(-5,5),frandom(-5,5),frandom(-4,4),0,0,frandom(0,5),0,0) 
    Loop
  Bounce.Wall:
  Bounce.Actor:
  Bounce.Actor.Creature:
	TNT1 A 0 A_Explode(48,128)
	TNT1 A 0 A_RadiusGive("AzureDragonMoisture",128,RGF_PLAYERS,1)
	TNT1 AAAAA 0 Bright A_SpawnItemEx("AzureDragonWaterExplosionParticleSpawner",0,0,5,frandom(-10,10),frandom(-10,10),frandom(5,10),random(1,360))
    Goto Spawn
  Death:
	TNT1 A 0 A_Explode(48,128)
    TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("AzureDragonWaterExplosionParticleSpawner",0,0,5,frandom(-10,10),frandom(-10,10),frandom(5,10),random(1,360))
	TNT1 A 0 A_RadiusGive("AzureDragonMoisture",128,RGF_PLAYERS,1)
	TNT1 A 0 A_SetScale(0.5)
	WAT3 ABCDEFGH 2 Bright 
	Stop
  }
}

ACTOR AzureDragonWaterBallTrail
{  
    Scale 0.15
    RenderStyle Translucent
	+CLIENTSIDEONLY
    +NOBLOCKMAP
    +NOGRAVITY
    States
    {
    Spawn:
	    WATR F 1 Bright A_FadeOut(0.05)
        Loop
        }
}

ACTOR AzureDragonExplosiveBubble
{
  Radius 9
  Height 8
  Speed 1
  Damage (1)
  Projectile
  +BLOODLESSIMPACT
  +NOGRAVITY 
  +NOEXTREMEDEATH
  +DONTBLAST
  RenderStyle Add
  SeeSound "DragonBubble/See"
  DeathSound "DragonBubble/Death"
  BounceSound "DragonBubble/Bounce"
  DamageType "Boss"
  BounceCount 5
  BounceType Hexen
  Scale 0.5
  States
  {
  Spawn:
	TNT1 A 0
    WAT6 A 0 A_ScaleVelocity(frandom(15.0,50.0))
	WAT6 A 20
	WAT6 A 1 A_ScaleVelocity(0.95)
	WAT6 A 0 A_JumpIf(Sqrt(MomX*MomX+MomY*MomY)<=2.0,"End")
    Goto Spawn+3
  End:
	WAT6 A 3 A_Stop
    Goto Death
  Death:
	TNT1 A 0 A_PlaySound("DragonBubble/Death",CHAN_VOICE,1.0)
    TNT1 AAAAA 0 A_SpawnItemEx("AzureDragonWaterExplosionParticleSpawner2",0,0,5,frandom(-10,10),frandom(-10,10),frandom(5,10),random(1,360))
	TNT1 A 0 A_RadiusGive("ExplosiveDragonEffectTrigger",196,RGF_PLAYERS,1)
	TNT1 A 0 A_Explode(128,128)
	TNT1 A 0 A_SetScale(1.0)
	WAT3 ABCDEFGH 2 Bright 
	Stop
  }
}

Actor ExplosiveDragonEffectTrigger : CustomInventory 
{
  Inventory.Amount 1
  Inventory.MaxAmount 999
  Inventory.InterHubAmount 1
  +INVENTORY.AUTOACTIVATE
  +INVENTORY.QUIET
  States
  {
  Spawn:
    TNT1 A 1
    Stop
  Pickup:
    TNT1 A 0 A_JumpIfInventory("AzureDragonMoistureTrue", 1, "Succeed")
	TNT1 A 0 A_GiveInventory("AzureDragonMoisture",1)
    Stop
  Succeed:
    TNT1 A 0 Acs_NamedExecuteAlways("LastWhisperBubble",0,0,0,0)
    Stop
  }
}

ACTOR AzureDragonWaterPrisonBubble
{  
    Scale 1.0
    RenderStyle Add
	+CLIENTSIDEONLY
    +NOBLOCKMAP
    +NOGRAVITY
	Alpha 0.1
    States
    {
    Spawn:
	    WAT6 AAAAAAAAA 2 Bright A_FadeIn(0.05)
	    WAT6 A 1 Bright
        Wait
	Death:
	    WAT3 ABCDEFGH 2 Bright
	    Stop
        }
}

ACTOR LeviathanForceBubble
{
  Radius 32
  Height 32
  Speed 20
  Gravity 0.33
  Damage (300)
  Projectile
  +BLOODLESSIMPACT
  -NOGRAVITY 
  +NOEXTREMEDEATH
  +DONTBLAST
  RenderStyle Add
  SeeSound "DragonBubble/See"
  DeathSound "BigBubble/Death"
  BounceSound "DragonBubble/Bounce"
  DamageType "Boss"
  Scale 1.0
  States
  {
  Spawn:
	WAT6 A 1
    Loop
  Death:
	TNT1 A 0 A_PlaySound("BigBubble/Death",CHAN_7,1.0,FALSE,ATTN_NONE)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("AzureDragonWaterExplosionParticleSpawner3",0,0,5,frandom(-20,20),frandom(-20,20),frandom(15,20),random(1,360))
	TNT1 A 0 A_RadiusGive("AzureDragonMoisture",1024,RGF_PLAYERS,1)
	TNT1 AAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("AzureDragonWaterExplosionParticleSpawner",0,0,5,frandom(-20,20),frandom(-20,20),frandom(5,20),random(1,360))
	TNT1 A 0 A_RadiusThrust(50000,768)
	TNT1 A 0 A_SetScale(2.0)
	WAT3 ABCDEFGH 2 Bright 
	Stop
  }
}

Actor AzureDragonWaterExplosionParticleSpawner
{
	Projectile
	Damage 0
	+ClientSideOnly
	-NoGravity
	+HexenBounce
    +DontSplash
	+ThruActors
	Gravity 0.8
	Speed 0
	Radius 1
	Height 1
	BounceCount 3
	RenderStyle Add
	States
	{
  Spawn:
    TNT1 A 3 Bright A_SpawnItemEx("AzureDragonWaterExplosionParticle",0,0,0,0,0,0,0)
    Loop
	}
}

ACTOR AzureDragonWaterExplosionParticleSpawner2
{
    Damage 0
    Radius 1
    Height 1
    Speed 0
    Alpha 0.9
    Gravity 0.7	
    Projectile
    RenderStyle Add
	Projectile
	+CLIENTSIDEONLY
    -NOGRAVITY
    +RANDOMIZE
    +FORCEXYBILLBOARD
	+DONTBLAST
    States
	{
	Spawn:
		TNT1 A 3 A_SpawnItemEx("AzureDragonWaterExplosionParticle2",frandom(-1,1),frandom(-1,1),frandom(-1,1),frandom(-1,1),frandom(-1,1),frandom(-1,1),0)
		Loop
    Death:
        Stop
    XDeath:
        TNT1 A 0
        Stop
	    }
}

Actor AzureDragonWaterExplosionParticleSpawner3 : AzureDragonWaterExplosionParticleSpawner
{
	States
	{
  Spawn:
    TNT1 A 5 Bright A_SpawnItemEx("AzureDragonWaterExplosionParticle3",0,0,0,0,0,0,0)
    Loop
	}
}

ACTOR AzureDragonWaterExplosionParticle
{
    Speed 0
    Radius 4
    Height 4
    Gravity 0.9
	Projectile
    +ClientSideOnly
    +ForceXYBillBoard
	-NoGravity
    States
    {
    Spawn:
		TNT1 A 0 
		TNT1 A 0 A_Jump(256,"One", "Two", "Three", "Four")
	One:
        WAT7 A 1
		Loop
	Two:
        WAT7 B 1
		Loop
	Three:
        WAT7 C 1
		Loop
	Four:
        WAT7 D 1
		Loop
    Death:
        WAT7 EFGHIJKL 2
        Stop
        }
}

ACTOR AzureDragonWaterExplosionParticle2 : AzureDragonWaterExplosionParticle
{
	Scale 1.0
	Alpha 1.0
	+NoGravity
    States
    {
    Spawn:
		TNT1 A 0 
		TNT1 A 0 A_Jump(256,"One", "Two", "Three", "Four")
	One:
        WAT2 A 1 A_FadeOut(0.05)
		Loop
	Two:
        WAT2 B 1 A_FadeOut(0.05)
		Loop
	Three:
        WAT2 C 1 A_FadeOut(0.05)
		Loop
	Four:
        WAT2 D 1 A_FadeOut(0.05)
		Loop
    Death:
        WAT2 E 350
		WAT2 E 1 A_FadeOut(0.05)
        Wait
        }
}

ACTOR AzureDragonWaterExplosionParticle3 : AzureDragonWaterExplosionParticle2
{
	Scale 1.5
}

ACTOR PowerAzureDragonBreath : PowerIronFeet
{
  powerup.duration 0x7FFFFFFF
  Powerup.Color None
}

ACTOR PowerUnderWaterFlight : PowerFlight
{
  powerup.duration 0x7FFFFFFF
  Powerup.Color None
}

Actor AzureDragonMoisture : CustomInventory 
{
  Inventory.Amount 1
  Inventory.MaxAmount 5
  Inventory.InterHubAmount 1
  +INVENTORY.QUIET
  +INVENTORY.AUTOACTIVATE
  States
  {
  Spawn:
    TNT1 A 1
    Stop
  Pickup:
    TNT1 A 1 A_JumpIfInventory("AzureDragonWeapon", 1, "Succeed")
	TNT1 A 1 A_GiveInventory("AzureDragonMoistureTrue", 1)
    Stop
  Succeed:
    TNT1 A 1
    Stop
  }
}

Actor AzureDragonMoistureTrue : Powerup
{
	Powerup.Duration -10
	Powerup.Color "01 F8 FF", 0.2
}

Actor AzureDragonTimeOnWater : Inventory
{
	inventory.amount 1
	inventory.maxamount 350
}

ACTOR WaterWetProjectile
{
    +ClientSideOnly
	+NoBlockMap
	+DropOff
	+Missile 
	+DontSplash
	-NoGravity
	+ThruActors
	Gravity 0.7
	RenderStyle Add
	Alpha .5
	xscale 0.25
	states
	{
	Spawn:
		WAT5 A 1 
		Loop
	Death:
		WAT5 A 1
		TNT1 A 0 A_SetScale(0.2)
		WAT5 BCDE 1
		Stop
	}
}