Ver Fonte

1.7.6 updated card effects

mbunch_kascope há 1 ano atrás
pai
commit
ff61dffe67

+ 1 - 1
Assets/CardBaseEntity/BT20/Black/Digimon/BT20_060.asset

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:53586a495d3e9319fadf358f3d29d9376bcacd034be7e030f10cafe59b32f716
+oid sha256:e15bcc50fada1b8419882ec8d817f478ffea1ab73a5a399a00d11ca0f6504c9d
 size 1592

+ 1 - 1
Assets/CardEffect/BT20/Black/BT20_055.cs

@@ -251,7 +251,7 @@ namespace DCGO.CardEffects.BT20
             {
                 ActivateClass activateClass = new ActivateClass();
                 activateClass.SetUpICardEffect("Place top card face up as bottom security", CanUseCondition, card);
-                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
                 cardEffects.Add(activateClass);
 
                 string EffectDiscription()

+ 2 - 2
Assets/CardEffect/BT20/Black/BT20_059.cs

@@ -28,8 +28,8 @@ namespace DCGO.CardEffects.BT20
             if (timing == EffectTiming.OnEnterFieldAnyone)
             {
                 ActivateClass activateClass = new ActivateClass();
-                activateClass.SetUpICardEffect("", CanUseCondition, card);
-                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
+                activateClass.SetUpICardEffect("<De-Digivolve 2>, then your Digimon or unaffected by Digimon effects", CanUseCondition, card);
+                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
                 cardEffects.Add(activateClass);
 
                 string EffectDiscription()

+ 1 - 1
Assets/CardEffect/BT20/Blue/BT20_102.cs

@@ -283,7 +283,7 @@ namespace DCGO.CardEffects.BT20
                             List<Permanent> destroyTargetPermanents = GManager.instance.turnStateMachine.gameContext.Players
                                                                     .Map(player => player.GetBattleAreaDigimons())
                                                                     .Flat()
-                                                                    .Filter(permanent => savedDigimon.Contains(permanent));
+                                                                    .Filter(permanent => !savedDigimon.Contains(permanent));
 
                             yield return ContinuousController.instance.StartCoroutine(new DestroyPermanentsClass(destroyTargetPermanents, CardEffectCommons.CardEffectHashtable(activateClass)).Destroy());
                         }

+ 1 - 1
Assets/CardEffect/BT20/Green/BT20_038.cs

@@ -2,7 +2,7 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 
-namespace DCGO.CardEffects
+namespace DCGO.CardEffects.BT20
 {
     public class BT20_038 : CEntity_Effect
     {

+ 4 - 4
Assets/CardEffect/BT20/Green/BT20_042.cs

@@ -95,8 +95,8 @@ namespace DCGO.CardEffects.BT20
                         cardEffect: activateClass);
 
                     selectPermanentEffect.SetUpCustomMessage(
-                        "Select 1 Digimon that will be unable to activate [When Digivolving] effects or unsuspend.",
-                        "The opponent is selecting 1 Digimon that will be unable to activate [When Digivolving] effects or unsuspend.");
+                        "Select 1 Digimon or Tamer that will be unable to unsuspend.",
+                        "The opponent is selecting 1 Digimon or Tamer that will be unable to unsuspend.");
 
                     yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
 
@@ -177,8 +177,8 @@ namespace DCGO.CardEffects.BT20
                         cardEffect: activateClass);
 
                     selectPermanentEffect.SetUpCustomMessage(
-                        "Select 1 Digimon that will be unable to activate [When Digivolving] effects or unsuspend.",
-                        "The opponent is selecting 1 Digimon that will be unable to activate [When Digivolving] effects or unsuspend.");
+                        "Select 1 Digimon or Tamer that will be unable to unsuspend.",
+                        "The opponent is selecting 1 Digimon or Tamer that will be unable to unsuspend.");
 
                     yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
 

+ 7 - 10
Assets/CardEffect/BT20/Green/BT20_043.cs

@@ -30,14 +30,11 @@ namespace DCGO.CardEffects.BT20
             #region Reduce Play Cost
             bool HasAccelTraitInPlay(Permanent permanent)
             {
-                if (CardEffectCommons.IsPermanentExistsOnBattleArea(permanent))
+                if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card))
                 {
-                    if (permanent.IsDigimon)
+                    if (permanent.TopCard.EqualsTraits("ACCEL"))
                     {
-                        if (permanent.TopCard.EqualsTraits("Accel"))
-                        {
-                            return true;
-                        }
+                        return true;
                     }
                 }
 
@@ -51,7 +48,7 @@ namespace DCGO.CardEffects.BT20
                 ActivateClass activateClass = new ActivateClass();
                 activateClass.SetUpICardEffect("Reduce the play cost by 5", CanUseCondition, card);
                 activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
-                activateClass.SetHashString("PlayCost-5_BT20_036");
+                activateClass.SetHashString("PlayCost-5_BT20_043");
                 cardEffects.Add(activateClass);
 
                 string EffectDiscription()
@@ -177,7 +174,7 @@ namespace DCGO.CardEffects.BT20
                 {
                     if (card.Owner.HandCards.Contains(card))
                     {
-                        ICardEffect activateClass = card.EffectList(EffectTiming.BeforePayCost).Find(cardEffect => cardEffect.EffectName == "Return 6 [D-Brigade] to get Play Cost -6");
+                        ICardEffect activateClass = card.EffectList(EffectTiming.BeforePayCost).Find(cardEffect => cardEffect.EffectName == "Reduce the play cost by 5");
 
                         if (activateClass != null)
                         {
@@ -290,7 +287,7 @@ namespace DCGO.CardEffects.BT20
 
                 IEnumerator ActivateCoroutine(Hashtable hashtable)
                 {
-                    List<Permanent> suspendTargetPermanents = card.Owner.Enemy.GetBattleAreaPermanents();
+                    List<Permanent> suspendTargetPermanents = card.Owner.Enemy.GetBattleAreaPermanents().Filter(permanent => permanent.IsDigimon);
 
                     yield return ContinuousController.instance.StartCoroutine(new SuspendPermanentsClass(suspendTargetPermanents, CardEffectCommons.CardEffectHashtable(activateClass)).Tap());
 
@@ -405,7 +402,7 @@ namespace DCGO.CardEffects.BT20
 
                 IEnumerator ActivateCoroutine(Hashtable hashtable)
                 {
-                    List<Permanent> suspendTargetPermanents = card.Owner.Enemy.GetBattleAreaPermanents();
+                    List<Permanent> suspendTargetPermanents = card.Owner.Enemy.GetBattleAreaPermanents().Filter(permanent => permanent.IsDigimon);
 
                     yield return ContinuousController.instance.StartCoroutine(new SuspendPermanentsClass(suspendTargetPermanents, CardEffectCommons.CardEffectHashtable(activateClass)).Tap());
 

+ 32 - 35
Assets/CardEffect/BT20/Green/BT20_085.cs

@@ -1,5 +1,6 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Diagnostics;
 
 namespace DCGO.CardEffects.BT20
 {
@@ -31,8 +32,8 @@ namespace DCGO.CardEffects.BT20
                 bool IsProperLevel3(CardSource source)
                 {
                     return source.HasLevel && source.IsLevel3 &&
-                           (source.EqualsTraits("Avian") && source.EqualsTraits("Bird")) &&
-                           CardEffectCommons.CanPlayAsNewPermanent(source, false, activateClass);
+                           (source.ContainsTraits("Avian") || source.ContainsTraits("Bird")) &&
+                           CardEffectCommons.CanPlayAsNewPermanent(source, false, activateClass,SelectCardEffect.Root.Trash);
                 }
 
                 bool CanUseCondition(Hashtable hashtable)
@@ -55,30 +56,26 @@ namespace DCGO.CardEffects.BT20
                     {
                         List<CardSource> selectedTamerCards = new List<CardSource>();
 
-                        SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
-
-                        selectCardEffect.SetUp(
-                                    canTargetCondition: IsShotoKazama,
-                                    canTargetCondition_ByPreSelecetedList: null,
-                                    canEndSelectCondition: null,
-                                    canNoSelect: () => false,
-                                    selectCardCoroutine: SelectCardCoroutine,
-                                    afterSelectCardCoroutine: null,
-                                    message: "Select 1 digivolution card.",
-                                    maxCount: 1,
-                                    canEndNotMax: false,
-                                    isShowOpponent: true,
-                                    mode: SelectCardEffect.Mode.Custom,
-                                    root: SelectCardEffect.Root.Hand,
-                                    customRootCardList: null,
-                                    canLookReverseCard: true,
-                                    selectPlayer: card.Owner,
-                                    cardEffect: activateClass);
-
-                        selectCardEffect.SetUpCustomMessage("Select 1 [Shoto Kazama] to play.", "The opponent is selecting 1 [Shoto Kazama] to play.");
-                        selectCardEffect.SetUpCustomMessage_ShowCard("Digivolution Card");
-
-                        yield return StartCoroutine(selectCardEffect.Activate());
+                        SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
+
+                        selectHandEffect.SetUp(
+                            selectPlayer: card.Owner,
+                            canTargetCondition: IsShotoKazama,
+                            canTargetCondition_ByPreSelecetedList: null,
+                            canEndSelectCondition: null,
+                            maxCount: 1,
+                            canNoSelect: true,
+                            canEndNotMax: false,
+                            isShowOpponent: true,
+                            selectCardCoroutine: SelectCardCoroutine,
+                            afterSelectCardCoroutine: null,
+                            mode: SelectHandEffect.Mode.Custom,
+                            cardEffect: activateClass);
+
+                        selectHandEffect.SetUpCustomMessage("Select 1 card to play.", "The opponent is selecting 1 card to play.");
+                        selectHandEffect.SetUpCustomMessage_ShowCard("Played Card");
+
+                        yield return ContinuousController.instance.StartCoroutine(selectHandEffect.Activate());
 
                         IEnumerator SelectCardCoroutine(CardSource cardSource)
                         {
@@ -87,12 +84,12 @@ namespace DCGO.CardEffects.BT20
                             yield return null;
                         }
 
-                        yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(cardSources: selectedTamerCards, activateClass: activateClass, payCost: false, isTapped: true, root: SelectCardEffect.Root.DigivolutionCards, activateETB: true));
+                        yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(cardSources: selectedTamerCards, activateClass: activateClass, payCost: false, isTapped: false, root: SelectCardEffect.Root.DigivolutionCards, activateETB: true));
                     }
 
-                    if(card.Owner.GetBattleAreaDigimons().Count == 0)
+                    if (card.Owner.GetBattleAreaDigimons().Count == 0)
                     {
-                        if (CardEffectCommons.HasMatchConditionOwnersHand(card, IsProperLevel3))
+                        if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, IsProperLevel3))
                         {
                             List<CardSource> selectedDigimonCards = new List<CardSource>();
 
@@ -118,7 +115,7 @@ namespace DCGO.CardEffects.BT20
 
                             selectCardEffect.SetUpCustomMessage("Select 1 Digimon to play.", "The opponent is selecting 1 Digimon to play.");
 
-                            yield return StartCoroutine(selectCardEffect.Activate());
+                            yield return ContinuousController.instance.StartCoroutine(selectCardEffect.Activate());
 
                             IEnumerator SelectCardCoroutine(CardSource cardSource)
                             {
@@ -127,7 +124,7 @@ namespace DCGO.CardEffects.BT20
                                 yield return null;
                             }
 
-                            yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(cardSources: selectedDigimonCards, activateClass: activateClass, payCost: false, isTapped: true, root: SelectCardEffect.Root.DigivolutionCards, activateETB: true));
+                            yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(cardSources: selectedDigimonCards, activateClass: activateClass, payCost: false, isTapped: false, root: SelectCardEffect.Root.DigivolutionCards, activateETB: true));
                         }
                     }
                 }
