From 9170a06da0a1f53b297a7a34ba89a8028640ffad Mon Sep 17 00:00:00 2001 From: Sloth Date: Mon, 5 Sep 2011 17:04:36 +0000 Subject: [PATCH] - Added the option to remove triggered abilities with continuous static abilities. - Added it to some cards that currently still use stAnimate. --- res/cardsfolder/b/blood_moon.txt | 1 + res/cardsfolder/c/contaminated_ground.txt | 1 + res/cardsfolder/l/lignify.txt | 1 + res/cardsfolder/l/lush_growth.txt | 1 + res/cardsfolder/m/magus_of_the_moon.txt | 1 + src/main/java/forge/StaticEffects.java | 2 +- .../java/forge/card/staticAbility/StaticAbility.java | 2 +- .../card/staticAbility/StaticAbility_Continuous.java | 8 ++++++++ src/main/java/forge/card/trigger/Trigger.java | 12 +++++++++++- src/main/java/forge/card/trigger/TriggerHandler.java | 8 +++++++- 10 files changed, 33 insertions(+), 4 deletions(-) diff --git a/res/cardsfolder/b/blood_moon.txt b/res/cardsfolder/b/blood_moon.txt index 853d1623d39..b20458fc8d9 100644 --- a/res/cardsfolder/b/blood_moon.txt +++ b/res/cardsfolder/b/blood_moon.txt @@ -2,6 +2,7 @@ Name:Blood Moon ManaCost:2 R Types:Enchantment Text:no text +S:Mode$ Continuous | Affected$ Land.nonBasic | RemoveTriggers$ True K:stAnimateAll:Land.nonBasic:no change/no change/Overwrite:Land,Mountain,RemoveSubTypes:no colors:Overwrite:No Condition:Nonbasic lands are Mountains. SVar:RemRandomDeck:True SVar:Rarity:Rare diff --git a/res/cardsfolder/c/contaminated_ground.txt b/res/cardsfolder/c/contaminated_ground.txt index 9f5657ffb94..cef78204e59 100644 --- a/res/cardsfolder/c/contaminated_ground.txt +++ b/res/cardsfolder/c/contaminated_ground.txt @@ -4,6 +4,7 @@ Types:Enchantment Aura Text:no text K:Enchant land A:SP$ Attach | Cost$ 1 B | ValidTgts$ Land | AILogic$ Curse +S:Mode$ Continuous | Affected$ Card.EnchantedBy | RemoveTriggers$ True K:stAnimateEnchanted:Land:no change/no change/Overwrite:Land,Swamp,RemoveSubTypes:no colors:Overwrite:No Condition:Enchanted land is a Swamp. T:Mode$ Taps | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigLose | TriggerDescription$ Whenever enchanted land becomes tapped, its controller loses 2 life. SVar:TrigLose:AB$LoseLife | Cost$ 0 | Defined$ TriggeredCardController | LifeAmount$ 2 diff --git a/res/cardsfolder/l/lignify.txt b/res/cardsfolder/l/lignify.txt index 3adc894d862..85f595c0589 100644 --- a/res/cardsfolder/l/lignify.txt +++ b/res/cardsfolder/l/lignify.txt @@ -4,6 +4,7 @@ Types:Tribal Enchantment Treefolk Aura Text:no text K:Enchant creature A:SP$ Attach | Cost$ 1 G | ValidTgts$ Creature | AILogic$ Curse +S:Mode$ Continuous | Affected$ Card.EnchantedBy | RemoveTriggers$ True K:stAnimateEnchanted:Creature:0/4/Overwrite:Creature,Treefolk,Overwrite:no colors:Overwrite:No condition:Enchanted creature is a 0/4 Treefolk with no abilities. SVar:RemAIDeck:True SVar:Rarity:Common diff --git a/res/cardsfolder/l/lush_growth.txt b/res/cardsfolder/l/lush_growth.txt index 2893b5aa308..57cb36e9aab 100644 --- a/res/cardsfolder/l/lush_growth.txt +++ b/res/cardsfolder/l/lush_growth.txt @@ -4,6 +4,7 @@ Types:Enchantment Aura Text:no text K:Enchant land A:SP$ Attach | Cost$ G | ValidTgts$ Land | AILogic$ Pump +S:Mode$ Continuous | Affected$ Card.EnchantedBy | RemoveTriggers$ True K:stAnimateEnchanted:Land:no change/no change/Overwrite:Land,Mountain,Forest,Plains,RemoveSubTypes:no colors:Overwrite:No Condition:Enchanted land is a Mountain, Forest, and Plains. SVar:RemRandomDeck:True SVar:Rarity:Common diff --git a/res/cardsfolder/m/magus_of_the_moon.txt b/res/cardsfolder/m/magus_of_the_moon.txt index fa179dfd9eb..0a358000252 100644 --- a/res/cardsfolder/m/magus_of_the_moon.txt +++ b/res/cardsfolder/m/magus_of_the_moon.txt @@ -3,6 +3,7 @@ ManaCost:2 R Types:Creature Human Wizard Text:no text PT:2/2 +S:Mode$ Continuous | Affected$ Land.nonBasic | RemoveTriggers$ True K:stAnimateAll:Land.nonBasic:no change/no change/Overwrite:Land,Mountain,RemoveSubTypes:no colors:Overwrite:No Condition:Nonbasic lands are Mountains. SVar:RemRandomDeck:True SVar:Rarity:Rare diff --git a/src/main/java/forge/StaticEffects.java b/src/main/java/forge/StaticEffects.java index 17a674ccb40..c68c57526e4 100644 --- a/src/main/java/forge/StaticEffects.java +++ b/src/main/java/forge/StaticEffects.java @@ -34,7 +34,7 @@ public class StaticEffects { } staticEffects = new ArrayList(); - AllZone.getTriggerHandler().removeTemporaryTriggers(); + AllZone.getTriggerHandler().cleanUpTemporaryTriggers(); } /** diff --git a/src/main/java/forge/card/staticAbility/StaticAbility.java b/src/main/java/forge/card/staticAbility/StaticAbility.java index 9c49ebc5762..8b467a3364a 100644 --- a/src/main/java/forge/card/staticAbility/StaticAbility.java +++ b/src/main/java/forge/card/staticAbility/StaticAbility.java @@ -82,7 +82,7 @@ public class StaticAbility { return 5; if(mapParams.containsKey("AddKeyword") || mapParams.containsKey("AddAbility") - || mapParams.containsKey("AddTrigger")) + || mapParams.containsKey("AddTrigger") || mapParams.containsKey("RemoveTriggers")) return 6; if(mapParams.containsKey("CharacteristicDefining")) diff --git a/src/main/java/forge/card/staticAbility/StaticAbility_Continuous.java b/src/main/java/forge/card/staticAbility/StaticAbility_Continuous.java index ee21e125ccd..1d07c7ea2ff 100644 --- a/src/main/java/forge/card/staticAbility/StaticAbility_Continuous.java +++ b/src/main/java/forge/card/staticAbility/StaticAbility_Continuous.java @@ -203,6 +203,14 @@ public class StaticAbility_Continuous { affectedCard.addTrigger(actualTrigger); AllZone.getTriggerHandler().registerTrigger(actualTrigger); } + + // remove triggers + if (params.containsKey("RemoveTriggers") || params.containsKey("RemoveAllAbilities")) { + ArrayList triggers = affectedCard.getTriggers(); + for (Trigger trigger : triggers) { + trigger.setSuppressed(true); + } + } //affectedCard.updateObservers(); } } diff --git a/src/main/java/forge/card/trigger/Trigger.java b/src/main/java/forge/card/trigger/Trigger.java index 94257766d71..dadc6a1bc37 100644 --- a/src/main/java/forge/card/trigger/Trigger.java +++ b/src/main/java/forge/card/trigger/Trigger.java @@ -207,7 +207,7 @@ public abstract class Trigger { * @return a {@link java.lang.String} object. */ public String toString() { - if (mapParams.containsKey("TriggerDescription")) { + if (mapParams.containsKey("TriggerDescription") && !isSuppressed()) { return mapParams.get("TriggerDescription").replace("CARDNAME", hostCard.getName()); } else return ""; } @@ -523,4 +523,14 @@ public abstract class Trigger { public boolean isTemporary() { return temporary; } + + protected boolean suppressed = false; + + public void setSuppressed(boolean supp) { + suppressed = supp; + } + + public boolean isSuppressed() { + return suppressed; + } } diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index 68b31e9609f..df22d21301a 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -253,13 +253,16 @@ public class TriggerHandler { *

removeTemporaryTriggers.

* */ - public final void removeTemporaryTriggers() { + public final void cleanUpTemporaryTriggers() { for (int i = 0; i < registeredTriggers.size(); i++) { if (registeredTriggers.get(i).isTemporary()) { registeredTriggers.get(i).hostCard.removeTrigger(registeredTriggers.get(i)); registeredTriggers.remove(i); } } + for (int i = 0; i < registeredTriggers.size(); i++) { + registeredTriggers.get(i).setSuppressed(false); + } } /** @@ -365,6 +368,9 @@ public class TriggerHandler { if (!regtrig.performTest(runParams)) { return false; //Test failed. } + if (regtrig.isSuppressed()) { + return false; //Trigger removed by effect + } //Torpor Orb check CardList torporOrbs = AllZoneUtil.getCardsInPlay("Torpor Orb");