/*
================================================================================
	Authority
	
	Inner Sphere angel
	
"Unyielding angels who are living embodiments of law and order. 
Authorities carve the very air into blades sharper than the sharpest of swords. 
Purely focusing on offense, the Authority is nimble and strong at the expense 
of armor and health."

-Authorities are slightly faster than the Hell knight and can close distances 
quickly, making them exceedingly difficult in narrow hallways. 
This speed comes at a cost of reduced health. At 400 health (100 less than the 
hell knight), she can be put down with two (carefully) aimed super shotgun blasts.
Authorities carve the air into either wind or blood blades. Wind blades are more
common and do less damage than hell knight fireballs. These blades slowly rotate
over time and can be tricky to avoid. Blood blades are rarer and can do massive 
amounts of damage. Both blade types are wider than standard projectiles,
making them harder to dodge in open arenas. On the plus side, they are
less effective in narrow passages.

================================================================================
*/

Actor AuthoritySpawner replaces Hellknight // Spawns the Authority or the Quiet Authority.
{
  +NOBLOCKMAP
  +NOSECTOR
  +THRUACTORS
  States
  {
  Spawn:
  	TNT1 A 0
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("Authority",0,0,0, 0, 0,0,0, SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG )
	Stop
	SummonQuietAuthority:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("QuietAuthority",0,0,0, 0, 0,0,0, SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG )
	Stop
	}
}

