
// ------------------------------------------------------------
//   Imp
// ------------------------------------------------------------

ACTOR DrunkImpBallTail
{
	RenderStyle Add
	+nointeraction
	+forcexybillboard
	Alpha 0.5
	Scale 0.6
	States
	{
		Spawn:
			BAL1 BCD 3 BRIGHT
		Death:
			BAL1 DEE 3 BRIGHT A_FadeOut (0.2)
			Stop
	}
}
ACTOR ReverseImpBallTail : DrunkImpBallTail
{
	Alpha 0
	States
	{
		Spawn:
			BAL1 EEDC 2 BRIGHT A_FadeIn (0.2)
		Death:
			BAL1 BAB 2 BRIGHT A_FadeIn (0.2)
			Stop
	}
}
ACTOR DrunkImpBall : DoomImpBall
{
	PROJECTILE
	+SEEKERMISSILE
	+forcexybillboard
	Decal "DoomImpScorch"
	Radius 5
	Height 6
	Speed 12
	Damage 3
	Scale 0.8
	DamageType "Thermal"
	States
	{
	Spawn:
		TNT1 A 0
		BAL1 ABABAB 2 BRIGHT
		BAL1 ABABAB 2 BRIGHT A_SeekerMissile (6, 9)
	See:
		BAL1 AB 2 BRIGHT A_SpawnItemEx ("DrunkImpBallTail", -1, 0, 0, 6, 0, 0, 0, 160)
		BAL1 AB 1 BRIGHT
		BAL1 A 2 BRIGHT A_SpawnItemEx ("DrunkImpBallTail", -1, 0, 0, 6, 0, 0, 0, 160)
		BAL1 BA 1 BRIGHT
		BAL1 B 2 BRIGHT A_SpawnItemEx ("DrunkImpBallTail", -1, 0, 0, 6, 0, 0, 0, 160)
		BAL1 AB 1 BRIGHT A_BishopMissileWeave
		BAL1 A 2 BRIGHT A_SpawnItemEx ("DrunkImpBallTail", -1, 0, 0, 6, 0, 0, 0, 160)
		BAL1 B 2 A_JumpIfTargetInLOS (2,360)
		BAL1 B 0 A_Jump (256,2)
		BAL1 B 0 BRIGHT A_SeekerMissile (6, 9)
		BAL1 A 0 BRIGHT ThrustThingZ (0, random(-2, 4), random(0,1), 1)
		Loop
	Death:
		BAL1 CDE 4 BRIGHT A_FadeOut (0.2)
		Stop
	}
}

