Actor Shinenen
{ 
Monster
Health 2000
Height 64
Radius 24
Mass 1000
Speed 4
FloatSpeed 6
Scale 1.05
Bloodcolor "purple"
PainChance 50
MeleeRange 68
MeleeDamage 8
+BOSSDEATH
+Float
+NoGravity
+DontFall
-FLOORCLIP
+FASTMELEE
+MISSILEMORE
+DONTHARMSPECIES
Species "Nobles"
Species "SatanGuard"
Damagefactor "Acid", 2.5
Damagefactor "Fire", 0.0
//No Infighting
DamageFactor "SatanGuard", 0.0
Damagefactor "Heterodox", 0.0
Damagefactor "Damned", 0.0
DropItem "NemesisHealthBonusMax", 200, 25
DropItem "NemesisArmorBonus16", 200
DropItem "BerserkSphere", 40
SeeSound "Shin/sight"
ActiveSound "Shin/act"
MeleeSound "baron/melee"
PainSound "Shin/pain"
DeathSound "Shin/death"
Obituary "%o dragged into eternal nightmare by a Shin'en-en." 
HitObituary "%o's mind was reaved by a Shin'en-en."
Tag "\ctShin'en-en\c-"
var int user_loopm;
States
	{
	Spawn:
		SHIN A 5 A_Look
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,64)
		SHIN B 5 A_Look
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,64)
		SHIN C 5 A_Look 
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,64)
		Loop
	See:
		SHIN AAAA 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN BBBB 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN CCCC 1 A_Chase
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		Loop
	Pain:
		SHIN Q 5 A_Pain
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN Q 2
		GoTo See
	Melee:
		TNT1 A 0
		TNT1 A 0 A_Jump(128,"Melee2")
		SHIN EEEEE 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN FFFFGG 1 A_FaceTarget
		SHIN G 1 A_MeleeAttack
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN GFFEE 2
		GoTo See
	Melee2:
		SHIN IIIII 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN JJJJKK 1 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN K 1 A_MeleeAttack
		SHIN KJJII 2
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		GoTo See
	Missile:
		TNT1 A 0
		TNT1 A 0 A_JumpIfCloser(68,"Melee")
		TNT1 A 0 A_Jump(128,"Alt","Alt","Alt","Alt","SlowSpam","SlowSpam","Haunt")
		Goto Normal
	Normal:
		SHIN EEEEE 1 Bright A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN FFFFG 1 Bright A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN GGG 1 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("AdvisorBall",32,0,random(-20,20))
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN GGG 1 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("AdvisorBall",32,0,random(-20,20))
		SHIN GGG 1 Bright A_FaceTarget
		TNT1 AAA 0 A_CustomMissile("AdvisorBall",32,0,random(-20,20))
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN GFFEE 2
		GoTo See
	Alt:
		SHIN IIIII 1 Bright A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN JJJJK 1 Bright A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN KKK 1 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("AdvisorBall",32,0,random(-20,20))
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN KKK 1 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("AdvisorBall",32,0,random(-20,20))
		SHIN KKK 1 Bright A_FaceTarget
		TNT1 AAA 0 A_CustomMissile("AdvisorBall",32,0,random(-20,20))
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN KJJII 2
		GoTo See
	SlowSpam:
		TNT1 A 0 A_SetUserVar("user_loopm",0)
		SHIN MMMNN 4 Bright
	2HuLoop:
		TNT1 A 0 A_CustomMissile("SlowBouncer",32,0,random(0,360),
		CMF_ABSOLUTEANGLE|CMF_ABSOLUTEPITCH|CMF_AIMDIRECTION,random(0,360))
		SHIN O 3 Bright
		TNT1 A 0 A_CustomMissile("SlowBouncer",32,0,random(0,360),
		CMF_ABSOLUTEANGLE|CMF_ABSOLUTEPITCH|CMF_AIMDIRECTION,random(0,360))
		TNT1 A 0 A_SetUserVar("user_loopm",user_loopm+1)
		TNT1 A 0 A_JumpIf(user_loopm>20,1)
		Loop
		SHIN O 15 Bright
		TNT1 A 0 A_Jump(42,"Haunt")
		SHIN NMM 5 Bright
		GoTo See
	Haunt:
		SHIN OONMMM 5 Bright
		SHIN M 2 Bright
		TNT1 A 0 A_SpawnItemEx("HauntTargeter",22,0,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION,0)
		SHIN M 2 Bright
		TNT1 A 0 A_SpawnItemEx("HauntTargeter",22,0,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION,0)
		SHIN M 2 Bright
		TNT1 A 0 A_SpawnItemEx("HauntTargeter",22,0,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION,0)
		SHIN M 2 Bright
		TNT1 A 0 A_SpawnItemEx("HauntTargeter",22,0,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION,0)
		SHIN M 2 Bright
		TNT1 A 0 A_SpawnItemEx("HauntTargeter",22,0,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION,0)
		SHIN MNOO 5 Bright
		GoTo See
	Death:
		TNT1 AAA 0 A_CustomMissile("SmokeFX",47,0,random(0,360),2,random(0,360))
		TNT1 AAA 0 A_CustomMissile("Kaboom19",random(43,63),0,random(0,360),2,random(0,360))
		SHIN R 4 Bright
		SHIN S 3 Bright A_Scream
		SHIN TUV 3 Bright
		SHIN W 3 Bright A_Fall
		TNT1 A 0 A_BossDeath
		SHIN XYZ 2
		SHIN Z 1 A_KillChildren
		TNT1 A 0 A_Killmaster
		TNT1 A 1 A_ChangeFlag(DONTFALL,0)
		TNT1 A 63000 CanRaise
		Stop
	Raise:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("VileHealEffect",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 1 A_ChangeFlag(DONTFALL,1)
		SHIN ZYXWVUTSR 5
		GoTo See
	}
}

