This commit is contained in:
Mark Langen 2016-09-15 00:57:48 -06:00
commit 45c02de82d
12 changed files with 871 additions and 10 deletions

View file

@ -0,0 +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.sets.kaladesh;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.effects.common.GainLifeEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.Game;
import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
/**
*
* @author fireshoes
*/
public class AuthorityOfTheConsuls extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature");
static {
filter.add(new ControllerPredicate(TargetController.OPPONENT));
}
public AuthorityOfTheConsuls(UUID ownerId) {
super(ownerId, 5, "Authority of the Consuls", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{W}");
this.expansionSetCode = "KLD";
// Creatures your opponents control enter the battlefield tapped.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AuthorityOfTheConsulsTapEffect()));
// Whenever a creature enters the battlefield under an opponent's control, you gain 1 life.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(new GainLifeEffect(1), filter,
"Whenever a creature enters the battlefield under an opponent's control, you gain 1 life."));
}
public AuthorityOfTheConsuls(final AuthorityOfTheConsuls card) {
super(card);
}
@Override
public AuthorityOfTheConsuls copy() {
return new AuthorityOfTheConsuls(this);
}
}
class AuthorityOfTheConsulsTapEffect extends ReplacementEffectImpl {
AuthorityOfTheConsulsTapEffect() {
super(Duration.WhileOnBattlefield, Outcome.Tap);
staticText = "Creatures your opponents control enter the battlefield tapped";
}
AuthorityOfTheConsulsTapEffect(final AuthorityOfTheConsulsTapEffect effect) {
super(effect);
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
Permanent target = ((EntersTheBattlefieldEvent) event).getTarget();
if (target != null) {
target.setTapped(true);
}
return false;
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) {
Permanent permanent = ((EntersTheBattlefieldEvent) event).getTarget();
if (permanent != null && permanent.getCardType().contains(CardType.CREATURE)) {
return true;
}
}
return false;
}
@Override
public AuthorityOfTheConsulsTapEffect copy() {
return new AuthorityOfTheConsulsTapEffect(this);
}
}

View 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.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandChosenControlledPermanentEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
/**
*
* @author fireshoes
*/
public class AviaryMechanic extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("another permanent you control");
static {
filter.add(new AnotherPredicate());
}
public AviaryMechanic(UUID ownerId) {
super(ownerId, 6, "Aviary Mechanic", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}");
this.expansionSetCode = "KLD";
this.subtype.add("Dwarf");
this.subtype.add("Artificer");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// When Aviary Mechanic enters the battlefield, you may return another permanent you control to its owner's hand.
this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter), true));
}
public AviaryMechanic(final AviaryMechanic card) {
super(card);
}
@Override
public AviaryMechanic copy() {
return new AviaryMechanic(this);
}
}

View file