ACTOR DrunkImp : DoomImp 23001
{
	damagefactor "Thermal", 0.66
	Health 66
	Radius 16
	Height 54
	Speed 12
	Damage 4
	MeleeDamage 4
	PainChance 80
	DropItem HDPistol 16
	+MISSILEMORE
	+FASTER
	translation "64:72=50:71"
	meleesound "imp/melee"
	obituary "%o was marinated by the imps."
	hitobituary "%o was tenderized by the imps."
	States
	{
	Spawn:
		TROO AAAABBBB 2 A_Look
		Loop
	See:
		TROO AABBCCDD 2 A_Chase
		TNT1 A 0 A_Jump (180, 2)
		TNT1 A 0 A_AlertMonsters
		TROO A 0 HealThing (random(2,8))
		Loop
	Missile:
		TNT1 A 0 A_JumpIfTargetInLOS(1)
		goto Missile1
		TROO E 0 A_Jump (16, "Missile2")
		TROO E 0 A_JumpIfCloser (256, 1)
		goto Missile2
	Missile1:
		TROO E 8 A_FaceTarget
		TROO F 4
		TROO G 0 A_FaceTarget
		TROO G 4 A_CustomMissile ("DrunkImpBall", (random(28,36)), 6, (random(-16,16)))
		Troo F 0 A_Jump (160, 2)
		TROO F 5 A_SpidRefire
		Goto Missile
		TROO F 5
		Goto See
	Missile2:
		TROO E 0 A_Jump (156, "Missile1")
		TROO E 2 A_FaceTarget
		TROO E 0 A_PlaySound ("imp/sight")
		TROO EEEEE 2 A_SpawnItemEx ("ReverseImpBallTail", 4, 24, random(31,33), 1, 0, 0, 0, 160)
		TROO EF 4
		TROO G 0 A_FaceTarget
		TROO G 0 A_CustomMissile ("DrunkImpBall", (random(31,33)), 6, (random(6,14)))
		TROO G 0 A_CustomMissile ("DrunkImpBall", (random(31,33)), 6, (random(-4,4)))
		TROO G 0 A_CustomMissile ("DrunkImpBall", (random(31,33)), 6, (random(-6,-14)))
		TROO GGFE 5
		Goto Missile1
	Melee:
		TROO E 6 A_FaceTarget
		TROO F 6
		TROO G 8 A_MeleeAttack
		Goto See
	Pain:
		TROO H 3 A_ChangeFlag("NODROPOFF", 1)
		TROO H 3 A_Pain
		TNT1 A 0 A_Jump (180, 2)
		TNT1 A 0 A_AlertMonsters
		TROO A 2 A_FaceTarget
		TROO BCD 2 A_FastChase
		Goto Missile
	Death:
		TNT1 A 0 A_GivetoTarget("HDKillCount",1)
		TNT1 A 0 ACS_ExecuteAlways(558,0,0,1,8)
		TNT1 A 0 A_SpawnItemEx ("tempshield", 0,0,0, velx,vely,velz, 0,40)
		TROO I 8 A_ChangeFlag("NODROPOFF", 0)
		TROO J 8 A_Scream
		TROO K 6 A_SpawnItemEx ("tempshield2", 0,0,0, velx,vely,velz, 0,40)
		TROO L 6 A_NoBlocking
		TROO M -1
		Stop
	XDeath:
		TNT1 A 0 A_GivetoTarget("HDKillCount",1)
		TNT1 A 0 ACS_ExecuteAlways(558,0,0,1,8)
		TROO N 5 A_ChangeFlag("NODROPOFF", 0)
		TROO N 0 A_SpawnItemEx ("MegaBloodSplatter", 0,0,34, 0,0,0, 0,160)
		TROO O 5 A_XScream
		TROO O 0 A_SpawnItemEx ("MegaBloodSplatter", 0,0,34, 0,0,0, 0,160)
		TROO P 5 A_NoBlocking
		TROO P 0 A_SpawnItemEx ("MegaBloodSplatter", 0,0,34, 0,0,0, 0,160)
		TROO QRST 5
		TROO U -1
		Stop
	}
}


// ------------------------------------------------------------
//   Healer Imp
// ------------------------------------------------------------

actor ShieldImpBall : DrunkImpBall
{
	scale 1.2
	height 24
	radius 20
	speed 10
	damage 2
	-noblockmap
	bloodcolor "ed cd 00"
	+shootable
	+nodamage
	+mthruspecies
	painchance 256
	speed 8
	states
	{
	pain:
	death:
		TNT1 A 0 A_SpawnItemEx ("tempshield", 0,0,0, velx,vely,velz, 0,40)
		BAL1 A 1 bright A_Scream
		BAL1 A 1 A_NoBlocking
		BAL1 BC 2 bright
		BAL1 CDEEE 4 bright A_FadeOut (0.2)
		stop
	}
}
actor HealerImp : DrunkImp 23002
{
	scale 0.8
	speed 6
	height 48
	radius 14
	health 70
	-missilemore
	+shortmissilerange
	translation "64:77=50:76"
	+shadow
	seesound ""
	activesound ""
	meleedamage 3
	obituary "%o could feel the schadenfreude."
	hitobituary "%o wanted a second opinion, so the imps said %g was ugly too."
	states
	{
	See:
		TROO AABB 2 A_VileChase
		TNT1 A 0 A_Jump (210, 2)
		TNT1 A 0 A_AlertMonsters
		TROO A 0 HealThing (random(4,16))
		TROO CCDD 2 A_VileChase
		loop
	Missile:
		TROO E 0 A_Jump (128, "Missile2")
		TROO E 4 A_FaceTarget
		TROO F 4
		TROO G 8 A_CustomMissile ("DrunkImpBall", (random(24,30)), 0, (random(-6,6)))
		TROO F 5
		Goto See
	Missile2:
		TROO E 2 A_FaceTarget
		TROO E 0 A_PlaySound ("imp/sight")
		TROO EEEEE 2 A_SpawnItemEx ("ReverseImpBallTail", 3, 19, random(24,30), 1, 0, 0, 0, 160)
		TROO EF 4
		TROO G 0 A_FaceTarget
		TROO G 0 A_CustomMissile ("ShieldImpBall", (random(24,30)), 8, 0)
		TROO GGFE 5
		Goto See
	Pain:
		TROO H 3
		TROO H 3 A_Pain
		Goto See
	Heal:
		TROO AHAHAHAHAHA 4
		goto See
	Raise:
		TROO ML 8
		TROO KJI 6
		goto Pain
	}
}


