class BabelFatso : ChainEnabledMonster Replaces Fatso
{
	int user_loopCounter;
	default
	{
		Health 600;
		Radius 48;
		Height 64;
		Mass 1000;
		Speed 8;
		Monster;
		+FLOORCLIP
		+BOSSDEATH
		SeeSound "fatso/sight";
		PainSound "fatso/pain";
		DeathSound "fatso/death";
		ActiveSound "fatso/active";
		Obituary "$OB_FATSO";
		PainChance 20;
		+MISSILEMORE;
		Species "Fatso";
		PainChance "PlayerPistol", 80;
		DamageType "Monster";
		Tag "Mancubus (Babel)";
		
		BabelMonster.FearEnabled		true;
		BabelMonster.FearThreshold		700.0;
		BabelMonster.FearMaxValue		950.0;
		BabelMonster.FearFallOff		2.0;
		BabelMonster.FearRecovery		5.0;
		BabelMonster.FearResistChance	12.0;
		BabelMonster.SyncChainCheckLOS	true;
	}
	
	States
	{
	Spawn:
		TNT1 A 0 Nodelay 
		{
			return ResolveState("Look");
		}
	Wander:
		FATT AABBCCDDEEFF 4 Fast 
		{
			A_Wander();
			A_Look();
		}
		Loop;
	Look:
		FATT AB 15 A_Look();
		Loop;
	See:
		TNT1 A 0 
		{
			ReleaseState();
			return JumpIfAfraid("Fear");
		}
		FATT AABBCCDDEEFF 4 Fast
		{
			A_Chase();
		}
		Goto See;
	Fear:
		FATT AABBCCDDEEFF 4 Fast
		{
			bFRIGHTENED = true;
			isAfraid = true;
			A_SetSpeed(10);
			A_Chase("Melee", null);
		}
		TNT1 A 0 JumpIfHasFear("Fear");
		TNT1 A 0 
		{
			currentFear = 0;
			isAfraid = false;
			bFRIGHTENED = false;
			ResetGroupFear();
			A_SetSpeed(8);
		}
		Goto See;
		
	Missile:
		TNT1 A 0 JumpIfCannotSee("See");
		TNT1 A 0 HoldState();
		FATT G 16 A_FatRaise;
		FATT G 4 A_FaceTarget();
		TNT1 A 0 A_JumpIfCloser(256, "MissileClose");
		TNT1 A 0 A_Jump(256, "MissileMiddle", "MissileLeft", "MissileRight");
	Melee:
	MissileClose:
		TNT1 A 0 HoldState();
		FATT H 8 Bright 
		{
			A_SpawnProjectile("FatShot", 32, 0, 2);
			A_SpawnProjectile("FatShot", 32, 0, -2);
		}
		FATT IG 4 A_FaceTarget();
		TNT1 A 0 A_MonsterRefire(32, "EndAttack");
		TNT1 A 0 A_JumpIfCloser(384, 2);
		TNT1 A 0 A_Jump(256, "EndAttack", "MissileMiddle", "MissileLeft", "MissileRight");
		TNT1 A 0 A_Jump(192, "MissileClose");
		Goto EndAttack;
	MissileMiddle:
		FATT H 8 Bright 
		{
			A_SpawnProjectile("FatShot", 32, 0, 5);
			A_SpawnProjectile("FatShot", 32, 0, -5);
		}
		FATT IG 4 A_FaceTarget();
		TNT1 A 0 A_MonsterRefire(32, "EndAttack");
		TNT1 A 0 A_Jump(192, "MissileLeft", "MissileRight");
		Goto EndAttack;
	MissileLeft:
		FATT H 8 Bright 
		{
			A_SpawnProjectile("FatShot", 32, 0, 15);
			A_SpawnProjectile("FatShot", 32, 0, 0);
		}
		FATT IG 4 A_FaceTarget();
		TNT1 A 0 A_MonsterRefire(32, "EndAttack");
		TNT1 A 0 A_Jump(192, "MissileMiddle", "MissileRight");
		Goto EndAttack;
	MissileRight:
		FATT H 8 Bright 
		{
			A_SpawnProjectile("FatShot", 32, 0, -15);
			A_SpawnProjectile("FatShot", 32, 0, 0);
		}
		FATT IG 4 A_FaceTarget();
		TNT1 A 0 A_MonsterRefire(32, "EndAttack");
		TNT1 A 0 A_Jump(192, "MissileMiddle", "MissileLeft");
		Goto EndAttack;
	EndAttack:
		TNT1 A 0 
		{
			TriggerChain(self.GetClassName(), 25.0);
		}
		Goto See;
	Pain:
		FATT J 3 Fast;
		FATT J 3 Fast A_BabelPain();
		TNT1 A 0 AddFear(random(0,95));
		TNT1 A 0 JumpIfAfraid("Fear");
		Goto See;
	Death.Massacre:
		FATT K 6;
		FATT L 6 A_Scream();
		FATT M 6 A_NoBlocking;
		FATT NOPQ 6;
		FATT R 6;
		FATT S 6;
		FATT T -1 A_BossDeath;
		Stop;
	Death:
		TNT1 A 0 A_Jump(160, "Death.Monster");
		TNT1 A 0 
		{
			TriggerSync("BabelZombieMan", 20.0);
			TriggerSync("BabelChaingunGuy", 25.0);
			TriggerSync("BabelShotgunGuy", 22.5);
			TriggerSync("BabelNazi", 75.0);
			TriggerSync("BabelDemon", 35.0);
			TriggerSync("BabelImp", 40.0);
			TriggerSync("BabelCacodemon", 50.0);
			
			TriggerChain("BabelRevenant", 25.0);
			TriggerChain("BabelFatso", 25.0);
		}
	Death.Monster:
		FATT K 6 //blood here, head level
		{
			if(CVar.FindCVar("egr_gore").GetInt())
			{
				for(user_loopCounter = 0; user_loopCounter < 6; user_loopCounter++)
				{
					A_SpawnItemEx("BloodSpew", random(-10, 10), random(-10, 10), random(48, 64));
				}
			}
		}
		FATT L 6 
		{
			A_Scream();
			if(CVar.FindCVar("egr_gore").GetInt())
			{
				for(user_loopCounter = 0; user_loopCounter < 6; user_loopCounter++)
				{
					A_SpawnItemEx("BloodSpew", random(-10, 10), random(-10, 10), random(48, 64));
				}
			}
		}
		FATT M 6 A_NoBlocking;
		FATT NOPQ 6;
		FATT R 6 //and on R falling out of chest-low level
		{
			if(CVar.FindCVar("egr_gore").GetInt())
			{
				for(user_loopCounter = 0; user_loopCounter < 3; user_loopCounter++)
				{
					A_SpawnProjectile("SlowChunks", random(8, 20), random(-16, 16), random (0, 360), 2, random (-20, 20));
				}
			}
		}
		FATT S 6;
		FATT T -1 A_BossDeath;
		Stop;
	Raise:
		FATT R 5
		{
			A_SetSpeed(8);
		}
		FATT QPONMLK 5;
		Goto See;
	}
}