@ -48,7 +48,7 @@ import mage.game.permanent.token.ServoToken;
*
* @author fireshoes
*/
public class MasterTrinketcrafter extends CardImpl {
public class MasterTrinketeer extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Servo and Thopter creatures");
@ -57,7 +57,7 @@ public class MasterTrinketcrafter extends CardImpl {
new SubtypePredicate("Thopter")));
}
public MasterTrinketcrafter(UUID ownerId) {
public MasterTrinketeer(UUID ownerId) {
super(ownerId, 21, "Master Trinketcrafter", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.expansionSetCode = "KLD";
this.subtype.add("Dwarf");
@ -72,12 +72,12 @@ public class MasterTrinketcrafter extends CardImpl {
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new ServoToken(), 1), new ManaCostsImpl("{3}{W}")));
}
public MasterTrinketcrafter(final MasterTrinketcrafter card) {
public MasterTrinketeer(final MasterTrinketeer card) {
super(card);
}
@Override
public MasterTrinketcrafter copy() {
return new MasterTrinketcrafter(this);
public MasterTrinketeer copy() {
return new MasterTrinketeer(this);
}
}

View 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.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledArtifactPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetControlledPermanent;
import mage.util.CardUtil;
/**
*
* @author emerald000
*/
public class MetalworkColossus extends CardImpl {
public MetalworkColossus(UUID ownerId) {
super(ownerId, 222, "Metalwork Colossus", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{11}");
this.expansionSetCode = "KLD";
this.subtype.add("Construct");
this.power = new MageInt(10);
this.toughness = new MageInt(10);
// Metalwork Colossus costs {X} less to cast, where X is the total converted mana cost of noncreature artifacts you control.
this.addAbility(new SimpleStaticAbility(Zone.STACK, new MetalworkColossusCostReductionEffect()));
// Sacrifice two artifacts: Return Metalwork Colossus from your graveyard to your hand.
this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), new SacrificeTargetCost(new TargetControlledPermanent(2, 2, new FilterControlledArtifactPermanent("two artifacts"), true))));
}
public MetalworkColossus(final MetalworkColossus card) {
super(card);
}
@Override
public MetalworkColossus copy() {
return new MetalworkColossus(this);
}
}
class MetalworkColossusCostReductionEffect extends CostModificationEffectImpl {
private static final FilterPermanent filter = new FilterControlledArtifactPermanent("noncreature artifacts you control");
static {
filter.add(Predicates.not(new CardTypePredicate(CardType.CREATURE)));
}
MetalworkColossusCostReductionEffect() {
super(Duration.Custom, Outcome.Benefit, CostModificationType.REDUCE_COST);
staticText = "{this} costs {X} less to cast, where X is the total converted mana cost of noncreature artifacts you control";
}
MetalworkColossusCostReductionEffect(final MetalworkColossusCostReductionEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source, Ability abilityToModify) {
int totalCMC = 0;
for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) {
totalCMC += permanent.getConvertedManaCost();
}
CardUtil.reduceCost(abilityToModify, totalCMC);
return true;
}
@Override
public boolean applies(Ability abilityToModify, Ability source, Game game) {
return abilityToModify.getSourceId().equals(source.getSourceId()) && (abilityToModify instanceof SpellAbility);
}
@Override
public MetalworkColossusCostReductionEffect copy() {
return new MetalworkColossusCostReductionEffect(this);
}
}

View file

@ -0,0 +1,105 @@
/*
* 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.sets.kaladesh;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.ExileSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.PutTopCardOfLibraryIntoGraveControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard;
/**
*
* @author emerald000
*/
public class PerpetualTimepiece extends CardImpl {
public PerpetualTimepiece(UUID ownerId) {
super(ownerId, 227, "Perpetual Timepiece", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{2}");
this.expansionSetCode = "KLD";
// {T}: Put the top two cards of your library into your graveyard.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutTopCardOfLibraryIntoGraveControllerEffect(2), new TapSourceCost()));
// {2}, Exile Perpetual Timepiece: Shuffle any number of target cards from your graveyard into your libary.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PerpetualTimepieceShuffleEffect(), new GenericManaCost(2));
ability.addCost(new ExileSourceCost());
ability.addTarget(new TargetCardInYourGraveyard(0, Integer.MAX_VALUE, new FilterCard("cards to shuffle into your library")));
this.addAbility(ability);
}
public PerpetualTimepiece(final PerpetualTimepiece card) {
super(card);
}
@Override
public PerpetualTimepiece copy() {
return new PerpetualTimepiece(this);
}
}
class PerpetualTimepieceShuffleEffect extends OneShotEffect {
PerpetualTimepieceShuffleEffect() {
super(Outcome.Neutral);
this.staticText = "Shuffle any number of target cards from your graveyard into your libary";
}
PerpetualTimepieceShuffleEffect(final PerpetualTimepieceShuffleEffect effect) {
super(effect);
}
@Override
public PerpetualTimepieceShuffleEffect copy() {
return new PerpetualTimepieceShuffleEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
controller.moveCards(new CardsImpl(this.getTargetPointer().getTargets(game, source)), Zone.LIBRARY, source, game);
controller.shuffleLibrary(source, game);
return true;
}
return false;
}
}

