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

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

	public override bool ValidateStartingGridPos()
	{
		if ( Manager.Instance.IsGridPosCorner( GridPos ) )
			return true;

		IntVector2 newGridPos;
		int rand = Game.Random.Int( 0, 3 );
		switch(rand)
		{
			case 0: default:
				newGridPos = new IntVector2( 0, 0 );
				break;
			case 1:
				newGridPos = new IntVector2( 0, Manager.Instance.GridHeight - 1 );
				break;
			case 2:
				newGridPos = new IntVector2( Manager.Instance.GridWidth - 1, 0 );
				break;
			case 3:
				newGridPos = new IntVector2( Manager.Instance.GridWidth - 1, Manager.Instance.GridHeight - 1 );
				break;
		}

		Manager.Instance.SwapCardPositionsNonAsync(this, Manager.Instance.GetCardAtGridPos(newGridPos));

		return false;
	}
}