/*
================================================================================
	Kiss											
	
	Class: Inner sphere angel
	
	"Angelic snipers who float on pink clouds. These "Love angels" excel in 
distance combat, firing fast, heat seeking arrows which always seek their
opponent's heart. Their attacks always do a fixed 20 damage regardless of armor"

-Kisses are easier than cacodemons in single combat. Their arrows are weaker
cacoballs, are easily stun locked, take a few seconds to fire and are 100 less HP.
At low health or in mobs however, Kisses become quite lethal. 
Their arrows move much faster than cacoballs, are fast seeker missiles and 
ALWAYS do 20 damage, regardless of the player's armor.
It is not uncommon to be distracted by other foes, only to be sniped by several
Kisses. They are a glass cannon if there ever was one.
Kisses become higher priority targets the lower the player's health. While not 
the highest priority, it is important to keep track of the number 
of Kisses on any battlefield.  
================================================================================
*/

Actor KissSpawner replaces Cacodemon // Spawns the Kiss or the Quiet Kiss.
{
  +NOBLOCKMAP
  +NOSECTOR
  +THRUACTORS
  States
  {
  Spawn:
  	TNT1 A 0
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("Kiss",0,0,0, 0, 0,0,0, SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG )
	Stop
	SummonQuietKiss:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("QuietKiss",0,0,0, 0, 0,0,0, SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG )
	Stop
	}
}