@@ -144,7 +141,7 @@ namespace DCGO.CardEffects.BT20
 
                 string EffectDiscription()
                 {
-                    return "[End of Your Turn] By suspending this Tamer, suspend 1 of your opponent's Digimon and, until the end of their turn, 1 of your Digimon with the [Vortex Warrior] trait gets +2000 DP.";
+                    return "[End of Your Turn] By suspending this Tamer, suspend 1 of your opponent's Digimon and, until the end of their turn, 1 of your Digimon with the [Vortex Warriors] trait gets +2000 DP.";
                 }
 
                 bool IsOpponentsDigimon(Permanent permanent)
@@ -155,7 +152,7 @@ namespace DCGO.CardEffects.BT20
                 bool IsYourDigimon(Permanent permanent)
                 {
                     return CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card) &&
-                           permanent.TopCard.EqualsTraits("Vortex Warrior");
+                           permanent.TopCard.EqualsTraits("Vortex Warriors");
                 }
 
                 bool CanUseCondition(Hashtable hashtable)
@@ -214,8 +211,8 @@ namespace DCGO.CardEffects.BT20
                             mode: SelectPermanentEffect.Mode.Custom,
                             cardEffect: activateClass);
 
-                        selectPermanentEffect.SetUpCustomMessage("Select Digimon or Tamer that will get unable to suspend.",
-                        "The opponent is selecting Digimon or Tamer that will get unable to suspend.");
+                        selectPermanentEffect.SetUpCustomMessage("Select Digimon that gets +2000 DP",
+                        "The opponent is selecting Digimon that gets +2000 DP.");
 
                         yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
 

+ 1 - 1
Assets/CardEffect/BT20/Purple/BT20_065.cs

@@ -4,7 +4,7 @@ using System.Collections.Generic;
 
 namespace DCGO.CardEffects.BT20
 {
-    public class WormmonBT20_065 : CEntity_Effect
+    public class BT20_065 : CEntity_Effect
     {
         public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
         {

+ 84 - 97
Assets/CardEffect/BT20/Purple/BT20_066.cs

@@ -86,8 +86,6 @@ namespace DCGO.CardEffects.BT20
                 {
                     if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
                     {                   
-                        
-
                         SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
                         int maxCount = 1;
 
@@ -109,132 +107,127 @@ namespace DCGO.CardEffects.BT20
                     
                     }
 
-                     
-                    if (isExistOnField(card))
+                    if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(card.PermanentOfThisCard(), card))
                     {
-                        if (card.Owner.GetBattleAreaDigimons().Contains(card.PermanentOfThisCard()))
+                        if (card.Owner.HandCards.Count >= 1)
                         {
-                            if (card.Owner.HandCards.Count >= 1)
-                            {
-                                List<CardSource> selectedCards = new List<CardSource>();
+                            List<CardSource> selectedCards = new List<CardSource>();
 
-                                int maxCount = 1;
+                            int maxCount = 1;
 
-                                SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
+                            SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
 
-                                selectHandEffect.SetUp(
-                                    selectPlayer: card.Owner,
-                                    canTargetCondition: CanSelectCardCondition,
-                                    canTargetCondition_ByPreSelecetedList: null,
-                                    canEndSelectCondition: null,
-                                    maxCount: maxCount,
-                                    canNoSelect: true,
-                                    canEndNotMax: false,
-                                    isShowOpponent: true,
-                                    selectCardCoroutine: SelectCardCoroutine,
-                                    afterSelectCardCoroutine: null,
-                                    mode: SelectHandEffect.Mode.Custom,
-                                    cardEffect: activateClass);
+                            selectHandEffect.SetUp(
+                                selectPlayer: card.Owner,
+                                canTargetCondition: CanSelectCardCondition,
+                                canTargetCondition_ByPreSelecetedList: null,
+                                canEndSelectCondition: null,
+                                maxCount: maxCount,
+                                canNoSelect: true,
+                                canEndNotMax: false,
+                                isShowOpponent: true,
+                                selectCardCoroutine: SelectCardCoroutine,
+                                afterSelectCardCoroutine: null,
+                                mode: SelectHandEffect.Mode.Custom,
+                                cardEffect: activateClass);
 
-                                selectHandEffect.SetUpCustomMessage("Select 1 card to DNA digivolve.", "The opponent is selecting 1 card to DNA digivolve.");
-                                selectHandEffect.SetNotShowCard();
+                            selectHandEffect.SetUpCustomMessage("Select 1 card to DNA digivolve.", "The opponent is selecting 1 card to DNA digivolve.");
+                            selectHandEffect.SetNotShowCard();
 
-                                yield return StartCoroutine(selectHandEffect.Activate());
+                            yield return StartCoroutine(selectHandEffect.Activate());
 
-                                IEnumerator SelectCardCoroutine(CardSource cardSource)
-                                {
-                                    selectedCards.Add(cardSource);
+                            IEnumerator SelectCardCoroutine(CardSource cardSource)
+                            {
+                                selectedCards.Add(cardSource);
 
-                                    yield return null;
-                                }
+                                yield return null;
+                            }
 
-                                if (selectedCards.Count >= 1)
+                            if (selectedCards.Count >= 1)
+                            {
+                                foreach (CardSource selectedCard in selectedCards)
                                 {
-                                    foreach (CardSource selectedCard in selectedCards)
+                                    if (selectedCard.CanPlayJogress(true) && selectedCard.CanJogressFromTargetPermanent(card.PermanentOfThisCard(), true))
                                     {
-                                        if (selectedCard.CanPlayJogress(true) && selectedCard.CanJogressFromTargetPermanent(card.PermanentOfThisCard(), true))
-                                        {
-                                            JogressEvoRootsFrameIDs = new int[0];
+                                        JogressEvoRootsFrameIDs = new int[0];
 
-                                            yield return GManager.instance.photonWaitController.StartWait("Stingmon_BT20_066");
+                                        yield return GManager.instance.photonWaitController.StartWait("StingmonBT20_066");
 
-                                            if (card.Owner.isYou || GManager.instance.IsAI)
-                                            {
-                                                GManager.instance.selectJogressEffect.SetUp_SelectDigivolutionRoots
-                                                    (card: selectedCard,
-                                                    isLocal: true,
-                                                    isPayCost: true,
-                                                    canNoSelect: true,
-                                                    endSelectCoroutine_SelectDigivolutionRoots: EndSelectCoroutine_SelectDigivolutionRoots,
-                                                    noSelectCoroutine: null);
+                                        if (card.Owner.isYou || GManager.instance.IsAI)
+                                        {
+                                            GManager.instance.selectJogressEffect.SetUp_SelectDigivolutionRoots
+                                                (card: selectedCard,
+                                                isLocal: true,
+                                                isPayCost: true,
+                                                canNoSelect: true,
+                                                endSelectCoroutine_SelectDigivolutionRoots: EndSelectCoroutine_SelectDigivolutionRoots,
+                                                noSelectCoroutine: null);
 
-                                                GManager.instance.selectJogressEffect.SetUpCustomPermanentConditions(new Func<Permanent, bool>[] { (permanent) => permanent == card.PermanentOfThisCard() });
+                                            GManager.instance.selectJogressEffect.SetUpCustomPermanentConditions(new Func<Permanent, bool>[] { (permanent) => permanent == card.PermanentOfThisCard() });
 
-                                                yield return ContinuousController.instance.StartCoroutine(GManager.instance.selectJogressEffect.SelectDigivolutionRoots());
+                                            yield return ContinuousController.instance.StartCoroutine(GManager.instance.selectJogressEffect.SelectDigivolutionRoots());
 
-                                                IEnumerator EndSelectCoroutine_SelectDigivolutionRoots(List<Permanent> permanents)
+                                            IEnumerator EndSelectCoroutine_SelectDigivolutionRoots(List<Permanent> permanents)
+                                            {
+                                                permanents = permanents.Distinct().ToList();
+
+                                                if (permanents.Count == 2)
                                                 {
-                                                    permanents = permanents.Distinct().ToList();
+                                                    JogressEvoRootsFrameIDs = new int[2];
 
-                                                    if (permanents.Count == 2)
+                                                    for (int i = 0; i < permanents.Count; i++)
                                                     {
-                                                        JogressEvoRootsFrameIDs = new int[2];
-
-                                                        for (int i = 0; i < permanents.Count; i++)
+                                                        if (i < JogressEvoRootsFrameIDs.Length)
                                                         {
-                                                            if (i < JogressEvoRootsFrameIDs.Length)
-                                                            {
-                                                                JogressEvoRootsFrameIDs[i] = permanents[i].PermanentFrame.FrameID;
-                                                            }
+                                                            JogressEvoRootsFrameIDs[i] = permanents[i].PermanentFrame.FrameID;
                                                         }
                                                     }
+                                                }
 
-                                                    if (!permanents.Contains(card.PermanentOfThisCard()))
-                                                    {
-                                                        JogressEvoRootsFrameIDs = new int[0];
-                                                    }
-
-                                                    yield return null;
+                                                if (!permanents.Contains(card.PermanentOfThisCard()))
+                                                {
+                                                    JogressEvoRootsFrameIDs = new int[0];
                                                 }
 
-                                                photonView.RPC("SetJogressEvoRootsFrameIDs", RpcTarget.All, JogressEvoRootsFrameIDs);
+                                                yield return null;
                                             }
 
-                                            else
-                                            {
-                                                GManager.instance.commandText.OpenCommandText("The opponent is choosing a card to DNA digivolve.");
-                                            }
+                                            photonView.RPC("SetJogressEvoRootsFrameIDs", RpcTarget.All, JogressEvoRootsFrameIDs);
+                                        }
+
+                                        else
+                                        {
+                                            GManager.instance.commandText.OpenCommandText("The opponent is choosing a card to DNA digivolve.");
+                                        }
 
-                                            yield return new WaitWhile(() => !endSelect);
-                                            endSelect = false;
+                                        yield return new WaitWhile(() => !endSelect);
+                                        endSelect = false;
 
-                                            GManager.instance.commandText.CloseCommandText();
-                                            yield return new WaitWhile(() => GManager.instance.commandText.gameObject.activeSelf);
+                                        GManager.instance.commandText.CloseCommandText();
+                                        yield return new WaitWhile(() => GManager.instance.commandText.gameObject.activeSelf);
 
-                                            if (JogressEvoRootsFrameIDs.Length == 2)
-                                            {
-                                                yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().ShowCardEffect(new List<CardSource>() { selectedCard }, "Played Card", true, true));
+                                        if (JogressEvoRootsFrameIDs.Length == 2)
+                                        {
+                                            yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().ShowCardEffect(new List<CardSource>() { selectedCard }, "Played Card", true, true));
 
-                                                PlayCardClass playCard = new PlayCardClass(
-                                                    cardSources: new List<CardSource>() { selectedCard },
-                                                    hashtable: CardEffectCommons.CardEffectHashtable(activateClass),
-                                                    payCost: true,
-                                                    targetPermanent: null,
-                                                    isTapped: false,
-                                                    root: SelectCardEffect.Root.Hand,
-                                                    activateETB: true);
+                                            PlayCardClass playCard = new PlayCardClass(
+                                                cardSources: new List<CardSource>() { selectedCard },
+                                                hashtable: CardEffectCommons.CardEffectHashtable(activateClass),
+                                                payCost: true,
+                                                targetPermanent: null,
+                                                isTapped: false,
+                                                root: SelectCardEffect.Root.Hand,
+                                                activateETB: true);
 
-                                                playCard.SetJogress(JogressEvoRootsFrameIDs);
+                                            playCard.SetJogress(JogressEvoRootsFrameIDs);
 
-                                                yield return ContinuousController.instance.StartCoroutine(playCard.PlayCard());
-                                            }
+                                            yield return ContinuousController.instance.StartCoroutine(playCard.PlayCard());
                                         }
                                     }
                                 }
                             }
                         }
                     }
-            
                 }
             }
             #endregion
@@ -336,11 +329,7 @@ namespace DCGO.CardEffects.BT20
                     
                     }
 
-                     IEnumerator ActivateCoroutine(Hashtable _hashtable)
-            {
-                if (isExistOnField(card))
-                {
-                    if (card.Owner.GetBattleAreaDigimons().Contains(card.PermanentOfThisCard()))
+                    if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(card.PermanentOfThisCard(), card))
                     {
                         if (card.Owner.HandCards.Count >= 1)
                         {
@@ -382,9 +371,9 @@ namespace DCGO.CardEffects.BT20
                                 {
                                     if (selectedCard.CanPlayJogress(true) && selectedCard.CanJogressFromTargetPermanent(card.PermanentOfThisCard(), true))
                                     {
-                                         JogressEvoRootsFrameIDs = new int[0];
+                                        JogressEvoRootsFrameIDs = new int[0];
 
-                                        yield return GManager.instance.photonWaitController.StartWait("Stingmon_BT20_066");
+                                        yield return GManager.instance.photonWaitController.StartWait("StingmonBT20_066");
 
                                         if (card.Owner.isYou || GManager.instance.IsAI)
                                         {
@@ -462,8 +451,6 @@ namespace DCGO.CardEffects.BT20
                         }
                     }
                 }
-            }
-                }
             }
             #endregion
 

+ 3 - 3
Assets/CardEffect/BT20/Purple/BT20_074.cs

@@ -96,6 +96,7 @@ namespace DCGO.CardEffects.BT20
             }
             
             #endregion
