mirror of
https://github.com/magefree/mage.git
synced 2026-01-24 20:29:19 -08:00
fext tixes
This commit is contained in:
parent
77f15413e6
commit
f16b5881e8
61 changed files with 223 additions and 224 deletions
|
|
@ -53,18 +53,18 @@ import mage.target.common.TargetControlledCreaturePermanent;
|
|||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
|
||||
*
|
||||
*/
|
||||
public class AltarGolem extends CardImpl {
|
||||
|
||||
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped creatures you control");
|
||||
|
||||
|
||||
static {
|
||||
filter.add(Predicates.not(new TappedPredicate()));
|
||||
}
|
||||
|
||||
public AltarGolem(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{7}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{7}");
|
||||
this.subtype.add(SubType.GOLEM);
|
||||
|
||||
this.power = new MageInt(0);
|
||||
|
|
@ -72,17 +72,17 @@ public class AltarGolem extends CardImpl {
|
|||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
|
||||
// Altar Golem's power and toughness are each equal to the number of creatures on the battlefield.
|
||||
DynamicValue amount = new PermanentsOnBattlefieldCount(new FilterCreaturePermanent("creatures in play"));
|
||||
DynamicValue amount = new PermanentsOnBattlefieldCount(new FilterCreaturePermanent("creatures on the battlefield"));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(amount, Duration.EndOfGame)));
|
||||
|
||||
|
||||
// Altar Golem doesn't untap during your untap step.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect()));
|
||||
|
||||
|
||||
// Tap five untapped creatures you control: Untap Altar Golem.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapSourceEffect(), new TapTargetCost(new TargetControlledCreaturePermanent(5, 5, filter, true))));
|
||||
|
||||
|
||||
}
|
||||
|
||||
public AltarGolem(final AltarGolem card) {
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ import mage.util.CardUtil;
|
|||
public class BattlefieldThaumaturge extends CardImpl {
|
||||
|
||||
public BattlefieldThaumaturge(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
||||
this.subtype.add(SubType.HUMAN, SubType.WIZARD);
|
||||
|
||||
this.power = new MageInt(2);
|
||||
|
|
@ -79,10 +79,9 @@ public class BattlefieldThaumaturge extends CardImpl {
|
|||
|
||||
class BattlefieldThaumaturgeSpellsCostReductionEffect extends CostModificationEffectImpl {
|
||||
|
||||
|
||||
public BattlefieldThaumaturgeSpellsCostReductionEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST);
|
||||
this.staticText = "Each instant and sorcery spell you cast costs 1 less to cast for each creature it targets";
|
||||
this.staticText = "Each instant and sorcery spell you cast costs {1} less to cast for each creature it targets";
|
||||
}
|
||||
|
||||
protected BattlefieldThaumaturgeSpellsCostReductionEffect(BattlefieldThaumaturgeSpellsCostReductionEffect effect) {
|
||||
|
|
@ -92,9 +91,9 @@ class BattlefieldThaumaturgeSpellsCostReductionEffect extends CostModificationEf
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source, Ability abilityToModify) {
|
||||
Set<UUID> creaturesTargeted = new HashSet<>();
|
||||
for (Target target: abilityToModify.getTargets()) {
|
||||
for (UUID uuid: target.getTargets()) {
|
||||
Permanent permanent = game.getPermanent(uuid);
|
||||
for (Target target : abilityToModify.getTargets()) {
|
||||
for (UUID uuid : target.getTargets()) {
|
||||
Permanent permanent = game.getPermanent(uuid);
|
||||
if (permanent != null && permanent.isCreature()) {
|
||||
creaturesTargeted.add(permanent.getId());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ public class BloodcrazedHoplite extends CardImpl {
|
|||
}
|
||||
|
||||
public BloodcrazedHoplite(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
||||
this.subtype.add(SubType.HUMAN, SubType.SOLDIER);
|
||||
|
||||
this.power = new MageInt(2);
|
||||
|
|
@ -88,7 +88,7 @@ public class BloodcrazedHoplite extends CardImpl {
|
|||
class BloodcrazedHopliteTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public BloodcrazedHopliteTriggeredAbility() {
|
||||
super(Zone.ALL, new RemoveCounterTargetEffect(CounterType.P1P1.createInstance()), true);
|
||||
super(Zone.ALL, new RemoveCounterTargetEffect(CounterType.P1P1.createInstance()), false);
|
||||
}
|
||||
|
||||
public BloodcrazedHopliteTriggeredAbility(BloodcrazedHopliteTriggeredAbility ability) {
|
||||
|
|
|
|||
|
|
@ -46,15 +46,15 @@ import mage.filter.predicate.mageobject.AbilityPredicate;
|
|||
* @author Plopman
|
||||
*/
|
||||
public class CavalryMaster extends CardImpl {
|
||||
|
||||
|
||||
static final private FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creatures you control with flanking");
|
||||
|
||||
static{
|
||||
|
||||
static {
|
||||
filter.add(new AbilityPredicate(FlankingAbility.class));
|
||||
}
|
||||
|
||||
|
||||
public CavalryMaster(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.KNIGHT);
|
||||
|
||||
|
|
@ -64,7 +64,10 @@ public class CavalryMaster extends CardImpl {
|
|||
// Flanking
|
||||
this.addAbility(new FlankingAbility());
|
||||
// Other creatures you control with flanking have flanking.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(new FlankingAbility(), Duration.WhileOnBattlefield, filter, true)));
|
||||
this.addAbility(new SimpleStaticAbility(
|
||||
Zone.BATTLEFIELD, new GainAbilityAllEffect(new FlankingAbility(), Duration.WhileOnBattlefield, filter, true)
|
||||
.setText("Other creatures you control with flanking have flanking.")
|
||||
));
|
||||
}
|
||||
|
||||
public CavalryMaster(final CavalryMaster card) {
|
||||
|
|
|
|||
|
|
@ -52,13 +52,13 @@ import mage.constants.Zone;
|
|||
public class ChariotOfVictory extends CardImpl {
|
||||
|
||||
public ChariotOfVictory(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
|
||||
this.subtype.add(SubType.EQUIPMENT);
|
||||
|
||||
// Equipped creature has first strike, trample, and haste.
|
||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT));
|
||||
Effect effect = new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.EQUIPMENT);
|
||||
effect.setText(", trample");
|
||||
effect.setText(", trample,");
|
||||
ability.addEffect(effect);
|
||||
effect = new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.EQUIPMENT);
|
||||
effect.setText("and haste");
|
||||
|
|
|
|||
|
|
@ -45,14 +45,13 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class ColossalHeroics extends CardImpl {
|
||||
|
||||
public ColossalHeroics(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}");
|
||||
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}");
|
||||
|
||||
// Strive - Colossal Heroics costs {1}{G} more to cast for each target beyond the first.
|
||||
this.addAbility(new StriveAbility("{1}{G}"));
|
||||
// Any number of target creatures each get +2/+2 until end of turn. Untap those creatures.
|
||||
Effect effect = new BoostTargetEffect(2,2, Duration.EndOfTurn);
|
||||
effect.setText("Any number of target creatures each get +2/+2");
|
||||
Effect effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn);
|
||||
effect.setText("Any number of target creatures each get +2/+2 until end of turn.");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
effect = new UntapTargetEffect();
|
||||
effect.setText("Untap those creatures");
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ import mage.players.Player;
|
|||
public class DakraMystic extends CardImpl {
|
||||
|
||||
public DakraMystic(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}");
|
||||
this.subtype.add(SubType.MERFOLK);
|
||||
this.subtype.add(SubType.WIZARD);
|
||||
|
||||
|
|
@ -63,8 +63,7 @@ public class DakraMystic extends CardImpl {
|
|||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DakraMysticEffect(), new ManaCostsImpl("{U}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
this.addAbility(ability);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public DakraMystic(final DakraMystic card) {
|
||||
|
|
@ -78,38 +77,38 @@ public class DakraMystic extends CardImpl {
|
|||
}
|
||||
|
||||
class DakraMysticEffect extends OneShotEffect {
|
||||
|
||||
|
||||
public DakraMysticEffect() {
|
||||
super(Outcome.Detriment);
|
||||
this.staticText = "Each player reveals the top card of his or her library. You may put the revealed cards into their owners graveyard. If you don't, each player draws a card";
|
||||
this.staticText = "Each player reveals the top card of his or her library. You may put the revealed cards into their owners' graveyard. If you don't, each player draws a card";
|
||||
}
|
||||
|
||||
|
||||
public DakraMysticEffect(final DakraMysticEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public DakraMysticEffect copy() {
|
||||
return new DakraMysticEffect(this);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
for(UUID playerId: game.getState().getPlayersInRange(controller.getId(), game)) {
|
||||
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null && player.getLibrary().hasCards()) {
|
||||
player.revealCards(player.getLogName(), new CardsImpl(player.getLibrary().getFromTop(game)), game);
|
||||
}
|
||||
}
|
||||
if (controller.chooseUse(outcome, "Put revealed cards into graveyard?", source, game)) {
|
||||
for(UUID playerId: game.getState().getPlayersInRange(controller.getId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null && player.getLibrary().hasCards()) {
|
||||
player.moveCards(player.getLibrary().getFromTop(game), Zone.GRAVEYARD, source, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
new DrawCardAllEffect(1).apply(game, source);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ import mage.target.common.TargetOpponent;
|
|||
* @author fireshoes
|
||||
*/
|
||||
public class DementiaSliver extends CardImpl {
|
||||
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("All Slivers");
|
||||
|
||||
static {
|
||||
|
|
@ -59,7 +59,7 @@ public class DementiaSliver extends CardImpl {
|
|||
}
|
||||
|
||||
public DementiaSliver(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{B}");
|
||||
this.subtype.add(SubType.SLIVER);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
|
@ -70,7 +70,12 @@ public class DementiaSliver extends CardImpl {
|
|||
gainedAbility.addTarget(new TargetOpponent());
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
|
||||
new GainAbilityAllEffect(gainedAbility, Duration.WhileOnBattlefield, filter,
|
||||
"All Slivers have \"{T}: Name a card. Target opponent reveals a card at random from his or her hand. If it's the named card, that player discards it\"")));
|
||||
"All Slivers have \"{T}: Choose a card name. "
|
||||
+ "Target opponent reveals a card at random from his or her hand."
|
||||
+ " If that card has the chosen name, that player discards it."
|
||||
+ " Activate this ability only during your turn.\""
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
public DementiaSliver(final DementiaSliver card) {
|
||||
|
|
@ -98,7 +103,7 @@ class DementiaSliverEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Player opponent = game.getPlayer(targetPointer.getFirst(game, source));
|
||||
MageObject sourceObject = game.getObject(source.getSourceId());
|
||||
String cardName = (String) game.getState().getValue(source.getSourceId().toString() + NameACardEffect.INFO_KEY);
|
||||
String cardName = (String) game.getState().getValue(source.getSourceId().toString() + NameACardEffect.INFO_KEY);
|
||||
if (opponent != null && sourceObject != null && !cardName.isEmpty()) {
|
||||
if (!opponent.getHand().isEmpty()) {
|
||||
Cards revealed = new CardsImpl();
|
||||
|
|
@ -121,4 +126,4 @@ class DementiaSliverEffect extends OneShotEffect {
|
|||
return new DementiaSliverEffect(this);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,19 +45,19 @@ import mage.filter.predicate.permanent.ControllerPredicate;
|
|||
*/
|
||||
public class DictateOfErebos extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you control");
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature you control");
|
||||
|
||||
static {
|
||||
filter.add(new ControllerPredicate(TargetController.YOU));
|
||||
}
|
||||
|
||||
public DictateOfErebos(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}");
|
||||
|
||||
// Flash
|
||||
this.addAbility(FlashAbility.getInstance());
|
||||
// Whenever a creature you control dies, each opponent sacrifices a creature.
|
||||
this.addAbility(new DiesCreatureTriggeredAbility(new SacrificeOpponentsEffect(new FilterControlledCreaturePermanent("a creature")), false, filter));
|
||||
this.addAbility(new DiesCreatureTriggeredAbility(new SacrificeOpponentsEffect(new FilterControlledCreaturePermanent("creature")), false, filter));
|
||||
}
|
||||
|
||||
public DictateOfErebos(final DictateOfErebos card) {
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public class Evangelize extends CardImpl {
|
|||
|
||||
// Gain control of target creature of an opponent's choice that he or she controls.
|
||||
GainControlTargetEffect effect = new GainControlTargetEffect(Duration.EndOfGame);
|
||||
effect.setText("Gain control of target creature of an opponent's choice that he or she controls");
|
||||
effect.setText("Gain control of target creature of an opponent's choice he or she controls");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
this.getSpellAbility().addTarget(new TargetOpponentsChoicePermanent(1, 1, filter, false, true));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,32 +53,32 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
*/
|
||||
public class FirewakeSliver extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("All sliver creatures");
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("All Sliver creatures");
|
||||
private static final FilterCreaturePermanent targetSliverFilter = new FilterCreaturePermanent("Sliver");
|
||||
|
||||
static {
|
||||
filter.add(new SubtypePredicate(SubType.SLIVER));
|
||||
targetSliverFilter.add(new SubtypePredicate(SubType.SLIVER));
|
||||
}
|
||||
|
||||
|
||||
public FirewakeSliver(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{G}");
|
||||
this.subtype.add(SubType.SLIVER);
|
||||
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// All Sliver creatures have haste.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter, false)));
|
||||
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter, false)));
|
||||
|
||||
// All Slivers have "{1}, Sacrifice this permanent: Target Sliver creature gets +2/+2 until end of turn."
|
||||
Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2,2,Duration.EndOfTurn), new GenericManaCost(1));
|
||||
Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 2, Duration.EndOfTurn), new GenericManaCost(1));
|
||||
gainedAbility.addCost(new SacrificeSourceCost());
|
||||
gainedAbility.addTarget(new TargetCreaturePermanent(targetSliverFilter));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(
|
||||
gainedAbility, Duration.WhileOnBattlefield,
|
||||
filter, "All Slivers have \"{1}, Sacrifice this permanent: Target Sliver creature gets +2/+2 until end of turn.\"")));
|
||||
|
||||
filter, "All Slivers have \"{1}, Sacrifice this permanent: Target Sliver creature gets +2/+2 until end of turn.\"")));
|
||||
|
||||
}
|
||||
|
||||
public FirewakeSliver(final FirewakeSliver card) {
|
||||
|
|
|
|||
|
|
@ -53,14 +53,14 @@ public class FlagstonesOfTrokair extends CardImpl {
|
|||
}
|
||||
|
||||
public FlagstonesOfTrokair(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
addSuperType(SuperType.LEGENDARY);
|
||||
|
||||
// {tap}: Add {W} to your mana pool.
|
||||
this.addAbility(new WhiteManaAbility());
|
||||
|
||||
// When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library.
|
||||
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, true), true));
|
||||
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, false), true));
|
||||
}
|
||||
|
||||
public FlagstonesOfTrokair(final FlagstonesOfTrokair card) {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ import java.util.UUID;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.DiscardTargetCost;
|
||||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
|
|
@ -43,7 +43,6 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetCardInHand;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
|
|
@ -69,7 +68,7 @@ public class FlowstoneChanneler extends CardImpl {
|
|||
ability.addEffect(effect);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new DiscardTargetCost(new TargetCardInHand()));
|
||||
ability.addCost(new DiscardCardCost());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
/**
|
||||
*
|
||||
* @author LoneFox
|
||||
|
||||
*
|
||||
*/
|
||||
public class GoblinSkycutter extends CardImpl {
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ public class GoblinSkycutter extends CardImpl {
|
|||
}
|
||||
|
||||
public GoblinSkycutter(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
|
||||
this.subtype.add(SubType.GOBLIN);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.power = new MageInt(2);
|
||||
|
|
@ -67,7 +67,7 @@ public class GoblinSkycutter extends CardImpl {
|
|||
|
||||
// Sacrifice Goblin Skycutter: Goblin Skycutter deals 2 damage to target creature with flying. That creature loses flying until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new SacrificeSourceCost());
|
||||
ability.addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn));
|
||||
ability.addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("that creature loses flying until end of turn"));
|
||||
ability.addTarget(new TargetCreaturePermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ import mage.util.CardUtil;
|
|||
public class Godsend extends CardImpl {
|
||||
|
||||
public Godsend(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}{W}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{W}{W}");
|
||||
addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.EQUIPMENT);
|
||||
|
||||
|
|
@ -195,7 +195,7 @@ class GodsendRuleModifyingEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
|
||||
public GodsendRuleModifyingEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||
staticText = "Opponents can't cast cards with the same name as cards exiled with {this}";
|
||||
staticText = "Your opponents can't cast cards with the same name as cards exiled with {this}";
|
||||
}
|
||||
|
||||
public GodsendRuleModifyingEffect(final GodsendRuleModifyingEffect effect) {
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ import java.util.UUID;
|
|||
public class Greenseeker extends CardImpl {
|
||||
|
||||
public Greenseeker(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
|
||||
this.subtype.add(SubType.ELF);
|
||||
this.subtype.add(SubType.SPELLSHAPER);
|
||||
this.power = new MageInt(1);
|
||||
|
|
@ -59,8 +59,8 @@ public class Greenseeker extends CardImpl {
|
|||
|
||||
// {G}, {tap}, Discard a card: Search your library for a basic land card, reveal it, and put it into your hand. Then shuffle your library.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, StaticFilters.FILTER_BASIC_LAND_CARD), true, true),
|
||||
new ManaCostsImpl("{G}"));
|
||||
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(1, 1, StaticFilters.FILTER_BASIC_LAND_CARD), true, true),
|
||||
new ManaCostsImpl("{G}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new DiscardCardCost());
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public class Hubris extends CardImpl {
|
||||
|
||||
public Hubris(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
|
||||
|
||||
// Return target creature and all Auras attached to it to their owners' hand.
|
||||
this.getSpellAbility().addEffect(new HubrisReturnEffect());
|
||||
|
|
@ -80,7 +80,7 @@ class HubrisReturnEffect extends OneShotEffect {
|
|||
|
||||
public HubrisReturnEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "Return target creature and all Auras attached to it to their owners' hand";
|
||||
this.staticText = "Return target creature and all Auras attached to it to their owners' hands";
|
||||
}
|
||||
|
||||
public HubrisReturnEffect(final HubrisReturnEffect effect) {
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public class LaunchTheFleet extends CardImpl {
|
|||
// Until end of turn, any number of target creatures each gain "Whenever this creature attacks, create a 1/1 white Soldier token tapped and attacking."
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, Integer.MAX_VALUE));
|
||||
Effect effect = new GainAbilityTargetEffect(new AttacksTriggeredAbility(new CreateTokenEffect(new SoldierToken(), 1, true, true), false), Duration.EndOfTurn);
|
||||
effect.setText("Until end of turn, any number of target creatures each gain \"Whenever this creature attacks, create a 1/1 white Soldier token tapped and attacking.\"");
|
||||
effect.setText("Until end of turn, any number of target creatures each gain \"Whenever this creature attacks, create a 1/1 white Soldier creature token that's tapped and attacking.\"");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ import mage.target.targetpointer.FixedTarget;
|
|||
*/
|
||||
public class LimDulTheNecromancer extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature an opponent controls");
|
||||
private static final FilterPermanent filter2 = new FilterPermanent("Zombie");
|
||||
|
||||
static {
|
||||
|
|
@ -67,7 +67,7 @@ public class LimDulTheNecromancer extends CardImpl {
|
|||
}
|
||||
|
||||
public LimDulTheNecromancer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{B}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}{B}");
|
||||
addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.WIZARD);
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ import mage.target.common.TargetCreatureOrPlayer;
|
|||
public class MagusOfTheScroll extends CardImpl {
|
||||
|
||||
public MagusOfTheScroll(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}");
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.WIZARD);
|
||||
this.power = new MageInt(1);
|
||||
|
|
@ -85,7 +85,7 @@ class MagusOfTheScrollEffect extends OneShotEffect {
|
|||
|
||||
public MagusOfTheScrollEffect() {
|
||||
super(Outcome.Neutral);
|
||||
staticText = "Reveal a card at random from your hand. If it's the named card, {this} deals 2 damage to target creature or player";
|
||||
staticText = ", then reveal a card at random from your hand. If it's the named card, {this} deals 2 damage to target creature or player";
|
||||
}
|
||||
|
||||
public MagusOfTheScrollEffect(final MagusOfTheScrollEffect effect) {
|
||||
|
|
@ -126,4 +126,4 @@ class MagusOfTheScrollEffect extends OneShotEffect {
|
|||
public MagusOfTheScrollEffect copy() {
|
||||
return new MagusOfTheScrollEffect(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public class MangaraOfCorondor extends CardImpl {
|
|||
|
||||
// {T}: Exile Mangara of Corondor and target permanent.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileSourceEffect(), new TapSourceCost());
|
||||
ability.addEffect(new ExileTargetEffect());
|
||||
ability.addEffect(new ExileTargetEffect().setText("and target permanent"));
|
||||
ability.addTarget(new TargetPermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public class MirrorUniverse extends CardImpl {
|
|||
Zone.BATTLEFIELD,
|
||||
new ExchangeLifeTargetEffect(),
|
||||
new TapSourceCost(),
|
||||
new IsStepCondition(PhaseStep.UPKEEP),
|
||||
new IsStepCondition(PhaseStep.UPKEEP, true),
|
||||
null);
|
||||
ability.addCost(new SacrificeSourceCost());
|
||||
ability.addTarget(new TargetOpponent());
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ import mage.constants.Zone;
|
|||
public class MogissWarhound extends CardImpl {
|
||||
|
||||
public MogissWarhound(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{1}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{1}{R}");
|
||||
this.subtype.add(SubType.HOUND);
|
||||
|
||||
this.power = new MageInt(2);
|
||||
|
|
@ -62,13 +62,13 @@ public class MogissWarhound extends CardImpl {
|
|||
// Mogis's Warhound attacks each turn if able.
|
||||
this.addAbility(new AttacksEachCombatStaticAbility());
|
||||
// Enchanted creature gets +2/+2 and attacks each turn if able.
|
||||
Effect effect = new BoostEnchantedEffect(2,2,Duration.WhileOnBattlefield);
|
||||
Effect effect = new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield);
|
||||
effect.setText("Enchanted creature gets +2/+2");
|
||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
|
||||
effect = new AttacksIfAbleAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.AURA);
|
||||
effect.setText("and attacks each turn if able");
|
||||
effect.setText("and attacks each combat if able");
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(ability);
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public MogissWarhound(final MogissWarhound card) {
|
||||
|
|
|
|||
|
|
@ -49,17 +49,17 @@ import mage.target.TargetPermanent;
|
|||
public class Molder extends CardImpl {
|
||||
|
||||
public Molder(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}");
|
||||
|
||||
// Destroy target artifact or enchantment with converted mana cost X. It can't be regenerated. You gain X life.
|
||||
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
||||
this.getSpellAbility().addEffect(new DestroyTargetEffect(true));
|
||||
this.getSpellAbility().addTarget(new TargetPermanent(new FilterArtifactOrEnchantmentPermanent("artifact or enchantment with converted mana cost X")));
|
||||
this.getSpellAbility().addEffect(new GainLifeEffect(new ManacostVariableValue()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void adjustTargets(Ability ability, Game game) {
|
||||
if(ability instanceof SpellAbility) {
|
||||
if (ability instanceof SpellAbility) {
|
||||
ability.getTargets().clear();
|
||||
int xValue = ability.getManaCostsToPay().getX();
|
||||
FilterArtifactOrEnchantmentPermanent filter = new FilterArtifactOrEnchantmentPermanent("artifact or enchantment with converted mana cost X");
|
||||
|
|
|
|||
|
|
@ -46,14 +46,17 @@ import mage.target.common.TargetCardInLibrary;
|
|||
*/
|
||||
public class MwonvuliAcidMoss extends CardImpl {
|
||||
|
||||
public MwonvuliAcidMoss(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}{G}");
|
||||
|
||||
FilterLandCard filterForest = new FilterLandCard();
|
||||
private static final FilterLandCard filterForest = new FilterLandCard("Forest card");
|
||||
|
||||
static {
|
||||
filterForest.add(new SubtypePredicate(SubType.FOREST));
|
||||
|
||||
}
|
||||
|
||||
public MwonvuliAcidMoss(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}{G}");
|
||||
|
||||
// Destroy target land. Search your library for a Forest card and put that card onto the battlefield tapped. Then shuffle your library.
|
||||
this.getSpellAbility().addEffect(new DestroyTargetEffect(true));
|
||||
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
||||
this.getSpellAbility().addTarget(new TargetPermanent(new FilterLandPermanent()));
|
||||
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filterForest), true, true));
|
||||
}
|
||||
|
|
@ -67,4 +70,3 @@ public class MwonvuliAcidMoss extends CardImpl {
|
|||
return new MwonvuliAcidMoss(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ import mage.target.TargetCard;
|
|||
public class NessianGameWarden extends CardImpl {
|
||||
|
||||
public NessianGameWarden(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}");
|
||||
this.subtype.add(SubType.BEAST);
|
||||
|
||||
this.power = new MageInt(4);
|
||||
|
|
@ -87,7 +87,7 @@ class NessianGameWardenEffect extends OneShotEffect {
|
|||
|
||||
public NessianGameWardenEffect() {
|
||||
super(Outcome.DrawCard);
|
||||
this.staticText = "look at the top X cards of your library, where X is the number of forests you control. You may reveal a creature card from among them and put it into your hand. Put the rest on the bottom of your library in any order";
|
||||
this.staticText = "look at the top X cards of your library, where X is the number of Forests you control. You may reveal a creature card from among them and put it into your hand. Put the rest on the bottom of your library in any order";
|
||||
}
|
||||
|
||||
public NessianGameWardenEffect(final NessianGameWardenEffect effect) {
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ import mage.filter.predicate.permanent.ControllerPredicate;
|
|||
public class PendelhavenElder extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("each 1/1 creature you control");
|
||||
|
||||
static {
|
||||
filter.add(new PowerPredicate(ComparisonType.EQUAL_TO, 1));
|
||||
filter.add(new ToughnessPredicate(ComparisonType.EQUAL_TO, 1));
|
||||
|
|
@ -59,14 +60,17 @@ public class PendelhavenElder extends CardImpl {
|
|||
}
|
||||
|
||||
public PendelhavenElder(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
||||
this.subtype.add(SubType.ELF);
|
||||
this.subtype.add(SubType.SHAMAN);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// {tap}: Each 1/1 creature you control gets +1/+2 until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 2, Duration.EndOfTurn, filter, false), new TapSourceCost()));
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 2, Duration.EndOfTurn, filter, false)
|
||||
.setText("Each 1/1 creature you control gets +1/+2 until end of turn."),
|
||||
new TapSourceCost()
|
||||
));
|
||||
}
|
||||
|
||||
public PendelhavenElder(final PendelhavenElder card) {
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ class PharikaExileEffect extends OneShotEffect {
|
|||
|
||||
public PharikaExileEffect() {
|
||||
super(Outcome.PutCreatureInPlay);
|
||||
staticText = "Exile target creature card from a graveyard. It's owner creates a 1/1 black and green Snake enchantment creature token with deathtouch";
|
||||
staticText = "Exile target creature card from a graveyard. Its owner creates a 1/1 black and green Snake enchantment creature token with deathtouch";
|
||||
}
|
||||
|
||||
public PharikaExileEffect(final PharikaExileEffect effect) {
|
||||
|
|
|
|||
|
|
@ -29,19 +29,20 @@ package mage.cards.p;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.Mana;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.dynamicvalue.common.DomainValue;
|
||||
import mage.abilities.mana.DynamicManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
|
||||
public class PrismaticGeoscope extends CardImpl {
|
||||
|
||||
public PrismaticGeoscope(UUID ownerId, CardSetInfo setInfo) {
|
||||
|
|
@ -51,8 +52,13 @@ public class PrismaticGeoscope extends CardImpl {
|
|||
this.addAbility(new EntersBattlefieldTappedAbility());
|
||||
|
||||
// <i>Domain</i> — {T}: Add X mana in any combination of colors to your mana pool, where X is the number of basic land types among lands you control.
|
||||
this.addAbility(new DynamicManaAbility(new Mana(0,0,0,0,0,0,1, 0), new DomainValue(), new TapSourceCost(),
|
||||
"Add X mana in any combination of colors to your mana pool, where X is the number of basic land types among lands you control."));
|
||||
Ability ability = new DynamicManaAbility(
|
||||
new Mana(0, 0, 0, 0, 0, 0, 1, 0), new DomainValue(), new TapSourceCost(),
|
||||
"Add X mana in any combination of colors to your mana pool,"
|
||||
+ " where X is the number of basic land types among lands you control."
|
||||
);
|
||||
ability.setAbilityWord(AbilityWord.DOMAIN);
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public PrismaticGeoscope(final PrismaticGeoscope card) {
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ import mage.target.targetpointer.FixedTarget;
|
|||
public class PropheticFlamespeaker extends CardImpl {
|
||||
|
||||
public PropheticFlamespeaker(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}");
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.SHAMAN);
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ class PropheticFlamespeakerExileEffect extends OneShotEffect {
|
|||
|
||||
public PropheticFlamespeakerExileEffect() {
|
||||
super(Outcome.Detriment);
|
||||
this.staticText = "Exile the top card of your library. You may play it this turn";
|
||||
this.staticText = "exile the top card of your library. You may play it this turn";
|
||||
}
|
||||
|
||||
public PropheticFlamespeakerExileEffect(final PropheticFlamespeakerExileEffect effect) {
|
||||
|
|
@ -142,7 +142,7 @@ class PropheticFlamespeakerCastFromExileEffect extends AsThoughEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
|
||||
return source.getControllerId().equals(affectedControllerId) &&
|
||||
objectId.equals(getTargetPointer().getFirst(game, source));
|
||||
return source.getControllerId().equals(affectedControllerId)
|
||||
&& objectId.equals(getTargetPointer().getFirst(game, source));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,9 +33,7 @@ import mage.abilities.keyword.BuybackAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.TargetSpell;
|
||||
|
||||
/**
|
||||
|
|
@ -43,23 +41,15 @@ import mage.target.TargetSpell;
|
|||
* @author fireshoes
|
||||
*/
|
||||
public class Reiterate extends CardImpl {
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell();
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(
|
||||
new CardTypePredicate(CardType.INSTANT),
|
||||
new CardTypePredicate(CardType.SORCERY)));
|
||||
}
|
||||
|
||||
public Reiterate(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}{R}");
|
||||
|
||||
// Buyback {3}
|
||||
this.addAbility(new BuybackAbility("{3}"));
|
||||
|
||||
|
||||
// Copy target instant or sorcery spell. You may choose new targets for the copy.
|
||||
this.getSpellAbility().addTarget(new TargetSpell(filter));
|
||||
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_INSTANT_OR_SORCERY_SPELL));
|
||||
this.getSpellAbility().addEffect(new CopyTargetSpellEffect());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,14 +48,13 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
|
|||
public class RiptideChimera extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("an enchantment you control");
|
||||
|
||||
|
||||
static {
|
||||
filter.add(new CardTypePredicate(CardType.ENCHANTMENT));
|
||||
}
|
||||
|
||||
|
||||
|
||||
public RiptideChimera(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{2}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{2}{U}");
|
||||
this.subtype.add(SubType.CHIMERA);
|
||||
|
||||
this.power = new MageInt(3);
|
||||
|
|
@ -65,7 +64,7 @@ public class RiptideChimera extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
// At the beginning of your upkeep, return an enchantment you control to its owner's hand.
|
||||
Effect effect = new ReturnToHandChosenControlledPermanentEffect(filter, 1);
|
||||
effect.setText("return an enchanment you control to its owner's hand");
|
||||
effect.setText("return an enchantment you control to its owner's hand");
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(effect, TargetController.YOU, false));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ class RitualOfTheReturnedExileEffect extends OneShotEffect {
|
|||
|
||||
public RitualOfTheReturnedExileEffect() {
|
||||
super(Outcome.PutCreatureInPlay);
|
||||
this.staticText = "Exile target creature card from your graveyard. Create a black Zombie creature token with power equal to the exiled card's power and toughness equal to the exiled card's toughness";
|
||||
this.staticText = "Exile target creature card from your graveyard. Create a black Zombie creature token. Its power is equal to that card's power and its toughness is equal to that card's toughness.";
|
||||
}
|
||||
|
||||
public RitualOfTheReturnedExileEffect(final RitualOfTheReturnedExileEffect effect) {
|
||||
|
|
|
|||
|
|
@ -42,16 +42,14 @@ import mage.constants.SubType;
|
|||
*/
|
||||
public class ScarwoodTreefolk extends CardImpl {
|
||||
|
||||
private static final String staticText = "{this} enters the battlefield tapped";
|
||||
|
||||
public ScarwoodTreefolk(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
|
||||
this.subtype.add(SubType.TREEFOLK);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(5);
|
||||
|
||||
// Scarwood Treefolk enters the battlefield tapped.
|
||||
this.addAbility(new EntersBattlefieldAbility(new TapSourceEffect(), staticText));
|
||||
this.addAbility(new EntersBattlefieldAbility(new TapSourceEffect(), "tapped"));
|
||||
}
|
||||
|
||||
public ScarwoodTreefolk(final ScarwoodTreefolk card) {
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ public class ScreechingSliver extends CardImpl {
|
|||
private static final FilterPermanent filter = new FilterPermanent(SubType.SLIVER, "All Slivers");
|
||||
|
||||
public ScreechingSliver(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}");
|
||||
this.subtype.add(SubType.SLIVER);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
|
@ -63,7 +63,7 @@ public class ScreechingSliver extends CardImpl {
|
|||
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
|
||||
new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield,
|
||||
filter, "All Sliver creatures have \"{T}: Target player puts the top card of his or her library into his or her graveyard.\"")));
|
||||
filter, "All Slivers have \"{T}: Target player puts the top card of his or her library into his or her graveyard.\"")));
|
||||
}
|
||||
|
||||
public ScreechingSliver(final ScreechingSliver card) {
|
||||
|
|
|
|||
|
|
@ -53,13 +53,14 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
*/
|
||||
public class ScrybRanger extends CardImpl {
|
||||
|
||||
private static final FilterControlledLandPermanent filterForest = new FilterControlledLandPermanent("Forest");
|
||||
private static final FilterControlledLandPermanent filterForest = new FilterControlledLandPermanent("a Forest");
|
||||
|
||||
static {
|
||||
filterForest.add(new SubtypePredicate(SubType.FOREST));
|
||||
}
|
||||
|
||||
public ScrybRanger(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
||||
this.subtype.add(SubType.FAERIE);
|
||||
|
||||
this.power = new MageInt(1);
|
||||
|
|
|
|||
|
|
@ -58,20 +58,19 @@ public class SetessanTactics extends CardImpl {
|
|||
}
|
||||
|
||||
public SetessanTactics(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}");
|
||||
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}");
|
||||
|
||||
// Strive - Setessan Tactics costs G more to cast for each target beyond the first.
|
||||
this.addAbility(new StriveAbility("{G}"));
|
||||
// Until end of turn, any number of target creatures each get +1/+1 and gain "T: This creature fights another target creature."
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, Integer.MAX_VALUE));
|
||||
Effect effect = new BoostTargetEffect(1,1, Duration.EndOfTurn);
|
||||
Effect effect = new BoostTargetEffect(1, 1, Duration.EndOfTurn);
|
||||
effect.setText("Until end of turn, any number of target creatures each get +1/+1");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new FightTargetSourceEffect(), new TapSourceCost());
|
||||
gainedAbility.addTarget(new TargetCreaturePermanent(filter));
|
||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(gainedAbility, Duration.EndOfTurn,
|
||||
"and gain \"T: This creature fights another target creature.\""));
|
||||
"and gain \"{T}: This creature fights another target creature.\""));
|
||||
}
|
||||
|
||||
public SetessanTactics(final SetessanTactics card) {
|
||||
|
|
|
|||
|
|
@ -48,20 +48,23 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
|
|||
public class SidewinderSliver extends CardImpl {
|
||||
|
||||
static final private FilterCreaturePermanent filter = new FilterCreaturePermanent("All Sliver creatures");
|
||||
|
||||
static{
|
||||
|
||||
static {
|
||||
filter.add(new SubtypePredicate(SubType.SLIVER));
|
||||
}
|
||||
|
||||
|
||||
public SidewinderSliver(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}");
|
||||
this.subtype.add(SubType.SLIVER);
|
||||
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// All Sliver creatures have flanking.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(new FlankingAbility(), Duration.WhileOnBattlefield, filter, false)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
|
||||
new GainAbilityAllEffect(new FlankingAbility(), Duration.WhileOnBattlefield, filter, false)
|
||||
.setText("all Slivers have flanking")
|
||||
));
|
||||
}
|
||||
|
||||
public SidewinderSliver(final SidewinderSliver card) {
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ class SpellSwindleEffect extends OneShotEffect {
|
|||
public SpellSwindleEffect() {
|
||||
super(Outcome.Detriment);
|
||||
staticText = "Counter target spell. Create X colorless Treasure artifact tokens, where X is that spell's converted mana cost. "
|
||||
+ "They have \"{T}, Sacrifice this artifact: Add one mana of any color to your mana pool\"";
|
||||
+ "They have \"{T}, Sacrifice this artifact: Add one mana of any color to your mana pool.\"";
|
||||
}
|
||||
|
||||
public SpellSwindleEffect(final SpellSwindleEffect effect) {
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ import mage.constants.Zone;
|
|||
public class Spirespine extends CardImpl {
|
||||
|
||||
public Spirespine(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{2}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{2}{G}");
|
||||
this.subtype.add(SubType.BEAST);
|
||||
|
||||
this.power = new MageInt(4);
|
||||
|
|
@ -61,12 +61,12 @@ public class Spirespine extends CardImpl {
|
|||
this.addAbility(new BestowAbility(this, "{4}{G}"));
|
||||
// Spirespine blocks each turn if able.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BlocksIfAbleSourceEffect(Duration.WhileOnBattlefield)));
|
||||
// Enchanted creature gets +4/+1 and blocks each turn if able.
|
||||
Effect effect = new BoostEnchantedEffect(4,1, Duration.WhileOnBattlefield);
|
||||
// Enchanted creature gets +4/+1 and blocks each combat if able.
|
||||
Effect effect = new BoostEnchantedEffect(4, 1, Duration.WhileOnBattlefield);
|
||||
effect.setText("Enchanted creature gets +4/+1");
|
||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
|
||||
effect = new BlocksIfAbleAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.AURA);
|
||||
effect.setText("and blocks each turn if able");
|
||||
effect.setText("and blocks each combat if able");
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public class StormFleetAerialist extends CardImpl {
|
|||
// Raid - Storm Fleet Aerialist enters the battlefield with a +1/+1 counter on it if you attacked with a creature this turn.
|
||||
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1), false),
|
||||
RaidCondition.instance,
|
||||
"<i>Raid</i> - {this} enters the battlefield with a +1/+1 counter on it if you attacked with a creature this turn",
|
||||
"<i>Raid</i> - {this} enters the battlefield with a +1/+1 counter on it if you attacked with a creature this turn.",
|
||||
"{this} enters the battlefield with a +1/+1 counter"),
|
||||
new PlayerAttackedWatcher());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
*/
|
||||
public class StranglingSoot extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with toughess 3 or less");
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with toughness 3 or less");
|
||||
|
||||
static {
|
||||
filter.add(new ToughnessPredicate(ComparisonType.FEWER_THAN, 4));
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ import mage.game.events.GameEvent.EventType;
|
|||
public class SwarmbornGiant extends CardImpl {
|
||||
|
||||
public SwarmbornGiant(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
|
||||
this.subtype.add(SubType.GIANT);
|
||||
|
||||
this.power = new MageInt(6);
|
||||
|
|
@ -67,13 +67,13 @@ public class SwarmbornGiant extends CardImpl {
|
|||
|
||||
// {4}{G}{G}: Monstrosity 2.
|
||||
this.addAbility(new MonstrosityAbility("{4}{G}{G}", 2));
|
||||
|
||||
|
||||
// As long as Swarmborn Giant is monstrous, it has reach.
|
||||
Ability ability = new SimpleStaticAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new ConditionalContinuousEffect(new GainAbilitySourceEffect(ReachAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||
MonstrousCondition.instance,
|
||||
"As long as {this} is monstrous, it has reach"));
|
||||
MonstrousCondition.instance,
|
||||
"As long as {this} is monstrous, it has reach"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
@ -118,6 +118,6 @@ class SwarmbornGiantTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever you're dealt combat damage, " + super.getRule();
|
||||
return "When you're dealt combat damage, " + super.getRule();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,9 +72,6 @@ public class VesuvanShapeshifter extends CardImpl {
|
|||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(0);
|
||||
|
||||
// Morph {1}{U}
|
||||
this.addAbility(new MorphAbility(this, new ManaCostsImpl("{1}{U}")));
|
||||
|
||||
// As Vesuvan Shapeshifter turned face up, may choose another creature. If you do, until Vesuvan Shapeshifter is turned face down, it becomes a copy of that creature
|
||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new AsTurnedFaceUpEffect(new VesuvanShapeshifterEffect(), false));
|
||||
ability.setWorksFaceDown(true);
|
||||
|
|
@ -91,6 +88,9 @@ public class VesuvanShapeshifter extends CardImpl {
|
|||
effect = new VesuvanShapeshifterFaceDownEffect();
|
||||
ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, true);
|
||||
this.addAbility(ability);
|
||||
|
||||
// Morph {1}{U}
|
||||
this.addAbility(new MorphAbility(this, new ManaCostsImpl("{1}{U}")));
|
||||
}
|
||||
|
||||
public VesuvanShapeshifter(final VesuvanShapeshifter card) {
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ import mage.constants.CardType;
|
|||
public class WheelOfFate extends CardImpl {
|
||||
|
||||
public WheelOfFate(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "");
|
||||
|
||||
this.color.setRed(true);
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ public class WheelOfFate extends CardImpl {
|
|||
this.addAbility(new SuspendAbility(4, new ManaCostsImpl("{1}{R}"), this));
|
||||
// Each player discards his or her hand, then draws seven cards.
|
||||
this.getSpellAbility().addEffect(new DiscardHandAllEffect());
|
||||
this.getSpellAbility().addEffect(new DrawCardAllEffect(7));
|
||||
this.getSpellAbility().addEffect(new DrawCardAllEffect(7).setText(", then draws seven cards"));
|
||||
}
|
||||
|
||||
public WheelOfFate(final WheelOfFate card) {
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ import mage.constants.Zone;
|
|||
public class WormwoodDryad extends CardImpl {
|
||||
|
||||
public WormwoodDryad(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
||||
this.subtype.add(SubType.DRYAD);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(1);
|
||||
|
|
@ -58,13 +58,13 @@ public class WormwoodDryad extends CardImpl {
|
|||
// {G}: Wormwood Dryad gains forestwalk until end of turn and deals 1 damage to you.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new GainAbilitySourceEffect(new ForestwalkAbility(false), Duration.EndOfTurn), new ManaCostsImpl("{G}"));
|
||||
ability.addEffect(new DamageControllerEffect(1));
|
||||
ability.addEffect(new DamageControllerEffect(1).setText("and deals 1 damage to you"));
|
||||
this.addAbility(ability);
|
||||
|
||||
// {B}: Wormwood Dryad gains swampwalk until end of turn and deals 1 damage to you.
|
||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new GainAbilitySourceEffect(new SwampwalkAbility(false), Duration.EndOfTurn), new ManaCostsImpl("{B}"));
|
||||
ability.addEffect(new DamageControllerEffect(1));
|
||||
ability.addEffect(new DamageControllerEffect(1).setText("and deals 1 damage to you"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue