Fix formatting in several card files

This commit is contained in:
Fenhl 2016-05-16 02:01:09 +00:00
parent eb50790b97
commit 77b32014f6
35 changed files with 493 additions and 463 deletions

View file

@ -59,21 +59,22 @@ public class LongForgottenGohei extends CardImpl {
} }
public LongForgottenGohei(UUID ownerId) { public LongForgottenGohei(UUID ownerId) {
super(ownerId, 261, "Long-Forgotten Gohei", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}"); super(ownerId, 261, "Long-Forgotten Gohei", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}");
this.expansionSetCode = "CHK"; this.expansionSetCode = "CHK";
// Arcane spells you cast cost {1} less to cast. // Arcane spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(arcaneFilter, 1))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(arcaneFilter, 1)));
// Spirit creatures you control get +1/+1. // Spirit creatures you control get +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, spiritFilter, false))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, spiritFilter, false)));
} }
public LongForgottenGohei(final LongForgottenGohei card) { public LongForgottenGohei(final LongForgottenGohei card) {
super(card); super(card);
} }
@Override @Override
public LongForgottenGohei copy() { public LongForgottenGohei copy() {
return new LongForgottenGohei(this); return new LongForgottenGohei(this);
} }
} }

View file

@ -46,21 +46,20 @@ import mage.watchers.common.DamagedByWatcher;
public class YamabushisFlame extends CardImpl { public class YamabushisFlame extends CardImpl {
public YamabushisFlame(UUID ownerId) { public YamabushisFlame(UUID ownerId) {
super(ownerId, 198, "Yamabushi's Flame", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{R}"); super(ownerId, 198, "Yamabushi's Flame", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{R}");
this.expansionSetCode = "CHK"; this.expansionSetCode = "CHK";
// Yamabushi's Flame deals 3 damage to target creature or player.
this.getSpellAbility().addEffect(new DamageTargetEffect(3));
this.getSpellAbility().addTarget(new TargetCreatureOrPlayer());
// Yamabushi's Flame deals 3 damage to target creature or player. // If a creature dealt damage this way would die this turn, exile it instead.
this.getSpellAbility().addEffect(new DamageTargetEffect(3)); this.getSpellAbility().addEffect(new DealtDamageToCreatureBySourceDies(this, Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); this.getSpellAbility().addWatcher(new DamagedByWatcher());
}
// If a creature dealt damage this way would die this turn, exile it instead. public YamabushisFlame(final YamabushisFlame card) {
this.getSpellAbility().addEffect(new DealtDamageToCreatureBySourceDies(this, Duration.EndOfTurn)); super(card);
this.getSpellAbility().addWatcher(new DamagedByWatcher());
}
public YamabushisFlame(final YamabushisFlame card) {
super(card);
} }
@Override @Override

View file

@ -53,73 +53,69 @@ import java.util.UUID;
*/ */
public class ThrummingStone extends CardImpl { public class ThrummingStone extends CardImpl {
//applies to all spells //applies to all spells
private static final FilterSpell anySpellFilter = new FilterSpell("Spells you cast"); private static final FilterSpell anySpellFilter = new FilterSpell("Spells you cast");
public ThrummingStone(UUID ownerId) { public ThrummingStone(UUID ownerId) {
super(ownerId, 142, "Thrumming Stone", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{5}"); super(ownerId, 142, "Thrumming Stone", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{5}");
this.expansionSetCode = "CSP"; this.expansionSetCode = "CSP";
this.supertype.add("Legendary"); this.supertype.add("Legendary");
// spells you cast have Ripple 4 // spells you cast have Ripple 4
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ThrummingStoneGainAbilitySpellsEffect(new RippleAbility(4), anySpellFilter))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ThrummingStoneGainAbilitySpellsEffect(new RippleAbility(4), anySpellFilter)));
} }
public ThrummingStone(final ThrummingStone card) { public ThrummingStone(final ThrummingStone card) {
super(card); super(card);
} }
@Override
public ThrummingStone copy() {
return new ThrummingStone(this);
}
@Override
public ThrummingStone copy() {
return new ThrummingStone(this);
}
} }
class ThrummingStoneGainAbilitySpellsEffect extends ContinuousEffectImpl { class ThrummingStoneGainAbilitySpellsEffect extends ContinuousEffectImpl {
private final Ability ability; private final Ability ability;
private final FilterSpell filter; private final FilterSpell filter;
public ThrummingStoneGainAbilitySpellsEffect(Ability ability, FilterSpell filter) {
public ThrummingStoneGainAbilitySpellsEffect(Ability ability, FilterSpell filter) { super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); this.ability = ability;
this.ability = ability; this.filter = filter;
this.filter = filter; staticText = filter.getMessage() + " have " + ability.getRule();
staticText = filter.getMessage() + " have " + ability.getRule(); }
}
public ThrummingStoneGainAbilitySpellsEffect(final ThrummingStoneGainAbilitySpellsEffect effect) {
public ThrummingStoneGainAbilitySpellsEffect(final ThrummingStoneGainAbilitySpellsEffect effect) { super(effect);
super(effect); this.ability = effect.ability.copy();
this.ability = effect.ability.copy(); this.filter = effect.filter.copy();
this.filter = effect.filter.copy(); }
}
@Override
@Override public ThrummingStoneGainAbilitySpellsEffect copy() {
public ThrummingStoneGainAbilitySpellsEffect copy() { return new ThrummingStoneGainAbilitySpellsEffect(this);
return new ThrummingStoneGainAbilitySpellsEffect(this); }
}
@Override
@Override public boolean apply(Game game, Ability source) {
public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId());
Player player = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId());
Permanent permanent = game.getPermanent(source.getSourceId()); if (player != null && permanent != null) {
if (player != null && permanent != null) { for (StackObject stackObject : game.getStack()) {
for (StackObject stackObject : game.getStack()) { // only spells cast, so no copies of spells
// only spells cast, so no copies of spells if ((stackObject instanceof Spell) && !stackObject.isCopy() && stackObject.getControllerId().equals(source.getControllerId())) {
if ((stackObject instanceof Spell) && !stackObject.isCopy() && stackObject.getControllerId().equals(source.getControllerId())) { Spell spell = (Spell) stackObject;
Spell spell = (Spell) stackObject; if (filter.match(spell, game)) {
if (filter.match(spell, game)) { if (!spell.getAbilities().contains(ability)) {
if (!spell.getAbilities().contains(ability)) { game.getState().addOtherAbility(spell.getCard(), ability);
game.getState().addOtherAbility(spell.getCard(), ability); }
} }
} }
} }
} return true;
return true; }
return false;
} }
return false;
}
} }

