Actor Nightshade
{
MONSTER
health 150
height 56
radius 18
mass 100
speed 5
FloatSpeed 8
BloodColor Black
Painchance "Mine", 0
Painchance "AdvancedImp", 0
Painchance "Shadow", 0
painchance 64
+FLOAT
+NOGRAVITY
+NOICEDEATH
+DONTFALL
+NOTARGET
+MISSILEMORE
+MISSILEEVENMORE
+NOTARGETSWITCH
+THRUSPECIES
+DONTHARMSPECIES
Species "AdvancedImp"
Damagetype "AdvancedImp"
Damagefactor "Acid", 0.3
Damagefactor "Fire", 0.3
Damagefactor "Poison", 0.0
Damagefactor "PoisonCloud", 0.0
//No Infighting
Damagefactor "Nightshade", 0.0
Damagefactor "Shadow", 0.0
Damagefactor "AdvancedImp", 0.0
Damagefactor "HellionFire", 0.0
Damagefactor "Catharsi15k", 0.0
Damagefactor "Catharsi10K", 0.0
DropItem "LifeEssence", 200, 6
DropItem "NemesisArmorBonus6", 200
DropItem "HadesCrystal", 128, 5
Seesound "monster/nshsit"
Activesound "monster/nshact"
Painsound "monster/nshpai"
Deathsound "monster/nshdth"
Obituary "%o couldn't escape the Nightshade."
Tag "\c[t6]Nightshade\c-"
States
	{
	Spawn:
		NSHA A 1 A_Look
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		loop
	See.Invisible:
		TNT1 AAAA 0 A_Chase("","")
		TNT1 A 0 A_GiveInventory("Tic",1)
		TNT1 A 0 A_JumpIfInventory("Tic",105,"FadeIn")
		TNT1 A 1 A_Chase("","")
		Loop
	See:
		TNT1 A 0 A_JumpIfInventory("ShadeInvisible",1,"See.Invisible")
		NSHA A 0 A_SetTranslucent(0.75,0)
		NSHA A 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA A 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA A 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA B 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA B 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA B 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA C 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA C 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA C 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA D 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA D 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA D 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		Goto See+1
	Missile:
		TNT1 A 0 A_JumpIfInventory("ShadeInvisible",1,"FadeInM1")
		TNT1 A 0 A_Jump(90,"Homing")
		TNT1 A 0 A_Jump(80,"GoInvisible")
		TNT1 A 0 A_Jump(50,"HadesBall")
	Missile2:
		TNT1 A 0
		TNT1 A 0 A_SetTranslucent(1.0,0)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 5 Bright A_CustomBulletAttack(5,5,2,random(1,3),"ShadePuff3")
		NSHA B 4 A_SetTranslucent(0.87,0)
		GoTo See
	HadesBall:
		TNT1 A 0 A_JumpIfInventory("ShadeInvisible",1,"FadeInM3")
		TNT1 A 0 A_Jump(90,"Homing")
		TNT1 A 0 A_Jump(80,"GoInvisible")
	HadesBall2:
		TNT1 A 0
		TNT1 A 0 A_SetTranslucent(1.0,0)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 8 Bright A_CustomMissile("HadesBall2",32,0,0,0,0)
		NSHA B 4 A_SetTranslucent(0.87,0)
		Goto See
	Homing:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory("ShadeInvisible",1,"FadeInM2")
		TNT1 A 0 A_Jump(70,"GoInvisible")
		TNT1 A 0 A_Jump(40,"HadesBall")
	Homing2:
		TNT1 A 0
		NSHA E 0 A_SetTranslucent(1.0,0)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA E 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen",0,0,35)
		NSHA F 8 Bright 
		TNT1 A 0 A_CustomMissile("ShadeMissile",39,6,0,0,0)
		TNT1 A 0 A_CustomMissile("ShadeMissile",39,-6,0,0,0)
		NSHA B 4 A_SetTranslucent(0.87,0)
		Goto See
	GoInvisible:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory("ShadeInvisible",1,"See.Invisible")
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen2",0,0,35)
		NSHA E 6 Bright 
		TNT1 A 0 A_SetTranslucent(0.0,0)
		TNT1 A 0 A_UnSetSolid
		TNT1 A 0 A_SetInvulnerable
		TNT1 A 0 A_UnsetShootable
		TNT1 A 0 A_ChangeFlag(NoPain,1)
		TNT1 A 0 A_ScaleVelocity(3.0)
		TNT1 A 0 A_GiveInventory("ShadeInvisible",1)
		GoTo See.Invisible
	FadeIn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen2",0,0,35)
		NSHA E 6 Bright 
		TNT1 A 0 A_SetSolid
		TNT1 A 0 A_ChangeFlag(NoPain,0)
		TNT1 A 0 A_SetShootable
		TNT1 A 0 A_UnSetInvulnerable
		TNT1 A 0 A_ScaleVelocity(1.0)
		TNT1 A 0 A_TakeInventory("ShadeInvisible",1)
		TNT1 A 0 A_TakeInventory("Tic",999)
		GoTo See
	FadeInM1:
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen2",0,0,35)
		NSHA E 6 Bright 
		TNT1 A 0 A_SetSolid
		TNT1 A 0 A_ChangeFlag(NoPain,0)
		TNT1 A 0 A_SetShootable
		TNT1 A 0 A_UnSetInvulnerable
		TNT1 A 0 A_ScaleVelocity(1.0)
		TNT1 A 0 A_TakeInventory("ShadeInvisible",1)
		TNT1 A 0 A_TakeInventory("Tic",999)
		GoTo Missile2
	FadeInM2:
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen2",0,0,35)
		NSHA E 6 Bright 
		TNT1 A 0 A_SetSolid
		TNT1 A 0 A_ChangeFlag(NoPain,0)
		TNT1 A 0 A_SetShootable
		TNT1 A 0 A_UnSetInvulnerable
		TNT1 A 0 A_ScaleVelocity(1.0)
		TNT1 A 0 A_TakeInventory("ShadeInvisible",1)
		TNT1 A 0 A_TakeInventory("Tic",999)
		GoTo Homing2
	FadeInM3:
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen2",0,0,35)
		NSHA E 6 Bright 
		TNT1 A 0 A_SetSolid
		TNT1 A 0 A_ChangeFlag(NoPain,0)
		TNT1 A 0 A_SetShootable
		TNT1 A 0 A_UnSetInvulnerable
		TNT1 A 0 A_ScaleVelocity(1.0)
		TNT1 A 0 A_TakeInventory("ShadeInvisible",1)
		TNT1 A 0 A_TakeInventory("Tic",999)
		GoTo HadesBall2
	Pain:
		TNT1 A 0
		TNT1 A 0 A_SetTranslucent(1.0,0)
		NSHA G 2
		NSHA G 2 A_Pain
		Goto See
	Death:
		TNT1 A 0
		NSHA H 4 A_SetTranslucent(1.0,0)
		TNT1 A 0 A_SpawnItemEx("ShadowSmokeGen2",0,0,35)
		NSHA I 4 A_SetTranslucent(0.9,0)
		TNT1 A 0 A_Scream
		NSHA J 4 A_SetTranslucent(0.8,0)
		TNT1 A 0 A_NoBlocking
		NSHA KLMNOP 4 A_FadeOut(0.1,0)
		NSHA P 2 A_FadeOut(0.1,1)
		Wait
	}
}

