private IEnumerator EndOfTurnResponse()
        {
            List <SelectCardDecision> storedResults = new List <SelectCardDecision>();
            IEnumerator coroutine = base.GameController.SelectTargetsAndDealDamage(base.HeroTurnTakerController, new DamageSource(base.GameController, base.CharacterCard), 1, DamageType.Projectile, 1, false, 1, false, false, false, null, storedResults, null, null, null, true, null, null, false, null, GetCardSource(null));

            if (UseUnityCoroutines)
            {
                yield return(base.GameController.StartCoroutine(coroutine));
            }
            else
            {
                base.GameController.ExhaustCoroutine(coroutine);
            }
            Card target = storedResults.FirstOrDefault()?.SelectedCard;

            if ((base.GameController.IsCardInPlayAndNotUnderCard(base.PsionicTorrentIdentifier) || base.GameController.IsCardInPlayAndNotUnderCard(base.ToxicCloudIdentifier)) && target != null)
            {
                ReduceDamageStatusEffect rdse = new ReduceDamageStatusEffect(1);
                rdse.SourceCriteria.IsSpecificCard = target;
                rdse.UntilStartOfNextTurn(this.TurnTaker);
                rdse.UntilCardLeavesPlay(target);
                coroutine = AddStatusEffect(rdse, true);
                if (UseUnityCoroutines)
                {
                    yield return(base.GameController.StartCoroutine(coroutine));
                }
                else
                {
                    base.GameController.ExhaustCoroutine(coroutine);
                }
            }
            if (base.GameController.IsCardInPlayAndNotUnderCard(base.PsionicTorrentIdentifier) && base.GameController.IsCardInPlayAndNotUnderCard(base.ToxicCloudIdentifier))
            {
                PreventPhaseActionStatusEffect ppase = new PreventPhaseActionStatusEffect();
                ppase.ToTurnPhaseCriteria.Phase     = new Phase?(Phase.PlayCard);
                ppase.ToTurnPhaseCriteria.TurnTaker = base.FindEnvironment(null).TurnTaker;
                ppase.UntilEndOfPhase(base.FindEnvironment(null).TurnTaker, Phase.PlayCard);
                coroutine = AddStatusEffect(ppase, true);
                if (base.UseUnityCoroutines)
                {
                    yield return(base.GameController.StartCoroutine(coroutine));
                }
                else
                {
                    base.GameController.ExhaustCoroutine(coroutine);
                }
                coroutine = base.GameController.SendMessageAction("Skip the next environment play phase!", Priority.High, GetCardSource(null), null, false);
                if (UseUnityCoroutines)
                {
                    yield return(base.GameController.StartCoroutine(coroutine));
                }
                else
                {
                    base.GameController.ExhaustCoroutine(coroutine);
                }
            }
        }
        public override IEnumerator Play()
        {
            List <DestroyCardAction> storedResults = new List <DestroyCardAction>();
            IEnumerator coroutine = base.GameController.SelectAndDestroyCard(this.DecisionMaker, new LinqCardCriteria((Card c) => (c.IsOngoing && c.IsVillain) || (c.IsDevice && c.HitPoints <= 6) || (c.IsRelic && c.HitPoints <= 6), "villain ongoing, device with 6 or less HP, or relic with 6 or less HP", false, false, "villain ongoing card, device with 6 or less HP, or relic with 6 or less HP", "villain ongoing cards, devices with 6 or less HP, or relics with 6 or less HP", false), true, storedResults, null, base.GetCardSource(null));

            if (base.UseUnityCoroutines)
            {
                yield return(base.GameController.StartCoroutine(coroutine));
            }
            else
            {
                base.GameController.ExhaustCoroutine(coroutine);
            }
            List <DestroyCardAction> dca = new List <DestroyCardAction>();

            coroutine = base.GameController.SelectAndDestroyCard(this.DecisionMaker, new LinqCardCriteria((Card c) => IsMicrostorm(c) && c.IsInPlayAndHasGameText, "microstorm", false, false, null, null, false), true, dca, null, null);
            if (base.UseUnityCoroutines)
            {
                yield return(base.GameController.StartCoroutine(coroutine));
            }
            else
            {
                base.GameController.ExhaustCoroutine(coroutine);
            }
            if (DidDestroyCard(dca))
            {
                var vilTurnTaker = GameController.AllTurnTakers.Where((TurnTaker tt) => tt.IsVillain || tt.IsVillainTeam);
                var vilToSkip    = vilTurnTaker.FirstOrDefault();
                PreventPhaseActionStatusEffect ppase = new PreventPhaseActionStatusEffect();
                ppase.ToTurnPhaseCriteria.Phase     = new Phase?(Phase.PlayCard);
                ppase.ToTurnPhaseCriteria.TurnTaker = vilToSkip;
                ppase.UntilEndOfPhase(vilToSkip, Phase.PlayCard);
                ppase.NumberOfUses = 1;
                coroutine          = AddStatusEffect(ppase, true);
                if (base.UseUnityCoroutines)
                {
                    yield return(base.GameController.StartCoroutine(coroutine));
                }
                else
                {
                    base.GameController.ExhaustCoroutine(coroutine);
                }
                coroutine = base.GameController.SendMessageAction("Skip the next villain play phase!", Priority.High, GetCardSource(null), null, false);
                if (UseUnityCoroutines)
                {
                    yield return(base.GameController.StartCoroutine(coroutine));
                }
                else
                {
                    base.GameController.ExhaustCoroutine(coroutine);
                }
                yield break;
            }
        }