class BabelCyberdemon : BabelMonster Replaces Cyberdemon
{
	int user_loopCounter;
	default
	{
		Health 4000;
		Radius 40;
		Height 110;
		Mass 1000;
		Speed 16;
		PainChance 20;
		Monster;
		MinMissileChance 160;
		+BOSS;
		+MISSILEMORE;
		+FLOORCLIP;
		+NORADIUSDMG;
		+DONTMORPH;
		+BOSSDEATH;
		SeeSound "cyber/sight";
		PainSound "cyber/pain";
		DeathSound "cyber/death";
		ActiveSound "cyber/active";
		Obituary "$OB_CYBORG";
		+MISSILEEVENMORE;
		PainChance "PlayerPistol", 30;
		DamageType "Monster";
		Tag "Cyberdemon (Babel)";
		
		BabelMonster.AlternatePainSound	"cyber/pain2";
	}
	
	States
	{
	Spawn:
		CYBR AB 10 A_Look();
		Loop;
	See:
		CYBR A 3 A_Hoof();
		CYBR ABBCC 3 A_Chase();
		CYBR D 3 A_Metal;
		CYBR D 3 A_Chase();
		Loop;
	Missile:
		TNT1 A 0 A_Jump(32, "HomingShot");
		TNT1 A 0 A_Jump(64, "MissileBurst");
		CYBR E 4 A_FaceTarget();
		CYBR F 8 Bright A_SpawnProjectile("CyberdemonMissile", 32, 0);
		CYBR E 8;
		TNT1 A 0 A_MonsterRefire(64, "See");
		Goto Missile;
	MissileBurst:
		TNT1 A 0 A_JumpIfCloser(512, "GyroStart");
		TNT1 A 0 A_Jump(16, "GyroStart"); //Just for fun
		TNT1 A 0 A_Jump(128, "MissileBurstAlt");
		CYBR E 4 A_FaceTarget(0, 0, -7.5);
		CYBR F 6 Bright A_SpawnProjectile ("CyberdemonMissile", 32, 0, -7.5);
		CYBR E 6 A_FaceTarget(0, 0, 7.5);
		CYBR F 6 Bright A_SpawnProjectile ("CyberdemonMissile", 32, 0, 7.5);
		CYBR E 6 A_FaceTarget();
		CYBR F 6 Bright A_SpawnProjectile ("CyberdemonMissile", 32, 0);
		CYBR E 6;
		TNT1 A 0 A_MonsterRefire(64, "See");
		Goto Missile;
	MissileBurstAlt:
		CYBR E 4 A_FaceTarget(0, 0, 7.5);
		CYBR F 6 Bright A_SpawnProjectile ("CyberdemonMissile", 32, 0, 7.5);
		CYBR E 6 A_FaceTarget(0, 0, -7.5);
		CYBR F 6 Bright A_SpawnProjectile ("CyberdemonMissile", 32, 0, -7.5);
		CYBR E 6 A_FaceTarget();
		CYBR F 6 Bright A_SpawnProjectile ("CyberdemonMissile", 32, 0);
		CYBR E 6;
		TNT1 A 0 A_MonsterRefire(64, "See");
		Goto Missile;
	GyroStart:
		TNT1 A 0 A_PlaySound("cyber/sight", CHAN_AUTO, 1.0, false, 0.5);
		CYBR EEEEEEEE 1 A_FaceTarget();
	GyroLoop:
		CYBR E 2 A_FaceTarget();
		CYBR F 3 Bright A_SpawnProjectile ("GyroJet", 32, 0, frandom(-2.5, 2.5)+PredictPlayerMovementRough(75), 0, frandom(-2.5, 2.5));
		CYBR E 2 A_FaceTarget();
		CYBR F 3 Bright A_SpawnProjectile ("GyroJet", 32, 0, frandom(-2.5, 2.5)+PredictPlayerMovementRough(75), 0, frandom(-2.5, 2.5));
		CYBR E 2 A_FaceTarget();
		CYBR F 3 Bright A_SpawnProjectile ("GyroJet", 32, 0, frandom(-2.5, 2.5)+PredictPlayerMovementRough(75), 0, frandom(-2.5, 2.5));
		TNT1 A 0 A_Jump(48, "GyroEndMissile");
		TNT1 A 0 A_MonsterRefire(64, "GyroEndSee");
		Goto GyroLoop;
	GyroEndSee:
		CYBR EEE 2 A_FaceTarget();
		Goto See;
	GyroEndMissile:
		CYBR EEE 2 A_FaceTarget();
		Goto Missile;
	HomingShot:
		CYBR E 4 A_FaceTarget();
		CYBR F 8 Bright A_SpawnProjectile ("BabelHomingMissile", 32, 0);
		CYBR E 8;
		Goto See;
		/*
		CYBR E 12 A_FaceTarget()
		CYBR F 12 A_CyberAttack
		CYBR E 12 A_FaceTarget()
		CYBR F 12 A_CyberAttack
		Goto See
		*/
	Pain:
		CYBR G 10 A_BabelPain();
		Goto See;
	Death:
		TNT1 A 0 
		{
			ScareOthers("BabelMonster", 10000);
			if(random(0,255) < 224)
			{
				TriggerSync("BabelDemon", 65.0);
				TriggerSync("BabelImp", 80.0);
				TriggerSync("BabelZombieMan", 75.0);
				TriggerSync("BabelChaingunGuy", 65.0);
				TriggerSync("BabelShotgunGuy", 70.0);
				TriggerSync("BabelNazi", 75.0);
				TriggerSync("BabelBaronOfHell", 40.0);
				TriggerDodge(); //Cacodemon
				
				TriggerChain("BabelRevenant", 25.0);
				TriggerChain("BabelFatso", 25.0);
			}
		}
	Death.Monster:
		CYBR H 10;
		TNT1 A 0 A_Scream();
		CYBR IIIIIJJJJJKKKKKLLLLL 2
		{
			for(user_loopCounter = 0; user_loopCounter < 3; user_loopCounter++)
			{
				if(CVar.FindCVar("egr_gore").GetInt())
				{
					A_SpawnProjectile("Bits", random(24, 110), random(-20, 20), random (0, 360), CMF_OFFSETPITCH, -random (0, 160));
					A_SpawnItemEx("BloodSpew", random(-20, 20), random(-20, 20), random(24, 110));
				}
				if(random(0, 1))
				{
					A_SpawnItemEx("BExplode", random(-20, 20), random(-20, 20), random(24, 110));
					if(CVar.FindCVar("egr_gore").GetInt())
					{
						A_SpawnProjectile("Chunks", random(24, 110), random(-20, 20), random (0, 360), CMF_OFFSETPITCH, -random (0, 160));
					}
				}
			}
		}
		TNT1 A 0 A_NoBlocking;
		CYBR MNO 10;
		CYBR P 30;
		CYBR P -1 A_BossDeath;
		Stop;
	Death.Massacre:
		CYBR H 10;
		TNT1 A 0 A_Scream();
		CYBR IIIIIJJJJJKKKKKLLLLL 2;
		TNT1 A 0 A_NoBlocking;
		CYBR MNO 10;
		CYBR P 30;
		CYBR P -1 A_BossDeath;
		Stop;
	}
}