View 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.sets.kaladesh;
import java.util.UUID;
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.filter.common.FilterArtifactCard;
import mage.target.common.TargetCardInYourGraveyard;
/**
*
* @author fireshoes
*/
public class Refurbish extends CardImpl {
public Refurbish(UUID ownerId) {
super(ownerId, 25, "Refurbish", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{W}");
this.expansionSetCode = "KLD";
// Return target artifact card from your graveyard to the battlefield.
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard")));
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
}
public Refurbish(final Refurbish card) {
super(card);
}
@Override
public Refurbish copy() {
return new Refurbish(this);
}
}

View file

@ -0,0 +1,76 @@
/*
* 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.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.target.common.TargetCardInYourGraveyard;
/**
*
* @author emerald000
*/
public class RestorationGearsmith extends CardImpl {
private static final FilterCard filter = new FilterCard("artifact or creature card");
static {
filter.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT), new CardTypePredicate(CardType.CREATURE)));
}
public RestorationGearsmith(UUID ownerId) {
super(ownerId, 185, "Restoration Gearsmith", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}{B}");
this.expansionSetCode = "KLD";
this.subtype.add("Human");
this.subtype.add("Artificer");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// When Restoration Gearsmith enters the battlefield, return target artifact or creature card from your graveyard to your hand.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect());
ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);
}
public RestorationGearsmith(final RestorationGearsmith card) {
super(card);
}
@Override
public RestorationGearsmith copy() {
return new RestorationGearsmith(this);
}
}

View 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.sets.kaladesh;
import java.util.UUID;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.keyword.ScryEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.filter.Filter;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.PowerPredicate;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author fireshoes
*/
public class SkywhalersShot extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power 3 or greater");
static {
filter.add(new PowerPredicate(Filter.ComparisonType.GreaterThan, 2));
}
public SkywhalersShot(UUID ownerId) {
super(ownerId, 29, "Skywhaler's Shot", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{W}");
this.expansionSetCode = "KLD";
// Destroy target creature with power 3 or greater. Scry 1.
getSpellAbility().addEffect(new DestroyTargetEffect());
getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
getSpellAbility().addEffect(new ScryEffect(1));
}
public SkywhalersShot(final SkywhalersShot card) {
super(card);
}
@Override
public SkywhalersShot copy() {
return new SkywhalersShot(this);
}
}

View 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.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.counters.CounterType;
/**
*
* @author fireshoes
*/
public class ThrivingIbex extends CardImpl {
public ThrivingIbex(UUID ownerId) {
super(ownerId, 31, "Thriving Ibex", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{W}");
this.expansionSetCode = "KLD";
this.subtype.add("Goat");
this.power = new MageInt(2);
this.toughness = new MageInt(4);
// When Thriving Ibex enters the battlefield, you get {E}{E}.
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
// Whenever Thriving Ibex attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new PayEnergyCost(2)), false,
"Whenever {this} attacks you may pay {E}{E}. If you do, put a +1/+1 counter on it."));
}
public ThrivingIbex(final ThrivingIbex card) {
super(card);
}
@Override
public ThrivingIbex copy() {
return new ThrivingIbex(this);
}
}

View file

@ -0,0 +1,86 @@
/*
* 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.sets.kaladesh;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.condition.LockedInCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition.CountType;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.constants.TargetController;
import mage.filter.common.FilterControlledArtifactPermanent;
/**
*
* @author fireshoes
*/
public class ToolcraftExemplar extends CardImpl {
public ToolcraftExemplar(UUID ownerId) {
super(ownerId, 32, "Toolcraft Exemplar", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{W}");
this.expansionSetCode = "KLD";
this.subtype.add("Dwarf");
this.subtype.add("Artificer");
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// At the beginning of combat on your turn, if you control an artifact, Toolcraft Exemplar gets +2/+1 until end of turn.
// If you control at least 3 artifacts, it also gains first strike until end of turn.
Effect effect = new ConditionalContinuousEffect(
new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn),
new LockedInCondition(new PermanentsOnTheBattlefieldCondition(new FilterControlledArtifactPermanent(), CountType.MORE_THAN, 2)), null);
Ability ability = new ConditionalTriggeredAbility(
new BeginningOfCombatTriggeredAbility(new BoostSourceEffect(2, 1, Duration.EndOfTurn), TargetController.YOU, false),
new PermanentsOnTheBattlefieldCondition(new FilterControlledArtifactPermanent()),
"At the beginning of combat on your turn, if you control an artifact, {this} gets +2/+1 until end of turn."
+ " If you control at least 3 artifacts, it also gains first strike until end of turn.");
ability.addEffect(effect);
this.addAbility(ability);
}
public ToolcraftExemplar(final ToolcraftExemplar card) {
super(card);
}
@Override
public ToolcraftExemplar copy() {
return new ToolcraftExemplar(this);
}
}