Actor ShadeInvisible : Inventory { Inventory.MaxAmount 1 }

ACTOR HadesBall2 : CacodemonBall
{
Speed 15
Alpha 0.80
Damage (4*random(3,8))
+ForceXYBillboard
+ThruSpecies
+THRUGHOST
+DontHurtSpecies
+DontHarmSpecies
Species ""
Species "AdvancedImp"
Damagetype ""
Damagetype "Shadow"
SeeSound "Monster/hadtel"
DeathSound "Monster/hadsit"
States
	{
	Spawn:
		HEFX AAAABBBB 1 Bright A_SpawnItemEx("HadesBallTrailSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,0)
		loop
	Death:
		HEFX CDEEFGH 3 Bright
		Stop
	Crash:
	XDeath:
		TNT1 AAA 0 A_SpawnItemEx("RedParticleSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 AAAAA 0 A_CustomMissile("Kaboom10",0,0,random(0,360),2,random(0,360))
		TNT1 AAAAA 0 A_CustomMissile("SmokeFX4",0,0,random(0,360),2,random(0,360))
		HEFX CDEEFGH 3 Bright
		Stop
	}
}

Actor SHadesTrail1
{
Scale 0.1
RENDERSTYLE Add
+DROPOFF
+NOGRAVITY
+NOBLOCKMAP
+NOTELEPORT
+THRUACTORS
+DONTSPLASH
+FORCEXYBILLBOARD
+CLIENTSIDEONLY
States
	{
	Spawn:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
		Goto Normal
	Normal:
		TNT1 A 0 Bright A_Jump(30,"Spawn2")
		HATR "NO" 3 Bright
		HATR OPPPQQQQQQQ 1 Bright A_FadeOut(0.1,1)
		Stop
	Spawn2:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_PlaySound("HZap",CHAN_AUTO,1.0,0)
		HATR "NO" 3 Bright
		HATR OPPPQQQQQQQ 1 Bright A_FadeOut(0.1,1)
		Stop
	Normal:
		HEFX CDEFGHHHHHH 3 Bright A_FadeOut(0.1,1)
		Stop
	Toaster:
		TNT1 A 0 Bright A_Jump(18,"BackToSpawn")
		TNT1 A 1 Bright
		Stop
	BackToSpawn:
		TNT1 A 1
		GoTo Normal
	}
}

Actor SHadesTrail2 : SHadesTrail1
{
Scale 0.2
States
	{
	Spawn:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
		Goto Normal
	Normal:
		TNT1 A 0 Bright A_Jump(30,"Spawn2")
		HEFX CDEFGHHHHHH 3 Bright A_FadeOut(0.1,1)
		Stop
	Spawn2:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_PlaySound("HZap2",CHAN_AUTO,1.0,0)
		HAT2 RSTUV 3 Bright
		HAT2 VWWWXXXXXXX 1 Bright A_FadeOut(0.1,1)
		Stop
	Toaster:
		TNT1 A 0 Bright A_Jump(18,"BackToSpawn")
		TNT1 A 1 Bright
		Stop
	BackToSpawn:
		TNT1 A 1 Bright
		GoTo Normal
	}
}

Actor HadesBallTrailSpawner : SHadesTrail1
{
Scale 0.7
Alpha 0.7
States
	{
	Spawn:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
		TNT1 A 0 Bright A_Jump(256,1,2,3,4,5,6,7,8,9,10)
		TNT1 AAAAAAAAAA 0 Bright
		Goto Normal
	Normal:
		TNT1 AAAAAAA 0 A_SpawnItemEx("SHadesTrail1",random(-2,2),random(-2,2),random(-2,2),random(-5,5),random(-5,5),random(-5,5),random(0,360),SXF_CLIENTSIDE,0)
		TNT1 AAA 0 A_SpawnItemEx("SHadesTrail2",random(-2,2),random(-2,2),random(-2,2),random(-5,5),random(-5,5),random(-5,5),random(0,360),SXF_CLIENTSIDE,0)
		TNT1 A 3 Bright
		HEFX CDEFGHHHHHH 3 Bright A_FadeOut(0.1,1)
		Stop
	Toaster:
		TNT1 A 0 Bright A_Jump(18,"BackToSpawn")
		TNT1 A 1 Bright
		Stop
	BackToSpawn:
		TNT1 A 1 Bright
		GoTo Normal
	}
}

ACTOR ShadeMissile : CacodemonBall
{
Projectile
Speed 10
Alpha 1.0
Reactiontime 32
Damage 3
+THRUSPECIES
+MTHRUSPECIES
+STRIFEDAMAGE
+SEEKERMISSILE
+HITTRACER
+FORCEXYBILLBOARD
+DONTHARMSPECIES
Damagetype "Shadow"
SeeSound "Shadow/attack"
DeathSound "imp/shotx"
States
	{
	Spawn:
		NBAL AA 1 Bright A_SpawnItemEx("ShadePuff",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,0)
		TNT1 A 0 Bright A_Seekermissile(5,7)
		NBAL AA 1 Bright A_SpawnItemEx("ShadePuff",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,0)
		TNT1 A 0 Bright A_Seekermissile(5,7)
		NBAL BB 1 Bright A_SpawnItemEx("ShadePuff",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,0)
		TNT1 A 0 Bright A_Seekermissile(5,7)
		NBAL BB 1 Bright A_SpawnItemEx("ShadePuff",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,0)
		TNT1 A 0 Bright A_Seekermissile(5,7)
		TNT1 A 0 Bright A_CountDown
		Loop
	Death:
		NBAL HIJKLM 3 Bright A_FadeOut(0.1,1)
		Stop
	XDeath:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("RedParticleSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 AAA 0 A_CustomMissile("Kaboom10",0,0,random(0,360),CMF_AIMDIRECTION,random(0,360))
		TNT1 AAA 0 A_CustomMissile("SmokeFX4",0,0,random(0,360),CMF_AIMDIRECTION,random(0,360))
		NBAL HIJKLM 3 Bright A_FadeOut(0.1,1)
		Stop
	}
}

ACTOR ShadePuff
{
Height 3
Radius 3
Speed 0
Scale 0.8
RENDERSTYLE ADD
Alpha 1.0
+MISSILE
+DROPOFF
+NOGRAVITY
+NOBLOCKMAP
+NOTELEPORT
+DONTSPLASH
+THRUACTORS
+FORCEXYBILLBOARD
+CLIENTSIDEONLY
+NONETID
States
	{
	Spawn:
		TNT1 A 0 Bright
		TNT1 A 0 Bright A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
		TNT1 A 1 Bright
		NBAL CDEFG 3 Bright A_FadeOut(0.1,1)
		Stop 
	Toaster:
		TNT1 A 1 Bright
		Stop
	}
}

Actor ShadePuff3 : ShadePuff
{
-THRUACTORS
-CLIENTSIDEONLY
-NONETID
+ThruSpecies
+DontHurtSpecies
+DontHarmSpecies
Species "AdvancedImp"
Damagetype "Shadow"
States
	{
	Spawn:
	Crash:
	Death:
	XDeath:
		TNT1 A 1 Bright
		TNT1 A 0 Bright A_PlaySound("Shadow/attack",CHAN_AUTO,1.0,0)
		NBAL CDEFG 3 Bright A_FadeOut(0.1,1)
		Stop 
	}
}