ACTOR Illusionist 30334
{
Monster
Health 1000
GibHealth 400
Height 56
Radius 20
Mass 500
Speed 7
BloodColor "Black"
Painchance "Mine", 256
Painchance "Explosion", 256
Painchance 8
MaxTargetRange 896
+FLOORCLIP
+NOFEAR
+NOTARGET
+NOINFIGHTING
+QUICKTORETALIATE
+THRUSPECIES
+DONTHARMCLASS
Species "Viles"
Species "Illusionist"
DamageFactor "Fire", 0.0
Damagefactor "Acid", 0.5
Damagefactor "Poison", 0.1
Damagefactor "PoisonCloud", 0.1
DamageFactor "Legendary", 0.5
DamageFactor "Legendary1", 0.5
//No Infighting
DamageFactor "Illusionist", 0.0
DamageFactor "VileFires", 0.0
Damagefactor "HellionFire", 0.0
Damagefactor "AdvancedImp", 0.0
Damagefactor "Shadow", 0.0
Damagefactor "Nightshade", 0.0
DamageFactor "PoP15K", 0.0
RadiusDamageFactor 0.5
DropItem "NemesisHealthBonusMax", 256, 32
DropItem "NemesisArmorBonus32", 256
DropItem "UltraSphere", 120
DropItem "ElusiveSphere", 150
DropItem "RingOfRegenerationLow", 80
DropItem "HadesCrystal", 32, 5
SeeSound "Illusionist/See"
ActiveSound "Illusionist/Active"
PainSound "Illusionist/Pain"
DeathSound "Illusionist/death"
MeleeSound "vile/stop"
Obituary "%o was mindraped by an Illusionist."
Tag "\c[s9]Illusionist\c-"
States
	{
	Spawn:
		ILLU A 10 A_Look
		TNT1 A 0 A_JumpIfHealthLower(1000,"Idle")
    	Loop
	See:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag(NOPAIN,0)
		TNT1 A 0 A_UnHideThing
		TNT1 A 0 A_UnSetInvulnerable
	Seeloop:
		TNT1 A 0 HEALTHING(1)
		ILLU A 0 A_SpawnItemEx("HumanishStep2",0,0,0,0,0,-20,0,SXF_CLIENTSIDE,0)
		ILLU AAAABBBBCCCC 1 A_VileChase
		TNT1 A 0 HEALTHING(1)
		TNT1 A 0 A_SpawnItemEx("HumanishStep2",0,0,0,0,0,-20,0,SXF_CLIENTSIDE,0)
		ILLU DDDDEEEEFFFF 1 A_VileChase
		TNT1 A 0 A_Jump(82,"Rush")
		Loop
	Idle:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag(NOPAIN,0)
		TNT1 A 0 A_UnHideThing
		TNT1 A 0 A_UnSetInvulnerable
	Idleloop:
		TNT1 A 0 HEALTHING(3)
		TNT1 A 0 A_SpawnItemEx("HumanishStep2",0,0,0,0,0,-20,0,SXF_CLIENTSIDE,0)
		ILLU AAAA 1 A_Wander
		TNT1 A 0 A_Look
		ILLU BBBB 1 A_Wander
		TNT1 A 0 A_Look
		ILLU CCCC 1 A_Wander
		TNT1 A 0 A_Look
		TNT1 A 0 HEALTHING(3)
		TNT1 A 0 A_SpawnItemEx("HumanishStep2",0,0,0,0,0,-20,0,SXF_CLIENTSIDE,0)
		ILLU DDDD 1 A_Wander
		TNT1 A 0 A_Look
		ILLU EEEE 1 A_Wander
		TNT1 A 0 A_Look
		ILLU FFFF 1 A_Wander
		TNT1 A 0 A_Look
		Loop
	Rush:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag(NOPAIN,0)
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		TNT1 A 0 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU A 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU B 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU B 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU C 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU C 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU D 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU D 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU E 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU E 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU F 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU F 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU A 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU A 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU B 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU B 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU C 1 A_VileChase
		TNT1 A 0 HEALTHING(1)
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU C 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU D 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU D 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU E 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU E 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU F 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU A 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU B 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU B 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU C 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU C 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU D 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU D 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU E 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU E 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU F 1 A_VileChase
		TNT1 A 0 A_SpawnItem("IllusionistFX",0,0)
		ILLU F 1 A_VileChase
		TNT1 A 0 A_Jump(182,"See")
		TNT1 A 0 HEALTHING(1)
		Loop
	Missile:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag(NOPAIN,0)
		TNT1 A 0 A_Jump(128,"Banish","Tracers")
		TNT1 A 0 A_Jump(30,"SummonVile","VileGhosts")
	VileAttack:
		TNT1 A 0 A_ChangeFlag(QUICKTORETALIATE,0)
		TNT1 A 0 A_ChangeFlag(NOTARGETSWITCH,1)
		TNT1 A 0 A_ChangeFlag(NOPAIN,1)
		ILLU G 1 A_PlaySound("exile/voidstart")
		ILLU GGGG 1 A_FaceTarget(45)
		TNT1 A 0 A_GiveToTarget("AlreadyTargeted")
		TNT1 A 0 A_SpawnItemEx("DShadowTargeter",22,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION)
		ILLU G 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("DShadowTargeter",22,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION)
		ILLU G 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("DShadowTargeter",22,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION)
		ILLU G 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("DShadowTargeter",22,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION)
		ILLU G 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("DShadowTargeter",22,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION)
		ILLU G 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("DShadowTargeter",22,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION)
	VileChargeLoop:
		TNT1 A 0 A_JumpIfInventory("Tic",105,"VileChargeEnd")
		ILLU H 1 Bright A_FaceTarget
		TNT1 A 0 HEALTHING(2)
		TNT1 A 0 A_VileTarget("DShadowHadesAttack")
		TNT1 A 0 A_GiveInventory("Tic",1)
		Loop
	VileChargeEnd:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag(QUICKTORETALIATE,1)
		TNT1 A 0 A_ChangeFlag(NOTARGETSWITCH,0)
		TNT1 A 0 A_ChangeFlag(NOPAIN,0)
		TNT1 A 0 A_TakeFromTarget("AlreadyTargeted",1)
		TNT1 A 0 A_TakeInventory("Tic",999)
		TNT1 A 0 A_JumpIfTargetInLos("VileExplode",360)
		ILLU IJKLMN 4 BRight
		GoTo See
	VileExplode:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag(NOPAIN,0)
		TNT1 A 0 A_PlaySound("exile/voidend")
		ILLU O 3 BRight A_VileTarget("IllusoHadesExplode")
		ILLU P 4 BRight A_FaceTarget
		GoTo See
	Tracers:
		TNT1 A 0
		ILLU GGG 2 A_FaceTarget(45)
		ILLU HHH 1 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("HadesTracer",68,20,0,CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("HadesTracer",68,-20,0,CMF_TRACKOWNER)
		ILLU G 6
		GoTo See
	VileGhosts:
		TNT1 A 0
		ILL2 GG 1 A_FaceTarget
		TNT1 A 0 A_CustomMissile("PhantasmSpawner",20,0,90,CMF_AIMDIRECTION|CMF_TRACKOWNER|CMF_CHECKTARGETDEAD)
		TNT1 A 0 A_CustomMissile("PhantasmSpawner",20,0,-90,CMF_AIMDIRECTION|CMF_TRACKOWNER|CMF_CHECKTARGETDEAD)
		ILL2 GGGHII 1 Bright A_FaceTarget
		GoTo See
	SummonVile:
		TNT1 A 0 
		TNT1 A 0 A_JumpIfInventory("IllusionistSpawnAmmount",10,"Banish")
		TNT1 A 0 A_GiveInventory("IllusionistSpawnAmmount",1)
		TNT1 A 0 A_Jump(50,"DarkHellion","Diabolist")
		TNT1 A 0 A_Jump(15,"Velocirator")
	Exile:
		ILLU GGG 2 A_FaceTarget(45)
		ILLU HHHII 2 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("ExileCaster",20,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER|CMF_CHECKTARGETDEAD)
		ILLU HIHGG 2 Bright
		GoTo See
	Diabolist:
		ILLU GGG 2 A_FaceTarget(45)
		ILLU HHHII 2 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("DiabloCaster",20,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER|CMF_CHECKTARGETDEAD)
		ILLU HIHGG 2 Bright
		GoTo See
	DarkHellion:
		ILLU GGG 2 A_FaceTarget(45)
		ILLU HHHII 2 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("DHellnaCaster",20,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER|CMF_CHECKTARGETDEAD)
		ILLU HIHGG 2 Bright
		GoTo See
	Velocirator:
		ILL2 GGGG 2 A_FaceTarget(45)
		ILL2 HHHII 2 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("VeloCaster",20,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER|CMF_CHECKTARGETDEAD)
		ILL2 HIHGG 2 Bright
		GoTo See
	Heal:
		TNT1 A 0
		ILLU GH 5 Bright
		TNT1 A 0 HEALTHING(50)
		TNT1 A 0 A_PlaySound("brain/spit")
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,20,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,40,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,60,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,80,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,100,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,120,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,140,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,160,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,180,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,200,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,220,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,240,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,260,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,280,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,300,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,320,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,340,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("IllusionistResRadius",10,0,360,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		TNT1 A 0 A_SpawnItemEx("IlluGhostFire",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		ILLU "[[[[^^^^]]]]" 4 Bright A_SpawnItemEx("IlluGhostFire",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		ILLU "]" 0 Bright HealThing(100)
		Goto See
	Pain.Mine:
	Pain.Explosion:
		TNT1 A 0
		TNT1 A 0 A_TakeInventory("IllusionistSpawnAmmount",1)
	Banish:
		TNT1 A 0
		TNT1 A 0 A_UnSetShootable
		TNT1 A 0 A_HideThing
		TNT1 AAAA 0 A_CustomMissile("Kaboom10",45,0,random(0,360),2,random(0,360))
		ILLU HHH 1 Bright A_CustomMissile("Kaboom12",45,0,random(0,360),2,random(0,360))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_Wander
		TNT1 AAAA 0 A_CustomMissile("Kaboom10",45,0,random(0,360),2,random(0,360))
		ILLU HHH 1 Bright A_CustomMissile("Kaboom12",45,0,random(0,360),2,random(0,360))
		TNT1 A 0 A_UnHideThing
		TNT1 A 0 A_SetShootable
		ILLU G 5
		Goto See
	Pain:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag(NOPAIN,1)
		TNT1 A 0 A_TakeInventory("IllusionistSpawnAmmount",1)
		ILLU Q 10 A_Pain
		TNT1 A 0 A_Jump(128,"See")
		TNT1 A 0 A_JumpIfTargetInLos("Missile",360,JLOSF_DEADNOJUMP|JLOSF_TARGETLOS)
		TNT1 A 0 A_Jump(128,"Banish")
		Goto See
	Death:
		TNT1 A 0 A_Jump(128,"XDeath")
		ILLU Q 6 A_RemoveChildren
		TNT1 A 0 A_TakeInventory("IllusionistSpawnAmmount",10)
		TNT1 A 0 A_TakeFromTarget("AlreadyTargeted",1)
		ILLU R 6 A_Scream
		ILLU S 6 A_Fall
		ILLU TUVW 6
		TNT1 A 0 A_SpawnItem("BodyCrash",0,0,0,0)
		ILLU XY 4
		TNT1 A 0 A_KillChildren
		TNT1 A 0 A_Jump(256,1,2,3,4,5)
		ILLU ZZZZZ 100
		TNT1 A 1 A_SpawnItemEx("IllusoCorpseRandomizer2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		Stop
	XDeath:
		TNT1 A 0
		ILLX A 6 A_RemoveChildren
		TNT1 A 0 A_TakeInventory("IllusionistSpawnAmmount",10)
		TNT1 A 0 A_TakeFromTarget("AlreadyTargeted",1)
		ILLX B 6 A_Scream
		TNT1 A 0 A_SpawnItemEx("GibbedGenerator",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("BlackGibbedGenerator",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		ILLX C 6 A_Fall
		ILLX DEFG 6
		TNT1 A 0 A_SpawnItem("BodyCrash",0,0,0,0)
		ILLX H 4
		TNT1 A 0 A_KillChildren
		ILLX I -1
		Wait
	}
}

ACTOR IllusionistFX
{   
Height 56
Radius 20
RENDERSTYLE Translucent
ALPHA 0.5
+NOINTERACTION
+CLIENTSIDEONLY
+NONETID
States
	{
	Spawn:
		TNT1 A 1
		ILLU ABCDEF 2 A_FadeOut(0.1,1)
		Goto Spawn+1
   }
}

Actor IllusoHadesExplode : DShadowHadesExplode
{
Obituary "%o was consumed into the Hades."
States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_PlaySound("SoulRazeLaugh2",0,1.0,0)
		TNT1 A 0 A_PlaySound("SoulRazeLaugh3",0,1.0,0)
		TNT1 A 0 A_Explode(140,500,0,0,20)
		TNT1 AAAAA 0 A_SpawnItemEx("Kaboom12Spawner",0,0,-9999,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 AAAAAAA 0 A_SpawnItemEx("HadesFireSpawner",0,0,-9999,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 1 A_SpawniTEMeX("SoulRazeSprite",0,0,-9999,0,0,0,0,SXF_NOCHECKPOSITION)
		Stop
	}
}

Actor IllusoHadesExplode2 : DShadowHadesExplode
{
Obituary "%o was consumed into the Hades."
States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_PlaySound("SoulRazeLaugh2",0,1.0,0)
		TNT1 A 0 A_PlaySound("SoulRazeLaugh3",0,1.0,0)
		TNT1 A 0 A_Explode(70,500,0,0,10)
		TNT1 AAAAA 0 A_SpawnItemEx("Kaboom12Spawner",0,0,-9999,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 AAAAAAA 0 A_SpawnItemEx("HadesFireSpawner",0,0,-9999,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 1 A_SpawniTEMeX("SoulRazeSprite",0,0,-9999,0,0,0,0,SXF_NOCHECKPOSITION)
		Stop
	}
}

Actor IlluGhostFire : ExileFireFX
{
Scale 1
+NOGRAVITY
+SEEKERMISSILE
+NOTARGET
+NODAMAGETHRUST
+THRUACTORS
DamageType "VileFires"
Obituary "%o was fooled by a Phantasm."
States
	{
	Spawn:
		TNT1 A 2 Bright A_StartFire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_FireCrackle
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire 
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 0 Bright A_FireCrackle
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 0 Bright A_SpawnItemEx("IlluGhostFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 Bright A_Explode(Random(1,2),38,0)
		TNT1 A 2 Bright A_Fire
		TNT1 A 2 Bright
		Stop
	}
}

ACTOR IllusoFire
{
Renderstyle Add
Scale 0.35
+MISSILE
+DROPOFF
+NOGRAVITY
+NOBLOCKMAP
+DONTSPLASH
+THRUACTORS
+NONSHOOTABLE
+FORCEXYBILLBOARD
+CLIENTSIDEONLY
+NONETID
States
	{
	Spawn:
		TNT1 A 0
		FIW1 ABCDEFGHIJKL 2 A_FadeOut(0.1,1)
		Stop
	}
}

ACTOR IlluGhostFireSpawner : RedParticleSpawner
{
+NOINTERACTION
+NONETID
States
	{
	Spawn:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_SpawnItemEx("Kaboom22",random(16,-16),random(16,-16),random(6,12),0,0,random(2,4),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		TNT1 A 1 Bright A_SpawnItemEx("IllusoFire",random(16,-16),random(16,-16),random(6,12),0,0,random(4,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		Stop
	}
}

Actor PhantasmSpawner : ExileCaster
{
+SERVERSIDEONLY
States
	{
	Spawn:
		TNT1 A 5
	Death:
		TNT1 A 0
		TNT1 A 2 A_SpawnItemEx("IlluGhostFire",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 1 A_SpawnItemEx("Phantasm",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER)
		Stop
	}
}

ACTOR Phantasm : Illusionist
{
Health 200
Speed 15
Bloodcolor "White"
+ThruSpecies
DropItem ""
DropItem "LifeEssence", 100, 8
DropItem "HEMArmorBonusMax8", 100
DeathSound "avile/death"
Obituary "%o was fooled by a Phantasm."
States
	{
	Missile:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_FaceTarget
		ILL2 G 10 Bright A_PlaySound("exile/voidstart")
		ILL2 H 8 Bright A_VileTarget("IlluGhostFire")
		ILL2 IIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNN 1 Bright A_FaceTarget
		TNT1 A 0 Bright A_PlaySound("exile/voidend")
		ILL2 O 8 Bright A_VileAttack
		ILL2 P 20 Bright
		Goto See	
	Heal:
		TNT1 A 0
		ILL2 "[^]" 10 Bright
		Goto See
	Pain:
		TNT1 A 0
		ILL2 Q 10 A_Pain
		Goto See
	XDeath:
	Death:
		TNT1 A 0
		ILLU Q 5 A_Noblocking
		TNT1 AAAA 0 A_CustomMissile("SmokeFX2",45,0,random(0,360),2,random(0,360))
		TNT1 AAAA 0 A_CustomMissile("Kaboom21",45,0,random(0,360),2,random(0,360))
		TNT1 AA 0 A_CustomMissile("Kaboom22",45,0,random(0,360),2,random(0,360))
		ILLU Q 1 A_FadeOut(0.1,1)
		Wait
	}
}

Actor HadesTrailRailgunPuff : BulletPuff
{
+THRUSPECIES
+MTHRUSPECIES
+PUFFGETSOWNER
Damagetype "Illusionist"
States
	{
	Spawn:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_SpawnItemEx("RedParticleSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 AAA 0 Bright A_CustomMissile("Kaboom10",0,0,random(0,360),CMF_AIMDIRECTION,random(0,360))
		TNT1 AAA 0 Bright A_CustomMissile("SmokeFX4",0,0,random(0,360),CMF_AIMDIRECTION,random(0,360))
		TNT1 A 1 Bright
		Stop
	}
}

Actor HadesTrail : CacodemonBall
{
Projectile
Speed 45
Scale 1.5
Alpha 1.0
Bouncetype Doom
BounceCount 15
Bouncefactor 1.1
WallBouncefactor 1.1
Reactiontime 32
Damage (0)
+DOOMBOUNCE
+LOOKALLAROUND
+QUICKTORETALIATE
+NOTARGET
+DONTREFLECT
+THRUACTORS
+THRUSPECIES
+MTHRUSPECIES
+FLOORHUGGER
+NOEXPLODEFLOOR
+FORCEXYBILLBOARD
+DONTHARMSPECIES
Damagetype "Illusionist"
SeeSound "Shadow/attack"
DeathSound "imp/shotx"
Obituary "%o was mindraped by an Illusionist."
States
	{
	Spawn:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_RearrangePointers(AAPTR_DEFAULT, AAPTR_TARGET, AAPTR_DEFAULT)
	SpawnLoop:
		NBAL A 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL A 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL A 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL A 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL B 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL B 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL B 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL B 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		TNT1 A 0 Bright A_CountDown
		Loop
	Attack:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_Stop
		TNT1 A 0 Bright A_FaceTarget
		TNT1 A 0 Bright A_RearrangePointers(AAPTR_MASTER, AAPTR_DEFAULT, AAPTR_DEFAULT)
		NBAL H 1 Bright A_CustomRailgun(3*random(1,4),0,None,"Red",RGF_SILENT|RGF_FULLBRIGHT|RGF_NOPIERCING,0,2,"HadesTrailRailgunPuff")
		Goto Death
	Death:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_SpawnItemEx("RedParticleSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 AAA 0 Bright A_CustomMissile("Kaboom10",0,0,random(0,360),CMF_AIMDIRECTION,random(0,360))
		TNT1 AAA 0 Bright A_CustomMissile("SmokeFX4",0,0,random(0,360),CMF_AIMDIRECTION,random(0,360))
		NBAL HIJKL 3 Bright A_FadeOut(0.1,0)
		NBAL M 3 Bright A_FadeOut(0.2,1)
		Wait
	}
}

Actor HadesTrail2 : HadesTrail
{
+HITTRACER
-FLOORHUGGER
+SEEKERMISSILE
States
	{
	Spawn:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_RearrangePointers(AAPTR_DEFAULT, AAPTR_TARGET, AAPTR_DEFAULT)
	SpawnLoop:
		NBAL A 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_Seekermissile(5,7,SMF_LOOK)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL A 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_Seekermissile(5,7,SMF_LOOK)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL A 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_Seekermissile(5,7,SMF_LOOK)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL A 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_Seekermissile(5,7,SMF_LOOK)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL B 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_Seekermissile(5,7,SMF_LOOK)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL B 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_Seekermissile(5,7,SMF_LOOK)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL B 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_Seekermissile(5,7,SMF_LOOK)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		NBAL B 1 Bright A_SpawnItemEx("ShadePuff4",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 0 Bright A_Seekermissile(5,7,SMF_LOOK)
		TNT1 A 0 Bright A_LookEx(LOF_NOSOUNDCHECK|LOF_NOSEESOUND,0,100,0,360,"Attack")
		TNT1 A 0 Bright A_CountDown
		Loop	
	}
}

ACTOR ShadePuff4
{   
Radius 3
Height 3
RENDERSTYLE ADD
Alpha 1.0
Scale 1.5
+FORCEXYBILLBOARD
+NOINTERACTION
+CLIENTSIDEONLY
+NONETID
States
	{
	Spawn:
		TNT1 A 1 Bright
		TNT1 A 0 Bright A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
		NBAL CDEFG 3 Bright A_FadeOut(0.1,1)
		Stop 
	Toaster:
		TNT1 A 1 Bright
		Stop
	}
}

Actor IllusoCorpseRandomizer
{
Height 56
Radius 20
Health 0
Mass 100
Speed 8
+ISMONSTER
-COUNTKILL
+FLOORCLIP
-NOGRAVITY
+NOTARGET
+NODROPOFF
+DONTSPLASH
+NOTELEPORT
+LOOKALLAROUND
-SOLID
+NOBLOCKMAP
+NONSHOOTABLE
+NODAMAGE
+NOPAIN
+CORPSE
SeeSound ""
DeathSound ""
ActiveSound ""
PainSound ""
Tag "\c[s9]Illusionist\c-"
States
	{
	Spawn:
		TNT1 A 1
		TNT1 AAAAAAAAAA 1 A_Wander
		Goto Idle
	Idle:
		ILLU Z 10 A_LookEx(LOF_NOSEESOUND,0,500,250,360,"WakeUp")
		TNT1 A 0 A_JumpIfInventory("Tic",6300,"WakeUp")
		TNT1 A 0 A_GiveInventory("Tic",1)
		Loop
	WakeUp:
		ILLU ZYXWVUTSRQ 3
		ILLU Q 5 A_FaceTarget
		TNT1 A 1 A_SpawnItemEx("Illusionist",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		Stop
	}
}

Actor IllusoCorpseRandomizer2 : IllusoCorpseRandomizer
{
States
	{
	Spawn:
		TNT1 A 0
		Goto Idle
	WakeUp:
		ILLU ZYXWVUTSRQ 3
		ILLU Q 5 A_FaceTarget
		TNT1 A 1 A_SpawnItemEx("Illusionist",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		Stop
	}
}

Actor HadesTracer : CacodemonBall
{
Projectile
Damage (8*random(4,8))
Speed 24
FastSpeed 30
Alpha 0.8
Reactiontime 32
-RANDOMIZE
+SEEKERMISSILE
+THRUSPECIES
+DONTHARMSPECIES
Damagetype "Illusionist"
SeeSound "Monster/hadtel"
DeathSound "Monster/hadsit"
States
	{
	Spawn:
		HEFX AAAA 1 Bright A_SpawnItemEx("HadesBallTrailSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,0)
		TNT1 A 0 Bright A_SeekerMissile(20,30)
		HEFX BBBB 1 Bright A_SpawnItemEx("HadesBallTrailSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,0)
		TNT1 A 0 Bright A_SeekerMissile(20,30)
		TNT1 A 0 Bright A_CountDown
		Loop
	Death:
		HEFX CDEEFGH 3 Bright
		Stop
	XDeath:
		TNT1 AAA 0 Bright A_SpawnItemEx("RedParticleSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 AAAAA 0 Bright A_CustomMissile("Kaboom10",0,0,random(0,360),CMF_AIMDIRECTION,random(0,360))
		TNT1 AAAAA 0 Bright A_CustomMissile("SmokeFX4",0,0,random(0,360),CMF_AIMDIRECTION,random(0,360))
		HEFX CDEEFGH 3 Bright
		Stop
	}
}

Actor DiabloCaster : ExileCaster
{
+SERVERSIDEONLY
States
	{
	Spawn:
		TNT1 A 5
	Death:
		TNT1 A 0
		TNT1 A 2 A_SpawnItemEx("IFire",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 1 A_SpawnItemEx("Diabolist",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER)
		Stop
	}
}

Actor DHellnaCaster : ExileCaster
{
+SERVERSIDEONLY
States
	{
	Spawn:
		TNT1 A 5
	Death:
		TNT1 A 0
		TNT1 A 2 A_SpawnItemEx("HellionSmokeAttack",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 1 A_SpawnItemEx("DarkHellion",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER)
		Stop
	}
}

Actor VeloCaster : ExileCaster
{
+SERVERSIDEONLY
States
	{
	Spawn:
		TNT1 A 5
	Death:
		TNT1 A 0
		TNT1 A 2 A_SpawnItemEx("GHellionSmokeSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 1 A_SpawnItemEx("Velocirator",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER)
		Stop
	}
}

ACTOR IllusionistResRadius : VelociratorResRadius { Radius 16 }

Actor FakeMarine
{
Monster
Health 100
Height 56
Radius 16
Speed 6
Renderstyle Fuzzy
PainChance 255
Damage (random(1,10))
-COUNTKILL
+FRIENDLY
+NOFEAR
+DROPOFF
+NOTDMATCH
+FRIENDLY
+SLIDESONWALLS
+FLOORCLIP
+WINDTHRUST
+TELESTOMP
+NOBLOCKMONST
-INVULNERABLE
+NOBLOOD
+QUICKTORETALIATE
+THRUSPECIES
+DONTHURTSPECIES
+DONTHARMSPECIES
+DONTHARMCLASS
DamageFactor 0.001
Species "Player"
Tag "Illusory marine"
var int user_lcounter;
var int user_lifetime;
States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SetUserVar("user_lcounter",0)
		TNT1 A 0 A_SetUserVar("user_lifetime",48+random(0,10))
	Spawnloop:
		PLAY A 5 A_Look
		Loop
	Idle:
		PLAY ABCD 4 A_Wander
		TNT1 A 0 A_Look
		TNT1 A 0 A_SetUserVar("user_lcounter",user_lcounter + 1)
		TNT1 A 0 A_JumpIf(user_lcounter < user_lifetime,"Death")
		Loop
	See:
		PLAY ABCD 4 A_Chase
		TNT1 A 0 A_Jump(64,"Rush")
		TNT1 A 0 A_SetUserVar("user_lcounter",user_lcounter + 1)
		TNT1 A 0 A_JumpIf(user_lcounter > user_lifetime,"Death")
		Loop
	Rush:
		PLAY AABB 2 A_FastChase
		PLAY CCDD 2 A_FastChase
		TNT1 A 0 A_Jump(16,"See")
		Loop
	Melee:
		PLAY E 12 A_FaceTarget
		TNT1 A 0 A_PlaySound("weapons/pistol",CHAN_WEAPON,1.0,0)
		PLAY F 4 A_CustomBulletAttack(3.6,2.3,1,Random(8,10)*random(1,3),"ModdedBulletPuff",0,CBAF_NORANDOM)
		PLAY E 12
		TNT1 A 0 A_SetUserVar("user_lcounter",user_lcounter + 1)
		TNT1 A 0 A_JumpIf(user_lcounter > user_lifetime,"Death")
		Goto See
	Missile:
		PLAY E 12 A_FaceTarget
		TNT1 A 0 A_PlaySound("weapons/pistol",CHAN_WEAPON,1.0,0)
		PLAY F 4 A_CustomBulletAttack(3.6,2.3,1,Random(8,10)*random(1,3),"ModdedBulletPuff",0,CBAF_NORANDOM)
		PLAY E 12
		TNT1 A 0 A_SetUserVar("user_lcounter",user_lcounter + 1)
		TNT1 A 0 A_JumpIf(user_lcounter > user_lifetime,"Death")
		Goto See
	Pain:
		PLAY G 4
		PLAY G 4 A_PlaySound("*pain100",CHAN_VOICE,1.0,0)
		TNT1 A 0 A_SetUserVar("user_lcounter",user_lcounter + (random(0,10) * 0.1))
		Goto See
	Death:
		TNT1 A 0
		TNT1 A 0 A_Noblocking
		PLAY G 4 A_PlaySound("*xdeath",CHAN_VOICE,1.0,0)
		TNT1 AAAAA 0 A_CustomMissile("SmokeFX2",45,0,random(0,360),2,random(0,360))
		TNT1 AAAAA 0 A_CustomMissile("Kaboom21",45,0,random(0,360),2,random(0,360))
		TNT1 AA 0 A_CustomMissile("Kaboom20",45,0,random(0,360),2,random(0,360))
		PLAY G 1 A_FadeOut(0.1,1)
		Wait
	XDeath:
		TNT1 A 0
		TNT1 A 0 A_Noblocking
		PLAY G 4 A_PlaySound("*xdeath",CHAN_VOICE,1.0,0)
		PLAY G 1 A_FadeOut(0.1,1)
		Wait
	}
}

Actor FakeMarine2 : FakeMarine { Speed 7 }
Actor FakeMarine3 : FakeMarine { Speed 8 }
Actor FakeMarine4 : FakeMarine { Speed 9 }

Actor FakeMarineSpawner
{
Projectile
Height 56
Radius 16
+Ripper
+BloodlessImpact
Damage (0)
Speed 20
States
	{
	Spawn:
		TNT1 A 5
	Death:
		TNT1 A 1
		TNT1 A 1 A_SpawnItemEx("ShadowSmokeGen3",0,0,5,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 1 A_SpawnItemEx("FakeMarine",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER)
		Stop
   }
}

Actor FakeMarineSpawner2 : FakeMarineSpawner
{
States
	{
	Death:
		TNT1 A 1
		TNT1 A 1 A_SpawnItemEx("ShadowSmokeGen3",0,0,5,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 1 A_SpawnItemEx("FakeMarine2",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER)
		Stop
	}
}

Actor FakeMarineSpawner3 : FakeMarineSpawner
{
States
	{
	Death:
		TNT1 A 1
		TNT1 A 1 A_SpawnItemEx("ShadowSmokeGen3",0,0,5,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 1 A_SpawnItemEx("FakeMarine3",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER)
		Stop
	}
}

Actor FakeMarineSpawner4 : FakeMarineSpawner
{
States
	{
	Death:
		TNT1 A 1
		TNT1 A 1 A_SpawnItemEx("ShadowSmokeGen3",0,0,5,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
		TNT1 A 1 A_SpawnItemEx("FakeMarine4",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER)
		Stop
	}
}

Actor IllusionistSpawnAmmount : Inventory { Inventory.MaxAmount 10 }