///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////

actor msxCacodemon : Cacodemon replaces Cacodemon {
   health 200
   speed 13
   painchance 100
   bloodcolor darkblue
   MeleeThreshold 84
   +DONTHARMCLASS
   +DONTHARMSPECIES
   speed 12
	 states{
	  See:
		HEAD A 3 A_Chase
		loop
	  Melee:
		HEAD DC 3 A_FaceTarget
		HEAD A 8 A_CustomMeleeAttack (45, "enemy/cacobit","enemy/cacobit" , "StrongMelee")
		goto see
	  Missile:
		TNT1 A 0 A_JumpIfCloser(216, "SonicWail") 
		HEAD BC 4 A_FaceTarget
		HEAD D 6 bright A_CustomMissile ("CacoBall", 20, 0, 0, 0, 0)
		goto see
	  SonicWail:
		HEAD B 10 A_FaceTarget
		HEAD C 4 A_FaceTarget
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		HEAD D 2 A_FaceTarget
		TNT1 A 0 bright A_CustomMissile ("CacoSonicWail", 24, 0, 0, 0, 0)
		goto See
	  }
}


actor CacoBall : CacodemonBall replaces CacodemonBall {
	speed 23
	alpha 1.0
	renderstyle add
	scale 1.75
	damage (random(26,30))
	PROJECTILE
	+DONTHARMCLASS
	+DONTHARMSPECIES
	SeeSound "fireball/fire"
	DeathSound "fireball/explode"
	states{
		spawn:
			TNT1 A 0
			HEFX A 1 bright A_SpawnItemEx("caco_BallTrailSpawner1",0,0,0, 0,0,0) 
			HEFX D 1 bright A_SpawnItemEx("caco_BallTrailSpawner2",0,0,0, 0,0,0) 
			HEFX B 1 bright A_SpawnItemEx("caco_BallTrailSpawner1",0,0,0, 0,0,0) 
			HEFX C 1 bright A_SpawnItemEx("caco_BallTrailSpawner2",0,0,0, 0,0,0) 
			loop
		death:
			TNT1 A 0
			TNT1 AAAA 0 A_SpawnItemEx("caco_BoomFire",0,0,0, 0,frandom(-2.2,2.2),frandom(-2.2,2.2)) 
			TNT1 AAAAA 0 A_SpawnItemEx("caco_BoomBluParticle",0, 0, 0, random(2,3), random(2,3) , random(-3,3) , random(180,360))
			TNT1 AAAAA 0 A_SpawnItemEx("caco_BoomRedParticle",0, 0, 0, random(2,3), random(2,3) , random(-3,3) , random(180,360))
			BAL2 CCDDEE 2 bright A_Explode(3, 36, 0)
			stop
	}
}

actor caco_BallTrailSpawner1 {
	+NOINTERACTION
	states{
		spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("caco_BallRedFlare",0,0,0, 0,0,0)
			TNT1 A 0 A_SpawnItemEx("caco_BallTrail",-5,0,0, 0,frandom(-0.7,0.7),frandom(-0.7,0.7)) 
			TNT1 AA 0 A_SpawnItemEx("caco_BallTrail",-9,0,0, 0,frandom(-2.7,2.7),frandom(-2.7,2.7)) 
			stop
	}
}

actor caco_BallRedFlare {
	scale 0.35
	alpha 0.8
	renderstyle add
	+NOINTERACTION
	+FORCEXYBILLBOARD
	states{
		spawn:
			TNT1 A 0
			L2NR B 1 bright
			stop
	}
}

actor caco_BallTrailSpawner2 {
	+NOINTERACTION
	states{
		spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("caco_BallBlueFlare",0,0,0, 0,0,0)
			TNT1 A 0 A_SpawnItemEx("caco_BallTrail",-5,0,0, 0,frandom(-0.7,0.7),frandom(-0.7,0.7)) 
			TNT1 AA 0 A_SpawnItemEx("caco_BallTrail",-9,0,0, 0,frandom(-2.7,2.7),frandom(-2.7,2.7)) 
			stop
	}
}

actor caco_BallBlueFlare {
	scale 0.35
	alpha 0.8
	renderstyle add
	+NOINTERACTION
	+FORCEXYBILLBOARD
	states{
		spawn:
			TNT1 A 0
			L2NB B 1 bright
			stop
	}
}

actor caco_BallTrail {
	scale 0.3
	alpha 1.0
	renderstyle add
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+NOTELEPORT
	states{
		spawn:
			PFPP ABCDEFGHIJKL 1 bright A_FadeOut(0.08)
			stop
	}
}

actor caco_BoomFire {
	scale 0.85
	alpha 1.0
	renderstyle add
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+NOTELEPORT
	states{
		spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(255,"sp1","sp2","sp3")
		sp1:	
			PFPP A 1 bright A_FadeOut(0.06)
			loop
		sp2:
			PFPP B 1 bright A_FadeOut(0.06)
			loop
		sp3:
			PFPP C 1 bright A_FadeOut(0.06)
			loop
	}
}

actor caco_BoomBluParticle {
	scale 0.2
	alpha 1.0
	renderstyle add
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+NOTELEPORT
	states{
		spawn:
			HEFX E 6
		sploop:
			HEFX E 1 A_FadeOut(0.1)
			TNT1 A 0 A_ScaleVelocity(0.8)
			TNT1 A 0 A_SetScale(ScaleX * 1.06, ScaleY * 1.06)
			loop
	}
}

actor caco_BoomRedParticle : caco_BoomBluParticle{
	states{
		spawn:
			HEFX F 6
		sploop:
			HEFX F 1 A_FadeOut(0.1)
			TNT1 A 0 A_ScaleVelocity(0.8)
			TNT1 A 0 A_SetScale(ScaleX * 1.06, ScaleY * 1.06)
			loop
	}
}


actor CacoSonicWail  {
	radius 2
	height 2
	speed 28
	alpha 1.0
	renderstyle add
	scale 0.05
	damage 0
	PROJECTILE
	+RIPPER
	+BLOODLESSIMPACT
	+DONTHARMCLASS
	+DONTHARMSPECIES
	+THRUACTORS
	SeeSound "enemy/cacosonicwail"
	var int user_rad;
	var int user_i;
	states{
		spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_rad", 20)
			TNT1 A 0 A_SetUserVar("user_i", 0)
		sloop:
			TNT1 A 0 A_JumpIf(user_i>=12, "death")
			TNT1 A 0 A_Explode(2, user_rad , 0, 0, user_rad)
			TNT1 A 0 A_SetScale(ScaleX * 1.25, ScaleY * 1.25)
			TNT1 A 0 A_SetUserVar("user_rad",user_rad*1.2)
			BSW2 B 1 bright A_FadeOut (0.06)
			TNT1 A 0 A_SetUserVar("user_i",user_i+1)
			loop
		death:
			TNT1 A 0
			TNT1 A 0
			stop
	}
}