+
             #region On Play
             if (timing == EffectTiming.OnEnterFieldAnyone)
             {
@@ -180,7 +181,7 @@ namespace DCGO.CardEffects.BT20
 
                 bool CanUseCondition(Hashtable hashtable)
                 {
-                    return CardEffectCommons.CanTriggerOnPlay(hashtable,card);
+                    return CardEffectCommons.CanTriggerWhenDigivolving(hashtable,card);
                 }
 
                 bool CanActivateCondition(Hashtable hashtable)
@@ -219,14 +220,12 @@ namespace DCGO.CardEffects.BT20
                 }
             }
             #endregion
-               
 
             #region All Turns
             if(timing == EffectTiming.WhenReturntoLibraryAnyone || timing == EffectTiming.WhenReturntoHandAnyone ){
                 ActivateClass activateClass = new ActivateClass();
                 activateClass.SetUpICardEffect("If returned, DNA Digivolve", CanUseCondition, card);
                 activateClass.SetUpActivateClass(CanActivateCondition1, ActivateCoroutine, -1, true, EffectDiscription());
-                activateClass.SetIsInheritedEffect(true);
                 activateClass.SetHashString("Dna Digivolve into Imperialdramon");
                 cardEffects.Add(activateClass);
 
@@ -416,6 +415,7 @@ namespace DCGO.CardEffects.BT20
             }
 
             #endregion    
+
         return cardEffects;
 
         }

+ 163 - 172
Assets/CardEffect/BT20/Purple/BT20_076.cs

@@ -5,30 +5,13 @@ using System;
 
 namespace DCGO.CardEffects.BT20
 {
-    public class BT20_076 : CEntity_Effect{
-    
+    public class BT20_076 : CEntity_Effect
+    {    
         public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
         {
-        List<ICardEffect> cardEffects = new List<ICardEffect>();
+            List<ICardEffect> cardEffects = new List<ICardEffect>();
 
-
-        #region Ace - Blast DNA Digivolve
-            
-            if (timing == EffectTiming.OnCounterTiming)
-            {
-                List<BlastDNACondition> blastDNAConditions = new List<BlastDNACondition>
-                {
-                    new("DinoBeemon"),
-                    new("Paildramon")
-                };
-                cardEffects.Add(CardEffectFactory.BlastDNADigivolveEffect(card: card,
-                    blastDNAConditions: blastDNAConditions, condition: null));
-            }
-            
-        #endregion
-
-        #region DNA Digivolution
-            
+            #region DNA Digivolution
             if (timing == EffectTiming.None)
             {
                 AddJogressConditionClass addJogressConditionClass = new AddJogressConditionClass();
@@ -36,17 +19,12 @@ namespace DCGO.CardEffects.BT20
                 addJogressConditionClass.SetUpAddJogressConditionClass(getJogressCondition: GetJogress);
                 addJogressConditionClass.SetNotShowUI(true);
                 cardEffects.Add(addJogressConditionClass);
-                 bool CanUseCondition(Hashtable hashtable)
+
+                bool CanUseCondition(Hashtable hashtable)
                 {
-                if (CardEffectCommons.IsExistOnBattleAreaDigimon(card))
-                    {
-                        return CardEffectCommons.CanTriggerOnPlay(hashtable, card);
-                    }
-                return false;
+                    return true;
                 }
-                
-                //NoCanUseConditionHere
-                
+
                 JogressCondition GetJogress(CardSource cardSource)
                 {
                     if (cardSource == card)
@@ -61,8 +39,7 @@ namespace DCGO.CardEffects.BT20
                                     {
                                         if (permanent.IsDigimon)
                                         {
-                                            if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent,
-                                                    card))
+                                            if (permanent.TopCard.Owner.GetBattleAreaPermanents().Contains(permanent))
                                             {
                                                 if (permanent.TopCard.CardColors.Contains(CardColor.Purple))
                                                 {
@@ -76,10 +53,10 @@ namespace DCGO.CardEffects.BT20
                                     }
                                 }
                             }
-                            
+
                             return false;
                         }
-                        
+
                         bool PermanentCondition2(Permanent permanent)
                         {
                             if (permanent != null)
@@ -90,8 +67,7 @@ namespace DCGO.CardEffects.BT20
                                     {
                                         if (permanent.IsDigimon)
                                         {
-                                            if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent,
-                                                    card))
+                                            if (permanent.TopCard.Owner.GetBattleAreaPermanents().Contains(permanent))
                                             {
                                                 if (permanent.TopCard.CardColors.Contains(CardColor.Red))
                                                 {
@@ -105,186 +81,201 @@ namespace DCGO.CardEffects.BT20
                                     }
                                 }
                             }
-                            
+
                             return false;
                         }
-                        
-                        JogressConditionElement[] elements =
+
+                        JogressConditionElement[] elements = new JogressConditionElement[]
                         {
-                            new(PermanentCondition1, "a level 5 Purple Digimon"),
-                            new(PermanentCondition2, "a level 5 Red Digimon")
+                        new JogressConditionElement(PermanentCondition1, "a level 5 purple Digimon"),
+
+                        new JogressConditionElement(PermanentCondition2, "a level 5 red Digimon"),
                         };
-                        
+
                         JogressCondition jogressCondition = new JogressCondition(elements, 0);
-                        
+
                         return jogressCondition;
                     }
-                    
+
                     return null;
                 }
             }
-            
+
             #endregion
