From b4c734b49d2ca0d5282849b8690dcc5524106468 Mon Sep 17 00:00:00 2001 From: Sloth Date: Fri, 9 Sep 2011 16:18:25 +0000 Subject: [PATCH] - Added the option "RemoveAllAbilities" to continuous static abilities which will remove triggers and activated abilities (keywords and static abilities coming soon). - Fixed Pithing Needle affecting mana abilities. --- src/main/java/forge/StaticEffects.java | 8 ++++++++ .../forge/card/spellability/Ability_Activated.java | 10 +++++++--- .../java/forge/card/spellability/SpellAbility.java | 14 ++++++++++++++ .../forge/card/staticAbility/StaticAbility.java | 3 ++- .../staticAbility/StaticAbility_Continuous.java | 8 ++++++++ 5 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/main/java/forge/StaticEffects.java b/src/main/java/forge/StaticEffects.java index ef0ac23e200..ab7c92d1695 100644 --- a/src/main/java/forge/StaticEffects.java +++ b/src/main/java/forge/StaticEffects.java @@ -138,6 +138,14 @@ public class StaticEffects { } } } + + //remove abilities + if (params.containsKey("RemoveAllAbilities")) { + SpellAbility[] spellAbility = affectedCard.getSpellAbility(); + for (SpellAbility s : spellAbility) { + s.setTemporarilySuppressed(false); + } + } //remove Types if (params.containsKey("AddType") || params.containsKey("RemoveType")) { diff --git a/src/main/java/forge/card/spellability/Ability_Activated.java b/src/main/java/forge/card/spellability/Ability_Activated.java index 06c5354fd12..973ccb5e7b5 100644 --- a/src/main/java/forge/card/spellability/Ability_Activated.java +++ b/src/main/java/forge/card/spellability/Ability_Activated.java @@ -46,9 +46,13 @@ abstract public class Ability_Activated extends SpellAbility implements java.io. if (AllZone.getStack().isSplitSecondOnStack()) return false; final Card c = getSourceCard(); - if (c.isFaceDown() && isIntrinsic()) // Intrinsic abilities can't be activated by face down cards + if (c.isFaceDown() && isIntrinsic()) { // Intrinsic abilities can't be activated by face down cards return false; - if (c.hasKeyword("CARDNAME's activated abilities can't be activated.")) return false; + } + + if (c.hasKeyword("CARDNAME's activated abilities can't be activated.") || isSuppressed()) { + return false; + } CardList pithing = AllZoneUtil.getPlayerCardsInPlay(AllZone.getHumanPlayer()); pithing.addAll(AllZoneUtil.getPlayerCardsInPlay(AllZone.getComputerPlayer())); @@ -59,7 +63,7 @@ abstract public class Ability_Activated extends SpellAbility implements java.io. } }); - if (pithing.size() != 0) return false; + if (pithing.size() != 0 && !(this instanceof Ability_Mana)) return false; if (!(getRestrictions().canPlay(c, this))) return false; diff --git a/src/main/java/forge/card/spellability/SpellAbility.java b/src/main/java/forge/card/spellability/SpellAbility.java index 61aca0ea4b1..01c2e823266 100644 --- a/src/main/java/forge/card/spellability/SpellAbility.java +++ b/src/main/java/forge/card/spellability/SpellAbility.java @@ -48,6 +48,7 @@ public abstract class SpellAbility { private boolean trigger = false; private int sourceTrigger = -1; private boolean mandatory = false; + private boolean temporarilySuppressed = false; private boolean tapAbility; private boolean untapAbility; @@ -865,6 +866,11 @@ public abstract class SpellAbility { /** {@inheritDoc} */ @Override public String toString() { + + if(isSuppressed()) { + return ""; + } + StringBuilder sb = new StringBuilder(); SpellAbility node = this; @@ -1215,5 +1221,13 @@ public abstract class SpellAbility { public boolean isWrapper() { return false; } + + public void setTemporarilySuppressed(boolean supp) { + temporarilySuppressed = supp; + } + + public boolean isSuppressed() { + return (temporarilySuppressed); + } } diff --git a/src/main/java/forge/card/staticAbility/StaticAbility.java b/src/main/java/forge/card/staticAbility/StaticAbility.java index 8b467a3364a..92afb8c71d9 100644 --- a/src/main/java/forge/card/staticAbility/StaticAbility.java +++ b/src/main/java/forge/card/staticAbility/StaticAbility.java @@ -82,7 +82,8 @@ public class StaticAbility { return 5; if(mapParams.containsKey("AddKeyword") || mapParams.containsKey("AddAbility") - || mapParams.containsKey("AddTrigger") || mapParams.containsKey("RemoveTriggers")) + || mapParams.containsKey("AddTrigger") || mapParams.containsKey("RemoveTriggers") + || mapParams.containsKey("RemoveAllAbilities")) 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 33eee1be489..c692c89009c 100644 --- a/src/main/java/forge/card/staticAbility/StaticAbility_Continuous.java +++ b/src/main/java/forge/card/staticAbility/StaticAbility_Continuous.java @@ -249,6 +249,14 @@ public class StaticAbility_Continuous { trigger.setTemporarilySuppressed(true); } } + + // remove activated abilities + if (params.containsKey("RemoveAllAbilities")) { + ArrayList abilities = affectedCard.getSpellAbilities(); + for (SpellAbility ab : abilities) { + ab.setTemporarilySuppressed(true); + } + } //affectedCard.updateObservers(); } }