View file

@ -1 +1,52 @@
/* * 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.eighthedition;import java.util.UUID;/** * * @author Backfir3 */public class Rhox extends mage.sets.tenthedition.Rhox { public Rhox(UUID ownerId) { super(ownerId); this.cardNumber = 277; this.expansionSetCode = "8ED"; } public Rhox(final Rhox card) { super(card); } @Override public Rhox copy() { return new Rhox(this); }} /*
* 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.eighthedition;
import java.util.UUID;
/**
*
* @author Backfir3
*/
public class Rhox extends mage.sets.tenthedition.Rhox {
public Rhox(UUID ownerId) {
super(ownerId);
this.cardNumber = 277;
this.expansionSetCode = "8ED";
}
public Rhox(final Rhox card) {
super(card);
}
@Override
public Rhox copy() {
return new Rhox(this);
}
}

View file

@ -47,22 +47,21 @@ import mage.game.permanent.token.SoldierTokenWithHaste;
public class AssembleTheLegion extends CardImpl { public class AssembleTheLegion extends CardImpl {
public AssembleTheLegion(UUID ownerId) { public AssembleTheLegion(UUID ownerId) {
super(ownerId, 142, "Assemble the Legion", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}{W}"); super(ownerId, 142, "Assemble the Legion", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}{W}");
this.expansionSetCode = "GTC"; this.expansionSetCode = "GTC";
// At the beginning of your upkeep, put a muster counter on Assemble the Legion. Then put a 1/1 red and white Soldier creature token with haste onto the battlefield for each muster counter on Assemble the Legion.
// At the beginning of your upkeep, put a muster counter on Assemble the Legion. Then put a 1/1 red and white Soldier creature token with haste onto the battlefield for each muster counter on Assemble the Legion. Ability ability = new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.MUSTER.createInstance()), TargetController.YOU, false);
Ability ability = new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.MUSTER.createInstance()), TargetController.YOU, false); ability.addEffect(new CreateTokenEffect(new SoldierTokenWithHaste(), new CountersCount(CounterType.MUSTER)));
ability.addEffect(new CreateTokenEffect(new SoldierTokenWithHaste(), new CountersCount(CounterType.MUSTER))); this.addAbility(ability);
this.addAbility(ability);
} }
public AssembleTheLegion(final AssembleTheLegion card) { public AssembleTheLegion(final AssembleTheLegion card) {
super(card); super(card);
} }
@Override @Override
public AssembleTheLegion copy() { public AssembleTheLegion copy() {
return new AssembleTheLegion(this); return new AssembleTheLegion(this);
} }
} }

View file

@ -66,93 +66,92 @@ import mage.util.CardUtil;
public class NightveilSpecter extends CardImpl { public class NightveilSpecter extends CardImpl {
public NightveilSpecter(UUID ownerId) { public NightveilSpecter(UUID ownerId) {
super(ownerId, 222, "Nightveil Specter", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{U/B}{U/B}{U/B}"); super(ownerId, 222, "Nightveil Specter", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{U/B}{U/B}{U/B}");
this.expansionSetCode = "GTC"; this.expansionSetCode = "GTC";
this.subtype.add("Specter"); this.subtype.add("Specter");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Whenever Nightveil Specter deals combat damage to a player, that player exiles the top card of his or her library. // Whenever Nightveil Specter deals combat damage to a player, that player exiles the top card of his or her library.
this.addAbility(new DealsDamageToAPlayerTriggeredAbility(new NightveilSpecterExileEffect(),false, true)); this.addAbility(new DealsDamageToAPlayerTriggeredAbility(new NightveilSpecterExileEffect(),false, true));
// You may play cards exiled with Nightveil Specter. // You may play cards exiled with Nightveil Specter.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new NightveilSpecterEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new NightveilSpecterEffect()));
} }
public NightveilSpecter(final NightveilSpecter card) { public NightveilSpecter(final NightveilSpecter card) {
super(card); super(card);
} }
@Override @Override
public NightveilSpecter copy() { public NightveilSpecter copy() {
return new NightveilSpecter(this); return new NightveilSpecter(this);
} }
} }
class NightveilSpecterExileEffect extends OneShotEffect { class NightveilSpecterExileEffect extends OneShotEffect {
public NightveilSpecterExileEffect() { public NightveilSpecterExileEffect() {
super(Outcome.Discard); super(Outcome.Discard);
staticText = "that player exiles the top card of his or her library"; staticText = "that player exiles the top card of his or her library";
} }
public NightveilSpecterExileEffect(final NightveilSpecterExileEffect effect) { public NightveilSpecterExileEffect(final NightveilSpecterExileEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(targetPointer.getFirst(game, source)); Player player = game.getPlayer(targetPointer.getFirst(game, source));
if (player != null) { if (player != null) {
Card card = player.getLibrary().removeFromTop(game); Card card = player.getLibrary().removeFromTop(game);
MageObject sourceObject = game.getObject(source.getSourceId()); MageObject sourceObject = game.getObject(source.getSourceId());
if (card != null && sourceObject != null) { if (card != null && sourceObject != null) {
player.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceObject.getIdName(), source.getSourceId(), game, Zone.LIBRARY, true); player.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceObject.getIdName(), source.getSourceId(), game, Zone.LIBRARY, true);
return true; return true;
} }
} }
return false; return false;
} }
@Override @Override
public NightveilSpecterExileEffect copy() { public NightveilSpecterExileEffect copy() {
return new NightveilSpecterExileEffect(this); return new NightveilSpecterExileEffect(this);
} }
} }
class NightveilSpecterEffect extends AsThoughEffectImpl { class NightveilSpecterEffect extends AsThoughEffectImpl {
public NightveilSpecterEffect() { public NightveilSpecterEffect() {
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit);
staticText = "You may play cards exiled with {this}"; staticText = "You may play cards exiled with {this}";
} }
public NightveilSpecterEffect(final NightveilSpecterEffect effect) { public NightveilSpecterEffect(final NightveilSpecterEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
return true; return true;
} }
@Override @Override
public NightveilSpecterEffect copy() { public NightveilSpecterEffect copy() {
return new NightveilSpecterEffect(this); return new NightveilSpecterEffect(this);
} }
@Override @Override
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
Card card = game.getCard(objectId); Card card = game.getCard(objectId);
if (affectedControllerId.equals(source.getControllerId()) && card != null && game.getState().getZone(card.getId()) == Zone.EXILED) { if (affectedControllerId.equals(source.getControllerId()) && card != null && game.getState().getZone(card.getId()) == Zone.EXILED) {
ExileZone zone = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, source)); ExileZone zone = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, source));
return zone != null && zone.contains(card.getId()); return zone != null && zone.contains(card.getId());
} }
return false; return false;
} }
} }