-        
-            #region On Play 
-        if (timing == EffectTiming.OnEnterFieldAnyone){                
 
-            ActivateClass activateClass = new ActivateClass();
-            activateClass.SetUpICardEffect("Delete 1 Digimon", CanUseCondition, card);
-            activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
-            cardEffects.Add(activateClass);
-            string EffectDiscription()
-            {
-                return "[When Digivolving] Delete 1 of your opponent's Digimon with 11000 DP or less. Then, if DNA digivolving, this Digimon may digivolve into [Imperialdramon: Fighter Mode] in the hand or trash without paying the cost.";
-            }
-            bool CanSelectPermanentCondition(Permanent permanent)
-            {
-                if (CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card))
+            #region Ace - Blast DNA Digivolve
+
+            if (timing == EffectTiming.OnCounterTiming)
                 {
-                    if (permanent.DP <= card.Owner.MaxDP_DeleteEffect(11000, activateClass))
+                    List<BlastDNACondition> blastDNAConditions = new List<BlastDNACondition>
                     {
-                        return true;
-                    }
+                        new("Dinobeemon"),
+                        new("Paildramon")
+                    };
+                    cardEffects.Add(CardEffectFactory.BlastDNADigivolveEffect(card: card,
+                        blastDNAConditions: blastDNAConditions, condition: null));
                 }
 
-                return false;
-            }
-            bool CanUseCondition(Hashtable hashtable)
-            {
-                return CardEffectCommons.CanTriggerOnPlay(hashtable, card);
-            }
-            bool CanActivateCondition(Hashtable hashtable)
-            {
-                if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
+            #endregion
+
+            #region On Play 
+            if (timing == EffectTiming.OnEnterFieldAnyone)
+            {                
+
+                ActivateClass activateClass = new ActivateClass();
+                activateClass.SetUpICardEffect("Delete 1 Digimon", CanUseCondition, card);
+                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                cardEffects.Add(activateClass);
+
+                string EffectDiscription()
+                {
+                    return "[On Play] Delete 1 of your opponent's Digimon with 11000 DP or less. Then, if DNA digivolving, this Digimon may digivolve into [Imperialdramon: Fighter Mode] in the hand or trash without paying the cost.";
+                }
+
+                bool CanSelectPermanentCondition(Permanent permanent)
+                {
+                    if (CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card))
                     {
-                        return true;
+                        if (permanent.DP <= card.Owner.MaxDP_DeleteEffect(11000, activateClass))
+                        {
+                            return true;
+                        }
                     }
-                return false;
-            }
-            IEnumerator ActivateCoroutine(Hashtable _hashtable)
+
+                    return false;
+                }
+
+                bool CanUseCondition(Hashtable hashtable)
                 {
-                    if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
+                    return CardEffectCommons.CanTriggerOnPlay(hashtable, card);
+                }
+
+                bool CanActivateCondition(Hashtable hashtable)
+                {
+                    return CardEffectCommons.IsExistOnBattleAreaDigimon(card) &&
+                           CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition);
+                }
+
+                IEnumerator ActivateCoroutine(Hashtable _hashtable)
                     {
-                        int maxCount = Math.Min(1, card.Owner.Enemy.GetBattleAreaPermanents().Count(CanSelectPermanentCondition));
-
-                        SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
-
-                        selectPermanentEffect.SetUp(
-                            selectPlayer: card.Owner,
-                            canTargetCondition: CanSelectPermanentCondition,
-                            canTargetCondition_ByPreSelecetedList: null,
-                            canEndSelectCondition: null,
-                            maxCount: maxCount,
-                            canNoSelect: false,
-                            canEndNotMax: false,
-                            selectPermanentCoroutine: null,
-                            afterSelectPermanentCoroutine: null,
-                            mode: SelectPermanentEffect.Mode.Destroy,
-                            cardEffect: activateClass);
-
-                        yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
-                    }
-                    activateClass.SetUpICardEffect("Digivolve into Imperialdramon: Fightermode", CanUseCondition, card);
-                    activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
-                    cardEffects.Add(activateClass);      
+                        if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
+                        {
+                            int maxCount = Math.Min(1, card.Owner.Enemy.GetBattleAreaPermanents().Count(CanSelectPermanentCondition));
+
+                            SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
+
+                            selectPermanentEffect.SetUp(
+                                selectPlayer: card.Owner,
+                                canTargetCondition: CanSelectPermanentCondition,
+                                canTargetCondition_ByPreSelecetedList: null,
+                                canEndSelectCondition: null,
+                                maxCount: maxCount,
+                                canNoSelect: false,
+                                canEndNotMax: false,
+                                selectPermanentCoroutine: null,
+                                afterSelectPermanentCoroutine: null,
+                                mode: SelectPermanentEffect.Mode.Destroy,
+                                cardEffect: activateClass);
+
+                            yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+                        }
+                        activateClass.SetUpICardEffect("Digivolve into Imperialdramon: Fightermode", CanUseCondition, card);
+                        activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                        cardEffects.Add(activateClass);      
                 
-                    bool CanSelectCardCondition (CardSource cardSource){
-                    return cardSource.EqualsCardName("Imperialdramon: Fighter Mode");
-                    }
+                        bool CanSelectCardCondition (CardSource cardSource){
+                        return cardSource.EqualsCardName("Imperialdramon: Fighter Mode");
+                        }
             
-                }
+                    }
             
                         
             
                 
 
-        }
-            #endregion
-        
-        #region When Digivolving
-        if (timing == EffectTiming.OnEnterFieldAnyone){       
-            ActivateClass activateClass = new ActivateClass();
-            activateClass.SetUpICardEffect("Delete 1 Digimon", CanUseCondition, card);
-            activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
-            cardEffects.Add(activateClass);
-            string EffectDiscription()
-            {
-                return "[When Digivolving] Delete 1 of your opponent's Digimon with 11000 DP or less. Then, if DNA digivolving, this Digimon may digivolve into [Imperialdramon: Fighter Mode] in the hand or trash without paying the cost.";
             }
-            bool CanSelectPermanentCondition(Permanent permanent)
-            {
-                if (CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card))
+                #endregion
+        
+            #region When Digivolving
+            if (timing == EffectTiming.OnEnterFieldAnyone)
+            {       
+                ActivateClass activateClass = new ActivateClass();
+                activateClass.SetUpICardEffect("Delete 1 Digimon", CanUseCondition, card);
+                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                cardEffects.Add(activateClass);
+
+                string EffectDiscription()
                 {
-                    if (permanent.DP <= card.Owner.MaxDP_DeleteEffect(11000, activateClass))
-                    {
-                        return true;
-                    }
+                    return "[When Digivolving] Delete 1 of your opponent's Digimon with 11000 DP or less. Then, if DNA digivolving, this Digimon may digivolve into [Imperialdramon: Fighter Mode] in the hand or trash without paying the cost.";
                 }
 
-                return false;
-            }
-            bool CanUseCondition(Hashtable hashtable)
-            {
-                if (CardEffectCommons.IsExistOnBattleAreaDigimon(card))
-                    {
-                        return CardEffectCommons.CanTriggerOnPlay(hashtable, card);
-                    }
-                return false;
-            }
-            bool CanActivateCondition(Hashtable hashtable)
-            {
-                if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
+                bool CanSelectPermanentCondition(Permanent permanent)
+                {
+                    if (CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card))
                     {
-                        return true;
+                        if (permanent.DP <= card.Owner.MaxDP_DeleteEffect(11000, activateClass))
+                        {
+                            return true;
+                        }
                     }
-                return false;
-            }         
 
-            
-            
-            IEnumerator ActivateCoroutine(Hashtable _hashtable)
+                    return false;
+                }
+
+                bool CanUseCondition(Hashtable hashtable)
+                {
+                    return CardEffectCommons.CanTriggerOnPlay(hashtable, card);
+                }
+
+                bool CanActivateCondition(Hashtable hashtable)
                 {
-                    if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
+                    return CardEffectCommons.IsExistOnBattleAreaDigimon(card) &&
+                           CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition);
+                }
+
+                IEnumerator ActivateCoroutine(Hashtable _hashtable)
                     {
-                        int maxCount = Math.Min(1, card.Owner.Enemy.GetBattleAreaPermanents().Count(CanSelectPermanentCondition));
-
-                        SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
-
-                        selectPermanentEffect.SetUp(
-                            selectPlayer: card.Owner,
-                            canTargetCondition: CanSelectPermanentCondition,
-                            canTargetCondition_ByPreSelecetedList: null,
-                            canEndSelectCondition: null,
-                            maxCount: maxCount,
-                            canNoSelect: false,
-                            canEndNotMax: false,
-                            selectPermanentCoroutine: null,
-                            afterSelectPermanentCoroutine: null,
-                            mode: SelectPermanentEffect.Mode.Destroy,
-                            cardEffect: activateClass);
-
-                        yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
-                    }
-                    activateClass.SetUpICardEffect("Digivolve into Imperialdramon: Fightermode", CanUseCondition, card);
-                    activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
-                    cardEffects.Add(activateClass);      
+                        if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
+                        {
+                            int maxCount = Math.Min(1, card.Owner.Enemy.GetBattleAreaPermanents().Count(CanSelectPermanentCondition));
+
+                            SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
+
+                            selectPermanentEffect.SetUp(
+                                selectPlayer: card.Owner,
+                                canTargetCondition: CanSelectPermanentCondition,
+                                canTargetCondition_ByPreSelecetedList: null,
+                                canEndSelectCondition: null,
+                                maxCount: maxCount,
+                                canNoSelect: false,
+                                canEndNotMax: false,
+                                selectPermanentCoroutine: null,
+                                afterSelectPermanentCoroutine: null,
+                                mode: SelectPermanentEffect.Mode.Destroy,
+                                cardEffect: activateClass);
+
+                            yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+                        }
+                        activateClass.SetUpICardEffect("Digivolve into Imperialdramon: Fightermode", CanUseCondition, card);
+                        activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                        cardEffects.Add(activateClass);      
                 
-                    bool CanSelectCardCondition (CardSource cardSource){
-                    return cardSource.EqualsCardName("Imperialdramon: Fighter Mode");
-                    }
+                        bool CanSelectCardCondition (CardSource cardSource){
+                        return cardSource.EqualsCardName("Imperialdramon: Fighter Mode");
+                        }
             
-                }
+                    }
             
                         
-            if (timing == EffectTiming.OnEnterFieldAnyone){                
+                if (timing == EffectTiming.OnEnterFieldAnyone){                
                 
 
+                }
             }
-        }
-        #endregion
+            #endregion
 
-        return cardEffects;
+            return cardEffects;
                 
-    }
+        }
     }
 }

+ 2 - 20
Assets/CardEffect/BT20/Purple/BT20_077.cs