// ------------------------------------------------------------
//  Mage Imp
// ------------------------------------------------------------

actor MageImp : DrunkImp 23003
{
	translation none
	-missilemore
	speed 6
	scale 1.1
	obituary "%o experienced the magic."
	hitobituary "%o proved to the imps what %g was made of. And %g was made of delicious shredded meat."
	states
	{
	missile:
		TNT1 A 0 A_JumpIfTargetInLOS(2)
		TNT1 A 0 A_Jump(256,"missile1")
		TROO E 0 A_Jump (16, "missile1")
		TROO E 0 A_JumpIfCloser (640, 1)
		goto Missile3
		TROO E 0 A_JumpIfCloser (256, 1)
		goto Missile2
	missile1:
		TROO E 0 A_Jump (32, "missile2")
		TROO E 6 A_FaceTarget
		TROO F 6
		TROO G 8 A_CustomMissile ("MageImpBall", (random(30,34)), 0, (random(-6,6)))
		goto see
	missile2:
		TROO E 0 A_Jump (96, "Missile1")
		TROO E 0 A_Jump (16, "Missile3")
		TROO E 2 A_FaceTarget
		TROO E 2 A_PlaySound ("imp/sight")
		TROO EEEEEEE 2 A_SpawnItemEx ("ReverseImpBallTail", random(3,5), random(23,25), random(31,33), 1, 0, 0, 0, 160)
		TROO F 6
		TROO G 0 A_FaceTarget
		TROO GGGGGGGG 0 A_CustomMissile ("MageImpBall2B", (random(31,33)), 6, (random(-18,18)), 2, random(-2,2))
		TROO GGFE 5
		Goto See
	missile3:
		TROO E 0 A_Jump (16, "missile1")
		TROO E 0 A_Jump (32, "missile2")
		TROO E 8 A_FaceTarget
		TROO H 4 A_NoGravity
		//TROO H 0 A_ChangeFlag ("noblockmap", 1)
		TROO H 16 bright ThrustThingZ (0, 8, 0, 0)
		TROO H 8 bright A_Stop
		TROO H 0 A_CustomMissile ("MageImpBall2", 32, 0, 162, 2, 60)
		TROO H 2 bright A_CustomMissile ("MageImpBall2", 32, 0, -162, 2, 60)
		TROO H 0 A_CustomMissile ("MageImpBall2", 32, 0, 156, 2, 40)
		TROO H 2 bright A_CustomMissile ("MageImpBall2", 32, 0, -156, 2, 40)
		TROO H 0 A_CustomMissile ("MageImpBall2", 32, 0, 150, 2, 20)
		TROO H 2 bright A_CustomMissile ("MageImpBall2", 32, 0, -150, 2, 20)
		TROO H 0 A_CustomMissile ("MageImpBall2", 32, 0, 144, 2, 0)
		TROO H 2 bright A_CustomMissile ("MageImpBall2", 32, 0, -144, 2, 0)
		TROO H 0 A_CustomMissile ("MageImpBall2", 32, 0, 138, 2, -10)
		TROO H 2 bright A_CustomMissile ("MageImpBall2", 32, 0, -138, 2, -10)
		TROO H 0 A_CustomMissile ("MageImpBall2", 32, 0, 132, 2, -14)
		TROO H 8 bright A_CustomMissile ("MageImpBall2", 32, 0, -132, 2, -14)
		TROO H 8 A_LowGravity
		TROO H 0 A_Gravity
		//TROO H 4 A_ChangeFlag ("noblockmap", 0)
		goto missile1
	pain:
		TROO H 0 A_Gravity
		TROO H 3 A_ChangeFlag("NODROPOFF", 1)
		TROO H 3 A_Pain
		TROO A 2 A_FaceTarget
		TROO BCD 2 A_FastChase
		Goto Missile
	}
}

