mirror of
https://github.com/correl/mage.git
synced 2025-01-13 11:01:58 +00:00
commit
ff47290039
9 changed files with 666 additions and 57 deletions
|
@ -157,6 +157,7 @@ class KarnLiberatedEffect extends OneShotEffect {
|
|||
}
|
||||
}
|
||||
game.addDelayedTriggeredAbility(new KarnLiberatedDelayedTriggeredAbility(exileId), source);
|
||||
game.setStartingPlayerId(source.getControllerId());
|
||||
game.start(null);
|
||||
return true;
|
||||
}
|
||||
|
|
127
Mage.Sets/src/mage/cards/s/ScalelordReckoner.java
Normal file
127
Mage.Sets/src/mage/cards/s/ScalelordReckoner.java
Normal file
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
* 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.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.common.FilterNonlandPermanent;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.filter.predicate.permanent.ControllerIdPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public class ScalelordReckoner extends CardImpl {
|
||||
|
||||
public ScalelordReckoner(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{W}{W}");
|
||||
|
||||
this.subtype.add("Dragon");
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Whenever a Dragon you control becomes the target of a spell or ability an opponent controls, destroy target nonland permanent that player controls.
|
||||
this.addAbility(new ScalelardReckonerTriggeredAbility(new DestroyTargetEffect()));
|
||||
}
|
||||
|
||||
public ScalelordReckoner(final ScalelordReckoner card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScalelordReckoner copy() {
|
||||
return new ScalelordReckoner(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ScalelardReckonerTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Dragon creature you control");
|
||||
|
||||
static {
|
||||
filter.add(new SubtypePredicate(SubType.DRAGON));
|
||||
}
|
||||
|
||||
public ScalelardReckonerTriggeredAbility(Effect effect) {
|
||||
super(Zone.BATTLEFIELD, new DestroyTargetEffect(), false);
|
||||
}
|
||||
|
||||
public ScalelardReckonerTriggeredAbility(final ScalelardReckonerTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScalelardReckonerTriggeredAbility copy() {
|
||||
return new ScalelardReckonerTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (game.getOpponents(this.controllerId).contains(event.getPlayerId())) {
|
||||
Permanent creature = game.getPermanent(event.getTargetId());
|
||||
if (creature != null && filter.match(creature, getSourceId(), getControllerId(), game)) {
|
||||
FilterNonlandPermanent filter = new FilterNonlandPermanent("nonland permanent that player controls");
|
||||
filter.add(new ControllerIdPredicate(event.getPlayerId()));
|
||||
// filter.setMessage("nonland permanent controlled by " + game.getPlayer(event.getTargetId()).getLogName());
|
||||
this.getTargets().clear();
|
||||
this.addTarget(new TargetPermanent(filter));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a Dragon you control becomes the target of a spell or ability an opponent controls, destroy target nonland permanent that player controls.";
|
||||
}
|
||||
}
|
180
Mage.Sets/src/mage/cards/t/TaigamSidisisHand.java
Normal file
180
Mage.Sets/src/mage/cards/t/TaigamSidisisHand.java
Normal file
|
@ -0,0 +1,180 @@
|
|||
/*
|
||||
* 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.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.common.ExileFromGraveCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.SkipDrawStepEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
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.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SuperType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetCard;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public class TaigamSidisisHand extends CardImpl {
|
||||
|
||||
public TaigamSidisisHand(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{B}");
|
||||
|
||||
addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add("Human");
|
||||
this.subtype.add("Wizard");
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Skip your draw step.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SkipDrawStepEffect()));
|
||||
|
||||
// At the beginning of your upkeep, look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard.
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TaigamSidisisHandDrawEffect(), TargetController.YOU, false));
|
||||
|
||||
// {B}, {T}, Exile X cards from your graveyard: Target creature gets -X/-X until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TaigamSidisisHandEffect(), new ManaCostsImpl("{B}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(0, Integer.MAX_VALUE, new FilterCard("cards from your graveyard"))));
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public TaigamSidisisHand(final TaigamSidisisHand card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaigamSidisisHand copy() {
|
||||
return new TaigamSidisisHand(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TaigamSidisisHandEffect extends OneShotEffect {
|
||||
|
||||
public TaigamSidisisHandEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "creature gets -X/-X until end of turn";
|
||||
}
|
||||
|
||||
public TaigamSidisisHandEffect(final TaigamSidisisHandEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaigamSidisisHandEffect copy() {
|
||||
return new TaigamSidisisHandEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
Permanent targetCreature = game.getPermanent(getTargetPointer().getFirst(game, source));
|
||||
|
||||
if (targetCreature != null) {
|
||||
int amount = 0;
|
||||
for (Cost cost : source.getCosts()) {
|
||||
if (cost instanceof ExileFromGraveCost) {
|
||||
amount = ((ExileFromGraveCost) cost).getExiledCards().size();
|
||||
ContinuousEffect effect = new BoostTargetEffect(-amount, -amount, Duration.EndOfTurn);
|
||||
effect.setTargetPointer(new FixedTarget(source.getTargets().getFirstTarget()));
|
||||
game.addEffect(effect, source);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class TaigamSidisisHandDrawEffect extends OneShotEffect {
|
||||
|
||||
public TaigamSidisisHandDrawEffect() {
|
||||
super(Outcome.DrawCard);
|
||||
this.staticText = "Look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard";
|
||||
}
|
||||
|
||||
public TaigamSidisisHandDrawEffect(final TaigamSidisisHandDrawEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaigamSidisisHandDrawEffect copy() {
|
||||
return new TaigamSidisisHandDrawEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
|
||||
if (controller != null) {
|
||||
Cards cards = new CardsImpl();
|
||||
cards.addAll(controller.getLibrary().getTopCards(game, 3));
|
||||
if (!cards.isEmpty()) {
|
||||
controller.lookAtCards("Taigam, Sidisi's Hand", cards, game);
|
||||
TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to put in your hand"));
|
||||
if (controller.choose(Outcome.Benefit, cards, target, game)) {
|
||||
Card card = cards.get(target.getFirstTarget(), game);
|
||||
if (card != null) {
|
||||
controller.moveCards(card, Zone.HAND, source, game);
|
||||
cards.remove(card);
|
||||
}
|
||||
}
|
||||
controller.moveCards(cards, Zone.GRAVEYARD, source, game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
139
Mage.Sets/src/mage/cards/t/TeferisProtection.java
Normal file
139
Mage.Sets/src/mage/cards/t/TeferisProtection.java
Normal file
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
* 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.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ExileSpellEffect;
|
||||
import mage.abilities.effects.common.NameACardEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.LifeTotalCantChangeControllerEffect;
|
||||
import mage.abilities.keyword.ProtectionAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.filter.FilterObject;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.NamePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public class TeferisProtection extends CardImpl {
|
||||
|
||||
public TeferisProtection(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{W}");
|
||||
|
||||
// Until your next turn, your life total can't change, and you have protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.)
|
||||
this.getSpellAbility().addEffect(new LifeTotalCantChangeControllerEffect(Duration.UntilYourNextTurn));
|
||||
this.getSpellAbility().addEffect(new TeferisProtectionEffect());
|
||||
this.getSpellAbility().addEffect(new TeferisProtectionPhaseOutEffect());
|
||||
|
||||
// Exile Teferi's Protection.
|
||||
this.getSpellAbility().addEffect(ExileSpellEffect.getInstance());
|
||||
}
|
||||
|
||||
public TeferisProtection(final TeferisProtection card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeferisProtection copy() {
|
||||
return new TeferisProtection(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TeferisProtectionEffect extends OneShotEffect {
|
||||
|
||||
public TeferisProtectionEffect() {
|
||||
super(Outcome.Protect);
|
||||
staticText = "<br/><br/>You have protection from everything<i>(You can't be targeted, dealt damage, or enchanted by anything.)</i>";
|
||||
}
|
||||
|
||||
public TeferisProtectionEffect(final TeferisProtectionEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
String cardName = (String) game.getState().getValue(source.getSourceId().toString() + NameACardEffect.INFO_KEY);
|
||||
if (controller != null) {
|
||||
FilterObject filter = new FilterObject("the name [everything]");
|
||||
filter.add(new NamePredicate("everything"));
|
||||
ContinuousEffect effect = new GainAbilityControllerEffect(new ProtectionAbility(filter), Duration.Custom);
|
||||
game.addEffect(effect, source);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeferisProtectionEffect copy() {
|
||||
return new TeferisProtectionEffect(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TeferisProtectionPhaseOutEffect extends OneShotEffect {
|
||||
|
||||
private FilterControlledPermanent permanentsYouControl = new FilterControlledPermanent("all permanents you control");
|
||||
|
||||
public TeferisProtectionPhaseOutEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.)";
|
||||
}
|
||||
|
||||
public TeferisProtectionPhaseOutEffect(final TeferisProtectionPhaseOutEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeferisProtectionPhaseOutEffect copy() {
|
||||
return new TeferisProtectionPhaseOutEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
for (Permanent permanent : game.getBattlefield().getActivePermanents(permanentsYouControl, controller.getId(), game)) {
|
||||
permanent.phaseOut(game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
113
Mage.Sets/src/mage/cards/t/TraverseTheOutlands.java
Normal file
113
Mage.Sets/src/mage/cards/t/TraverseTheOutlands.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.t;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.CardsImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterLandPermanent;
|
||||
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCardInLibrary;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public class TraverseTheOutlands extends CardImpl {
|
||||
|
||||
public TraverseTheOutlands(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{G}");
|
||||
|
||||
// Search your library for up to X basic land cards, where X is the greatest power among creatures you control. Put those cards onto the battlefield tapped, then shuffle your library.
|
||||
this.getSpellAbility().addEffect(new TraverseTheOutlandsEffect());
|
||||
}
|
||||
|
||||
public TraverseTheOutlands(final TraverseTheOutlands card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TraverseTheOutlands copy() {
|
||||
return new TraverseTheOutlands(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TraverseTheOutlandsEffect extends OneShotEffect {
|
||||
|
||||
public TraverseTheOutlandsEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "Search your library for up to X basic land cards, where X is the greatest power among creatures you control. Put those cards onto the battlefield tapped, then shuffle your library.";
|
||||
}
|
||||
|
||||
public TraverseTheOutlandsEffect(final TraverseTheOutlandsEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TraverseTheOutlandsEffect copy() {
|
||||
return new TraverseTheOutlandsEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller == null) {
|
||||
return false;
|
||||
}
|
||||
FilterLandPermanent filter = new FilterLandPermanent();
|
||||
filter.add(new ControllerPredicate(TargetController.YOU));
|
||||
|
||||
List<Permanent> creatures = game.getBattlefield().getAllActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, controller.getId(), game);
|
||||
int amount = 0;
|
||||
for (Permanent creature : creatures) {
|
||||
int power = creature.getPower().getValue();
|
||||
if (amount < power) {
|
||||
amount = power;
|
||||
}
|
||||
}
|
||||
|
||||
TargetCardInLibrary target = new TargetCardInLibrary(0, amount, StaticFilters.FILTER_BASIC_LAND_CARD);
|
||||
if (controller.searchLibrary(target, game)) {
|
||||
controller.moveCards(new CardsImpl(target.getTargets()).getCards(game), Zone.BATTLEFIELD, source, game, true, false, false, null);
|
||||
}
|
||||
controller.shuffleLibrary(source, game);
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -49,7 +49,11 @@ public class Commander2017 extends ExpansionSet {
|
|||
|
||||
cards.add(new SetCardInfo("O-Kagachi, Vengeful Kami", 45, Rarity.MYTHIC, mage.cards.o.OKagachiVengefulKami.class));
|
||||
cards.add(new SetCardInfo("Ramos, Dragon Engine", 55, Rarity.MYTHIC, mage.cards.r.RamosDragonEngine.class));
|
||||
cards.add(new SetCardInfo("Scalelord Reckoner", 6, Rarity.RARE, mage.cards.s.ScalelordReckoner.class));
|
||||
cards.add(new SetCardInfo("Taigam, Ojutai Master", 46, Rarity.MYTHIC, mage.cards.t.TaigamOjutaiMaster.class));
|
||||
cards.add(new SetCardInfo("Taigam, Sidisi's Hand", 47, Rarity.RARE, mage.cards.t.TaigamSidisisHand.class));
|
||||
cards.add(new SetCardInfo("Teferi's Protection", 8, Rarity.RARE, mage.cards.t.TeferisProtection.class));
|
||||
cards.add(new SetCardInfo("Traverse the Outlands", 34, Rarity.RARE, mage.cards.t.TraverseTheOutlands.class));
|
||||
cards.add(new SetCardInfo("Wasitora, Nekoru Queen", 49, Rarity.MYTHIC, mage.cards.w.WasitoraNekoruQueen.class));
|
||||
|
||||
}
|
||||
|
|
|
@ -442,6 +442,8 @@ public interface Game extends MageItem, Serializable {
|
|||
|
||||
UUID getStartingPlayerId();
|
||||
|
||||
void setStartingPlayerId(UUID startingPlayerId);
|
||||
|
||||
void saveRollBackGameState();
|
||||
|
||||
boolean canRollbackTurns(int turnsToRollback);
|
||||
|
|
|
@ -27,6 +27,10 @@
|
|||
*/
|
||||
package mage.game;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import mage.MageException;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.*;
|
||||
|
@ -92,11 +96,6 @@ import mage.watchers.Watchers;
|
|||
import mage.watchers.common.*;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public abstract class GameImpl implements Game, Serializable {
|
||||
|
||||
private static final int ROLLBACK_TURNS_MAX = 4;
|
||||
|
@ -855,31 +854,33 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
}
|
||||
|
||||
//20091005 - 103.2
|
||||
TargetPlayer targetPlayer = new TargetPlayer();
|
||||
targetPlayer.setTargetName("starting player");
|
||||
Player choosingPlayer = null;
|
||||
if (choosingPlayerId != null) {
|
||||
choosingPlayer = this.getPlayer(choosingPlayerId);
|
||||
if (choosingPlayer != null && !choosingPlayer.isInGame()) {
|
||||
choosingPlayer = null;
|
||||
if (startingPlayerId == null) {
|
||||
TargetPlayer targetPlayer = new TargetPlayer();
|
||||
targetPlayer.setTargetName("starting player");
|
||||
if (choosingPlayerId != null) {
|
||||
choosingPlayer = this.getPlayer(choosingPlayerId);
|
||||
if (choosingPlayer != null && !choosingPlayer.isInGame()) {
|
||||
choosingPlayer = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (choosingPlayer == null) {
|
||||
choosingPlayerId = pickChoosingPlayer();
|
||||
if (choosingPlayerId == null) {
|
||||
if (choosingPlayer == null) {
|
||||
choosingPlayerId = pickChoosingPlayer();
|
||||
if (choosingPlayerId == null) {
|
||||
return;
|
||||
}
|
||||
choosingPlayer = getPlayer(choosingPlayerId);
|
||||
}
|
||||
if (choosingPlayer == null) {
|
||||
return;
|
||||
}
|
||||
getState().setChoosingPlayerId(choosingPlayerId); // needed to start/stop the timer if active
|
||||
if (choosingPlayer.choose(Outcome.Benefit, targetPlayer, null, this)) {
|
||||
startingPlayerId = targetPlayer.getTargets().get(0);
|
||||
} else if (getState().getPlayers().size() < 3) {
|
||||
// not possible to choose starting player, choosing player has probably conceded, so stop here
|
||||
return;
|
||||
}
|
||||
choosingPlayer = getPlayer(choosingPlayerId);
|
||||
}
|
||||
if (choosingPlayer == null) {
|
||||
return;
|
||||
}
|
||||
getState().setChoosingPlayerId(choosingPlayerId); // needed to start/stop the timer if active
|
||||
if (choosingPlayer.choose(Outcome.Benefit, targetPlayer, null, this)) {
|
||||
startingPlayerId = targetPlayer.getTargets().get(0);
|
||||
} else if (getState().getPlayers().size() < 3) {
|
||||
// not possible to choose starting player, choosing player has probably conceded, so stop here
|
||||
return;
|
||||
}
|
||||
if (startingPlayerId == null) {
|
||||
// choose any available player as starting player
|
||||
|
@ -898,15 +899,7 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
logger.debug("Starting player not found. playerId:" + startingPlayerId);
|
||||
return;
|
||||
}
|
||||
StringBuilder message = new StringBuilder(choosingPlayer.getLogName()).append(" chooses that ");
|
||||
if (choosingPlayer.getId().equals(startingPlayerId)) {
|
||||
message.append("he or she");
|
||||
} else {
|
||||
message.append(startingPlayer.getLogName());
|
||||
}
|
||||
message.append(" takes the first turn");
|
||||
|
||||
this.informPlayers(message.toString());
|
||||
sendStartMessage(choosingPlayer, startingPlayer);
|
||||
|
||||
//20091005 - 103.3
|
||||
int startingHandSize = 7;
|
||||
|
@ -1019,6 +1012,21 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
|
||||
}
|
||||
|
||||
protected void sendStartMessage(Player choosingPlayer, Player startingPlayer) {
|
||||
StringBuilder message = new StringBuilder();
|
||||
if (choosingPlayer != null) {
|
||||
message.append(choosingPlayer.getLogName()).append(" chooses that ");
|
||||
}
|
||||
if (choosingPlayer != null && choosingPlayer.getId().equals(startingPlayer.getId())) {
|
||||
message.append("he or she");
|
||||
} else {
|
||||
message.append(startingPlayer.getLogName());
|
||||
}
|
||||
message.append(" takes the first turn");
|
||||
|
||||
this.informPlayers(message.toString());
|
||||
}
|
||||
|
||||
protected UUID findWinnersAndLosers() {
|
||||
UUID winnerIdFound = null;
|
||||
for (Player player : state.getPlayers().values()) {
|
||||
|
@ -2834,6 +2842,11 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
return startingPlayerId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStartingPlayerId(UUID startingPlayerId) {
|
||||
this.startingPlayerId = startingPlayerId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLife() {
|
||||
return startLife;
|
||||
|
|
|
@ -31684,32 +31684,62 @@ 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|48|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|45|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|
|
||||
Arahbo, Roar of the World|Commander 2017|35|M|{3}{G}{W}|Legendary Creature - Cat Avatar|5|5|Eminence — At the beginning of combat on your turn, if Arahbo, Roar of the World is in the command zone or on the battlefield, another target Cat you control gets +3/+3 until end of turn.$Whenever another Cat you control attacks, you may pay {1}{G}{W}. If you do, it gains trample and gets +X/+X until end of turn, where X is its power.|
|
||||
Taigam, Ojutai Master|Commander 2017|46|R|{2}{W}{U}|Legendary Creature - Human Monk|3|4|Instant, sorcery, and Dragon spells you control can't be countered by spells or abilities.$Whenever you cast an instant or sorcery spell from your hand, if Taigam, Ojutai Master attacked this turn, that spell gains rebound. <i>(Exile the spell as it resolves. At the beginning of your next upkeep, you may cast that card from exile without paying its mana cost.)</i>|
|
||||
Wasitora, Nekoru Queen|Commander 2017|49|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|
|
||||
Ramos, Dragon Engine|Commander 2017|55|M|{6}|Legendary Artifact Creature - Dragon|4|4|Flying$Whenever you cast a spell, put a +1/+1 counter on Ramos, Dragon Engine for each of that spell's colors. Remove five +1/+1 counters from Ramos: Add {W}{W}{U}{U}{B}{B}{R}{R}{G}{G} to your mana pool. Activate this ability only once each turn.|
|
||||
Licia, Sanguine Tribune|Commander 2017|40|M|{5}{R}{W}{B}|Legendary Creature - Vampire Soldier|4|4|Licia, Sanguine Tribune costs 1 less to cast for each 1 life you gained this turn.$First strike, lifelink$Pay 5 life: Put three +1/+1 counters on Licia. Activate this ability only on your turn and only once each turn.|
|
||||
Mirri, Weatherlight Duelist|Commander 2017|43|M|{1}{G}{W}|Legendary Creature - Cat Warrior|3|2|First Strike$Whenever Mirri, Weatherlight Duelist attacks, each opponent can't block with more than one creature this combat.$As long as Mirri, Weatherlight Duelist is tapped, no more than one creature can attack you each combat.|
|
||||
Nazahn, Revered Bladesmith|Commander 2017|44|M|{4}{G}{W}|Legendary Creature - Cat Artificer|5|4|When Nazahn, Revered Bladesmith enters the battlefield, search your library for an Equipment card and reveal it. If you reveal a card named Hammer of Nazahn this way, put it onto the battlefield. Otherwise, put that card into your hand. Then shuffle your library.$Whenever an equipped creature you control attacks, you may tap target creature defending player controls.|
|
||||
Bloodforged War Axe|Commander 2017|50|R|{1}|Artifact - Equipment|||Equipped creature gets +2/+0.$Whenever equipped creature deals combat damage to a player, create a token that's a copy of Bloodforged War Axe.$Equip 2|
|
||||
Hammer of Nazahn|Commander 2017|51|R|{4}|Legendary Artifact - Equipment|||Whenever Hammer of Nazahn or another Equipment enters the battlefield under your control, you may attach that Equipment to target creature you control.$Equipped creature gets +2/+0 and has indestructible.$Equip 4|
|
||||
Herald's Horn|Commander 2017|53|U|{3}|Artifact|||When Herald's Horn enters the battlefield, choose a creature type.$Creature spells you cast of the chosen type cost 1 less.$At the beginning of your upkeep, look at the top card of your library. If it's a creature card of the chosen type, you may reveal it and put it into your hand.|
|
||||
Fractured Identity|Commander 2017|37|R|{3}{W}{U}|Sorcery|||Exile target nonland permanent. Each player other than its controller creates a token that's a copy of it.|
|
||||
Path of Ancestry|Commander 2017|56|C||Land|||Path of Ancestry enters the battlefield tapped.$T: Add to your mana pool one mana of any color in your commander's color identity. When that mana is spent to cast a creature spell that shares a creature type with your commander, scry 1.|
|
||||
Fortunate Few|Commander 2017|4|R|{3}{W}{W}|Sorcery|||Choose a nonland permanent you don't control, then each other player chooses a nonland permanent he or she doesn't control that hasn't been chosen this way. Destroy all other nonland permanents.|
|
||||
Scalelord Reckoner|Commander 2017|??|R|{5}{W}{W}|Creature - Dragon|4|4|Flying$Whenever a Dragon you control becomes the target of a spell or ability an opponent controls, destroy target nonland permanent that player controls.|
|
||||
Alms Collector|Commander 2017|1|R|{3}{W}|Creature - Cat Cleric|3|4|Flash$If an opponent would draw two or more cards, instead you and that player each draw a card.|
|
||||
Arahbo, Roar of the World|Commander 2017|35|M|{3}{G}{W}|Legendary Creature - Cat Avatar|5|5|Eminence — At the beginning of combat on your turn, if Arahbo, Roar of the World is in the command zone or on the battlefield, another target Cat you control gets +3/+3 until end of turn.$Whenever another Cat you control attacks, you may pay {1}{G}{W}. If you do, it gains trample and gets +X/+X until end of turn, where X is its power.|
|
||||
Balan, Wandering Knight|Commander 2017|2|R|{2}{W}{W}|Legendary Creature - Cat Knight|3|3|First strike$Balan, Wandering Knight has double strike as long as two or more Equipment are attached to it.$1W: Attach all Equipment you control to Balan.|
|
||||
Stalking Leonin|Commander 2017|7|R|{2}{W}|Creature - Cat Archer|3|3|When Stalking Leonin enters the battlefield, secretly choose an opponent.$Reveal the player you chose: Exile target creature that's attacking you if it's controlled by the chosen player. Activate this ability only once.|
|
||||
Kindred Discovery|Commander 2017|11|R|{3}{U}{U}|Enchantment|||As Kindred Discovery enters the battlefield, choose a creature type.$Whenever a creature you control of the chose type enters the battlefield or attacks, draw a card.|
|
||||
Boneyard Scourge|Commander 2017|15|R|{2}{B}{B}|Creature - Zombie Dragon|4|3|Flying$Whenever a Dragon you control dies while Boneyard Scourge is in your graveyard, you may pay 1B. If you do, return Boneyard Scourge from your graveyard to the battlefield.|
|
||||
Bloodforged War Axe|Commander 2017|50|R|{1}|Artifact - Equipment|||Equipped creature gets +2/+0.$Whenever equipped creature deals combat damage to a player, create a token that's a copy of Bloodforged War Axe.$Equip 2|
|
||||
Bloodline Necromancer|Commander 2017|14|U|{4}{B}|Creature - Vampire Wizard|3|2|Lifelink$When Bloodline Necromancer enters the battlefield, you may return target Vampire or Wizard creature card from your graveyard to the battlefield.|
|
||||
Territorial Hellkite|Commander 2017|??|R|{2}{R}{R}|Creature - Dragon|6|5|Flying, haste$At the beginning of combat on your turn, choose an opponent at random that Territorial Hellkite didn't attack during your last combat. Territorial Hellkite attacks that player this combat if able. If you can't choose an opponent this way, tap Territorial Hellkite.|
|
||||
Summon the Tribe|Commander 2017|32|R|{5}{G}{G}|Instant|||Choose a creature type. Reveal the top card card of your library until you reveal X creatures of the chosen type, where X is the number of creatures you control of the chosen type, and place them onto the battlefield. Shuffle the other revealed cards into your library.|
|
||||
Bloodsworn Steward|Commander 2017|22|R|{2}{R}{R}|Creature - Vampire Knight|4|4|Flying$Commander creatures you control get +2/+2 and have haste.|
|
||||
Boneyard Scourge|Commander 2017|15|R|{2}{B}{B}|Creature - Zombie Dragon|4|3|Flying$Whenever a Dragon you control dies while Boneyard Scourge is in your graveyard, you may pay 1B. If you do, return Boneyard Scourge from your graveyard to the battlefield.|
|
||||
Crimson Honor Guard|Commander 2017|23|R|{3}{R}{R}|Creature - Vampire Knight|4|5|Trample$At the beginning of each player's end step, Crimson Honor Guard deals 4 damage to that player unless he or she controls a commander.|
|
||||
Curse of Bounty|Commander 2017|30|U|{1}{G}|Enchantment - Aura Curse|||Enchant player$Whenever enchanted player is attacked, untap all nonland permanents you control. Each opponent attacking that player untaps all nonland permanents he or she controls.|
|
||||
Curse of Disturbance|Commander 2017|16|U|{2}{B}|Enchantment - Aura Curse|||Enchant player$Whenever enchanted player is attacked, create a 2/2 black Zombie creature token. Each opponent attacking that player does the same.|
|
||||
Curse of Opulence|Commander 2017|24|U|{R}|Enchantment - Aura Curse|||Enchant player$Whenever enchanted player is attacked, create a colorless artifact token named Gold. It has "sacrifice this artifact: Add one mana of any color to your mana pool." Each opponent attacking that player does the same.|
|
||||
Curse of Verbosity|Commander 2017|9|U|{2}{U}|Enchantment - Aura Curse|||Enchant player$Whenever enchanted player is attacked, draw a card. Each opponent attacking that player does the same.|
|
||||
Curse of Vitality|Commander 2017|3|U|{2}{W}|Enchantment - Aura Curse|||Enchant player$Whenever enchanted player is attacked, you gain 2 life. Each opponent attacking that player does the same.|
|
||||
Disrupt Decorum|Commander 2017|25|R|{2}{R}{R}|Sorcery|||Goad all creatures you don't control.$(Until your next turn, those creatures attack each combat if able and attack a player other than you if able.)|
|
||||
Edgar Markov|Commander 2017|36|M|{3}{R}{W}{B}|Legendary Creature - Vampire Knight|4|4|Eminence - Whenever you cast another Vampire spell, if Edgar Markov is in the command zone or on the battlefield, create a 1/1 black Vampire creature token.$First strike, haste$Whenever Edgar Markov attacks, put a +1/+1 counter on each Vampire you control.|
|
||||
Fortunate Few|Commander 2017|4|R|{3}{W}{W}|Sorcery|||Choose a nonland permanent you don't control, then each other player chooses a nonland permanent he or she doesn't control that hasn't been chosen this way. Destroy all other nonland permanents.|
|
||||
Fractured Identity|Commander 2017|37|R|{3}{W}{U}|Sorcery|||Exile target nonland permanent. Each player other than its controller creates a token that's a copy of it.|
|
||||
Galecaster Colossus|Commander 2017|10|R|{5}{U}{U}|Creature - Giant Wizard|5|6|Tap an untapped Wizard you control: Return target non-land permanent you don't control to its owner's hand.|
|
||||
Hammer of Nazahn|Commander 2017|51|R|{4}|Legendary Artifact - Equipment|||Whenever Hammer of Nazahn or another Equipment enters the battlefield under your control, you may attach that Equipment to target creature you control.$Equipped creature gets +2/+0 and has indestructible.$Equip 4|
|
||||
Heirloom Blade|Commander 2017|52|U|{3}|Artifact - Equipment|||Equipped creature gets +3/+1.$Whenever equipped creature dies, you may reveal cards from the top of your library until you reveal a creature card that shares a creature type with it. Put that card into your hand and the rest on the bottom of your library in a random order.$Equip 1|
|
||||
Herald's Horn|Commander 2017|53|U|{3}|Artifact|||When Herald's Horn enters the battlefield, choose a creature type.$Creature spells you cast of the chosen type cost 1 less.$At the beginning of your upkeep, look at the top card of your library. If it's a creature card of the chosen type, you may reveal it and put it into your hand.|
|
||||
Hungry Lynx|Commander 2017|31|R|{1}{G}|Creature - Cat|2|2|Cats you control have protection from Rats. (They can't be blocked, targeted, or dealt damage by Rats.)$At the beginning of your end step, target opponent creates a 1/1 black Rat creature token with deathtouch.$Whenever a Rat dies, put a +1/+1 counter on each Cat you control.|
|
||||
Inalla, Archmage Ritualist|Commander 2017|38|M|{2}{U}{B}{R}|Legendary Creature - Human Wizard|4|5|Eminence - Whenever another nontoken Wizard enters the battlefield under your control, if Inalla, Archmage Ritualist is in the command zone or on the battlefield, you may pay {1}. If you do, create a token that's a copy of that Wizard. The token gains haste. Exile it at the beginning of the next end step.$Tap five untapped Wizards you control: Target player loses 7 life.|
|
||||
Izzet Chemister|Commander 2017|26|R|{2}{R}|Creature - Goblin Chemister|1|3|Haste$R, T: Exile target instant or sorcery card from your graveyard.$1R, T: Sacrifice Izzet Chemister: Cast any number of cards exiled with Izzet Chemister without paying their mana costs.|
|
||||
Kess, Dissident Mage|Commander 2017|39|M|{1}{U}{B}{R}|Legendary Creature - Human Wizard|3|4|Flying$During each of your turns, you may cast an instant or sorcery card from your graveyard. If a card cast this way would be put into your graveyard this turn, exile it instead.|
|
||||
Kheru Mind-Eater|Commander 2017|17|R|{2}{B}|Creature - Vampire|1|3|Menace$Whenever Kheru Mind-Eater deals combat damage to a player, that player exiles a card from his or her hand face down.$You may look at and play cards exiled with Kheru Mind-Eater.|
|
||||
Kindred Boon|Commander 2017|5|R|{2}{W}{W}|Enchantment|||When Kindred Boon enters the battlefield choose a creature type.$1W: Put a divinity counter on target creature you control with the chosen type.$All creatures you control with a divinity counter become indestructible.|
|
||||
Kindred Charge|Commander 2017|27|R|{4}{R}{R}|Sorcery|||Choose a creature type. For each creature you control of the chosen type, create a token that's a copy of that creature. Those tokens gain haste. Exile them at the beginning of the next end step.|
|
||||
Kindred Discovery|Commander 2017|11|R|{3}{U}{U}|Enchantment|||As Kindred Discovery enters the battlefield, choose a creature type.$Whenever a creature you control of the chose type enters the battlefield or attacks, draw a card.|
|
||||
Kindred Dominance|Commander 2017|18|R|{5}{B}{B}|Sorcery|||Choose a creature type. Destroy all creatures that are not the chosen type.|
|
||||
Kindred Summons|Commander 2017|32|R|{5}{G}{G}|Instant|||Choose a creature type. Reveal the top card card of your library until you reveal X creatures of the chosen type, where X is the number of creatures you control of the chosen type, and place them onto the battlefield. Shuffle the other revealed cards into your library.|
|
||||
Licia, Sanguine Tribune|Commander 2017|40|M|{5}{R}{W}{B}|Legendary Creature - Vampire Soldier|4|4|Licia, Sanguine Tribune costs 1 less to cast for each 1 life you gained this turn.$First strike, lifelink$Pay 5 life: Put three +1/+1 counters on Licia. Activate this ability only on your turn and only once each turn.|
|
||||
Magus of the Mind|Commander 2017|12|R|{4}{U}{U}|Creature - Human Wizard|4|5|U, T: Sacrifice Magus of the Mind: Shuffle your library, then exile the top X cards, where X is one plus the number of spells cast this turn. Until end of turn, you may play cards exiled this way without paying their mana costs.|
|
||||
Mairsil, the Pretender|Commander 2017|41|M|{1}{U}{B}{R}|Legendary Creature - Human Wizard|4|4|When Mairsil, the Pretender enters the battlefield, you may exile an artifact or creature card from your hand or graveyard and put a cage counter on it.$Mairsil, the Pretender has all activated abilities of all cards you own in exile with cage counters on them. You may activate each of those abilities only once each turn.|
|
||||
Mathas, Fiend Seeker|Commander 2017|42|M|{R}{W}{B}|Legendary Creature - Vampire|3|3|Menace$At the beginning of your end step, put a bounty counter on target creature an opponent controls. For as long as that creature has a bounty counter on it, it has "When this creature dies, each opponent draws a card and gains 2 life."|
|
||||
Mirri, Weatherlight Duelist|Commander 2017|43|M|{1}{G}{W}|Legendary Creature - Cat Warrior|3|2|First Strike$Whenever Mirri, Weatherlight Duelist attacks, each opponent can't block with more than one creature this combat.$As long as Mirri, Weatherlight Duelist is tapped, no more than one creature can attack you each combat.|
|
||||
Mirror of the Forebears|Commander 2017|54|U|{2}|Artifact|||As Mirror of the Forebears enters the battlefield, choose a creature type.$1: Until end of turn, Mirror of the Forebears becomes a copy of target creature you control of the chosen type, except it's an artifact in addition to its other types.|
|
||||
Nazahn, Revered Bladesmith|Commander 2017|44|M|{4}{G}{W}|Legendary Creature - Cat Artificer|5|4|When Nazahn, Revered Bladesmith enters the battlefield, search your library for an Equipment card and reveal it. If you reveal a card named Hammer of Nazahn this way, put it onto the battlefield. Otherwise, put that card into your hand. Then shuffle your library.$Whenever an equipped creature you control attacks, you may tap target creature defending player controls.|
|
||||
New Blood|Commander 2017|19|R|{2}{B}{B}|Sorcery|||As an additional cost to cast New Blood, tap an untapped Vampire you control.$Gain control of target creature. Change the text of that creature by replacing all instances of one creature type with Vampire.|
|
||||
O-Kagachi, Vengeful Kami|Commander 2017|45|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|
|
||||
Path of Ancestry|Commander 2017|56|C||Land|||Path of Ancestry enters the battlefield tapped.$T: Add to your mana pool one mana of any color in your commander's color identity. When that mana is spent to cast a creature spell that shares a creature type with your commander, scry 1.|
|
||||
Patron of the Vein|Commander 2017|20|R|{4}{B}{B}|Creature - Vampire Shaman|4|4|Flying$When Patron of the Vein enters the battlefield, destroy target creature an opponent controls.$Whenever a creature an opponent controls dies, exile it and put a +1/+1 counter on each Vampire you control.|
|
||||
Portal Mage|Commander 2017|13|R|{2}{U}|Creature - Human Wizard|2|2|Flash$If Portal Mage enters the battlefield during the declare attackers step, you may reselect the player or planeswalker that the target attacking creature attacks.|
|
||||
Qasali Slingers|Commander 2017|33|R|{4}{G}|Creature - Cat Warrior|3|5|Reach$Whenever Qasali Slingers or another Cat enters the battlefield under your control, you may destroy target artifact or enchantment.|
|
||||
Ramos, Dragon Engine|Commander 2017|55|M|{6}|Legendary Artifact Creature - Dragon|4|4|Flying$Whenever you cast a spell, put a +1/+1 counter on Ramos, Dragon Engine for each of that spell's colors. Remove five +1/+1 counters from Ramos: Add {W}{W}{U}{U}{B}{B}{R}{R}{G}{G} to your mana pool. Activate this ability only once each turn.|
|
||||
Scalelord Reckoner|Commander 2017|6|R|{5}{W}{W}|Creature - Dragon|4|4|Flying$Whenever a Dragon you control becomes the target of a spell or ability an opponent controls, destroy target nonland permanent that player controls.|
|
||||
Shifting Shadow|Commander 2017|28|R|{2}{R}|Enchantment - Aura|||Enchant creature$Enchanted creature has haste and "At the beginning of your upkeep, destroy this creature. Reveal cards from the top of your library until you reveal a creature card. Put that card onto the battlefield and attach Shifting Shadow to it, then put all other cards revealed this way on the bottom of your library in a random order."|
|
||||
Stalking Leonin|Commander 2017|7|R|{2}{W}|Creature - Cat Archer|3|3|When Stalking Leonin enters the battlefield, secretly choose an opponent.$Reveal the player you chose: Exile target creature that's attacking you if it's controlled by the chosen player. Activate this ability only once.|
|
||||
Taigam, Ojutai Master|Commander 2017|46|R|{2}{W}{U}|Legendary Creature - Human Monk|3|4|Instant, sorcery, and Dragon spells you control can't be countered by spells or abilities.$Whenever you cast an instant or sorcery spell from your hand, if Taigam, Ojutai Master attacked this turn, that spell gains rebound. <i>(Exile the spell as it resolves. At the beginning of your next upkeep, you may cast that card from exile without paying its mana cost.)</i>|
|
||||
Taigam, Sidisi's Hand|Commander 2017|47|R|{3}{U}{B}|Legendary Creature - Human Wizard|3|4|Skip your draw step.$At the beginning of your upkeep, look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard.$B, T, Exile X cards from your graveyard: Target creature gets -X/-X until end of turn.|
|
||||
Teferi's Protection|Commander 2017|8|R|{2}{W}|Instant|||Until your next turn, your life total can't change, and you have protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.)$Exile Teferi's Protection.|
|
||||
Territorial Hellkite|Commander 2017|29|R|{2}{R}{R}|Creature - Dragon|6|5|Flying, haste$At the beginning of combat on your turn, choose an opponent at random that Territorial Hellkite didn't attack during your last combat. Territorial Hellkite attacks that player this combat if able. If you can't choose an opponent this way, tap Territorial Hellkite.|
|
||||
The Ur-Dragon|Commander 2017|48|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|
|
||||
Traverse the Outlands|Commander 2017|34|R|{4}{G}|Sorcery|||Search your library for up to X basic land cards, where X is the greatest power among creatures you control. Put those cards onto the battlefield tapped, then shuffle your library.|
|
||||
Vindictive Lich|Commander 2017|21|R|{3}{B}|Creature - Zombie Wizard|4|1|When Vindictive Lich dies, choose one or more. Each mode must target a different player.$*Target opponent sacrifices a creature.$*Target opponent discards two cards.$*Target opponent loses 5 life.|
|
||||
Wasitora, Nekoru Queen|Commander 2017|49|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|
|
||||
Aegis Angel|Archenemy: Nicol Bolas|1|R|{4}{W}{W}|Creature - Angel|5|5|Flying$When Aegis Angel enters the battlefield, another target creature gains indestructible for as long as you control Aegis Angel.|
|
||||
Aerial Responder|Archenemy: Nicol Bolas|2|U|{1}{W}{W}|Creature - Dwarf Soldier|2|3|Flying, vigilance, lifelink|
|
||||
Anointer of Champions|Archenemy: Nicol Bolas|3|U|{W}|Creature - Human Cleric|1|1|{T}: Target attacking creature gets +1/+1 until end of turn.|
|
||||
|
@ -31866,7 +31896,7 @@ Champion of Wits|Hour of Devastation|31|R|{2}{U}|Creature - Naga Wizard|2|1|When
|
|||
Countervailing Winds|Hour of Devastation|32|C|{2}{U}|Instant|||Counter target spell unless its controller pays {1} for each card in your graveyard.$Cycling {2} <i> ({2}, Discard this card: Draw a card.)</i>|
|
||||
Cunning Survivor|Hour of Devastation|33|C|{1}{U}|Creature - Human Warrior|1|3|Whenever you cycle or discard a card, Cunning Survivor gets +1/+0 until end of turn and can't be blocked this turn.|
|
||||
Eternal of Harsh Truths|Hour of Devastation|34|U|{2}{U}|Creature - Zombie Cleric|1|3|Afflict 2 <i>(Whenever this creature becomes blocked, defending player loses 2 life.)</i>$Whenever Eternal of Harsh Truths attacks and isn't blocked, draw a card.|
|
||||
Fraying Sanity|Hour of Devastation|35|R|{2}{U}|Enchantment - Aura Curse|||Enchant player$At the beginning of each end step, enchanted player puts the top X cards of his or her library into his or her graveyard, where X is the total number of cards put into his or her graveyard from anywhere this turn. |
|
||||
Fraying Sanity|Hour of Devastation|35|R|{2}{U}|Enchantment - Aura Curse|||Enchant player$At the beginning of each end step, enchanted player puts the top X cards of his or her library into his or her graveyard, where X is the total number of cards put into his or her graveyard from anywhere this turn.|
|
||||
Hour of Eternity|Hour of Devastation|36|R|{X}{X}{U}{U}{U}|Sorcery|||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.|
|
||||
Imaginary Threats|Hour of Devastation|37|U|{2}{U}{U}|Instant|||Creatures target opponent controls attack this turn if able. During that player's next untap step, creatures he or she controls don't untap.$Cycling {2} <i>({2}, Discard this card: Draw a card.)</i>|
|
||||
Jace's Defeat|Hour of Devastation|38|U|{1}{U}|Instant|||Counter target blue spell. If it was a Jace planeswalker spell, scry 2.|
|
||||
|
|
Loading…
Reference in a new issue