@@ -72,19 +72,9 @@ namespace DCGO.CardEffects.BT20
 
                 bool CanActivateCondition(Hashtable hashtable)
                 {
-                    if (CardEffectCommons.IsExistOnBattleAreaDigimon(card))
-                    {
-                        if (card.Owner.HandCards.Count > 4)
-                        {
-                            return true;
-                        }
-                    }
-
-                    return false;
+                    return CardEffectCommons.IsExistOnBattleAreaDigimon(card);
                 }
 
-
-
                 IEnumerator ActivateCoroutine(Hashtable hashtable)
                 {
                     List<CardSource> trashed = new List<CardSource>();
@@ -211,15 +201,7 @@ namespace DCGO.CardEffects.BT20
 
                 bool CanActivateCondition(Hashtable hashtable)
                 {
-                    if (CardEffectCommons.IsExistOnBattleAreaDigimon(card))
-                    {
-                        if (card.Owner.HandCards.Count > 4)
-                        {
-                            return true;
-                        }
-                    }
-
-                    return false;
+                    return CardEffectCommons.IsExistOnBattleAreaDigimon(card);
                 }
 
 

+ 2 - 1
Assets/CardEffect/BT20/Purple/BT20_078.cs

@@ -34,12 +34,13 @@ namespace DCGO.CardEffects.BT20
                 ActivateClass activateClass = new ActivateClass();
                 activateClass.SetUpICardEffect("<De-Digivolve 1> 1 your opponent's Digimon", CanUseCondition, card);
                 activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, 1, false, EffectDescription());
+                activateClass.SetHashString("AllTurn_BT20-078");
                 cardEffects.Add(activateClass);
 
                 string EffectDescription()
                 {
                     return
-                        "[All Turns] When effects digivolve your opponent's Digimon, <De-Digivolve 1> 1 of your opponent's Digimon ";
+                        "[All Turns] [Once Per Turn] When effects digivolve your opponent's Digimon, <De-Digivolve 1> 1 of your opponent's Digimon.";
                 }
 
                 bool CanUseCondition(Hashtable hashtable)

+ 1 - 1
Assets/CardEffect/BT20/Purple/BT20_081.cs

@@ -295,7 +295,7 @@ namespace DCGO.CardEffects.BT20
             {
                 ActivateClass activateClass = new ActivateClass();
                 activateClass.SetUpICardEffect("Activate 1 of this Digimon's [When Digivolving] effects", CanUseCondition, card);
-                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
                 cardEffects.Add(activateClass);
 
                 string EffectDiscription()

+ 44 - 3
Assets/CardEffect/BT20/Purple/BT20_089.cs

@@ -37,11 +37,52 @@ namespace DCGO.CardEffects.BT20
 
             #region Start of Your Turn
 
-            if (timing == EffectTiming.OnStartTurn)
+            if (timing == EffectTiming.OnStartMainPhase)
             {
-                cardEffects.Add(CardEffectFactory.SetMemoryTo3TamerEffect(card));
-            }
+                ActivateClass activateClass = new ActivateClass();
+                activateClass.SetUpICardEffect("Memory +1", CanUseCondition, card);
+                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                cardEffects.Add(activateClass);
+
+                string EffectDiscription()
+                {
+                    return "[Start of Your Main Phase] If your opponent has a Digimon, gain 1 memory.";
+                }
+
+                bool CanUseCondition(Hashtable hashtable)
+                {
+                    if (CardEffectCommons.IsExistOnBattleArea(card))
+                    {
+                        if (CardEffectCommons.IsOwnerTurn(card))
+                        {
+                            return true;
+                        }
+                    }
 
+                    return false;
+                }
+
+                bool CanActivateCondition(Hashtable hashtable)
+                {
+                    if (CardEffectCommons.IsExistOnBattleArea(card))
+                    {
+                        if (card.Owner.Enemy.GetBattleAreaDigimons().Count >= 1)
+                        {
+                            if (card.Owner.CanAddMemory(activateClass))
+                            {
+                                return true;
+                            }
+                        }
+                    }
+
+                    return false;
+                }
+
+                IEnumerator ActivateCoroutine(Hashtable _hashtable)
+                {
+                    yield return ContinuousController.instance.StartCoroutine(card.Owner.AddMemory(1, activateClass));
+                }
+            }
             #endregion
 
             #region All Turns

+ 3 - 10
Assets/CardEffect/BT20/Purple/BT20_097.cs

@@ -134,13 +134,6 @@ namespace DCGO.CardEffects.BT20
                     return "[All Turns] When any of your [DexDorugoramon] would leave the battle area, <Delay>.\r\n• By return 1 [Dorumon] from those Digimon's digivolution cards to the hand, you may play 1 [DeathXmon] from your trash without paying the cost.";
                 }
 
-                bool PermanentCondition(Permanent permanent)
-                {
-                    return CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card) &&
-                           permanent.TopCard.EqualsCardName("DexDorugoramon") &&
-                           permanent.willBeRemoveField;
-                }
-
                 bool DexDorugoraWithSource(Permanent permanent)
                 {
                     return CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card) &&
@@ -162,7 +155,7 @@ namespace DCGO.CardEffects.BT20
 
                 bool CanUseCondition(Hashtable hashtable)
                 {
-                    return CardEffectCommons.CanTriggerWhenPermanentRemoveField(hashtable, PermanentCondition) &&
+                    return CardEffectCommons.CanTriggerWhenPermanentRemoveField(hashtable, DexDorugoraWithSource) &&
                            CardEffectCommons.CanDeclareOptionDelayEffect(card);
                 }
 