View file

@ -48,28 +48,29 @@ import mage.target.common.TargetNonlandPermanent;
public class ThrullParasite extends CardImpl { public class ThrullParasite extends CardImpl {
public ThrullParasite(UUID ownerId) { public ThrullParasite(UUID ownerId) {
super(ownerId, 81, "Thrull Parasite", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{B}"); super(ownerId, 81, "Thrull Parasite", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{B}");
this.expansionSetCode = "GTC"; this.expansionSetCode = "GTC";
this.subtype.add("Thrull"); this.subtype.add("Thrull");
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Extort // Extort
this.addAbility(new ExtortAbility()); this.addAbility(new ExtortAbility());
// {tap}, Pay 2 life: Remove a counter from target nonland permanent.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RemoveCounterTargetEffect(), new TapSourceCost()); // {tap}, Pay 2 life: Remove a counter from target nonland permanent.
ability.addTarget(new TargetNonlandPermanent()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RemoveCounterTargetEffect(), new TapSourceCost());
ability.addCost(new PayLifeCost(2)); ability.addTarget(new TargetNonlandPermanent());
this.addAbility(ability); ability.addCost(new PayLifeCost(2));
this.addAbility(ability);
} }
public ThrullParasite(final ThrullParasite card) { public ThrullParasite(final ThrullParasite card) {
super(card); super(card);
} }
@Override @Override
public ThrullParasite copy() { public ThrullParasite copy() {
return new ThrullParasite(this); return new ThrullParasite(this);
} }
} }

View file

@ -52,32 +52,32 @@ public class UrborgSkeleton extends CardImpl {
private static final String staticText = "If Urborg Skeleton was kicked, it enters the battlefield with a +1/+1 counter on it"; private static final String staticText = "If Urborg Skeleton was kicked, it enters the battlefield with a +1/+1 counter on it";
public UrborgSkeleton(UUID ownerId) { public UrborgSkeleton(UUID ownerId) {
super(ownerId, 134, "Urborg Skeleton", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}"); super(ownerId, 134, "Urborg Skeleton", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}");
this.expansionSetCode = "INV"; this.expansionSetCode = "INV";
this.subtype.add("Skeleton"); this.subtype.add("Skeleton");
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Kicker {3} (You may pay an additional {3} as you cast this spell.) // Kicker {3} (You may pay an additional {3} as you cast this spell.)
this.addAbility(new KickerAbility("{3}")); this.addAbility(new KickerAbility("{3}"));
// {B}: Regenerate Urborg Skeleton. // {B}: Regenerate Urborg Skeleton.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{B}"))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{B}")));
// If Urborg Skeleton was kicked, it enters the battlefield with a +1/+1 counter on it. // If Urborg Skeleton was kicked, it enters the battlefield with a +1/+1 counter on it.
Ability ability = new EntersBattlefieldAbility( Ability ability = new EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)),
KickedCondition.getInstance(), staticText,""); KickedCondition.getInstance(), staticText,"");
this.addAbility(ability); this.addAbility(ability);
} }
public UrborgSkeleton(final UrborgSkeleton card) { public UrborgSkeleton(final UrborgSkeleton card) {
super(card); super(card);
} }
@Override @Override
public UrborgSkeleton copy() { public UrborgSkeleton copy() {
return new UrborgSkeleton(this); return new UrborgSkeleton(this);
} }
} }

View file

