/*
================================================================================
	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 VirginSpawner replaces BaronOfHell// Needed to beat E1M8. Code taken from DRLA by Yholl
// {

// 	Health 0x7FFFFFFF
// 	Radius 0
// 	Height 0

// 	Monster
// 	+NOBLOCKMAP
// 	+NOCLIP
// 	+NOTRIGGER
// 	+NOTONAUTOMAP
// 	+BOSSDEATH
// 	-SHOOTABLE
// 	-SOLID
// 	-COUNTKILL

// 	const int SpawnFlags = SXF_TRANSFERPOINTERS | SXF_TRANSFERAMBUSHFLAG |
// 		SXF_TRANSFERSPECIAL | SXF_NOCHECKPOSITION | SXF_ISTRACER;

//   States
// 	{
//   Spawn:
//   	TNT1 A 0
// 	TNT1 A 0 A_JumpIf(Getcvar("AA_ClassicVirginSpawner") == 1, "SummonClassicVirgin")
// 	TNT1 A 0 A_JumpIf(Getcvar("AA_VirginShutUp") == 2, "SummonQuietVirgin")
// 	TNT1 A 0
// 	TNT1 A 0 A_SpawnItemEX("Virtue_Virgin",0,0,0, 0, 0,0,0, Spawnflags, 0)
// 	Goto Bosswait2
// 	SummonClassicVirgin:
// 	TNT1 A 0
// 	TNT1 A 0 A_JumpIf(Getcvar("AA_VirginShutUp") == 2, "SummonQuietVirginClassic")
// 	TNT1 A 0 A_SpawnItemEX("Virtue_Virgin_Classic",0,0,0, 0, 0,0,0, Spawnflags, 0)
// 	Goto Bosswait2
// 	SummonQuietVirginClassic:
// 	TNT1 A 0
// 	TNT1 A 0 A_SpawnItemEX("QuietVirginClassic",0,0,0, 0, 0,0,0, Spawnflags, 0)
// 	Goto Bosswait2
// 	SummonQuietVirgin:
// 	TNT1 A 0
// 	TNT1 A 0 A_SpawnItemEX("QuietVirginClassic",0,0,0, 0, 0,0,0, Spawnflags, 0)
// 	GoTo Bosswait2
// 	BossWait2:
// 	TNT1 A 1 A_JumpIfHealthLower(1, "BossDead2", AAPTR_TRACER)
// 	Loop
// 	BossDead2:
// 	TNT1 A 1 A_BossDeath
// 	Stop
// 	}
// }

ACTOR Virtue_Virgin replaces BaronOfHell
{
  Health 1000
  Radius 24
  Height 64
  Mass 100
  Speed 18 // [AK47]: changed from 12 to 18
  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 "Greenarmor", 8
	DropItem "Bluearmor", 1
	
			var int user_haloactive;
			
  States
  {
  Spawn:
  	VTRE A 0 NoDelay A_SpawnItemEx ("VVHalo", 0,0,60, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER )
// 	TNT1 A 0 A_JumpIf (user_haloactive == 1, "SpawnLoop")
// 	TNT1 A 0 A_SetUserVar (user_haloactive, 1)
    TNT1 A 0 
	TNT1 A 0 A_Jump(256, "SpawnLoop")
	Goto SpawnLoop
  Idle:
  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)   // [AK47]: Can wait
  	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 A_SetUserVar (user_haloactive, 0)
	TNT1 AAA 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AA 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
    VTRE I 8 A_Scream
    VTRE J 6 A_NoBlocking
    VTRE K 16 
	VTRE L 16 
	VTRE MNOPQR 6
	TNT1 A 0 A_playsound("body/fall",7,0.5)
	TNT1 AA 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 AA 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 A 0 A_PlaySound ("authority/fountain")
	VTRE SSTT 2
	TNT1 A 0 A_PlaySound ("authority/fountain")
	VTRE SSTT 2
	TNT1 A 0 A_PlaySound ("authority/fountain")
	VTRE SSTT 2
	TNT1 A 0 A_PlaySound ("authority/fountain")
	VTRE SSTT 2
	TNT1 A 0 A_playsound("body/fall",7,0.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 AAA 0 A_SpawnItemEx("BlackFeather",random(-50,50),random(-50,50),25,random(-5,5),random(-5,5))
	TNT1 AA 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 UV 6 A_BossDeath
    VTRE W -1
    Stop
  Raise:
	Stop
  }
}

ACTOR Virtue_Virgin_Classic
{
  Health 1000
  Radius 24
  Height 64
  Mass 100
  Speed 12
  Fastspeed 20
  PainChance 35
  Tag "Elite Virtue Virgin"
  Monster
  +FLOORCLIP
  +BOSSDEATH
  +BLOODSPLATTER
  +ALLOWPARTICLES
  +DONTRIP
  DamageFactor "FireMagic", 0
  DamageFactor "RainbowRip", 0
  DamageFactor "UndeadGoHomeImpact", 0
  DamageFactor "Judgement", 0
  DamageFactor "Holy", 0
  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 "Greenarmor", 8
	DropItem "Bluearmor", 1
	
			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:
    VTRE 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 AABBCCDD 3 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 AABBCCDD 2 FAST A_Chase
    Loop
  SuperFlight:
	TNT1 A 0 A_JumpIfHealthLower(50,"UltraFlight")
   	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("Speed 25",TRUE)
    VT2E AABBCCDD 1 FAST A_Chase
	Loop
  UltraFlight:
   	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("Speed 25",TRUE)
	TNT1 A 0 A_Changeflag("ALWAYSFAST",TRUE)
    VT2E AABBCCDD 1 FAST A_Chase
	Loop
  Melee:
    Missile:
	TNT1 A 0 A_JumpIfHealthLower(50,"Doomwind")
	VTRE E 6 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 AA 0 A_SpawnItemEx("BlackFeather",random(-20,20),random(-20,20),50,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),random(-20,20),50,random(-5,5),random(-5,5),random(-5,5))
    VTRE H 8
    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 A_SetUserVar (user_haloactive, 0)
	TNT1 AAA 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AA 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
    VTRE I 8 A_Scream
    VTRE J 6 A_NoBlocking
    VTRE K 16 
	VTRE L 16 
	VTRE MNOPQR 6
	TNT1 A 0 A_playsound("body/fall",7,0.5)
	TNT1 AAA 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AA 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AAAA 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AA 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 A 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 AAAAAA 0 A_SpawnItemEx("BlackFeather",random(-20,20),40,25,random(-5,5),random(-5,5),random(-5,5))
	TNT1 A 0 A_PlaySound ("authority/fountain")
	VTRE SSTT 2
	TNT1 A 0 A_PlaySound ("authority/fountain")
	VTRE SSTT 2
	TNT1 A 0 A_PlaySound ("authority/fountain")
	VTRE SSTT 2
	TNT1 A 0 A_PlaySound ("authority/fountain")
	VTRE SSTT 2
	VTRE UV 6 A_BossDeath
    VTRE W -1
    Stop
  Raise:
	Stop
  }
}

ACTOR QuietVirgin : Virtue_Virgin
{
  Tag "Virtue Virgin"
  SeeSound "bird/song"
  DeathSound "authority/attack"
  PainSound "virgin/pain"
  ActiveSound "bird/flap"
}

ACTOR QuietVirginClassic : Virtue_Virgin_Classic
{
  Tag "Virtue Virgin"
  SeeSound "wind/altint"
  DeathSound "authority/death6"
  PainSound "virgin/pain"
  ActiveSound "bird/flap"
}