ACTOR Authority
{
  Health 400
  Radius 24
  Height 64
  Mass 800
  Speed 12
  PainChance 35
  Tag "Authority"
  Monster
  +FLOORCLIP
  DamageFactor "UndeadGoHomeImpact", 0
  DamageFactor "Judgement", 0
  DamageFactor "Holy", 0
  DamageFactor "CABladeBeam", 0.5 //Combine arms pistol
  DamageFactor "PlayerVoid", 0.5
  DamageFactor "KissMagic", 4
  SeeSound "authority/sight"
  PainSound "authority/pain"
  DeathSound "authority/death"
  ActiveSound "authority/active"
  Obituary "%o was slain by an Authority."
  HitObituary "%o met the Authority's blade."
  	DropItem "AngelHealthSpawner", 256
	DropItem "AngelHealthSpawner", 256
	DropItem "AngelHealthSpawner", 64
	DropItem "AngelHealthSpawner", 64
	DropItem "medikit", 1
	DropItem "AuthorityDressSpawner" 1
	
		var int user_haloactive;
			
  States
  {
  Spawn:
  	ATHO A 0
	TNT1 A 0 A_JumpIf (user_haloactive == 1, "SpawnLoop")
	TNT1 A 0 A_SetUserVar (user_haloactive, 1)
    TNT1 A 0 A_SpawnItemEx ("AuthorityHalo", 10,0,60, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	Goto SpawnLoop
  SpawnLoop:
    ATHO AB 10 A_Look
    Loop
  See:
    ATHO AABBCCDD 3 A_Chase
	TNT1 A 0 A_Jump (96, 2)
    Loop
	AT2O AABB 3 A_Chase 
	AT2O C 4 A_Chase 
	AT2O DD 3 A_Chase 
    Loop
  Melee:
	ATHO EF 4 A_FaceTarget
	ATHO G 6 A_CustomMeleeAttack(60,"authority/attack3")
	GoTo See
  Missile:
    ATHO E 6 A_FaceTarget
	TNT1 A 0 A_Jump (32, "Bloodslash" )
	ATHO F 6 A_FaceTarget
    ATHO G 4 A_CustomComboAttack("Wslash", 32, 10 * random(2, 6), "authority/attack")
    Goto See
  Bloodslash:
	ATHO EF 6 A_FaceTarget
	ATHO G 4 A_CustomComboAttack("Bslash", 32, 10 * random(4, 9), "authority/attack")
    Goto See
  Pain:
    ATHO H 8
	TNT1 AA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),random(-20,20),55,random(-5,5),random(-5,5),random(-5,5))
    ATHO H 8 A_Pain
    Goto See
  Death.Ice:
	TNT1 A 0 A_Changeflag("DONTCORPSE",TRUE)
	TNT1 A 0 A_SetUserVar (user_haloactive, 0)
	AT3O A 150 
	TNT1 A 0 A_SpawnItemEx ("FrozenAuthority", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner")
	Stop
  Death.PlayerVoid:
	TNT1 A 0 A_Changeflag("DONTCORPSE",TRUE)
	TNT1 A 0 A_playsound("stonemaiden/pain",6,1, FALSE)
	AT2O E 1 Bright A_NoBlocking
	TNT1 AAAAAAAAAAAAA 0 A_SpawnItemEx ("Rrock06",random(-16,16),random(-16,16),42,random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0)
	TNT1 AAAA 0 A_SpawnItemEx("Rrock02",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAA 0 A_SpawnItemEx("Rrock03",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAA 0 A_SpawnItemEx ("Rrock04",random(-20,20),random(-16,16),42,random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0)
	TNT1 AAAAA 0 A_SpawnItemEx("Rrock05",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Rrock01",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAA 0 A_SpawnItemEx ("Rrock04",random(-16,16),random(-16,16),42,random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0)
	TNT1 AAAAAAAAA 0 A_SpawnItemEx("Rrock05",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAA 0 A_SpawnItemEx("Rrock06",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx ("Rrock01",random(-20,20),random(-16,16),42,random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0)
	TNT1 AAAA 0 A_SpawnItemEx("Rrock02",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAA 0 A_SpawnItemEx("Rrock03",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 A 0 A_playsound ("stonemaiden/free")
	TNT1 A 0 A_Jump (128, "Altstone")
	TNT1 A 0 A_SpawnItemEx ("StoneAuthority", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
    Stop
  AltStone:
	TNT1 A 0 A_SpawnItemEx ("StoneAuthority2", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
    Stop
  Death:
	TNT1 A 0
	TNT1 A 0 A_SetUserVar (user_haloactive, 0)
	TNT1 A 0 A_Scream
	TNT1 A 0 A_NoBlocking
	AT2O P 0
	TNT1 A 0 A_SpawnItemEx ("AuthorityPCDeath", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner2")
	AT2O P -1
	Stop
  Raise:
	TNT1 A 0 A_SetUserVar (user_haloactive, 0)
    AT2O PPP 5
	AT2O PP 5 BRIGHT
	TNT1 I 0 A_SpawnItemEx ("AuthorityHalo", 10,0,60, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)	
    Goto See
  }
}

ACTOR QuietAuthority : Authority
{
  Tag "Authority"
  SeeSound "wind/altint"
  DeathSound "authority/death6"
  PainSound "virgin/pain"
  ActiveSound "bird/flap"
  States
	{
	Death:
	TNT1 A 0
	TNT1 A 0 A_SetUserVar (user_haloactive, 0)
	TNT1 A 0 A_Scream
	TNT1 A 0 A_NoBlocking
	AT2O P 0
	TNT1 A 0 A_SpawnItemEx ("AuthorityPCDeath", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner2")
	AT2O P -1
	Stop
	}
}

Actor FrozenAuthority
{
  Health 100
  Radius 20
  Height 56
  Mass 400
  Monster
  +SOLID
  +PUSHABLE
  +NOICEDEATH
  +FULLVOLACTIVE
  +NOBLOOD
  -COUNTKILL
  DamageFactor "Ice", 0
  DamageFactor "Fire", 2
  States
  {
  Spawn:
	TNT1 A 0
	AT3O B 150
	TNT1 A 0 A_playsound("angel/frozensoild")
	AT3O CDEFGHIJKLM 15
	AT3O MN 20
	Goto Frozen
  Frozen:
	AT3O O 1000
	Loop
   Death:
	TNT1 A 0 A_NoBlocking
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner")
    Stop
  }
}

Actor StoneAuthority
{
  Health 1000
  Radius 20
  Height 56
  Mass 800
  +SOLID
  +SHOOTABLE
  +PUSHABLE
  +DONTBLAST
  +DONTMORPH
  +DONTRIP
  +NOICEDEATH
  +FULLVOLACTIVE
  +NOBLOOD
  +NEVERTARGET
  -COUNTKILL
	DamageFactor "FireMagic", 0
	DamageFactor "Poison", 0
	DamageFactor "Melee", 2.0
	DamageFactor "Ice", 0
	DamageFactor "Fire", 0
	DamageFactor "Electric", 0
	DamageFactor "Magic", 0
	DamageFactor "PlayerVoid", 0
  States
  {
  Spawn:
	AT2O E 3 Bright A_playsound("angel/stonebeam")
	AT2O FG 3 Bright
	AT2O E 3 Bright A_playsound("angel/stonebeam")
	AT2O FG 3 Bright
	AT2O E 3 Bright A_playsound("angel/stonebeam")
	AT2O FG 3 Bright
	AT2O E 3 Bright A_playsound("angel/stonebeam")
	AT2O FG 3 Bright
	AT2O E 3 Bright A_playsound("angel/stonebeam")
	AT2O FG 3 Bright 
	AT2O E 2 Bright A_playsound("angel/stonebeam")
	AT2O FG 2 Bright
	AT2O E 2 Bright A_playsound("angel/stonebeam")
	AT2O FG 2 Bright
	AT2O E 2 Bright A_playsound("angel/stonebeam")
	AT2O FG 2 Bright
	AT2O E 2 Bright A_playsound("angel/stonebeam")
	AT2O FG 2 Bright
	AT2O E 1 Bright A_playsound("angel/stonebeam")
	AT2O FG 1 Bright
	AT2O E 1 Bright A_playsound("angel/stonebeam")
	AT2O FG 1 Bright
	AT2O E 1 Bright A_playsound("angel/stonebeam")
	AT2O FG 1 Bright
	AT2O H 25 Bright
	AT2O IJK 50 Bright A_playsound("stonemaiden/pain")
	AT2O LM 50 A_playsound("stonemaiden/pain")
	TNT1 A 0 A_playsound("stonemaiden/pain4")
	AT2O N -1
	Stop
  Death:
	TNT1 A 0 A_playsound("stonemaiden/pain",6,1, FALSE)
	AT2O N 1  A_NoBlocking
	TNT1 AAAAAAAAAAAAA 0 A_SpawnItemEx ("Rrock06",random(-16,16),random(-16,16),42,random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0)
	TNT1 AAAA 0 A_SpawnItemEx("Rrock02",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAA 0 A_SpawnItemEx("Rrock03",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAA 0 A_SpawnItemEx ("Rrock04",random(-20,20),random(-16,16),42,random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0)
	TNT1 AAAAA 0 A_SpawnItemEx("Rrock05",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Rrock01",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAA 0 A_SpawnItemEx ("Rrock04",random(-16,16),random(-16,16),42,random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0)
	TNT1 AAAAAAAAA 0 A_SpawnItemEx("Rrock05",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAA 0 A_SpawnItemEx("Rrock06",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx ("Rrock01",random(-20,20),random(-16,16),42,random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0)
	TNT1 AAAA 0 A_SpawnItemEx("Rrock02",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 AAA 0 A_SpawnItemEx("Rrock03",0,0,32,random(-10,10),random(-10,10),random(5,10))
	TNT1 A 0 A_playsound ("stonemaiden/free")
    Stop
  }
}

Actor StoneAuthority2 : StoneAuthority
{
}

Actor AuthorityPCDeath
{
  -NOINTERACTION
  -SOLID
  +NOGRAVITY
  +DONTFALL
  States
  {
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_Quake(5,3,0,4)
	TNT1 AAAAAA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),-40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AAA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),-40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AAAAAAAA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),-40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AAA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),-40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AAA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),-40,25,random(-5,5),random(-5,5),random(0,80))
	TNT1 AAAAAA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),-40,25,random(-5,5),random(-5,5),random(-5,5))
	AT3O P 20 Bright
	AT3O PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 1 Bright A_Fadeout(0.01)
	AT3O PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 1 A_Fadeout(0.01)
	AT3O PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 2 A_Fadeout(0.02)
	TNT1 A 0
	Stop
	}
}

ACTOR AuthorityCast : Authority
{
  States
	{
  See:
    ATHO AABBCCDDAABBCCDD 3 A_Chase
	AT2O AABB 3 A_Chase 
	AT2O CC 4 A_Chase 
	AT2O DD 3 A_Chase 
    Loop
  Missile:
    ATHO E 6 A_FaceTarget
	ATHO F 6 
    ATHO G 4 
    Goto See
  Death:
    ATHO I 8 A_Scream
    ATHO J 6 A_NoBlocking
    ATHO K 8
	ATHO L 8 
	ATHO MNOPQR 6
	ATHO SSTTSSTT 4
	ATHO UV 4
    ATHO W 10 
    Stop
	}
}