actor MageImpBall2 : DoomImpBall
{
	damage 2
	speed 4
	height 4
	radius 4
	scale 0.6
	+seekermissile
	+forcexybillboard
	Decal "DoomImpScorch"
	DamageType "Thermal"
	states
	{
	spawn:
		BAL1 ABAB 2 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 A 1 BRIGHT A_SeekerMissile (8, 8)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 B 1 BRIGHT A_SeekerMissile (8, 8)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 A 1 BRIGHT A_SeekerMissile (8, 2)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 B 1 BRIGHT A_SeekerMissile (12, 12)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 A 1 BRIGHT A_SeekerMissile (12, 12)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 B 1 BRIGHT A_SeekerMissile (12, 12)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 A 1 BRIGHT A_SeekerMissile (12, 24)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 B 1 BRIGHT A_SeekerMissile (24, 24)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 A 1 BRIGHT A_SeekerMissile (24, 24)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 B 1 BRIGHT A_SeekerMissile (24, 24)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 A 1 BRIGHT A_SeekerMissile (24, 48)
		BAL1 A 1 BRIGHT A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 2, 0, 0, 0, 160, 0)
		BAL1 A 0 A_SeekerMissile (4, 8)
		BAL1 A 1 bright A_SpawnItemEx ("MageImpBall2A", -1, 0, 0, (velx*4), (vely*4), (velz*4), 0, 57, 0)
		stop
	}
}
actor MageImpBall2A : MageImpBall2
{
	decal "DoomImpScorch"
	seesound none
	speed 0
	states
	{
	spawn:
		BAL1 A 0
		BAL1 ABAB 2 bright A_SpawnItemEx ("MageImpBall2Tail", -1, 0, 0, 8, 0, 0, 0, 160, 0)
		BAL1 A 0 ThrustThingZ (0, random(1,3), 1, 0)
	see:
		BAL1 A 0 A_Jump (82, 2)
		BAL1 A 0 A_BishopMissileWeave
		BAL1 AB 2 bright A_SpawnItemEx ("MageImpBall2Tail2", -1, 0, 0, 8, 0, 0, 0, 160, 0)
		BAL1 A 0 A_JumpIf (z-floorz<24, "Tread")
		loop
	tread:
		BAL1 A 0 ThrustThingZ (0, random(2,4), 0, 0)
		goto See
	}
}
actor MageImpBall2B : MageImpBall2A
{
	scale 0.8
	damage 3
	seesound "imp/attack"
	speed 14
	states
	{
	spawn:
		BAL1 A 0 A_Jump (82, 2)
		BAL1 A 0 A_SeekerMissile (4, 8)
		BAL1 A 0 A_BishopMissileWeave
		BAL1 AB 2 bright A_SpawnItemEx ("MageImpBall2Tail2", -6, 0, 0, 8, 0, 0, 0, 160, 0)
		BAL1 A 0 A_JumpIf (z-floorz<24, "Tread")
		loop
	}
}
actor MageImpBall2Tail
{
	+nointeraction
	+forcexybillboard
	scale 0.6
	renderstyle add
	alpha 0.6
	states
	{
	spawn:
		BAL1 A 0
		BAL1 A 6 bright A_FadeOut (0.1)
		loop
	}
}
actor MageImpBall2Tail2 : MageImpBall2Tail
{
	states
	{
	spawn:
		BAL1 A 0
		BAL1 A 4 bright A_FadeOut (0.2)
		loop
	}
}
actor MageImpBall : DoomImpBall
{
	decal "Scorch"
	DamageType "Thermal"
	+seekermissile
	+forcexybillboard
	speed 6
	radius 5
	height 6
	scale 1.2
	damage 6
	states
	{
	spawn:
		BAL1 A 0
		BAL1 A 0 A_SeekerMissile (6, 32)
		BAL1 AB 2 bright A_SpawnItemEx ("MageImpBallTail", 0,0,0, 0,0,0, 0,160,0)
		loop
	}
}
actor MageImpBallTail : MageImpBall2Tail
{
	scale 1.2
}


// ------------------------------------------------------------
//   Imp Spawner
// ------------------------------------------------------------

actor ImpSpawner replaces DoomImp
{
	+ismonster
	+nointeraction
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_Jump (256,1,1,1,1,1,2,2,2,3,3)
		TNT1 A 0 A_SpawnItemEx("DrunkImp",0,0,0, 0,0,0, 0,288,0)
		stop
		TNT1 A 0 A_SpawnItemEx("HealerImp",0,0,0, 0,0,0, 0,288,0)
		stop
		TNT1 A 0 A_SpawnItemEx("MageImp",0,0,0, 0,0,0, 0,288,0)
		stop
	}
}