ACTOR Kiss
{
  Health 300
  Radius 31
  Height 56
  Mass 120
  Speed 12
  PainChance 128
  Species "Kiss"
  Monster
  Tag "Kiss"
  +FLOAT
  +NOGRAVITY
  +MISSILEMORE
  +DONTHARMSPECIES
  +PIERCEARMOR
  DamageFactor "Magic", 0
  DamageFactor "UndeadGoHomeImpact", 0
  DamageFactor "Judgement", 0
  DamageFactor "Holy", 0
  DamageFactor "PlayerVoid", 0.5
  DamageFactor "CABladeBeam", 0.5 //Combine arms pistol
  SeeSound "kiss/sight"
  PainSound "kiss/pain"
  DeathSound "kiss/death"
  ActiveSound "kiss/active"
  Obituary "%o fell in love with a Kiss... then died."
  HitObituary "%o spent too long staring at a Kiss's ass."
	DropItem "AngelHealthSpawner" 256
	DropItem "AngelHealthSpawner" 128
	DropItem "AngelHealthSpawner" 128
	DropItem "AngelHealthSpawner", 64
	DropItem "AngelHealthSpawner" 8
	DropItem "Shellbox", 1
	DropItem "KissDressSpawner", 1 
		
	var int user_haloactive;
			
  States
  {
  Spawn:
  	KISS A 0
	TNT1 A 0 A_JumpIf (user_haloactive == 1, "SpawnLoop")
	TNT1 A 0 A_SetUserVar (user_haloactive, 1)
    TNT1 A 0 A_SpawnItemEx ("KissHalo", 0,0,50, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	Goto SpawnLoop
  SpawnLoop:
    KISS ABCDABCD 10 A_Look
	KI2S ABCD 8 A_Look
    Loop
  See:
    KISS AABBCCDD 3 A_Chase
	TNT1 A 0 A_Jump (96, 2)
    Loop
	KI2S AABB 3 A_Chase 
	KI2S C 2 A_Chase 
	KI2S DD 3 A_Chase 
	Loop
  Missile:
    KISS E 30 A_FaceTarget
	TNT1 A 0 A_Jump(32,"PowerAttack")
	KISS F 7 Bright A_FaceTarget
    KISS G 5 A_CustomMissile ("Arrow1")
	KISS G 5
    Goto See
  PowerAttack:
	TNT1 A 0
	TNT1 A 0 A_PlaySound("kiss/shotx3",7)
    KISS F 3 A_FaceTarget
	KISS F 3 BRIGHT A_FaceTarget
	KISS F 3 A_FaceTarget
	KISS F 3 BRIGHT A_FaceTarget
	KISS F 3 A_FaceTarget
	KISS F 3 BRIGHT A_FaceTarget
	KISS F 3 A_FaceTarget
	KISS F 3 BRIGHT A_FaceTarget
	KISS F 3 A_FaceTarget
	KISS F 3 BRIGHT A_FaceTarget
	KISS F 2 A_FaceTarget
	KISS F 2 BRIGHT A_FaceTarget
	KISS F 2 A_FaceTarget
	KISS F 2 BRIGHT A_FaceTarget
	KISS F 2 A_FaceTarget
	KISS F 2 BRIGHT A_FaceTarget
	KISS F 2 A_FaceTarget
	KISS F 2 BRIGHT A_FaceTarget
	KISS F 2 A_FaceTarget
	KISS F 2 BRIGHT A_FaceTarget
	KISS F 2 A_FaceTarget
	KISS F 2 BRIGHT A_FaceTarget
	KISS F 1 A_FaceTarget
	KISS F 1 BRIGHT A_FaceTarget
	KISS F 1 A_FaceTarget
	KISS F 1 BRIGHT A_FaceTarget
	KISS F 1 A_FaceTarget
	KISS F 1 BRIGHT A_FaceTarget
	KISS F 1 A_FaceTarget
	KISS F 1 BRIGHT A_FaceTarget
	TNT1 A 0 A_StopSound(7)
	KISS G 1 A_CustomMissile ("Arrow1")
	KISS F 1 A_FaceTarget
	KISS G 1 A_CustomMissile ("Arrow1")
	KISS F 1 A_FaceTarget
    KISS G 1 A_CustomMissile ("Arrow1")
	KISS G 11 A_CustomMissile ("Arrow1")
    Goto See
  Pain:
	TNT1 A 0 A_StopSound(7)
    KISS H 3
    KISS H 3 A_Pain
    KISS H 6
    Goto See
   Death.Ice:
    TNT1 A 0
	TNT1 A 0 A_SetUserVar (user_haloactive, 0)
	KI2S E 120
	KI2S E 1 A_SpawnItemEx ("Frozenkiss", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner2")
    Stop
   PCIceDeath:
    TNT1 A 0 A_SpawnItemEx ("ExtraIce", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 0 A_Scream
    KISS J 8 
    KISS KL 6
	TNT1 A 0 A_NoBlocking
    KISS MN 6
    KISS O -1 A_SetFloorClip
    Stop
   Death.PlayerVoid:
	TNT1 A 0 A_Changeflag("DONTCORPSE",TRUE)
	TNT1 A 0 A_playsound("stonemaiden/pain",6,1, FALSE)
	KI2S L 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 ("StoneKiss", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
    Stop
  AltStone:
	TNT1 A 0 A_SpawnItemEx ("StoneKiss2", 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
	KISS H 3
	TNT1 A 0 A_SpawnItem ("KisssCloud")
	TNT1 A 0 A_SpawnItemEx ("KissPCDeath", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner")
	KI2S V -1
	Stop
  Raise:
	TNT1 A 0 A_SetUserVar (user_haloactive, 0)
    KI2S U 8 A_UnSetFloorClip
    KI2S UUU 5
	TNT1 A 0 A_SpawnItemEx ("KissHalo", 10,0,50, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER) 
    Goto See
  }
}

ACTOR QuietKiss : Kiss
{
  Tag "Kiss"
  SeeSound "rain/altint"
  DeathSound "body/altgore"
  PainSound "generic/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
	KISS H 3
	TNT1 A 0 A_SpawnItem ("KisssCloud")
	TNT1 A 0 A_SpawnItemEx ("KissPCDeath", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner")
	KI2S V -1
	Stop
    }
}

Actor KisssCloud
{
  +NOGRAVITY
  +DONTFALL
  States
  {
  Spawn:
    CL6D A 15
    CL6D ABCDE 10
    Stop
  }
}

Actor FrozenKiss
{
  Health 100
  Radius 16
  Height 56
  ProjectilePassHeight -16
  +SOLID
  +SHOOTABLE
  +PUSHABLE
  +NOICEDEATH
  +NOBLOOD
  -COUNTKILL
  DamageFactor "Ice", 0
  DamageFactor "Fire", 2
  States
  {
  Spawn:
	KI2S F 150
	TNT1 A 0 A_playsound("angel/frozensoild")
	KI2S FGHIJ 20
	TNT1 A 0 A_playsound("stonemaiden/cry2")
	KI2S K 10000000000000 
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner")
	Loop
   Death:
	TNT1 A 0 A_NoBlocking
	TNT1 A 0 A_SpawnItemEx ("AviaryIceSpawner")
    Stop
  }
}

Actor StoneKiss
{
  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:
	KI2S L 3 Bright A_playsound("angel/stonebeam")
	KI2S MN 3 Bright
	KI2S L 3 Bright A_playsound("angel/stonebeam")
	KI2S MN 3 Bright
	KI2S L 3 Bright A_playsound("angel/stonebeam")
	KI2S MN 3 Bright
	KI2S L 3 Bright A_playsound("angel/stonebeam")
	KI2S MN 3 Bright
	KI2S L 3 Bright A_playsound("angel/stonebeam")
	KI2S MN 3 Bright
	KI2S L 2 Bright A_playsound("angel/stonebeam")
	KI2S MN 2 Bright
	KI2S L 2 Bright A_playsound("angel/stonebeam")
	KI2S MN 2 Bright
	KI2S L 2 Bright A_playsound("angel/stonebeam")
	KI2S MN 2 Bright
	KI2S L 2 Bright A_playsound("angel/stonebeam")
	KI2S MN 2 Bright
	KI2S L 1 Bright A_playsound("angel/stonebeam")
	KI2S MN 1 Bright
	KI2S L 1 Bright A_playsound("angel/stonebeam")
	KI2S MN 1 Bright
	KI2S L 1 Bright A_playsound("angel/stonebeam")
	KI2S MN 1 Bright 
	KI2S L 1 Bright A_playsound("angel/stonebeam")
	KI2S MN 1 Bright
	KI2S O 25 Bright
	KI2S PQ 50 Bright A_playsound("stonemaiden/pain")
	KI2S RS 50 A_playsound("stonemaiden/pain")
	TNT1 A 0 A_playsound("stonemaiden/pain4")
	KI2S T -1
	Stop
  Death:
	TNT1 A 0 A_playsound("stonemaiden/pain",6,1, FALSE)
	KI2S T 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 StoneKiss2 : StoneKiss
{
}

Actor KissPCDeath
{
  -NOINTERACTION
  -SOLID
  +NOGRAVITY
  +DONTFALL
  States
  {
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_Quake(5,3,0,4)
	KI2S U 20 Bright
	KI2S UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 1 Bright A_Fadeout(0.01)
	KI2S UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 1 A_Fadeout(0.01)
	KI2S UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 2 A_Fadeout(0.02)
	TNT1 A 0
	Stop
	}
}

ACTOR KissCast : Kiss
{
  States
	{
  See:
    KISS AABBCCDD 3 A_Chase
	KI2S AABB 3 A_Chase 
	KI2S C 2 A_Chase 
	KI2S DD 3 A_Chase 
	Loop
  Missile:
    KISS E 30 A_FaceTarget
	KISS F 7 Bright A_FaceTarget
    KISS G 5
    Goto See
  Death:
	KISS I 8 A_Scream
    KISS J 8 
    KISS KL 6
    KISS MN 6
    KISS O 10
    Stop
	}
}