cards/CardCaterpillar.cs
using Sandbox;
using System.Threading.Tasks;

public class CardCaterpillar : Card
{
	public override bool IsAlive => true;

	public override bool ShouldHandleEvent( EventType eventType )
	{
		return CardType == CardType.Caterpillar && eventType == EventType.TurnStart && Game.Random.Float(0f, 1f) < 0.2f;
	}

	public override async Task HandleEventAsync( EventType eventType )
	{
		await Task.DelayRealtime( 200 );

		SetCardType( CardType.Butterfly );

		await Task.DelayRealtime( 100 );

		await Manager.Instance.ShakeCard( this );

		await Task.DelayRealtime( 400 );
	}
}