@ -59,18 +59,18 @@ public class CateranBrute extends CardImpl {
} }
public CateranBrute(UUID ownerId) { public CateranBrute(UUID ownerId) {
super(ownerId, 120, "Cateran Brute", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); super(ownerId, 120, "Cateran Brute", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Horror"); this.subtype.add("Horror");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {2}, {T}: Search your library for a Mercenary permanent card with converted mana cost 2 or less and put it onto the battlefield. Then shuffle your library. // {2}, {T}: Search your library for a Mercenary permanent card with converted mana cost 2 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
ability.addManaCost(new GenericManaCost(2)); ability.addManaCost(new GenericManaCost(2));
this.addAbility(ability); this.addAbility(ability);
} }
public CateranBrute(final CateranBrute card) { public CateranBrute(final CateranBrute card) {
@ -81,5 +81,4 @@ public class CateranBrute extends CardImpl {
public CateranBrute copy() { public CateranBrute copy() {
return new CateranBrute(this); return new CateranBrute(this);
} }
} }

View file

@ -60,19 +60,21 @@ public class CateranEnforcer extends CardImpl {
} }
public CateranEnforcer(UUID ownerId) { public CateranEnforcer(UUID ownerId) {
super(ownerId, 121, "Cateran Enforcer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); super(ownerId, 121, "Cateran Enforcer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Horror"); this.subtype.add("Horror");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Fear
this.addAbility(FearAbility.getInstance()); this.addAbility(FearAbility.getInstance());
// {4}, {T}: Search your library for a Mercenary permanent card with converted mana cost 4 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); // {4}, {T}: Search your library for a Mercenary permanent card with converted mana cost 4 or less and put it onto the battlefield. Then shuffle your library.
ability.addManaCost(new GenericManaCost(4)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
this.addAbility(ability); ability.addManaCost(new GenericManaCost(4));
this.addAbility(ability);
} }
public CateranEnforcer(final CateranEnforcer card) { public CateranEnforcer(final CateranEnforcer card) {
@ -83,5 +85,4 @@ public class CateranEnforcer extends CardImpl {
public CateranEnforcer copy() { public CateranEnforcer copy() {
return new CateranEnforcer(this); return new CateranEnforcer(this);
} }
} }

View file

@ -55,22 +55,22 @@ public class CateranKidnappers extends CardImpl {
static { static {
filter.add(new SubtypePredicate("Mercenary")); filter.add(new SubtypePredicate("Mercenary"));
filter.add(new ConvertedManaCostPredicate(ComparisonType.LessThan, 4)); filter.add(new ConvertedManaCostPredicate(ComparisonType.LessThan, 4));
} }
public CateranKidnappers(UUID ownerId) { public CateranKidnappers(UUID ownerId) {
super(ownerId, 122, "Cateran Kidnappers", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); super(ownerId, 122, "Cateran Kidnappers", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {3}, {T}: Search your library for a Mercenary permanent card with converted mana cost 3 or less and put it onto the battlefield. Then shuffle your library. // {3}, {T}: Search your library for a Mercenary permanent card with converted mana cost 3 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
ability.addManaCost(new GenericManaCost(3)); ability.addManaCost(new GenericManaCost(3));
this.addAbility(ability); this.addAbility(ability);
} }
public CateranKidnappers(final CateranKidnappers card) { public CateranKidnappers(final CateranKidnappers card) {
@ -81,5 +81,4 @@ public class CateranKidnappers extends CardImpl {
public CateranKidnappers copy() { public CateranKidnappers copy() {
return new CateranKidnappers(this); return new CateranKidnappers(this);
} }
} }

View file

@ -63,20 +63,21 @@ public class CateranOverlord extends CardImpl {
} }
public CateranOverlord(UUID ownerId) { public CateranOverlord(UUID ownerId) {
super(ownerId, 123, "Cateran Overlord", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{B}{B}{B}"); super(ownerId, 123, "Cateran Overlord", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{B}{B}{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Horror"); this.subtype.add("Horror");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(7); this.power = new MageInt(7);
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
// Sacrifice a creature: Regenerate Cateran Overlord. // Sacrifice a creature: Regenerate Cateran Overlord.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new SacrificeTargetCost(new TargetControlledCreaturePermanent()))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new SacrificeTargetCost(new TargetControlledCreaturePermanent())));
// {6}, {T}: Search your library for a Mercenary permanent card with converted mana cost 6 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); // {6}, {T}: Search your library for a Mercenary permanent card with converted mana cost 6 or less and put it onto the battlefield. Then shuffle your library.
ability.addManaCost(new GenericManaCost(6)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
this.addAbility(ability); ability.addManaCost(new GenericManaCost(6));
this.addAbility(ability);
} }
public CateranOverlord(final CateranOverlord card) { public CateranOverlord(final CateranOverlord card) {
@ -87,5 +88,4 @@ public class CateranOverlord extends CardImpl {
public CateranOverlord copy() { public CateranOverlord copy() {
return new CateranOverlord(this); return new CateranOverlord(this);
} }
} }

View file

@ -55,22 +55,22 @@ public class CateranPersuader extends CardImpl {
static { static {
filter.add(new SubtypePredicate("Mercenary")); filter.add(new SubtypePredicate("Mercenary"));
filter.add(new ConvertedManaCostPredicate(ComparisonType.LessThan, 2)); filter.add(new ConvertedManaCostPredicate(ComparisonType.LessThan, 2));
} }
public CateranPersuader(UUID ownerId) { public CateranPersuader(UUID ownerId) {
super(ownerId, 124, "Cateran Persuader", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}{B}"); super(ownerId, 124, "Cateran Persuader", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {1}, {T}: Search your library for a Mercenary permanent card with converted mana cost 1 or less and put it onto the battlefield. Then shuffle your library. // {1}, {T}: Search your library for a Mercenary permanent card with converted mana cost 1 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
ability.addManaCost(new GenericManaCost(1)); ability.addManaCost(new GenericManaCost(1));
this.addAbility(ability); this.addAbility(ability);
} }
public CateranPersuader(final CateranPersuader card) { public CateranPersuader(final CateranPersuader card) {
@ -81,5 +81,4 @@ public class CateranPersuader extends CardImpl {
public CateranPersuader copy() { public CateranPersuader copy() {
return new CateranPersuader(this); return new CateranPersuader(this);
} }
} }

View file

@ -60,19 +60,21 @@ public class CateranSlaver extends CardImpl {
} }
public CateranSlaver(UUID ownerId) { public CateranSlaver(UUID ownerId) {
super(ownerId, 125, "Cateran Slaver", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{B}{B}"); super(ownerId, 125, "Cateran Slaver", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{B}{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Horror"); this.subtype.add("Horror");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(5); this.power = new MageInt(5);
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
// Swampwalk
this.addAbility(new SwampwalkAbility()); this.addAbility(new SwampwalkAbility());
// {5}, {T}: Search your library for a Mercenary permanent card with converted mana cost 5 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); // {5}, {T}: Search your library for a Mercenary permanent card with converted mana cost 5 or less and put it onto the battlefield. Then shuffle your library.
ability.addManaCost(new GenericManaCost(5)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
this.addAbility(ability); ability.addManaCost(new GenericManaCost(5));
this.addAbility(ability);
} }
public CateranSlaver(final CateranSlaver card) { public CateranSlaver(final CateranSlaver card) {
@ -83,5 +85,4 @@ public class CateranSlaver extends CardImpl {
public CateranSlaver copy() { public CateranSlaver copy() {
return new CateranSlaver(this); return new CateranSlaver(this);
} }
} }

View file

@ -51,11 +51,10 @@ public class CateranSummons extends CardImpl {
} }
public CateranSummons(UUID ownerId) { public CateranSummons(UUID ownerId) {
super(ownerId, 126, "Cateran Summons", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{B}"); super(ownerId, 126, "Cateran Summons", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
// Search your library for a Mercenary card, reveal that card, and put it into your hand. Then shuffle your library.
// Search your library for a Mercenary card, reveal that card, and put it into your hand. Then shuffle your library.
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true)); this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true));
} }
@ -67,5 +66,4 @@ public class CateranSummons extends CardImpl {
public CateranSummons copy() { public CateranSummons copy() {
return new CateranSummons(this); return new CateranSummons(this);
} }
} }

View file

@ -46,15 +46,17 @@ import mage.cards.CardImpl;
public class MoltingHarpy extends CardImpl { public class MoltingHarpy extends CardImpl {
public MoltingHarpy(UUID ownerId) { public MoltingHarpy(UUID ownerId) {
super(ownerId, 148, "Molting Harpy", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{B}"); super(ownerId, 148, "Molting Harpy", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Harpy"); this.subtype.add("Harpy");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// At the beginning of your upkeep, sacrifice Molting Harpy unless you pay {2}. // At the beginning of your upkeep, sacrifice Molting Harpy unless you pay {2}.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl("{2}")), TargetController.YOU, false)); this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl("{2}")), TargetController.YOU, false));
} }
@ -67,5 +69,4 @@ public class MoltingHarpy extends CardImpl {
public MoltingHarpy copy() { public MoltingHarpy copy() {
return new MoltingHarpy(this); return new MoltingHarpy(this);
} }
} }

View file

@ -45,34 +45,34 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/ */
public class NightwindGlider extends CardImpl { public class NightwindGlider extends CardImpl {
private static final FilterCard filter = new FilterCard("Black"); private static final FilterCard filter = new FilterCard("Black");
static { static {
filter.add(new ColorPredicate(ObjectColor.BLACK)); filter.add(new ColorPredicate(ObjectColor.BLACK));
} }
public NightwindGlider(UUID ownerId) { public NightwindGlider(UUID ownerId) {
super(ownerId, 31, "Nightwind Glider", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); super(ownerId, 31, "Nightwind Glider", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Rebel"); this.subtype.add("Rebel");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Protection from black
this.addAbility(new ProtectionAbility(filter));
}
public NightwindGlider(final NightwindGlider card) { // Protection from black
super(card); this.addAbility(new ProtectionAbility(filter));
} }
@Override public NightwindGlider(final NightwindGlider card) {
public NightwindGlider copy() { super(card);
return new NightwindGlider(this); }
}
@Override
public NightwindGlider copy() {
return new NightwindGlider(this);
}
} }

View file

@ -46,16 +46,16 @@ import mage.cards.CardImpl;
public class PrimevalShambler extends CardImpl { public class PrimevalShambler extends CardImpl {
public PrimevalShambler(UUID ownerId) { public PrimevalShambler(UUID ownerId) {
super(ownerId, 152, "Primeval Shambler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{B}"); super(ownerId, 152, "Primeval Shambler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Horror"); this.subtype.add("Horror");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {B}: Primeval Shambler gets +1/+1 until end of turn. // {B}: Primeval Shambler gets +1/+1 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{B}"))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{B}")));
} }
public PrimevalShambler(final PrimevalShambler card) { public PrimevalShambler(final PrimevalShambler card) {
@ -66,5 +66,4 @@ public class PrimevalShambler extends CardImpl {
public PrimevalShambler copy() { public PrimevalShambler copy() {
return new PrimevalShambler(this); return new PrimevalShambler(this);
} }
} }

View file

@ -60,21 +60,21 @@ public class RamosianCaptain extends CardImpl {
} }
public RamosianCaptain(UUID ownerId) { public RamosianCaptain(UUID ownerId) {
super(ownerId, 35, "Ramosian Captain", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{W}{W}"); super(ownerId, 35, "Ramosian Captain", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{W}{W}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Rebel"); this.subtype.add("Rebel");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// First strike // First strike
this.addAbility(FirstStrikeAbility.getInstance()); this.addAbility(FirstStrikeAbility.getInstance());
// {5}, {T}: Search your library for a Rebel permanent card with converted mana cost 4 or less and put it onto the battlefield. Then shuffle your library. // {5}, {T}: Search your library for a Rebel permanent card with converted mana cost 4 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
ability.addManaCost(new GenericManaCost(5)); ability.addManaCost(new GenericManaCost(5));
this.addAbility(ability); this.addAbility(ability);
} }
public RamosianCaptain(final RamosianCaptain card) { public RamosianCaptain(final RamosianCaptain card) {
@ -85,5 +85,4 @@ public class RamosianCaptain extends CardImpl {
public RamosianCaptain copy() { public RamosianCaptain copy() {
return new RamosianCaptain(this); return new RamosianCaptain(this);
} }
} }

View file

@ -59,18 +59,18 @@ public class RamosianCommander extends CardImpl {
} }
public RamosianCommander(UUID ownerId) { public RamosianCommander(UUID ownerId) {
super(ownerId, 36, "Ramosian Commander", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); super(ownerId, 36, "Ramosian Commander", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Rebel"); this.subtype.add("Rebel");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// {6}, {T}: Search your library for a Rebel permanent card with converted mana cost 5 or less and put it onto the battlefield. Then shuffle your library. // {6}, {T}: Search your library for a Rebel permanent card with converted mana cost 5 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
ability.addManaCost(new GenericManaCost(6)); ability.addManaCost(new GenericManaCost(6));
this.addAbility(ability); this.addAbility(ability);
} }
public RamosianCommander(final RamosianCommander card) { public RamosianCommander(final RamosianCommander card) {
@ -81,5 +81,4 @@ public class RamosianCommander extends CardImpl {
public RamosianCommander copy() { public RamosianCommander copy() {
return new RamosianCommander(this); return new RamosianCommander(this);
} }
} }

View file

@ -59,18 +59,18 @@ public class RamosianLieutenant extends CardImpl {
} }
public RamosianLieutenant(UUID ownerId) { public RamosianLieutenant(UUID ownerId) {
super(ownerId, 37, "Ramosian Lieutenant", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); super(ownerId, 37, "Ramosian Lieutenant", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Rebel"); this.subtype.add("Rebel");
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {4}, {T}: Search your library for a Rebel permanent card with converted mana cost 3 or less and put it onto the battlefield. Then shuffle your library. // {4}, {T}: Search your library for a Rebel permanent card with converted mana cost 3 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
ability.addManaCost(new GenericManaCost(4)); ability.addManaCost(new GenericManaCost(4));
this.addAbility(ability); this.addAbility(ability);
} }
public RamosianLieutenant(final RamosianLieutenant card) { public RamosianLieutenant(final RamosianLieutenant card) {
@ -81,5 +81,4 @@ public class RamosianLieutenant extends CardImpl {
public RamosianLieutenant copy() { public RamosianLieutenant copy() {
return new RamosianLieutenant(this); return new RamosianLieutenant(this);
} }
} }

View file

@ -59,18 +59,18 @@ public class RamosianSergeant extends CardImpl {
} }
public RamosianSergeant(UUID ownerId) { public RamosianSergeant(UUID ownerId) {
super(ownerId, 39, "Ramosian Sergeant", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}"); super(ownerId, 39, "Ramosian Sergeant", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Rebel"); this.subtype.add("Rebel");
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {3}, {T}: Search your library for a Rebel permanent card with converted mana cost 2 or less and put it onto the battlefield. Then shuffle your library. // {3}, {T}: Search your library for a Rebel permanent card with converted mana cost 2 or less and put it onto the battlefield. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost());
ability.addManaCost(new GenericManaCost(3)); ability.addManaCost(new GenericManaCost(3));
this.addAbility(ability); this.addAbility(ability);
} }
public RamosianSergeant(final RamosianSergeant card) { public RamosianSergeant(final RamosianSergeant card) {
@ -81,5 +81,4 @@ public class RamosianSergeant extends CardImpl {
public RamosianSergeant copy() { public RamosianSergeant copy() {
return new RamosianSergeant(this); return new RamosianSergeant(this);
} }
} }

View file

@ -46,21 +46,22 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
public class RampartCrawler extends CardImpl { public class RampartCrawler extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Walls"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Walls");
static { static {
filter.add(new SubtypePredicate("Wall")); filter.add(new SubtypePredicate("Wall"));
} }
public RampartCrawler(UUID ownerId) { public RampartCrawler(UUID ownerId) {
super(ownerId, 156, "Rampart Crawler", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}"); super(ownerId, 156, "Rampart Crawler", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Lizard"); this.subtype.add("Lizard");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Rampart Crawler can't be blocked by Walls. // Rampart Crawler can't be blocked by Walls.
this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield))); this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield)));
} }
public RampartCrawler(final RampartCrawler card) { public RampartCrawler(final RampartCrawler card) {
@ -71,5 +72,4 @@ public class RampartCrawler extends CardImpl {
public RampartCrawler copy() { public RampartCrawler copy() {
return new RampartCrawler(this); return new RampartCrawler(this);
} }
} }

View file

@ -43,13 +43,13 @@ import mage.cards.CardImpl;
public class SkulkingFugitive extends CardImpl { public class SkulkingFugitive extends CardImpl {
public SkulkingFugitive(UUID ownerId) { public SkulkingFugitive(UUID ownerId) {
super(ownerId, 161, "Skulking Fugitive", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); super(ownerId, 161, "Skulking Fugitive", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Horror"); this.subtype.add("Horror");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// When Skulking Fugitive becomes the target of a spell or ability, sacrifice it. // When Skulking Fugitive becomes the target of a spell or ability, sacrifice it.
this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect())); this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect()));
@ -63,5 +63,4 @@ public class SkulkingFugitive extends CardImpl {
public SkulkingFugitive copy() { public SkulkingFugitive copy() {
return new SkulkingFugitive(this); return new SkulkingFugitive(this);
} }
} }

View file

@ -53,16 +53,16 @@ public class StrongarmThug extends CardImpl {
} }
public StrongarmThug(UUID ownerId) { public StrongarmThug(UUID ownerId) {
super(ownerId, 165, "Strongarm Thug", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); super(ownerId, 165, "Strongarm Thug", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Mercenary"); this.subtype.add("Mercenary");
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// When Strongarm Thug enters the battlefield, you may return target Mercenary card from your graveyard to your hand. // When Strongarm Thug enters the battlefield, you may return target Mercenary card from your graveyard to your hand.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true); Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true);
ability.addTarget(new TargetCardInYourGraveyard(filter)); ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability); this.addAbility(ability);
} }
@ -75,5 +75,4 @@ public class StrongarmThug extends CardImpl {
public StrongarmThug copy() { public StrongarmThug copy() {
return new StrongarmThug(this); return new StrongarmThug(this);
} }
} }

View file

@ -45,34 +45,34 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/ */
public class ThermalGlider extends CardImpl { public class ThermalGlider extends CardImpl {
private static final FilterCard filter = new FilterCard("Red"); private static final FilterCard filter = new FilterCard("Red");
static { static {
filter.add(new ColorPredicate(ObjectColor.RED)); filter.add(new ColorPredicate(ObjectColor.RED));
} }
public ThermalGlider(UUID ownerId) { public ThermalGlider(UUID ownerId) {
super(ownerId, 53, "Thermal Glider", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); super(ownerId, 53, "Thermal Glider", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.expansionSetCode = "MMQ"; this.expansionSetCode = "MMQ";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Rebel"); this.subtype.add("Rebel");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Protection from red
this.addAbility(new ProtectionAbility(filter));
}
public ThermalGlider(final ThermalGlider card) { // Protection from red
super(card); this.addAbility(new ProtectionAbility(filter));
} }
@Override public ThermalGlider(final ThermalGlider card) {
public ThermalGlider copy() { super(card);
return new ThermalGlider(this); }
}
@Override
public ThermalGlider copy() {
return new ThermalGlider(this);
}
} }

View file

@ -52,18 +52,18 @@ import mage.target.common.TargetCardInHand;
public class StampedeDriver extends CardImpl { public class StampedeDriver extends CardImpl {
public StampedeDriver(UUID ownerId) { public StampedeDriver(UUID ownerId) {
super(ownerId, 122, "Stampede Driver", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{G}"); super(ownerId, 122, "Stampede Driver", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{G}");
this.expansionSetCode = "NMS"; this.expansionSetCode = "NMS";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Spellshaper"); this.subtype.add("Spellshaper");
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {1}{G}, {T}, Discard a card: Creatures you control get +1/+1 and gain trample until end of turn. // {1}{G}, {T}, Discard a card: Creatures you control get +1/+1 and gain trample until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{1}{G}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{1}{G}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new DiscardTargetCost(new TargetCardInHand())); ability.addCost(new DiscardTargetCost(new TargetCardInHand()));
ability.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent())); ability.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent()));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -9,25 +9,24 @@ import mage.cards.CardImpl;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Rarity; import mage.constants.Rarity;
public class HeroesRemembered extends CardImpl{ public class HeroesRemembered extends CardImpl {
public HeroesRemembered(UUID ownerId){ public HeroesRemembered(UUID ownerId){
super(ownerId, 7, "Heroes Remembered", Rarity.RARE, new CardType[] {CardType.SORCERY}, "{6}{W}{W}{W}"); super(ownerId, 7, "Heroes Remembered", Rarity.RARE, new CardType[] {CardType.SORCERY}, "{6}{W}{W}{W}");
this.expansionSetCode = "PLC"; this.expansionSetCode = "PLC";
//You gain 20 life. //You gain 20 life.
this.getSpellAbility().addEffect(new GainLifeEffect(20)); this.getSpellAbility().addEffect(new GainLifeEffect(20));
//Suspend 10-{W} //Suspend 10-{W}
this.addAbility(new SuspendAbility(10, new ManaCostsImpl("{W}"), this)); this.addAbility(new SuspendAbility(10, new ManaCostsImpl("{W}"), this));
} }
public HeroesRemembered(final HeroesRemembered card) { public HeroesRemembered(final HeroesRemembered card) {
super(card); super(card);
} }
@Override
public Card copy() {
return new HeroesRemembered(this);
}
@Override
public Card copy() {
return new HeroesRemembered(this);
}
} }

View file

@ -44,26 +44,26 @@ import mage.constants.Zone;
public class IllusoryAngel extends CardImpl { public class IllusoryAngel extends CardImpl {
public IllusoryAngel(UUID ownerId) { public IllusoryAngel(UUID ownerId) {
super(ownerId, 19, "Illusory Angel", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); super(ownerId, 19, "Illusory Angel", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.expansionSetCode = "PC2"; this.expansionSetCode = "PC2";
this.subtype.add("Angel"); this.subtype.add("Angel");
this.subtype.add("Illusion"); this.subtype.add("Illusion");
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Cast Illusory Angel only if you've cast another spell this turn. // Cast Illusory Angel only if you've cast another spell this turn.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new CastOnlyIfYouHaveCastAnotherSpellEffect())); this.addAbility(new SimpleStaticAbility(Zone.ALL, new CastOnlyIfYouHaveCastAnotherSpellEffect()));
} }
public IllusoryAngel(final IllusoryAngel card) { public IllusoryAngel(final IllusoryAngel card) {
super(card); super(card);
} }
@Override @Override
public IllusoryAngel copy() { public IllusoryAngel copy() {
return new IllusoryAngel(this); return new IllusoryAngel(this);
} }
} }

View file

@ -41,26 +41,24 @@ import mage.cards.CardImpl;
public class ShardlessAgent extends CardImpl { public class ShardlessAgent extends CardImpl {
public ShardlessAgent(UUID ownerId) { public ShardlessAgent(UUID ownerId) {
super(ownerId, 104, "Shardless Agent", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT,CardType.CREATURE}, "{1}{G}{U}"); super(ownerId, 104, "Shardless Agent", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT,CardType.CREATURE}, "{1}{G}{U}");
this.expansionSetCode = "PC2"; this.expansionSetCode = "PC2";
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Rogue"); this.subtype.add("Rogue");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Cascade
this.addAbility(new CascadeAbility());
// Cascade
this.addAbility(new CascadeAbility());
} }
public ShardlessAgent(final ShardlessAgent card) { public ShardlessAgent(final ShardlessAgent card) {
super(card); super(card);
} }
@Override @Override
public ShardlessAgent copy() { public ShardlessAgent copy() {
return new ShardlessAgent(this); return new ShardlessAgent(this);
} }
} }

View file

@ -42,24 +42,22 @@ import mage.cards.CardImpl;
public class Overwhelm extends CardImpl { public class Overwhelm extends CardImpl {
public Overwhelm(UUID ownerId) { public Overwhelm(UUID ownerId) {
super(ownerId, 175, "Overwhelm", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{5}{G}{G}"); super(ownerId, 175, "Overwhelm", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{5}{G}{G}");
this.expansionSetCode = "RAV"; this.expansionSetCode = "RAV";
// Convoke (Each creature you tap while casting this spell reduces its cost by {1} or by one mana of that creature's color.)
this.addAbility(new ConvokeAbility());
// Convoke (Each creature you tap while casting this spell reduces its cost by {1} or by one mana of that creature's color.) // Creatures you control get +3/+3 until end of turn.
this.addAbility(new ConvokeAbility()); this.getSpellAbility().addEffect(new BoostControlledEffect(3, 3, Duration.EndOfTurn));
// Creatures you control get +3/+3 until end of turn.
this.getSpellAbility().addEffect(new BoostControlledEffect(3, 3, Duration.EndOfTurn));
} }
public Overwhelm(final Overwhelm card) { public Overwhelm(final Overwhelm card) {
super(card); super(card);
} }
@Override @Override
public Overwhelm copy() { public Overwhelm copy() {
return new Overwhelm(this); return new Overwhelm(this);
} }
} }

View file

@ -45,11 +45,10 @@ import mage.target.common.TargetCreaturePermanent;
public class InnerCalmOuterStrength extends CardImpl { public class InnerCalmOuterStrength extends CardImpl {
public InnerCalmOuterStrength(UUID ownerId) { public InnerCalmOuterStrength(UUID ownerId) {
super(ownerId, 133, "Inner Calm, Outer Strength", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{G}"); super(ownerId, 133, "Inner Calm, Outer Strength", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{G}");
this.expansionSetCode = "SOK"; this.expansionSetCode = "SOK";
this.subtype.add("Arcane"); this.subtype.add("Arcane");
// Target creature gets +X/+X until end of turn, where X is the number of cards in your hand. // Target creature gets +X/+X until end of turn, where X is the number of cards in your hand.
DynamicValue xValue= new CardsInControllerHandCount(); DynamicValue xValue= new CardsInControllerHandCount();
Effect effect = new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn, true); Effect effect = new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn, true);

View file

@ -48,11 +48,10 @@ import mage.target.common.TargetCreaturePermanent;
public class CrownOfFlames extends CardImpl { public class CrownOfFlames extends CardImpl {
public CrownOfFlames(UUID ownerId) { public CrownOfFlames(UUID ownerId) {
super(ownerId, 169, "Crown of Flames", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{R}"); super(ownerId, 169, "Crown of Flames", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{R}");
this.expansionSetCode = "TMP"; this.expansionSetCode = "TMP";
this.subtype.add("Aura"); this.subtype.add("Aura");
// Enchant creature // Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent(); TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);

View file

@ -49,15 +49,15 @@ import mage.target.common.TargetAttackingCreature;
public class Condemn extends CardImpl { public class Condemn extends CardImpl {
public Condemn(UUID ownerId) { public Condemn(UUID ownerId) {
super(ownerId, 13, "Condemn", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{W}"); super(ownerId, 13, "Condemn", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{W}");
this.expansionSetCode = "10E"; this.expansionSetCode = "10E";
// Put target attacking creature on the bottom of its owner's library. // Put target attacking creature on the bottom of its owner's library.
this.getSpellAbility().addTarget(new TargetAttackingCreature()); this.getSpellAbility().addTarget(new TargetAttackingCreature());
this.getSpellAbility().addEffect(new PutOnLibraryTargetEffect(false)); this.getSpellAbility().addEffect(new PutOnLibraryTargetEffect(false));
// Its controller gains life equal to its toughness. // Its controller gains life equal to its toughness.
this.getSpellAbility().addEffect(new CondemnEffect()); this.getSpellAbility().addEffect(new CondemnEffect());
} }
public Condemn(final Condemn card) { public Condemn(final Condemn card) {
@ -68,7 +68,6 @@ public class Condemn extends CardImpl {
public Condemn copy() { public Condemn copy() {
return new Condemn(this); return new Condemn(this);
} }
} }
class CondemnEffect extends OneShotEffect { class CondemnEffect extends OneShotEffect {
@ -99,5 +98,4 @@ class CondemnEffect extends OneShotEffect {
} }
return false; return false;
} }
} }

View file

@ -61,13 +61,14 @@ public class TriadOfFates extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
private static final FilterCreaturePermanent filterCounter = new FilterCreaturePermanent("creature that has a fate counter on it"); private static final FilterCreaturePermanent filterCounter = new FilterCreaturePermanent("creature that has a fate counter on it");
static { static {
filter.add(new AnotherPredicate()); filter.add(new AnotherPredicate());
filterCounter.add(new CounterPredicate(CounterType.FATE)); filterCounter.add(new CounterPredicate(CounterType.FATE));
} }
public TriadOfFates(UUID ownerId) { public TriadOfFates(UUID ownerId) {
super(ownerId, 206, "Triad of Fates", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{W}{B}"); super(ownerId, 206, "Triad of Fates", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{W}{B}");
this.expansionSetCode = "THS"; this.expansionSetCode = "THS";
this.supertype.add("Legendary"); this.supertype.add("Legendary");
this.subtype.add("Human"); this.subtype.add("Human");
@ -82,6 +83,7 @@ public class TriadOfFates extends CardImpl {
Target target = new TargetCreaturePermanent(filter); Target target = new TargetCreaturePermanent(filter);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability); this.addAbility(ability);
// {W}, {T}: Exile target creature that has a fate counter on it, then return it to the battlefield under its owner's control. // {W}, {T}: Exile target creature that has a fate counter on it, then return it to the battlefield under its owner's control.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new ManaCostsImpl("{W}")); ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new ManaCostsImpl("{W}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
@ -89,6 +91,7 @@ public class TriadOfFates extends CardImpl {
ability.addTarget(target); ability.addTarget(target);
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect()); ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect());
this.addAbility(ability); this.addAbility(ability);
// {B}, {T}: Exile target creature that has a fate counter on it. Its controller draws two cards. // {B}, {T}: Exile target creature that has a fate counter on it. Its controller draws two cards.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl("{B}")); ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl("{B}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
@ -96,7 +99,6 @@ public class TriadOfFates extends CardImpl {
ability.addTarget(target); ability.addTarget(target);
ability.addEffect(new DrawCardControllerTargetEffect()); ability.addEffect(new DrawCardControllerTargetEffect());
this.addAbility(ability); this.addAbility(ability);
} }
public TriadOfFates(final TriadOfFates card) { public TriadOfFates(final TriadOfFates card) {