//override flip response to remove resetting token pools
        public override IEnumerator BeforeFlipCardImmediateResponse(FlipCardAction flip)
        {
            if (base.CardWithoutReplacements.IsFlipped)
            {
                yield break;
            }
            IEnumerable <Card> enumerable = from c in base.TurnTakerControllerWithoutReplacements.TurnTaker.GetAllCards()
                                            where c.Location.IsEnvironment && (c.Location.IsDeck || c.Location.IsTrash)
                                            select c;

            if (enumerable.Count() > 0)
            {
                IEnumerator coroutine = RemoveCardsFromGame(enumerable);
                if (base.UseUnityCoroutines)
                {
                    yield return(base.GameController.StartCoroutine(coroutine));
                }
                else
                {
                    base.GameController.ExhaustCoroutine(coroutine);
                }
            }
            if (base.CardWithoutReplacements.IsTarget)
            {
                RemoveTargetAction action     = new RemoveTargetAction(base.GameController, base.CardWithoutReplacements);
                IEnumerator        coroutine2 = DoAction(action);
                if (base.UseUnityCoroutines)
                {
                    yield return(base.GameController.StartCoroutine(coroutine2));
                }
                else
                {
                    base.GameController.ExhaustCoroutine(coroutine2);
                }
            }
            if (base.TurnTakerControllerWithoutReplacements.IsIncapacitatedOrOutOfGame)
            {
                base.GameController.RemoveTriggers((ITrigger t) => t.CardSource != null && t.CardSource.CardController.TurnTakerControllerWithoutReplacements == base.TurnTakerControllerWithoutReplacements && !t.IsStatusEffect && !t.IsOutOfPlayTrigger && t.CardSource != null && (t.CardSource.CardController == this || !t.CardSource.Card.IsInPlayAndNotUnderCard));
                IEnumerable <Card> cards = base.TurnTakerControllerWithoutReplacements.TurnTaker.GetAllCards();
                List <Card>        list  = new List <Card>();
                list.AddRange(cards.Where((Card c) => !c.IsHeroCharacterCard).SelectMany((Card c) => c.UnderLocation.Cards.Where((Card co) => co.Owner != base.TurnTakerControllerWithoutReplacements.TurnTaker)));
                if (base.TurnTakerControllerWithoutReplacements.TurnTaker.IsHero)
                {
                    HeroTurnTaker heroTurnTaker = base.TurnTakerControllerWithoutReplacements.ToHero().HeroTurnTaker;
                    list.AddRange(from c in heroTurnTaker.Hand.Cards.Union(heroTurnTaker.Deck.Cards).Union(heroTurnTaker.Trash.Cards)
                                  where c.Owner != base.TurnTakerControllerWithoutReplacements.TurnTaker
                                  select c);
                }
                foreach (Card item in list)
                {
                    MoveCardDestination trashDestination = FindCardController(item).GetTrashDestination();
                    IEnumerator         coroutine3       = base.GameController.MoveCard(base.TurnTakerController, item, trashDestination.Location, trashDestination.ToBottom);
                    if (base.UseUnityCoroutines)
                    {
                        yield return(base.GameController.StartCoroutine(coroutine3));
                    }
                    else
                    {
                        base.GameController.ExhaustCoroutine(coroutine3);
                    }
                }
                if (base.Game.IsOblivAeonMode)
                {
                    IEnumerable <Card> enumerable2 = FindCardsWhere((Card c) => c.IsObjective && c.IsInLocation(base.TurnTakerControllerWithoutReplacements.TurnTaker.PlayArea));
                    Log.Debug("Objectives: " + enumerable2.ToRecursiveString());
                    if (enumerable2.Count() > 0)
                    {
                        TurnTaker   turnTaker  = FindTurnTakersWhere((TurnTaker tt) => tt.Identifier == "OblivAeon", ignoreBattleZone: true).FirstOrDefault();
                        IEnumerator coroutine4 = base.GameController.BulkMoveCards(base.TurnTakerController, enumerable2, turnTaker.FindSubDeck("MissionDeck"), toBottom: true, performBeforeDestroyActions: true, null, isDiscard: false, GetCardSource());
                        if (base.UseUnityCoroutines)
                        {
                            yield return(base.GameController.StartCoroutine(coroutine4));
                        }
                        else
                        {
                            base.GameController.ExhaustCoroutine(coroutine4);
                        }
                    }
                    IEnumerable <Card> enumerable3 = FindCardsWhere((Card c) => c.DoKeywordsContain("reward", evenIfUnderCard: true, evenIfFaceDown: true) && !c.IsOutOfGame && c.Owner == base.TurnTakerControllerWithoutReplacements.TurnTaker && (!c.IsUnderCard || !c.Location.OwnerCard.IsIncapacitated), realCardsOnly: false, null, ignoreBattleZone: true);
                    if (enumerable3.Count() > 0)
                    {
                        IEnumerator coroutine5 = base.GameController.BulkMoveCards(base.TurnTakerController, enumerable3, base.Card.UnderLocation);
                        if (base.UseUnityCoroutines)
                        {
                            yield return(base.GameController.StartCoroutine(coroutine5));
                        }
                        else
                        {
                            base.GameController.ExhaustCoroutine(coroutine5);
                        }
                    }
                }
                IEnumerator coroutine6 = RemoveCardsFromGame(cards);
                if (base.UseUnityCoroutines)
                {
                    yield return(base.GameController.StartCoroutine(coroutine6));
                }
                else
                {
                    base.GameController.ExhaustCoroutine(coroutine6);
                }

                IEnumerator coroutine7 = base.GameController.UpdateTurnPhasesForTurnTaker(base.TurnTakerControllerWithoutReplacements, incapacitated: true);
                if (base.UseUnityCoroutines)
                {
                    yield return(base.GameController.StartCoroutine(coroutine7));
                }
                else
                {
                    base.GameController.ExhaustCoroutine(coroutine7);
                }
            }
            else
            {
                RemoveAllTriggers();
            }
        }