diff --git a/res/card-pictures.txt b/res/card-pictures.txt
index 8da5f1df46a..68302b50423 100644
--- a/res/card-pictures.txt
+++ b/res/card-pictures.txt
@@ -18,13 +18,16 @@ forest.jpg http://resources.wizards.com/magic/cards/unh/en-us/card73946.jpg
forest1.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=2748
forest2.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=587
forest3.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=586
+chainer_dementia_master.jpg http://www.wizards.com/global/images/magic/general/chainer_dementia_master.jpg
+vorosh_the_hunter.jpg http://www.wizards.com/global/images/magic/general/vorosh_the_hunter.jpg
+rith_the_awakener.jpg http://www.wizards.com/global/images/magic/general/rith_the_awakener.jpg
cantivore.jpg http://www.wizards.com/global/images/magic/general/cantivore.jpg
cognivore.jpg http://www.wizards.com/global/images/magic/general/cognivore.jpg
mortivore.jpg http://www.wizards.com/global/images/magic/general/mortivore.jpg
dimir_cutpurse.jpg http://www.wizards.com/global/images/magic/general/dimir_cutpurse.jpg
molimo_maro_sorcerer.jpg http://www.wizards.com/global/images/magic/general/molimo_maro_sorcerer.jpg
maro.jpg http://www.wizards.com/global/images/magic/general/maro.jpg
-multani_maro_sorcerer.jpg http://www.wizards.com/global/images/magic/general/multani_maro_sorcerer.jpg
+multani_maro_sorcerer.jpg http://www.wizards.com/global/images/magic/general/multani_maro_morcerer.jpg
meddling_mage.jpg http://www.wizards.com/global/images/magic/general/meddling_mage.jpg
gravelgill_duo.jpg http://www.wizards.com/global/images/magic/general/gravelgill_duo.jpg
safehold_duo.jpg http://www.wizards.com/global/images/magic/general/safehold_duo.jpg
diff --git a/res/cards.txt b/res/cards.txt
index f7130ae9c9b..1f2aedfce95 100644
--- a/res/cards.txt
+++ b/res/cards.txt
@@ -1,3 +1,23 @@
+Chainer, Dementia Master
+3 B B
+Legendary Creature Human Minion
+When Chainer, Dementia Master leaves the battlefield, exile all Nightmares.
+3/3
+
+Vorosh, the Hunter
+3 G U B
+Legendary Creature Dragon
+Whenever Vorosh, the Hunter deals combat damage to a player, you may pay 2 G. If you do, put six +1/+1 counters on Vorosh.
+6/6
+Flying
+
+Rith, the Awakener
+3 R G W
+Legendary Creature Dragon
+Whenever Rith, the Awakener deals combat damage to a player, you may pay 2 G. If you do, choose a color, then put a 1/1 green Saproling creature token onto the battlefield for each permanent of that color.
+6/6
+Flying
+
Cantivore
1 W W
Creature Lhurgoyf
@@ -112,44 +132,44 @@ As Meddling Mage enters the battlefield, name a nonland card. The named card can
Shorecrasher Mimic
1 GU
Creature Shapeshifter
-Whenever you cast a spell that's both green and blue, Shorecrasher Mimic becomes 5/3 and gains trample until end of turn.
+Whenever you cast a spell that’s both green and blue, Shorecrasher Mimic becomes 5/3 and gains trample until end of turn.
2/1
Woodlurker Mimic
1 BG
Creature Shapeshifter
-Whenever you cast a spell that's both black and green, Woodlurker Mimic becomes 4/5 and gains wither until end of turn. (It deals damage to creatures in the form of -1/-1 counters.)
+Whenever you cast a spell that’s both black and green, Woodlurker Mimic becomes 4/5 and gains wither until end of turn. (It deals damage to creatures in the form of -1/-1 counters.)
2/1
Battlegate Mimic
1 RW
Creature Shapeshifter
-Whenever you cast a spell that's both red and white, Battlegate Mimic becomes 4/2 and gains first strike until end of turn.
+Whenever you cast a spell that’s both red and white, Battlegate Mimic becomes 4/2 and gains first strike until end of turn.
2/1
Nightsky Mimic
1 WB
Creature Shapeshifter
-Whenever you cast a spell that's both white and black, Nightsky Mimic becomes 4/4 and gains flying until end of turn.
+Whenever you cast a spell that’s both white and black, Nightsky Mimic becomes 4/4 and gains flying until end of turn.
2/1
Riverfall Mimic
1 UR
Creature Shapeshifter
-Whenever you cast a spell that's both blue and red, Riverfall Mimic becomes 3/3 and is unblockable until end of turn.
+Whenever you cast a spell that’s both blue and red, Riverfall Mimic becomes 3/3 and is unblockable until end of turn.
2/1
Sapling of Colfenor
3 BG BG
Legendary Creature Treefolk Shaman
-Whenever Sapling of Colfenor attacks, reveal the top card of your library. If it's a creature card, you gain life equal to that card’s toughness, lose life equal to its power, then put it into your hand.
+Whenever Sapling of Colfenor attacks, reveal the top card of your library. If it’s a creature card, you gain life equal to that card’s toughness, lose life equal to its power, then put it into your hand.
2/5
Indestructible
Dovescape
3 WU WU WU
Enchantment
-Whenever a player casts a noncreature spell, counter that spell. That player puts X 1/1 white and blue Bird creature tokens with flying onto the battlefield, where X is the spell's converted mana cost.
+Whenever a player casts a noncreature spell, counter that spell. That player puts X 1/1 white and blue Bird creature tokens with flying onto the battlefield, where X is the spell’s converted mana cost.
Lurking Informant
1 UB
@@ -5357,7 +5377,7 @@ no text
Trinket Mage
2 U
-Creature Human Wizard
+Creature Human Mage
When Trinket Mage comes into play, you may search your library for an artifact card with converted mana cost 1 or less, reveal that card, and put it into your hand. If you do, shuffle your library.
2/2
@@ -12901,7 +12921,7 @@ This creature cannot block
Funeral Charm
B
Instant
-Choose one -
+Choose one - Target player discards a card; or target creature gets +2/-1 until end of turn; or target creature gains swampwalk until end of turn.
Echoing Decay
1 B
diff --git a/res/gui/display_layout.xml b/res/gui/display_layout.xml
index 3c4d574b060..066586efff9 100644
--- a/res/gui/display_layout.xml
+++ b/res/gui/display_layout.xml
@@ -303,7 +303,7 @@
254349902
- 142
+ 138
@@ -322,7 +322,7 @@
@@ -337,9 +337,9 @@
diff --git a/src/forge/CardFactory_Auras.java b/src/forge/CardFactory_Auras.java
index 2f30797473d..fae021c36ae 100644
--- a/src/forge/CardFactory_Auras.java
+++ b/src/forge/CardFactory_Auras.java
@@ -2621,6 +2621,13 @@ class CardFactory_Auras {
{
private static final long serialVersionUID = -5744948616351896881L;
+
+ //for flash:
+ public boolean canPlay()
+ {
+ return true;
+ }
+
public boolean canPlayAI()
{
CardList list = new CardList(AllZone.Computer_Play.getCards());
diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java
index 3639825d751..b809dcd7afd 100644
--- a/src/forge/CardFactory_Creatures.java
+++ b/src/forge/CardFactory_Creatures.java
@@ -10771,12 +10771,14 @@ public class CardFactory_Creatures {
ButtonUtil.disableAll();
}
else if (card.getController().equals(Constant.Player.Computer)) {
- Card human = CardFactoryUtil.AI_getBestCreature(hum);
- ability.setTargetCard(human);
- AllZone.Stack.add(ability);
+ if (hum.size() > 0 )
+ {
+ Card human = CardFactoryUtil.AI_getBestCreature(hum);
+ ability.setTargetCard(human);
+ AllZone.Stack.add(ability);
+ }
}
}
-
}//execute()
};//Command
card.addComesIntoPlayCommand(intoPlay);
@@ -12107,6 +12109,91 @@ public class CardFactory_Creatures {
}//*************** END ************ END **************************
+
+
+ //*************** START *********** START **************************
+ else if (cardName.equals("Rith, the Awakener"))
+ {
+ final String player = card.getController();
+
+ final Ability ability2 = new Ability(card, "2 G")
+ {
+ public void resolve()
+ {
+ int numberTokens = 0;
+ if (player.equals("Human"))
+ {
+ String choices[] = {"white", "blue" , "black" , "red" , "green"};
+ Object o = AllZone.Display.getChoiceOptional("Select Color: ", choices);
+ //System.out.println("Color:" + o);
+ numberTokens = CardFactoryUtil.getNumberOfPermanentsByColor((String)o);
+ }
+
+ for (int i=0;i 0 )
+ {
+ if (card.getController().equals(Constant.Player.Human))
+ {
+ Object o = AllZone.Display.getChoice("Pick creature: " , creatures.toArray());
+ if (o!=null)
+ {
+ Card c = (Card)o;
+ PlayerZone zone = AllZone.getZone(c);
+ zone.remove(c);
+ play.add(c);
+ card.untap();
+ c.addExtrinsicKeyword(c.getName() + " is black.");
+ c.addType("Nightmare");
+ c.setController(card.getController());
+ }
+ }
+ else
+ {
+ Card c = CardFactoryUtil.AI_getBestCreature(creatures);
+ PlayerZone zone = AllZone.getZone(c);
+ zone.remove(c);
+ play.add(c);
+ card.untap();
+ }
+ }
+ }
+
+ public boolean canPlayAI()
+ {
+ if(AllZone.Computer_Life.getLife() < 7)
+ return false;
+
+ PlayerZone hGrave= AllZone.getZone(Constant.Zone.Graveyard, Constant.Player.Human);
+ PlayerZone cGrave = AllZone.getZone(Constant.Zone.Graveyard, Constant.Player.Computer);
+ CardList creatures = new CardList();
+ creatures.addAll(hGrave.getCards());
+ creatures.addAll(cGrave.getCards());
+ creatures = creatures.getType("Creature");
+ return creatures.size() > 0;
+ }
+
+ public boolean canPlay()
+ {
+ PlayerZone hGrave= AllZone.getZone(Constant.Zone.Graveyard, Constant.Player.Human);
+ PlayerZone cGrave = AllZone.getZone(Constant.Zone.Graveyard, Constant.Player.Computer);
+ CardList creatures = new CardList();
+ creatures.addAll(hGrave.getCards());
+ creatures.addAll(cGrave.getCards());
+ creatures = creatures.getType("Creature");
+ return creatures.size() > 0;
+ }
+
+ };
+
+ card.addSpellAbility(ability);
+
+ final Command leavesPlay = new Command()
+ {
+ private static final long serialVersionUID = 3367460511478891560L;
+
+ public void execute()
+ {
+ PlayerZone hPlay = AllZone.getZone(Constant.Zone.Play, Constant.Player.Human);
+ PlayerZone cPlay = AllZone.getZone(Constant.Zone.Play, Constant.Player.Computer);
+
+ CardList list = new CardList();
+ list.addAll(hPlay.getCards());
+ list.addAll(cPlay.getCards());
+ list = list.getType("Nightmare");
+
+ for (Card c : list)
+ {
+ AllZone.GameAction.removeFromGame(c);
+ }
+ }
+
+ };
+
+ card.addLeavesPlayCommand(leavesPlay);
+ }//*************** END ************ END **************************
// Cards with Cycling abilities
// -1 means keyword "Cycling" not found
diff --git a/src/forge/CardFactory_Equipment.java b/src/forge/CardFactory_Equipment.java
index 69e68394f53..03dea08f569 100644
--- a/src/forge/CardFactory_Equipment.java
+++ b/src/forge/CardFactory_Equipment.java
@@ -1834,7 +1834,7 @@ class CardFactory_Equipment {
};
target[0] = card.getEquipping().get(0);
- if(AllZone.GameAction.isCardInPlay(target[0]) && CardFactoryUtil.canTarget(card, target[0]))
+ if(AllZone.GameAction.isCardInPlay(target[0]) )
{
target[0].addTempAttackBoost(2);
target[0].addTempDefenseBoost(2);
diff --git a/src/forge/CardFactory_Planeswalkers.java b/src/forge/CardFactory_Planeswalkers.java
index 45cdb9f8dd6..5666fc60ee6 100644
--- a/src/forge/CardFactory_Planeswalkers.java
+++ b/src/forge/CardFactory_Planeswalkers.java
@@ -2300,7 +2300,7 @@ class CardFactory_Planeswalkers {
}//resolve()
public boolean canPlayAI()
{
- return card2.getCounters(Counters.LOYALTY) < 4 && AllZone.Phase.getPhase().equals(Constant.Phase.Main2);
+ return card2.getCounters(Counters.LOYALTY) <= 6 && AllZone.Phase.getPhase().equals(Constant.Phase.Main2);
}
public boolean canPlay()
{
diff --git a/src/forge/GameActionUtil.java b/src/forge/GameActionUtil.java
index e30f2dbd379..7c60c9044ab 100644
--- a/src/forge/GameActionUtil.java
+++ b/src/forge/GameActionUtil.java
@@ -849,7 +849,7 @@ public class GameActionUtil
{
SpellAbility sa = AllZone.Stack.pop();
- AllZone.GameAction.moveToGraveyard(sa.getSourceCard());
+ AllZone.GameAction.moveToGraveyard(sa.getSourceCard());
}
}; // ability2
@@ -2972,6 +2972,10 @@ public class GameActionUtil
playerCombatDamage_Rootwater_Thief(c);
else if (c.getName().equals("Treva, the Renewer"))
playerCombatDamage_Treva(c);
+ else if (c.getName().equals("Rith, the Awakener"))
+ playerCombatDamage_Rith(c);
+ else if (c.getName().equals("Vorosh, the Hunter"))
+ playerCombatDamage_Vorosh(c);
/*
if(CardFactoryUtil.hasNumberEquipments(c, "Umezawa's Jitte") == 1)
{
@@ -2985,7 +2989,7 @@ public class GameActionUtil
c.setDealtCombatDmgToOppThisTurn(true);
}
-
+ /*
public static void executePlayerCombatDmgOptionalEffects(Card[] c)
{
for (int i=0;i< c.length;i++)
@@ -3011,6 +3015,7 @@ public class GameActionUtil
}//for
}
+ */
private static void playerCombatDamage_Oros(Card c)
{
System.out.println("Oros swung unblocked.");
@@ -3019,8 +3024,7 @@ public class GameActionUtil
AllZone.GameAction.playSpellAbility(sa[1]);
else
ComputerUtil.playNoStack(sa[1]);
-
-
+
}
private static void playerCombatDamage_Dimir_Cutpurse(Card c)
@@ -3071,6 +3075,24 @@ public class GameActionUtil
}
+ private static void playerCombatDamage_Rith(Card c)
+ {
+ SpellAbility[] sa = c.getSpellAbility();
+ if (c.getController().equals(Constant.Player.Human))
+ AllZone.GameAction.playSpellAbility(sa[1]);
+ else
+ ComputerUtil.playNoStack(sa[1]);
+ }
+
+ private static void playerCombatDamage_Vorosh(Card c)
+ {
+ SpellAbility[] sa = c.getSpellAbility();
+ if (c.getController().equals(Constant.Player.Human))
+ AllZone.GameAction.playSpellAbility(sa[1]);
+ else
+ ComputerUtil.playNoStack(sa[1]);
+ }
+
private static void playerCombatDamage_Slith(Card c)
{
final int power = c.getNetAttack();
@@ -12969,6 +12991,43 @@ public class GameActionUtil
}// execute()
};// Spidersilk Armor
+ public static Command Chainer = new Command()
+ {
+ private static final long serialVersionUID = -5404417712966524986L;
+ CardList gloriousAnthemList = new CardList();
+
+ public void execute()
+ {
+ CardList list = gloriousAnthemList;
+ Card c;
+ // reset all cards in list - aka "old" cards
+ for (int i = 0; i < list.size(); i++)
+ {
+ c = list.get(i);
+ c.addSemiPermanentAttackBoost(-1);
+ c.addSemiPermanentDefenseBoost(-1);
+ }
+
+ // add +1/+1 to cards
+ list.clear();
+ PlayerZone[] zone = getZone("Chainer, Dementia Master");
+
+ for (int outer = 0; outer < zone.length; outer++)
+ {
+ CardList creature = new CardList(zone[outer].getCards());
+ creature = creature.getType("Nightmare");
+
+ for (int i = 0; i < creature.size(); i++)
+ {
+ c = creature.get(i);
+ c.addSemiPermanentAttackBoost(1);
+ c.addSemiPermanentDefenseBoost(1);
+ gloriousAnthemList.add(c);
+ }// for inner
+ }// for outer
+ }// execute()
+ };//Chainer
+
public static Command Eldrazi_Monument = new Command()
{
@@ -13442,6 +13501,7 @@ public class GameActionUtil
commands.put("Honor_of_the_Pure", Honor_of_the_Pure);
commands.put("Beastmaster_Ascension", Beastmaster_Ascension);
commands.put("Spidersilk_Armor", Spidersilk_Armor);
+ commands.put("Chainer", Chainer);
commands.put("Eldrazi_Monument", Eldrazi_Monument);
commands.put("Muraganda_Petroglyphs", Muraganda_Petroglyphs);
diff --git a/src/forge/StateBasedEffects.java b/src/forge/StateBasedEffects.java
index 384bcfce330..6ba56fc640c 100644
--- a/src/forge/StateBasedEffects.java
+++ b/src/forge/StateBasedEffects.java
@@ -92,6 +92,7 @@ public class StateBasedEffects
cardToEffectsList.put("Honor of the Pure", new String[] {"Honor_of_the_Pure"});
cardToEffectsList.put("Beastmaster Ascension", new String[] {"Beastmaster_Ascension"});
cardToEffectsList.put("Spidersilk Armor", new String[] {"Spidersilk_Armor"});
+ cardToEffectsList.put("Chainer, Dementia Master", new String[] {"Chainer"});
cardToEffectsList.put("Eldrazi Monument", new String[] {"Eldrazi_Monument"});
cardToEffectsList.put("Muraganda Petroglyphs", new String[] {"Muraganda_Petroglyphs"});
cardToEffectsList.put("Engineered Plague", new String[] {"Engineered_Plague"});