diff --git a/.gitattributes b/.gitattributes index 8cf94edf91b..65e0c8e89f8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3428,6 +3428,7 @@ res/cardsfolder/g/greenhilt_trainee.txt svneol=native#text/plain res/cardsfolder/g/greenseeker.txt svneol=native#text/plain res/cardsfolder/g/greenweaver_druid.txt svneol=native#text/plain res/cardsfolder/g/gremlin_mine.txt svneol=native#text/plain +res/cardsfolder/g/grid_monitor.txt -text res/cardsfolder/g/grief_tyrant.txt -text svneol=unset#text/plain res/cardsfolder/g/griffin_canyon.txt svneol=native#text/plain res/cardsfolder/g/griffin_guide.txt svneol=native#text/plain @@ -10276,6 +10277,7 @@ src/main/java/forge/card/spellability/Target_Choices.java svneol=native#text/pla src/main/java/forge/card/spellability/Target_Selection.java svneol=native#text/plain src/main/java/forge/card/spellability/package-info.java svneol=native#text/plain src/main/java/forge/card/staticAbility/StaticAbility.java svneol=native#text/plain +src/main/java/forge/card/staticAbility/StaticAbility_CantBeCast.java -text src/main/java/forge/card/staticAbility/StaticAbility_Continuous.java svneol=native#text/plain src/main/java/forge/card/staticAbility/StaticAbility_PreventDamage.java -text src/main/java/forge/card/staticAbility/package-info.java svneol=native#text/plain diff --git a/res/cardsfolder/g/grid_monitor.txt b/res/cardsfolder/g/grid_monitor.txt new file mode 100644 index 00000000000..0cae58d1168 --- /dev/null +++ b/res/cardsfolder/g/grid_monitor.txt @@ -0,0 +1,10 @@ +Name:Grid Monitor +ManaCost:4 +Types:Artifact Creature Construct +Text:no text +PT:4/6 +S:Mode$ CantBeCast | ValidCard$ Creature.YouCtrl | Description$ You can't cast creature spells. +SVar:RemAIDeck:True +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/grid_monitor.jpg +End \ No newline at end of file diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index ca3e75fa56f..0147e160f1b 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -3895,6 +3895,17 @@ public class Card extends GameEntity implements Comparable { * @return a boolean. */ public final boolean isUnCastable() { + //Prevent Damage static abilities + CardList allp = AllZoneUtil.getCardsIn(Zone.Battlefield); + for (Card ca : allp) { + ArrayList staticAbilities = ca.getStaticAbilities(); + for (StaticAbility stAb : staticAbilities) { + if(stAb.applyAbility("CantBeCast", this)) { + return true; + } + } + } + return unCastable; } diff --git a/src/main/java/forge/card/cardFactory/CardFactoryUtil.java b/src/main/java/forge/card/cardFactory/CardFactoryUtil.java index 5a17d3ab580..6576b54e754 100644 --- a/src/main/java/forge/card/cardFactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardFactory/CardFactoryUtil.java @@ -19,6 +19,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; import java.util.Map.Entry; import java.util.Random; @@ -1021,7 +1022,11 @@ public class CardFactoryUtil { sourceCard.setBaseDefense(defense); sourceCard.setIntrinsicKeyword(sourceCard.getPrevIntrinsicKeyword()); sourceCard.setType(sourceCard.getPrevType()); - sourceCard.turnFaceUp(); + + //Run triggers + Map runParams = new TreeMap(); + runParams.put("Card", sourceCard); + AllZone.getTriggerHandler().runTrigger("TurnFaceUp", runParams); } @Override @@ -1104,7 +1109,6 @@ public class CardFactoryUtil { @Override public void resolve() { sourceCard.getController().drawCard(); - sourceCard.cycle(); } }; cycle.setIsCycling(true); diff --git a/src/main/java/forge/card/staticAbility/StaticAbility.java b/src/main/java/forge/card/staticAbility/StaticAbility.java index f467d821387..d04c37624db 100644 --- a/src/main/java/forge/card/staticAbility/StaticAbility.java +++ b/src/main/java/forge/card/staticAbility/StaticAbility.java @@ -168,6 +168,22 @@ public class StaticAbility { return in; } + //apply the ability if it has the right mode + public boolean applyAbility(String mode, Card card) { + + //don't apply the ability if it hasn't got the right mode + if (!mapParams.get("Mode").equals(mode)) + return false; + + if (isSuppressed() || !checkConditions()) + return false; + + if (mode.equals("CantBeCast")) + return StaticAbility_CantBeCast.applyCantBeCastAbility(this, card); + + return false; + } + public boolean checkConditions() { Player controller = hostCard.getController(); diff --git a/src/main/java/forge/card/staticAbility/StaticAbility_CantBeCast.java b/src/main/java/forge/card/staticAbility/StaticAbility_CantBeCast.java new file mode 100644 index 00000000000..a256cf991f7 --- /dev/null +++ b/src/main/java/forge/card/staticAbility/StaticAbility_CantBeCast.java @@ -0,0 +1,25 @@ +package forge.card.staticAbility; + +import java.util.HashMap; + +import forge.Card; + +public class StaticAbility_CantBeCast { + + /** + * + * TODO Write javadoc for this method. + * @param stAb a StaticAbility + */ + public static boolean applyCantBeCastAbility(final StaticAbility stAb, Card card) { + HashMap params = stAb.getMapParams(); + Card hostCard = stAb.getHostCard(); + + if(params.containsKey("ValidCard") && !card.isValid(params.get("ValidCard").split(","), hostCard.getController(), hostCard)) { + return false; + } + + return true; + } + +}