/*
================================================================================
	Joy Elemental
	
	Class: Inner Sphere Angel
	
"An angelic musician who happens to be an instrument herself. Joy elementals 
wander the battlefield, playing songs that revive fallen dolls, inner and outer 
sphere angels. Her songs attract wandering putto who are more than grateful 
to help her with her task. Joy elementals make their present known by their 
ringing and like putto, should always be a top priority."

In Angelic Aviary, the arch-vile and pain elementals have changed places. Where
the Dollmaykr acts like a pain elemental in summoning new enemies, the Joy 
elemental focuses on resurrecting dead angels and spawning Putto who also 
resurrect dead angels. Unless there is a red egg on the field, a wise warrior 
should always target the Joy Elemental first.

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

Actor JoySpawner replaces PainElemental // Spawns the Joy Elemental or the Quiet Kiss.
{
  +NOBLOCKMAP
  +NOSECTOR
  +THRUACTORS
  States
  {
  Spawn:
  	TNT1 A 0
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("JoyElemental",0,0,0, 0, 0,0,0, SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG )
	Stop
	SummonQuietJoyElemental:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("QuietJoyElemental",0,0,0, 0, 0,0,0, SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG )
	Stop
	}
}

ACTOR JoyElemental
{
  Health 400
  Radius 31
  Height 56
  Mass 100
  Speed 8
  PainChance 128
  Tag "Joy Elemental"
  Monster
  +FLOAT
  +NOGRAVITY
  +NOTARGET
  +NOINFIGHTING
  DamageFactor "UndeadGoHomeImpact", 0
  DamageFactor "Judgement", 0
  DamageFactor "Holy", 0
  DamageFactor "Playervoid", 0.5
  DamageFactor "KissMagic", 3
  SeeSound "joyelemental/sight1"
  PainSound "joyelemental/pain1"
  DeathSound "joyelemental/death1"
  ActiveSound "iris/active"
  Obituary "Doot!"
    DropItem "AngelHealthSpawner", 256
	DropItem "AngelHealthSpawner", 256
	DropItem "AngelHealthSpawner", 64
	DropItem "AngelHealthSpawner", 64
	DropItem "medikit", 1
  
  	var int user_haloactive;
			
  States
  {
  Spawn:
  	JELM A 0
	TNT1 A 0 A_JumpIf (user_haloactive == 1, "SpawnLoop")
	TNT1 A 0 A_SetUserVar (user_haloactive, 1)
    TNT1 A 0 A_SpawnItemEx ("JoyElementalHalo", 0,0,60, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	Goto SpawnLoop
  Spawnloop:
    JELM ABCD 10 A_Look
    Loop
  See:
	JELM AABBCCDD 2 A_VileChase
	TNT1 A 0 A_playsound ("joyelemental/move")
	TNT1 A 0 A_Jump (96, 2)
    Loop
	JELM WWXX 2 A_VileChase
	JELM YY 2 A_VileChase
	JELM ZZ 2 A_VileChase
    Loop
  Missile:
    JELM E 5 A_FaceTarget
    JELM F 5 A_FaceTarget
    JELM G 5 Bright A_FaceTarget
	TNT1 A 0 A_playsound ("joyelemental/attack")
    JELM H 5 Bright A_PainAttack
	JELM F 5 A_FaceTarget
	JELM E 5 A_FaceTarget
    Goto See
  Heal:
	TNT1 A 0 A_playsound ("joyelemental/resurrect")
    JELM EFE 5 Bright
    Goto See
  Pain:
	TNT1 AAA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),random(-20,20),random(-5,20),random(-5,5),random(-5,5),random(-5,5))
	JELM I 6
    JELM I 6 A_Pain
    Goto See
  Death.Ice:
	TNT1 A 0 A_SetUserVar (user_haloactive, 0)
	J2LM A 250 
	TNT1 A 0 A_NoBlocking
	TNT1 A 0 A_SpawnItemEx ("FrozenJoyElemental", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner2")
    Stop
  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_SpawnItemEx ("AviaryIceSpawner")
	J2LM B 1 A_Fadeout(0.05)
	J2LM B -1
	Stop
  Raise:
	Stop
	}
}

ACTOR QuietJoyElemental : JoyElemental
{
  Tag "Joy Elemental"
  SeeSound "joyelemental/resurrect2"
  PainSound "bird/flap"
  DeathSound "joyelemental/attack"
  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_SpawnItemEx ("AviaryIceSpawner")
	J2LM B 1 A_Fadeout(0.05)
	J2LM B -1
	Stop
	}
}

Actor JoyElementalTorso
{
  +FLOORCLIP
  +CANNOTPUSH
  
  States
  {
  Spawn:
	TNT1 AAA 0 A_SpawnItemEx("WhiteFeather",random(-20,20),random(-20,20),random(-5,20),random(-5,5),random(-5,5),random(-5,5))
    JELM R 15 A_NoBlocking
	JELM STU 8
	TNT1 AAA 0 A_SpawnItemEx("WhiteFeather",random(-30,30),random(-30,30),random(-30,30),random(-5,5),random(-5,5))
	TNT1 AA 0 A_SpawnItemEx("WhiteFeather",random(-30,30),random(-30,30),random(-30,30),random(-5,5),random(-5,5))
	TNT1 AAAA 0 A_SpawnItemEx("WhiteFeather",random(-30,30),random(-30,30),random(-30,30),random(-5,5),random(-5,5))
    JELM V -1
    Stop
  }
}

Actor FrozenJoyElemental
{
  +FLOORCLIP
  +CANNOTPUSH
  
  States
  {
  Spawn:
    J2LM B 2 A_NoBlocking
    J2LM B -1
    Stop
  }
}

ACTOR JoyElementalCast : JoyElemental
{
  States
	{
  See:
	JELM AABBCCDD 4 
    Loop
  Missile:
    JELM E 5 A_FaceTarget
    JELM F 5 A_FaceTarget
    JELM G 5 Bright A_FaceTarget
    JELM H 5 Bright A_PainAttack
	JELM F 5 A_FaceTarget
	JELM E 5 A_FaceTarget
    Goto See
  Death:
    JELM J 8 
    JELM K 8 A_Scream  
	JELM L 5
	JELM MNOP 5 
	JELM Q 10
    Stop
	}
}