class ParticleFatShot : BabelFastProjectile Replaces FatShot
{
	default
	{
		Radius 6;
		Height 8;
		Speed 20;
		Damage 14;//8;
		Projectile;
		+RANDOMIZE;
		+STRIFEDAMAGE;
		RenderStyle "Add";
		Alpha 1;
		SeeSound "fatso/attack";
		DeathSound "fatso/shotx";
		decal "DoomImpScorch";
		DamageType "Monster";
		
		BabelFastProjectile.ParticleColors 0xff0000, 0xff6600, 0xffaa00;
		BabelFastProjectile.ParticleSizeRange 3, 6;
		BabelFastProjectile.ParticleLifeTime 30, 45;
		BabelFastProjectile.ParticleCubeOffsets 4, 4;
		BabelFastProjectile.ParticleCubeAccelerations 0.1, 0.1;
		BabelFastProjectile.LerpOffset 0.8;
		BabelFastProjectile.TrailDetail 1;
		BabelFastProjectile.HeightCorrection 1.0;
		BabelFastProjectile.StartingAlpha 0.7;
	}
	
	States
	{
	Spawn:
		MANF AB 4 Bright;
		Loop;
	Death:
		TNT1 A 0 
		{
			trailSpawn = false;
		}
		MISL B 8 Bright;
		MISL C 6 Bright;
		MISL D 4 Bright;
		Stop;
	}
}