class DukeFrameEffect : DukeActor
{
	default
	{
		Pic "SMALLSMOKE";
	}
	
	
	override void Initialize()
	{
		if (!self.mapSpawned && self.ownerActor)
		{
			self.scale = self.ownerActor.scale;
		}
		else
		{
			self.Scale = (0, 0);
		}
		self.ChangeStat(STAT_MISC);
	}
	
	override void Tick()
	{
		let Owner = self.ownerActor;
		if (Owner)
		{
			self.temp_data[0]++;

			if (self.temp_data[0] > 7)
			{
				self.Destroy();
				return;
			}
			else if (self.temp_data[0] > 4) self.cstat |= CSTAT_SPRITE_TRANS_FLIP | CSTAT_SPRITE_TRANSLUCENT;
			else if (self.temp_data[0] > 2) self.cstat |= CSTAT_SPRITE_TRANSLUCENT;
			self.xoffset = Owner.xoffset;
			self.yoffset = Owner.yoffset;
		}
	}
	
	override bool animate(tspritetype t)
	{
		let OwnerAc = self.ownerActor;
		if (OwnerAc)
		{
			if (OwnerAc.isPlayer())
				if (ud.cameraactor == nullptr)
					if (Duke.GetViewPlayer() == OwnerAc.GetPlayer() && display_mirror == 0)
					{
						t.ownerActor = nullptr;
						t.scale = (0, 0);
						return true;
					}
			if ((OwnerAc.cstat & CSTAT_SPRITE_INVISIBLE) == 0)
			{
				if (!OwnerAc.isPlayer() || !Raze.isRR()) t.SetSpritePic(OwnerAc, -1);
				else t.SetSpritePic(OwnerAc, 0);
				t.pal = OwnerAc.pal;
				t.shade = OwnerAc.shade;
				t.angle = OwnerAc.angle;
				t.cstat = CSTAT_SPRITE_TRANSLUCENT | OwnerAc.cstat;
			}
		}
		return true;
	}
	
}