public static Card AddGiftSpellCard(SpellDto spellDto, CardData CardData, Deck ActiveDeck)
        {
            double placeholderWidth;
            double placeholderHeight;
            Card   scroll = CreateSpellCard("Gift", spellDto, CardData, ActiveDeck);

            scroll.Description            = GetSpellDescription(spellDto, true);
            scroll.AdditionalInstructions = "Give this spell scroll to a player, NPC, or monster (enter their name below).";
            scroll.AlertMessage           = $"{userName} gave the {spellDto.name} spell scroll to {recipient}.";
            scroll.Expires = CardExpires.Never;
            CardFactory.AddPlayerNpcRecipientField(CardData, scroll, "scroll");
            if (!CardStyles.Apply(scroll))
            {
                int randomValue = CardFactory.random.Next(0, 100);
                if (randomValue < 40)
                {
                    placeholderWidth  = 155;
                    placeholderHeight = 152;
                    scroll.StylePath  = "Scrolls\\Rods";
                }
                else if (randomValue < 60)
                {
                    placeholderWidth  = 131;
                    placeholderHeight = 130;
                    scroll.StylePath  = "Scrolls\\Smooth Light";
                }
                else
                {
                    placeholderWidth  = 128;
                    placeholderHeight = 127;
                    scroll.StylePath  = "Scrolls\\Tan";
                }
                scroll.ScalePlaceholder(placeholderWidth, placeholderHeight);
            }
            return(scroll);
        }
        public static Card AddCastSpellCard(SpellDto spellDto, CardData cardData, Deck activeDeck)
        {
            Card card = CreateSpellCard("Cast", spellDto, cardData, activeDeck);

            card.Description = GetSpellDescription(spellDto, false);
            card.Expires     = CardExpires.Immediately;
            string       alertMessage;
            const double witchcraftPlaceholderSize = 174;

            if (!CardStyles.Apply(card))
            {
                switch (CardFactory.random.Next(0, 4))
                {
                case 0:
                    card.StylePath = "Witchcraft\\Common";
                    break;

                case 1:
                    card.StylePath = "Witchcraft\\Rare";
                    break;

                case 2:
                    card.StylePath = "Witchcraft\\Epic";
                    break;

                case 3:
                    card.StylePath = "Witchcraft\\Legendary";
                    break;
                }
            }
            card.ScalePlaceholder(witchcraftPlaceholderSize);
            if (!string.IsNullOrWhiteSpace(spellDto.targetingPrompt))
            {
                // TODO: Shorten Description MaxHeight.
                Field targetField = new Field(card)
                {
                    Name     = "target",
                    Label    = spellDto.targetingPrompt,
                    Required = spellDto.targetingPrompt.ToLower().IndexOf("optional") < 0,
                    IsDirty  = true
                };
                if (TargetsOne(spellDto))
                {
                    targetField.Type = FieldType.Text;
                }
                else
                {
                    targetField.Type = FieldType.LongText;
                }

                cardData.AllKnownFields.Add(targetField);
                alertMessage = $"{userName} casts {spellDto.name}, targeting {target}.";
            }
            else
            {
                alertMessage = $"{userName} casts {spellDto.name}.";
            }
            card.AlertMessage = alertMessage;

            card.Rarity = Rarity.Legendary;
            return(card);
        }