@@ -182,7 +175,7 @@ namespace DCGO.CardEffects.BT20
 
                         selectPermanentEffect.SetUp(
                             selectPlayer: card.Owner,
-                            canTargetCondition: PermanentCondition,
+                            canTargetCondition: DexDorugoraWithSource,
                             canTargetCondition_ByPreSelecetedList: null,
                             canEndSelectCondition: null,
                             maxCount: 1,
@@ -234,7 +227,7 @@ namespace DCGO.CardEffects.BT20
 
                         yield return StartCoroutine(selectCardEffect.Activate());
 
-                        if(selectedCards.Any(source => !card.Owner.HandCards.Contains(source)))
+                        if(selectedCards.Any(source => card.Owner.HandCards.Contains(source)))
                         {
                             List<CardSource> selectedPlayedCards = new List<CardSource>();
 

+ 1 - 1
Assets/CardEffect/BT20/Purple/BT20_098.cs

@@ -44,7 +44,7 @@ namespace DCGO.CardEffects.BT20
                     {
                         List<CardSource> selectedCardsToReturn = new();
 
-                        int maxCount = Math.Min(1,
+                        int maxCount = Math.Min(3,
                             CardEffectCommons.MatchConditionOpponentsCardCountInTrash(card, CanSelectReturnCardCondition));
 
                         SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();

+ 3 - 3
Assets/CardEffect/BT20/Red/BT20_016.cs

@@ -108,7 +108,7 @@ namespace DCGO.CardEffects.BT20
 
                 string EffectDiscription()
                 {
-                    return "[On Play]For the turn, 1 of your Digimon gains <Piercing> (When this Digimon attacks and deletes an opponent's Digimon and survives the battle, it performs any security checks it normally would) and gets +4000 DP. Then, this Digimon may attack.";
+                    return "[On Play] For the turn, 1 of your Digimon gains <Piercing> (When this Digimon attacks and deletes an opponent's Digimon and survives the battle, it performs any security checks it normally would) and gets +4000 DP. Then, this Digimon may attack.";
                 }
 
                 bool CanSelectPermanentCondition(Permanent permanent)
@@ -123,7 +123,7 @@ namespace DCGO.CardEffects.BT20
 
                 bool CanUseCondition(Hashtable hashtable)
                 {
-                    return CardEffectCommons.CanTriggerOptionMainEffect(hashtable, card);
+                    return CardEffectCommons.CanTriggerOnPlay(hashtable, card);
                 }
 
                 IEnumerator ActivateCoroutine(Hashtable _hashtable)
@@ -185,7 +185,7 @@ namespace DCGO.CardEffects.BT20
             }
             #endregion
 
-            #region On Digivolving
+            #region When Digivolving
             if (timing == EffectTiming.OnEnterFieldAnyone)
             {
                 ActivateClass activateClass = new ActivateClass();

+ 7 - 8
Assets/CardEffect/BT20/White/BT20_083.cs

@@ -1,5 +1,6 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Diagnostics;
 
 namespace DCGO.CardEffects.BT20
 {
@@ -59,7 +60,7 @@ namespace DCGO.CardEffects.BT20
 
                 bool CanSelectCardCondition(CardSource cardSource)
                 {
-                    return cardSource.IsDigimon && !cardSource.EqualsCardName("Omnimon (X Antibody)");
+                    return cardSource.IsDigimon && cardSource.EqualsCardName("Omnimon (X Antibody)");
                 }
 
                 bool CanUseCondition(Hashtable hashtable)
@@ -128,19 +129,16 @@ namespace DCGO.CardEffects.BT20
                 bool CanActivateCondition(Hashtable hashtable)
                 {
                     return CardEffectCommons.CanActivateOnDeletion(card) &&
-                           CardEffectCommons.HasMatchConditionPermanent(isKingDrasil);
+                           CardEffectCommons.HasMatchConditionPermanent(isKingDrasil, true);
                 }
 
                 IEnumerator ActivateCoroutine(Hashtable hashtable)
                 {
                     Permanent breedingPermanent = card.Owner.GetBreedingAreaPermanents()[0];
 
-                    if (isKingDrasil(breedingPermanent))
-                    {
-                        yield return ContinuousController.instance.StartCoroutine(card.Owner.brainStormObject.CloseBrainstrorm(card));
+                    yield return ContinuousController.instance.StartCoroutine(card.Owner.brainStormObject.CloseBrainstrorm(card));
 
-                        yield return ContinuousController.instance.StartCoroutine(breedingPermanent.AddDigivolutionCardsBottom(new List<CardSource>() { card }, activateClass));
-                    }
+                    yield return ContinuousController.instance.StartCoroutine(breedingPermanent.AddDigivolutionCardsBottom(new List<CardSource>() { card }, activateClass));
                 }
             }
             #endregion
@@ -149,8 +147,9 @@ namespace DCGO.CardEffects.BT20
             if (timing == EffectTiming.OnLoseSecurity)
             {
                 ActivateClass activateClass = new ActivateClass();
-                activateClass.SetUpICardEffect("", CanUseCondition, card);
+                activateClass.SetUpICardEffect("play 1 [Omekamon]", CanUseCondition, card);
                 activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
+                activateClass.SetIsInheritedEffect(true);
                 cardEffects.Add(activateClass);
 
                 string EffectDiscription()

+ 2 - 2
Assets/CardEffect/BT20/White/BT20_084.cs

@@ -368,7 +368,7 @@ namespace DCGO.CardEffects.BT20
             if (timing == EffectTiming.OnEndTurn)
             {
                 ActivateClass activateClass = new ActivateClass();
-                activateClass.SetUpICardEffect("Place top card face up as bottom security", CanUseCondition, card);
+                activateClass.SetUpICardEffect("Place top card as top security", CanUseCondition, card);
                 activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
                 cardEffects.Add(activateClass);
 
@@ -393,7 +393,7 @@ namespace DCGO.CardEffects.BT20
                 {
                     // Place this card face up as the bottom security card
                     yield return ContinuousController.instance.StartCoroutine(CardObjectController.AddSecurityCard(
-                        card, toTop: false, faceUp: true));
+                        card, toTop: true, faceUp: false));
 
                     yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>()
                         .CreateRecoveryEffect(card.Owner));

+ 1 - 1
Assets/CardEffect/BT20/White/BT20_092.cs

@@ -193,7 +193,7 @@ namespace DCGO.CardEffects.BT20
                         yield return null;
                     }
 
-                    yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(cardSources: selectedDigivolutionCards, activateClass: activateClass, payCost: false, isTapped: true, root: SelectCardEffect.Root.DigivolutionCards, activateETB: true));
+                    yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(cardSources: selectedDigivolutionCards, activateClass: activateClass, payCost: false, isTapped: false, root: SelectCardEffect.Root.DigivolutionCards, activateETB: true));
 
                     if (selectedDigivolutionCards.Count > 0)
                     {

+ 47 - 36
Assets/CardEffect/BT20/White/BT20_100.cs

@@ -14,13 +14,13 @@ namespace DCGO.CardEffects.BT20
             if (timing == EffectTiming.OptionSkill)
             {
                 ActivateClass activateClass = new ActivateClass();
-                activateClass.SetUpICardEffect("Reveal the top 3 cards, add 1 [Cool Boy] and 1 [Royal Knight] trait", CanUseCondition, card);
+                activateClass.SetUpICardEffect("Reveal the top 3 cards, add 1 [Cool Boy] and 1 [Royal Knight]/[X Antibody] trait", CanUseCondition, card);
                 activateClass.SetUpActivateClass(null, ActivateCoroutine, -1, false, EffectDiscription());
                 cardEffects.Add(activateClass);
 
                 string EffectDiscription()
                 {
-                    return "[Main] Reveal the top 3 cards of your deck. Add 1 [Cool Boy] and 1 card with the [Royal Knight] trait among them to the hand. Return the rest to the bottom of the deck. Then, place this card in the battle area.";
+                    return "[Main] Reveal the top 3 cards of your deck. Add 1 [Cool Boy] and 1 card with the [Royal Knight] or [X Antibody] trait among them to the hand. Return the rest to the bottom of the deck. Then, place this card in the battle area.";
                 }
 
                 bool IsCoolBoy(CardSource cardSource)
@@ -28,9 +28,9 @@ namespace DCGO.CardEffects.BT20
                     return cardSource.EqualsCardName("Cool Boy");
                 }
 
-                bool IsRoyalKnight(CardSource cardSource)
+                bool IsRoyalKnightXAntibody(CardSource cardSource)
                 {
-                    return cardSource.EqualsTraits("Royal Knight");
+                    return cardSource.EqualsTraits("Royal Knight") || cardSource.EqualsTraits("X Antibody");
                 }
 
                 bool CanUseCondition(Hashtable hashtable)
@@ -52,8 +52,8 @@ namespace DCGO.CardEffects.BT20
                             maxCount: 1,
                             selectCardCoroutine: null),
                          new SimplifiedSelectCardConditionClass(
-                            canTargetCondition:IsRoyalKnight,
-                            message: "Select 1 card with [Royal Knight] trait.",
+                            canTargetCondition:IsRoyalKnightXAntibody,
+                            message: "Select 1 card with [Royal Knight]/[X Antibody] trait.",
                             mode: SelectCardEffect.Mode.AddHand,
                             maxCount: 1,
                             selectCardCoroutine: null),
@@ -73,8 +73,10 @@ namespace DCGO.CardEffects.BT20
 
             if (timing == EffectTiming.WhenRemoveField)
             {
+                List<Permanent> deletablePermanents = new List<Permanent>();
+
                 ActivateClass activateClass = new ActivateClass();
-                activateClass.SetUpICardEffect("Play 1 Digimon", CanUseCondition, card);
+                activateClass.SetUpICardEffect("Prevent Removal", CanUseCondition, card);
                 activateClass.SetUpActivateClass(null, ActivateCoroutine, -1, true, EffectDescription());
                 cardEffects.Add(activateClass);
 
@@ -90,6 +92,13 @@ namespace DCGO.CardEffects.BT20
                            permanent.willBeRemoveField;
                 }
 
+                bool SelectableOmni(Permanent permanent)
+                {
+                    return CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card) &&
+                           permanent.TopCard.ContainsCardName("Omnimon") &&
+                           deletablePermanents.Contains(permanent);
+                }
+
                 bool CanUseCondition(Hashtable hashtable)
                 {
                     return CardEffectCommons.CanTriggerWhenPermanentRemoveField(hashtable, PermanentCondition) &&
@@ -98,44 +107,46 @@ namespace DCGO.CardEffects.BT20
 
                 IEnumerator ActivateCoroutine(Hashtable hashtable)
                 {
+                    deletablePermanents = CardEffectCommons.GetPermanentsFromHashtable(hashtable);
+
                     yield return ContinuousController.instance.StartCoroutine(
                         CardEffectCommons.DeletePeremanentAndProcessAccordingToResult(
                             targetPermanents: new List<Permanent>() { card.PermanentOfThisCard() },
                             activateClass: activateClass, successProcess: _ => SuccessProcess(),
                             failureProcess: null));
-                }
 
-                IEnumerator SuccessProcess()
-                {
-                    SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
-
-                    selectPermanentEffect.SetUp(
-                        selectPlayer: card.Owner,
-                        canTargetCondition: PermanentCondition,
-                        canTargetCondition_ByPreSelecetedList: null,
-                        canEndSelectCondition: null,
-                        maxCount: 1,
-                        canNoSelect: true,
-                        canEndNotMax: false,
-                        selectPermanentCoroutine: SelectPermanentCoroutine,
-                        afterSelectPermanentCoroutine: null,
-                        mode: SelectPermanentEffect.Mode.Custom,
-                        cardEffect: activateClass);
-
-                    selectPermanentEffect.SetUpCustomMessage("Select 1 Digimon to prevent removal.", "The opponent is selecting 1 Digimon to prevent removal.");
-
-                    yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
-
-                    IEnumerator SelectPermanentCoroutine(Permanent permanent)
+                    IEnumerator SuccessProcess()
                     {
-                        permanent.willBeRemoveField = false;
+                        SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
 
-                        permanent.HideDeleteEffect();
-                        permanent.HideHandBounceEffect();
-                        permanent.HideDeckBounceEffect();
-                        permanent.HideWillRemoveFieldEffect();
+                        selectPermanentEffect.SetUp(
+                            selectPlayer: card.Owner,
+                            canTargetCondition: SelectableOmni,
+                            canTargetCondition_ByPreSelecetedList: null,
+                            canEndSelectCondition: null,
+                            maxCount: 1,
+                            canNoSelect: false,
+                            canEndNotMax: false,
+                            selectPermanentCoroutine: SelectPermanentCoroutine,
+                            afterSelectPermanentCoroutine: null,
+                            mode: SelectPermanentEffect.Mode.Custom,
+                            cardEffect: activateClass);
+
+                        selectPermanentEffect.SetUpCustomMessage("Select 1 Digimon to prevent removal.", "The opponent is selecting 1 Digimon to prevent removal.");
+
+                        yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+
+                        IEnumerator SelectPermanentCoroutine(Permanent permanent)
+                        {
+                            permanent.willBeRemoveField = false;
+
+                            permanent.HideDeleteEffect();
+                            permanent.HideHandBounceEffect();
+                            permanent.HideDeckBounceEffect();
+                            permanent.HideWillRemoveFieldEffect();
 
-                        yield return null;
+                            yield return null;
+                        }
                     }
                 }
             }

+ 1 - 1
Assets/CardEffect/BT20/Yellow/BT20_033.cs

@@ -18,7 +18,7 @@ namespace DCGO.CardEffects.BT20
                     return targetPermanent.TopCard.HasLevel && targetPermanent.TopCard.Level == 4 && targetPermanent.TopCard.EqualsTraits("ACCEL");
                 }
 
-                cardEffects.Add(CardEffectFactory.AddSelfDigivolutionRequirementStaticEffect(permanentCondition: PermanentCondition, digivolutionCost: 2, ignoreDigivolutionRequirement: false, card: card, condition: null));
+                cardEffects.Add(CardEffectFactory.AddSelfDigivolutionRequirementStaticEffect(permanentCondition: PermanentCondition, digivolutionCost: 3, ignoreDigivolutionRequirement: false, card: card, condition: null));
             }
 
             #endregion

+ 3 - 6
Assets/CardEffect/BT20/Yellow/BT20_036.cs

@@ -30,14 +30,11 @@ namespace DCGO.CardEffects.BT20
             #region Reduce Play Cost
             bool HasAccelTraitInPlay(Permanent permanent)
             {
-                if (CardEffectCommons.IsPermanentExistsOnBattleArea(permanent))
+                if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card))
                 {
-                    if (permanent.IsDigimon)
+                    if (permanent.TopCard.EqualsTraits("ACCEL"))
                     {
-                        if (permanent.TopCard.EqualsTraits("ACCEL"))
-                        {
-                            return true;
-                        }
+                        return true;
                     }
                 }
 

+ 6 - 6
Assets/CardEffect/BT20/Yellow/BT20_037.cs

