mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
- Umezawa's Jitte +2/+2 ability shouldn't be targeted anymore.
- Added Chainer, Dementia Master, Vorosh, the Hunter, Rith, the Awakener. - AEther Web should be castable at any time now (flash). - AI should be able to use Tezzeret's first ability now.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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<EFBFBD>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<EFBFBD>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<EFBFBD>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<EFBFBD>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<EFBFBD>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<72>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<EFBFBD>s a creature card, you gain life equal to that card<72>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<EFBFBD>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
|
||||
|
||||
@@ -303,7 +303,7 @@
|
||||
<int>254</int>
|
||||
<int>349</int>
|
||||
<int>902</int>
|
||||
<int>142</int>
|
||||
<int>138</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -322,7 +322,7 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>254</int>
|
||||
<int>491</int>
|
||||
<int>487</int>
|
||||
<int>902</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
@@ -337,9 +337,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>254</int>
|
||||
<int>501</int>
|
||||
<int>497</int>
|
||||
<int>902</int>
|
||||
<int>148</int>
|
||||
<int>152</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -10771,12 +10771,14 @@ public class CardFactory_Creatures {
|
||||
ButtonUtil.disableAll();
|
||||
}
|
||||
else if (card.getController().equals(Constant.Player.Computer)) {
|
||||
if (hum.size() > 0 )
|
||||
{
|
||||
Card human = CardFactoryUtil.AI_getBestCreature(hum);
|
||||
ability.setTargetCard(human);
|
||||
AllZone.Stack.add(ability);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}//execute()
|
||||
};//Command
|
||||
card.addComesIntoPlayCommand(intoPlay);
|
||||
@@ -12109,6 +12111,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<numberTokens;i++)
|
||||
{
|
||||
makeToken();
|
||||
}
|
||||
}
|
||||
|
||||
void makeToken()
|
||||
{
|
||||
Card c = new Card();
|
||||
|
||||
c.setName("Saproling");
|
||||
c.setImageName("G 1 1 Saproling");
|
||||
|
||||
c.setOwner(card.getController());
|
||||
c.setController(card.getController());
|
||||
|
||||
c.setManaCost("G");
|
||||
c.setToken(true);
|
||||
|
||||
c.addType("Creature");
|
||||
c.addType("Saproling");
|
||||
c.setBaseAttack(1);
|
||||
c.setBaseDefense(1);
|
||||
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController());
|
||||
play.add(c);
|
||||
}//makeToken()
|
||||
|
||||
public boolean canPlay()
|
||||
{
|
||||
//this is set to false, since it should only TRIGGER
|
||||
return false;
|
||||
}
|
||||
};// ability2
|
||||
//card.clearSpellAbility();
|
||||
card.addSpellAbility(ability2);
|
||||
ability2.setStackDescription(card.getName() + " - " + player + " puts a 1/1 green Saproling creature token onto the battlefield for each permanent of the chosen color");
|
||||
|
||||
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if (cardName.equals("Vorosh, the Hunter"))
|
||||
{
|
||||
|
||||
final Ability ability2 = new Ability(card, "2 G")
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
card.addCounter(Counters.P1P1, 6);
|
||||
}
|
||||
|
||||
public boolean canPlay()
|
||||
{
|
||||
//this is set to false, since it should only TRIGGER
|
||||
return false;
|
||||
}
|
||||
};// ability2
|
||||
//card.clearSpellAbility();
|
||||
card.addSpellAbility(ability2);
|
||||
ability2.setStackDescription(card.getName() + " - gets six +1/+1 counters.");
|
||||
|
||||
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if(cardName.equals("Anodet Lurker"))
|
||||
{
|
||||
@@ -17846,6 +17933,105 @@ public class CardFactory_Creatures {
|
||||
return newCard;
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if (cardName.equals("Chainer, Dementia Master"))
|
||||
{
|
||||
final Ability ability = new Ability(card, "B B B")
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
AllZone.GameAction.getPlayerLife(card.getController()).subtractLife(3);
|
||||
|
||||
PlayerZone hGrave = AllZone.getZone(Constant.Zone.Graveyard, Constant.Player.Human);
|
||||
PlayerZone cGrave = AllZone.getZone(Constant.Zone.Graveyard, Constant.Player.Computer);
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController());
|
||||
CardList creatures = new CardList();
|
||||
creatures.addAll(hGrave.getCards());
|
||||
creatures.addAll(cGrave.getCards());
|
||||
|
||||
|
||||
creatures = creatures.getType("Creature");
|
||||
if (creatures.size() > 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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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.");
|
||||
@@ -3020,7 +3025,6 @@ public class GameActionUtil
|
||||
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);
|
||||
|
||||
|
||||
@@ -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"});
|
||||
|
||||
Reference in New Issue
Block a user