class CyberdemonMissile : Rocket
{
	default
	{
		Speed 20;
		Damage 27;//15;
		Projectile;
		+RANDOMIZE;
		+STRIFEDAMAGE;
		+DEHEXPLOSION;
		+ROCKETTRAIL;
		DeathSound "";
		DamageType "Monster";
		decal "Scorch";
	}
	States
	{
	Spawn:
		MISL A 1 Bright;
		Loop;
	Death:
		TNT1 A 0 A_SpawnItemEx("BExplode");
		TNT1 A 0 A_Explode;
		/*
		MISL B 8 Bright A_Explode
		MISL C 6 Bright
		MISL D 4 Bright
		*/
		Stop;
	}	
}

class BabelHomingMissile : Rocket
{
	default
	{
		Damage 27;//15;
		+STRIFEDAMAGE;
		Speed 15;
		FastSpeed 30;
		+SEEKERMISSILE;
		DamageType "Monster";
		decal "Scorch";
	}
	States
	{
	Spawn:
		HMIS A 1 Bright A_SeekerMissile (0,1, SMF_PRECISE|SMF_CURSPEED);
		Loop;
	Death:
		TNT1 A 0 A_SpawnItemEx("BExplode");
		TNT1 A 0 A_Explode;
		/*
		HMIS B 8 Bright A_Explode
		HMIS C 6 Bright
		HMIS D 4 Bright
		*/
		Stop;
	}
}

class GyroJet : BabelFastProjectile
{
	default
	{
		Scale 0.4;
		Radius 3;
		Height 2;
		Speed 30;
		Damage 3;
		+STRIFEDAMAGE;
		Projectile;
		+RANDOMIZE;
		+DEHEXPLOSION;
		SeeSound "weapons/rocklf";
		DeathSound "";//"weapons/rocklx";
		decal "PlasmaScorchLower";
		DamageType "Monster";
		
		BabelFastProjectile.ParticleColors 0xaaaaaa, 0xaa2200, 0xaa6600;
		BabelFastProjectile.ParticleSizeRange 2, 4;
		BabelFastProjectile.ParticleLifeTime 15, 25;
		BabelFastProjectile.ParticleCubeOffsets 1, 1;
		BabelFastProjectile.ParticleCubeAccelerations 0.1, 0.1;
		BabelFastProjectile.LerpOffset 0.4;
		BabelFastProjectile.TrailDetail 3;
		BabelFastProjectile.HeightCorrection 2.0;
		BabelFastProjectile.StartingAlpha 0.7;
	}
	
	override void Tick()
	{
		super.Tick();
		if(level.isFrozen() > 0) return;
		if(speed <= 100)
		{
			A_ScaleVelocity(1.05);
		}
	}
	States
	{
		Spawn:
			MISL A 1 Bright;
			Loop;
		Death:
			TNT1 A 0 A_PlaySound("weapons/rocklx", CHAN_AUTO, 0.5, false, ATTN_IDLE, false, 1.2);
			TNT1 A 0 A_SpawnItemEx("BExplodeSmallSilent");
			TNT1 A 0 A_Explode(8, 24);
			/*
			MISL B 6 Bright A_Explode(10, 16)
			MISL C 5 Bright
			MISL D 4 Bright
			*/
			Stop;
	}
}