/*
================================================================================
	Virtue Virgin
	
	Class: Sacrifical Angel
	
	“Authorities who undergone extensive purification rituals, metamorphizing 
from angels of law and order to angels of chastity. Fueled by bloodlust, Virtue
Virgins become faster and stronger the more damage they take. They can even 
gain the ability to fly."

	A Virtue Virgins is amplified Authority who starts off slow and easy, but 
slowly becomes stronger the the more damage she takes. At 75% health, she throws
three projectiles instead of two and gains the ability to fly. At 50% and 25%
health, she gains speed bonuses and at 5% health, gains the FAST monster trait.
	A wise warrior should not engage this angel until her sisters are 
eliminated.”
	Virtue Virgins cannot be resurrected by Putto or Joy elementals.

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

ACTOR Virtue_Virgin replaces BaronOfHell
{
  Health 1000
  Radius 24
  Height 64
  Mass 100
  Speed 12
  Fastspeed 20
  PainChance 65
  Tag "Virtue Virgin"
  Monster
  +FLOORCLIP
  +BOSSDEATH
  +DONTMORPH
  +BLOODSPLATTER
  +ALLOWPARTICLES
  +DONTRIP
  DamageFactor "FireMagic", 0.25
  DamageFactor "RainbowRip", 0.1
  DamageFactor "UndeadGoHomeImpact", 0
  DamageFactor "Judgement", 0
  DamageFactor "Holy", 0
  DamageFactor "CABladeBeam", 0.5 //Combine arms pistol
  DamageFactor "PlayerVoid", 0.1
  DamageFactor "KissMagic", 5
  SeeSound "virgin/sight"
  PainSound "virgin/pain"
  DeathSound "virgin/death"
  ActiveSound "virgin/active"
  Obituary "%o stood in awe before a Virtue Virgin."
  HitObituary "%o was castrated (And evicerated) by a Virtue Virgin."
    DropItem "AngelHealthSpawner", 256
	DropItem "AngelHealthSpawner", 256
    DropItem "AngelHealthSpawner", 256
	DropItem "AngelHealthSpawner", 128
	DropItem "AngelHealthSpawner", 64
	DropItem "AngelHealthSpawner", 32
	DropItem "AngelHealthSpawner", 16
	DropItem "CherubDressSpawner", 8
	DropItem "VirginDressSpawner", 2
	
			var int user_haloactive;
			
  States
  {
  Spawn:
  	VTRE A 0
	TNT1 A 0 A_JumpIf (user_haloactive == 1, "SpawnLoop")
	TNT1 A 0 A_SetUserVar (user_haloactive, 1)
    TNT1 A 0 A_SpawnItemEx ("VVHalo", 0,0,60, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER )
	Goto SpawnLoop
  SpawnLoop:
    VT2E AB 10 A_Look
    Loop
  See:
	TNT1 A 0 A_JumpIfHealthLower(750,"Flight")
	TNT1 A 0 A_JumpIfHealthLower(250,"SuperFlight")
	TNT1 A 0 A_JumpIfHealthLower(50,"UltraFlight")
    VTRE ABCD 5 A_Chase
    Loop
  Flight:
	TNT1 A 0 A_JumpIfHealthLower(250,"SuperFlight")
	TNT1 A 0 A_JumpIfHealthLower(50,"UltraFlight")
	TNT1 A 0 A_Changeflag("Speed 16",TRUE)
  	TNT1 A 0 A_Changeflag("QUICKTORETALIATE",TRUE)
	TNT1 A 0 A_Changeflag("FLOAT",TRUE)
	TNT1 A 0 A_Changeflag("NOGRAVITY",TRUE)
    VT2E ABCD 4 A_Chase
    Loop
  SuperFlight:
	TNT1 A 0 A_JumpIfHealthLower(50,"UltraFlight")
	TNT1 A 0 A_Changeflag("Speed 18",TRUE)
   	TNT1 A 0 A_Changeflag("QUICKTORETALIATE",TRUE)
	TNT1 A 0 A_Changeflag("FLOAT",TRUE)
	TNT1 A 0 A_Changeflag("NOGRAVITY",TRUE)
	TNT1 A 0 A_Changeflag("MISSILEMORE",TRUE)
    VT2E ABCD 2 FAST A_Chase
	Loop
  UltraFlight:
	TNT1 A 0 A_Changeflag("Speed 25",TRUE)
   	TNT1 A 0 A_Changeflag("QUICKTORETALIATE",TRUE)
	TNT1 A 0 A_Changeflag("FLOAT",TRUE)
	TNT1 A 0 A_Changeflag("NOGRAVITY",TRUE)
	TNT1 A 0 A_Changeflag("MISSILEMORE",TRUE)
	TNT1 A 0 A_Changeflag("ALWAYSFAST",TRUE)
    VT2E AABBCCDD 1 FAST A_Chase
	Loop
  Melee:
	TNT1 A 0 A_JumpIfHealthLower(250,"DeathMelee")
	TNT1 A 0 A_Recoil(-10)
    VTRE E 4 A_playsound("authority/attack")
    VTRE E 2 A_FaceTarget
    VTRE F 3 A_CustomMeleeAttack(80,"authority/attack3")
	VTRE G 6
    Goto See
  DeathMelee:
	TNT1 A 0 A_Recoil(-10)
    VTRE E 3 A_playsound("authority/attack")
    VTRE F 2 A_FaceTarget
    VTRE G 3 A_CustomMeleeAttack(80,"authority/attack3")
	TNT1 A 0 A_Recoil(-10)
	VTRE E 3 A_playsound("authority/attack")
    VTRE F 2 A_FaceTarget
    VTRE G 3 A_CustomMeleeAttack(80,"authority/attack3")
	TNT1 A 0 A_Recoil(-10)
	VTRE E 3 A_playsound("authority/attack")
    VTRE F 2 A_FaceTarget
    VTRE G 3 A_CustomMeleeAttack(80,"authority/attack3")
    Goto See
  Missile:
	TNT1 A 0 A_JumpIfHealthLower(50,"Doomwind")
	TNT1 A 0 A_JumpIfHealthLower(750,"Bladewind")
	VTRE E 6 A_FaceTarget
	VTRE F 3 A_CustomComboAttack("Bslash", 32, 10 * random(7, 9), "authority/attack")
    VTRE G 6 
	TNT1 A 0 A_JumpIfHealthLower(750,"Flight")
	TNT1 A 0 A_JumpIfHealthLower(250,"SuperFlight")
	TNT1 A 0 A_JumpIfHealthLower(50,"UltraFlight")
	Goto See
  Bladewind:
    VTRE E 3 A_FaceTarget
    VTRE F 3 A_CustomComboAttack("Bslash", 32, 10 * random(7, 9), "authority/attack")
	VTRE G 0 Bright A_CustomMissile ("Wslash",35,45,15)
	VTRE G 0 Bright A_CustomMissile ("Wslash",35,-45,-15)
	VTRE G 6 
	TNT1 A 0 A_JumpIfHealthLower(750,"Flight")
	TNT1 A 0 A_JumpIfHealthLower(250,"SuperFlight")
	TNT1 A 0 A_JumpIfHealthLower(50,"UltraFlight")
    Goto See
  Doomwind:
    VTRE E 3 A_FaceTarget
    VTRE F 3 A_CustomComboAttack("Bslash", 32, 10 * random(7, 9), "authority/attack")
	VTRE G 0 Bright A_CustomMissile ("Bslash",35,45,15)
	VTRE G 0 Bright A_CustomMissile ("Bslash",35,-45,-15)
	VTRE G 6 
	TNT1 A 0 A_JumpIfHealthLower(750,"Flight")
	TNT1 A 0 A_JumpIfHealthLower(250,"SuperFlight")
	TNT1 A 0 A_JumpIfHealthLower(50,"UltraFlight")
    Goto See
  Pain:
	TNT1 A 0 A_SpawnItemEx("BlackFeather",random(-20,20),random(-20,20),50,random(-5,5),random(-5,5),random(-5,5))
	TNT1 A 0 A_SpawnItemEx("WhiteFeather",random(-20,20),random(-20,20),50,random(-5,5),random(-5,5),random(-5,5))
	TNT1 A 0 A_SpawnItemEx("BlackFeather",random(-20,20),random(-20,20),64,random(-5,5),random(-5,5),random(-5,5))
    VTRE H 8
	TNT1 A 0 A_SpawnItemEx("BlackFeather",random(-20,20),random(-20,20),64,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AA 0 A_SpawnItemEx("BlackFeather",random(-30,30),random(-20,20),64,random(-5,5),random(-5,5),random(-5,5))
    VTRE H 8 A_Pain
	TNT1 A 0 A_JumpIfHealthLower(750,"Flight")
	TNT1 A 0 A_JumpIfHealthLower(250,"SuperFlight")
	TNT1 A 0 A_JumpIfHealthLower(50,"UltraFlight")
    Goto See
  Death:
	TNT1 A 0
	TNT1 A 0 A_SetUserVar (user_haloactive, 0)
	TNT1 A 0 A_Scream
	TNT1 A 0 A_NoBlocking
	TNT1 A 0 A_Quake(2,16,0,128)
	VTRE XX 1 A_BossDeath
	TNT1 A 0 A_SpawnItemEx ("VirginPCDeath", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 1 A_SpawnItemEx ("AviaryIceSpawner3")
	TNT1 A 0
	Stop
  Raise:
	Stop
  }
}

ACTOR QuietVirgin : Virtue_Virgin
{
  Tag "Virtue Virgin"
  SeeSound "bird/song"
  DeathSound "authority/attack"
  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
	TNT1 A 0 A_Quake(2,16,0,128)
	VTRE XX 1 A_BossDeath
	TNT1 A 0 A_SpawnItemEx ("VirginPCDeath", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 1 A_SpawnItemEx ("AviaryIceSpawner3")
	TNT1 A 0
	Stop
	}
}

Actor VirginPCDeath
{
  -NOINTERACTION
  -SOLID
    +NOGRAVITY
  +DONTFALL
  States
  {
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_Quake(5,3,0,4)
	TNT1 AAAA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 A 0 A_SpawnItemEx("WhiteFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	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 AAA 0 A_SpawnItemEx("BlackFeather",random(-20,20),random(-20,20),25,random(-5,5),random(-5,5))
	TNT1 AA 0 A_SpawnItemEx("BlackFeather",random(-30,30),random(-30,30),25,random(-5,5),random(-5,5))
	TNT1 AAAA 0 A_SpawnItemEx("BlackFeather",random(-40,30),random(-40,40),25,random(-5,5),random(-5,5))
	TNT1 AAAAA 0 A_SpawnItemEx("BlackFeather",random(-50,50),random(-50,50),25,random(-5,5),random(-5,5))
	TNT1 AAAAAAA 0 A_SpawnItemEx("BlackFeather",random(-60,60),random(-60,60),25,random(-5,5),random(-5,5))
	TNT1 AAAAAA 0 A_SpawnItemEx("BlackFeather",random(-70,70),random(-70,70),25,random(-5,5),random(-5,5))
	TNT1 AAA 0 A_SpawnItemEx("BlackFeather",random(-80,80),random(-80,80),25,random(-10,10),random(-10,10))
	VTRE XX 10 Bright
	VTRE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1 Bright A_Fadeout(0.01)
	VTRE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1 A_Fadeout(0.01)
	VTRE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2 A_Fadeout(0.02)
	TNT1 A 0
	Stop
	}
}

ACTOR VirginCast : Virtue_Virgin
{
  States
	{
 See:
    VTRE AABBCCDD 5 A_Chase
    Loop
  Melee:
    VTRE E 4 A_playsound("authority/attack")
    VTRE E 4 A_FaceTarget
    VTRE F 5 A_CustomMeleeAttack(80,"authority/attack3")
	VTRE G 6
    Goto See
  Missile:
    VTRE E 4 A_playsound("authority/attack")
    VTRE E 4 A_FaceTarget
    VTRE F 5 A_CustomMeleeAttack(80,"authority/attack3")
	VTRE G 6
    Goto See
  Death:
    VTRE I 8 A_Scream
    VTRE J 6 A_NoBlocking
    VTRE K 10 
	VTRE L 10 
	VTRE MNOPQR 6
	VTRE SSTT 2
	VTRE SSTT 2
	VTRE UV 6 A_BossDeath
    VTRE W 10
    Stop
	}
}