View 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.sets.kaladesh;
import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.keyword.EquipAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
/**
*
* @author emerald000
*/
public class TorchGauntlet extends CardImpl {
public TorchGauntlet(UUID ownerId) {
super(ownerId, 237, "Torch Gauntlet", Rarity.COMMON, new CardType[]{CardType.ARTIFACT}, "{2}");
this.expansionSetCode = "KLD";
this.subtype.add("Equipment");
// Equipped creature gets +2/+0.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 0)));
// Equip {2}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2)));
}
public TorchGauntlet(final TorchGauntlet card) {
super(card);
}
@Override
public TorchGauntlet copy() {
return new TorchGauntlet(this);
}
}

View file

@ -29659,7 +29659,7 @@ Acrobatic Maneuver|Kaladesh|1|C|{2}{W}|Instant|||Exile target creature you contr
Aerial Responder|Kaladesh|2|U|{1}{W}{W}|Creature - Dwarf Soldier|2|3|Flying, vigilance, lifelink|
Aetherstorm Roc|Kaladesh|3|R|{2}{W}{W}|Creature - Bird|3|3|Flying$Whenever Aetherstorm Roc or another creature enters the battlefield under your control, you get {E} <i>(an energy counter)</i>.$Whenever Aetherstorm Roc attacks, you may pay {E}{E}. If you do, put a +1/+1 creature on it and tap up to one target creature defending player controls.|
Angel of Invention|Kaladesh|4|M|{3}{W}{W}|Creature - Angel|2|1|Flying, vigilance, lifelink$Fabricate 2 <i>(When this creature enters the battlefield, put two +1/+1 counters on it or create two 1/1 colorless Servo artifact creature tokens.)</i>$Other creatures you control get +1/+1.|
Authority of the Consulate|Kaladesh|5|{W}|Enchantment|||Creatures your opponents control enter the battlefield tapped.$Whenever a creature enters the battlefield under an opponent's control, you gain 1 life.|
Authority of the Consuls|Kaladesh|5|R|{W}|Enchantment|||Creatures your opponents control enter the battlefield tapped.$Whenever a creature enters the battlefield under an opponent's control, you gain 1 life.|
Aviary Mechanic|Kaladesh|6|C|{1}{W}|Creature - Dwarf Artificer|2|2|When Aviary Mechanic enters the battlefield, you may return another permanent you control to its owner's hand.|
Captured by the Consulate|Kaladesh|8|R|{3}{W}|Enchantment - Aura|||Enchant creature you don't control$Enchanted creature can't attack.$Whenever an opponent casts a spell, if it has a single target, change the target to enchanted creature if able.|
Cataclysmic Gearhulk|Kaladesh|9|M|{3}{W}{W}|Artifact Creature - Construct|4|5|Vigilance$When Cataclysmic Gearhulk enters the battlefield, each player chooses from among the non-land permanents he or she controls an artifact, a creature, an enchantment, and a planeswalker, then sacrifices the rest.|
@ -29668,21 +29668,23 @@ Fragmentize|Kaladesh|14|C|{W}|Sorcery|||Destroy target artifact or enchantment w
Glint-Sleeve Artisan|Kaladesh|17|C|{2}{W}|Creature - Dwarf Artificer|2|2|Fabricate 1 <i>(When this creature enters the battlefield, put a +1/+1 counter on it or create a 1/1 colorless Servo artifact creature token.)</i>|
Impeccable Timing|Kaladesh|19|C|{1}{W}|Instant|||Impeccable Timing deals 3 damage to target attacking or blocking creature.|
Inspired Charge|Kaladesh|20|C|{2}{W}{W}|Instant|||Creatures you control get +2/+1 until end of turn.|
Master Trinketcrafter|Kaladesh|21|R|{2}{W}|Creature - Dwarf Artificer|3|2|Servo and Thopter creatures you control get +1/+1.${3}{W}: Create a 1/1 colorless Servo artifact creature token.|
Master Trinketeer|Kaladesh|21|R|{2}{W}|Creature - Dwarf Artificer|3|2|Servos and Thopters you control get +1/+1.${3}{W}: Create a 1/1 colorless Servo artifact creature token.|
Propeller Pioneer|Kaladesh|24|C|{3}{W}|Creature - Human Artificer|2|1|Flying$Fabricate 1 <i>(When this creature enters the battlefield, put a +1/+1 counter on it or create a 1/1 colorless Servo artifact creature token.)</i>|
Refurbish|Kaladesh|25|U|{3}{W}|Sorcery|||Return target artifact card from your graveyard to the battlefield.|
Skywhaler's Shot|Kaladesh|29|U|{2}{W}|Instant|||Destroy target creature with power 3 or greater. Scry 1.|
Tasseled Dromedary|Kaladesh|30|C|{W}|Creature - Camel|0|4||
Thriving Ibex|Kaladesh|31|C|{3}{W}|Creature - Goat|2|4|When Thriving Ibex enters the battlefield, you get {E}{E} <i>(two energy counters)</i>.$Whenever Thriving Ibex attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.|
Toolcraft Exemplar|Kaladesh|32|R|{W}|Creature - Dwarf Artificer|1|1|At the beginning of your combat step, if you control an artifact, Toolcraft Exemplar gets +2/+1 until end of turn. If you control at least 3 artifacts, it also gains first strike until end of turn.|
Toolcraft Exemplar|Kaladesh|32|R|{W}|Creature - Dwarf Artificer|1|1|At the beginning of combat on your turn, if you control an artifact, Toolcraft Exemplar gets +2/+1 until end of turn. If you control three or more artifacts, it also gains first strike until end of turn.|
Wispweaver Angel|Kaladesh|35|U|{4}{W}{W}|Creature - Angel|4|4|Flying$When Wispweaver Angel enters the battlefield, you may exile another target creature you control, then return that card to the battlefield under its owner's control.|
Aether Tradewinds|Kaladesh|38|C|{2}{U}|Instant|||Return target permanent you control and target permanent you don't control to their owners' hands.|
Aethersquall Ancient|Kaladesh|39|R|{5}{U}{U}|Creature - Leviathan|6|6|Flying$At the beginning of your upkeep, you get {E}{E}{E} <i>(three energy counters)</i>.$Pay {E}{E}{E}{E}{E}{E}{E}{E}: Return all other creatures to their owners' hands. Activate this ability only any time you could cast a sorcery.|
Ceremonious Rejection|Kaladesh|40|U|{U}|Instant|||Counter target colorless spell.|
Curio Vendor|Kaladesh|42|C|{1}{U}|Creature - Vedalken|2|1||
Disappearing Trick|Kaladesh|43|U|{1}{U}{U}|Instant|||As an additional cost to cast Disappearing Trick, return a permanent you control to its owner's hand.$Counter target spell.|
Disappearing Act|Kaladesh|43|U|{1}{U}{U}|Instant|||As an additional cost to cast Disappearing Act, return a permanent you control to its owner's hand.$Counter target spell.|
Era of Innovation|Kaladesh|45|U|{1}{U}|Enchantment|||Whenever an artifact or creature enters the battlefield under you control, you may pay {1}. If you do, you get {E}{E} <i>(two energy counters)</i>.${E}{E}{E}{E}{E}{E}: Sacrifice Era of Innovation: Draw three cards.|
Experimental Aviator|Kaladesh|46|U|{3}{U}{U}|Creature - Human Artificer|0|3|Flying$When Experimental Aviator enters the battlefield, create two 1/1 colorless Thopter artifact creature tokens with flying.|
Glint-Nest Crane|Kaladesh|50|U|{1}{U}|Creature - Bird|1|3|Flying$When Glint-Nest Crane enters the battlefield, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in any order.|
Insidious Will|Kaladesh|52|R|{2}{U}{U}|Instant|||Choose one &mdash Counter target spell.; You may choose new targets for target spell.; Copy target instant or sorcery spell. You may choose new targets for the copy.|
Long-Finned Skywhale|Kaladesh|54|U|{2}{U}{U}|Creature - Whale|4|3|Flying$Long-Finned Skywhale can block only creatures with flying.|
Metallurgic Summonings|Kaladesh|56|M|{3}{U}{U}|Enchantment|||Whenever you cast an instant or sorcery spell, create an X/X colorless Construct artifact creature token, where X is that spell's converted mana cost.${3}{U}{U}, Exile Metallurgic Summons: Return all instant and sorcery cards from your graveyard to your hand. Activate this ability only if you control six or more artifacts.|
Nimble Innovator|Kaladesh|58|C|{3}{U}|Creature - Vedalken Artificer|2|2|When Nimble Innovator enters the battlefield, draw a card.|
@ -29734,7 +29736,7 @@ Skyship Stalker|Kaladesh|130|R|{2}{R}{R}|Creature - Dragon|3|3|Flying${R}: Skysh
Spark of Creativity|Kaladesh|131|U|{R}|Sorcery|||Choose target creature. Exile the top card of your library. You may have Spark of Creativity deal damage to that creature equal to the converted mana cost of the exiled card. If you don't, you may play that card until end of turn.|
Speedway Fanatic|Kaladesh|132|U|{1}{R}|Creature - Human Pilot|2|1|Haste$Whenever Speedway Fanatic crews a Vehicle, that Vehicle gains haste until end of turn.|
Start Your Engines|Kaladesh|135|U|{3}{R}|Sorcery|||Vehicles you control becomes artifact creatures until end of turn. Creatures you control get +2/+0 until end of turn.|
Territorial Devourer|Kaladesh|136|R|{3}{R}|Creature - Gremlin|2|2|Trample $Whenever you gain one or more {E} <i>(energy counters)</i>, Territorial Devourer gets +2/+2 until end of turn.|
Territorial Gorger|Kaladesh|136|R|{3}{R}|Creature - Gremlin|2|2|Trample $Whenever you get one or more {E} <i>(energy counters)</i>, Territorial Gorger gets +2/+2 until end of turn.|
Terror of the Fairgrounds|Kaladesh|137|C|{3}{R}|Creature - Gremlin|5|2||
Thriving Grubs|Kaladesh|138|C|{1}{R}|Creature - Gremlin|2|1|When Thriving Grubs enters the battlefield, you get {E}{E} <i>(two energy counters)</i>.$Whenever Thriving Grubs attacks, you may pay {E}{E}. If you do, put a +1/+1 counter on it.|
Welding Sparks|Kaladesh|140|C|{2}{R}|Instant|||Welding Sparks deals X damage to target creature, where X is 3 plus the number of artifacts you control.|
@ -29771,6 +29773,7 @@ Aetherworks Marvel|Kaladesh|193|M|{4}|Legendary Artifact|||Whenever a permanent
Animation Module|Kaladesh|194|R|{1}|Artifact|||Whenever one or more +1/+1 counters are placed on a permanent you control, you may pay {1}. If you do, create a 1/1 colorless Servo artifact creature token.${3}, {T}: Choose a counter on target permanent or player. Give that permanent or player another counter of that kind.|
Bomat Bazaar Barge|Kaladesh|198|U|{4}|Artifact - Vehicle|5|5|When Bomat Bazaar Barge enters the battlefield, draw a card.$Crew 3 <i>(Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Bomat Courier|Kaladesh|199|R|{1}|Artifact Creature - Construct|1|1|Haste$Whenever Bomat Courier attacks, exile the top card of your library face down. <i>(You can't look at it.)</i>${R}, Discard your hand, Sacrifice Bomat Courier: Put all cards exiled with Bomat Courier into their owners' hands.|
Chief of the Foundry|Kaladesh|200|U|{3}|Artifact Creature - Construct|2|3|Other artifact creatures you control get +1/+1.|
Cogworker's Puzzleknot|Kaladesh|201|C|{2}|Artifact|||When Cogworker's Puzzleknot enters the battlefield, create a 1/1 colorless Servo artifact creature token.${1}{W}, Sacrifice Cogworker's Puzzleknot: Create a 1/1 colorless Servo artifact creature token.|
Cultivator's Caravan|Kaladesh|203|R|{3}|Artifact - Vehicle|5|5|{T}: Add one mana of any color to your mana pool.$Crew 3 <i>(Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Decoction Module|Kaladesh|205|U|{2}|Artifact|||Whenever a creature enters the battlefield under your control, you get {E} <i>(an energy counter)</i>.${4}, {T}: Return target creature you control to its owner's hand.|
@ -29781,23 +29784,27 @@ Fabrication Module|Kaladesh|211|U|{3}|Artifact|||Whenever you get one or more {E
Filigree Familiar|Kaladesh|212|U|{3}|Artifact Creature - Fox|2|2|When Filigree Familiar enters the battlefield, you gain 2 life.$When Filigree Familiar dies, draw a card.|
Fireforger's Puzzleknot|Kaladesh|213|C|{2}|Artifact|||When Fireforger's Puzzleknot enters the battlefield, it deals 1 damage to target creature or player.${2}{R}, Sacrifice Fireforger's Puzzleknot: It deals 1 damage to target creature or player.|
Fleetwheel Cruiser|Kaladesh|214|R|{4}|Artifact - Vehicle|5|3|Trample, Haste $When Fleetwheel Cruiser enters the battlefield, it becomes an artifact creature until the end of turn.$Crew 2 <i>(Tap any number of creatures you control with total power 2 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Foundry Inspector|Kaladesh|215|U|{3}|Artifact Creature - Construct|3|2|Artifact spells you cast cost {1} less to cast.|
Ghirapur Orrery|Kaladesh|216|R|{4}|Artifact|||Each player may play an additional land on each of his or her turns.$At the beginning of each player's upkeep, if that player has no cards in hand, that player draws three cards.|
Glassblower's Puzzleknot|Kaladesh|217|C|{2}|Artifact|||When Glassblower's Puzzleknot enters the battlefield, scry 2, then you get {E}{E}. <i>(You get two energy counters. To scry 2, look at the top two cards of you library, then put any number of them on the bottom of your library and the rest on top in any order.)</i>${2}{U}, Sacrifice Glassblower's Puzzleknot: Scry 2, then you get {E}{E}.|
Inventor's Goggles|Kaladesh|218|C|{1}|Artifact - Equipment|||Equipped creature gets +1/+2.$Whenever an Artificer enters the battlefield under your control, you may attach Inventor's Goggles to it.$Equip {2} <i>({2}: Attach to target creature you control. Equip only as a sorcery)</i>|
Key to the City|Kaladesh|220|R|{2}|Artifact|||{T}, Discard a card: Up to one target creature can't be blocked this turn.$Whenever Key to the City becomes untapped, you may pay {2}. If you do, draw a card.|
Metalspinner's Puzzleknot|Kaladesh|221|C|{2}|Artifact|||When Metalspinner's Puzzleknot enters the battlefield, you draw a card and you lose 1 life.${2}{B}, Sacrifice Metalspinner's Puzzleknot: You draw a card and you lose 1 life.|
Metalwork Colossus|Kaladesh|222|R|{11}|Artifact Creature - Construct|10|10|Metalwork Colossus costs {X} less to cast, where X is the total converted mana cost of noncreature artifacts you control.$Sacrifice two artifacts: Return Metalwork Colossus from your graveyard to your hand.|
Multiform Wonder|Kaladesh|223|R|{5}|Artifact Creature - Construct|3|3|When Multiform Wonder enters the battlefield, you get {E}{E}{E} <i>(three energy counters)</i>.$Pay {E}: Multiform Wonder gains your choice of flying, vigilance, or lifelink until end of turn.$Pay {E}: Multiform Wonder gets +2/-2 or -2/+2 until end of turn.|
Ovalchase Dragster|Kaladesh|225|U|{4}|Artifact - Vehicle|6|1|Trample, haste$Crew 1 <i>(Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Panharmonicon|Kaladesh|226|R|{4}|Artifact|||If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time.|
Perpetual Timepiece|Kaladesh|227|U|{2}|Artifact|||{T}: Put the top two cards of your library into your graveyard.${2}, Exile Perpetual Timepiece: Shuffle any number of target cards from your graveyard into your libary.|
Prophetic Prism|Kaladesh|229|C|{2}|Artifact|||When Prophetic Prism enters the battlefield, draw a card.${1}, {T}: Add one mana of any color to your mana pool.|
Scrapheap Scrounger|Kaladesh|231|R|{2}|Artifact Creature - Construct|3|2|Scrapheap Scrounger can't block.${1}{B}, Exile another creature card from your graveyard: Return Scrapheap Scrounger from your graveyard to the battlefield.|
Self-Assembler|Kaladesh|232|C|{5}|Artifact Creature - Assumbly-Worker|4|4|When Self-Assembler enters the battlefield, you may search your library for an Assembly-Worker creature card, reveal it, put it into your hand, then shuffle your library.|
Sky Skiff|Kaladesh|233|C|{2}|Artifact - Vehicle|2|3|Flying$Crew 1 <i>(Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Skysovereign, Consul Flagship|Kaladesh|234|M|{5}|Legendary Artifact - Vehicle|6|5|Flying$Whenever Skysovereign, Consul Flagship enters the battlefield or attacks, it deals 3 damage to target creature or planeswalker an opponent controls.$Crew 3 <i>(Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Smuggler's Copter|Kaladesh|235|R|{2}|Artifact - Vehicle|3|3|Flying$Whenever Smuggler's Copter attacks or blocks, you may draw a card. If you do, discard a card.$Crew 1 <i>(Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.)</i>|
Torch Gauntlet|Kaladesh|237|C|{2}|Artifact - Equipment|||Equipped creature gets +2/+0.$Equip {2} <i>({2}: Attech to target creature you control. Equip only as a sorcery.)</i>|
Whirlermaker|Kaladesh|239|U|{3}|Artifact|||{4}, {T}: Create a 1/1 colorless Thopter artifact creature token with flying.|
Woodweaver's Puzzleknot|Kaladesh|240|C|{2}|Artifact|||When Woodweaver's Puzzleknot enters the battlefield, you gain 3 life and get {E}{E}{E} <i>(three energy counters)</i>.${2}{G}, Sacrifice Woodweaver's Puzzleknot: You gain 3 life and get {E}{E}{E}.|
Workshop Assistant|Kaladesh|241|C|{3}|Artifact Creature - Construct|1|2|When Workshop Assistant dies, return another target artifact card from your graveyard to your hand.|
Aether Hub|Kaladesh|242|U||Land|||When Aether Hub enters the battlefield, you get {E} <i>(an energy counter)</i>.${T}: Add {C} to your mana pool.${T}, Pay {E}: Add one mana of any color to your mana pool.|
Blooming Marsh|Kaladesh|243|R||Land|||Blooming Marsh enters the battlefield tapped unless you control two or fewer other lands.${T}: Add {B} or {G} to your mana pool.|
Botanical Sanctum|Kaladesh|244|R||Land|||Botanical Sanctum enters the battlefield tapped unless you control two or fewer other lands.${T}: Add {G} or {U} to your mana pool.|