
class ZFrozenEnemy : Actor
{

	class<actor> Sactor;
	StateLabel Sbeginstate;
	double Shealth;
	SpriteID Ssprite;
	uint8 Sframe;
	Dropitem Sdropitem;

	Default
	{
		+SLIDESONWALLS
	}

	private void updateTargets(Actor oldactor, Actor newactor)
	{
		ThinkerIterator actors = ThinkerIterator.Create("Actor",STAT_DEFAULT);
		Actor monster;
		while (monster = Actor(actors.Next()))
		{
			if (monster.bISMONSTER && monster!=oldactor && monster!=newactor && monster.target && monster.target==oldactor)
			{
				monster.target = newactor;
			}
		}
	}

	void A_ReplaceWithSourceEnemy(int ticks)
	{
		Actor a = self;
     		a.sprite = Ssprite;
     		a.frame = Sframe;
     		a.A_SetTics(ticks);
	}

	void A_UnFreeze()
	{
		Actor a = self;
		Actor aunfreeze = Spawn(Sactor, a.pos);
		aunfreeze.health = Shealth;
		aunfreeze.target = a.target;
		aunfreeze.master = a.master;
		aunfreeze.A_SetInventory("MasterShieldState", 2);
		aunfreeze.SetStateLabel(Sbeginstate);

		updateTargets(a, aunfreeze);
	}

	void A_DropItems()
	{
		if (Sdropitem != null)
		{
			while (Sdropitem != null)
			{
				if (Sdropitem.Name != "None")
				{
					class<actor> ti = Sdropitem.Name;
					if (ti != null)
					{
						self.A_DropItem (ti, Sdropitem.Amount, Sdropitem.Probability);
					}
				}
				Sdropitem = Sdropitem.Next;
			}
		}
	}

	override bool CanCollideWith(Actor other, bool passive)
	{
		if (other && other.bMISSILE && other.damagetype=="Ice")
    		{
			return false;
		}
		return super.CanCollideWith(other, passive);
	}

}