
// Base class for the acolytes ----------------------------------------------

class Acolyte : StrifeHumanoid
{
	Default
	{
		Health 70;
		PainChance 150;
		Speed 7;
		Radius 24;
		Height 64;
		Mass 400;
		Monster;
		+SEESDAGGERS
		+NOSPLASHALERT
		+FLOORCLIP
		+NEVERRESPAWN
		MinMissileChance 150;
		Tag "$TAG_ACOLYTE";
		SeeSound "acolyte/sight";
		PainSound "acolyte/pain";
		AttackSound "acolyte/rifle";
		DeathSound "acolyte/death";
		ActiveSound "acolyte/active";
		Obituary "$OB_ACOLYTE";
	}

	States
	{
	Spawn:
		AGRD A 5 A_Look2;
		Wait;
		AGRD B 8 A_ClearShadow;
		Loop;
		AGRD D 8;
		Loop;
		AGRD ABCDABCD 5 A_Wander;
		Loop;
	See:
		AGRD A 6 Fast Slow A_AcolyteBits;
		AGRD BCD 6 Fast Slow A_Chase;
		Loop;
	Missile:
		AGRD E 8 Fast Slow A_FaceTarget;
		AGRD FE 4 Fast Slow A_ShootGun;
		AGRD F 6 Fast Slow A_ShootGun;
		Goto See;
	Pain:
		AGRD O 8 Fast Slow A_Pain;
		Goto See;
	Death:
		AGRD G 4;
		AGRD H 4 A_Scream;
		AGRD I 4;
		AGRD J 3;
		AGRD K 3 A_NoBlocking;
		AGRD L 3;
		AGRD M 3 A_AcolyteDie;
		AGRD N -1;
		Stop;
	XDeath:
		GIBS A 5 A_NoBlocking;
		GIBS BC 5 A_TossGib;
		GIBS D 4 A_TossGib;
		GIBS E 4 A_XScream;
		GIBS F 4 A_TossGib;
		GIBS GH 4;
		GIBS I 5;
		GIBS J 5 A_AcolyteDie;
		GIBS K 5;
		GIBS L 1400;
		Stop;
	}
	
	//============================================================================
	//
	// A_AcolyteDie
	//
	//============================================================================

	void A_AcolyteDie ()
	{
		// [RH] Disable translucency here.
		A_SetRenderStyle(1, STYLE_Normal);

		// Only the Blue Acolyte does extra stuff on death.
		if (self is "AcolyteBlue")
		{
			int i;
			// Make sure somebody is still alive
			for (i = 0; i < MAXPLAYERS; ++i)
			{
				if (playeringame[i] && players[i].health > 0)
					break;
			}
			if (i == MAXPLAYERS)
				return;

			// Make sure all the other blue acolytes are dead, but do this only once in case of simultaneous kills.
			if (CheckBossDeath() && !players[i].mo.FindInventory("QuestItem7"))
			{
				players[i].mo.GiveInventoryType ("QuestItem7");
				players[i].SetLogNumber (14);
				players[i].SetSubtitleNumber (14, "svox/voc14");
				A_StopSound (CHAN_VOICE);
				A_StartSound ("svox/voc14", CHAN_VOICE, CHANF_DEFAULT, 1., ATTN_NONE);
			}
		}
	}

	//============================================================================
	//
	// A_BeShadowyFoe
	//
	//============================================================================

	void A_BeShadowyFoe()
	{
		A_SetRenderStyle(HR_SHADOW, STYLE_Translucent);
		A_SetFriendly(false);
	}

	//============================================================================
	//
	// A_AcolyteBits
	//
	//============================================================================

	void A_AcolyteBits()
	{
		if (SpawnFlags & MTF_SHADOW)
		{
			A_BeShadowyFoe();
		}
		if (SpawnFlags & MTF_ALTSHADOW)
		{
			if (bShadow)
			{
				// I dunno.
			}
			else
			{
				A_SetRenderStyle(0, STYLE_None);
			}
		}
	}
	
}
	

// Acolyte 1 ----------------------------------------------------------------

class AcolyteTan : Acolyte
{
	Default
	{
		MissileChanceMult 0.0625;
		DropItem "ClipOfBullets";
	}
}

// Acolyte 2 ----------------------------------------------------------------

class AcolyteRed : Acolyte
{
	Default
	{
		MissileChanceMult 0.0625;
		Translation 0;
	}
}

// Acolyte 3 ----------------------------------------------------------------

class AcolyteRust : Acolyte
{
	Default
	{
		MissileChanceMult 0.0625;
		Translation 1;
	}
}

// Acolyte 4 ----------------------------------------------------------------

class AcolyteGray : Acolyte
{
	Default
	{
		MissileChanceMult 0.0625;
		Translation 2;
	}
}

// Acolyte 5 ----------------------------------------------------------------

class AcolyteDGreen : Acolyte
{
	Default
	{
		MissileChanceMult 0.0625;
		Translation 3;
	}
}

// Acolyte 6 ----------------------------------------------------------------

class AcolyteGold : Acolyte
{
	Default
	{
		MissileChanceMult 0.0625;
		Translation 4;
	}
}

// Acolyte 7 ----------------------------------------------------------------

class AcolyteLGreen : Acolyte
{
	Default
	{
		Health 60;
		Translation 5;
	}
}

// Acolyte 8 ----------------------------------------------------------------

class AcolyteBlue : Acolyte
{
	Default
	{
		Health 60;
		Translation 6;
	}
}

// Shadow Acolyte -----------------------------------------------------------

class AcolyteShadow : Acolyte
{
	Default
	{
		MissileChanceMult 0.5;
		DropItem "ClipOfBullets";
	}
	States
	{
	See:
		AGRD A 6 A_BeShadowyFoe;
		Goto Super::See+1;
	Pain:
		AGRD O 0 Fast Slow A_SetShadow;
		AGRD O 8 Fast Slow A_Pain;
		Goto See;
	}
}

// Some guy turning into an acolyte -----------------------------------------

class AcolyteToBe : Acolyte
{
	Default
	{
		Health 61;
		Radius 20;
		Height 56;
		DeathSound "becoming/death";
		-COUNTKILL
		-ISMONSTER
	}

	States
	{
	Spawn:
		ARMR A -1;
		Stop;
	Pain:
		ARMR A -1 A_HideDecepticon;
		Stop;
	Death:
		Goto XDeath;
	}
	
	//============================================================================
	//
	// A_HideDecepticon
	//
	// Hide the Acolyte-to-be							->
	// Hide the guy transforming into an Acolyte		->
	// Hide the transformer								->
	// Transformers are Autobots and Decepticons, and
	// Decepticons are the bad guys, so...				->
	//
	// Hide the Decepticon!
	//
	//============================================================================

	void A_HideDecepticon ()
	{
		Door_Close(999, 64);
		if (target != null && target.player != null)
		{
			SoundAlert (target);
		}
	}
}