Actor SlowBouncer : AdvisorBall
{
 Speed 5
 Damage (random(3,8))
 BounceCount 50
 BounceFactor 1.0
 WallBounceFactor 1.0
 var int user_flight;
 ReactionTime 50
 States
 {
  Spawn:
     SBS4 ABC 1 Bright A_SpawnItem("AdvisorBallTail")
     TNT1 A 0 A_SetUserVar("user_flight",user_flight+1)
     TNT1 A 0 A_JumpIf(user_flight>22,1)
     Loop
     TNT1 A 0 A_ScaleVelocity(2.6)
  Flight:
     SBS4 ABC 1 Bright A_SpawnItem("AdvisorBallTail")
     TNT1 A 0 A_ScaleVelocity(1.001)
     TNT1 A 0 A_SeekerMissile(15,3,SMF_LOOK|SMF_CURSPEED,82,2)
	 TNT1 A 0 A_CountDown
     Loop
  Death:
     SBS4 A 1 Bright A_SpawnItem("AdvisorBallDeath")
     TNT1 A 0 A_Explode(random(10,17),125,0,0,random(78,112))
     TNT1 A 0 A_SpawnItemEx("PurpleParticleSpawner", 0, 0, 1, 0, 0, 0, 0, 128)
     TNT1 AAA 0 A_CustomMissile("Kaboom8", 0, 0, random(0,360), 2, random(0,360))
     TNT1 AAAA 0 A_CustomMissile("SmokeFX4", 0, 0, random(0,360), 2, random(0,360))    
     Stop
  }
}

Actor Haunted : Inventory { Inventory.MaxAmount 1 }

Actor HauntTargeter : DShadowTargeter
{
Species ""
Species "Nobles"
Species "SatanGuard"
Damagetype ""
Damagetype "SatanGuard"
Obituary "%o's mind was reaved by a Shin'en-en."
States
	{
	See:
	Missile:
		TNT1 A 0 Bright A_JumpIfInTargetInventory("Haunted",1,"ClearTarget")
		TNT1 A 0 Bright A_GiveToTarget("Haunted",1)
		TNT1 AA 1 Bright A_FaceTarget
		TNT1 A 0 Bright A_VileTarget("HauntSpawner")
		TNT1 AAAAA 35 Bright
		TNT1 A 2 Bright
		TNT1 A 1 Bright A_TakeFromTarget("Haunted",1)
		Goto Death
	Death:
		TNT1 A 1 Bright
		Stop
	}
}

Actor HauntSpawner
{
+ISMONSTER
-COUNTKILL
+NOTARGET
+NOINTERACTION
States
	{
	Spawn:
		TNT1 A 1
		TNT1 A 0 A_SpawnItemEx("Haunter",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS|SXF_SETMASTER,0)
		TNT1 AAA 35
		TNT1 A 0 A_Jump(256,1,2,3,4)
		TNT1 AAA 35
		TNT1 A 1 A_KillChildren
		Stop
	}
}

Actor Haunter : Shinenen
{
Health 500
MeleeDamage 1
+NoClip
-BossDeath
DropItem "BossLifeEssence", 80, 5
DropItem "HEMBossArmorBonusMax35", 80
Obituary "%o was haunted to death by a Shin'en-en."
HitObituary "%o was haunted to death by a Shin'en-en."
Tag "\ctShin'en-en\c-"
States
	{
	Missile:
		TNT1 A 0
		TNT1 A 0 A_JumpIfCloser(68,"Melee")
		TNT1 A 0 A_Jump(128,"Alt")
		Goto Normal
	Normal:
		SHIN EEEEE 1 Bright A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN FFFFG 1 Bright A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN GGG 1 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("AdvisorBall",32,0,random(-20,20))
		SHIN GF 3
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN FF 3
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN EE 3
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		GoTo See
	Alt:
		SHIN IIIII 1 Bright A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN JJJJK 1 Bright A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN KKK 1 Bright A_FaceTarget
		TNT1 A 0 A_CustomMissile("AdvisorBall",32,0,random(-20,20))
		SHIN KJ 3
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		SHIN JII 3
		TNT1 A 0 A_SpawnItemEx("ShinenenFireSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		GoTo See
	Death:
		TNT1 AAA 0 A_CustomMissile("SmokeFX",47,0,random(0,360),2,random(0,360))
		TNT1 AAA 0 A_CustomMissile("Kaboom19",random(43,63),0,random(0,360),2,random(0,360))
		SHIN R 4 Bright
		SHIN S 3 Bright A_Scream
		SHIN TUV 3 Bright
		SHIN W 3 Bright A_Fall
		SHIN XYZ 2
		SHIN Z 1 A_KillChildren
		TNT1 A 1
		Stop
	Raise:
		Stop
	}
}

Actor ShinenenFire : AbyssalSatyrFlame
{
scale 0.3
+CLIENTSIDEONLY
+NONETID
}

Actor ShinenenFireSpawner : RedParticleSpawner
{
+NOINTERACTION
States
	{
	Spawn:
		TNT1 A 1 Bright
		TNT1 A 0 Bright A_PlaySound("monster/ambientfire")
		TNT1 A 0 Bright A_CheckSight("Toaster")
		TNT1 A 0 Bright A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
		TNT1 AAAAAA 0 Bright A_SpawnItemEx("ShinenenFire",random(-12,12),random(-12,12),random(25,50)-20,0,0,random(0,-5),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
		TNT1 A 1 Bright
		Stop
	Toaster:
		TNT1 A 1 Bright
		Stop
	}
}