diff --git a/res/card-pictures.txt b/res/card-pictures.txt index a500e7c6581..d5b22823664 100644 --- a/res/card-pictures.txt +++ b/res/card-pictures.txt @@ -38,6 +38,9 @@ snow_covered_mountain.jpg http://www.wizards.com/global/images/magic/gene snow_covered_mountain1.jpg http://www.wizards.com/global/images/magic/general/snow_covered_mountain.jpg snow_covered_mountain2.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg snow_covered_mountain3.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg +roiling_terrain.jpg http://www.wizards.com/global/images/magic/general/roiling_terrain.jpg +tectonic_edge.jpg http://www.wizards.com/global/images/magic/general/tectonic_edge.jpg +evolving_wilds.jpg http://www.wizards.com/global/images/magic/general/evolving_wilds.jpg lorthos_the_tidemaker.jpg http://www.wizards.com/global/images/magic/general/lorthos_the_tidemaker.jpg adarkar_wastes.jpg http://www.wizards.com/global/images/magic/general/adarkar_wastes.jpg brushland.jpg http://www.wizards.com/global/images/magic/general/brushland.jpg diff --git a/res/cards.txt b/res/cards.txt index 3a7489f9316..ec421147dba 100644 --- a/res/cards.txt +++ b/res/cards.txt @@ -1,3 +1,19 @@ +Roiling Terrain +2 R R +Sorcery +Destroy target land, then Roiling Terrain deals damage to that land's controller equal to the number of land cards in that player's graveyard. + +Tectonic Edge +no cost +Land +no text +tap: add 1 + +Evolving Wilds +no cost +Land +no text + Lorthos, the Tidemaker 5 U U U Legendary Creature Octopus diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 8c7b6a74eb0..ec430496ca7 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -7818,6 +7818,66 @@ public class CardFactory implements NewConstants { card.clearSpellAbility(); card.addSpellAbility(spell); }//*************** END ************ END ************************** + + //*************** START *********** START ************************** + else if(cardName.equals("Roiling Terrain")) { + SpellAbility spell = new Spell(card) { + + private static final long serialVersionUID = -65124658746L; + + @Override + public void resolve() { + if(AllZone.GameAction.isCardInPlay(getTargetCard()) + && CardFactoryUtil.canTarget(card, getTargetCard())) { + AllZone.GameAction.destroy(getTargetCard()); + CardList Grave = new CardList(AllZone.getZone(Constant.Zone.Graveyard, getTargetCard().getController()).getCards()); + int Damage = (Grave.getType("Land")).size(); + AllZone.GameAction.getPlayerLife(getTargetCard().getController()).subtractLife(Damage); + } + } + @Override + public void chooseTargetAI() { + //target basic land that Human only has 1 or 2 in play + CardList land = new CardList(AllZone.Human_Play.getCards()); + land = land.getType("Land"); + + Card target = null; + + String[] name = {"Forest", "Swamp", "Plains", "Mountain", "Island"}; + for(int i = 0; i < name.length; i++) + if(land.getName(name[i]).size() == 1) { + target = land.getName(name[i]).get(0); + break; + } + + //see if there are only 2 lands of the same type + if(target == null) { + for(int i = 0; i < name.length; i++) + if(land.getName(name[i]).size() == 2) { + target = land.getName(name[i]).get(0); + break; + } + }//if + if(target == null) { + land.shuffle(); + target = land.get(0); + } + setTargetCard(target); + }//chooseTargetAI() + + @Override + public boolean canPlayAI() { + CardList land = new CardList(AllZone.Human_Play.getCards()); + land = land.getType("Land"); + return land.size() != 0; + } + };//SpellAbility + spell.setBeforePayMana(CardFactoryUtil.input_targetType(spell, "Land")); + card.clearSpellAbility(); + card.addSpellAbility(spell); + + }//*************** END ************ END ************************** + //*************** START *********** START ************************** else if(cardName.equals("Volcanic Awakening")) { SpellAbility spell = new Spell(card) { diff --git a/src/forge/CardFactory_Lands.java b/src/forge/CardFactory_Lands.java index 0db09844176..73b25ec50a6 100644 --- a/src/forge/CardFactory_Lands.java +++ b/src/forge/CardFactory_Lands.java @@ -824,7 +824,7 @@ class CardFactory_Lands { }//*************** END ************ END ************************** //*************** START *********** START ************************** - else if(cardName.equals("Terramorphic Expanse")) { + else if(cardName.equals("Terramorphic Expanse") || cardName.equals("Evolving Wilds")) { //tap sacrifice final Ability_Tap ability = new Ability_Tap(card, "0") { private static final long serialVersionUID = 5441740362881917927L; @@ -931,21 +931,23 @@ class CardFactory_Lands { }//showMessage() }; card.addSpellAbility(ability); - ability.setDescription("tap, Sacrifice Terramorphic Expanse: Search your library for a basic land card and put it into play tapped. Then shuffle your library."); + ability.setDescription("tap, Sacrifice " + card.getName() + ": Search your library for a basic land card and put it into play tapped. Then shuffle your library."); ability.setBeforePayMana(runtime); }//*************** END ************ END ************************** //*************** START *********** START ************************** - else if(cardName.equals("Wasteland") || cardName.equals("Strip Mine")) { + else if(cardName.equals("Wasteland") || cardName.equals("Strip Mine") || cardName.equals("Tectonic Edge")) { final CardListFilter landFilter = new CardListFilter() { public boolean addCard(Card c) { - if(card.getName().equals("Wasteland")) return !c.getType().contains("Basic"); + if(card.getName().equals("Wasteland") || card.getName().equals("Tectonic Edge")) return !c.getType().contains("Basic"); else return true; } }; //tap sacrifice - final Ability_Tap ability = new Ability_Tap(card, "0") { + String cost = "0"; + if(cardName.equals("Tectonic Edge")) cost = "1"; + final Ability_Tap ability = new Ability_Tap(card, cost) { private static final long serialVersionUID = 6865042319287843154L; @Override @@ -957,7 +959,9 @@ class CardFactory_Lands { public boolean canPlay() { CardList list = AllZoneUtil.getTypeInPlay("Land"); list = list.filter(landFilter); - if(super.canPlay() && list.size() > 0 && AllZone.GameAction.isCardInPlay(card)) return true; + CardList Tectonic_EdgeList = AllZoneUtil.getPlayerLandsInPlay(AllZone.GameAction.getOpponent(card.getController())); + if(card.getName().equals("Tectonic Edge") && Tectonic_EdgeList.size() < 4) return false; + if(super.canPlay() && list.size() > 0 && AllZone.GameAction.isCardInPlay(card)) return true; else return false; }//canPlay() @@ -981,7 +985,7 @@ class CardFactory_Lands { public void selectCard(Card c, PlayerZone zone) { if(zone.is(Constant.Zone.Play)) { if((c.isLand() && card.getName().equals("Strip Mine")) || - (!c.isBasicLand() && card.getName().equals("Wasteland"))) { + (!c.isBasicLand() && (card.getName().equals("Wasteland") || card.getName().equals("Tectonic Edge")))) { card.tap(); //tapping Strip Mine ability.setTargetCard(c); AllZone.Stack.add(ability); @@ -992,9 +996,12 @@ class CardFactory_Lands { }; card.addSpellAbility(ability); - ability.setDescription("Tap, Sacrifice " + card.getName() + ": Destroy target " - + (card.getName().equals("Wasteland")? "nonbasic":"") + " land."); - ability.setBeforePayMana(runtime); + ability.setDescription((card.getName().equals("Tectonic Edge")? "1, ":"") + + "Tap, Sacrifice " + card.getName() + ": Destroy target " + + ((card.getName().equals("Wasteland") || (card.getName().equals("Tectonic Edge")))? "nonbasic":"") + " land." + + (card.getName().equals("Tectonic Edge")? " Activate this ability only if an opponent controls four or more lands.":"")); + if(cardName.equals("Tectonic Edge")) ability.setAfterPayMana(runtime); + else ability.setBeforePayMana(runtime); }//*************** END ************ END ************************** //*************** START *********** START **************************