@@ -111,7 +111,7 @@ namespace DCGO.CardEffects.BT20
                 {
                     if(card.PermanentOfThisCard().DigivolutionCards.Count(IsLevel6) > 0)
                     {
-                        int maxCount = Math.Min(1, card.PermanentOfThisCard().DigivolutionCards.Count(IsLevel6));
+                        int maxCount = card.PermanentOfThisCard().DigivolutionCards.Count(IsLevel6);
                         SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
 
                         selectPermanentEffect.SetUp(
@@ -127,7 +127,7 @@ namespace DCGO.CardEffects.BT20
                             mode: SelectPermanentEffect.Mode.Tap,
                             cardEffect: activateClass);
 
-                        selectPermanentEffect.SetUpCustomMessage("Select 1 Digimon to get +3000DP.", "The opponent is selecting 1 Digimon to get +3000DP.");
+                        selectPermanentEffect.SetUpCustomMessage($"Select {maxCount} Digimon to suspend.", $"The opponent is selecting {maxCount} Digimon to suspend.");
 
                         yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
 
@@ -139,11 +139,11 @@ namespace DCGO.CardEffects.BT20
                         permanentCondition: OpponentsDigimonOrTamer,
                         effectDuration: EffectDuration.UntilOpponentTurnEnd,
                         activateClass: activateClass,
-                        isOnlyActivePhase: true,
+                        isOnlyActivePhase: false,
                         effectName: "Your card can't unsuspend"));
 
                     DisableEffectClass invalidationClass = new DisableEffectClass();
-                    invalidationClass.SetUpICardEffect("Ignore [On Play] Effect of opponent's Tamers", CanUseCondition, card);
+                    invalidationClass.SetUpICardEffect("Ignore [On Play] Effect of opponent's Digimon/Tamers", CanUseCondition, card);
                     invalidationClass.SetUpDisableEffectClass(DisableCondition: InvalidateCondition);
                     card.Owner.Enemy.UntilOpponentTurnEndEffects.Add((_timing) => invalidationClass);
 
