diff --git a/.gitattributes b/.gitattributes index 7b33b9d59f0..616114075ab 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9387,6 +9387,7 @@ forge-gui/res/cardsfolder/m/myr_sire.txt svneol=native#text/plain forge-gui/res/cardsfolder/m/myr_superion.txt -text forge-gui/res/cardsfolder/m/myr_turbine.txt svneol=native#text/plain forge-gui/res/cardsfolder/m/myr_welder.txt -text +forge-gui/res/cardsfolder/m/myriad_landscape.txt -text forge-gui/res/cardsfolder/m/myrsmith.txt svneol=native#text/plain forge-gui/res/cardsfolder/m/mysteries_of_the_deep.txt svneol=native#text/plain forge-gui/res/cardsfolder/m/mystic_barrier.txt -text diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index 16bce6961d0..5b8efbbbb87 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -1579,8 +1579,8 @@ public class ComputerUtil { if (logic != null) { if (logic.equals("ChosenLandwalk")) { for (Card c : ai.getOpponent().getLandsInPlay()) { - for (String t : c.getType()) { - if (!invalidTypes.contains(t) && CardType.isALandType(t)) { + for (String t : c.getType().getLandTypes()) { + if (!invalidTypes.contains(t)) { chosen = t; break; } diff --git a/forge-core/src/main/java/forge/card/CardType.java b/forge-core/src/main/java/forge/card/CardType.java index ab48d29d92b..f4c6d457626 100644 --- a/forge-core/src/main/java/forge/card/CardType.java +++ b/forge-core/src/main/java/forge/card/CardType.java @@ -194,6 +194,17 @@ public final class CardType implements Comparable, CardTypeView { } return creatureTypes; } + public Set getLandTypes() { + Set landTypes = new HashSet(); + if (isLand()) { + for (String t : subtypes) { + if (isALandType(t) || isABasicLandType(t)) { + landTypes.add(t); + } + } + } + return landTypes; + } public boolean hasStringType(String t) { if (t.isEmpty()) { @@ -523,7 +534,7 @@ public final class CardType implements Comparable, CardTypeView { return types; } - public static ArrayList getLandTypes() { + public static ArrayList getAllLandTypes() { final ArrayList types = new ArrayList(); types.addAll(Constant.BASIC_TYPES); diff --git a/forge-core/src/main/java/forge/card/CardTypeView.java b/forge-core/src/main/java/forge/card/CardTypeView.java index 9afe593a278..ecc4c8478c9 100644 --- a/forge-core/src/main/java/forge/card/CardTypeView.java +++ b/forge-core/src/main/java/forge/card/CardTypeView.java @@ -14,6 +14,7 @@ public interface CardTypeView extends Iterable { Iterable getSupertypes(); Iterable getSubtypes(); Set getCreatureTypes(); + Set getLandTypes(); boolean hasStringType(String t); boolean hasType(CoreType type); boolean hasSupertype(Supertype supertype); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 93d97dcadd8..d01a3874a20 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -1,5 +1,6 @@ package forge.game.ability.effects; +import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -760,6 +761,18 @@ public class ChangeZoneEffect extends SpellAbilityEffect { fetchList = CardLists.filter(fetchList, Predicates.not(CardPredicates.nameEquals(c.getName()))); } } + if (sa.hasParam("ShareLandType")) { + for (final Card card : chosenCards) { + + fetchList = CardLists.filter(fetchList, new Predicate() { + @Override + public boolean apply(final Card c) { + return c.sharesLandTypeWith(card); + } + + }); + } + } if (totalcmc != null) { if (totcmc >= 0) { fetchList = CardLists.getValidCards(fetchList, "Card.cmcLE" + Integer.toString(totcmc), source.getController(), source); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java index 7462a5267b6..41b5e780685 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java @@ -44,7 +44,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect { } else if (type.equals("Basic Land")) { if (validTypes.isEmpty()) validTypes.addAll(CardType.getBasicTypes()); } else if (type.equals("Land")) { - if (validTypes.isEmpty()) validTypes.addAll(CardType.getLandTypes()); + if (validTypes.isEmpty()) validTypes.addAll(CardType.getAllLandTypes()); } // end if-else if for (final String s : invalidTypes) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index bb7eaf2f84b..c3c9063cfbd 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -5008,6 +5008,19 @@ public class Card extends GameEntity implements Comparable, IIdentifiable return false; } + public final boolean sharesLandTypeWith(final Card c1) { + if (c1 == null) { + return false; + } + + for (final String type : getType().getLandTypes()) { + if (c1.getType().hasSubtype(type)) { + return true; + } + } + return false; + } + public final boolean sharesPermanentTypeWith(final Card c1) { if (c1 == null) { return false; diff --git a/forge-gui/res/cardsfolder/m/myriad_landscape.txt b/forge-gui/res/cardsfolder/m/myriad_landscape.txt new file mode 100644 index 00000000000..4f4c2bb3da4 --- /dev/null +++ b/forge-gui/res/cardsfolder/m/myriad_landscape.txt @@ -0,0 +1,7 @@ +Name:Myriad Landscape +ManaCost:no cost +Types:Land +K:CARDNAME enters the battlefield tapped. +A:AB$ Mana | Cost$ T | Produced$ 1 | SpellDescription$ Add {1} to your mana pool. +A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 2 | ShareLandType$ True | SpellDescription$ Search your library for up to two basic land cards that share a land type, put them onto the battlefield tapped, then shuffle your library. +SVar:Picture:http://www.wizards.com/global/images/magic/general/myriad_landscape.jpg