mirror of
https://github.com/correl/mage.git
synced 2024-11-15 11:09:30 +00:00
Merge remote-tracking branch 'remotes/origin/master'
This commit is contained in:
commit
c62f73f8a8
66 changed files with 4194 additions and 376 deletions
|
@ -595,8 +595,18 @@
|
|||
|Generate|TOK:HOP|Pentavite|||PentaviteToken|
|
||||
|Generate|TOK:HOP|Pest|||PestToken|
|
||||
|Generate|TOK:HOP|Saproling|||SaprolingToken|
|
||||
|Generate|TOK:HOU|Adorned Pouncer||||
|
||||
|Generate|TOK:HOU|Champion of Wits||||
|
||||
|Generate|TOK:HOU|Dreamstealer||||
|
||||
|Generate|TOK:HOU|Earthshaker Khenra||||
|
||||
|Generate|TOK:HOU|Horse|||CrestedSunmareToken|
|
||||
|Generate|TOK:HOU|Insect|||TheLocustGodInsectToken|
|
||||
|Generate|TOK:HOU|Proven Combatant||||
|
||||
|Generate|TOK:HOU|Resilient Khenra||||
|
||||
|Generate|TOK:HOU|Sinuous Striker||||
|
||||
|Generate|TOK:HOU|Snake|||RhonassLastStandToken|
|
||||
|Generate|TOK:HOU|Steadfast Sentinel||||
|
||||
|Generate|TOK:HOU|Sunscourge Champion||||
|
||||
|Generate|TOK:HOU|Zombie||
|
||||
|Generate|TOK:ICE|Caribou|||CaribouToken|
|
||||
|Generate|TOK:INV|Bird|||OwlToken|
|
||||
|
|
|
@ -74,6 +74,6 @@ dd3evg=ddaevg
|
|||
dd3gvl=ddagvl
|
||||
dd3jvc=ddajvc
|
||||
# Remove setname as soon as the images can be downloaded
|
||||
ignore.urls=TOK,PCA,C17,IMA
|
||||
ignore.urls=TOK,DDT,V17,IMA,XLN,RIX,,E02,M19,M25,DOM
|
||||
# sets ordered by release time (newest goes first)
|
||||
token.lookup.order=IMA,C17,E01,CMA,HOU,MM3,DDS,AKH,DD3DVD,DD3EVG,DD3GVL,DD3JVC,H09,AER,PCA,C16,V16,MPS,KLD,DDR,CN2,EMN,EMA,SOI,DDQ,CP,CMA,ARENA,SUS,APAC,EURO,UGIN,C15,OGW,EXP,DDP,BFZ,DRB,V09,V10,V11,V12,V13,V14,V15,TPR,MPRP,DD3,DDO,ORI,MM2,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC
|
||||
token.lookup.order=M19,M25,DOM,E02,RIX,XLN,IMA,C17,V17,E01,DDT,CMA,HOU,MM3,DDS,AKH,DD3DVD,DD3EVG,DD3GVL,DD3JVC,H09,AER,PCA,C16,V16,MPS,KLD,DDR,CN2,EMN,EMA,SOI,DDQ,CP,CMA,ARENA,SUS,APAC,EURO,UGIN,C15,OGW,EXP,DDP,BFZ,DRB,V09,V10,V11,V12,V13,V14,V15,TPR,MPRP,DD3,DDO,ORI,MM2,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC
|
239
Mage.Sets/src/mage/cards/a/AbandonedSarcophagus.java
Normal file
239
Mage.Sets/src/mage/cards/a/AbandonedSarcophagus.java
Normal file
|
@ -0,0 +1,239 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.AsThoughEffectImpl;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.Cards;
|
||||
import mage.cards.CardsImpl;
|
||||
import mage.constants.AsThoughEffectType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.WatcherScope;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.AbilityPredicate;
|
||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.players.Player;
|
||||
import mage.watchers.Watcher;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public class AbandonedSarcophagus extends CardImpl {
|
||||
|
||||
public AbandonedSarcophagus(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
|
||||
|
||||
// You may cast nonland cards with cycling from your graveyard.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AbandonedSarcophagusCastFromGraveyardEffect()));
|
||||
|
||||
// If a card with cycling would be put into your graveyard from anywhere and it wasn't cycled, exile it instead.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AbandonedSarcophagusReplacementEffect()), new AbandonedSarcophagusWatcher());
|
||||
|
||||
}
|
||||
|
||||
public AbandonedSarcophagus(final AbandonedSarcophagus card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbandonedSarcophagus copy() {
|
||||
return new AbandonedSarcophagus(this);
|
||||
}
|
||||
}
|
||||
|
||||
class AbandonedSarcophagusCastFromGraveyardEffect extends AsThoughEffectImpl {
|
||||
|
||||
private static final FilterCard filter = new FilterCard("nonland cards with cycling");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.not(new CardTypePredicate(CardType.LAND)));
|
||||
filter.add(new AbilityPredicate(CyclingAbility.class));
|
||||
}
|
||||
|
||||
AbandonedSarcophagusCastFromGraveyardEffect() {
|
||||
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit);
|
||||
staticText = "You may cast nonland cards with cycling from your graveyard";
|
||||
}
|
||||
|
||||
AbandonedSarcophagusCastFromGraveyardEffect(final AbandonedSarcophagusCastFromGraveyardEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbandonedSarcophagusCastFromGraveyardEffect copy() {
|
||||
return new AbandonedSarcophagusCastFromGraveyardEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
|
||||
Card card = game.getCard(objectId);
|
||||
if (card != null) {
|
||||
return (affectedControllerId.equals(source.getControllerId())
|
||||
&& filter.match(card, game)
|
||||
&& game.getState().getZone(card.getId()) == Zone.GRAVEYARD);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class AbandonedSarcophagusReplacementEffect extends ReplacementEffectImpl {
|
||||
|
||||
boolean cardHasCycling;
|
||||
boolean cardWasCycledThisTurn;
|
||||
|
||||
public AbandonedSarcophagusReplacementEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Exile);
|
||||
staticText = "If a card with cycling would be put into your graveyard from anywhere and it wasn't cycled, exile it instead";
|
||||
}
|
||||
|
||||
public AbandonedSarcophagusReplacementEffect(final AbandonedSarcophagusReplacementEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbandonedSarcophagusReplacementEffect copy() {
|
||||
return new AbandonedSarcophagusReplacementEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
Card card = game.getCard(event.getTargetId());
|
||||
if (card != null) {
|
||||
return controller.moveCards(card, Zone.EXILED, source, game);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.ZONE_CHANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
cardWasCycledThisTurn = false;
|
||||
cardHasCycling = false;
|
||||
if (((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
AbandonedSarcophagusWatcher watcher = (AbandonedSarcophagusWatcher) game.getState().getWatchers().get(AbandonedSarcophagusWatcher.class.getSimpleName());
|
||||
Card card = game.getCard(event.getTargetId());
|
||||
if (card != null
|
||||
&& watcher != null) {
|
||||
for (Ability ability : card.getAbilities()) {
|
||||
if (ability instanceof CyclingAbility) {
|
||||
cardHasCycling = true;
|
||||
}
|
||||
}
|
||||
Cards cards = watcher.getCardsCycledThisTurn(controller.getId());
|
||||
for (Card c : cards.getCards(game)) {
|
||||
if (c == card) {
|
||||
cardWasCycledThisTurn = true;
|
||||
watcher.getCardsCycledThisTurn(controller.getId()).remove(card); //remove reference to the card as it is no longer needed
|
||||
}
|
||||
}
|
||||
return (!cardWasCycledThisTurn
|
||||
&& cardHasCycling);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class AbandonedSarcophagusWatcher extends Watcher {
|
||||
|
||||
private final Map<UUID, Cards> cycledCardsThisTurn = new HashMap<>();
|
||||
|
||||
public AbandonedSarcophagusWatcher() {
|
||||
super(AbandonedSarcophagusWatcher.class.getSimpleName(), WatcherScope.GAME);
|
||||
}
|
||||
|
||||
public AbandonedSarcophagusWatcher(final AbandonedSarcophagusWatcher watcher) {
|
||||
super(watcher);
|
||||
for (Entry<UUID, Cards> entry : watcher.cycledCardsThisTurn.entrySet()) {
|
||||
cycledCardsThisTurn.put(entry.getKey(), entry.getValue().copy());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
if (event.getType() == GameEvent.EventType.CYCLE_CARD) {
|
||||
Card card = game.getCard(event.getSourceId());
|
||||
if (card != null) {
|
||||
Cards c = getCardsCycledThisTurn(event.getPlayerId());
|
||||
c.add(card);
|
||||
cycledCardsThisTurn.put(event.getPlayerId(), c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Cards getCardsCycledThisTurn(UUID playerId) {
|
||||
return cycledCardsThisTurn.getOrDefault(playerId, new CardsImpl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
super.reset();
|
||||
cycledCardsThisTurn.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbandonedSarcophagusWatcher copy() {
|
||||
return new AbandonedSarcophagusWatcher(this);
|
||||
}
|
||||
}
|
|
@ -27,20 +27,18 @@
|
|||
*/
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.UntapTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect;
|
||||
import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Archer262
|
||||
|
@ -48,19 +46,21 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class ActOfHeroism extends CardImpl {
|
||||
|
||||
public ActOfHeroism(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}");
|
||||
|
||||
// Untap target creature.
|
||||
Effect effect = new UntapTargetEffect();
|
||||
effect.setText("Untap target creature");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
|
||||
// It gets +2/+2 and can block an additional creature this turn.
|
||||
// It gets +2/+2 until end of turn
|
||||
effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn);
|
||||
effect.setText("It gets +2/+2");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
effect = new GainAbilityTargetEffect(new SimpleStaticAbility(Zone.BATTLEFIELD, new CanBlockAdditionalCreatureEffect()), Duration.EndOfTurn);
|
||||
effect.setText("and can block an additional creature this turn");
|
||||
|
||||
// and can block an additional creature this turn
|
||||
effect = new CanBlockAdditionalCreatureTargetEffect();
|
||||
effect.setText("and can block an additional creature this turn.");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
|
|
42
Mage.Sets/src/mage/cards/a/AmmitEternal.java
Normal file
42
Mage.Sets/src/mage/cards/a/AmmitEternal.java
Normal file
|
@ -0,0 +1,42 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
|
||||
import mage.abilities.effects.common.RemoveAllCountersSourceEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.keyword.AfflictAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.counters.CounterType;
|
||||
|
||||
public class AmmitEternal extends CardImpl {
|
||||
|
||||
public AmmitEternal(UUID ownerId, CardSetInfo cardSetInfo) {
|
||||
super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||
subtype.add("Zombie");
|
||||
subtype.add("Crocodile");
|
||||
subtype.add("Demon");
|
||||
power = new MageInt(5);
|
||||
toughness = new MageInt(5);
|
||||
|
||||
// Afflict 3 (Whenever this creature becomes blocked, defending player loses 3 life.)
|
||||
this.addAbility(new AfflictAbility(3));
|
||||
|
||||
// Whenever an opponent casts a spell, put a -1/-1 counter on Ammit Eternal.
|
||||
this.addAbility(new SpellCastOpponentTriggeredAbility(new AddCountersSourceEffect(CounterType.M1M1.createInstance()), false));
|
||||
|
||||
// Whenever Ammit Eternal deals combat damage to a player, remove all -1/-1 counters from it.
|
||||
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new RemoveAllCountersSourceEffect(CounterType.M1M1), false));
|
||||
}
|
||||
|
||||
public AmmitEternal(final AmmitEternal ammitEternal) {
|
||||
super(ammitEternal);
|
||||
}
|
||||
|
||||
public AmmitEternal copy() {
|
||||
return new AmmitEternal(this);
|
||||
}
|
||||
}
|
54
Mage.Sets/src/mage/cards/a/ApocalypseDemon.java
Normal file
54
Mage.Sets/src/mage/cards/a/ApocalypseDemon.java
Normal file
|
@ -0,0 +1,54 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
|
||||
import mage.abilities.effects.common.TapSourceUnlessPaysEffect;
|
||||
import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
public class ApocalypseDemon extends CardImpl {
|
||||
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("nother creature");
|
||||
|
||||
static {
|
||||
filter.add(new CardTypePredicate(CardType.CREATURE));
|
||||
filter.add(new AnotherPredicate());
|
||||
}
|
||||
|
||||
public ApocalypseDemon(UUID ownerId, CardSetInfo cardSetInfo) {
|
||||
super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}");
|
||||
subtype.add("Demon");
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Apocalypse Demon’s power and toughness are each equal to the number of cards in your graveyard.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new CardsInControllerGraveyardCount(), Duration.EndOfGame)));
|
||||
|
||||
// At the beginning of your upkeep, tap Apocalypse Demon unless you sacrifice another creature.
|
||||
TapSourceUnlessPaysEffect tapEffect = new TapSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
|
||||
tapEffect.setText("At the beginning of your upkeep, tap Apocalypse Demon unless you sacrifice another creature.");
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(tapEffect, TargetController.YOU, false));
|
||||
}
|
||||
|
||||
public ApocalypseDemon(final ApocalypseDemon apocalypseDemon) {
|
||||
super(apocalypseDemon);
|
||||
}
|
||||
|
||||
public ApocalypseDemon copy() {
|
||||
return new ApocalypseDemon(this);
|
||||
}
|
||||
}
|
68
Mage.Sets/src/mage/cards/a/AvenReedstalker.java
Normal file
68
Mage.Sets/src/mage/cards/a/AvenReedstalker.java
Normal file
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.FlashAbility;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public class AvenReedstalker extends CardImpl {
|
||||
|
||||
public AvenReedstalker(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
|
||||
|
||||
this.subtype.add("Bird");
|
||||
this.subtype.add("Warrior");
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Flash
|
||||
this.addAbility(FlashAbility.getInstance());
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
}
|
||||
|
||||
public AvenReedstalker(final AvenReedstalker card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AvenReedstalker copy() {
|
||||
return new AvenReedstalker(this);
|
||||
}
|
||||
}
|
57
Mage.Sets/src/mage/cards/b/BanewhipPunisher.java
Normal file
57
Mage.Sets/src/mage/cards/b/BanewhipPunisher.java
Normal file
|
@ -0,0 +1,57 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.CounterPredicate;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
public class BanewhipPunisher extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with a -1/-1 counter on it");
|
||||
|
||||
static {
|
||||
filter.add(new CounterPredicate(CounterType.M1M1));
|
||||
}
|
||||
|
||||
public BanewhipPunisher(UUID ownerId, CardSetInfo cardSetInfo) {
|
||||
super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||
subtype.add("Human");
|
||||
subtype.add("Warrior");
|
||||
power = new MageInt(2);
|
||||
toughness = new MageInt(2);
|
||||
|
||||
// When Banewhip Punisher enters the battlefield, you may put a -1/-1 counter on target creature.
|
||||
Ability etbAbility = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.M1M1.createInstance(1)), true);
|
||||
etbAbility.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(etbAbility);
|
||||
|
||||
// {B}, sacrifice Banewhip Punisher: Destroy target creature that has a -1/-1 counter on it.
|
||||
Ability destroyAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl("{B}"));
|
||||
destroyAbility.addCost(new SacrificeSourceCost());
|
||||
destroyAbility.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(destroyAbility);
|
||||
|
||||
}
|
||||
|
||||
public BanewhipPunisher(final BanewhipPunisher banewhipPunisher) {
|
||||
super(banewhipPunisher);
|
||||
}
|
||||
|
||||
public BanewhipPunisher copy() {
|
||||
return new BanewhipPunisher(this);
|
||||
}
|
||||
}
|
|
@ -27,23 +27,17 @@
|
|||
*/
|
||||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CounterUnlessPaysEffect;
|
||||
import mage.abilities.keyword.MadnessAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetSpell;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author magenoxx_at_gmail.com
|
||||
|
@ -53,13 +47,14 @@ public class CircularLogic extends CardImpl {
|
|||
public CircularLogic(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}");
|
||||
|
||||
|
||||
// Counter target spell unless its controller pays {1} for each card in your graveyard.
|
||||
this.getSpellAbility().addEffect(new CircularLogicCounterUnlessPaysEffect());
|
||||
Effect effect = new CounterUnlessPaysEffect(new CardsInControllerGraveyardCount());
|
||||
effect.setText("Counter target spell unless its controller pays {1} for each card in your graveyard");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
this.getSpellAbility().addTarget(new TargetSpell());
|
||||
|
||||
// Madness {U}
|
||||
this.addAbility(new MadnessAbility(this, new ManaCostsImpl("{U}")));
|
||||
this.addAbility(new MadnessAbility(this, new ManaCostsImpl<>("{U}")));
|
||||
}
|
||||
|
||||
public CircularLogic(final CircularLogic card) {
|
||||
|
@ -71,47 +66,3 @@ public class CircularLogic extends CardImpl {
|
|||
return new CircularLogic(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CircularLogicCounterUnlessPaysEffect extends OneShotEffect {
|
||||
|
||||
public CircularLogicCounterUnlessPaysEffect() {
|
||||
super(Outcome.Detriment);
|
||||
}
|
||||
|
||||
public CircularLogicCounterUnlessPaysEffect(final CircularLogicCounterUnlessPaysEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CircularLogicCounterUnlessPaysEffect copy() {
|
||||
return new CircularLogicCounterUnlessPaysEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
StackObject spell = game.getStack().getStackObject(targetPointer.getFirst(game, source));
|
||||
if (spell != null) {
|
||||
Player player = game.getPlayer(spell.getControllerId());
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (player != null && controller != null) {
|
||||
int amount = controller.getGraveyard().size();
|
||||
if (amount == 0) {
|
||||
game.informPlayers("Circular Logic: no cards in controller's graveyard.");
|
||||
} else {
|
||||
GenericManaCost cost = new GenericManaCost(amount);
|
||||
if (!cost.pay(source, game, spell.getControllerId(), spell.getControllerId(), false)) {
|
||||
game.informPlayers("Circular Logic: cost wasn't payed - countering target spell.");
|
||||
return game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
return "Counter target spell unless its controller pays {1} for each card in your graveyard";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,21 +27,16 @@
|
|||
*/
|
||||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.effects.common.ReturnCreaturesFromExileEffect;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ExileTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.game.ExileZone;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
@ -60,7 +55,8 @@ public class ColdStorage extends CardImpl {
|
|||
ability.addTarget(new TargetControlledCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
// Sacrifice Cold Storage: Return each creature card exiled with Cold Storage to the battlefield under your control.
|
||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromExileEffect(this.getId()), new SacrificeSourceCost());
|
||||
ReturnCreaturesFromExileEffect returnFromExileEffect = new ReturnCreaturesFromExileEffect(this.getId(), false, "Return each creature card exiled with {this} to the battlefield under your control");
|
||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, returnFromExileEffect, new SacrificeSourceCost());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
@ -73,39 +69,3 @@ public class ColdStorage extends CardImpl {
|
|||
return new ColdStorage(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ReturnFromExileEffect extends OneShotEffect {
|
||||
|
||||
private UUID exileId;
|
||||
|
||||
public ReturnFromExileEffect(UUID exileId) {
|
||||
super(Outcome.PutCardInPlay);
|
||||
this.exileId = exileId;
|
||||
this.setText("Return each creature card exiled with {this} to the battlefield under your control");
|
||||
}
|
||||
|
||||
|
||||
public ReturnFromExileEffect(final ReturnFromExileEffect effect) {
|
||||
super(effect);
|
||||
this.exileId = effect.exileId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReturnFromExileEffect copy() {
|
||||
return new ReturnFromExileEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
ExileZone exile = game.getExile().getExileZone(exileId);
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null && exile != null) {
|
||||
controller.moveCards(exile.getCards(new FilterCreatureCard(), game), Zone.BATTLEFIELD, source, game, false, false, true, null);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -28,36 +28,33 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CounterUnlessPaysEffect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetSpell;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author ciaccona007
|
||||
* @author emerald000
|
||||
*/
|
||||
public class CountervailingWinds extends CardImpl {
|
||||
|
||||
public CountervailingWinds(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}");
|
||||
|
||||
|
||||
// Counter target spell unless its controller pays {1} for each card in your graveyard.
|
||||
this.getSpellAbility().addEffect(new CountervailingWindsEffect());
|
||||
Effect effect = new CounterUnlessPaysEffect(new CardsInControllerGraveyardCount());
|
||||
effect.setText("Counter target spell unless its controller pays {1} for each card in your graveyard");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
this.getSpellAbility().addTarget(new TargetSpell());
|
||||
|
||||
|
||||
// Cycling {2}
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}")));
|
||||
this.addAbility(new CyclingAbility(new GenericManaCost(2)));
|
||||
|
||||
}
|
||||
|
||||
|
@ -70,41 +67,3 @@ public class CountervailingWinds extends CardImpl {
|
|||
return new CountervailingWinds(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CountervailingWindsEffect extends OneShotEffect {
|
||||
|
||||
public CountervailingWindsEffect() {
|
||||
super(Outcome.Detriment);
|
||||
}
|
||||
|
||||
public CountervailingWindsEffect(final CountervailingWindsEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CountervailingWindsEffect copy() {
|
||||
return new CountervailingWindsEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
StackObject spell = game.getStack().getStackObject(targetPointer.getFirst(game, source));
|
||||
if (spell != null) {
|
||||
Player player = game.getPlayer(spell.getControllerId());
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (player != null && controller != null) {
|
||||
int amount = controller.getGraveyard().size();
|
||||
if (amount == 0) {
|
||||
game.informPlayers("Countervailing Winds: no cards in controller's graveyard.");
|
||||
} else {
|
||||
GenericManaCost cost = new GenericManaCost(amount);
|
||||
if (!cost.pay(source, game, spell.getControllerId(), spell.getControllerId(), false)) {
|
||||
game.informPlayers("Countervailing Winds: cost wasn't payed - countering target spell.");
|
||||
return game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
50
Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java
Normal file
50
Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java
Normal file
|
@ -0,0 +1,50 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
import mage.Mana;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.abilities.mana.SimpleManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
|
||||
public class CryptOfTheEternals extends CardImpl {
|
||||
|
||||
public CryptOfTheEternals(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
// When Crypt of the Eternals enters the battlefield, you gain 1 life.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(1)));
|
||||
|
||||
// {T}: Add {C} to your mana pool.
|
||||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// {1}, {T}: Add {U}, {B}, or {R} to your mana pool.
|
||||
ArrayList<Mana> list = new ArrayList<Mana>() {{
|
||||
add(Mana.BlueMana(1));
|
||||
add(Mana.BlackMana(1));
|
||||
add(Mana.RedMana(1));
|
||||
}};
|
||||
|
||||
for(Mana m: list) {
|
||||
SimpleManaAbility uAbility = new SimpleManaAbility(Zone.BATTLEFIELD, m, new ManaCostsImpl("{1}"));
|
||||
uAbility.addCost(new TapSourceCost());
|
||||
this.addAbility(uAbility);
|
||||
}
|
||||
}
|
||||
|
||||
public CryptOfTheEternals(final CryptOfTheEternals card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CryptOfTheEternals copy() {
|
||||
return new CryptOfTheEternals(this);
|
||||
}
|
||||
}
|
72
Mage.Sets/src/mage/cards/c/CunningSurvivor.java
Normal file
72
Mage.Sets/src/mage/cards/c/CunningSurvivor.java
Normal file
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CycleOrDiscardControllerTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public class CunningSurvivor extends CardImpl {
|
||||
|
||||
public CunningSurvivor(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
||||
|
||||
this.subtype.add("Human");
|
||||
this.subtype.add("Warrior");
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Whenever you cycle or discard a card, Cunning Survivor gets +1/+0 until end of turn and can't be blocked this turn.
|
||||
Ability ability = new CycleOrDiscardControllerTriggeredAbility(new BoostSourceEffect(1, 0, Duration.EndOfTurn));
|
||||
Effect effect = new CantBeBlockedSourceEffect(Duration.EndOfTurn);
|
||||
effect.setText("and can't be blocked this turn");
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public CunningSurvivor(final CunningSurvivor card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CunningSurvivor copy() {
|
||||
return new CunningSurvivor(this);
|
||||
}
|
||||
}
|
50
Mage.Sets/src/mage/cards/e/EndlessSands.java
Normal file
50
Mage.Sets/src/mage/cards/e/EndlessSands.java
Normal file
|
@ -0,0 +1,50 @@
|
|||
package mage.cards.e;
|
||||
|
||||
import mage.abilities.effects.common.ReturnCreaturesFromExileEffect;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.ExileTargetEffect;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
public class EndlessSands extends CardImpl {
|
||||
|
||||
public EndlessSands(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
this.subtype.add("Desert");
|
||||
|
||||
// {T}: Add {C} to your mana pool.
|
||||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// {2}, {T}: Exile target creature you control.
|
||||
Ability exileAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(this.getId(), this.getIdName()), new ManaCostsImpl("{2}"));
|
||||
exileAbility.addCost(new TapSourceCost());
|
||||
exileAbility.addTarget(new TargetControlledCreaturePermanent());
|
||||
this.addAbility(exileAbility);
|
||||
|
||||
// {4}, {T}, Sacrifice Endless Sands: Return each creature card exiled with Endless Sands to the battlefield under its owner’s control.
|
||||
ReturnCreaturesFromExileEffect returnFromExileEffect = new ReturnCreaturesFromExileEffect(this.getId(), true, "Return each creature card exiled with {this} to the battlefield under its owner’s control.");
|
||||
Ability returnAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, returnFromExileEffect, new ManaCostsImpl("{4}"));
|
||||
returnAbility.addCost(new TapSourceCost());
|
||||
returnAbility.addCost(new SacrificeSourceCost());
|
||||
this.addAbility(returnAbility);
|
||||
}
|
||||
|
||||
public EndlessSands(final EndlessSands card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EndlessSands copy() {
|
||||
return new EndlessSands(this);
|
||||
}
|
||||
}
|
68
Mage.Sets/src/mage/cards/e/EternalOfHarshTruths.java
Normal file
68
Mage.Sets/src/mage/cards/e/EternalOfHarshTruths.java
Normal file
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.e;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksAndIsNotBlockedTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.keyword.AfflictAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public class EternalOfHarshTruths extends CardImpl {
|
||||
|
||||
public EternalOfHarshTruths(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
|
||||
|
||||
this.subtype.add("Zombie");
|
||||
this.subtype.add("Cleric");
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Afflict 2
|
||||
this.addAbility(new AfflictAbility(2));
|
||||
|
||||
// Whenever Eternal of Harsh Truths attacks and isn't blocked, draw a card.
|
||||
this.addAbility(new AttacksAndIsNotBlockedTriggeredAbility(new DrawCardSourceControllerEffect(1)));
|
||||
}
|
||||
|
||||
public EternalOfHarshTruths(final EternalOfHarshTruths card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EternalOfHarshTruths copy() {
|
||||
return new EternalOfHarshTruths(this);
|
||||
}
|
||||
}
|
|
@ -27,13 +27,9 @@
|
|||
*/
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.GetEmblemEffect;
|
||||
import mage.abilities.effects.common.PreventAllDamageToSourceEffect;
|
||||
|
@ -42,15 +38,14 @@ import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
|
|||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.common.FilterPlaneswalkerPermanent;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.game.command.emblems.GideonOfTheTrialsEmblem;
|
||||
import mage.game.permanent.token.Token;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JRHerlehy
|
||||
|
@ -94,45 +89,6 @@ public class GideonOfTheTrials extends CardImpl {
|
|||
}
|
||||
}
|
||||
|
||||
class GideonOfTheTrialsCantLoseEffect extends ContinuousRuleModifyingEffectImpl {
|
||||
|
||||
private static final FilterPlaneswalkerPermanent filter = new FilterPlaneswalkerPermanent("a Gideon planeswalker");
|
||||
|
||||
static {
|
||||
filter.add(new SubtypePredicate(SubType.GIDEON));
|
||||
}
|
||||
|
||||
public GideonOfTheTrialsCantLoseEffect() {
|
||||
super(Duration.EndOfGame, Outcome.Benefit);
|
||||
staticText = "As long as you control a Gideon planeswalker, you can't lose the game and your opponents can't win the game";
|
||||
}
|
||||
|
||||
public GideonOfTheTrialsCantLoseEffect(final GideonOfTheTrialsCantLoseEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
if ((event.getType() == GameEvent.EventType.WINS && game.getOpponents(source.getControllerId()).contains(event.getPlayerId()))
|
||||
|| (event.getType() == GameEvent.EventType.LOSES && event.getPlayerId().equals(source.getControllerId()))) {
|
||||
if (game.getBattlefield().contains(filter, source.getControllerId(), 1, game)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GideonOfTheTrialsCantLoseEffect copy() {
|
||||
return new GideonOfTheTrialsCantLoseEffect(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GideonOfTheTrialsToken extends Token {
|
||||
|
||||
public GideonOfTheTrialsToken() {
|
||||
|
|
37
Mage.Sets/src/mage/cards/g/GiftOfStrength.java
Normal file
37
Mage.Sets/src/mage/cards/g/GiftOfStrength.java
Normal file
|
@ -0,0 +1,37 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.keyword.ReachAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class GiftOfStrength extends CardImpl {
|
||||
|
||||
public GiftOfStrength(UUID ownerId, CardSetInfo cardSetInfo) {
|
||||
super(ownerId, cardSetInfo, new CardType[]{CardType.INSTANT}, "{1}{G}");
|
||||
|
||||
// Target creature gets +3/+3 and gains reach until end of turn.
|
||||
Effect effect = new BoostTargetEffect(3, 3, Duration.EndOfTurn);
|
||||
effect.setText("Target creature gets +3/+3");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
effect = new GainAbilityTargetEffect(ReachAbility.getInstance(), Duration.EndOfTurn);
|
||||
effect.setText("and gains reach until end of turn");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
}
|
||||
|
||||
public GiftOfStrength(final GiftOfStrength giftOfStrength) {
|
||||
super(giftOfStrength);
|
||||
}
|
||||
|
||||
public GiftOfStrength copy() {
|
||||
return new GiftOfStrength(this);
|
||||
}
|
||||
}
|
129
Mage.Sets/src/mage/cards/g/GodPharaohsGift.java
Normal file
129
Mage.Sets/src/mage/cards/g/GodPharaohsGift.java
Normal file
|
@ -0,0 +1,129 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.EmptyToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public class GodPharaohsGift extends CardImpl {
|
||||
|
||||
public GodPharaohsGift(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{7}");
|
||||
|
||||
// At the beginning of combat on your turn, you may exile a creature card from your graveyard. If you do, create a token that's a copy of that card, except it's a 4/4 black Zombie. It gains haste until end of turn.
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, new GodPharaohsGiftEffect(), TargetController.YOU, true, false));
|
||||
|
||||
}
|
||||
|
||||
public GodPharaohsGift(final GodPharaohsGift card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GodPharaohsGift copy() {
|
||||
return new GodPharaohsGift(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GodPharaohsGiftEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterCreatureCard filter = new FilterCreatureCard("creature card from your graveyard");
|
||||
private UUID exileId = UUID.randomUUID();
|
||||
|
||||
public GodPharaohsGiftEffect() {
|
||||
super(Outcome.PutCreatureInPlay);
|
||||
this.staticText = "you may exile a creature card from your graveyard. If you do, create a token that's a copy of that card, except it's a 4/4 black Zombie. It gains haste until end of turn";
|
||||
}
|
||||
|
||||
public GodPharaohsGiftEffect(final GodPharaohsGiftEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GodPharaohsGiftEffect copy() {
|
||||
return new GodPharaohsGiftEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(filter);
|
||||
target.setNotTarget(true);
|
||||
if (controller != null
|
||||
&& !controller.getGraveyard().getCards(filter, game).isEmpty()
|
||||
&& controller.choose(Outcome.PutCreatureInPlay, target, source.getId(), game)) {
|
||||
Card cardChosen = game.getCard(target.getFirstTarget());
|
||||
if (cardChosen != null
|
||||
&& cardChosen.moveToExile(exileId, "God-Pharaoh's Gift", source.getId(), game)) {
|
||||
EmptyToken token = new EmptyToken();
|
||||
CardUtil.copyTo(token).from(cardChosen);
|
||||
token.getPower().modifyBaseValue(4);
|
||||
token.getToughness().modifyBaseValue(4);
|
||||
token.getColor(game).setColor(ObjectColor.BLACK);
|
||||
token.getSubtype(game).clear();
|
||||
token.getSubtype(game).add("Zombie");
|
||||
if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) {
|
||||
Permanent tokenPermanent = game.getPermanent(token.getLastAddedToken());
|
||||
if (tokenPermanent != null) {
|
||||
ContinuousEffect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
|
||||
effect.setTargetPointer(new FixedTarget(tokenPermanent.getId()));
|
||||
game.addEffect(effect, source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
36
Mage.Sets/src/mage/cards/g/GraniticTitan.java
Normal file
36
Mage.Sets/src/mage/cards/g/GraniticTitan.java
Normal file
|
@ -0,0 +1,36 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class GraniticTitan extends CardImpl {
|
||||
|
||||
public GraniticTitan(UUID ownerId, CardSetInfo cardSetInfo){
|
||||
super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE},"{4}{R}{R}");
|
||||
subtype.add("Elemental");
|
||||
power = new MageInt(5);
|
||||
toughness = new MageInt(4);
|
||||
|
||||
// Menace
|
||||
addAbility(new MenaceAbility());
|
||||
|
||||
// Cycling {2}
|
||||
addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}")));
|
||||
|
||||
}
|
||||
|
||||
public GraniticTitan(final GraniticTitan graniticTitan){
|
||||
super(graniticTitan);
|
||||
}
|
||||
|
||||
public GraniticTitan copy(){
|
||||
return new GraniticTitan(this);
|
||||
}
|
||||
}
|
93
Mage.Sets/src/mage/cards/g/GravenAbomination.java
Normal file
93
Mage.Sets/src/mage/cards/g/GravenAbomination.java
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.effects.common.ExileTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.predicate.other.OwnerIdPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCardInGraveyard;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public class GravenAbomination extends CardImpl {
|
||||
|
||||
private final UUID originalId;
|
||||
|
||||
private final static String rule = "Whenever {this} attacks, exile target card from defending player's graveyard.";
|
||||
|
||||
public GravenAbomination(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
|
||||
|
||||
this.subtype.add("Horror");
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Whenever Graven Abomination attacks, exile target card from defending player's graveyard.
|
||||
Ability ability = new AttacksTriggeredAbility(new ExileTargetEffect(), false, rule);
|
||||
ability.addTarget(new TargetCardInGraveyard());
|
||||
this.addAbility(ability);
|
||||
originalId = ability.getOriginalId();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void adjustTargets(Ability ability, Game game) {
|
||||
UUID gravenAbominationId = ability.getSourceId();
|
||||
FilterCard filter = new FilterCard("target card from defending player's graveyard");
|
||||
if (ability.getOriginalId().equals(originalId)) {
|
||||
UUID defendingPlayerId = game.getCombat().getDefendingPlayerId(gravenAbominationId, game);
|
||||
Player defendingPlayer = game.getPlayer(defendingPlayerId);
|
||||
if (defendingPlayer != null) {
|
||||
filter.add(new OwnerIdPredicate(defendingPlayerId));
|
||||
ability.getTargets().clear();
|
||||
ability.getTargets().add(new TargetCardInGraveyard(filter));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public GravenAbomination(final GravenAbomination card) {
|
||||
super(card);
|
||||
this.originalId = card.originalId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GravenAbomination copy() {
|
||||
return new GravenAbomination(this);
|
||||
}
|
||||
}
|
123
Mage.Sets/src/mage/cards/h/HollowOne.java
Normal file
123
Mage.Sets/src/mage/cards/h/HollowOne.java
Normal file
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.h;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.CostModificationType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
import mage.watchers.common.CardsCycledOrDiscardedThisTurnWatcher;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public class HollowOne extends CardImpl {
|
||||
|
||||
public HollowOne(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}");
|
||||
|
||||
this.subtype.add("Golem");
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Hollow One costs {2} less to cast for each card you've cycled or discarded this turn.
|
||||
Ability ability = new SimpleStaticAbility(Zone.ALL, new HollowOneReductionEffect());
|
||||
ability.setRuleAtTheTop(true);
|
||||
this.addAbility(ability, new CardsCycledOrDiscardedThisTurnWatcher());
|
||||
|
||||
// Cycling {2}
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}")));
|
||||
}
|
||||
|
||||
public HollowOne(final HollowOne card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HollowOne copy() {
|
||||
return new HollowOne(this);
|
||||
}
|
||||
}
|
||||
|
||||
class HollowOneReductionEffect extends CostModificationEffectImpl {
|
||||
|
||||
public HollowOneReductionEffect() {
|
||||
super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.REDUCE_COST);
|
||||
staticText = "{this} costs {2} less to cast for each card you've cycled or discarded this turn";
|
||||
}
|
||||
|
||||
protected HollowOneReductionEffect(HollowOneReductionEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source, Ability abilityToModify) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
CardsCycledOrDiscardedThisTurnWatcher watcher = (CardsCycledOrDiscardedThisTurnWatcher) game.getState().getWatchers().get(CardsCycledOrDiscardedThisTurnWatcher.class.getSimpleName());
|
||||
int reductionAmount = 0;
|
||||
if (controller != null
|
||||
&& watcher != null) {
|
||||
for (Card card : watcher.getCardsCycledOrDiscardedThisTurn(controller.getId()).getCards(game)) {
|
||||
if (card.getOwnerId().equals(controller.getId())) {
|
||||
reductionAmount++;
|
||||
}
|
||||
}
|
||||
CardUtil.reduceCost(abilityToModify, reductionAmount * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
return abilityToModify instanceof SpellAbility
|
||||
&& abilityToModify.getSourceId().equals(source.getSourceId())
|
||||
&& game.getCard(abilityToModify.getSourceId()) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HollowOneReductionEffect copy() {
|
||||
return new HollowOneReductionEffect(this);
|
||||
}
|
||||
}
|
117
Mage.Sets/src/mage/cards/h/HourOfEternity.java
Normal file
117
Mage.Sets/src/mage/cards/h/HourOfEternity.java
Normal file
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.h;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.token.EmptyToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public class HourOfEternity extends CardImpl {
|
||||
|
||||
public HourOfEternity(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{U}{U}{U}");
|
||||
|
||||
// Exile X target creature cards from your graveyard. For each card exiled this way, create a token that's a copy of that card, except it's a 4/4 black Zombie.
|
||||
this.getSpellAbility().addEffect(new HourOfEternityEffect());
|
||||
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, Integer.MAX_VALUE, new FilterCreatureCard("creature cards from your graveyard")));
|
||||
}
|
||||
|
||||
public HourOfEternity(final HourOfEternity card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HourOfEternity copy() {
|
||||
return new HourOfEternity(this);
|
||||
}
|
||||
}
|
||||
|
||||
class HourOfEternityEffect extends OneShotEffect {
|
||||
|
||||
HourOfEternityEffect() {
|
||||
super(Outcome.PutCreatureInPlay);
|
||||
this.staticText = "Exile X target creature cards from your graveyard. For each card exiled this way, create a token that's a copy of that card, except it's a 4/4 black Zombie";
|
||||
}
|
||||
|
||||
HourOfEternityEffect(final HourOfEternityEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HourOfEternityEffect copy() {
|
||||
return new HourOfEternityEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
Set<Card> cardsToExile = new HashSet<>(this.getTargetPointer().getTargets(game, source).size());
|
||||
for (UUID targetId : this.getTargetPointer().getTargets(game, source)) {
|
||||
Card card = controller.getGraveyard().get(targetId, game);
|
||||
if (card != null) {
|
||||
cardsToExile.add(card);
|
||||
}
|
||||
}
|
||||
controller.moveCardsToExile(cardsToExile, source, game, true, null, "");
|
||||
for (Card card : cardsToExile) {
|
||||
if (game.getState().getZone(card.getId()) == Zone.EXILED) {
|
||||
EmptyToken token = new EmptyToken();
|
||||
CardUtil.copyTo(token).from(card);
|
||||
token.getPower().modifyBaseValue(4);
|
||||
token.getToughness().modifyBaseValue(4);
|
||||
token.getColor(game).setColor(ObjectColor.BLACK);
|
||||
token.getSubtype(game).clear();
|
||||
token.getSubtype(game).add("Zombie");
|
||||
token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId());
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
71
Mage.Sets/src/mage/cards/h/HourOfPromise.java
Normal file
71
Mage.Sets/src/mage/cards/h/HourOfPromise.java
Normal file
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.h;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterLandCard;
|
||||
import mage.game.permanent.token.ZombieToken;
|
||||
import mage.target.common.TargetCardInLibrary;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class HourOfPromise extends CardImpl {
|
||||
|
||||
public HourOfPromise(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{G}");
|
||||
|
||||
// Search your library for up to two land cards and put them onto the battlefield tapped, then shuffle your library.
|
||||
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, new FilterLandCard("land cards")), true));
|
||||
// Then if you control three or more Deserts, create two 2/2 black Zombie creature tokens.
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new CreateTokenEffect(new ZombieToken(), 2),
|
||||
new PermanentsOnTheBattlefieldCondition(new FilterPermanent(SubType.DESERT, "three or more Deserts"), ComparisonType.MORE_THAN, 2, true),
|
||||
"Then if you control three or more Deserts, create two 2/2 black Zombie creature tokens"));
|
||||
|
||||
}
|
||||
|
||||
public HourOfPromise(final HourOfPromise card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HourOfPromise copy() {
|
||||
return new HourOfPromise(this);
|
||||
}
|
||||
}
|
|
@ -34,14 +34,12 @@ import mage.abilities.costs.common.PayLifeCost;
|
|||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.abilities.mana.BlackManaAbility;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
|
@ -52,35 +50,36 @@ import mage.target.common.TargetOpponentsCreaturePermanent;
|
|||
|
||||
/**
|
||||
*
|
||||
* @author ciaccona007
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public class IfnirDeadlands extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Desert");
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Desert");
|
||||
|
||||
static {
|
||||
filter.add(new SubtypePredicate(SubType.DESERT));
|
||||
}
|
||||
|
||||
|
||||
public IfnirDeadlands(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
this.subtype.add("Desert");
|
||||
|
||||
// {t}: Add {C} to your mana pool.
|
||||
addAbility(new ColorlessManaAbility());
|
||||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// {t}, Pay 1 life: Add {B} to your mana pool.
|
||||
Ability ability = new BlackManaAbility();
|
||||
ability.addCost(new PayLifeCost(1));
|
||||
addAbility(ability);
|
||||
Ability manaAbility = new BlackManaAbility();
|
||||
manaAbility.addCost(new PayLifeCost(1));
|
||||
this.addAbility(manaAbility);
|
||||
|
||||
// {2}{B}{B}, {t}, Sacrifice a Desert: Put two -1/-1 counters on target creature an opponent controls. Activate this ability only any time you could cast a sorcery.
|
||||
ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.M1M1.createInstance(2)), new ManaCostsImpl("{2}{B}{B}"));
|
||||
ability.addTarget(new TargetOpponentsCreaturePermanent());
|
||||
Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.M1M1.createInstance(2)), new ManaCostsImpl("{2}{B}{B}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
|
||||
addAbility(ability);
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, true)));
|
||||
ability.addTarget(new TargetOpponentsCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
|
||||
}
|
||||
|
||||
public IfnirDeadlands(final IfnirDeadlands card) {
|
||||
|
@ -91,4 +90,4 @@ public class IfnirDeadlands extends CardImpl {
|
|||
public IfnirDeadlands copy() {
|
||||
return new IfnirDeadlands(this);
|
||||
}
|
||||
}
|
||||
}
|
106
Mage.Sets/src/mage/cards/i/ImaginaryThreats.java
Normal file
106
Mage.Sets/src/mage/cards/i/ImaginaryThreats.java
Normal file
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.i;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.RequirementEffect;
|
||||
import mage.abilities.effects.common.DontUntapInOpponentsNextUntapStepAllEffect;
|
||||
import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.ControllerIdPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetOpponent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class ImaginaryThreats extends CardImpl {
|
||||
|
||||
public ImaginaryThreats(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}{U}");
|
||||
|
||||
// Creatures target opponent controls attack this turn if able. During that player's next untap step, creatures he or she controls don't untap.
|
||||
getSpellAbility().addEffect(new ImaginaryThreatsEffect());
|
||||
getSpellAbility().addTarget(new TargetOpponent());
|
||||
getSpellAbility().addEffect(new DontUntapInOpponentsNextUntapStepAllEffect(new FilterCreaturePermanent())
|
||||
.setText("During that player's next untap step, creatures he or she controls don't untap"));
|
||||
// Cycling {2}
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}")));
|
||||
|
||||
}
|
||||
|
||||
public ImaginaryThreats(final ImaginaryThreats card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImaginaryThreats copy() {
|
||||
return new ImaginaryThreats(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ImaginaryThreatsEffect extends OneShotEffect {
|
||||
|
||||
public ImaginaryThreatsEffect() {
|
||||
super(Outcome.Detriment);
|
||||
staticText = "Creatures target opponent controls attack this turn if able";
|
||||
}
|
||||
|
||||
public ImaginaryThreatsEffect(final ImaginaryThreatsEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImaginaryThreatsEffect copy() {
|
||||
return new ImaginaryThreatsEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(this.getTargetPointer().getFirst(game, source));
|
||||
if (player != null) {
|
||||
FilterCreaturePermanent filter = new FilterCreaturePermanent();
|
||||
filter.add(new ControllerIdPredicate(player.getId()));
|
||||
RequirementEffect effect = new AttacksIfAbleAllEffect(filter, Duration.EndOfTurn);
|
||||
game.addEffect(effect, source);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
151
Mage.Sets/src/mage/cards/i/ImminentDoom.java
Normal file
151
Mage.Sets/src/mage/cards/i/ImminentDoom.java
Normal file
|
@ -0,0 +1,151 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.i;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.EntersBattlefieldAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.target.common.TargetCreatureOrPlayer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public class ImminentDoom extends CardImpl {
|
||||
|
||||
public ImminentDoom(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}");
|
||||
|
||||
// Imminent Doom enters the battlefield with a doom counter on it.
|
||||
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.DOOM.createInstance(1))));
|
||||
|
||||
// Whenever you cast a spell with converted mana cost equal to the number of doom counters on Imminent Doom, Imminent Doom deals that much damage to target creature or player. Then put a doom counter on Imminent Doom.
|
||||
Ability ability = new ImminentDoomTriggeredAbility();
|
||||
ability.addTarget(new TargetCreatureOrPlayer());
|
||||
this.addAbility(ability);
|
||||
|
||||
}
|
||||
|
||||
public ImminentDoom(final ImminentDoom card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImminentDoom copy() {
|
||||
return new ImminentDoom(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ImminentDoomTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private String rule = "Whenever you cast a spell with converted mana cost equal to the number of doom counters on {this}, {this} deals that much damage to target creature or player. Then put a doom counter on {this}.";
|
||||
|
||||
public ImminentDoomTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new ImminentDoomEffect());
|
||||
}
|
||||
|
||||
public ImminentDoomTriggeredAbility(final ImminentDoomTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImminentDoomTriggeredAbility copy() {
|
||||
return new ImminentDoomTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.SPELL_CAST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (event.getPlayerId().equals(this.getControllerId())) {
|
||||
Permanent imminentDoom = game.getPermanent(getSourceId());
|
||||
Spell spell = game.getStack().getSpell(event.getTargetId());
|
||||
if (spell != null
|
||||
&& imminentDoom != null
|
||||
&& spell.getConvertedManaCost() == imminentDoom.getCounters(game).getCount(CounterType.DOOM)) {
|
||||
game.getState().setValue("ImminentDoomCount" + getSourceId().toString(), imminentDoom.getCounters(game).getCount(CounterType.DOOM)); // store its current value
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return rule;
|
||||
}
|
||||
}
|
||||
|
||||
class ImminentDoomEffect extends OneShotEffect {
|
||||
|
||||
public ImminentDoomEffect() {
|
||||
super(Outcome.Detriment);
|
||||
}
|
||||
|
||||
public ImminentDoomEffect(final ImminentDoomEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImminentDoomEffect copy() {
|
||||
return new ImminentDoomEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent imminentDoom = game.getPermanent(source.getSourceId());
|
||||
if (imminentDoom != null) {
|
||||
Effect effect = new DamageTargetEffect((int) game.getState().getValue("ImminentDoomCount" + source.getSourceId().toString()));
|
||||
effect.apply(game, source);
|
||||
imminentDoom.addCounters(CounterType.DOOM.createInstance(), source, game);
|
||||
game.getState().setValue("ImminentDoomCount" + source.getSourceId().toString(), 0); // reset to 0 to avoid any silliness
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -63,7 +63,7 @@ public class InciteWar extends CardImpl {
|
|||
}
|
||||
|
||||
public InciteWar(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
|
||||
|
||||
// Choose one - Creatures target player controls attack this turn if able;
|
||||
this.getSpellAbility().addEffect(new InciteWarMustAttackEffect());
|
||||
|
@ -93,7 +93,7 @@ class InciteWarMustAttackEffect extends OneShotEffect {
|
|||
|
||||
public InciteWarMustAttackEffect() {
|
||||
super(Outcome.Detriment);
|
||||
staticText = "Creatures target player control attack this turn if able";
|
||||
staticText = "Creatures target player controls attack this turn if able";
|
||||
}
|
||||
|
||||
public InciteWarMustAttackEffect(final InciteWarMustAttackEffect effect) {
|
||||
|
|
91
Mage.Sets/src/mage/cards/i/IpnuRivulet.java
Normal file
91
Mage.Sets/src/mage/cards/i/IpnuRivulet.java
Normal file
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.i;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.PayLifeCost;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect;
|
||||
import mage.abilities.mana.BlueManaAbility;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.target.TargetPlayer;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class IpnuRivulet extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Desert");
|
||||
|
||||
static {
|
||||
filter.add(new SubtypePredicate(SubType.DESERT));
|
||||
}
|
||||
|
||||
public IpnuRivulet(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
this.subtype.add("Desert");
|
||||
|
||||
// {t}: Add {C} to your mana pool.
|
||||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// {t}, Pay 1 life: Add {U} to your mana pool.
|
||||
Ability manaAbility = new BlueManaAbility();
|
||||
manaAbility.addCost(new PayLifeCost(1));
|
||||
this.addAbility(manaAbility);
|
||||
|
||||
// {1}{U}, {t}, Sacrifice a Desert: Target player puts the top four cards of his or her library into his or her graveyard.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(4), new ManaCostsImpl("{1}{U}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, true)));
|
||||
ability.addTarget(new TargetPlayer());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public IpnuRivulet(final IpnuRivulet card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IpnuRivulet copy() {
|
||||
return new IpnuRivulet(this);
|
||||
}
|
||||
}
|
121
Mage.Sets/src/mage/cards/j/JacesDefeat.java
Normal file
121
Mage.Sets/src/mage/cards/j/JacesDefeat.java
Normal file
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.j;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetSpell;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class JacesDefeat extends CardImpl {
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell("blue spell");
|
||||
|
||||
static {
|
||||
filter.add(new ColorPredicate(ObjectColor.BLUE));
|
||||
}
|
||||
|
||||
public JacesDefeat(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
|
||||
|
||||
// Counter target blue spell. If it was a Jace planeswalker spell, scry 2.
|
||||
this.getSpellAbility().addEffect(new JacesDefeatEffect());
|
||||
this.getSpellAbility().addTarget(new TargetSpell(filter));
|
||||
}
|
||||
|
||||
public JacesDefeat(final JacesDefeat card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JacesDefeat copy() {
|
||||
return new JacesDefeat(this);
|
||||
}
|
||||
}
|
||||
|
||||
class JacesDefeatEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell();
|
||||
|
||||
static {
|
||||
filter.add(new CardTypePredicate(CardType.PLANESWALKER));
|
||||
filter.add(new SubtypePredicate(SubType.JACE));
|
||||
}
|
||||
|
||||
public JacesDefeatEffect() {
|
||||
super(Outcome.Damage);
|
||||
this.staticText = "Counter target blue spell. If it was a Jace planeswalker spell, scry 2.";
|
||||
}
|
||||
|
||||
public JacesDefeatEffect(final JacesDefeatEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JacesDefeatEffect copy() {
|
||||
return new JacesDefeatEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
MageObject sourceObject = game.getObject(source.getSourceId());
|
||||
if (sourceObject != null) {
|
||||
for (UUID targetId : getTargetPointer().getTargets(game, source) ) {
|
||||
Spell spell = game.getStack().getSpell(targetId);
|
||||
if (spell != null) {
|
||||
game.getStack().counter(targetId, source.getSourceId(), game);
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
// If it was a Jace planeswalker, you may discard a card. If you do, draw a card
|
||||
if (filter.match(spell, game) && controller != null) {
|
||||
controller.scry(2, source, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
67
Mage.Sets/src/mage/cards/k/KefnetsLastWord.java
Normal file
67
Mage.Sets/src/mage/cards/k/KefnetsLastWord.java
Normal file
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.k;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.DontUntapInControllersUntapStepAllEffect;
|
||||
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledLandPermanent;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class KefnetsLastWord extends CardImpl {
|
||||
|
||||
public KefnetsLastWord(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{U}{U}");
|
||||
|
||||
// Gain control of target artifact, creature or enchantment. Lands you control don't untap during your next untap step.
|
||||
this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE_OR_ENCHANTMENT));
|
||||
this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.Custom));
|
||||
this.getSpellAbility().addEffect(new DontUntapInControllersUntapStepAllEffect(
|
||||
Duration.UntilYourNextTurn, TargetController.YOU, new FilterControlledLandPermanent("Lands you control"))
|
||||
.setText("Lands you control don't untap during your next untap phase"));
|
||||
}
|
||||
|
||||
public KefnetsLastWord(final KefnetsLastWord card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KefnetsLastWord copy() {
|
||||
return new KefnetsLastWord(this);
|
||||
}
|
||||
}
|
115
Mage.Sets/src/mage/cards/l/LethalSting.java
Normal file
115
Mage.Sets/src/mage/cards/l/LethalSting.java
Normal file
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.l;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.CostImpl;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class LethalSting extends CardImpl {
|
||||
|
||||
public LethalSting(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
|
||||
|
||||
// As an additional cost to cast Lethal Sting, put a -1/-1 counter on a creature you control.
|
||||
this.getSpellAbility().addCost(new LethalStingCost());
|
||||
|
||||
// Destroy target creature.
|
||||
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
}
|
||||
|
||||
public LethalSting(final LethalSting card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LethalSting copy() {
|
||||
return new LethalSting(this);
|
||||
}
|
||||
}
|
||||
|
||||
class LethalStingCost extends CostImpl {
|
||||
|
||||
public LethalStingCost() {
|
||||
this.text = "put a -1/-1 counter on a creature you control";
|
||||
}
|
||||
|
||||
public LethalStingCost(LethalStingCost cost) {
|
||||
super(cost);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) {
|
||||
for (Permanent permanent : game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), controllerId, game)) {
|
||||
return permanent != null;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
|
||||
Player controller = game.getPlayer(ability.getControllerId());
|
||||
if (controller != null) {
|
||||
Target target = new TargetControlledCreaturePermanent();
|
||||
target.setNotTarget(true);
|
||||
controller.chooseTarget(Outcome.UnboostCreature, target, ability, game);
|
||||
Permanent permanent = game.getPermanent(target.getFirstTarget());
|
||||
if (permanent != null) {
|
||||
permanent.addCounters(CounterType.M1M1.createInstance(), ability, game);
|
||||
game.informPlayers(controller.getLogName() + " puts a -1/-1 counter on " + permanent.getLogName());
|
||||
this.paid = true;
|
||||
}
|
||||
|
||||
}
|
||||
return paid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LethalStingCost copy() {
|
||||
return new LethalStingCost(this);
|
||||
}
|
||||
}
|
48
Mage.Sets/src/mage/cards/m/Magmaroth.java
Normal file
48
Mage.Sets/src/mage/cards/m/Magmaroth.java
Normal file
|
@ -0,0 +1,48 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class Magmaroth extends CardImpl{
|
||||
|
||||
private static final FilterSpell filterNonCreature = new FilterSpell("a noncreature spell");
|
||||
|
||||
static {
|
||||
filterNonCreature.add(Predicates.not(new CardTypePredicate(CardType.CREATURE)));
|
||||
}
|
||||
|
||||
public Magmaroth(UUID ownerId, CardSetInfo cardSetInfo){
|
||||
super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||
subtype.add("Elemental");
|
||||
power = new MageInt(5);
|
||||
toughness = new MageInt(5);
|
||||
|
||||
// At the beginning of your upkeep, put a -1/-1 counter on Magmaroth
|
||||
addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.M1M1.createInstance()), TargetController.YOU, false));
|
||||
|
||||
// Whenever you cast a noncreature spell, remove a -1/-1 counter from Magmaroth
|
||||
addAbility(new SpellCastControllerTriggeredAbility(new RemoveCounterSourceEffect(CounterType.M1M1.createInstance()), filterNonCreature, false));
|
||||
|
||||
}
|
||||
|
||||
public Magmaroth(final Magmaroth magmaroth){
|
||||
super(magmaroth);
|
||||
}
|
||||
|
||||
public Magmaroth copy(){
|
||||
return new Magmaroth(this);
|
||||
}
|
||||
}
|
208
Mage.Sets/src/mage/cards/m/MajesticMyriarch.java
Normal file
208
Mage.Sets/src/mage/cards/m/MajesticMyriarch.java
Normal file
|
@ -0,0 +1,208 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.MultipliedValue;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.abilities.keyword.DoubleStrikeAbility;
|
||||
import mage.abilities.keyword.FirstStrikeAbility;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.HexproofAbility;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.abilities.keyword.ReachAbility;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.AbilityPredicate;
|
||||
import mage.game.Game;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class MajesticMyriarch extends CardImpl {
|
||||
|
||||
public MajesticMyriarch(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");
|
||||
|
||||
this.subtype.add("Chimera");
|
||||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(0);
|
||||
|
||||
// Majestic Myriarch's power and toughness are each equal to twice the number of creatures you control.
|
||||
DynamicValue xValue= new MultipliedValue(new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent()), 2);
|
||||
Effect effect = new SetPowerToughnessSourceEffect(xValue, Duration.EndOfGame);
|
||||
effect.setText("{this}'s power and toughness are each equal to twice the number of creatures you control");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, effect));
|
||||
|
||||
// At the beginning of each combat, if you control a creature with flying, Majestic Myriarch gains flying until end of turn.
|
||||
// The same is true for first strike, double strike, deathtouch, haste, hexproof, indestructible, lifelink, menace, reach, trample, and vigilance.
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(new MajesticMyriarchEffect(), TargetController.ANY, false));
|
||||
}
|
||||
|
||||
public MajesticMyriarch(final MajesticMyriarch card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MajesticMyriarch copy() {
|
||||
return new MajesticMyriarch(this);
|
||||
}
|
||||
}
|
||||
|
||||
class MajesticMyriarchEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterControlledCreaturePermanent filterFirstStrike = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterFlying = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterDeathtouch = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterDoubleStrike = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterHaste = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterHexproof = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterIndestructible = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterLifelink = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterMenace = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterReach = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterTrample = new FilterControlledCreaturePermanent();
|
||||
private static final FilterControlledCreaturePermanent filterVigilance = new FilterControlledCreaturePermanent();
|
||||
|
||||
static {
|
||||
filterFirstStrike.add(new AbilityPredicate(FirstStrikeAbility.class));
|
||||
filterFlying.add(new AbilityPredicate(FlyingAbility.class));
|
||||
filterDeathtouch.add(new AbilityPredicate(DeathtouchAbility.class));
|
||||
filterDoubleStrike.add(new AbilityPredicate(DoubleStrikeAbility.class));
|
||||
filterHaste.add(new AbilityPredicate(HasteAbility.class));
|
||||
filterHexproof.add(new AbilityPredicate(HexproofAbility.class));
|
||||
filterIndestructible.add(new AbilityPredicate(IndestructibleAbility.class));
|
||||
filterLifelink.add(new AbilityPredicate(LifelinkAbility.class));
|
||||
filterMenace.add(new AbilityPredicate(MenaceAbility.class));
|
||||
filterReach.add(new AbilityPredicate(ReachAbility.class));
|
||||
filterTrample.add(new AbilityPredicate(TrampleAbility.class));
|
||||
filterVigilance.add(new AbilityPredicate(VigilanceAbility.class));
|
||||
}
|
||||
|
||||
MajesticMyriarchEffect() {
|
||||
super(Outcome.BoostCreature);
|
||||
this.staticText = "if you control a creature with flying, Majestic Myriarch gains flying until end of turn. " +
|
||||
"The same is true for first strike, double strike, deathtouch, haste, hexproof, indestructible, lifelink, menace, reach, trample, and vigilance.";
|
||||
}
|
||||
|
||||
MajesticMyriarchEffect(final MajesticMyriarchEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MajesticMyriarchEffect copy() {
|
||||
return new MajesticMyriarchEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
|
||||
// Flying
|
||||
if (game.getBattlefield().contains(filterFlying, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// First strike
|
||||
if (game.getBattlefield().contains(filterFirstStrike, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Double strike
|
||||
if (game.getBattlefield().contains(filterDoubleStrike, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Deathtouch
|
||||
if (game.getBattlefield().contains(filterDeathtouch, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Haste
|
||||
if (game.getBattlefield().contains(filterHaste, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Hexproof
|
||||
if (game.getBattlefield().contains(filterHexproof, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(HexproofAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Indestructible
|
||||
if (game.getBattlefield().contains(filterIndestructible, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Lifelink
|
||||
if (game.getBattlefield().contains(filterLifelink, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Menace
|
||||
if (game.getBattlefield().contains(filterMenace, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Reach
|
||||
if (game.getBattlefield().contains(filterReach, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(ReachAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Trample
|
||||
if (game.getBattlefield().contains(filterTrample, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
|
||||
// Vigilance
|
||||
if (game.getBattlefield().contains(filterVigilance, source.getControllerId(), 1, game)) {
|
||||
game.addEffect(new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn), source);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
35
Mage.Sets/src/mage/cards/m/ManticoreEternal.java
Normal file
35
Mage.Sets/src/mage/cards/m/ManticoreEternal.java
Normal file
|
@ -0,0 +1,35 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksEachCombatStaticAbility;
|
||||
import mage.abilities.keyword.AfflictAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class ManticoreEternal extends CardImpl {
|
||||
|
||||
public ManticoreEternal(UUID ownerId, CardSetInfo cardSetInfo) {
|
||||
super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}");
|
||||
subtype.add("Zombie");
|
||||
subtype.add("Manticore");
|
||||
power = new MageInt(5);
|
||||
toughness = new MageInt(4);
|
||||
|
||||
// Afflict 3
|
||||
addAbility(new AfflictAbility(3));
|
||||
|
||||
// Manticore Eternal attacks each combat if able
|
||||
addAbility(new AttacksEachCombatStaticAbility());
|
||||
}
|
||||
|
||||
public ManticoreEternal(final ManticoreEternal manticoreEternal) {
|
||||
super(manticoreEternal);
|
||||
}
|
||||
|
||||
public ManticoreEternal copy() {
|
||||
return new ManticoreEternal(this);
|
||||
}
|
||||
}
|
75
Mage.Sets/src/mage/cards/m/MercilessEternal.java
Normal file
75
Mage.Sets/src/mage/cards/m/MercilessEternal.java
Normal file
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.keyword.AfflictAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class MercilessEternal extends CardImpl {
|
||||
|
||||
public MercilessEternal(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||
|
||||
this.subtype.add("Zombie");
|
||||
this.subtype.add("Cleric");
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Afflict 2
|
||||
this.addAbility(new AfflictAbility(2));
|
||||
|
||||
// {2}{B}, Discard a card: Merciless Eternal gets +2/+2 until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn), new ManaCostsImpl("{2}{B}"));
|
||||
ability.addCost(new DiscardCardCost(false));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public MercilessEternal(final MercilessEternal card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MercilessEternal copy() {
|
||||
return new MercilessEternal(this);
|
||||
}
|
||||
}
|
100
Mage.Sets/src/mage/cards/m/MirageMirror.java
Normal file
100
Mage.Sets/src/mage/cards/m/MirageMirror.java
Normal file
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.util.functions.EmptyApplyToPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class MirageMirror extends CardImpl {
|
||||
|
||||
|
||||
|
||||
public MirageMirror(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
|
||||
|
||||
// {2}: Mirage Mirror becomes a copy of target artifact, creature, enchantment, or land until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MirageMirrorCopyEffect(), new ManaCostsImpl("{2}"));
|
||||
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE_ENCHANTMENT_OR_LAND));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public MirageMirror(final MirageMirror card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MirageMirror copy() {
|
||||
return new MirageMirror(this);
|
||||
}
|
||||
}
|
||||
|
||||
class MirageMirrorCopyEffect extends OneShotEffect {
|
||||
|
||||
public MirageMirrorCopyEffect() {
|
||||
super(Outcome.Copy);
|
||||
this.staticText = "{this} becomes a copy of target artifact, creature, enchantment, or land until end of turn";
|
||||
}
|
||||
|
||||
public MirageMirrorCopyEffect(final MirageMirrorCopyEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MirageMirrorCopyEffect copy() {
|
||||
return new MirageMirrorCopyEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent sourcePermanent = game.getPermanent(source.getSourceId());
|
||||
Permanent copyFromPermanent = game.getPermanent(getTargetPointer().getFirst(game, source));
|
||||
if (sourcePermanent != null && copyFromPermanent != null) {
|
||||
game.copyPermanent(Duration.EndOfTurn, copyFromPermanent, sourcePermanent.getId(), source, new EmptyApplyToPermanent());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
113
Mage.Sets/src/mage/cards/n/NehebTheEternal.java
Normal file
113
Mage.Sets/src/mage/cards/n/NehebTheEternal.java
Normal file
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.Mana;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfPostCombatMainTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.OpponentsLostLifeCount;
|
||||
import mage.abilities.effects.common.ManaEffect;
|
||||
import mage.abilities.keyword.AfflictAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public class NehebTheEternal extends CardImpl {
|
||||
|
||||
public NehebTheEternal(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}");
|
||||
|
||||
addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add("Zombie");
|
||||
this.subtype.add("Minotaur");
|
||||
this.subtype.add("Warrior");
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(6);
|
||||
|
||||
// Afflict 3
|
||||
addAbility(new AfflictAbility(3));
|
||||
|
||||
// At the beginning of your postcombat main phase, add {R} to your mana pool for each 1 life your opponents have lost this turn.
|
||||
this.addAbility(new BeginningOfPostCombatMainTriggeredAbility(new NehebTheEternalManaEffect(), TargetController.YOU, false));
|
||||
}
|
||||
|
||||
public NehebTheEternal(final NehebTheEternal card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NehebTheEternal copy() {
|
||||
return new NehebTheEternal(this);
|
||||
}
|
||||
}
|
||||
|
||||
class NehebTheEternalManaEffect extends ManaEffect {
|
||||
|
||||
NehebTheEternalManaEffect() {
|
||||
super();
|
||||
this.staticText = "add {R} to your mana pool for each 1 life your opponents have lost this turn";
|
||||
}
|
||||
|
||||
NehebTheEternalManaEffect(final NehebTheEternalManaEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
OpponentsLostLifeCount dynamicValue = new OpponentsLostLifeCount();
|
||||
int amount = dynamicValue.calculate(game, source, this);
|
||||
if (amount > 0) {
|
||||
controller.getManaPool().addMana(Mana.RedMana(amount), game, source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NehebTheEternalManaEffect copy() {
|
||||
return new NehebTheEternalManaEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mana getMana(Game game, Ability source) {
|
||||
return null;
|
||||
}
|
||||
}
|
89
Mage.Sets/src/mage/cards/n/NimbleObstructionist.java
Normal file
89
Mage.Sets/src/mage/cards/n/NimbleObstructionist.java
Normal file
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CycleTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.CounterTargetEffect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
import mage.abilities.keyword.FlashAbility;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.FilterStackObject;
|
||||
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||
import mage.target.common.TargetActivatedOrTriggeredAbility;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author caldover
|
||||
*/
|
||||
public class NimbleObstructionist extends CardImpl {
|
||||
|
||||
private static final FilterStackObject filter = new FilterStackObject("activated or triggered ability you don't control");
|
||||
static {
|
||||
filter.add(new ControllerPredicate(TargetController.NOT_YOU));
|
||||
}
|
||||
|
||||
public NimbleObstructionist(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
|
||||
|
||||
this.subtype.add("Bird");
|
||||
this.subtype.add("Wizard");
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Flash
|
||||
this.addAbility(FlashAbility.getInstance());
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Cycling {2}{U}
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{U}")));
|
||||
|
||||
// When you cycle Nimble Obstructionist, counter target activated or triggered ability you don't control.
|
||||
Ability ability = new CycleTriggeredAbility(new CounterTargetEffect());
|
||||
ability.addTarget(new TargetActivatedOrTriggeredAbility(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public NimbleObstructionist(final NimbleObstructionist card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NimbleObstructionist copy() {
|
||||
return new NimbleObstructionist(this);
|
||||
}
|
||||
}
|
120
Mage.Sets/src/mage/cards/n/NissasDefeat.java
Normal file
120
Mage.Sets/src/mage/cards/n/NissasDefeat.java
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class NissasDefeat extends CardImpl {
|
||||
|
||||
private final static FilterPermanent filter = new FilterPermanent("Forest, green enchantment, or green planeswalker");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(new SubtypePredicate(SubType.FOREST),
|
||||
(Predicates.and(new ColorPredicate(ObjectColor.GREEN), new CardTypePredicate(CardType.ENCHANTMENT))),
|
||||
(Predicates.and(new ColorPredicate(ObjectColor.GREEN), new CardTypePredicate(CardType.PLANESWALKER)))));
|
||||
}
|
||||
|
||||
public NissasDefeat(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}");
|
||||
|
||||
// Destroy target Forest, green enchantment, or green planeswalker. If that permanent was a Nissa planeswalker, draw a card.
|
||||
this.getSpellAbility().addEffect(new NissasDefeatEffect());
|
||||
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
||||
}
|
||||
|
||||
public NissasDefeat(final NissasDefeat card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NissasDefeat copy() {
|
||||
return new NissasDefeat(this);
|
||||
}
|
||||
}
|
||||
|
||||
class NissasDefeatEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent();
|
||||
|
||||
static {
|
||||
filter.add(new CardTypePredicate(CardType.PLANESWALKER));
|
||||
filter.add(new SubtypePredicate(SubType.NISSA));
|
||||
}
|
||||
|
||||
public NissasDefeatEffect() {
|
||||
super(Outcome.Damage);
|
||||
this.staticText = "Destroy target Forest, green enchantment, or green planeswalker. If that permanent was a Nissa planeswalker, draw a card.";
|
||||
}
|
||||
|
||||
public NissasDefeatEffect(final NissasDefeatEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NissasDefeatEffect copy() {
|
||||
return new NissasDefeatEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent permanent = game.getPermanent(source.getFirstTarget());
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
|
||||
if (permanent != null) {
|
||||
permanent.destroy(source.getSourceId(), game, false);
|
||||
|
||||
// If it was a Nissa planeswalker, draw a card
|
||||
if (filter.match(permanent, game) && controller != null) {
|
||||
controller.drawCards(1, game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
191
Mage.Sets/src/mage/cards/n/NissasEncouragement.java
Normal file
191
Mage.Sets/src/mage/cards/n/NissasEncouragement.java
Normal file
|
@ -0,0 +1,191 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.Cards;
|
||||
import mage.cards.CardsImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.NamePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetCard;
|
||||
import mage.target.common.TargetCardInLibrary;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public class NissasEncouragement extends CardImpl {
|
||||
|
||||
public NissasEncouragement(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{G}");
|
||||
|
||||
// Search your library and graveyard for a card named Forest, a card named Brambleweft Behemoth, and a card named Nissa, Genesis Mage. Reveal those cards, put them into your hand, then shuffle your library.
|
||||
this.getSpellAbility().addEffect(new NissasEncouragementEffect());
|
||||
|
||||
}
|
||||
|
||||
public NissasEncouragement(final NissasEncouragement card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NissasEncouragement copy() {
|
||||
return new NissasEncouragement(this);
|
||||
}
|
||||
}
|
||||
|
||||
class NissasEncouragementEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterCard filter = new FilterCard("card named Forest, a card named Brambleweft Behemoth, and a card named Nissa, Genesis Mage");
|
||||
private static final FilterCard filterGY = new FilterCard();
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(new NamePredicate("Forest"), new NamePredicate("Brambleweft Behemoth"), new NamePredicate("Nissa, Genesis Mage")));
|
||||
}
|
||||
|
||||
public NissasEncouragementEffect() {
|
||||
super(Outcome.DrawCard);
|
||||
this.staticText = "Search your library and graveyard for a card named Forest, a card named Brambleweft Behemoth, and a card named Nissa, Genesis Mage. Reveal those cards, put them into your hand, then shuffle your library.";
|
||||
}
|
||||
|
||||
public NissasEncouragementEffect(final NissasEncouragementEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NissasEncouragementEffect copy() {
|
||||
return new NissasEncouragementEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
Card sourceCard = game.getCard(source.getSourceId());
|
||||
if (player == null || sourceCard == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
NissasEncouragementTarget target = new NissasEncouragementTarget(filter);
|
||||
if (player.searchLibrary(target, game)) {
|
||||
boolean searchGY = false;
|
||||
|
||||
if (target.getTargets().size() < 3) {
|
||||
searchGY = true;
|
||||
}
|
||||
|
||||
HashMap<String, Integer> foundCards = new HashMap<>();
|
||||
foundCards.put("Forest", 0);
|
||||
foundCards.put("Brambleweft Behemoth", 0);
|
||||
foundCards.put("Nissa, Genesis Mage", 0);
|
||||
Cards cards = new CardsImpl();
|
||||
|
||||
if (!target.getTargets().isEmpty()) {
|
||||
for (UUID cardId : target.getTargets()) {
|
||||
Card card = player.getLibrary().remove(cardId, game);
|
||||
|
||||
if (card != null) {
|
||||
cards.add(card);
|
||||
foundCards.put(card.getName(), 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (searchGY) {
|
||||
for (String name : foundCards.keySet()) {
|
||||
if (foundCards.get(name) == 1) {
|
||||
continue;
|
||||
}
|
||||
// Look in graveyard for any with this name
|
||||
FilterCard namedFilterGY = filterGY.copy(); // never change static objects so copy the object here before
|
||||
namedFilterGY.add(new NamePredicate(name));
|
||||
if (player.getGraveyard().count(namedFilterGY, game) > 0) {
|
||||
TargetCard targetGY = new TargetCard(0, 1, Zone.GRAVEYARD, namedFilterGY);
|
||||
if (player.choose(Outcome.ReturnToHand, player.getGraveyard(), targetGY, game)) {
|
||||
for (UUID cardIdGY : targetGY.getTargets()) {
|
||||
Card cardGY = player.getGraveyard().get(cardIdGY, game);
|
||||
cards.add(cardGY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!cards.isEmpty()) {
|
||||
player.revealCards(sourceCard.getIdName(), cards, game);
|
||||
player.moveCards(cards, Zone.HAND, source, game);
|
||||
player.shuffleLibrary(source, game);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
player.shuffleLibrary(source, game);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class NissasEncouragementTarget extends TargetCardInLibrary {
|
||||
|
||||
public NissasEncouragementTarget(FilterCard filter) {
|
||||
super(0, 3, filter);
|
||||
}
|
||||
|
||||
public NissasEncouragementTarget(final NissasEncouragementTarget target) {
|
||||
super(target);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NissasEncouragementTarget copy() {
|
||||
return new NissasEncouragementTarget(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTarget(UUID id, Cards cards, Game game) {
|
||||
Card card = cards.get(id, game);
|
||||
if (card != null) {
|
||||
for (UUID targetId : this.getTargets()) {
|
||||
Card iCard = game.getCard(targetId);
|
||||
if (iCard != null && iCard.getName().equals(card.getName())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return filter.match(card, game);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
125
Mage.Sets/src/mage/cards/o/ObeliskSpider.java
Normal file
125
Mage.Sets/src/mage/cards/o/ObeliskSpider.java
Normal file
|
@ -0,0 +1,125 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.o;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.DealsDamageToACreatureTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.abilities.keyword.ReachAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class ObeliskSpider extends CardImpl {
|
||||
|
||||
public ObeliskSpider(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}");
|
||||
|
||||
this.subtype.add("Spider");
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Reach
|
||||
this.addAbility(ReachAbility.getInstance());
|
||||
|
||||
// Whenever Obelisk Spider deals combat damage to a creature, put a -1/-1 counter on that creature.
|
||||
this.addAbility(new DealsDamageToACreatureTriggeredAbility(new AddCountersTargetEffect(CounterType.M1M1.createInstance(1)), true, false, true));
|
||||
|
||||
// Whenever you put one or more -1/-1 counters on a creature, each opponent loses 1 life and you gain 1 life.
|
||||
Ability ability = new ObeliskSpiderTriggeredAbility(new LoseLifeOpponentsEffect(1), false);
|
||||
Effect effect = new GainLifeEffect(1);
|
||||
effect.setText("and you gain 1 life");
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public ObeliskSpider(final ObeliskSpider card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObeliskSpider copy() {
|
||||
return new ObeliskSpider(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ObeliskSpiderTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public ObeliskSpiderTriggeredAbility(Effect effect, boolean optional) {
|
||||
super(Zone.BATTLEFIELD, effect, optional);
|
||||
}
|
||||
|
||||
public ObeliskSpiderTriggeredAbility(ObeliskSpiderTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.COUNTERS_ADDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (event.getData().equals(CounterType.M1M1.getName())
|
||||
&& controllerId.equals(game.getControllerId(event.getSourceId()))) {
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
|
||||
if (permanent == null) {
|
||||
permanent = game.getPermanentEntering(event.getTargetId());
|
||||
}
|
||||
return (permanent != null
|
||||
&& permanent.isCreature());
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObeliskSpiderTriggeredAbility copy() {
|
||||
return new ObeliskSpiderTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever you put one or more -1/-1 counters on a creature, " + super.getRule();
|
||||
}
|
||||
}
|
83
Mage.Sets/src/mage/cards/o/OminousSphinx.java
Normal file
83
Mage.Sets/src/mage/cards/o/OminousSphinx.java
Normal file
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.o;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.CycleOrDiscardControllerTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public class OminousSphinx extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
|
||||
|
||||
static {
|
||||
filter.add(new ControllerPredicate(TargetController.OPPONENT));
|
||||
}
|
||||
|
||||
public OminousSphinx(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
|
||||
|
||||
this.subtype.add("Sphinx");
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Whenever you cycle or discard a card,target creature an opponent controls gets -2/-0 until end of turn.
|
||||
CycleOrDiscardControllerTriggeredAbility ability = new CycleOrDiscardControllerTriggeredAbility(new BoostTargetEffect(-2, -0, Duration.EndOfTurn));
|
||||
ability.addTarget(new TargetCreaturePermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public OminousSphinx(final OminousSphinx card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OminousSphinx copy() {
|
||||
return new OminousSphinx(this);
|
||||
}
|
||||
}
|
61
Mage.Sets/src/mage/cards/p/PuncturingBlow.java
Normal file
61
Mage.Sets/src/mage/cards/p/PuncturingBlow.java
Normal file
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.p;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.ExileTargetIfDiesEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public class PuncturingBlow extends CardImpl {
|
||||
|
||||
public PuncturingBlow(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}{R}");
|
||||
|
||||
// Puncturing Blow deals 5 damage to target creature. If that creature would die this turn, exile it instead.
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(5));
|
||||
this.getSpellAbility().addEffect(new ExileTargetIfDiesEffect());
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
}
|
||||
|
||||
public PuncturingBlow(final PuncturingBlow card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PuncturingBlow copy() {
|
||||
return new PuncturingBlow(this);
|
||||
}
|
||||
}
|
93
Mage.Sets/src/mage/cards/r/RamunapRuins.java
Normal file
93
Mage.Sets/src/mage/cards/r/RamunapRuins.java
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.cards.r;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.PayLifeCost;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.common.DamagePlayersEffect;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.abilities.mana.RedManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class RamunapRuins extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Desert");
|
||||
|
||||
static {
|
||||
filter.add(new SubtypePredicate(SubType.DESERT));
|
||||
}
|
||||
|
||||
public RamunapRuins(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
this.subtype.add("Desert");
|
||||
|
||||
// {t}: Add {C} to your mana pool.
|
||||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// {t}, Pay 1 life: Add {R} to your mana pool.
|
||||
Ability manaAbility = new RedManaAbility();
|
||||
manaAbility.addCost(new PayLifeCost(1));
|
||||
this.addAbility(manaAbility);
|
||||
|
||||
// {2}{R}{R}, {t}, Sacrifice a Desert: Ramunap Ruins deals 2 damage to each opponent.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamagePlayersEffect(Outcome.Damage, new StaticValue(2), TargetController.OPPONENT),
|
||||
new ManaCostsImpl("{2}{R}{R}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, true)));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public RamunapRuins(final RamunapRuins card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RamunapRuins copy() {
|
||||
return new RamunapRuins(this);
|
||||
}
|
||||
}
|
|
@ -29,7 +29,7 @@ package mage.cards.s;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||
import mage.abilities.costs.common.PayLifeCost;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
|
@ -73,7 +73,7 @@ public class ShefetDunes extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
|
||||
// {2}{W}{W}, {T}, Sacrifice a Desert: Creatures you control get +1/+1 until end of turn. Activate this ability only any time you could cast a sorcery.
|
||||
Ability ability2 = new SimpleActivatedAbility(
|
||||
Ability ability2 = new ActivateAsSorceryActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new BoostControlledEffect(1, 1, Duration.EndOfTurn),
|
||||
new ManaCostsImpl("{2}{W}{W}"));
|
||||
|
|
|
@ -58,7 +58,7 @@ public class SpikeDrone extends CardImpl {
|
|||
this.toughness = new MageInt(0);
|
||||
|
||||
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)),
|
||||
"{this} enters the battlefield with a +1/+1 counters on it"));
|
||||
"{this} enters the battlefield with a +1/+1 counter on it"));
|
||||
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance(1)), new GenericManaCost(2));
|
||||
ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1)));
|
||||
|
|
|
@ -18,7 +18,7 @@ public class ViashivanDragon extends CardImpl {
|
|||
|
||||
public ViashivanDragon(UUID cardId, CardSetInfo cardSetInfo) {
|
||||
super(cardId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}{G}{G}");
|
||||
subtype.add("DRAGON");
|
||||
subtype.add("Dragon");
|
||||
color.setGreen(true);
|
||||
color.setRed(true);
|
||||
power = new MageInt(4);
|
||||
|
|
|
@ -27,8 +27,6 @@
|
|||
*/
|
||||
package mage.sets;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import mage.cards.CardGraphicInfo;
|
||||
import mage.cards.ExpansionSet;
|
||||
import mage.cards.FrameStyle;
|
||||
|
@ -38,6 +36,9 @@ import mage.cards.repository.CardRepository;
|
|||
import mage.constants.Rarity;
|
||||
import mage.constants.SetType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fireshoes
|
||||
*/
|
||||
|
@ -63,18 +64,24 @@ public class HourOfDevastation extends ExpansionSet {
|
|||
this.numBoosterRare = 1;
|
||||
this.ratioBoosterMythic = 8;
|
||||
this.ratioBoosterSpecialLand = 144;
|
||||
|
||||
this.maxCardNumberInBooster = 199;
|
||||
|
||||
cards.add(new SetCardInfo("Abandoned Sarcophagus", 158, Rarity.RARE, mage.cards.a.AbandonedSarcophagus.class));
|
||||
cards.add(new SetCardInfo("Abrade", 83, Rarity.UNCOMMON, mage.cards.a.Abrade.class));
|
||||
cards.add(new SetCardInfo("Accursed Horde", 56, Rarity.UNCOMMON, mage.cards.a.AccursedHorde.class));
|
||||
cards.add(new SetCardInfo("Act of Heroism", 1, Rarity.COMMON, mage.cards.a.ActOfHeroism.class));
|
||||
cards.add(new SetCardInfo("Adorned Pouncer", 2, Rarity.RARE, mage.cards.a.AdornedPouncer.class));
|
||||
cards.add(new SetCardInfo("Aerial Guide", 29, Rarity.COMMON, mage.cards.a.AerialGuide.class));
|
||||
cards.add(new SetCardInfo("Ambuscade", 110, Rarity.COMMON, mage.cards.a.Ambuscade.class));
|
||||
cards.add(new SetCardInfo("Ammit Eternal", 57, Rarity.RARE, mage.cards.a.AmmitEternal.class));
|
||||
cards.add(new SetCardInfo("Angel of Condemnation", 3, Rarity.RARE, mage.cards.a.AngelOfCondemnation.class));
|
||||
cards.add(new SetCardInfo("Angel of the God-Pharaoh", 4, Rarity.UNCOMMON, mage.cards.a.AngelOfTheGodPharaoh.class));
|
||||
cards.add(new SetCardInfo("Aven of Enduring Hope", 5, Rarity.COMMON, mage.cards.a.AvenOfEnduringHope.class));
|
||||
cards.add(new SetCardInfo("Apocalypse Demon", 58, Rarity.RARE, mage.cards.a.ApocalypseDemon.class));
|
||||
cards.add(new SetCardInfo("Appeal // Authority", 152, Rarity.UNCOMMON, mage.cards.a.AppealAuthority.class));
|
||||
cards.add(new SetCardInfo("Aven Reedstalker", 30, Rarity.COMMON, mage.cards.a.AvenReedstalker.class));
|
||||
cards.add(new SetCardInfo("Aven of Enduring Hope", 5, Rarity.COMMON, mage.cards.a.AvenOfEnduringHope.class));
|
||||
cards.add(new SetCardInfo("Avid Reclaimer", 201, Rarity.UNCOMMON, mage.cards.a.AvidReclaimer.class));
|
||||
cards.add(new SetCardInfo("Banewhip Punisher", 59, Rarity.UNCOMMON, mage.cards.b.BanewhipPunisher.class));
|
||||
cards.add(new SetCardInfo("Beneath The Sands", 111, Rarity.COMMON, mage.cards.b.BeneathTheSands.class));
|
||||
cards.add(new SetCardInfo("Bitterbow Sharpshooters", 112, Rarity.COMMON, mage.cards.b.BitterbowSharpshooters.class));
|
||||
cards.add(new SetCardInfo("Bloodwater Entity", 138, Rarity.UNCOMMON, mage.cards.b.BloodwaterEntity.class));
|
||||
|
@ -88,10 +95,13 @@ public class HourOfDevastation extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Chaos Maw", 87, Rarity.RARE, mage.cards.c.ChaosMaw.class));
|
||||
cards.add(new SetCardInfo("Cinder Barrens", 209, Rarity.COMMON, mage.cards.c.CinderBarrens.class));
|
||||
cards.add(new SetCardInfo("Claim // Fame", 150, Rarity.UNCOMMON, mage.cards.c.ClaimFame.class));
|
||||
cards.add(new SetCardInfo("Consign // Oblivion", 149, Rarity.UNCOMMON, mage.cards.c.ConsignOblivion.class));
|
||||
cards.add(new SetCardInfo("Countervailing Winds", 32, Rarity.COMMON, mage.cards.c.CountervailingWinds.class));
|
||||
cards.add(new SetCardInfo("Crash Through", 88, Rarity.COMMON, mage.cards.c.CrashThrough.class));
|
||||
cards.add(new SetCardInfo("Consign // Oblivion", 149, Rarity.UNCOMMON, mage.cards.c.ConsignOblivion.class));
|
||||
cards.add(new SetCardInfo("Crested Sunmare", 6, Rarity.MYTHIC, mage.cards.c.CrestedSunmare.class));
|
||||
cards.add(new SetCardInfo("Crook of Condemnation", 159, Rarity.UNCOMMON, mage.cards.c.CrookOfCondemnation.class));
|
||||
cards.add(new SetCardInfo("Crypt of the Eternals", 169, Rarity.UNCOMMON, mage.cards.c.CryptOfTheEternals.class));
|
||||
cards.add(new SetCardInfo("Cunning Survivor", 33, Rarity.COMMON, mage.cards.c.CunningSurvivor.class));
|
||||
cards.add(new SetCardInfo("Dagger of the Worthy", 160, Rarity.UNCOMMON, mage.cards.d.DaggerOfTheWorthy.class));
|
||||
cards.add(new SetCardInfo("Dauntless Aven", 7, Rarity.COMMON, mage.cards.d.DauntlessAven.class));
|
||||
cards.add(new SetCardInfo("Defiant Khenra", 89, Rarity.COMMON, mage.cards.d.DefiantKhenra.class));
|
||||
|
@ -107,64 +117,101 @@ public class HourOfDevastation extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Djeru, With Eyes Open", 10, Rarity.RARE, mage.cards.d.DjeruWithEyesOpen.class));
|
||||
cards.add(new SetCardInfo("Doomfall", 62, Rarity.UNCOMMON, mage.cards.d.Doomfall.class));
|
||||
cards.add(new SetCardInfo("Dreamstealer", 63, Rarity.RARE, mage.cards.d.Dreamstealer.class));
|
||||
cards.add(new SetCardInfo("Dune Diviner", 114, Rarity.UNCOMMON, mage.cards.d.DuneDiviner.class));
|
||||
cards.add(new SetCardInfo("Dunes of the Dead", 175, Rarity.UNCOMMON, mage.cards.d.DunesOfTheDead.class));
|
||||
cards.add(new SetCardInfo("Driven // Despair", 157, Rarity.RARE, mage.cards.d.DrivenDespair.class));
|
||||
cards.add(new SetCardInfo("Dune Diviner", 114, Rarity.UNCOMMON, mage.cards.d.DuneDiviner.class));
|
||||
cards.add(new SetCardInfo("Dunes of the Dead", 175, Rarity.UNCOMMON, mage.cards.d.DunesOfTheDead.class));
|
||||
cards.add(new SetCardInfo("Dutiful Servants", 12, Rarity.COMMON, mage.cards.d.DutifulServants.class));
|
||||
cards.add(new SetCardInfo("Earthshaker Khenra", 90, Rarity.RARE, mage.cards.e.EarthshakerKhenra.class));
|
||||
cards.add(new SetCardInfo("Endless Sands", 176, Rarity.RARE, mage.cards.e.EndlessSands.class));
|
||||
cards.add(new SetCardInfo("Eternal of Harsh Truths", 34, Rarity.UNCOMMON, mage.cards.e.EternalOfHarshTruths.class));
|
||||
cards.add(new SetCardInfo("Farm // Market", 148, Rarity.UNCOMMON, mage.cards.f.FarmMarket.class));
|
||||
cards.add(new SetCardInfo("Feral Prowler", 115, Rarity.COMMON, mage.cards.f.FeralProwler.class));
|
||||
cards.add(new SetCardInfo("Fervent Paincaster", 91, Rarity.UNCOMMON, mage.cards.f.FerventPaincaster.class));
|
||||
cards.add(new SetCardInfo("Firebrand Archer", 92, Rarity.COMMON, mage.cards.f.FirebrandArcher.class));
|
||||
cards.add(new SetCardInfo("Forest", 189, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
|
||||
cards.add(new SetCardInfo("Forest", 198, Rarity.LAND, mage.cards.basiclands.Forest.class));
|
||||
cards.add(new SetCardInfo("Forest", 199, Rarity.LAND, mage.cards.basiclands.Forest.class));
|
||||
cards.add(new SetCardInfo("Fraying Sanity", 35, Rarity.UNCOMMON, mage.cards.f.FrayingSanity.class));
|
||||
cards.add(new SetCardInfo("Frilled Sandwalla", 116, Rarity.COMMON, mage.cards.f.FrilledSandwalla.class));
|
||||
cards.add(new SetCardInfo("Frontline Devastator", 93, Rarity.COMMON, mage.cards.f.FrontlineDevastator.class));
|
||||
cards.add(new SetCardInfo("Gideon's Defeat", 13, Rarity.UNCOMMON, mage.cards.g.GideonsDefeat.class));
|
||||
cards.add(new SetCardInfo("Gift of Strength", 117, Rarity.COMMON, mage.cards.g.GiftOfStrength.class));
|
||||
cards.add(new SetCardInfo("Gilded Cerodon", 94, Rarity.COMMON, mage.cards.g.GildedCerodon.class));
|
||||
cards.add(new SetCardInfo("God-Pharaoh's Faithful", 14, Rarity.COMMON, mage.cards.g.GodPharaohsFaithful.class));
|
||||
cards.add(new SetCardInfo("God-Pharaoh's Gift", 161, Rarity.RARE, mage.cards.g.GodPharaohsGift.class));
|
||||
cards.add(new SetCardInfo("Granitic Titan", 95, Rarity.COMMON, mage.cards.g.GraniticTitan.class));
|
||||
cards.add(new SetCardInfo("Graven Abomination", 162, Rarity.COMMON, mage.cards.g.GravenAbomination.class));
|
||||
cards.add(new SetCardInfo("Grind // Dust", 155, Rarity.RARE, mage.cards.g.GrindDust.class));
|
||||
cards.add(new SetCardInfo("Grisly Survivor", 64, Rarity.COMMON, mage.cards.g.GrislySurvivor.class));
|
||||
cards.add(new SetCardInfo("Harrier Naga", 118, Rarity.COMMON, mage.cards.h.HarrierNaga.class));
|
||||
cards.add(new SetCardInfo("Hashep Oasis", 177, Rarity.UNCOMMON, mage.cards.h.HashepOasis.class));
|
||||
cards.add(new SetCardInfo("Hazoret's Undying Fury", 96, Rarity.RARE, mage.cards.h.HazoretsUndyingFury.class));
|
||||
cards.add(new SetCardInfo("Hollow One", 163, Rarity.RARE, mage.cards.h.HollowOne.class));
|
||||
cards.add(new SetCardInfo("Hope Tender", 119, Rarity.UNCOMMON, mage.cards.h.HopeTender.class));
|
||||
cards.add(new SetCardInfo("Hostile Desert", 178, Rarity.RARE, mage.cards.h.HostileDesert.class));
|
||||
cards.add(new SetCardInfo("Hour of Devastation", 97, Rarity.RARE, mage.cards.h.HourOfDevastation.class));
|
||||
cards.add(new SetCardInfo("Hour of Eternity", 36, Rarity.RARE, mage.cards.h.HourOfEternity.class));
|
||||
cards.add(new SetCardInfo("Hour of Glory", 65, Rarity.RARE, mage.cards.h.HourOfGlory.class));
|
||||
cards.add(new SetCardInfo("Hour of Promise", 120, Rarity.RARE, mage.cards.h.HourOfPromise.class));
|
||||
cards.add(new SetCardInfo("Hour of Revelation", 15, Rarity.RARE, mage.cards.h.HourOfRevelation.class));
|
||||
cards.add(new SetCardInfo("Ifnir Deadlands", 179, Rarity.UNCOMMON, mage.cards.i.IfnirDeadlands.class));
|
||||
cards.add(new SetCardInfo("Imaginary Threats", 37, Rarity.UNCOMMON, mage.cards.i.ImaginaryThreats.class));
|
||||
cards.add(new SetCardInfo("Imminent Doom", 98, Rarity.RARE, mage.cards.i.ImminentDoom.class));
|
||||
cards.add(new SetCardInfo("Inferno Jet", 99, Rarity.UNCOMMON, mage.cards.i.InfernoJet.class));
|
||||
cards.add(new SetCardInfo("Ipnu Rivulet", 180, Rarity.UNCOMMON, mage.cards.i.IpnuRivulet.class));
|
||||
cards.add(new SetCardInfo("Island", 186, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
|
||||
cards.add(new SetCardInfo("Island", 192, Rarity.LAND, mage.cards.basiclands.Island.class));
|
||||
cards.add(new SetCardInfo("Island", 193, Rarity.LAND, mage.cards.basiclands.Island.class));
|
||||
cards.add(new SetCardInfo("Jace's Defeat", 38, Rarity.UNCOMMON, mage.cards.j.JacesDefeat.class));
|
||||
cards.add(new SetCardInfo("Kefnet's Last Word", 39, Rarity.RARE, mage.cards.k.KefnetsLastWord.class));
|
||||
cards.add(new SetCardInfo("Khenra Eternal", 66, Rarity.COMMON, mage.cards.k.KhenraEternal.class));
|
||||
cards.add(new SetCardInfo("Khenra Scrapper", 100, Rarity.COMMON, mage.cards.k.KhenraScrapper.class));
|
||||
cards.add(new SetCardInfo("Kindled Fury", 101, Rarity.COMMON, mage.cards.k.KindledFury.class));
|
||||
cards.add(new SetCardInfo("Life Goes On", 121, Rarity.COMMON, mage.cards.l.LifeGoesOn.class));
|
||||
cards.add(new SetCardInfo("Leave // Chance", 153, Rarity.RARE, mage.cards.l.LeaveChance.class));
|
||||
cards.add(new SetCardInfo("Lethal Sting", 67, Rarity.COMMON, mage.cards.l.LethalSting.class));
|
||||
cards.add(new SetCardInfo("Life Goes On", 121, Rarity.COMMON, mage.cards.l.LifeGoesOn.class));
|
||||
cards.add(new SetCardInfo("Liliana's Defeat", 68, Rarity.UNCOMMON, mage.cards.l.LilianasDefeat.class));
|
||||
cards.add(new SetCardInfo("Lurching Rotbeast", 69, Rarity.COMMON, mage.cards.l.LurchingRotbeast.class));
|
||||
cards.add(new SetCardInfo("Magmaroth", 102, Rarity.UNCOMMON, mage.cards.m.Magmaroth.class));
|
||||
cards.add(new SetCardInfo("Majestic Myriarch", 122, Rarity.MYTHIC, mage.cards.m.MajesticMyriarch.class));
|
||||
cards.add(new SetCardInfo("Manalith", 164, Rarity.COMMON, mage.cards.m.Manalith.class));
|
||||
cards.add(new SetCardInfo("Manticore Eternal", 103, Rarity.UNCOMMON, mage.cards.m.ManticoreEternal.class));
|
||||
cards.add(new SetCardInfo("Marauding Boneslasher", 70, Rarity.COMMON, mage.cards.m.MaraudingBoneslasher.class));
|
||||
cards.add(new SetCardInfo("Merciless Eternal", 71, Rarity.UNCOMMON, mage.cards.m.MercilessEternal.class));
|
||||
cards.add(new SetCardInfo("Mirage Mirror", 165, Rarity.RARE, mage.cards.m.MirageMirror.class));
|
||||
cards.add(new SetCardInfo("Moaning Wall", 72, Rarity.COMMON, mage.cards.m.MoaningWall.class));
|
||||
cards.add(new SetCardInfo("Mountain", 188, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
|
||||
cards.add(new SetCardInfo("Mountain", 196, Rarity.LAND, mage.cards.basiclands.Mountain.class));
|
||||
cards.add(new SetCardInfo("Mountain", 197, Rarity.LAND, mage.cards.basiclands.Mountain.class));
|
||||
cards.add(new SetCardInfo("Mummy Paramount", 16, Rarity.COMMON, mage.cards.m.MummyParamount.class));
|
||||
cards.add(new SetCardInfo("Neheb, the Eternal", 104, Rarity.MYTHIC, mage.cards.n.NehebTheEternal.class));
|
||||
cards.add(new SetCardInfo("Nicol Bolas, God-Pharaoh", 140, Rarity.MYTHIC, mage.cards.n.NicolBolasGodPharaoh.class));
|
||||
cards.add(new SetCardInfo("Nicol Bolas, the Deceiver", 205, Rarity.MYTHIC, mage.cards.n.NicolBolasTheDeceiver.class));
|
||||
cards.add(new SetCardInfo("Nimble Obstructionist", 40, Rarity.RARE, mage.cards.n.NimbleObstructionist.class));
|
||||
cards.add(new SetCardInfo("Nissa's Defeat", 123, Rarity.UNCOMMON, mage.cards.n.NissasDefeat.class));
|
||||
cards.add(new SetCardInfo("Nissa's Encouragement", 203, Rarity.RARE, mage.cards.n.NissasEncouragement.class));
|
||||
cards.add(new SetCardInfo("Nissa, Genesis Mage", 200, Rarity.MYTHIC, mage.cards.n.NissaGenesisMage.class));
|
||||
cards.add(new SetCardInfo("Oasis Ritualist", 124, Rarity.COMMON, mage.cards.o.OasisRitualist.class));
|
||||
cards.add(new SetCardInfo("Obelisk Spider", 141, Rarity.UNCOMMON, mage.cards.o.ObeliskSpider.class));
|
||||
cards.add(new SetCardInfo("Oketra's Avenger", 17, Rarity.COMMON, mage.cards.o.OketrasAvenger.class));
|
||||
cards.add(new SetCardInfo("Oketra's Last Mercy", 18, Rarity.RARE, mage.cards.o.OketrasLastMercy.class));
|
||||
cards.add(new SetCardInfo("Ominous Sphinx", 41, Rarity.UNCOMMON, mage.cards.o.OminousSphinx.class));
|
||||
cards.add(new SetCardInfo("Open Fire", 105, Rarity.COMMON, mage.cards.o.OpenFire.class));
|
||||
cards.add(new SetCardInfo("Overwhelming Splendor", 19, Rarity.MYTHIC, mage.cards.o.OverwhelmingSplendor.class));
|
||||
cards.add(new SetCardInfo("Overcome", 125, Rarity.UNCOMMON, mage.cards.o.Overcome.class));
|
||||
cards.add(new SetCardInfo("Overwhelming Splendor", 19, Rarity.MYTHIC, mage.cards.o.OverwhelmingSplendor.class));
|
||||
cards.add(new SetCardInfo("Plains", 185, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
|
||||
cards.add(new SetCardInfo("Plains", 190, Rarity.LAND, mage.cards.basiclands.Plains.class));
|
||||
cards.add(new SetCardInfo("Plains", 191, Rarity.LAND, mage.cards.basiclands.Plains.class));
|
||||
cards.add(new SetCardInfo("Pride Sovereign", 126, Rarity.RARE, mage.cards.p.PrideSovereign.class));
|
||||
cards.add(new SetCardInfo("Proven Combatant", 42, Rarity.COMMON, mage.cards.p.ProvenCombatant.class));
|
||||
cards.add(new SetCardInfo("Puncturing Blow", 106, Rarity.COMMON, mage.cards.p.PuncturingBlow.class));
|
||||
cards.add(new SetCardInfo("Quarry Beetle", 127, Rarity.UNCOMMON, mage.cards.q.QuarryBeetle.class));
|
||||
cards.add(new SetCardInfo("Rampaging Hippo", 128, Rarity.COMMON, mage.cards.r.RampagingHippo.class));
|
||||
cards.add(new SetCardInfo("Ramunap Excavator", 129, Rarity.RARE, mage.cards.r.RamunapExcavator.class));
|
||||
cards.add(new SetCardInfo("Ramunap Hydra", 130, Rarity.RARE, mage.cards.r.RamunapHydra.class));
|
||||
cards.add(new SetCardInfo("Razaketh, the Foulblooded", 73, Rarity.MYTHIC, mage.cards.r.RazakethTheFoulblooded.class));
|
||||
cards.add(new SetCardInfo("Ramunap Ruins", 181, Rarity.UNCOMMON, mage.cards.r.RamunapRuins.class));
|
||||
cards.add(new SetCardInfo("Razaketh's Rite", 74, Rarity.UNCOMMON, mage.cards.r.RazakethsRite.class));
|
||||
cards.add(new SetCardInfo("Razaketh, the Foulblooded", 73, Rarity.MYTHIC, mage.cards.r.RazakethTheFoulblooded.class));
|
||||
cards.add(new SetCardInfo("Reason // Believe", 154, Rarity.RARE, mage.cards.r.ReasonBelieve.class));
|
||||
cards.add(new SetCardInfo("Refuse // Cooperate", 156, Rarity.RARE, mage.cards.r.RefuseCooperate.class));
|
||||
cards.add(new SetCardInfo("Resilient Khenra", 131, Rarity.RARE, mage.cards.r.ResilientKhenra.class));
|
||||
|
@ -179,9 +226,9 @@ public class HourOfDevastation extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Sandblast", 20, Rarity.COMMON, mage.cards.s.Sandblast.class));
|
||||
cards.add(new SetCardInfo("Saving Grace", 21, Rarity.UNCOMMON, mage.cards.s.SavingGrace.class));
|
||||
cards.add(new SetCardInfo("Scavenger Grounds", 182, Rarity.RARE, mage.cards.s.ScavengerGrounds.class));
|
||||
cards.add(new SetCardInfo("Scrounger of Souls", 76, Rarity.COMMON, mage.cards.s.ScroungerOfSouls.class));
|
||||
cards.add(new SetCardInfo("Seer of the Last Tomorrow", 44, Rarity.COMMON, mage.cards.s.SeerOfTheLastTomorrow.class));
|
||||
cards.add(new SetCardInfo("Shefet Dunes", 183, Rarity.UNCOMMON, mage.cards.s.ShefetDunes.class));
|
||||
cards.add(new SetCardInfo("Scrounger of Souls", 76, Rarity.COMMON, mage.cards.s.ScroungerOfSouls.class));
|
||||
cards.add(new SetCardInfo("Sidewinder Naga", 134, Rarity.COMMON, mage.cards.s.SidewinderNaga.class));
|
||||
cards.add(new SetCardInfo("Sifter Wurm", 135, Rarity.UNCOMMON, mage.cards.s.SifterWurm.class));
|
||||
cards.add(new SetCardInfo("Sinuous Striker", 45, Rarity.UNCOMMON, mage.cards.s.SinuousStriker.class));
|
||||
|
@ -198,6 +245,8 @@ public class HourOfDevastation extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Supreme Will", 49, Rarity.UNCOMMON, mage.cards.s.SupremeWill.class));
|
||||
cards.add(new SetCardInfo("Survivors' Encampment", 184, Rarity.COMMON, mage.cards.s.SurvivorsEncampment.class));
|
||||
cards.add(new SetCardInfo("Swamp", 187, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
|
||||
cards.add(new SetCardInfo("Swamp", 194, Rarity.LAND, mage.cards.basiclands.Swamp.class));
|
||||
cards.add(new SetCardInfo("Swamp", 195, Rarity.LAND, mage.cards.basiclands.Swamp.class));
|
||||
cards.add(new SetCardInfo("Swarm Intelligence", 50, Rarity.RARE, mage.cards.s.SwarmIntelligence.class));
|
||||
cards.add(new SetCardInfo("Tenacious Hunter", 136, Rarity.UNCOMMON, mage.cards.t.TenaciousHunter.class));
|
||||
cards.add(new SetCardInfo("The Locust God", 139, Rarity.MYTHIC, mage.cards.t.TheLocustGod.class));
|
||||
|
|
|
@ -79,6 +79,7 @@ public class JudgePromo extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Flusterstorm", 65, Rarity.RARE, mage.cards.f.Flusterstorm.class));
|
||||
cards.add(new SetCardInfo("Force of Will", 83, Rarity.UNCOMMON, mage.cards.f.ForceOfWill.class));
|
||||
cards.add(new SetCardInfo("Forest", 93, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Gaddock Teeg", 112, Rarity.SPECIAL, mage.cards.g.GaddockTeeg.class));
|
||||
cards.add(new SetCardInfo("Gaea's Cradle", 3, Rarity.RARE, mage.cards.g.GaeasCradle.class));
|
||||
cards.add(new SetCardInfo("Gemstone Mine", 20, Rarity.UNCOMMON, mage.cards.g.GemstoneMine.class));
|
||||
cards.add(new SetCardInfo("Genesis", 79, Rarity.RARE, mage.cards.g.Genesis.class));
|
||||
|
|
|
@ -53,11 +53,13 @@ public class MasterpieceSeriesAmonkhet extends ExpansionSet {
|
|||
CardGraphicInfo cardGraphicInfo = new CardGraphicInfo(FrameStyle.KLD_INVENTION, false);
|
||||
|
||||
cards.add(new SetCardInfo("Aggravated Assault", 25, Rarity.SPECIAL, mage.cards.a.AggravatedAssault.class));
|
||||
cards.add(new SetCardInfo("Armageddon", 31, Rarity.SPECIAL, mage.cards.a.Armageddon.class));
|
||||
cards.add(new SetCardInfo("Attrition", 19, Rarity.SPECIAL, mage.cards.a.Attrition.class));
|
||||
cards.add(new SetCardInfo("Austere Command", 1, Rarity.SPECIAL, mage.cards.a.AustereCommand.class));
|
||||
cards.add(new SetCardInfo("Avatar of Woe", 38, Rarity.SPECIAL, mage.cards.a.AvatarOfWoe.class));
|
||||
cards.add(new SetCardInfo("Aven Mindcensor", 2, Rarity.SPECIAL, mage.cards.a.AvenMindcensor.class));
|
||||
cards.add(new SetCardInfo("Blood Moon", 46, Rarity.SPECIAL, mage.cards.b.BloodMoon.class));
|
||||
cards.add(new SetCardInfo("Boil", 47, Rarity.SPECIAL, mage.cards.b.Boil.class));
|
||||
cards.add(new SetCardInfo("Bontu the Glorified", 20, Rarity.SPECIAL, mage.cards.b.BontuTheGlorified.class));
|
||||
cards.add(new SetCardInfo("Capsize", 32, Rarity.SPECIAL, mage.cards.c.Capsize.class));
|
||||
cards.add(new SetCardInfo("Chain Lightning", 26, Rarity.SPECIAL, mage.cards.c.ChainLightning.class));
|
||||
|
@ -74,6 +76,7 @@ public class MasterpieceSeriesAmonkhet extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Diabolic Edict", 41, Rarity.SPECIAL, mage.cards.d.DiabolicEdict.class));
|
||||
cards.add(new SetCardInfo("Diabolic Intent", 22, Rarity.SPECIAL, mage.cards.d.DiabolicIntent.class));
|
||||
cards.add(new SetCardInfo("Divert", 13, Rarity.SPECIAL, mage.cards.d.Divert.class));
|
||||
cards.add(new SetCardInfo("Doomsday", 42, Rarity.SPECIAL, mage.cards.d.Doomsday.class));
|
||||
cards.add(new SetCardInfo("Entomb", 23, Rarity.SPECIAL, mage.cards.e.Entomb.class));
|
||||
cards.add(new SetCardInfo("Forbid", 33, Rarity.SPECIAL, mage.cards.f.Forbid.class));
|
||||
cards.add(new SetCardInfo("Force of Will", 14, Rarity.SPECIAL, mage.cards.f.ForceOfWill.class));
|
||||
|
@ -85,6 +88,7 @@ public class MasterpieceSeriesAmonkhet extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Mind Twist", 24, Rarity.SPECIAL, mage.cards.m.MindTwist.class));
|
||||
cards.add(new SetCardInfo("No Mercy", 43, Rarity.SPECIAL, mage.cards.n.NoMercy.class));
|
||||
cards.add(new SetCardInfo("Oketra the True", 5, Rarity.SPECIAL, mage.cards.o.OketraTheTrue.class));
|
||||
cards.add(new SetCardInfo("Omniscience", 34, Rarity.SPECIAL, mage.cards.o.Omniscience.class));
|
||||
cards.add(new SetCardInfo("Opposition", 35, Rarity.SPECIAL, mage.cards.o.Opposition.class));
|
||||
cards.add(new SetCardInfo("Pact of Negation", 16, Rarity.SPECIAL, mage.cards.p.PactOfNegation.class));
|
||||
cards.add(new SetCardInfo("Rhonas the Indomitable", 28, Rarity.SPECIAL, mage.cards.r.RhonasTheIndomitable.class));
|
||||
|
@ -92,7 +96,13 @@ public class MasterpieceSeriesAmonkhet extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Slaughter Pact", 44, Rarity.SPECIAL, mage.cards.s.SlaughterPact.class));
|
||||
cards.add(new SetCardInfo("Spell Pierce", 17, Rarity.SPECIAL, mage.cards.s.SpellPierce.class));
|
||||
cards.add(new SetCardInfo("Stifle", 18, Rarity.SPECIAL, mage.cards.s.Stifle.class));
|
||||
cards.add(new SetCardInfo("Sunder", 36, Rarity.SPECIAL, mage.cards.s.Sunder.class));
|
||||
cards.add(new SetCardInfo("The Locust God", 51, Rarity.SPECIAL, mage.cards.t.TheLocustGod.class));
|
||||
cards.add(new SetCardInfo("The Scarab God", 53, Rarity.SPECIAL, mage.cards.t.TheScarabGod.class));
|
||||
cards.add(new SetCardInfo("The Scorpion God", 54, Rarity.SPECIAL, mage.cards.t.TheScorpionGod.class));
|
||||
cards.add(new SetCardInfo("Thoughtseize", 45, Rarity.SPECIAL, mage.cards.t.Thoughtseize.class));
|
||||
cards.add(new SetCardInfo("Threads of Disloyalty", 37, Rarity.SPECIAL, mage.cards.t.ThreadsOfDisloyalty.class));
|
||||
cards.add(new SetCardInfo("Through the Breach", 49, Rarity.SPECIAL, mage.cards.t.ThroughTheBreach.class));
|
||||
cards.add(new SetCardInfo("Vindicate", 30, Rarity.SPECIAL, mage.cards.v.Vindicate.class));
|
||||
cards.add(new SetCardInfo("Worship", 6, Rarity.SPECIAL, mage.cards.w.Worship.class));
|
||||
cards.add(new SetCardInfo("Wrath of God", 7, Rarity.SPECIAL, mage.cards.w.WrathOfGod.class));
|
||||
|
|
|
@ -69,14 +69,17 @@ public class MediaInserts extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Breath of Malfegor", 58, Rarity.COMMON, mage.cards.b.BreathOfMalfegor.class));
|
||||
cards.add(new SetCardInfo("Brion Stoutarm", 17, Rarity.RARE, mage.cards.b.BrionStoutarm.class));
|
||||
cards.add(new SetCardInfo("Broodmate Dragon", 19, Rarity.RARE, mage.cards.b.BroodmateDragon.class));
|
||||
cards.add(new SetCardInfo("Canopy Vista", 167, Rarity.RARE, mage.cards.c.CanopyVista.class));
|
||||
cards.add(new SetCardInfo("Cathedral of War", 51, Rarity.RARE, mage.cards.c.CathedralOfWar.class));
|
||||
cards.add(new SetCardInfo("Celestial Colonnade", 23, Rarity.SPECIAL, mage.cards.c.CelestialColonnade.class));
|
||||
cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", 997, Rarity.SPECIAL, mage.cards.c.ChandraFireOfKaladesh.class));
|
||||
cards.add(new SetCardInfo("Chandra, Flamecaller", 175, Rarity.MYTHIC, mage.cards.c.ChandraFlamecaller.class));
|
||||
cards.add(new SetCardInfo("Chandra, Pyromaster", 75, Rarity.MYTHIC, mage.cards.c.ChandraPyromaster.class));
|
||||
cards.add(new SetCardInfo("Chandra, Pyromaster", 102, Rarity.MYTHIC, mage.cards.c.ChandraPyromaster.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Chandra, Roaring Flame", 997, Rarity.SPECIAL, mage.cards.c.ChandraRoaringFlame.class));
|
||||
cards.add(new SetCardInfo("Chandra's Fury", 65, Rarity.COMMON, mage.cards.c.ChandrasFury.class));
|
||||
cards.add(new SetCardInfo("Chandra's Phoenix", 37, Rarity.RARE, mage.cards.c.ChandrasPhoenix.class));
|
||||
cards.add(new SetCardInfo("Cinder Glade", 168, Rarity.RARE, mage.cards.c.CinderGlade.class));
|
||||
cards.add(new SetCardInfo("Consume Spirit", 54, Rarity.UNCOMMON, mage.cards.c.ConsumeSpirit.class));
|
||||
cards.add(new SetCardInfo("Corrupt", 64, Rarity.UNCOMMON, mage.cards.c.Corrupt.class));
|
||||
cards.add(new SetCardInfo("Day of Judgment", 22, Rarity.RARE, mage.cards.d.DayOfJudgment.class));
|
||||
|
@ -112,6 +115,7 @@ public class MediaInserts extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Gaze of Granite", 81, Rarity.RARE, mage.cards.g.GazeOfGranite.class));
|
||||
cards.add(new SetCardInfo("Genesis Hydra", 142, Rarity.SPECIAL, mage.cards.g.GenesisHydra.class));
|
||||
cards.add(new SetCardInfo("Giant Badger", 8, Rarity.SPECIAL, mage.cards.g.GiantBadger.class));
|
||||
cards.add(new SetCardInfo("Gideon, Ally of Zendikar", 172, Rarity.MYTHIC, mage.cards.g.GideonAllyOfZendikar.class));
|
||||
cards.add(new SetCardInfo("Gideon, Battle-Forged", 994, Rarity.SPECIAL, mage.cards.g.GideonBattleForged.class));
|
||||
cards.add(new SetCardInfo("Gladehart Cavalry", 147, Rarity.RARE, mage.cards.g.GladehartCavalry.class));
|
||||
cards.add(new SetCardInfo("Goblin Dark-Dwellers", 148, Rarity.RARE, mage.cards.g.GoblinDarkDwellers.class));
|
||||
|
@ -133,6 +137,7 @@ public class MediaInserts extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Jace, Memory Adept", 73, Rarity.MYTHIC, mage.cards.j.JaceMemoryAdept.class));
|
||||
cards.add(new SetCardInfo("Jace, Telepath Unbound", 995, Rarity.SPECIAL, mage.cards.j.JaceTelepathUnbound.class));
|
||||
cards.add(new SetCardInfo("Jace, the Living Guildpact", 100, Rarity.MYTHIC, mage.cards.j.JaceTheLivingGuildpact.class));
|
||||
cards.add(new SetCardInfo("Jace, Unraveler of Secrets", 173, Rarity.MYTHIC, mage.cards.j.JaceUnravelerOfSecrets.class));
|
||||
cards.add(new SetCardInfo("Jace, Vryn's Prodigy", 995, Rarity.SPECIAL, mage.cards.j.JaceVrynsProdigy.class));
|
||||
cards.add(new SetCardInfo("Jaya Ballard, Task Mage", 18, Rarity.RARE, mage.cards.j.JayaBallardTaskMage.class));
|
||||
cards.add(new SetCardInfo("Karametra's Acolyte", 78, Rarity.UNCOMMON, mage.cards.k.KarametrasAcolyte.class));
|
||||
|
@ -144,6 +149,7 @@ public class MediaInserts extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Liliana, Defiant Necromancer", 996, Rarity.SPECIAL, mage.cards.l.LilianaDefiantNecromancer.class));
|
||||
cards.add(new SetCardInfo("Liliana, Heretical Healer", 996, Rarity.SPECIAL, mage.cards.l.LilianaHereticalHealer.class));
|
||||
cards.add(new SetCardInfo("Liliana of the Dark Realms", 74, Rarity.MYTHIC, mage.cards.l.LilianaOfTheDarkRealms.class));
|
||||
cards.add(new SetCardInfo("Liliana, the Last Hope", 174, Rarity.MYTHIC, mage.cards.l.LilianaTheLastHope.class));
|
||||
cards.add(new SetCardInfo("Liliana Vess", 30, Rarity.RARE, mage.cards.l.LilianaVess.class));
|
||||
cards.add(new SetCardInfo("Liliana Vess", 101, Rarity.MYTHIC, mage.cards.l.LilianaVess.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Magister of Worth", 86, Rarity.SPECIAL, mage.cards.m.MagisterOfWorth.class));
|
||||
|
@ -160,6 +166,7 @@ public class MediaInserts extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Nissa Revane", 27, Rarity.MYTHIC, mage.cards.n.NissaRevane.class));
|
||||
cards.add(new SetCardInfo("Nissa, Sage Animist", 998, Rarity.SPECIAL, mage.cards.n.NissaSageAnimist.class));
|
||||
cards.add(new SetCardInfo("Nissa, Vastwood Seer", 998, Rarity.SPECIAL, mage.cards.n.NissaVastwoodSeer.class));
|
||||
cards.add(new SetCardInfo("Nissa, Voice of Zendikar", 176, Rarity.MYTHIC, mage.cards.n.NissaVoiceOfZendikar.class));
|
||||
cards.add(new SetCardInfo("Nissa, Worldwaker", 103, Rarity.MYTHIC, mage.cards.n.NissaWorldwaker.class));
|
||||
cards.add(new SetCardInfo("Noosegraf Mob", 159, Rarity.RARE, mage.cards.n.NoosegrafMob.class));
|
||||
cards.add(new SetCardInfo("Ogre Arsonist", 63, Rarity.SPECIAL, mage.cards.o.OgreArsonist.class));
|
||||
|
@ -168,6 +175,7 @@ public class MediaInserts extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Oran-Rief Hydra", 140, Rarity.SPECIAL, mage.cards.o.OranRiefHydra.class));
|
||||
cards.add(new SetCardInfo("Phyrexian Rager", 14, Rarity.COMMON, mage.cards.p.PhyrexianRager.class));
|
||||
cards.add(new SetCardInfo("Pia and Kiran Nalaar", 128, Rarity.SPECIAL, mage.cards.p.PiaAndKiranNalaar.class));
|
||||
cards.add(new SetCardInfo("Prairie Stream", 169, Rarity.RARE, mage.cards.p.PrairieStream.class));
|
||||
cards.add(new SetCardInfo("Primordial Hydra", 49, Rarity.MYTHIC, mage.cards.p.PrimordialHydra.class));
|
||||
cards.add(new SetCardInfo("Pristine Skywise", 113, Rarity.SPECIAL, mage.cards.p.PristineSkywise.class));
|
||||
cards.add(new SetCardInfo("Rakshasa Vizier", 96, Rarity.RARE, mage.cards.r.RakshasaVizier.class));
|
||||
|
@ -192,6 +200,7 @@ public class MediaInserts extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Silverblade Paladin", 44, Rarity.RARE, mage.cards.s.SilverbladePaladin.class));
|
||||
cards.add(new SetCardInfo("Silver Drake", 13, Rarity.SPECIAL, mage.cards.s.SilverDrake.class));
|
||||
cards.add(new SetCardInfo("Skyship Stalker", 162, Rarity.RARE, mage.cards.s.SkyshipStalker.class));
|
||||
cards.add(new SetCardInfo("Smoldering Marsh", 170, Rarity.RARE, mage.cards.s.SmolderingMarsh.class));
|
||||
cards.add(new SetCardInfo("Soul of Ravnica", 87, Rarity.MYTHIC, mage.cards.s.SoulOfRavnica.class));
|
||||
cards.add(new SetCardInfo("Soul of Zendikar", 88, Rarity.MYTHIC, mage.cards.s.SoulOfZendikar.class));
|
||||
cards.add(new SetCardInfo("Soul Swallower", 153, Rarity.RARE, mage.cards.s.SoulSwallower.class));
|
||||
|
@ -201,6 +210,7 @@ public class MediaInserts extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Steward of Valeron", 21, Rarity.COMMON, mage.cards.s.StewardOfValeron.class));
|
||||
cards.add(new SetCardInfo("Sultai Charm", 117, Rarity.SPECIAL, mage.cards.s.SultaiCharm.class));
|
||||
cards.add(new SetCardInfo("Sunblast Angel", 47, Rarity.RARE, mage.cards.s.SunblastAngel.class));
|
||||
cards.add(new SetCardInfo("Sunken Hollow", 171, Rarity.RARE, mage.cards.s.SunkenHollow.class));
|
||||
cards.add(new SetCardInfo("Supreme Verdict", 56, Rarity.RARE, mage.cards.s.SupremeVerdict.class));
|
||||
cards.add(new SetCardInfo("Surgical Extraction", 33, Rarity.RARE, mage.cards.s.SurgicalExtraction.class));
|
||||
cards.add(new SetCardInfo("Sylvan Caryatid", 77, Rarity.RARE, mage.cards.s.SylvanCaryatid.class));
|
||||
|
@ -216,6 +226,7 @@ public class MediaInserts extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Voidmage Husher", 62, Rarity.SPECIAL, mage.cards.v.VoidmageHusher.class));
|
||||
cards.add(new SetCardInfo("Warmonger", 12, Rarity.SPECIAL, mage.cards.w.Warmonger.class));
|
||||
cards.add(new SetCardInfo("Wash Out", 82, Rarity.UNCOMMON, mage.cards.w.WashOut.class));
|
||||
cards.add(new SetCardInfo("Wildfire Eternal", 166, Rarity.RARE, mage.cards.w.WildfireEternal.class));
|
||||
cards.add(new SetCardInfo("Windseeker Centaur", 7, Rarity.SPECIAL, mage.cards.w.WindseekerCentaur.class));
|
||||
cards.add(new SetCardInfo("Xathrid Necromancer", 91, Rarity.SPECIAL, mage.cards.x.XathridNecromancer.class));
|
||||
}
|
||||
|
|
|
@ -27,7 +27,9 @@
|
|||
*/
|
||||
package mage.sets;
|
||||
|
||||
import mage.cards.CardGraphicInfo;
|
||||
import mage.cards.ExpansionSet;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.SetType;
|
||||
|
||||
/**
|
||||
|
@ -45,6 +47,162 @@ public class PlanechaseAnthology extends ExpansionSet {
|
|||
private PlanechaseAnthology() {
|
||||
super("Planechase Anthology", "PCA", ExpansionSet.buildDate(2016, 11, 25), SetType.SUPPLEMENTAL);
|
||||
this.blockName = "Command Zone";
|
||||
|
||||
cards.add(new SetCardInfo("Arc Trail", 39, Rarity.UNCOMMON, mage.cards.a.ArcTrail.class));
|
||||
cards.add(new SetCardInfo("Armillary Sphere", 108, Rarity.COMMON, mage.cards.a.ArmillarySphere.class));
|
||||
cards.add(new SetCardInfo("Armored Griffin", 1, Rarity.UNCOMMON, mage.cards.a.ArmoredGriffin.class));
|
||||
cards.add(new SetCardInfo("Assassinate", 30, Rarity.COMMON, mage.cards.a.Assassinate.class));
|
||||
cards.add(new SetCardInfo("Augury Owl", 14, Rarity.COMMON, mage.cards.a.AuguryOwl.class));
|
||||
cards.add(new SetCardInfo("Aura Gnarlid", 55, Rarity.COMMON, mage.cards.a.AuraGnarlid.class));
|
||||
cards.add(new SetCardInfo("Auramancer", 2, Rarity.COMMON, mage.cards.a.Auramancer.class));
|
||||
cards.add(new SetCardInfo("Auratouched Mage", 3, Rarity.UNCOMMON, mage.cards.a.AuratouchedMage.class));
|
||||
cards.add(new SetCardInfo("Awakening Zone", 56, Rarity.RARE, mage.cards.a.AwakeningZone.class));
|
||||
cards.add(new SetCardInfo("Baleful Strix", 82, Rarity.UNCOMMON, mage.cards.b.BalefulStrix.class));
|
||||
cards.add(new SetCardInfo("Beast Within", 57, Rarity.UNCOMMON, mage.cards.b.BeastWithin.class));
|
||||
cards.add(new SetCardInfo("Beetleback Chief", 40, Rarity.UNCOMMON, mage.cards.b.BeetlebackChief.class));
|
||||
cards.add(new SetCardInfo("Bituminous Blast", 83, Rarity.UNCOMMON, mage.cards.b.BituminousBlast.class));
|
||||
cards.add(new SetCardInfo("Bloodbraid Elf", 84, Rarity.UNCOMMON, mage.cards.b.BloodbraidElf.class));
|
||||
cards.add(new SetCardInfo("Boar Umbra", 58, Rarity.UNCOMMON, mage.cards.b.BoarUmbra.class));
|
||||
cards.add(new SetCardInfo("Bramble Elemental", 59, Rarity.COMMON, mage.cards.b.BrambleElemental.class));
|
||||
cards.add(new SetCardInfo("Brindle Shoat", 60, Rarity.UNCOMMON, mage.cards.b.BrindleShoat.class));
|
||||
cards.add(new SetCardInfo("Brutalizer Exarch", 61, Rarity.UNCOMMON, mage.cards.b.BrutalizerExarch.class));
|
||||
cards.add(new SetCardInfo("Cadaver Imp", 31, Rarity.COMMON, mage.cards.c.CadaverImp.class));
|
||||
cards.add(new SetCardInfo("Cage of Hands", 4, Rarity.COMMON, mage.cards.c.CageOfHands.class));
|
||||
cards.add(new SetCardInfo("Cancel", 15, Rarity.COMMON, mage.cards.c.Cancel.class));
|
||||
cards.add(new SetCardInfo("Celestial Ancient", 5, Rarity.RARE, mage.cards.c.CelestialAncient.class));
|
||||
cards.add(new SetCardInfo("Concentrate", 16, Rarity.UNCOMMON, mage.cards.c.Concentrate.class));
|
||||
cards.add(new SetCardInfo("Cultivate", 62, Rarity.COMMON, mage.cards.c.Cultivate.class));
|
||||
cards.add(new SetCardInfo("Dark Hatchling", 32, Rarity.RARE, mage.cards.d.DarkHatchling.class));
|
||||
cards.add(new SetCardInfo("Deny Reality", 85, Rarity.COMMON, mage.cards.d.DenyReality.class));
|
||||
cards.add(new SetCardInfo("Dimir Aqueduct", 116, Rarity.COMMON, mage.cards.d.DimirAqueduct.class));
|
||||
cards.add(new SetCardInfo("Dimir Infiltrator", 86, Rarity.COMMON, mage.cards.d.DimirInfiltrator.class));
|
||||
cards.add(new SetCardInfo("Dowsing Shaman", 63, Rarity.UNCOMMON, mage.cards.d.DowsingShaman.class));
|
||||
cards.add(new SetCardInfo("Dragonlair Spider", 87, Rarity.RARE, mage.cards.d.DragonlairSpider.class));
|
||||
cards.add(new SetCardInfo("Dreampod Druid", 64, Rarity.UNCOMMON, mage.cards.d.DreampodDruid.class));
|
||||
cards.add(new SetCardInfo("Elderwood Scion", 88, Rarity.RARE, mage.cards.e.ElderwoodScion.class));
|
||||
cards.add(new SetCardInfo("Enigma Sphinx", 89, Rarity.RARE, mage.cards.e.EnigmaSphinx.class));
|
||||
cards.add(new SetCardInfo("Enlisted Wurm", 90, Rarity.UNCOMMON, mage.cards.e.EnlistedWurm.class));
|
||||
cards.add(new SetCardInfo("Erratic Explosion", 41, Rarity.COMMON, mage.cards.e.ErraticExplosion.class));
|
||||
cards.add(new SetCardInfo("Etherium-Horn Sorcerer", 91, Rarity.RARE, mage.cards.e.EtheriumHornSorcerer.class));
|
||||
cards.add(new SetCardInfo("Exotic Orchard", 117, Rarity.RARE, mage.cards.e.ExoticOrchard.class));
|
||||
cards.add(new SetCardInfo("Farsight Mask", 109, Rarity.UNCOMMON, mage.cards.f.FarsightMask.class));
|
||||
cards.add(new SetCardInfo("Felidar Umbra", 6, Rarity.UNCOMMON, mage.cards.f.FelidarUmbra.class));
|
||||
cards.add(new SetCardInfo("Fiery Conclusion", 42, Rarity.COMMON, mage.cards.f.FieryConclusion.class));
|
||||
cards.add(new SetCardInfo("Fiery Fall", 43, Rarity.COMMON, mage.cards.f.FieryFall.class));
|
||||
cards.add(new SetCardInfo("Fires of Yavimaya", 92, Rarity.UNCOMMON, mage.cards.f.FiresOfYavimaya.class));
|
||||
cards.add(new SetCardInfo("Flayer Husk", 110, Rarity.COMMON, mage.cards.f.FlayerHusk.class));
|
||||
cards.add(new SetCardInfo("Fling", 44, Rarity.COMMON, mage.cards.f.Fling.class));
|
||||
cards.add(new SetCardInfo("Forest", 152, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Forest", 153, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Forest", 154, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Forest", 155, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Forest", 156, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Fusion Elemental", 93, Rarity.UNCOMMON, mage.cards.f.FusionElemental.class));
|
||||
cards.add(new SetCardInfo("Ghostly Prison", 7, Rarity.UNCOMMON, mage.cards.g.GhostlyPrison.class));
|
||||
cards.add(new SetCardInfo("Glen Elendra Liege", 94, Rarity.RARE, mage.cards.g.GlenElendraLiege.class));
|
||||
cards.add(new SetCardInfo("Gluttonous Slime", 65, Rarity.UNCOMMON, mage.cards.g.GluttonousSlime.class));
|
||||
cards.add(new SetCardInfo("Graypelt Refuge", 118, Rarity.UNCOMMON, mage.cards.g.GraypeltRefuge.class));
|
||||
cards.add(new SetCardInfo("Gruul Turf", 119, Rarity.COMMON, mage.cards.g.GruulTurf.class));
|
||||
cards.add(new SetCardInfo("Guard Gomazoa", 17, Rarity.UNCOMMON, mage.cards.g.GuardGomazoa.class));
|
||||
cards.add(new SetCardInfo("Hellion Eruption", 45, Rarity.RARE, mage.cards.h.HellionEruption.class));
|
||||
cards.add(new SetCardInfo("Hellkite Hatchling", 95, Rarity.UNCOMMON, mage.cards.h.HellkiteHatchling.class));
|
||||
cards.add(new SetCardInfo("Higure, the Still Wind", 18, Rarity.RARE, mage.cards.h.HigureTheStillWind.class));
|
||||
cards.add(new SetCardInfo("Hissing Iguanar", 46, Rarity.COMMON, mage.cards.h.HissingIguanar.class));
|
||||
cards.add(new SetCardInfo("Hyena Umbra", 8, Rarity.COMMON, mage.cards.h.HyenaUmbra.class));
|
||||
cards.add(new SetCardInfo("Illusory Angel", 19, Rarity.UNCOMMON, mage.cards.i.IllusoryAngel.class));
|
||||
cards.add(new SetCardInfo("Indrik Umbra", 96, Rarity.RARE, mage.cards.i.IndrikUmbra.class));
|
||||
cards.add(new SetCardInfo("Ink-Eyes, Servant of Oni", 33, Rarity.RARE, mage.cards.i.InkEyesServantOfOni.class));
|
||||
cards.add(new SetCardInfo("Inkfathom Witch", 97, Rarity.UNCOMMON, mage.cards.i.InkfathomWitch.class));
|
||||
cards.add(new SetCardInfo("Island", 137, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Island", 138, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Island", 139, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Island", 140, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Island", 141, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Jwar Isle Refuge", 120, Rarity.UNCOMMON, mage.cards.j.JwarIsleRefuge.class));
|
||||
cards.add(new SetCardInfo("Kathari Remnant", 98, Rarity.UNCOMMON, mage.cards.k.KathariRemnant.class));
|
||||
cards.add(new SetCardInfo("Kazandu Refuge", 121, Rarity.UNCOMMON, mage.cards.k.KazanduRefuge.class));
|
||||
cards.add(new SetCardInfo("Khalni Garden", 122, Rarity.COMMON, mage.cards.k.KhalniGarden.class));
|
||||
cards.add(new SetCardInfo("Kor Spiritdancer", 9, Rarity.RARE, mage.cards.k.KorSpiritdancer.class));
|
||||
cards.add(new SetCardInfo("Krond the Dawn-Clad", 99, Rarity.MYTHIC, mage.cards.k.KrondTheDawnClad.class));
|
||||
cards.add(new SetCardInfo("Krosan Verge", 123, Rarity.UNCOMMON, mage.cards.k.KrosanVerge.class));
|
||||
cards.add(new SetCardInfo("Last Stand", 100, Rarity.RARE, mage.cards.l.LastStand.class));
|
||||
cards.add(new SetCardInfo("Liliana's Specter", 34, Rarity.COMMON, mage.cards.l.LilianasSpecter.class));
|
||||
cards.add(new SetCardInfo("Lumberknot", 66, Rarity.UNCOMMON, mage.cards.l.Lumberknot.class));
|
||||
cards.add(new SetCardInfo("Maelstrom Wanderer", 101, Rarity.MYTHIC, mage.cards.m.MaelstromWanderer.class));
|
||||
cards.add(new SetCardInfo("Mammoth Umbra", 10, Rarity.UNCOMMON, mage.cards.m.MammothUmbra.class));
|
||||
cards.add(new SetCardInfo("Mark of Mutiny", 47, Rarity.UNCOMMON, mage.cards.m.MarkOfMutiny.class));
|
||||
cards.add(new SetCardInfo("Mass Mutiny", 48, Rarity.RARE, mage.cards.m.MassMutiny.class));
|
||||
cards.add(new SetCardInfo("Mistblade Shinobi", 20, Rarity.COMMON, mage.cards.m.MistbladeShinobi.class));
|
||||
cards.add(new SetCardInfo("Mitotic Slime", 67, Rarity.RARE, mage.cards.m.MitoticSlime.class));
|
||||
cards.add(new SetCardInfo("Mountain", 147, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Mountain", 148, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Mountain", 149, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Mountain", 150, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Mountain", 151, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Mudbutton Torchrunner", 49, Rarity.COMMON, mage.cards.m.MudbuttonTorchrunner.class));
|
||||
cards.add(new SetCardInfo("Mycoloth", 68, Rarity.RARE, mage.cards.m.Mycoloth.class));
|
||||
cards.add(new SetCardInfo("Nest Invader", 69, Rarity.COMMON, mage.cards.n.NestInvader.class));
|
||||
cards.add(new SetCardInfo("Ninja of the Deep Hours", 21, Rarity.COMMON, mage.cards.n.NinjaOfTheDeepHours.class));
|
||||
cards.add(new SetCardInfo("Noggle Ransacker", 102, Rarity.UNCOMMON, mage.cards.n.NoggleRansacker.class));
|
||||
cards.add(new SetCardInfo("Nullmage Advocate", 70, Rarity.COMMON, mage.cards.n.NullmageAdvocate.class));
|
||||
cards.add(new SetCardInfo("Okiba-Gang Shinobi", 35, Rarity.COMMON, mage.cards.o.OkibaGangShinobi.class));
|
||||
cards.add(new SetCardInfo("Ondu Giant", 71, Rarity.COMMON, mage.cards.o.OnduGiant.class));
|
||||
cards.add(new SetCardInfo("Overrun", 72, Rarity.UNCOMMON, mage.cards.o.Overrun.class));
|
||||
cards.add(new SetCardInfo("Penumbra Spider", 73, Rarity.COMMON, mage.cards.p.PenumbraSpider.class));
|
||||
cards.add(new SetCardInfo("Peregrine Drake", 22, Rarity.UNCOMMON, mage.cards.p.PeregrineDrake.class));
|
||||
cards.add(new SetCardInfo("Plains", 132, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Plains", 133, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Plains", 134, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Plains", 135, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Plains", 136, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Pollenbright Wings", 103, Rarity.UNCOMMON, mage.cards.p.PollenbrightWings.class));
|
||||
cards.add(new SetCardInfo("Predatory Urge", 74, Rarity.RARE, mage.cards.p.PredatoryUrge.class));
|
||||
cards.add(new SetCardInfo("Preyseizer Dragon", 50, Rarity.RARE, mage.cards.p.PreyseizerDragon.class));
|
||||
cards.add(new SetCardInfo("Primal Plasma", 23, Rarity.COMMON, mage.cards.p.PrimalPlasma.class));
|
||||
cards.add(new SetCardInfo("Quiet Disrepair", 75, Rarity.COMMON, mage.cards.q.QuietDisrepair.class));
|
||||
cards.add(new SetCardInfo("Quietus Spike", 112, Rarity.RARE, mage.cards.q.QuietusSpike.class));
|
||||
cards.add(new SetCardInfo("Rancor", 76, Rarity.COMMON, mage.cards.r.Rancor.class));
|
||||
cards.add(new SetCardInfo("Rivals' Duel", 51, Rarity.UNCOMMON, mage.cards.r.RivalsDuel.class));
|
||||
cards.add(new SetCardInfo("Rupture Spire", 124, Rarity.COMMON, mage.cards.r.RuptureSpire.class));
|
||||
cards.add(new SetCardInfo("Sai of the Shinobi", 113, Rarity.UNCOMMON, mage.cards.s.SaiOfTheShinobi.class));
|
||||
cards.add(new SetCardInfo("Sakashima's Student", 24, Rarity.RARE, mage.cards.s.SakashimasStudent.class));
|
||||
cards.add(new SetCardInfo("See Beyond", 25, Rarity.COMMON, mage.cards.s.SeeBeyond.class));
|
||||
cards.add(new SetCardInfo("Selesnya Sanctuary", 125, Rarity.COMMON, mage.cards.s.SelesnyaSanctuary.class));
|
||||
cards.add(new SetCardInfo("Shardless Agent", 104, Rarity.UNCOMMON, mage.cards.s.ShardlessAgent.class));
|
||||
cards.add(new SetCardInfo("Shimmering Grotto", 126, Rarity.COMMON, mage.cards.s.ShimmeringGrotto.class));
|
||||
cards.add(new SetCardInfo("Sigil of the Empty Throne", 11, Rarity.RARE, mage.cards.s.SigilOfTheEmptyThrone.class));
|
||||
cards.add(new SetCardInfo("Silent-Blade Oni", 105, Rarity.RARE, mage.cards.s.SilentBladeOni.class));
|
||||
cards.add(new SetCardInfo("Silhana Ledgewalker", 77, Rarity.COMMON, mage.cards.s.SilhanaLedgewalker.class));
|
||||
cards.add(new SetCardInfo("Skarrg, the Rage Pits", 127, Rarity.UNCOMMON, mage.cards.s.SkarrgTheRagePits.class));
|
||||
cards.add(new SetCardInfo("Skullsnatcher", 36, Rarity.COMMON, mage.cards.s.Skullsnatcher.class));
|
||||
cards.add(new SetCardInfo("Snake Umbra", 78, Rarity.COMMON, mage.cards.s.SnakeUmbra.class));
|
||||
cards.add(new SetCardInfo("Spirit Mantle", 12, Rarity.UNCOMMON, mage.cards.s.SpiritMantle.class));
|
||||
cards.add(new SetCardInfo("Swamp", 142, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Swamp", 143, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Swamp", 144, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Swamp", 145, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Swamp", 146, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true)));
|
||||
cards.add(new SetCardInfo("Sunken Hope", 26, Rarity.RARE, mage.cards.s.SunkenHope.class));
|
||||
cards.add(new SetCardInfo("Tainted Isle", 128, Rarity.UNCOMMON, mage.cards.t.TaintedIsle.class));
|
||||
cards.add(new SetCardInfo("Terramorphic Expanse", 129, Rarity.COMMON, mage.cards.t.TerramorphicExpanse.class));
|
||||
cards.add(new SetCardInfo("Thorn-Thrash Viashino", 52, Rarity.COMMON, mage.cards.t.ThornThrashViashino.class));
|
||||
cards.add(new SetCardInfo("Thran Golem", 114, Rarity.UNCOMMON, mage.cards.t.ThranGolem.class));
|
||||
cards.add(new SetCardInfo("Three Dreams", 13, Rarity.RARE, mage.cards.t.ThreeDreams.class));
|
||||
cards.add(new SetCardInfo("Throat Slitter", 37, Rarity.UNCOMMON, mage.cards.t.ThroatSlitter.class));
|
||||
cards.add(new SetCardInfo("Thromok the Insatiable", 106, Rarity.MYTHIC, mage.cards.t.ThromokTheInsatiable.class));
|
||||
cards.add(new SetCardInfo("Thunder-Thrash Elder", 53, Rarity.UNCOMMON, mage.cards.t.ThunderThrashElder.class));
|
||||
cards.add(new SetCardInfo("Tormented Soul", 38, Rarity.COMMON, mage.cards.t.TormentedSoul.class));
|
||||
cards.add(new SetCardInfo("Tukatongue Thallid", 79, Rarity.COMMON, mage.cards.t.TukatongueThallid.class));
|
||||
cards.add(new SetCardInfo("Vela the Night-Clad", 107, Rarity.MYTHIC, mage.cards.v.VelaTheNightClad.class));
|
||||
cards.add(new SetCardInfo("Viridian Emissary", 80, Rarity.COMMON, mage.cards.v.ViridianEmissary.class));
|
||||
cards.add(new SetCardInfo("Vitu-Ghazi, the City-Tree", 130, Rarity.UNCOMMON, mage.cards.v.VituGhaziTheCityTree.class));
|
||||
cards.add(new SetCardInfo("Vivid Creek", 131, Rarity.UNCOMMON, mage.cards.v.VividCreek.class));
|
||||
cards.add(new SetCardInfo("Walker of Secret Ways", 27, Rarity.UNCOMMON, mage.cards.w.WalkerOfSecretWays.class));
|
||||
cards.add(new SetCardInfo("Wall of Blossoms", 81, Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class));
|
||||
cards.add(new SetCardInfo("Wall of Frost", 28, Rarity.UNCOMMON, mage.cards.w.WallOfFrost.class));
|
||||
cards.add(new SetCardInfo("Warstorm Surge", 54, Rarity.RARE, mage.cards.w.WarstormSurge.class));
|
||||
cards.add(new SetCardInfo("Whirlpool Warrior", 29, Rarity.RARE, mage.cards.w.WhirlpoolWarrior.class));
|
||||
cards.add(new SetCardInfo("Whispersilk Cloak", 115, Rarity.UNCOMMON, mage.cards.w.WhispersilkCloak.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
package org.mage.test.cards.continuous;
|
||||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* @author mzulch
|
||||
*/
|
||||
public class ActOfHeroismTest extends CardTestPlayerBase {
|
||||
|
||||
// Test that loss of abilities doesn't remove Act of Heroism's "block an additional creature" effect
|
||||
@Test
|
||||
public void testCanBlockMultiple() {
|
||||
// 0/4 Creature - Camel
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Tasseled Dromedary");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 2);
|
||||
addCard(Zone.HAND, playerA, "Act of Heroism");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Unwavering Initiate");
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Sacred Cat");
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Plains", 8);
|
||||
addCard(Zone.HAND, playerB, "Overwhelming Splendor");
|
||||
|
||||
// Untap target creature. It gets +2/+2 until end of turn and can block an additional creature this turn
|
||||
castSpell(2, PhaseStep.UPKEEP, playerA, "Act of Heroism", "Tasseled Dromedary");
|
||||
|
||||
// Creatures enchanted player controls loses all abilities and have base power and toughness 1/1
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Overwhelming Splendor", playerA);
|
||||
|
||||
attack(2, playerB, "Unwavering Initiate");
|
||||
attack(2, playerB, "Sacred Cat");
|
||||
|
||||
block(2, playerA, "Tasseled Dromedary", "Unwavering Initiate");
|
||||
block(2, playerA, "Tasseled Dromedary", "Sacred Cat");
|
||||
|
||||
setStopAt(2, PhaseStep.COMBAT_DAMAGE);
|
||||
|
||||
// Fails if A's creature is unable to block both attackers
|
||||
execute();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package org.mage.test.cards.mana;
|
||||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
public class MycosynthLatticeTest extends CardTestPlayerBase {
|
||||
|
||||
|
||||
@Test
|
||||
public void testMycoSynthLatticeWithCrystallineCrawler(){
|
||||
String crawler = "Crystalline Crawler";
|
||||
String lattice = "Mycosynth Lattice";
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, lattice);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain");
|
||||
addCard(Zone.HAND, playerA, crawler);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, crawler);
|
||||
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
|
||||
execute();
|
||||
|
||||
assertCounterCount(playerA, crawler, CounterType.P1P1, 4);
|
||||
}
|
||||
}
|
|
@ -34,7 +34,6 @@ import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
|||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
|
@ -49,23 +48,23 @@ public class DontUntapInOpponentsNextUntapStepAllEffect extends ContinuousRuleMo
|
|||
|
||||
private int validForTurnNum;
|
||||
//private String targetName;
|
||||
TargetController targetController;
|
||||
FilterPermanent filter;
|
||||
|
||||
/**
|
||||
* Attention: This effect won't work with targets controlled by different
|
||||
* controllers If this is needed, the validForTurnNum has to be saved per
|
||||
* controller.
|
||||
*
|
||||
* @param filter
|
||||
*/
|
||||
public DontUntapInOpponentsNextUntapStepAllEffect(FilterPermanent filter) {
|
||||
super(Duration.Custom, Outcome.Detriment, false, true);
|
||||
this.filter = filter;
|
||||
this.filter = filter;
|
||||
}
|
||||
|
||||
public DontUntapInOpponentsNextUntapStepAllEffect(final DontUntapInOpponentsNextUntapStepAllEffect effect) {
|
||||
super(effect);
|
||||
this.validForTurnNum = effect.validForTurnNum;
|
||||
this.targetController = effect.targetController;
|
||||
this.filter = effect.filter;
|
||||
|
||||
}
|
||||
|
@ -127,7 +126,8 @@ public class DontUntapInOpponentsNextUntapStepAllEffect extends ContinuousRuleMo
|
|||
if (controller != null && !game.isOpponent(controller, permanent.getControllerId())) {
|
||||
return false;
|
||||
}
|
||||
if (game.getActivePlayerId().equals(permanent.getControllerId()) && // controller's untap step
|
||||
if (game.getActivePlayerId().equals(permanent.getControllerId())
|
||||
&& // controller's untap step
|
||||
filter.match(permanent, source.getSourceId(), source.getControllerId(), game)) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
package mage.abilities.effects.common;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.game.ExileZone;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
public class ReturnCreaturesFromExileEffect extends OneShotEffect {
|
||||
|
||||
private UUID exileId;
|
||||
private boolean byOwner;
|
||||
|
||||
public ReturnCreaturesFromExileEffect(UUID exileId, boolean byOwner, String description) {
|
||||
super(Outcome.PutCardInPlay);
|
||||
this.exileId = exileId;
|
||||
this.setText(description);
|
||||
this.byOwner = byOwner;
|
||||
}
|
||||
|
||||
|
||||
public ReturnCreaturesFromExileEffect(final ReturnCreaturesFromExileEffect effect) {
|
||||
super(effect);
|
||||
this.exileId = effect.exileId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReturnCreaturesFromExileEffect copy() {
|
||||
return new ReturnCreaturesFromExileEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
ExileZone exile = game.getExile().getExileZone(exileId);
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null && exile != null) {
|
||||
controller.moveCards(exile.getCards(new FilterCreatureCard(), game), Zone.BATTLEFIELD, source, game, false, false, this.byOwner, null);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
package mage.abilities.effects.common.combat;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Layer;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubLayer;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
* @author mzulch
|
||||
*/
|
||||
public class CanBlockAdditionalCreatureTargetEffect extends ContinuousEffectImpl {
|
||||
|
||||
protected int amount;
|
||||
|
||||
public CanBlockAdditionalCreatureTargetEffect() {
|
||||
this(Duration.EndOfTurn, 1);
|
||||
}
|
||||
|
||||
public CanBlockAdditionalCreatureTargetEffect(Duration duration, int amount) {
|
||||
super(duration, Outcome.Benefit);
|
||||
this.amount = amount;
|
||||
staticText = setText();
|
||||
}
|
||||
|
||||
public CanBlockAdditionalCreatureTargetEffect(final CanBlockAdditionalCreatureTargetEffect effect) {
|
||||
super(effect);
|
||||
this.amount = effect.amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CanBlockAdditionalCreatureTargetEffect copy() {
|
||||
return new CanBlockAdditionalCreatureTargetEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
|
||||
Permanent target = game.getPermanent(this.getTargetPointer().getFirst(game, source));
|
||||
if (target == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// maxBlocks = 0 equals to "can block any number of creatures"
|
||||
if (amount > 0) {
|
||||
target.setMaxBlocks(target.getMaxBlocks() + amount);
|
||||
} else {
|
||||
target.setMaxBlocks(0);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return false;
|
||||
}
|
||||
|
||||
private String setText() {
|
||||
String text = "target can block ";
|
||||
switch (amount) {
|
||||
case 0:
|
||||
text += "any number of creatures";
|
||||
break;
|
||||
default:
|
||||
text += CardUtil.numberToText(amount, "an") + " additional creature" + (amount > 1 ? "s" : "");
|
||||
}
|
||||
if (duration == Duration.EndOfTurn) {
|
||||
text += " this turn";
|
||||
}
|
||||
if (duration == Duration.WhileOnBattlefield) {
|
||||
text += " each combat";
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasLayer(Layer layer) {
|
||||
return layer == Layer.RulesEffects;
|
||||
}
|
||||
}
|
|
@ -14,7 +14,7 @@ public class AfflictAbility extends BecomesBlockedTriggeredAbility {
|
|||
|
||||
public AfflictAbility(int amount) {
|
||||
super(new LoseLifeDefendingPlayerEffect(amount, true)
|
||||
.setText("Afflict " + amount + "<i>(Whenever this creature becomes blocked, defending player loses " + amount + " life.)</i>"), false);
|
||||
.setText("Afflict " + amount + " <i>(Whenever this creature becomes blocked, defending player loses " + amount + " life.)</i>"), false);
|
||||
lifeLoss = amount;
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,6 @@ public class AfflictAbility extends BecomesBlockedTriggeredAbility {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Afflict " + lifeLoss + "<i>(Whenever this creature becomes blocked, defending player loses " + lifeLoss + " life.)</i>";
|
||||
return "Afflict " + lifeLoss + " <i>(Whenever this creature becomes blocked, defending player loses " + lifeLoss + " life.)</i>";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,14 +27,20 @@
|
|||
*/
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbilityImpl;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.common.DiscardSourceCost;
|
||||
import mage.abilities.costs.CostImpl;
|
||||
import mage.abilities.costs.mana.ManaCost;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCardInLibrary;
|
||||
|
||||
/**
|
||||
|
@ -48,14 +54,14 @@ public class CyclingAbility extends ActivatedAbilityImpl {
|
|||
|
||||
public CyclingAbility(Cost cost) {
|
||||
super(Zone.HAND, new DrawCardSourceControllerEffect(1), cost);
|
||||
this.addCost(new DiscardSourceCost(false));
|
||||
this.addCost(new CyclingDiscardCost());
|
||||
this.cost = cost;
|
||||
this.text = "Cycling";
|
||||
}
|
||||
|
||||
public CyclingAbility(Cost cost, FilterCard filter, String text) {
|
||||
super(Zone.HAND, new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true), cost);
|
||||
this.addCost(new DiscardSourceCost(false));
|
||||
this.addCost(new CyclingDiscardCost());
|
||||
this.cost = cost;
|
||||
this.text = text;
|
||||
}
|
||||
|
@ -84,3 +90,44 @@ public class CyclingAbility extends ActivatedAbilityImpl {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
class CyclingDiscardCost extends CostImpl {
|
||||
|
||||
public CyclingDiscardCost() {
|
||||
}
|
||||
|
||||
public CyclingDiscardCost(CyclingDiscardCost cost) {
|
||||
super(cost);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) {
|
||||
return game.getPlayer(controllerId).getHand().contains(sourceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) {
|
||||
Player player = game.getPlayer(controllerId);
|
||||
if (player != null) {
|
||||
Card card = player.getHand().get(sourceId, game);
|
||||
if (card != null) {
|
||||
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.CYCLE_CARD, card.getId(), card.getId(), card.getOwnerId()));
|
||||
paid = player.discard(card, null, game);
|
||||
if (paid) {
|
||||
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.CYCLED_CARD, card.getId(), card.getId(), card.getOwnerId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return paid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText() {
|
||||
return "Discard this card";
|
||||
}
|
||||
|
||||
@Override
|
||||
public CyclingDiscardCost copy() {
|
||||
return new CyclingDiscardCost(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,8 @@ public final class StaticFilters {
|
|||
|
||||
public static final FilterCreaturePermanent FILTER_ARTIFACT_CREATURE_PERMANENT = new FilterArtifactCreaturePermanent();
|
||||
public static final FilterPermanent FILTER_PERMANENT_ARTIFACT_OR_CREATURE = new FilterPermanent("artifact or creature");
|
||||
public static final FilterPermanent FILTER_PERMANENT_ARTIFACT_CREATURE_OR_ENCHANTMENT = new FilterPermanent("artifact, creature, or enchantment");
|
||||
public static final FilterPermanent FILTER_PERMANENT_ARTIFACT_CREATURE_ENCHANTMENT_OR_LAND = new FilterPermanent("artifact, creature, enchantment, or land");
|
||||
public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_ARTIFACT = new FilterControlledArtifactPermanent();
|
||||
public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_ARTIFACT_OR_CREATURE = new FilterControlledPermanent("artifact or creature you control");
|
||||
|
||||
|
@ -69,6 +71,17 @@ public final class StaticFilters {
|
|||
new CardTypePredicate(CardType.ARTIFACT),
|
||||
new CardTypePredicate(CardType.CREATURE)
|
||||
));
|
||||
FILTER_PERMANENT_ARTIFACT_CREATURE_OR_ENCHANTMENT.add(Predicates.or(
|
||||
new CardTypePredicate(CardType.ARTIFACT),
|
||||
new CardTypePredicate(CardType.CREATURE),
|
||||
new CardTypePredicate(CardType.ENCHANTMENT)
|
||||
));
|
||||
FILTER_PERMANENT_ARTIFACT_CREATURE_ENCHANTMENT_OR_LAND.add(Predicates.or(
|
||||
new CardTypePredicate(CardType.ARTIFACT),
|
||||
new CardTypePredicate(CardType.CREATURE),
|
||||
new CardTypePredicate(CardType.ENCHANTMENT),
|
||||
new CardTypePredicate(CardType.LAND)
|
||||
));
|
||||
FILTER_CONTROLLED_PERMANENT_ARTIFACT_OR_CREATURE.add(Predicates.or(
|
||||
new CardTypePredicate(CardType.ARTIFACT),
|
||||
new CardTypePredicate(CardType.CREATURE)
|
||||
|
|
|
@ -62,7 +62,7 @@ class GideonOfTheTrialsCantLoseEffect extends ContinuousRuleModifyingEffectImpl
|
|||
}
|
||||
|
||||
public GideonOfTheTrialsCantLoseEffect() {
|
||||
super(Duration.EndOfGame, Outcome.Benefit);
|
||||
super(Duration.EndOfGame, Outcome.Benefit, false, false);
|
||||
staticText = "As long as you control a Gideon planeswalker, you can't lose the game and your opponents can't win the game";
|
||||
}
|
||||
|
||||
|
|
|
@ -1,120 +1,124 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.target.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.Filter;
|
||||
import mage.filter.FilterAbility;
|
||||
import mage.game.Game;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.target.TargetObject;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author LevelX2
|
||||
*/
|
||||
|
||||
|
||||
public class TargetActivatedOrTriggeredAbility extends TargetObject {
|
||||
|
||||
public TargetActivatedOrTriggeredAbility() {
|
||||
this.minNumberOfTargets = 1;
|
||||
this.maxNumberOfTargets = 1;
|
||||
this.zone = Zone.STACK;
|
||||
this.targetName = "target activated or triggered ability";
|
||||
}
|
||||
|
||||
public TargetActivatedOrTriggeredAbility(final TargetActivatedOrTriggeredAbility target) {
|
||||
super(target);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean canTarget(UUID id, Ability source, Game game) {
|
||||
// rule 114.4. A spell or ability on the stack is an illegal target for itself.
|
||||
if (source != null && source.getId().equals(id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
StackObject stackObject = game.getStack().getStackObject(id);
|
||||
return isActivatedOrTriggeredAbility(stackObject);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||
return canChoose(sourceControllerId, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canChoose(UUID sourceControllerId, Game game) {
|
||||
return game.getStack()
|
||||
.stream()
|
||||
.anyMatch(TargetActivatedOrTriggeredAbility::isActivatedOrTriggeredAbility);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||
return possibleTargets(sourceControllerId, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> possibleTargets(UUID sourceControllerId, Game game) {
|
||||
return game.getStack().stream()
|
||||
.filter(TargetActivatedOrTriggeredAbility::isActivatedOrTriggeredAbility)
|
||||
.map(stackObject -> stackObject.getStackAbility().getId())
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public TargetActivatedOrTriggeredAbility copy() {
|
||||
return new TargetActivatedOrTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filter getFilter() {
|
||||
return new FilterAbility();
|
||||
}
|
||||
|
||||
static boolean isActivatedOrTriggeredAbility(StackObject stackObject) {
|
||||
if (stackObject == null) {
|
||||
return false;
|
||||
}
|
||||
if (stackObject instanceof Ability) {
|
||||
Ability ability = (Ability) stackObject;
|
||||
return ability.getAbilityType() == AbilityType.TRIGGERED
|
||||
|| ability.getAbilityType() == AbilityType.ACTIVATED;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.target.common;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import mage.abilities.Ability;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.Filter;
|
||||
import mage.filter.FilterStackObject;
|
||||
import mage.game.Game;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.target.TargetObject;
|
||||
|
||||
|
||||
|
||||
public class TargetActivatedOrTriggeredAbility extends TargetObject {
|
||||
|
||||
protected final FilterStackObject filter;
|
||||
|
||||
public TargetActivatedOrTriggeredAbility() {
|
||||
this(new FilterStackObject());
|
||||
}
|
||||
|
||||
public TargetActivatedOrTriggeredAbility(FilterStackObject filter) {
|
||||
this.minNumberOfTargets = 1;
|
||||
this.maxNumberOfTargets = 1;
|
||||
this.zone = Zone.STACK;
|
||||
this.targetName = filter.getMessage();
|
||||
this.filter = filter;
|
||||
}
|
||||
|
||||
public TargetActivatedOrTriggeredAbility(final TargetActivatedOrTriggeredAbility target) {
|
||||
super(target);
|
||||
this.filter = target.filter.copy();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean canTarget(UUID id, Ability source, Game game) {
|
||||
// rule 114.4. A spell or ability on the stack is an illegal target for itself.
|
||||
if (source != null && source.getId().equals(id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
StackObject stackObject = game.getStack().getStackObject(id);
|
||||
return isActivatedOrTriggeredAbility(stackObject) && filter.match(stackObject, source.getSourceId(), source.getControllerId(), game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||
return canChoose(sourceControllerId, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canChoose(UUID sourceControllerId, Game game) {
|
||||
return game.getStack()
|
||||
.stream()
|
||||
.anyMatch(TargetActivatedOrTriggeredAbility::isActivatedOrTriggeredAbility);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||
return possibleTargets(sourceControllerId, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> possibleTargets(UUID sourceControllerId, Game game) {
|
||||
return game.getStack().stream()
|
||||
.filter(TargetActivatedOrTriggeredAbility::isActivatedOrTriggeredAbility)
|
||||
.map(stackObject -> stackObject.getStackAbility().getId())
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public TargetActivatedOrTriggeredAbility copy() {
|
||||
return new TargetActivatedOrTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filter getFilter() {
|
||||
return filter;
|
||||
}
|
||||
|
||||
static boolean isActivatedOrTriggeredAbility(StackObject stackObject) {
|
||||
if (stackObject == null) {
|
||||
return false;
|
||||
}
|
||||
if (stackObject instanceof Ability) {
|
||||
Ability ability = (Ability) stackObject;
|
||||
return ability.getAbilityType() == AbilityType.TRIGGERED
|
||||
|| ability.getAbilityType() == AbilityType.ACTIVATED;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ my $templateBasicLand = Text::Template->new(TYPE => 'FILE', SOURCE => 'cardExten
|
|||
sub toCamelCase {
|
||||
my $string = $_[0];
|
||||
$string =~ s/\b([\w']+)\b/ucfirst($1)/ge;
|
||||
$string =~ s/[-,\s\']//g;
|
||||
$string =~ s/[-,\s\'\/]//g;
|
||||
$string;
|
||||
}
|
||||
|
||||
|
@ -266,7 +266,7 @@ foreach $name_collectorid (sort @setCards)
|
|||
$githubTask {"- [x] Done -- [$cardName](https://www.google.com.au/search?q=$plus_cardName+$googleSetName+mtg&source=lnms&tbm=isch)\n"} = 1;
|
||||
} else {
|
||||
$unimplemented {$str} = 1;
|
||||
$githubTask {"- [ ] Not Done -- [$cardName](https://www.google.com.au/search?q=$plus_cardName+$googleSetName+mtg&source=lnms&tbm=isch)\n"} = 1;
|
||||
$githubTask {"- [ ] Not done -- [$cardName](https://www.google.com.au/search?q=$plus_cardName+$googleSetName+mtg&source=lnms&tbm=isch)\n"} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,8 @@ sub toCamelCase
|
|||
return $string;
|
||||
}
|
||||
|
||||
my $option = $ARGV[0];
|
||||
|
||||
open (DATA, $setsFile) || die "can't open $setsFile";
|
||||
while(my $line = <DATA>)
|
||||
{
|
||||
|
@ -37,7 +39,7 @@ while(my $line = <DATA>)
|
|||
}
|
||||
close(DATA);
|
||||
|
||||
my $dir_listing = "dir \/a \/b \/s ..\\Mage.Sets\\ | find \".java\" |";
|
||||
my $dir_listing = "dir \/a \/b \/s ..\\Mage.Sets\\src\\mage\\sets | find \".java\" |";
|
||||
open (DIR_LISTING, "$dir_listing");
|
||||
my %setsForJavafile;
|
||||
my $totalCards = 0;
|
||||
|
@ -78,7 +80,12 @@ while (<DIR_LISTING>)
|
|||
$setsForJavafile {$f} = $trigraph;
|
||||
}
|
||||
|
||||
if ($line =~ m/SetCardInfo\("([^"]+)",([^,]+),/img)
|
||||
if ($line !~ m/$option/img)
|
||||
{
|
||||
next;
|
||||
}
|
||||
|
||||
if ($line =~ m/SetCardInfo\("([^"]+)",([^,]+),/im)
|
||||
{
|
||||
$name = $1;
|
||||
$cardNum = $2;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
Afflict|number|
|
||||
Annihilator|number|
|
||||
Basic landcycling|cost|
|
||||
Battle cry|new|
|
||||
|
|
|
@ -10288,8 +10288,11 @@ Grindstone|Judge Promo|104|R|{1}|Artifact|||{3}, {tap}: Target player puts the t
|
|||
Command Beacon|Judge Promo|105|R||Land|||{tap}: Add {C} to your mana pool.${tap}, Sacrifice Command Beacon: Put your commander into your hand from the command zone.|
|
||||
Defense of the Heart|Judge Promo|106|R|{3}{G}|Enchantment|||At the beginning of your upkeep, if an opponent controls three or more creatures, sacrifice Defense of the Heart, search your library for up to two creature cards, and put those cards onto the battlefield. Then shuffle your library.|
|
||||
Zur the Enchanter|Judge Promo|107|R|{1}{W}{U}{B}|Legendary Creature - Human Wizard|1|4|Flying$Whenever Zur the Enchanter attacks, you may search your library for an enchantment card with converted mana cost 3 or less and put it onto the battlefield. If you do, shuffle your library.|
|
||||
Mystic Confluence|Judge Promo|108|Special{3}{U}{U}|Instant|||Choose three. You may choose the same mode more than once.$<24> Counter target spell unless its controller pays {3}.$<24> Return target creature to its owner's hand.$<24> Draw a card.|
|
||||
Mystic Confluence|Judge Promo|108|Special|{3}{U}{U}|Instant|||Choose three. You may choose the same mode more than once.$<24> Counter target spell unless its controller pays {3}.$<24> Return target creature to its owner's hand.$<24> Draw a card.|
|
||||
Imperial Seal|Judge Promo|109|Special|{B}|Sorcery|||Search your library for a card, then shuffle your library and put that card on top of it. You lose 2 life.|
|
||||
Avacyn, Angel of Hope|Judge Promo|110|Special|{5}{W}{W}{W}|Legendary Creature - Angel|8|8|Flying, vigilance, indestructible$Other permanents you control have indestructible.|
|
||||
Gaddock Teeg|Judge Promo|112|Special|{G}{W}|Legendary Creature - Kithkin Advisor|2|2|Noncreature spells with converted mana cost 4 or greater can't be cast.$Noncreature spells with {X} in their mana costs can't be cast.|
|
||||
Homeward Path|Judge Promo|113|Special||Land|||{T}: Add {C} to your mana pool.${T}: Each player gains control of all creatures he or she owns.|
|
||||
Ancestor's Chosen|Judgment|1|U|{5}{W}{W}|Creature - Human Cleric|4|4|First strike <i>(This creature deals combat damage before creatures without first strike.)</i>$When Ancestor's Chosen enters the battlefield, you gain 1 life for each card in your graveyard.|
|
||||
Funeral Pyre|Judgment|10|C|{W}|Instant|||Exile target card from a graveyard. Its owner puts a 1/1 white Spirit creature token with flying onto the battlefield.|
|
||||
Spellgorger Barbarian|Judgment|100|C|{3}{R}|Creature - Human Nightmare Barbarian|3|1|When Spellgorger Barbarian enters the battlefield, discard a card at random.$When Spellgorger Barbarian leaves the battlefield, draw a card.|
|
||||
|
@ -28858,6 +28861,16 @@ Emrakul, the Aeons Torn|Media Inserts|163|M|{15}|Legendary Creature - Eldrazi|15
|
|||
Scrap Trawler|Media Inserts|164|R|{3}|Artifact Creature - Construct|3|2|Whenever Scrap Trawler or another artifact you control is put into a graveyard from the battlefield, return to your hand target artifact card in your graveyard with lesser converted mana cost.|
|
||||
Archfiend of Ifnir|Media Inserts|165|R|{3}{B}{B}|Creature - Demon|5|4|Flying$Whenever you cycle or discard another card, put a -1/-1 counter on each creature your opponents control.$Cycling {2}|
|
||||
Wildfire Eternal|Media Inserts|166|R|{3}{R}|Creature - Zombie Jackal Cleric|1|4|Afflict 4$Whenever Wildfire Eternal attacks and isn't blocked, you may cast an instant or sorcery card from your hand without paying its mana cost.|
|
||||
Canopy Vista|Media Inserts|167|R||Land - Forest Plains|||<i>({T}: Add {G} or {W} to your mana pool.)</i>$Canopy Vista enters the battlefield tapped unless you control two or more basic lands.|
|
||||
Cinder Glade|Media Inserts|168|R||Land - Moutain Forest|||<i>({T}: Add {R} or {G} to your mana pool.)</i>$Cinder Glade enters the battlefield tapped unless you control two or more basic lands.|
|
||||
Prairie Stream|Media Inserts|169|R||Land - Plains Island|||<i>({T}: Add {W} or {U} to your mana pool.)</i>$Prairie Stream enters the battlefield tapped unless you control two or more basic lands.|
|
||||
Smoldering Marsh|Media Inserts|170|R||Land - Swamp Mountain|||<i>({T}: Add {B} or {R} to your mana pool.)</i>$Smoldering Marsh enters the battlefield tapped unless you control two or more basic lands.|
|
||||
Sunken Hollow|Media Inserts|171|R||Land - Island Swamp|||<i>({T}: Add {U} or {B} to your mana pool.)</i>$Sunken Hollow enters the battlefield tapped unless you control two or more basic lands.|
|
||||
Gideon, Ally of Zendikar|Media Inserts|172|M|{2}{W}{W}|Planeswalker - Gideon|||+1: Until end of turn, Gideon, Ally of Zendikar becomes a 5/5 Human Soldier Ally creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.$0: Create a 2/2 white Knight Ally creature token.$-4: You get an emblem with "Creatures you control get +1/+1."|
|
||||
Jace, Unraveler of Secrets|Media Inserts|173|M|{3}{U}{U}|Planeswalker - Jace|||+1: Scry 1, then draw a card.$-2: Return target creature to its owner's hand.$-8: You get an emblem with "Whenever an opponent casts his or her first spell each turn, counter that spell."|
|
||||
Liliana, the Last Hope|Media Inserts|174|M|{1}{B}{B}|Planeswalker - Liliana|||+1: Up to one target creature gets -2/-1 until your next turn.$-2: Put the top two cards of your library into your graveyard, then you may return a creature card from your graveyard to your hand.$-7: You get an emblem with "At the beginning of your end step, create X 2/2 black Zombie creature tokens, where X is two plus the number of Zombies you control."|
|
||||
Chandra, Flamecaller|Media Inserts|175|M|{4}{R}{R}|Planeswalker - Chandra|||+1: Create two 3/1 red Elemental creature tokens with haste. Exile them at the beginning of the next end step.$0: Discard all the cards in your hand, then draw that many cards plus one.$-X: Chandra, Flamecaller deals X damage to each creature.|
|
||||
Nissa, Voice of Zendikar|Media Inserts|176|M|{1}{G}{G}|Planeswalker - Nissa|||+1: Create a 0/1 green Plant creature token.$-2: Put a +1/+1 counter on each creature you control.$-7: You gain X life and draw X cards, where X is the number of lands you control.|
|
||||
Kytheon, Hero of Akros|Media Inserts|994|Special|{W}|Legendary Creature - Human Soldier|2|1|At end of combat, if Kytheon, Hero of Akros and at least two other creatures attacked this combat, exile Kytheon, then return him to the battlefield transformed under his owner's control.${2}{W}: Kytheon gains indestructible until end of turn.|
|
||||
Gideon, Battle-Forged|Media Inserts|994|Special||Planeswalker - Gideon|3|+2: Up to one target creature an opponent controls attacks Gideon, Battle-Forged during its controller's next turn if able.$+1: Until your next turn, target creature gains indestructible. Untap that creature.$0: Until end of turn, Gideon, Battle-Forged becomes a 4/4 Human Soldier creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.|
|
||||
Jace, Vryn's Prodigy|Media Inserts|995|Special|{1}{U}|Legendary Creature - Human Wizard|0|2|{T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. |
|
||||
|
@ -30044,19 +30057,29 @@ Chain Lightning|Masterpiece Series Amonkhet|26|Special|{R}|Sorcery|||Chain Light
|
|||
Hazoret the Fervent|Masterpiece Series Amonkhet|27|Special|{3}{R}|Legendary Creature - God|5|4|Indestructible, haste$Hazoret the Fervent can't attack or block unless you have one or fewer cards in hand.${2}{R}, Discard a card: Hazoret deals 2 damage to each opponent.|
|
||||
Maelstrom Pulse|Masterpiece Series Amonkhet|29|Special|{1}{B}{G}|Sorcery|||Destroy target nonland permanent and all other permanents with the same name as that permanent.|
|
||||
Vindicate|Masterpiece Series Amonkhet|30|Special|{1}{W}{B}|Sorcery|||Destroy target permanent.|
|
||||
Armageddon|Masterpiece Series Amonkhet|31|Special|{3}{W}|Sorcery|||Destroy all lands.|
|
||||
Capsize|Masterpiece Series Amonkhet|32|Special|{1}{U}{U}|Instant|||Buyback {3}$Return target permanent to its owner's hand.|
|
||||
Forbid|Masterpiece Series Amonkhet|33|Special|{1}{U}{U}|Instant|||Buyback — Discard two cards.$Counter target spell.|
|
||||
Omniscience|Masterpiece Series Amonkhet|34|Special|{7}{U}{U}{U}|Enchantment|||You may cast spells from your hand without paying their mana costs.|
|
||||
Opposition|Masterpiece Series Amonkhet|35|Special|{2}{U}{U}|Enchantment|||Tap an untapped creature you control: Tap target artifact, creature, or land.|
|
||||
Sunder|Masterpiece Series Amonkhet|36|Special|{3}{U}{U}|Instant|||Return all lands to their owner's hands.|
|
||||
Threads of Disloyalty|Masterpiece Series Amonkhet|37|Special|Enchantment - Aura|||Enchant creature with converted mana cost 2 or less$You control enchanted creature.|
|
||||
Avatar of Woe|Masterpiece Series Amonkhet|38|Special|{6}{B}{B}|Creature - Avatar|6|5|If there are ten or more creature cards total in all graveyards, Avatar of Woe costs {6} less to cast.$Fear${T}: Destroy target creature. It can't be regenerated.|
|
||||
Damnation|Masterpiece Series Amonkhet|39|Special|{2}{B}{B}|Sorcery|||Destroy all creatures. They can't be regenerated.|
|
||||
Desolation Angel|Masterpiece Series Amonkhet|40|Special|{3}{B}{B}|Creature - Angel|5|4|Kicker {W}{W}$Flying$When Desolation Angel enters the battlefield, destroy all lands you control. If it was kicked, destroy all lands instead.|
|
||||
Diabolic Edict|Masterpiece Series Amonkhet|41|Special|{1}{B}|Instant|||Target player sacrifices a creature.|
|
||||
Doomsday|Masterpiece Series Amonkhet|42|Special|{B}{B}{B}|Sorcery|||Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up.|
|
||||
No Mercy|Masterpiece Series Amonkhet|43|Special|{2}{B}{B}|Enchantment|||Whenever a creature deals damage to you, destroy it.|
|
||||
Slaughter Pact|Masterpiece Series Amonkhet|44|Special|{0}|Instant|||Destroy target nonblack creature.$At the beginning of your next upkeep, pay {2}{B}. If you don't, you lose the game.|
|
||||
Thoughtseize|Masterpiece Series Amonkhet|45|Special|{B}|Sorcery|||Target player reveals his or her hand. You choose a nonland card from it. That player discards that card. You lose 2 life.|
|
||||
Blood Moon|Masterpiece Series Amonkhet|46|Special|{2}{R}|Enchantment|||Nonbasic lands are mountains.|
|
||||
Boil|Masterpiece Series Amonkhet|47|Special|{3}{R}|Instant|||Destroy all islands.|
|
||||
Shatterstorm|Masterpiece Series Amonkhet|48|Special|{2}{R}{R}|Sorcery|||Destroy all artifacts. They can't be regenerated.|
|
||||
Through the Breach|Masterpiece Series Amonkhet|49|Special|{4}{R}|Instant - Arcane|||You may put a creature card from your hand onto the battlefield. That creature gains haste. Sacrifice that creature at the beginning of the next end step.$Splice onto arcane {2}{R}{R}|
|
||||
Choke|Masterpiece Series Amonkhet|50|Special|{2}{G}|Enchantment|||Islands don't untap during their controllers' untap steps.|
|
||||
The Locust God|Masterpiece Series Amonkhet|51|Special|{4}{U}{R}|Legendary Creature - God|4|4|Flying$Whenever you draw a card, create a 1/1 blue and red Insect creature token with flying and haste.${2}{U}{R}: Draw a card, then discard a card.$When The Locust God dies, return it to its owner's hand at the beginning of the next end step.|
|
||||
Lord of Extinction|Masterpiece Series Amonkhet|52|Special|{3}{B}{G}|Creature - Elemental|0|0|Lord of Extinction's power and toughness are each equal to the number of cards in all graveyard.|
|
||||
The Scarab God|Masterpiece Series Amonkhet|53|Special|{3}{U}{B}|Legendary Creature - God|5|5|At the beginning of your upkeep, each opponent loses X life and you scry X, where X is the number of Zombies you control.${2}{U}{B}: Exile target creature card from a graveyard. Create a token that's a copy of it, except it's a 4/4 black Zombie.$When The Scarab God dies, return it to its owner's hand at the beginning of the next end step.|
|
||||
The Scorpion God|Masterpiece Series Amonkhet|54|Special|{3}{B}{R}|Legendary Creature - God|6|5|Whenever a creature with a -1/-1 counter on it dies, draw a card.${1}{B}{R}: Put a -1/-1 counter on another target creature.$When The Scorpion God dies, return it to its owner's hand at the beginning of the next end step.|
|
||||
Duelist's Heritage|Commander 2016|1|R|{2}{W}|Enchantment|||Whenever one or more creatures attack, you may have target attacking creature gain double strike until end of turn.|
|
||||
Entrapment Maneuver|Commander 2016|2|R|{3}{W}|Instant|||Target player sacrifices an attacking creature. You create X 1/1 white Soldier creature tokens, where X is that creature's toughness.|
|
||||
|
@ -31499,6 +31522,162 @@ Forest|Commander Anthology|317|L||Basic Land - Forest|||{T}: Add {G} to your man
|
|||
Forest|Commander Anthology|318|L||Basic Land - Forest|||{T}: Add {G} to your mana pool.|
|
||||
Forest|Commander Anthology|319|L||Basic Land - Forest|||{T}: Add {G} to your mana pool.|
|
||||
Forest|Commander Anthology|320|L||Basic Land - Forest|||{T}: Add {G} to your mana pool.|
|
||||
Armored Griffin|Planechase Anthology|1|U|{3}{W}|Creature - Griffin|2|3|Flying, vigilance|
|
||||
Auramancer|Planechase Anthology|2|C|{2}{W}|Creautre - Human Wizard|2|2|When Auramancer enters the battlefield, you may return target enchantment card from your graveyard to your hand.|
|
||||
Auratouched Mage|Planechase Anthology|3|U|{5}{W}|Creature - Human Wizard|3|3|When Auratouched Mage enters the battlefield, search your library for an Aura card that could enchant it. If Auratouched Mage is still on the battlefield, put that Aura card onto the battlefield attached to it. Otherwise, reveal the Aura card and put it into your hand. Then shuffle your library.|
|
||||
Cage of Hands|Planechase Anthology|4|C|{2}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature can't attack or block.${1}{W}: Return Cage of Hands to its owner's hand.|
|
||||
Celestial Ancient|Planechase Anthology|5|R|{3}{W}{W}|Creature - Elemental|3|3|Flying$Whenever you cast an enchantment spell, put a +1/+1 counter on each creature you control.|
|
||||
Felidar Umbra|Planechase Anthology|6|U|{1}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature has lifelink.${1}{W}: Attach Felidar Umbra to target creature you control.|
|
||||
Ghostly Prison|Planechase Anthology|7|U|{2}{W}|Enchantmen|||Creatures can't attack you unless their controller pays {2} for each creature he or she controls that's attacking you.|
|
||||
Hyena Umbra|Planechase Anthology|8|C|{W}|Enchantment|||Enchant creature$Enchanted creature gets +1/+1 and has first strike.$Totem armor|
|
||||
Kor Spiritdancer|Planechase Anthology|9|R|{1}{W}|Creature - Kor Wizard|0|2|Kor Spiritdancer gets +2/+2 for each Aura attached to it.$Whenever you cast an Aura spell, you may draw a card.|
|
||||
Mammoth Umbra|Planechase Anthology|10|U|{4}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +3/+3 and has vigilance.$Totem armor|
|
||||
Sigil of the Empty Throne|Planechase Anthology|11|R|{3}{W}{W}|Enchantment|||Whenever you cast an enchantment spell, create a 4/4 white Angel creature token with flying.|
|
||||
Spirit Mantle|Planechase Anthology|12|U||{1}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +1/+1 and has protection from creatures.|
|
||||
Three Dreams|Planechase Anthology|13|R|{4}{W}|Sorcery|||Search your library for up to three Aura cards with different names, reveal them, and put them into your hand. Then shuffle your library.|
|
||||
Augury Owl|Planechase Anthology|14|C|{1}{U}|Creature - Bird|1|1|Flying$When Augury Owl enters the battlefield, scry 3.|
|
||||
Cancel|Planechase Anthology|15|C|{1}{U}{U}|Instant|||Counter target spell.|
|
||||
Concentrate|Planechase Anthology|16|U|{2}{U}{U}|Sorcery|||Draw three cards.|
|
||||
Guard Gomazoa|Planechase Anthology|17|U|{2}{U}|Creature - Jellyfish|1|3|Defender, flying$Prevent all combat damage that would be dealt to Guard Gomazoa.|
|
||||
Higure, the Still Wind|Planechase Anthology|18|R|{3}{U}{U}|Legendary Creature - Human Ninja|3|4|Ninjutsi {2}{U}{U}$Whenever Higure, the Still Wind deals combat damage to a player, you may search your library for a Ninja card, reveal it, and put it into your hand. If you do, shuffle your library.${2}: Target Ninja creature can't be blocked this turn.|
|
||||
Illusory Angel|Planechase Anthology|19|U|{2}{U}|Creature - Angel|4|4|Flying$Cast Illusory Angel only if you've cast another spell this turn.|
|
||||
Mistblade Shinobi|Planechase Anthology|20|C|{2}{U}|Creature - Human Ninja|1|1|Ninjutsu {U}$Whenever Mistblade Shinobi deals combat damage to a player, you may return target creature that player controls to its owner's hand.|
|
||||
Ninja of the Deep Hours|Planechase Anthology|21|C|{3}{U}|Creature - Human Ninja|2|2|Ninjutsu {1}{U}$Whenever Ninja of the Deep Hours deals combat damage to a player, you mya draw a card.|
|
||||
Peregrine Drake|Planechase Anthology|22|U|{4}{U}|Creature - Drake|2|3|Flying$When Peregrine Drake enters the battlefield, untap up to five lands.|
|
||||
Primal Plasma|Planechase Anthology|23|C|{3}{U}|Creature - Elemental Shapeshifter|0|0|As Primal Plasma enters the battlefield, it becomes your choice of a 3/3 creature, a 2/2 creature with flying, or a 1/6 creature with defender.|
|
||||
Sakashima's Student|Planechase Anthology|24|R|{2}{U}{U}|Creature - Human Ninja|0|0|Ninjutsu {1}{U}$You may have Sakashima's Student enters the battlefield as a copy of any creature on the battlefield, except it's a Ninja in addition to its other creature types.|
|
||||
See Beyond|Planechase Anthology|25|C|{1}{U}|Sorcery|||Draw two cards, then shuffle a card from your hand into your library.|
|
||||
Sunken Hope|Planechase Anthology|26|R|{3}{U}{U}|Enchantment|||At the beginning of each player's upkeep, that player returns a creature he or she controls to its owner's hand.|
|
||||
Walker of Secret Ways|Planechase Anthology|27|U|{2}{U}|Creature - Human Ninja|1|2|Ninjutsu {1}{U}$Whenever Walker of Secret Ways deals combat damage to a player, look at that player's hand.${1}{U}: Return target Ninja you control to its owner's hand. Activate this ability only during your turn.|
|
||||
Wall of Frost|Planechase Anthology|28|U|{1}{U}{U}|Creature - Wall|0|7|Defender$Whenever Wall of Frost blocks a creature, that creature doesn't untap during its controller's next untap step.|
|
||||
Whirlpool Warrior|Planechase Anthology|29|R|{2}{U}|Creature - Merfolk Warrior|2|2|When Whirlpool Warrior enters the battlefield, shuffle the cards from your hand into your library, then draw that many cards.${R}, Sacrifice Whirlpool Warrior: Each player shuffles the cards from his or her hand into his or her library, then draws that many cards.|
|
||||
Assassinate|Planechase Anthology|30|C|{2}{B}|Sorcery|||Destroy target tapped creature.|
|
||||
Cadaver Imp|Planechase Anthology|31|C|{1}{B}{B}|Creature - Imp|1|1|Flying$When Cadaver Imp enters the battlefield, you may return target creature card from your graveyard to your hand.|
|
||||
Dark Hatchling|Planechase Anthology|32|R|{4}{B}{B}|Creature - Horror|3|3|Flying$When Dark Hatchling enters the battlefield, destroy target nonblack creature. It can't be regenerated.|
|
||||
Ink-Eyes, Servant of Oni|Planechase Anthology|33|R|{4}{B}{B}|Legendary Creature - Rat Ninja|5|4|Ninjutsu {3}{B}{B}$Whenever Ink-Eyes, Servant of Oni deals combat damage to a player, you may put target creature card from that player's graveyard onto the battlefield under your control.${1}{B}: Regenerate Ink-Eyes.|
|
||||
Liliana's Specter|Planechase Anthology|34|C|{1}{B}{B}|Creature - Specter|2|1|Flying$When Liliana's Specter enters the battlefield, each opponent discards a card.|
|
||||
Okiba-Gang Shinobi|Planechase Anthology|35|C|{3}{B}{B}|Creature - Rat Ninja|3|2|Ninjutsu {3}{B}$Whenever Okiba-Gang Shinobi deals combat damage to a player, that player discards two cards.|
|
||||
Skullsnatcher|Planechase Anthology|36|C|{1}{B}|Creature - Rat Ninja|2|1|Ninjutsu {B}$Whenever Skullsnatcher deals combat damage to a player, exile up to two target cards from that player's graveyard.|
|
||||
Throat Slitter|Planechase Anthology|37|U|{4}{B}|Creature - Rat Ninja|2|2|Ninjutsu {2}{B}$Whenever Throat Slitter deals combat damage to a player, destroy target nonblack creature that player controls.|
|
||||
Tormented Soul|Planechase Anthology|38|C|{B}|Creature - Spirit|1|1|Tormented Soul can't block and can't be blocked.|
|
||||
Arc Trail|Planechase Anthology|39|U|{1}{R}|Sorcery|||Arc Trail deals 2 damage to target creature or player and 1 damage to another target creature or player.|
|
||||
Beetleback Chief|Planechase Anthology|40|U|{2}{R}{R}|Creature - Goblin Warrior|2|2|When Beetleback Chief enters the battlefield, create two 1/1 red Goblin creature tokens.|
|
||||
Erratic Explosion|Planechase Anthology|41|C|{2}{R}|Sorcery|||Choose target creature or player. Reveal cards from the top of your library until you reveal a nonland card. Erratic Explosion deals damage equal to that card's converted mana cost to that creature or player. Put the revealed cards on the bottom of your library in any order.|
|
||||
Fiery Conclusion|Planechase Anthology|42|C|{1}{R}|Instant|||As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.|
|
||||
Fiery Fall|Planechase Anthology|43|C|{5}{R}|Instant|||Fiery Fall deals 5 damage to target creature.$Basic landcycling {1}{R}|
|
||||
Fling|Planechase Anthology|44|C|{1}{R}|Instant|||As an additional cost to cast Fling, sacrifice a creature.$Fling deals damage equal to the sacrificed creature's power to target creature or player.|
|
||||
Hellion Eruption|Planechase Anthology|45|R|{5}{R}|Sorcery|||Sacrifice all creatures you control, then create that many 4/4 red Hellion creature tokens.|
|
||||
Hissing Iguanar|Planechase Anthology|46|C|{2}{R}|Creature - Lizard|3|1|Whenever another creature dies, you may have Hissing Iguanar deal 1 damage to target player.|
|
||||
Mark of Mutiny|Planechase Anthology|47|U|{2}{R}|Sorcery|||Gain control of target creature until end of turn. Put a +1/+1 counter on it and untap it. That creature gains haste until end of turn.|
|
||||
Mass Mutiny|Planechase Anthology|48|R|{3}{R}{R}|Sorcery|||For each opponent, gain control of up to one target creature that player controls until end of turn. Untap those creatures. They gain haste until end of turn.|
|
||||
Mudbutton Torchrunner|Planechase Anthology|49|C|{2}{R}|Creature - Goblin Warrior|1|1|When Mudbutton Torchrunner dies, it deals 3 damage to target creature or player.|
|
||||
Preyseizer Dragon|Planechase Anthology|50|R|{4}{R}{R}|Creature - Dragon|4|4|Flying$Devour 2$Whenever Preyseizer Dragon attacks, it deals damage to target creature or player equal to the number of +1/+1 counters on Preyseizer Dragon.|
|
||||
Rivals' Duel|Planechase Anthology|51|U|{3}{R}|Sorcery|||Choose two target creatures that share no creature types. Those creatures fight each other.|
|
||||
Thorn-Thrash Viashino|Planechase Anthology|52|C|{3}{R}|Creature - Viashino Warrior|2|2|Devour 2${G}: Thorn-Thrash Viashino gains trample until end of turn.|
|
||||
Thunder-Thrash Elder|Planechase Anthology|53|U|{2}{R}|Creature - Viashino Warrior|1|1|Devour 3|
|
||||
Warstorm Surge|Planechase Anthology|54|R|{5}{R}|Enchantment|||Whenever a creature enters the battlefield under your control, it deals damage equal to its power to target creature or player.|
|
||||
Aura Gnarlid|Planechase Anthology|55|C|{2}{G}|Creature - Beast|2|2|Creatures with power less than Aura Gnarlid's power can't block it.$Aura Gnarlid gets +1/+1 for each Aura on the battlefield.|
|
||||
Awakening Zone|Planechase Anthology|56|R|{2}{G}|Enchantment|||At beginning of your upkeep, you may create a 0/1 colorless Eldrazi Spawn creature token with "Sacrifice this creature: Add {C} to your mana pool."|
|
||||
Beast Within|Planechase Anthology|57|U|{2}{G}|Instant|||Destroy target permanent. Its controller creates a 3/3 green Beast creature token.|
|
||||
Boar Umbra|Planechase Anthology|58|U|{2}{G}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +3/+3.$Toten armor|
|
||||
Bramble Elemental|Planechase Anthology|59|C|{3}{G}{G}|Creature - Elemental|4|4|Whenever an Aura becomes attached to Bramble Elemental, create two 1/1 green Saproling creature tokens.|
|
||||
Brindle Shoat|Planechase Anthology|60|U|{1}{G}|Creature - Boar|1|1|When Brindle Shoat dies, create a 3/3 green Boar creature token.|
|
||||
Brutalizer Exarch|Planechase Anthology|61|U|{5}{G}|Creature - Cleric|3|3|When Brutalizer Exarch enters the battlefield, choose one — Search your library for a creature card, reveal it, then shuffle your library and put that card on topo of it; or Put target noncreature permanent on the bottom of its owner's library.|
|
||||
Cultivate|Planechase Anthology|62|C|{2}{G}|Sorcery|||Search your library for up to two basic land cards, reveal those cards, and put one onto the battlefield tapped and the other into your hand. Then shuffle your library.|
|
||||
Dowsing Shaman|Planechase Anthology|63|U|{4}{G}|Creature - Centaur Shaman|3|4|{2}{G}, {T}: Return target enchantment card from your graveyard to your hand.|
|
||||
Dreampod Druid|Planechase Anthology|64|U|{1}{G}|Creature - Human Druid|2|2|At the beginning of each upkeep, if Dreampod Druid is enchanted, create a 1/1 green Saproling creature token.|
|
||||
Gluttonous Slime|Planechase Anthology|65|U|{2}{G}|Creature - Ooze|2|2|Flash$Devour 1|
|
||||
Lumberknot|Planechase Anthology|66|U|{2}{G}{G}|Creature - Treefolk|1|1|Hexproof$Whenever a creature dies, put a +1/+1 counter on Lumberknot.|
|
||||
Mitotic Slime|Planechase Anthology|67|R|{4}{G}|Creature - Ooze|4|4|When Mitotic Slime dies, create two 2/2 green Ooze creature tokens with "When this creature dies, create two 1/1 green Ooze creature tokens."|
|
||||
Mycoloth|Planechase Anthology|68|R|{3}{G}{G}|Creature - Fungus|4|4|Devour 2$At the beginning of your upkeep, create a 1/1 green Saproling creature token for each +1/+1 counter Mycoloth.|
|
||||
Nest Invader|Planechase Anthology|69|C|{1}{G}|Creature - Eldrazi Drone|2|2|When Nest Invader enters the battlefield, create a 0/1 colorless Eldrazi Spawn creature token with "Sacrifice this creature: Add {C} to your mana pool."|
|
||||
Nullmage Advocate|Planechase Anthology|70|C|{2}{G}|Creature - Insect Druid|2|3|{T}: Return two target cards from an opponent's graveyard to his or her hand. Destroy target artifact or enchantment.|
|
||||
Ondu Giant|Planechase Anthology|71|C|{3}{G}|Creature - Giant Druid|2|4|When Ondu Giant enters the battlefield, you may search you library for a basic land card, put it onto the battlefield tapped, then shuffle your library.|
|
||||
Overrun|Planechase Anthology|72|U|{2}{G}{G}{G}|Sorcery|||Creatures you control get +3/+3 and gain trample until end of turn.|
|
||||
Penumbra Spider|Planechase Anthology|73|C|{2}{G}{G}|Creature - Spider|2|4|Reach$When Penumbra Spider dies, create a 2/4 black Spider creature token with reach.|
|
||||
Predatory Urge|Planechase Anthology|74|R|{3}{G}|Enchantment - Aura|||Enchantment - Aura|||Enchant creature$Enchanted creature has "{T}: This creature deals damage equal to its power to target creature. That creature deals damage equal to its power to this creature."|
|
||||
Quiet Disrepair|Planechase Anthology|75|C|{1}{G}|Enchantment - Aura|||Enchant artifact or enchantment$At the beginning of your upkeep, choose one — Destroy enchanted permanent; or You gain 2 life.|
|
||||
Rancor|Planechase Anthology|76|C|{G}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +2/+0 and has trample.$When Rancor is put into a graveyard from the battlefield, return Rancor to its owner's hand.|
|
||||
Silhana Ledgewalker|Planechase Anthology|77|C|{1}{G}|Creature - Elf Rogue|1|1|Hexproof$Silhana Ledgewalker can't be blocked except by creature with flying.|
|
||||
Snake Umbra|Planechase Anthology|78|C|{2}{G}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +1/+1 and has "Whenever this creature deals damage to an opponent, you may draw a card."$Totem armor|
|
||||
Tukatongue Thallid|Planechase Anthology|79|C|{G}|Creature - Fungus|1|1|When Tukatongue Thallid dies, create a 1/1 green Saproling creature token.|
|
||||
Viridian Emissary|Planechase Anthology|80|C|{1}{G}|Creature - Elf Scout|2|1|When Viridian Emissary dies, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.|
|
||||
Wall of Blossoms|Planechase Anthology|81|U|{1}{G}|Creature - Plant Wall|0|4|Defender$When Wall of Blossoms enters the battlefield, draw a card.|
|
||||
Baleful Strix|Planechase Anthology|82|U|{U}{B}|Artifact Creature - Bird|1|1|Flying, deathtouch$When Baleful Strix enters the battlefield, draw a card.|
|
||||
Bituminous Blast|Planechase Anthology|83|U|{3}{B}{R}|Instant|||Cascade$Bituminous Blast deals 4 damage to target creature.|
|
||||
Bloodbraid Elf|Planechase Anthology|84|U|{2}{R}{G}|Creature - Elf Berserker|3|2|Haste$Cascade|
|
||||
Deny Reality|Planechase Anthology|85|C|{3}{U}{B}|Sorcery|||Cascade$Return target permanent to its owner's hand.|
|
||||
Dimir Infiltrator|Planechase Anthology|86|C|{U}{B}|Creature - Spirit|1|3|Dimir Infiltrator can't be blocked.$Transmute {1}{U}{B}|
|
||||
Dragonlair Spider|Planechase Anthology|87|R|{2}{R}{R}{G}{G}|Creature - Spider|5|6|Reach$Whenever an opponent casts a spell, create a 1/1 green Insect creature token.|
|
||||
Elderwood Scion|Planechase Anthology|88|R|{3}{G}{W}|Creature - Elemental|4|4|Trample, lifelink$Spells you cast that target Elderwood Scion cost {2} less to cast.$Spells your opponents cast that target Elderwood Scion cost {2} more to cast.|
|
||||
Enigma Sphinx|Planechase Anthology|89|R|{4}{W}{U}{B}|Artifact Creature - Sphinx|5|4|Flying$When Engima Sphinx is put into your graveyard from the battlefield, put it into your library third from the top.$Cascade|
|
||||
Enlisted Wurm|Planechase Anthology|90|U|{4}{G}{W}|Creature - Wurm|5|5|Cascade|
|
||||
Etherium-Horn Sorcerer|Planechase Anthology|91|R|{4}{U}{R}|Artifact Creature - Minotaur Wizard|3|6|{1}{U}{R}: Return Etherium-Horn Sorcerer to its owner's hand.$Cascade|
|
||||
Fires of Yavimaya|Planechase Anthology|92|U|{1}{R}{G}|Enchantment|||Creatures you control have haste.$Sacrifice Fires of Yavimaya: Target creature gets +2/+2 until end of turn.|
|
||||
Fusion Elemental|Planechase Anthology|93|U|{W}{U}{B}{R}{G}|Creature - Elemental|8|8||
|
||||
Glen Elendra Liege|Planechase Anthology|94|R|{1}{UB}{UB}{UB}|Creature - Faerie Knight|2|3|Flying$Other blue creatures you control get +1/+1.$Other black creatures you control get +1/+1.|
|
||||
Hellkite Hatchling|Planechase Anthology|95|U|{2}{R}{G}|Creature - Dragon|2|2|Devour 1$Hellkite Hatchling has flying and trample if it devoured a creature.|
|
||||
Indrik Umbra|Planechase Anthology|96|R|{4}{G}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +4/+4 and has first strike, and all creatures able to block it do so.$Totem armor|
|
||||
Inkfathom Witch|Planechase Anthology|97|U|{1}{UB}|Creature - Merfolk Wizard|1|1|Fear${2}{U}{B}: Each unblocked creature has base power and toughness 4/1 until end of turn.|
|
||||
Kathari Remnant|Planechase Anthology|98|U|{2}{U}{B}|Creature - Bird Skeleton|0|1|Flying${B}: Regenerate Kathari Remnant.$Cascade|
|
||||
Krond the Dawn-Clad|Planechase Anthology|99|M|{G}{G}{G}{W}{W}{W}|Legendary Creature - Archon|6|6|Flying, vigilance$Whenever Krond the Dawn-Clad attacks, if it's enchanted, exile target permanent.|
|
||||
Last Stand|Planechase Anthology|100|R|{W}{U}{B}{R}{G}|Sorcery|||Target opponent loses 2 life for each Swamp you control. Last Stand deals damage to target creature equal to the number of Mountains you control. Create a 1/1 green Saproling creature token for each Forest you control. You gain 2 life for each Plains you control. Draw a card for each Island you control, then discard that many cards.|
|
||||
Maelstrom Wanderer|Planechase Anthology|101|M|{5}{U}{R}{G}|Legendary Creature - Elemental|7|5|Creatures you control have haste.$Cascade, cascade|
|
||||
Noggle Ransacker|Planechase Anthology|102|U|{2}{UR}|Creature - Noggle Rogue|2|1|When Noggle Ransacker enters the battlefield, each player draws two cards, then discards a card at random.|
|
||||
Pollenbright Wings|Planechase Anthology|103|U|{4}{G}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature has flying.$Whenever enchanted creature deals combat damage to a player, create that many 1/1 green Saproling creature tokens.|
|
||||
Shardless Agent|Planechase Anthology|104|U|{1}{G}{U}|Artifact Creature - Human Rogue|2|2|Cascade|
|
||||
Silent-Blade Oni|Planechase Anthology|105|R|{3}{U}{U}{B}{B}|Creature - Demon Ninja|6|5|Ninjutsu {4}{U}{B}$Whenever Silent-Blade Oni deals combat damage to a player, look at the player's hand. You may cast a nonland card in it without paying that card's mana cost.|
|
||||
Thromok the Insatiable|Planechase Anthology|106|M|{3}{R}{G}|Legendary Creature - Hellion|0|0|Devour X, where X is the number of creatures devoured this way|
|
||||
Vela the Night-Clad|Planechase Anthology|107|M|{4}{U}{B}|Legendary Creature - Human Wizard|4|4|Intimidate$Other creatures you control have intimidate.$Whenever Vela the Night-Clad or another creature you control leaves the battlefield, each opponent loses 1 life.|
|
||||
Armillary Sphere|Planechase Anthology|108|C|{2}|Artifact|||{2}, {T}, Sacrifce Armillary Sphere: Search your library for up to two basic land cards, reveal them, and put them into your hand. Then shuffle your library.|
|
||||
Farsight Mask|Planechase Anthology|109|U|{5}|Artifact|||Whenever a source an opponent controls deals damage to you, if Farsight Mask is untapped, you may draw a card.|
|
||||
Flayer Husk|Planechase Anthology|110|C|{1}|Artifact - Equipment|||Living weapon$Equipped creature gets +1/+1.$Equip {2}|
|
||||
Fractured Powerstone|Planechase Anthology|111|C|{2}|Artifact|||{T}: Add {C} to your mana pool.${T}: Roll the planar die. Activate this ability only any time you could cast a sorcery.|
|
||||
Quietus SPike|Planechase Anthology|112|R|{3}|Artifact - Equipment|||Equipped creature has deathtouch.$Whenever equipped creature deals combat damage to a player, that player loses half his or her life, rounded up.$Equip {3}|
|
||||
Sai of the Shinobi|Planechase Anthology|113|U|{1}|Artifact - Equipment|||Equipped creature gets +1/+1.$Whenever a creature enters the battlefield under your control, you may attach Sai of the Shinobi to it.$Equip {2}|
|
||||
Thran Golem|Planechase Anthology|114|U|{5}|Artifact Creature - Golem|3|3|As long as Thran Golem is enchanted, it gets +2/+2 and has flying, first strike, and trample.|
|
||||
Whispersilk Cloak|Planechase Anthology|115|U|{3}|Artifact - Equipment|||Equipped creature can't be blocked and has shroud.$Equip {2}|
|
||||
Dimir Aqueduct|Planechase Anthology|116|C||Land|||Dimir Aqueduct enters the battlefield tapped.$When Dimir Aqueduct enters the battlefield, return a land you control to its owner's hand.${T}: Add {U}{B} to your mana pool.|
|
||||
Exotic Orchard|Planechase Anthology|117|R||Land|||{T}: Add to your mana pool one mana of any color that a land an opponent controls could product.|
|
||||
Graypelt Refuge|Planechase Anthology|118|U||Land|||Graypelt Refuge enters the battlefield tapped.$When Graypelt Refuge enters the battlefield, you gain 1 life.${T}: Add {G} or {W} to your mana pool.|
|
||||
Gruul Turf|Planechase Anthology|119|C||Land|||Gruul Turf enters the battlefield tapped.$When Gruul Turf enters the battlefield, return a land you control to its owner's hand.${T}: Add {R}{G} to your mana pool.|
|
||||
Jwar Isle Refuge|Planechase Anthology|120|U||Land|||Jwar Isle Refuge enters the battlefield tapped.$When Jwar Isle Refuge enters the battlefield, you gain 1 life.${T}: Add {U} or {B} to your mana pool.|
|
||||
Kazandu Refuge|Planechase Anthology|121|U||Land|||Kazandu Refuge enters the battlefield tapped.$When Kazandu Refuge enters the battlefield, you gain 1 life.${T}: Add {R} or {G} to your mana pool.|
|
||||
Khalni Garden|Planechase Anthology|122|C||Land|||Khalni Garden enters the battlefield tapped.$When Khalni Garden enters the battlefield, create a 0/1 green Plant creature token.${T}: Add {G} to your mana pool.|
|
||||
Krosan Verge|Planechase Anthology|123|U||Land|||Krosan Verge enters the battlefield tapped.${T}: Add {C} to your mana pool.${2}, {T}, Sacrifice Krosan Verge: Search your library for a Forest card and a Plains card and put them onto the battlefield tapped. Then shuffle your library.|
|
||||
Rupture Spire|Planechase Anthology|124|C||Land|||Rupture Spire enters the battlefield tapped.$When Rupture Spire enters the battlefield, sacrifice it unless you pay {1}.${T}: Add one mana of any color to your mana pool.|
|
||||
Selesnya Sanctuary|Planechase Anthology|125|C||Land|||Selesnya Sanctuary enters the battlefield tapped.$When Selesnya Sanctuary enters the battlefield, return a land you control to its owner's hand.${T}: Add {G}{W} to your mana pool.|
|
||||
Shimmering Grotto|Planechase Anthology|126|C||Land|||{T}: Add {C} to your mana pool.${1}, {T}: Add one mana of any color to your mana pool.|
|
||||
Skarrg, the Rage Pits|Planechase Anthology|127|U||Land|||{T}: Add {C} to your mana pool.${R}{G}, {T}: Target creature gets +1/+1 and gains trample until end of turn.|
|
||||
Tainted Isle|Planechase Anthology|128|U||Land|||{T}: Add {C} to your mana pool.${T}: Add {U} or {B} to your mana pool. Activate this ability only if you control a Swamp.|
|
||||
Terramorphic Expanse|Planechase Anthology|129|C||Land|||{T}, Sacrifice Terramophic Expanse: Search your library for a basic land card and put it onto the battlefield tapped. Then shuffle your library.|
|
||||
Vitu-Ghazi, the City-Tree|Planechase Anthology|130|U||Land|||{T}: Add {C} to your mana pool.${2}{G}{W}, {T}: Create a 1/1 green Saproling creature token.|
|
||||
Vivid Creek|Planechase Anthology|131|U||Land|||Vivid Creek enters the battlefield tapped with two charge counters on it.${T}: Add {U} to your mana pool.${T}, Remove a charge counter from Vivid Creek: Add one mana of any color to your mana pool.|
|
||||
Plains|Planechase Anthology|132|L||Basic Land - Plains||||
|
||||
Plains|Planechase Anthology|133|L||Basic Land - Plains||||
|
||||
Plains|Planechase Anthology|134|L||Basic Land - Plains||||
|
||||
Plains|Planechase Anthology|135|L||Basic Land - Plains||||
|
||||
Plains|Planechase Anthology|136|L||Basic Land - Plains||||
|
||||
Island|Planechase Anthology|137|L||Basic Land - Island||||
|
||||
Island|Planechase Anthology|138|L||Basic Land - Island||||
|
||||
Island|Planechase Anthology|139|L||Basic Land - Island||||
|
||||
Island|Planechase Anthology|140|L||Basic Land - Island||||
|
||||
Island|Planechase Anthology|141|L||Basic Land - Island||||
|
||||
Swamp|Planechase Anthology|142|L||Basic Land - Swamp||||
|
||||
Swamp|Planechase Anthology|143|L||Basic Land - Swamp||||
|
||||
Swamp|Planechase Anthology|144|L||Basic Land - Swamp||||
|
||||
Swamp|Planechase Anthology|145|L||Basic Land - Swamp||||
|
||||
Swamp|Planechase Anthology|146|L||Basic Land - Swamp||||
|
||||
Mountain|Planechase Anthology|147|L||Basic Land - Mountain||||
|
||||
Mountain|Planechase Anthology|148|L||Basic Land - Mountain||||
|
||||
Mountain|Planechase Anthology|149|L||Basic Land - Mountain||||
|
||||
Mountain|Planechase Anthology|150|L||Basic Land - Mountain||||
|
||||
Mountain|Planechase Anthology|151|L||Basic Land - Mountain||||
|
||||
Forest|Planechase Anthology|152|L||Basic Land - Forest||||
|
||||
Forest|Planechase Anthology|153|L||Basic Land - Forest||||
|
||||
Forest|Planechase Anthology|154|L||Basic Land - Forest||||
|
||||
Forest|Planechase Anthology|155|L||Basic Land - Forest||||
|
||||
Forest|Planechase Anthology|156|L||Basic Land - Forest||||
|
||||
The Ur-Dragon|Commander 2017|2|M|{4}{W}{U}{B}{R}{G}|Legendary Creature - Dragon Avatar|10|10|<i>Eminence</i> - As long as The Ur-Dragon is in the command zone or on the battlefield, other Dragon spells you cast cost {1} less to cast.$Flying$Whenever one or more Dragons you control attack, draw that many cards, then you may put a permanent card from your hand onto the battlefield|
|
||||
O-Kagachi, Vengeful Kami|Commander 2017|3|M|{1}{W}{U}{B}{R}{G}|Legendary Creature - Dragon Spirit|6|6|Flying, Trample$Whenever O-Kagachi, Vengeful Kami deals combat damage to a player, if that player attacked you during his or her last turn, exile target nonland permanent that player controls|
|
||||
Wasitora, Nekoru Queen|Commander 2017|48|M|{2}{B}{R}{G}|Legendary Creature - Cat Dragon|5|4|Flying, trample$Whenever Wasitora, Nekoru Queen deals combat damage to a player, that player sacrifices a creature. If the player can't, you create a 3/3 black, red, and green Cat Dragon creature token with flying|
|
||||
|
|
Loading…
Reference in a new issue