@@ -162,13 +162,13 @@ namespace DCGO.CardEffects.BT20
                                 {
                                     if (CardEffectCommons.IsPermanentExistsOnOpponentBattleArea(cardEffect.EffectSourceCard.PermanentOfThisCard(), card))
                                     {
-                                        if (!cardEffect.EffectSourceCard.PermanentOfThisCard().IsOption)
+                                        if (cardEffect.EffectSourceCard.PermanentOfThisCard().IsTamer || cardEffect.EffectSourceCard.PermanentOfThisCard().IsDigimon)
                                         {
                                             if (!cardEffect.EffectSourceCard.PermanentOfThisCard().TopCard.CanNotBeAffected(invalidationClass))
                                             {
                                                 if (cardEffect.IsOnPlay)
                                                 {
-                                                        return true;
+                                                    return true;
                                                 }
                                             }
                                         }

+ 1 - 1
Assets/CardEffect/P/Black/P_174.cs

@@ -102,7 +102,7 @@ namespace DCGO.CardEffects.P
 
                         JogressConditionElement[] elements = new JogressConditionElement[]
                         {
-                        new JogressConditionElement(PermanentCondition1, "a level 5 Blue/Black Digimon"),
+                        new JogressConditionElement(PermanentCondition1, "a level 5 Black/Yellow Digimon"),
 
                         new JogressConditionElement(PermanentCondition2, "a level 5 Purple/Red Digimon"),
                         };

+ 541 - 6
Assets/CardEffect/P/Yellow/P_172.cs

@@ -1,5 +1,6 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 
 namespace DCGO.CardEffects.P
 {
@@ -9,34 +10,568 @@ namespace DCGO.CardEffects.P
         {
             List<ICardEffect> cardEffects = new List<ICardEffect>();
 
+            #region Alternate Digivolution Requirement
+
             if (timing == EffectTiming.None)
+            {
+                static bool PermanentCondition(Permanent targetPermanent)
+                {
+                    return targetPermanent.TopCard.EqualsTraits("NSp") && targetPermanent.TopCard.HasLevel && targetPermanent.TopCard.Level == 5;
+                }
+
+                cardEffects.Add(CardEffectFactory.AddSelfDigivolutionRequirementStaticEffect(permanentCondition: PermanentCondition, digivolutionCost: 3, ignoreDigivolutionRequirement: false, card: card, condition: null));
+            }
+
+            #endregion
+
+            #region DNA
+
+            if (timing == EffectTiming.None)
+            {
+                AddJogressConditionClass addJogressConditionClass = new AddJogressConditionClass();
+                addJogressConditionClass.SetUpICardEffect($"DNA Digivolution", CanUseCondition, card);
+                addJogressConditionClass.SetUpAddJogressConditionClass(getJogressCondition: GetJogress);
+                addJogressConditionClass.SetNotShowUI(true);
+                cardEffects.Add(addJogressConditionClass);
+
+                bool CanUseCondition(Hashtable hashtable)
+                {
+                    return true;
+                }
+
+                JogressCondition GetJogress(CardSource cardSource)
+                {
+                    if (cardSource == card)
+                    {
+                        bool PermanentCondition1(Permanent permanent)
+                        {
+                            if (permanent != null)
+                            {
+                                if (permanent.TopCard != null)
+                                {
+                                    if (permanent.TopCard.Owner == card.Owner)
+                                    {
+                                        if (permanent.IsDigimon)
+                                        {
+                                            if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card))
+                                            {
+                                                if (permanent.TopCard.CardColors.Contains(CardColor.Yellow) || permanent.TopCard.CardColors.Contains(CardColor.Red))
+                                                {
+                                                    if (permanent.Levels_ForJogress(card).Contains(5))
+                                                    {
+                                                        return true;
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+
+                            return false;
+                        }
+
+                        bool PermanentCondition2(Permanent permanent)
+                        {
+                            if (permanent != null)
+                            {
+                                if (permanent.TopCard != null)
+                                {
+                                    if (permanent.TopCard.Owner == card.Owner)
+                                    {
+                                        if (permanent.IsDigimon)
+                                        {
+                                            if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card))
+                                            {
+                                                if (permanent.TopCard.CardColors.Contains(CardColor.Green) || permanent.TopCard.CardColors.Contains(CardColor.Black))
+                                                {
+                                                    if (permanent.Levels_ForJogress(card).Contains(5))
+                                                    {
+                                                        return true;
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+
+                            return false;
+                        }
+
+                        JogressConditionElement[] elements = new JogressConditionElement[]
+                        {
+                        new JogressConditionElement(PermanentCondition1, "a level 5 Yellow/Red Digimon"),
+
+                        new JogressConditionElement(PermanentCondition2, "a level 5 Green/Black Digimon"),
+                        };
+
+                        JogressCondition jogressCondition = new JogressCondition(elements, 0);
+
+                        return jogressCondition;
+                    }
+
+                    return null;
+                }
+            }
+
+            #endregion
+
+            #region Reduce Play Cost
+            bool HasNatureSpiritsCondition(CardSource cardSource)
+            {
+                return CardEffectCommons.IsExistInSecurity(cardSource) &&
+                       cardSource.EqualsCardName("Nature Spirits");
+            }
+
+            #region Before Pay Cost - Condition Effect
+
+            if (timing == EffectTiming.BeforePayCost)
             {
                 ActivateClass activateClass = new ActivateClass();
-                activateClass.SetUpICardEffect("", CanUseCondition, card);
-                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
+                activateClass.SetUpICardEffect("If [Nature Spirits] is in your face up security cards get Play Cost -4", CanUseCondition, card);
+                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                activateClass.SetHashString("PlayCost-4_P_172");
                 cardEffects.Add(activateClass);
 
                 string EffectDiscription()
                 {
-                    return "";
+                    return "When this card would be played, if [Nature Spirits] is in your face up security cards, reduce the play cost by 4.";
                 }
 
-                bool CanUseCondition(Hashtable hashtable)
+                bool CardCondition(CardSource cardSource)
+                {
+                    if (cardSource == card)
+                    {
+                        if (CardEffectCommons.IsExistOnHand(cardSource))
+                        {
+                            return true;
+                        }
+                    }
+
+                    return false;
+                }
+
+                bool CanNoSelect(CardSource cardSource)
                 {
+                    if (cardSource != null)
+                    {
+                        if (cardSource.PayingCost(SelectCardEffect.Root.Hand, null, checkAvailability: false) > cardSource.Owner.MaxMemoryCost)
+                        {
+                            return false;
+                        }
+                    }
+
                     return true;
                 }
 
+                bool CanUseCondition(Hashtable hashtable)
+                {
+                    return CardEffectCommons.CanTriggerWhenPermanentWouldPlay(hashtable, CardCondition);
+                }
+
                 bool CanActivateCondition(Hashtable hashtable)
+                {
+                    if (CardEffectCommons.IsExistOnHand(card))
+                    {
+                        if (CardEffectCommons.HasMatchConditionOwnersSecurity(card, HasNatureSpiritsCondition, false))
+                        {
+                            return true;
+                        }
+                    }
+
+                    return false;
+                }
+
+                IEnumerator ActivateCoroutine(Hashtable _hashtable)
+                {
+                    if (card.Owner.CanReduceCost(null, card))
+                    {
+                        ContinuousController.instance.PlaySE(GManager.instance.GetComponent<Effects>().BuffSE);
+                    }
+
+                    ChangeCostClass changeCostClass = new ChangeCostClass();
+                    changeCostClass.SetUpICardEffect("Play Cost -4", CanUseCondition1, card);
+                    changeCostClass.SetUpChangeCostClass(changeCostFunc: ChangeCost, cardSourceCondition: CardSourceCondition, rootCondition: RootCondition, isUpDown: isUpDown, isCheckAvailability: () => false, isChangePayingCost: () => true);
+                    card.Owner.UntilCalculateFixedCostEffect.Add((_timing) => changeCostClass);
+
+                    bool CanUseCondition1(Hashtable hashtable)
+                    {
+                        return true;
+                    }
+
+                    int ChangeCost(CardSource cardSource, int Cost, SelectCardEffect.Root root, List<Permanent> targetPermanents)
+                    {
+                        if (CardSourceCondition(cardSource))
+                        {
+                            if (RootCondition(root))
+                            {
+                                if (PermanentsCondition(targetPermanents))
+                                {
+                                    int targetCost = 0;
+
+                                    if (CardEffectCommons.HasMatchConditionOwnersSecurity(card, HasNatureSpiritsCondition, false))
+                                        targetCost += 4;
+
+                                    Cost -= targetCost;
+                                }
+                            }
+                        }
+
+                        return Cost;
+                    }
+
+                    bool PermanentsCondition(List<Permanent> targetPermanents)
+                    {
+                        if (targetPermanents == null)
+                        {
+                            return true;
+                        }
+                        else
+                        {
+                            if (targetPermanents.Count((targetPermanent) => targetPermanent != null) == 0)
+                            {
+                                return true;
+                            }
+                        }
+
+                        return false;
+                    }
+
+                    bool CardSourceCondition(CardSource cardSource)
+                    {
+                        return cardSource == card;
+                    }
+
+                    bool RootCondition(SelectCardEffect.Root root)
+                    {
+                        return true;
+                    }
+
+                    bool isUpDown()
+                    {
+                        return true;
+                    }
+
+                    yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.ShowReducedCost(_hashtable));
+                }
+            }
+
+            #endregion
+
+            #region Reduce Play Cost - Not Shown
+
+            if (timing == EffectTiming.None)
+            {
+                ChangeCostClass changeCostClass = new ChangeCostClass();
+                changeCostClass.SetUpICardEffect("Play Cost -4", CanUseCondition, card);
+                changeCostClass.SetUpChangeCostClass(changeCostFunc: ChangeCost, cardSourceCondition: CardSourceCondition, rootCondition: RootCondition, isUpDown: isUpDown, isCheckAvailability: () => true, isChangePayingCost: () => true);
+                changeCostClass.SetNotShowUI(true);
+                cardEffects.Add(changeCostClass);
+
+                bool CanUseCondition(Hashtable hashtable)
+                {
+                    if (card.Owner.HandCards.Contains(card))
+                    {
+                        ICardEffect activateClass = card.EffectList(EffectTiming.BeforePayCost).Find(cardEffect => cardEffect.EffectName == "If [Nature Spirits] is in your face up security cards get Play Cost -4");
+
+                        if (activateClass != null)
+                        {
+                            if (CardEffectCommons.HasMatchConditionOwnersSecurity(card, HasNatureSpiritsCondition, false))
+                            {
+                                return true;
+                            }
+                        }
+                    }
+
+                    return false;
+                }
+
+                int ChangeCost(CardSource cardSource, int Cost, SelectCardEffect.Root root, List<Permanent> targetPermanents)
+                {
+                    if (CardSourceCondition(cardSource))
+                    {
+                        if (RootCondition(root))
+                        {
+                            if (PermanentsCondition(targetPermanents))
+                            {
+                                int targetCount = 0;
+
+                                if (CardEffectCommons.HasMatchConditionOwnersSecurity(card, HasNatureSpiritsCondition, false))
+                                    targetCount += 4;
+
+                                Cost -= targetCount;
+                            }
+                        }
+                    }
+
+                    return Cost;
+                }
+
+                bool PermanentsCondition(List<Permanent> targetPermanents)
+                {
+                    if (targetPermanents == null)
+                    {
+                        return true;
+                    }
+                    else
+                    {
+                        if (targetPermanents.Count((targetPermanent) => targetPermanent != null) == 0)
+                        {
+                            return true;
+                        }
+                    }
+
+                    return false;
+                }
+
+                bool CardSourceCondition(CardSource cardSource)
+                {
+                    if (cardSource != null)
+                    {
+                        if (cardSource == card)
+                        {
+                            return true;
+                        }
+                    }
+
+                    return false;
+                }
+
+                bool RootCondition(SelectCardEffect.Root root)
                 {
                     return true;
                 }
 
-                IEnumerator ActivateCoroutine(Hashtable hashtable)
+                bool isUpDown()
                 {
-                    yield return null;
+                    return true;
                 }
             }
 
+            #endregion
+
+            #endregion
+
+            #region Blocker
+            if (timing == EffectTiming.None)
+            {
+                cardEffects.Add(CardEffectFactory.BlockerSelfStaticEffect(isInheritedEffect: false, card: card, condition: null));
+            }
+            #endregion
+
+            #region On Play
+
+            if (timing == EffectTiming.OnEnterFieldAnyone)
+            {
+                ActivateClass activateClass = new ActivateClass();
+                activateClass.SetUpICardEffect("1 Digimon gets -5000DP, then delete 1 with 5000DP or less", CanUseCondition, card);
+                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                cardEffects.Add(activateClass);
+
+                string EffectDiscription()
+                {
+                    return "[On Play] 1 of your opponent's Digimon gets -5000 DP for the turn. Then, delete 1 of their Digimon with 5000 DP or less.";
+                }
+
+                bool IsDigimonWithCorrectDP(Permanent permanent)
+                {
+                    if (CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card))
+                    {
+                        if (permanent.DP <= card.Owner.MaxDP_DeleteEffect(5000, activateClass))
+                        {
+                            return true;
+                        }
+                    }
+
+                    return false;
+                }
+
+                bool CanSelectPermanentCondition(Permanent permanent)
+                {
+                    return CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card);
+                }
+
+                bool CanUseCondition(Hashtable hashtable)
+                {
+                    return CardEffectCommons.CanTriggerOnPlay(hashtable, card);
+                }
+
+                bool CanActivateCondition(Hashtable hashtable)
+                {
+                    return CardEffectCommons.IsExistOnBattleArea(card) &&
+                           CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition);
+                }
+
+                IEnumerator ActivateCoroutine(Hashtable _hashtable)
+                {
+                    if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
+                    {
+                        Permanent selectedPermanent = null;
+
+                        SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
+
+                        selectPermanentEffect.SetUp(
+                            selectPlayer: card.Owner,
+                            canTargetCondition: CanSelectPermanentCondition,
+                            canTargetCondition_ByPreSelecetedList: null,
+                            canEndSelectCondition: null,
+                            maxCount: 1,
+                            canNoSelect: false,
+                            canEndNotMax: false,
+                            selectPermanentCoroutine: SelectTargetCoroutine,
+                            afterSelectPermanentCoroutine: null,
+                            mode: SelectPermanentEffect.Mode.Custom,
+                            cardEffect: activateClass);
+
+                        yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+
+                        IEnumerator SelectTargetCoroutine(Permanent permanent)
+                        {
+                            selectedPermanent = permanent;
+                            yield return null;
+                        }
+
+                        if(selectedPermanent != null)
+                        {
+                            yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.ChangeDigimonDP(
+                                targetPermanent: selectedPermanent, 
+                                changeValue: 5000, 
+                                effectDuration: EffectDuration.UntilEachTurnEnd, 
+                                activateClass: activateClass));
+                        }
+                    }
+
+                    if (CardEffectCommons.HasMatchConditionPermanent(IsDigimonWithCorrectDP))
+                    {
+                        SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
+
+                        selectPermanentEffect.SetUp(
+                            selectPlayer: card.Owner,
+                            canTargetCondition: IsDigimonWithCorrectDP,
+                            canTargetCondition_ByPreSelecetedList: null,
+                            canEndSelectCondition: null,
+                            maxCount: 1,
+                            canNoSelect: false,
+                            canEndNotMax: false,
+                            selectPermanentCoroutine: null,
+                            afterSelectPermanentCoroutine: null,
+                            mode: SelectPermanentEffect.Mode.Destroy,
+                            cardEffect: activateClass);
+
+                        yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+                    }
+                }
+            }
+
+            #endregion
+
+            #region On Deletion
+
+            if (timing == EffectTiming.OnDestroyedAnyone)
+            {
+                ActivateClass activateClass = new ActivateClass();
+                activateClass.SetUpICardEffect("1 Digimon gets -5000DP, then delete 1 with 5000DP or less", CanUseCondition, card);
+                activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
+                cardEffects.Add(activateClass);
+
+                string EffectDiscription()
+                {
+                    return "[On Deletion] 1 of your opponent's Digimon gets -5000 DP for the turn. Then, delete 1 of their Digimon with 5000 DP or less.";
+                }
+
+                bool IsDigimonWithCorrectDP(Permanent permanent)
+                {
+                    if (CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card))
+                    {
+                        if (permanent.DP <= card.Owner.MaxDP_DeleteEffect(5000, activateClass))
+                        {
+                            return true;
+                        }
+                    }
+
+                    return false;
+                }
+
+                bool CanSelectPermanentCondition(Permanent permanent)
+                {
+                    return CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card);
+                }
+
+                bool CanUseCondition(Hashtable hashtable)
+                {
+                    return CardEffectCommons.CanTriggerOnDeletion(hashtable, card);
+                }
+
+                bool CanActivateCondition(Hashtable hashtable)
+                {
+                    return CardEffectCommons.CanActivateOnDeletion(card) &&
+                           CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition);
+                }
+
+                IEnumerator ActivateCoroutine(Hashtable _hashtable)
+                {
+                    if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
+                    {
+                        Permanent selectedPermanent = null;
+
+                        SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
+
+                        selectPermanentEffect.SetUp(
+                            selectPlayer: card.Owner,
+                            canTargetCondition: CanSelectPermanentCondition,
+                            canTargetCondition_ByPreSelecetedList: null,
+                            canEndSelectCondition: null,
+                            maxCount: 1,
+                            canNoSelect: false,
+                            canEndNotMax: false,
+                            selectPermanentCoroutine: SelectTargetCoroutine,
+                            afterSelectPermanentCoroutine: null,
+                            mode: SelectPermanentEffect.Mode.Custom,
+                            cardEffect: activateClass);
+
+                        yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+
+                        IEnumerator SelectTargetCoroutine(Permanent permanent)
+                        {
+                            selectedPermanent = permanent;
+                            yield return null;
+                        }
+
+                        if (selectedPermanent != null)
+                        {
+                            yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.ChangeDigimonDP(
+                                targetPermanent: selectedPermanent,
+                                changeValue: 5000,
+                                effectDuration: EffectDuration.UntilEachTurnEnd,
+                                activateClass: activateClass));
+                        }
+                    }
+
+                    if (CardEffectCommons.HasMatchConditionPermanent(IsDigimonWithCorrectDP))
+                    {
+                        SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
+
+                        selectPermanentEffect.SetUp(
+                            selectPlayer: card.Owner,
+                            canTargetCondition: IsDigimonWithCorrectDP,
+                            canTargetCondition_ByPreSelecetedList: null,
+                            canEndSelectCondition: null,
+                            maxCount: 1,
+                            canNoSelect: false,
+                            canEndNotMax: false,
+                            selectPermanentCoroutine: null,
+                            afterSelectPermanentCoroutine: null,
+                            mode: SelectPermanentEffect.Mode.Destroy,
+                            cardEffect: activateClass);
+
+                        yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+                    }
+                }
+            }
+
+            #endregion
+
             return cardEffects;
         }
     }