mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
so many text fixes
This commit is contained in:
parent
bc2bfba02a
commit
0075535650
70 changed files with 163 additions and 126 deletions
|
@ -56,7 +56,7 @@ import java.util.*;
|
||||||
*/
|
*/
|
||||||
public class AdmiralBeckettBrass extends CardImpl {
|
public class AdmiralBeckettBrass extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("other Pirates you control");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Pirates you control");
|
||||||
private static final FilterNonlandPermanent filter2 = new FilterNonlandPermanent("nonland permanent controlled by a player who was dealt combat damage by three or more Pirates this turn");
|
private static final FilterNonlandPermanent filter2 = new FilterNonlandPermanent("nonland permanent controlled by a player who was dealt combat damage by three or more Pirates this turn");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
|
@ -49,7 +49,7 @@ import mage.filter.predicate.permanent.ControllerPredicate;
|
||||||
*/
|
*/
|
||||||
public class BellowingAegisaur extends CardImpl {
|
public class BellowingAegisaur extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("each other creature you control");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("other creature you control");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new ControllerPredicate(TargetController.YOU));
|
filter.add(new ControllerPredicate(TargetController.YOU));
|
||||||
|
|
|
@ -54,7 +54,7 @@ import mage.target.common.TargetCreaturePermanent;
|
||||||
*/
|
*/
|
||||||
public class CaptivatingCrew extends CardImpl {
|
public class CaptivatingCrew extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("target creature an opponent controls");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new ControllerPredicate(TargetController.OPPONENT));
|
filter.add(new ControllerPredicate(TargetController.OPPONENT));
|
||||||
|
|
|
@ -53,7 +53,7 @@ import mage.players.Player;
|
||||||
public class DarienKingOfKjeldor extends CardImpl {
|
public class DarienKingOfKjeldor extends CardImpl {
|
||||||
|
|
||||||
public DarienKingOfKjeldor(UUID ownerId, CardSetInfo setInfo) {
|
public DarienKingOfKjeldor(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}");
|
||||||
addSuperType(SuperType.LEGENDARY);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.subtype.add(SubType.HUMAN);
|
||||||
this.subtype.add(SubType.SOLDIER);
|
this.subtype.add(SubType.SOLDIER);
|
||||||
|
@ -74,6 +74,7 @@ public class DarienKingOfKjeldor extends CardImpl {
|
||||||
return new DarienKingOfKjeldor(this);
|
return new DarienKingOfKjeldor(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DarienKingOfKjeldorTriggeredAbility extends TriggeredAbilityImpl {
|
class DarienKingOfKjeldorTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
public DarienKingOfKjeldorTriggeredAbility() {
|
public DarienKingOfKjeldorTriggeredAbility() {
|
||||||
|
@ -105,7 +106,7 @@ class DarienKingOfKjeldorTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever you are dealt damage, you may create that many 1/1 white Soldier creature tokens.";
|
return "Whenever you're dealt damage, you may create that many 1/1 white Soldier creature tokens.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,4 +134,4 @@ class DarienKingOfKjeldorEffect extends OneShotEffect {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,7 +65,7 @@ import mage.players.Player;
|
||||||
public class DralnusPet extends CardImpl {
|
public class DralnusPet extends CardImpl {
|
||||||
|
|
||||||
public DralnusPet(UUID ownerId, CardSetInfo setInfo) {
|
public DralnusPet(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}");
|
||||||
this.subtype.add(SubType.SHAPESHIFTER);
|
this.subtype.add(SubType.SHAPESHIFTER);
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
@ -77,7 +77,7 @@ public class DralnusPet extends CardImpl {
|
||||||
this.addAbility(new KickerAbility(kickerCosts));
|
this.addAbility(new KickerAbility(kickerCosts));
|
||||||
// If Dralnu's Pet was kicked, it enters the battlefield with flying and with X +1/+1 counters on it, where X is the discarded card's converted mana cost.
|
// If Dralnu's Pet was kicked, it enters the battlefield with flying and with X +1/+1 counters on it, where X is the discarded card's converted mana cost.
|
||||||
Ability ability = new EntersBattlefieldAbility(new DralnusPetEffect(), KickedCondition.instance,
|
Ability ability = new EntersBattlefieldAbility(new DralnusPetEffect(), KickedCondition.instance,
|
||||||
"If {this} was kicked, it enters the battlefield with flying and with X +1/+1 counters on it, where X is the discarded card's converted mana cost", "");
|
"If {this} was kicked, it enters the battlefield with flying and with X +1/+1 counters on it, where X is the discarded card's converted mana cost.", "");
|
||||||
ability.addEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield));
|
ability.addEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ public class DreamcallerSiren extends CardImpl {
|
||||||
ability.addTarget(new TargetNonlandPermanent(0, 2, false));
|
ability.addTarget(new TargetNonlandPermanent(0, 2, false));
|
||||||
this.addAbility(new ConditionalTriggeredAbility(ability,
|
this.addAbility(new ConditionalTriggeredAbility(ability,
|
||||||
new PermanentsOnTheBattlefieldCondition(filter),
|
new PermanentsOnTheBattlefieldCondition(filter),
|
||||||
"when {this} enters the battlefield, if you control another Pirate, tap up to two nonland permanents."));
|
"when {this} enters the battlefield, if you control another Pirate, tap up to two target nonland permanents."));
|
||||||
}
|
}
|
||||||
|
|
||||||
public DreamcallerSiren(final DreamcallerSiren card) {
|
public DreamcallerSiren(final DreamcallerSiren card) {
|
||||||
|
|
|
@ -46,7 +46,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||||
*/
|
*/
|
||||||
public class DroverOfTheMighty extends CardImpl {
|
public class DroverOfTheMighty extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterPermanent("a Dinosaur");
|
private static final FilterPermanent filter = new FilterPermanent("Dinosaur");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new SubtypePredicate(SubType.DINOSAUR));
|
filter.add(new SubtypePredicate(SubType.DINOSAUR));
|
||||||
|
|
|
@ -76,7 +76,7 @@ public class FathomFleetCaptain extends CardImpl {
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new ConditionalTriggeredAbility(
|
||||||
new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new PirateToken()), new GenericManaCost(2)), false),
|
new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new PirateToken()), new GenericManaCost(2)), false),
|
||||||
new PermanentsOnTheBattlefieldCondition(filter),
|
new PermanentsOnTheBattlefieldCondition(filter),
|
||||||
"Whenever {this} attacks, if you control another nontoken Pirate, you may pay {2}. If you do, creature a 2/2 black Pirate creature token with menace"));
|
"Whenever {this} attacks, if you control another nontoken Pirate, you may pay {2}. If you do, create a 2/2 black Pirate creature token with menace"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public FathomFleetCaptain(final FathomFleetCaptain card) {
|
public FathomFleetCaptain(final FathomFleetCaptain card) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ import mage.filter.predicate.mageobject.SupertypePredicate;
|
||||||
*/
|
*/
|
||||||
public class FreyalisesRadiance extends CardImpl {
|
public class FreyalisesRadiance extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterPermanent();
|
private static final FilterPermanent filter = new FilterPermanent("snow permanents");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new SupertypePredicate(SuperType.SNOW));
|
filter.add(new SupertypePredicate(SuperType.SNOW));
|
||||||
|
|
|
@ -32,6 +32,7 @@ import mage.abilities.dynamicvalue.common.DomainValue;
|
||||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
@ -43,12 +44,12 @@ import mage.target.common.TargetCreaturePermanent;
|
||||||
public class GaeasMight extends CardImpl {
|
public class GaeasMight extends CardImpl {
|
||||||
|
|
||||||
public GaeasMight(UUID ownerId, CardSetInfo setInfo) {
|
public GaeasMight(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}");
|
||||||
|
|
||||||
|
|
||||||
// Domain - Target creature gets +1/+1 until end of turn for each basic land type among lands you control.
|
// Domain - Target creature gets +1/+1 until end of turn for each basic land type among lands you control.
|
||||||
this.getSpellAbility().addEffect(new BoostTargetEffect(new DomainValue(), new DomainValue(), Duration.EndOfTurn));
|
this.getSpellAbility().addEffect(new BoostTargetEffect(new DomainValue(), new DomainValue(), Duration.EndOfTurn));
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
|
this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GaeasMight(final GaeasMight card) {
|
public GaeasMight(final GaeasMight card) {
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class HierophantsChalice extends CardImpl {
|
||||||
|
|
||||||
// When Hierophant's Chalice enters the battlefield, target opponent loses 1 life and you gain 1 life.
|
// When Hierophant's Chalice enters the battlefield, target opponent loses 1 life and you gain 1 life.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(1), false);
|
Ability ability = new EntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(1), false);
|
||||||
ability.addEffect(new GainLifeEffect(1));
|
ability.addEffect(new GainLifeEffect(1).setText("and you gain one life."));
|
||||||
Target target = new TargetOpponent();
|
Target target = new TargetOpponent();
|
||||||
ability.addTarget(target);
|
ability.addTarget(target);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -74,7 +74,9 @@ public class HuatliDinosaurKnight extends CardImpl {
|
||||||
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
|
||||||
|
|
||||||
// +2: Put two +1/+1 counters on up to one target Dinosaur you control.
|
// +2: Put two +1/+1 counters on up to one target Dinosaur you control.
|
||||||
Ability ability = new LoyaltyAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2)), 2);
|
Ability ability = new LoyaltyAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2))
|
||||||
|
.setText("Put two +1/+1 counters on up to one target Dinosaur you control."), 2
|
||||||
|
);
|
||||||
ability.addTarget(new TargetCreaturePermanent(0, 1, filter, false));
|
ability.addTarget(new TargetCreaturePermanent(0, 1, filter, false));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import static mage.filter.StaticFilters.FILTER_PERMANENT_CREATURES;
|
import mage.filter.StaticFilters;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -61,11 +61,11 @@ public class JaceIngeniousMindMage extends CardImpl {
|
||||||
this.addAbility(new LoyaltyAbility(new DrawCardSourceControllerEffect(1), 1));
|
this.addAbility(new LoyaltyAbility(new DrawCardSourceControllerEffect(1), 1));
|
||||||
|
|
||||||
// +1: Untap all creatures you control.
|
// +1: Untap all creatures you control.
|
||||||
this.addAbility(new LoyaltyAbility(new UntapAllControllerEffect(FILTER_PERMANENT_CREATURES), 1));
|
this.addAbility(new LoyaltyAbility(new UntapAllControllerEffect(StaticFilters.FILTER_PERMANENT_CREATURES), 1));
|
||||||
|
|
||||||
// -9: Gain control of up to three target creatures.
|
// -9: Gain control of up to three target creatures.
|
||||||
Ability ability = new LoyaltyAbility(new GainControlTargetEffect(Duration.Custom), -9);
|
Ability ability = new LoyaltyAbility(new GainControlTargetEffect(Duration.Custom), -9);
|
||||||
ability.addTarget(new TargetCreaturePermanent(0, 3));
|
ability.addTarget(new TargetCreaturePermanent(0, 3, StaticFilters.FILTER_PERMANENT_CREATURES, false));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ public class JacesSentinel extends CardImpl {
|
||||||
ability.addEffect(new ConditionalContinuousEffect(
|
ability.addEffect(new ConditionalContinuousEffect(
|
||||||
new CantBeBlockedSourceEffect(),
|
new CantBeBlockedSourceEffect(),
|
||||||
new PermanentsOnTheBattlefieldCondition(filter),
|
new PermanentsOnTheBattlefieldCondition(filter),
|
||||||
"and has can't be blocked"));
|
"and can't be blocked"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,6 @@ class JokulmorderTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever you play an Island, you may untap {this}";
|
return "Whenever you play an Island, you may untap {this}.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
package mage.cards.k;
|
package mage.cards.k;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility;
|
import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility;
|
||||||
|
@ -36,7 +35,6 @@ import mage.abilities.effects.common.AttachEffect;
|
||||||
import mage.abilities.effects.common.continuous.ControlEnchantedEffect;
|
import mage.abilities.effects.common.continuous.ControlEnchantedEffect;
|
||||||
import mage.abilities.costs.OrCost;
|
import mage.abilities.costs.OrCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.dynamicvalue.DynamicValue;
|
|
||||||
import mage.abilities.dynamicvalue.MultipliedValue;
|
import mage.abilities.dynamicvalue.MultipliedValue;
|
||||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||||
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
||||||
|
@ -76,7 +74,9 @@ public class KrovikanWhispers extends CardImpl {
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect()));
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect()));
|
||||||
|
|
||||||
// When Krovikan Whispers is put into a graveyard from the battlefield, you lose 2 life for each age counter on it.
|
// When Krovikan Whispers is put into a graveyard from the battlefield, you lose 2 life for each age counter on it.
|
||||||
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2))));
|
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2))
|
||||||
|
.setText("you lose 2 life for each age counter on it.")
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public KrovikanWhispers(final KrovikanWhispers card) {
|
public KrovikanWhispers(final KrovikanWhispers card) {
|
||||||
|
@ -88,4 +88,3 @@ public class KrovikanWhispers extends CardImpl {
|
||||||
return new KrovikanWhispers(this);
|
return new KrovikanWhispers(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ import mage.target.common.TargetCreatureOrPlayer;
|
||||||
public class LightningStorm extends CardImpl {
|
public class LightningStorm extends CardImpl {
|
||||||
|
|
||||||
public LightningStorm(UUID ownerId, CardSetInfo setInfo) {
|
public LightningStorm(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}{R}");
|
||||||
|
|
||||||
// Lightning Storm deals X damage to target creature or player, where X is 3 plus the number of charge counters on it.
|
// Lightning Storm deals X damage to target creature or player, where X is 3 plus the number of charge counters on it.
|
||||||
Effect effect = new DamageTargetEffect(new LightningStormCountCondition(CounterType.CHARGE));
|
Effect effect = new DamageTargetEffect(new LightningStormCountCondition(CounterType.CHARGE));
|
||||||
|
@ -67,7 +67,7 @@ public class LightningStorm extends CardImpl {
|
||||||
// Discard a land card: Put two charge counters on Lightning Storm. You may choose a new target for it. Any player may activate this ability but only if Lightning Storm is on the stack.
|
// Discard a land card: Put two charge counters on Lightning Storm. You may choose a new target for it. Any player may activate this ability but only if Lightning Storm is on the stack.
|
||||||
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.STACK,
|
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.STACK,
|
||||||
new LightningStormAddCounterEffect(),
|
new LightningStormAddCounterEffect(),
|
||||||
new DiscardTargetCost(new TargetCardInHand(new FilterLandCard())));
|
new DiscardTargetCost(new TargetCardInHand(new FilterLandCard("a land card"))));
|
||||||
ability.setMayActivate(TargetController.ANY);
|
ability.setMayActivate(TargetController.ANY);
|
||||||
ability.addEffect(new InfoEffect("Any player may activate this ability but only if {this} is on the stack"));
|
ability.addEffect(new InfoEffect("Any player may activate this ability but only if {this} is on the stack"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -49,7 +49,7 @@ import mage.target.TargetSpell;
|
||||||
*/
|
*/
|
||||||
public class LookoutsDispersal extends CardImpl {
|
public class LookoutsDispersal extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent();
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Pirate");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new SubtypePredicate(SubType.PIRATE));
|
filter.add(new SubtypePredicate(SubType.PIRATE));
|
||||||
|
|
|
@ -49,7 +49,7 @@ import mage.target.common.TargetCreatureOrPlayer;
|
||||||
*/
|
*/
|
||||||
public class MakeshiftMunitions extends CardImpl {
|
public class MakeshiftMunitions extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact or creature you control");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact or creature");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(Predicates.or(
|
filter.add(Predicates.or(
|
||||||
|
|
|
@ -59,18 +59,18 @@ public class MaliciousAdvice extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public MaliciousAdvice(UUID ownerId, CardSetInfo setInfo) {
|
public MaliciousAdvice(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{U}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{U}{B}");
|
||||||
|
|
||||||
// Tap X target artifacts, creatures, and/or lands. You lose X life.
|
// Tap X target artifacts, creatures, and/or lands. You lose X life.
|
||||||
Effect effect = new TapTargetEffect();
|
Effect effect = new TapTargetEffect();
|
||||||
effect.setText("Tap X target artifacts, creatures, and/or lands");
|
effect.setText("X target artifacts, creatures, and/or lands");
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(new ManacostVariableValue()));
|
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(new ManacostVariableValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void adjustTargets(Ability ability, Game game) {
|
public void adjustTargets(Ability ability, Game game) {
|
||||||
if(ability instanceof SpellAbility) {
|
if (ability instanceof SpellAbility) {
|
||||||
ability.getTargets().clear();
|
ability.getTargets().clear();
|
||||||
ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter));
|
ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter));
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ public class MaraudingLooter extends CardImpl {
|
||||||
RaidCondition.instance,
|
RaidCondition.instance,
|
||||||
"<i>Raid</i> — At the beginning of your end step, "
|
"<i>Raid</i> — At the beginning of your end step, "
|
||||||
+ "if you attacked with a creature this turn, "
|
+ "if you attacked with a creature this turn, "
|
||||||
+ "you may draw a card. If you do, discard a card");
|
+ "you may draw a card. If you do, discard a card.");
|
||||||
this.addAbility(ability, new PlayerAttackedWatcher());
|
this.addAbility(ability, new PlayerAttackedWatcher());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,6 @@ package mage.cards.m;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.abilities.Mode;
|
import mage.abilities.Mode;
|
||||||
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
@ -57,7 +56,7 @@ public class MarchOfTheDrowned extends CardImpl {
|
||||||
|
|
||||||
// Choose one —
|
// Choose one —
|
||||||
// &bull; Return target creature card from your graveyard to your hand.
|
// &bull; Return target creature card from your graveyard to your hand.
|
||||||
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterCreatureCard("creature card from your graveyard")));
|
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterCreatureCard("creature card from your graveyard")));
|
||||||
// &bull; Return two target Pirate cards from your graveyard to your hand.
|
// &bull; Return two target Pirate cards from your graveyard to your hand.
|
||||||
Mode mode = new Mode();
|
Mode mode = new Mode();
|
||||||
|
|
|
@ -46,7 +46,7 @@ import mage.constants.SubType;
|
||||||
public class MercurialKite extends CardImpl {
|
public class MercurialKite extends CardImpl {
|
||||||
|
|
||||||
public MercurialKite(UUID ownerId, CardSetInfo setInfo) {
|
public MercurialKite(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
|
||||||
this.subtype.add(SubType.BIRD);
|
this.subtype.add(SubType.BIRD);
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
@ -56,7 +56,7 @@ public class MercurialKite extends CardImpl {
|
||||||
// Whenever Mercurial Kite deals combat damage to a creature, tap that creature. That creature doesn't untap during its controller's next untap step.
|
// Whenever Mercurial Kite deals combat damage to a creature, tap that creature. That creature doesn't untap during its controller's next untap step.
|
||||||
Ability ability;
|
Ability ability;
|
||||||
ability = new DealsDamageToACreatureTriggeredAbility(new TapTargetEffect("that creature"), true, false, true);
|
ability = new DealsDamageToACreatureTriggeredAbility(new TapTargetEffect("that creature"), true, false, true);
|
||||||
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect(". That creature"));
|
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("That creature"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,9 +61,9 @@ public class MinotaurTactician extends CardImpl {
|
||||||
filterBlue.add(new ColorPredicate(ObjectColor.BLUE));
|
filterBlue.add(new ColorPredicate(ObjectColor.BLUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
static final private String ruleWhite = "{this} gets +1/+1 as long as you control another white creature";
|
static final private String ruleWhite = "{this} gets +1/+1 as long as you control a white creature";
|
||||||
|
|
||||||
static final private String ruleBlue = "{this} gets +1/+1 as long as you control another blue creature";
|
static final private String ruleBlue = "{this} gets +1/+1 as long as you control a blue creature";
|
||||||
|
|
||||||
public MinotaurTactician(UUID ownerId, CardSetInfo setInfo) {
|
public MinotaurTactician(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||||
|
|
|
@ -58,7 +58,7 @@ public class PhyrexianEtchings extends CardImpl {
|
||||||
|
|
||||||
// When Phyrexian Etchings is put into a graveyard from the battlefield, you lose 2 life for each age counter on it.
|
// When Phyrexian Etchings is put into a graveyard from the battlefield, you lose 2 life for each age counter on it.
|
||||||
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2))
|
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2))
|
||||||
.setText("When {this} is put into a graveyard from the battlefield, you lose 2 life for each age counter on it")
|
.setText("you lose 2 life for each age counter on it")
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ class PhyrexianTyrannyTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever a player draws a card, that player loses 2 life unless he or she pays {2}";
|
return "Whenever a player draws a card, that player loses 2 life unless he or she pays {2}.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ import mage.target.common.TargetCardInLibrary;
|
||||||
*/
|
*/
|
||||||
public class PriestOfTheWakeningSun extends CardImpl {
|
public class PriestOfTheWakeningSun extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter = new FilterCard("a Dinosaur card");
|
private static final FilterCard filter = new FilterCard("Dinosaur card");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new SubtypePredicate(SubType.DINOSAUR));
|
filter.add(new SubtypePredicate(SubType.DINOSAUR));
|
||||||
|
|
|
@ -58,7 +58,7 @@ public class RaidersWake extends CardImpl {
|
||||||
// Raid — At the beginning of your end step, if you attacked with a creature this turn, target opponent discards a card.
|
// Raid — At the beginning of your end step, if you attacked with a creature this turn, target opponent discards a card.
|
||||||
Ability ability = new ConditionalTriggeredAbility(
|
Ability ability = new ConditionalTriggeredAbility(
|
||||||
new BeginningOfEndStepTriggeredAbility(new DiscardTargetEffect(1), TargetController.YOU, false), RaidCondition.instance,
|
new BeginningOfEndStepTriggeredAbility(new DiscardTargetEffect(1), TargetController.YOU, false), RaidCondition.instance,
|
||||||
"<i>Raid</i> - At the beginning of your end step, if you attacked with a creature this turn, target opponent discards a card");
|
"<i>Raid</i> - At the beginning of your end step, if you attacked with a creature this turn, target opponent discards a card.");
|
||||||
ability.addTarget(new TargetOpponent());
|
ability.addTarget(new TargetOpponent());
|
||||||
this.addAbility(ability, new PlayerAttackedWatcher());
|
this.addAbility(ability, new PlayerAttackedWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ import mage.target.common.TargetControlledPermanent;
|
||||||
*/
|
*/
|
||||||
public class RavenGuildInitiate extends CardImpl {
|
public class RavenGuildInitiate extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Bird you control");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Bird");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new SubtypePredicate(SubType.BIRD));
|
filter.add(new SubtypePredicate(SubType.BIRD));
|
||||||
|
|
|
@ -45,7 +45,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author LoneFox
|
* @author LoneFox
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public class RazingSnidd extends CardImpl {
|
public class RazingSnidd extends CardImpl {
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ public class RazingSnidd extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public RazingSnidd(UUID ownerId, CardSetInfo setInfo) {
|
public RazingSnidd(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{R}");
|
||||||
this.subtype.add(SubType.BEAST);
|
this.subtype.add(SubType.BEAST);
|
||||||
this.power = new MageInt(3);
|
this.power = new MageInt(3);
|
||||||
this.toughness = new MageInt(3);
|
this.toughness = new MageInt(3);
|
||||||
|
@ -64,7 +64,7 @@ public class RazingSnidd extends CardImpl {
|
||||||
// When Razing Snidd enters the battlefield, return a black or red creature you control to its owner's hand.
|
// When Razing Snidd enters the battlefield, return a black or red creature you control to its owner's hand.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter), false));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter), false));
|
||||||
// When Razing Snidd enters the battlefield, each player sacrifices a land.
|
// When Razing Snidd enters the battlefield, each player sacrifices a land.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeAllEffect(1, new FilterControlledLandPermanent("a land")), false));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeAllEffect(1, new FilterControlledLandPermanent("land")), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public RazingSnidd(final RazingSnidd card) {
|
public RazingSnidd(final RazingSnidd card) {
|
||||||
|
|
|
@ -52,7 +52,7 @@ import mage.game.permanent.token.DinosaurToken;
|
||||||
*/
|
*/
|
||||||
public class RegisaurAlpha extends CardImpl {
|
public class RegisaurAlpha extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterPermanent("other Dinosaurss you control");
|
private static final FilterPermanent filter = new FilterPermanent("Dinosaurs");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new SubtypePredicate(SubType.DINOSAUR));
|
filter.add(new SubtypePredicate(SubType.DINOSAUR));
|
||||||
|
|
|
@ -53,7 +53,7 @@ import mage.game.permanent.token.TreasureToken;
|
||||||
*/
|
*/
|
||||||
public class RevelInRiches extends CardImpl {
|
public class RevelInRiches 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("Treasures");
|
private static final FilterPermanent filter2 = new FilterPermanent("Treasures");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class RiggingRunner extends CardImpl {
|
||||||
// Raid — Rigging Runner enters the battlefield with a +1/+1 counter on it if you attacked with a creature this turn.
|
// Raid — Rigging Runner 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),
|
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1), false),
|
||||||
RaidCondition.instance,
|
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"),
|
"{this} enters the battlefield with a +1/+1 counter"),
|
||||||
new PlayerAttackedWatcher());
|
new PlayerAttackedWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,12 @@ public class RimefeatherOwl extends CardImpl {
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter2), Duration.EndOfGame)));
|
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter2), Duration.EndOfGame)));
|
||||||
|
|
||||||
// {1}{snow}: Put an ice counter on target permanent.
|
// {1}{snow}: Put an ice counter on target permanent.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.ICE.createInstance()), new ManaCostsImpl("{1}{S}"));
|
Ability ability = new SimpleActivatedAbility(
|
||||||
|
Zone.BATTLEFIELD,
|
||||||
|
new AddCountersTargetEffect(CounterType.ICE.createInstance())
|
||||||
|
.setText("Put an ice counter on target permanent."),
|
||||||
|
new ManaCostsImpl("{1}{S}")
|
||||||
|
);
|
||||||
ability.addTarget(new TargetPermanent());
|
ability.addTarget(new TargetPermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ import mage.target.common.TargetControlledPermanent;
|
||||||
*/
|
*/
|
||||||
public class RuthlessKnave extends CardImpl {
|
public class RuthlessKnave extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("three three Treasures");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("three Treasures");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new SubtypePredicate(SubType.TREASURE));
|
filter.add(new SubtypePredicate(SubType.TREASURE));
|
||||||
|
|
|
@ -48,7 +48,7 @@ import mage.target.common.TargetCreaturePermanent;
|
||||||
public class SamitePilgrim extends CardImpl {
|
public class SamitePilgrim extends CardImpl {
|
||||||
|
|
||||||
public SamitePilgrim(UUID ownerId, CardSetInfo setInfo) {
|
public SamitePilgrim(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.subtype.add(SubType.HUMAN);
|
||||||
this.subtype.add(SubType.CLERIC);
|
this.subtype.add(SubType.CLERIC);
|
||||||
this.power = new MageInt(1);
|
this.power = new MageInt(1);
|
||||||
|
@ -57,6 +57,7 @@ public class SamitePilgrim extends CardImpl {
|
||||||
// Domain - {T}: Prevent the next X damage that would be dealt to target creature this turn, where X is the number of basic land types among lands you control.
|
// Domain - {T}: Prevent the next X damage that would be dealt to target creature this turn, where X is the number of basic land types among lands you control.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SamitePilgrimPreventDamageToTargetEffect(), new TapSourceCost());
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SamitePilgrimPreventDamageToTargetEffect(), new TapSourceCost());
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
|
ability.setAbilityWord(AbilityWord.DOMAIN);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,7 +73,6 @@ public class SamitePilgrim extends CardImpl {
|
||||||
|
|
||||||
class SamitePilgrimPreventDamageToTargetEffect extends PreventionEffectImpl {
|
class SamitePilgrimPreventDamageToTargetEffect extends PreventionEffectImpl {
|
||||||
|
|
||||||
|
|
||||||
public SamitePilgrimPreventDamageToTargetEffect() {
|
public SamitePilgrimPreventDamageToTargetEffect() {
|
||||||
super(Duration.EndOfTurn, Integer.MAX_VALUE, false, true);
|
super(Duration.EndOfTurn, Integer.MAX_VALUE, false, true);
|
||||||
staticText = "Prevent the next X damage that would be dealt to target creature this turn, where X is the number of basic land types among lands you control.";
|
staticText = "Prevent the next X damage that would be dealt to target creature this turn, where X is the number of basic land types among lands you control.";
|
||||||
|
|
|
@ -47,7 +47,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||||
*/
|
*/
|
||||||
public class SanctumSeeker extends CardImpl {
|
public class SanctumSeeker extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Vampire you control attacks");
|
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Vampire you control");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new SubtypePredicate(SubType.VAMPIRE));
|
filter.add(new SubtypePredicate(SubType.VAMPIRE));
|
||||||
|
|
|
@ -58,7 +58,7 @@ public class ShipwreckLooter extends CardImpl {
|
||||||
Ability ability = new ConditionalTriggeredAbility(
|
Ability ability = new ConditionalTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new DrawDiscardControllerEffect(1, 1, true)),
|
new EntersBattlefieldTriggeredAbility(new DrawDiscardControllerEffect(1, 1, true)),
|
||||||
RaidCondition.instance,
|
RaidCondition.instance,
|
||||||
"<i>Raid</i> - When {this} enters the battlefield,if you attacked with a creature this turn, you may draw a card. If you do, discard a card.");
|
"<i>Raid</i> - When {this} enters the battlefield, if you attacked with a creature this turn, you may draw a card. If you do, discard a card.");
|
||||||
this.addAbility(ability, new PlayerAttackedWatcher());
|
this.addAbility(ability, new PlayerAttackedWatcher());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ class SirensRuseEffect extends ExileTargetForSourceEffect {
|
||||||
|
|
||||||
SirensRuseEffect() {
|
SirensRuseEffect() {
|
||||||
super();
|
super();
|
||||||
this.staticText = "Exile target creature you control, then return that card to the battlefield under its owner's control. If a Pirate was exiled this way, draw a card.";
|
this.staticText = "Exile target creature you control, then return that card to the battlefield under its owner's control. If a Pirate was exiled this way, draw a card.";
|
||||||
}
|
}
|
||||||
|
|
||||||
SirensRuseEffect(final SirensRuseEffect effect) {
|
SirensRuseEffect(final SirensRuseEffect effect) {
|
||||||
|
|
|
@ -37,7 +37,7 @@ import mage.util.CardUtil;
|
||||||
public class SkyshipWeatherlight extends CardImpl {
|
public class SkyshipWeatherlight extends CardImpl {
|
||||||
|
|
||||||
public SkyshipWeatherlight(UUID ownerId, CardSetInfo setInfo) {
|
public SkyshipWeatherlight(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
|
||||||
addSuperType(SuperType.LEGENDARY);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
|
|
||||||
// When Skyship Weatherlight enters the battlefield, search your library for any number of artifact and/or creature cards and exile them. Then shuffle your library.
|
// When Skyship Weatherlight enters the battlefield, search your library for any number of artifact and/or creature cards and exile them. Then shuffle your library.
|
||||||
|
@ -73,7 +73,7 @@ class SkyshipWeatherlightEffect extends SearchEffect {
|
||||||
public SkyshipWeatherlightEffect() {
|
public SkyshipWeatherlightEffect() {
|
||||||
|
|
||||||
super(new TargetCardInLibrary(0, Integer.MAX_VALUE, filter), Outcome.Neutral);
|
super(new TargetCardInLibrary(0, Integer.MAX_VALUE, filter), Outcome.Neutral);
|
||||||
this.staticText = "search your library for any number of artifact and/or creature cards and remove them from the game. Then shuffle your library";
|
this.staticText = "search your library for any number of artifact and/or creature cards and exile them. Then shuffle your library";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ class SkyshipWeatherlightEffect2 extends OneShotEffect {
|
||||||
|
|
||||||
public SkyshipWeatherlightEffect2() {
|
public SkyshipWeatherlightEffect2() {
|
||||||
super(Outcome.ReturnToHand);
|
super(Outcome.ReturnToHand);
|
||||||
this.staticText = "Choose a card at random that was removed from the game with {this}. Put that card into your hand";
|
this.staticText = "Choose a card at random that was exiled with {this}. Put that card into its owner's hand";
|
||||||
}
|
}
|
||||||
|
|
||||||
public SkyshipWeatherlightEffect2(final SkyshipWeatherlightEffect2 effect) {
|
public SkyshipWeatherlightEffect2(final SkyshipWeatherlightEffect2 effect) {
|
||||||
|
|
|
@ -58,7 +58,7 @@ public class SnappingSailback extends CardImpl {
|
||||||
// Enrage — Whenever Snapping Sailback is dealt damage, put a +1/+1 counter on it.
|
// Enrage — Whenever Snapping Sailback is dealt damage, put a +1/+1 counter on it.
|
||||||
this.addAbility(new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD,
|
this.addAbility(new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD,
|
||||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance(1))
|
new AddCountersSourceEffect(CounterType.P1P1.createInstance(1))
|
||||||
.setText("put a +1/+1 counter on it"), false));
|
.setText("put a +1/+1 counter on it"), false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SnappingSailback(final SnappingSailback card) {
|
public SnappingSailback(final SnappingSailback card) {
|
||||||
|
|
|
@ -69,7 +69,7 @@ class SpellSwindleEffect extends OneShotEffect {
|
||||||
public SpellSwindleEffect() {
|
public SpellSwindleEffect() {
|
||||||
super(Outcome.Detriment);
|
super(Outcome.Detriment);
|
||||||
staticText = "Counter target spell. Create X colorless Treasure artifact tokens, where X is that spell's converted mana cost. "
|
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) {
|
public SpellSwindleEffect(final SpellSwindleEffect effect) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ public class StarOfExtinction extends CardImpl {
|
||||||
|
|
||||||
// Destroy target land. Star of Extinction deals 20 damage to each creature and each planeswalker.
|
// Destroy target land. Star of Extinction deals 20 damage to each creature and each planeswalker.
|
||||||
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
||||||
this.getSpellAbility().addEffect(new DamageAllEffect(20, new FilterCreatureOrPlaneswalkerPermanent("each creature and each planeswalker")));
|
this.getSpellAbility().addEffect(new DamageAllEffect(20, new FilterCreatureOrPlaneswalkerPermanent("creature and each planeswalker")));
|
||||||
this.getSpellAbility().addTarget(new TargetLandPermanent());
|
this.getSpellAbility().addTarget(new TargetLandPermanent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,16 @@ class SunbirdsInvocationTriggeredAbility extends SpellCastControllerTriggeredAbi
|
||||||
public SunbirdsInvocationTriggeredAbility copy() {
|
public SunbirdsInvocationTriggeredAbility copy() {
|
||||||
return new SunbirdsInvocationTriggeredAbility(this);
|
return new SunbirdsInvocationTriggeredAbility(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRule() {
|
||||||
|
return "Whenever you cast a spell from your hand, "
|
||||||
|
+ "reveal the top X cards of your library, "
|
||||||
|
+ "where X is that spell's converted mana cost. "
|
||||||
|
+ "You may cast a card revealed this way with "
|
||||||
|
+ "converted mana cost X or less without paying its mana cost."
|
||||||
|
+ " Put the rest on the bottom of your library in a random order.";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SunbirdsInvocationEffect extends OneShotEffect {
|
class SunbirdsInvocationEffect extends OneShotEffect {
|
||||||
|
|
|
@ -36,7 +36,7 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||||
import mage.target.common.TargetCardInHand;
|
import mage.target.common.TargetCardInHand;
|
||||||
|
|
||||||
|
@ -47,18 +47,19 @@ import mage.target.common.TargetCardInHand;
|
||||||
public class Sunscour extends CardImpl {
|
public class Sunscour extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter = new FilterCard("two white cards");
|
private static final FilterCard filter = new FilterCard("two white cards");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new ColorPredicate(ObjectColor.WHITE));
|
filter.add(new ColorPredicate(ObjectColor.WHITE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Sunscour(UUID ownerId, CardSetInfo setInfo) {
|
public Sunscour(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{W}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{W}{W}");
|
||||||
|
|
||||||
// You may exile two white cards from your hand rather than pay Sunscour's mana cost.
|
// You may exile two white cards from your hand rather than pay Sunscour's mana cost.
|
||||||
this.addAbility(new AlternativeCostSourceAbility(new ExileFromHandCost(new TargetCardInHand(2, filter))));
|
this.addAbility(new AlternativeCostSourceAbility(new ExileFromHandCost(new TargetCardInHand(2, filter))));
|
||||||
|
|
||||||
// Destroy all creatures.
|
// Destroy all creatures.
|
||||||
this.getSpellAbility().addEffect(new DestroyAllEffect(new FilterCreaturePermanent()));
|
this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Sunscour(final Sunscour card) {
|
public Sunscour(final Sunscour card) {
|
||||||
|
|
|
@ -44,12 +44,12 @@ public class SurgingAether extends CardImpl {
|
||||||
public SurgingAether(UUID ownerId, CardSetInfo setInfo) {
|
public SurgingAether(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}");
|
||||||
|
|
||||||
|
// Ripple 4
|
||||||
|
this.addAbility(new RippleAbility(4));
|
||||||
|
|
||||||
// Return target permanent to its owner's hand.
|
// Return target permanent to its owner's hand.
|
||||||
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetPermanent());
|
this.getSpellAbility().addTarget(new TargetPermanent());
|
||||||
|
|
||||||
// Ripple 4
|
|
||||||
this.addAbility(new RippleAbility(4));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public SurgingAether(final SurgingAether card) {
|
public SurgingAether(final SurgingAether card) {
|
||||||
|
|
|
@ -54,7 +54,7 @@ public class TempestCaller extends CardImpl {
|
||||||
this.toughness = new MageInt(3);
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
// When Tempest Caller enters the battlefield, tap all creatures target opponent controls.
|
// When Tempest Caller enters the battlefield, tap all creatures target opponent controls.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new TapAllTargetPlayerControlsEffect(new FilterCreaturePermanent("creatures target opponent controls")));
|
Ability ability = new EntersBattlefieldTriggeredAbility(new TapAllTargetPlayerControlsEffect(new FilterCreaturePermanent("creatures")));
|
||||||
ability.addTarget(new TargetOpponent());
|
ability.addTarget(new TargetOpponent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,13 +43,12 @@ import mage.constants.CardType;
|
||||||
public class UrzasGuilt extends CardImpl {
|
public class UrzasGuilt extends CardImpl {
|
||||||
|
|
||||||
public UrzasGuilt(UUID ownerId, CardSetInfo setInfo) {
|
public UrzasGuilt(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{U}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{U}{B}");
|
||||||
|
|
||||||
|
|
||||||
// Each player draws two cards, then discards three cards, then loses 4 life.
|
// Each player draws two cards, then discards three cards, then loses 4 life.
|
||||||
this.getSpellAbility().addEffect(new DrawCardAllEffect(2));
|
this.getSpellAbility().addEffect(new DrawCardAllEffect(2));
|
||||||
Effect effect = new DiscardEachPlayerEffect(3, false);
|
Effect effect = new DiscardEachPlayerEffect(3, false);
|
||||||
effect.setText("then discards three cards");
|
effect.setText("then discards three cards,");
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
effect = new LoseLifeAllPlayersEffect(4);
|
effect = new LoseLifeAllPlayersEffect(4);
|
||||||
effect.setText("then loses 4 life");
|
effect.setText("then loses 4 life");
|
||||||
|
|
|
@ -128,6 +128,6 @@ class DrawCardIfCreatureTypeAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever you cast a creature spell of the chosen type, draw a card";
|
return "Whenever you cast a creature spell of the chosen type, draw a card.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ import mage.constants.Zone;
|
||||||
public class VeldraneOfSengir extends CardImpl {
|
public class VeldraneOfSengir extends CardImpl {
|
||||||
|
|
||||||
public VeldraneOfSengir(UUID ownerId, CardSetInfo setInfo) {
|
public VeldraneOfSengir(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);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.subtype.add(SubType.HUMAN);
|
||||||
this.subtype.add(SubType.ROGUE);
|
this.subtype.add(SubType.ROGUE);
|
||||||
|
@ -58,8 +58,8 @@ public class VeldraneOfSengir extends CardImpl {
|
||||||
this.toughness = new MageInt(5);
|
this.toughness = new MageInt(5);
|
||||||
|
|
||||||
// {1}{B}{B}: Veldrane of Sengir gets -3/-0 and gains forestwalk until end of turn.
|
// {1}{B}{B}: Veldrane of Sengir gets -3/-0 and gains forestwalk until end of turn.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(-3, -0, Duration.EndOfTurn), new ManaCostsImpl("{1}{B}{B}"));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(-3, -0, Duration.EndOfTurn).setText("{this} gets -3/-0"), new ManaCostsImpl("{1}{B}{B}"));
|
||||||
ability.addEffect(new GainAbilitySourceEffect(new ForestwalkAbility(false), Duration.EndOfTurn));
|
ability.addEffect(new GainAbilitySourceEffect(new ForestwalkAbility(false), Duration.EndOfTurn).setText("and gains forestwalk until end of turn"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ public class VerdantSunsAvatar extends CardImpl {
|
||||||
this.power = new MageInt(5);
|
this.power = new MageInt(5);
|
||||||
this.toughness = new MageInt(5);
|
this.toughness = new MageInt(5);
|
||||||
|
|
||||||
// When Verdant Sun's Avatar or another creature enters the battlefield under your control, you gain life equal to that creature's toughness.
|
// Whenever Verdant Sun's Avatar or another creature enters the battlefield under your control, you gain life equal to that creature's toughness.
|
||||||
this.addAbility(new VerdantSunsAvatarTriggeredAbility());
|
this.addAbility(new VerdantSunsAvatarTriggeredAbility());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ class VerdantSunsAvatarTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "When {this} or another creature enters the battlefield under your control, " + super.getRule();
|
return "Whenever {this} or another creature enters the battlefield under your control, " + super.getRule();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -90,7 +90,7 @@ class VraskaRelicSeekerDestroyEffect extends OneShotEffect {
|
||||||
|
|
||||||
VraskaRelicSeekerDestroyEffect() {
|
VraskaRelicSeekerDestroyEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = "Destroy target artifact, creature, or enchantment. Create a colorless Treasure artifact token with \"{T}, Sacrfice this artifact. Add one mana of any color to your mana pool.\"";
|
this.staticText = "Destroy target artifact, creature, or enchantment. Create a colorless Treasure artifact token with \"{T}, Sacrifice this artifact. Add one mana of any color to your mana pool.\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
VraskaRelicSeekerDestroyEffect(final VraskaRelicSeekerDestroyEffect effect) {
|
VraskaRelicSeekerDestroyEffect(final VraskaRelicSeekerDestroyEffect effect) {
|
||||||
|
|
|
@ -62,8 +62,14 @@ public class WakerOfTheWilds extends CardImpl {
|
||||||
this.toughness = new MageInt(3);
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
// {X}{G}{G}: Put X +1/+1 counters on target land you control. That land becomes a 0/0 Elemental creature with haste that's still a land.
|
// {X}{G}{G}: Put X +1/+1 counters on target land you control. That land becomes a 0/0 Elemental creature with haste that's still a land.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleActivatedAbility(
|
||||||
new AddCountersTargetEffect(CounterType.P1P1.createInstance(0), new ManacostVariableValue()), new ManaCostsImpl("{X}{G}{G}"));
|
Zone.BATTLEFIELD,
|
||||||
|
new AddCountersTargetEffect(
|
||||||
|
CounterType.P1P1.createInstance(0),
|
||||||
|
new ManacostVariableValue()
|
||||||
|
).setText("Put X +1/+1 counters on target land you control."),
|
||||||
|
new ManaCostsImpl("{X}{G}{G}")
|
||||||
|
);
|
||||||
Effect effect = new BecomesCreatureTargetEffect(new WallOfResurgenceToken(), false, true, Duration.Custom);
|
Effect effect = new BecomesCreatureTargetEffect(new WallOfResurgenceToken(), false, true, Duration.Custom);
|
||||||
effect.setText("That land becomes a 0/0 Elemental creature with haste. It's still a land");
|
effect.setText("That land becomes a 0/0 Elemental creature with haste. It's still a land");
|
||||||
ability.addEffect(effect);
|
ability.addEffect(effect);
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class WaterspoutElemental extends CardImpl {
|
||||||
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandFromBattlefieldAllEffect(filter));
|
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandFromBattlefieldAllEffect(filter));
|
||||||
ability.addEffect(new SkipNextTurnSourceEffect());
|
ability.addEffect(new SkipNextTurnSourceEffect());
|
||||||
this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.instance,
|
this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.instance,
|
||||||
"When {this} enters the battlefield, if it was kicked, return all other creatures to their owners' hands and you skip your next turn"));
|
"When {this} enters the battlefield, if it was kicked, return all other creatures to their owners' hands and you skip your next turn."));
|
||||||
}
|
}
|
||||||
|
|
||||||
public WaterspoutElemental(final WaterspoutElemental card) {
|
public WaterspoutElemental(final WaterspoutElemental card) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ public class CantBlockAbility extends SimpleStaticAbility {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "{this} can't block";
|
return "{this} can't block.";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
* authors and should not be interpreted as representing official policies, either expressed
|
* authors and should not be interpreted as representing official policies, either expressed
|
||||||
* or implied, of BetaSteward_at_googlemail.com.
|
* or implied, of BetaSteward_at_googlemail.com.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package mage.abilities.condition.common;
|
package mage.abilities.condition.common;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
@ -45,4 +44,8 @@ public enum RaidCondition implements Condition {
|
||||||
PlayerAttackedWatcher watcher = (PlayerAttackedWatcher) game.getState().getWatchers().get(PlayerAttackedWatcher.class.getSimpleName());
|
PlayerAttackedWatcher watcher = (PlayerAttackedWatcher) game.getState().getWatchers().get(PlayerAttackedWatcher.class.getSimpleName());
|
||||||
return watcher != null && watcher.getNumberOfAttackersCurrentTurn(source.getControllerId()) > 0;
|
return watcher != null && watcher.getNumberOfAttackersCurrentTurn(source.getControllerId()) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "if you attacked with a creature this turn";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,6 @@ public class CantBeRegeneratedSourceEffect extends ContinuousRuleModifyingEffect
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("{this} can't be regenerated");
|
sb.append("{this} can't be regenerated");
|
||||||
if (!duration.toString().isEmpty()) {
|
if (!duration.toString().isEmpty()) {
|
||||||
sb.append(' ');
|
|
||||||
if (duration == Duration.EndOfTurn) {
|
if (duration == Duration.EndOfTurn) {
|
||||||
sb.append(" this turn");
|
sb.append(" this turn");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -243,7 +243,7 @@ public class LookLibraryControllerEffect extends OneShotEffect {
|
||||||
sb.append(" cards ");
|
sb.append(" cards ");
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.append("of your Library");
|
sb.append("of your library");
|
||||||
if (numberLook == 0) {
|
if (numberLook == 0) {
|
||||||
sb.append(", where {X} is the number of cards ").append(numberOfCards.getMessage());
|
sb.append(", where {X} is the number of cards ").append(numberOfCards.getMessage());
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import mage.abilities.Ability;
|
||||||
import mage.abilities.Mode;
|
import mage.abilities.Mode;
|
||||||
import mage.abilities.effects.PreventionEffectImpl;
|
import mage.abilities.effects.PreventionEffectImpl;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
|
import static mage.constants.Duration.EndOfTurn;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
|
@ -98,10 +99,19 @@ public class PreventAllDamageByAllPermanentsEffect extends PreventionEffectImpl
|
||||||
sb.append("combat ");
|
sb.append("combat ");
|
||||||
}
|
}
|
||||||
sb.append("damage ");
|
sb.append("damage ");
|
||||||
sb.append(duration.toString());
|
if (duration == EndOfTurn) {
|
||||||
if (filter != null) {
|
if (filter != null) {
|
||||||
sb.append(" dealt by ");
|
sb.append(filter.getMessage());
|
||||||
sb.append(filter.getMessage());
|
sb.append(" would deal this turn");
|
||||||
|
} else {
|
||||||
|
sb.append("that would be dealt this turn");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sb.append(duration.toString());
|
||||||
|
if (filter != null) {
|
||||||
|
sb.append(" dealt by ");
|
||||||
|
sb.append(filter.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import mage.abilities.Ability;
|
||||||
import mage.abilities.Mode;
|
import mage.abilities.Mode;
|
||||||
import mage.abilities.effects.PreventionEffectImpl;
|
import mage.abilities.effects.PreventionEffectImpl;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
|
import static mage.constants.Duration.EndOfTurn;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
|
|
||||||
|
@ -74,7 +75,12 @@ public class PreventDamageToSourceEffect extends PreventionEffectImpl {
|
||||||
} else {
|
} else {
|
||||||
sb.append("Prevent the next ").append(amountToPrevent).append(" damage that would be dealt to ");
|
sb.append("Prevent the next ").append(amountToPrevent).append(" damage that would be dealt to ");
|
||||||
}
|
}
|
||||||
sb.append("{source} ").append(duration.toString());
|
sb.append("{source} ");
|
||||||
|
if (duration == EndOfTurn) {
|
||||||
|
sb.append("this turn");
|
||||||
|
} else {
|
||||||
|
sb.append(duration.toString());
|
||||||
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
* authors and should not be interpreted as representing official policies, either expressed
|
* authors and should not be interpreted as representing official policies, either expressed
|
||||||
* or implied, of BetaSteward_at_googlemail.com.
|
* or implied, of BetaSteward_at_googlemail.com.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package mage.abilities.effects.common;
|
package mage.abilities.effects.common;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -60,10 +59,10 @@ public class TapAllTargetPlayerControlsEffect extends OneShotEffect {
|
||||||
@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) {
|
||||||
filter.add(new ControllerIdPredicate(player.getId()));
|
filter.add(new ControllerIdPredicate(player.getId()));
|
||||||
List<Permanent> permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game);
|
List<Permanent> permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game);
|
||||||
for(Permanent p : permanents) {
|
for (Permanent p : permanents) {
|
||||||
p.tap(game);
|
p.tap(game);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -78,9 +77,9 @@ public class TapAllTargetPlayerControlsEffect extends OneShotEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getText(Mode mode) {
|
public String getText(Mode mode) {
|
||||||
if(staticText != null && !staticText.isEmpty()) {
|
if (staticText != null && !staticText.isEmpty()) {
|
||||||
return staticText;
|
return staticText;
|
||||||
}
|
}
|
||||||
return "tap all " + filter.getMessage() + " target player controls";
|
return "tap all " + filter.getMessage() + " target " + mode.getTargets().get(0).getMessage() + " controls";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import mage.abilities.Ability;
|
||||||
import mage.abilities.effects.RestrictionEffect;
|
import mage.abilities.effects.RestrictionEffect;
|
||||||
import mage.constants.AttachmentType;
|
import mage.constants.AttachmentType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
|
import static mage.constants.Duration.EndOfTurn;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
@ -61,7 +62,9 @@ public class CantBlockAttachedEffect extends RestrictionEffect {
|
||||||
if (!filter.getMessage().equals("creature")) {
|
if (!filter.getMessage().equals("creature")) {
|
||||||
sb.append(' ').append(filter.getMessage());
|
sb.append(' ').append(filter.getMessage());
|
||||||
}
|
}
|
||||||
if (!duration.toString().isEmpty()) {
|
if (duration == EndOfTurn) {
|
||||||
|
sb.append("this turn");
|
||||||
|
} else if (!duration.toString().isEmpty()) {
|
||||||
sb.append(' ').append(duration.toString());
|
sb.append(' ').append(duration.toString());
|
||||||
}
|
}
|
||||||
staticText = sb.toString();
|
staticText = sb.toString();
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class BecomesChosenCreatureTypeTargetEffect extends OneShotEffect {
|
||||||
super(Outcome.BoostCreature);
|
super(Outcome.BoostCreature);
|
||||||
this.nonWall = nonWall;
|
this.nonWall = nonWall;
|
||||||
if(nonWall) {
|
if(nonWall) {
|
||||||
staticText = "choose a creature type other than wall. Target creature becomes that type until end of turn";
|
staticText = "choose a creature type other than Wall. Target creature becomes that type until end of turn";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
staticText = "target creature becomes the creature type of your choice until end of turn";
|
staticText = "target creature becomes the creature type of your choice until end of turn";
|
||||||
|
|
|
@ -138,7 +138,6 @@ public class BecomesCreatureAllEffect extends ContinuousEffectImpl {
|
||||||
if (duration.toString() != null && !duration.toString().isEmpty()) {
|
if (duration.toString() != null && !duration.toString().isEmpty()) {
|
||||||
sb.append(duration.toString()).append(", ");
|
sb.append(duration.toString()).append(", ");
|
||||||
}
|
}
|
||||||
sb.append("all ");
|
|
||||||
sb.append(filter.getMessage());
|
sb.append(filter.getMessage());
|
||||||
if (duration.toString() != null && duration.toString().isEmpty()) {
|
if (duration.toString() != null && duration.toString().isEmpty()) {
|
||||||
sb.append(" are ");
|
sb.append(" are ");
|
||||||
|
@ -147,7 +146,7 @@ public class BecomesCreatureAllEffect extends ContinuousEffectImpl {
|
||||||
}
|
}
|
||||||
sb.append(token.getDescription());
|
sb.append(token.getDescription());
|
||||||
if (type != null && !type.isEmpty()) {
|
if (type != null && !type.isEmpty()) {
|
||||||
sb.append(". They are still ").append(type);
|
sb.append(". They're still ").append(type);
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class GainAbilityControlledSpellsEffect extends ContinuousEffectImpl {
|
||||||
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() + " you cast have " + ability.getRule();
|
staticText = filter.getMessage() + " you cast have " + ability.getRule() + '.';
|
||||||
}
|
}
|
||||||
|
|
||||||
public GainAbilityControlledSpellsEffect(final GainAbilityControlledSpellsEffect effect) {
|
public GainAbilityControlledSpellsEffect(final GainAbilityControlledSpellsEffect effect) {
|
||||||
|
|
|
@ -36,6 +36,7 @@ import mage.filter.FilterPermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -82,7 +83,7 @@ public class AddCountersAllEffect extends OneShotEffect {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("put ");
|
sb.append("put ");
|
||||||
if (counter.getCount() > 1) {
|
if (counter.getCount() > 1) {
|
||||||
sb.append(Integer.toString(counter.getCount())).append(' ').append(counter.getName().toLowerCase()).append(" counters on each ");
|
sb.append(CardUtil.numberToText(counter.getCount(), "a")).append(' ').append(counter.getName().toLowerCase()).append(" counters on each ");
|
||||||
} else {
|
} else {
|
||||||
sb.append("a ").append(counter.getName().toLowerCase()).append(" counter on each ");
|
sb.append("a ").append(counter.getName().toLowerCase()).append(" counter on each ");
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class SearchLibraryGraveyardPutInHandEffect extends OneShotEffect {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
this.forceToSearchBoth = forceToSearchBoth;
|
this.forceToSearchBoth = forceToSearchBoth;
|
||||||
staticText = "search your library and" + (forceToSearchBoth ? "" : "/or ") + " graveyard for a card named " + filter.getMessage()
|
staticText = "search your library and" + (forceToSearchBoth ? "" : "/or") + " graveyard for a card named " + filter.getMessage()
|
||||||
+ ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle your library" : "If you search your library this way, shuffle it");
|
+ ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle your library" : "If you search your library this way, shuffle it");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
* authors and should not be interpreted as representing official policies, either expressed
|
* authors and should not be interpreted as representing official policies, either expressed
|
||||||
* or implied, of BetaSteward_at_googlemail.com.
|
* or implied, of BetaSteward_at_googlemail.com.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package mage.abilities.keyword;
|
package mage.abilities.keyword;
|
||||||
|
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
@ -40,7 +39,7 @@ import java.io.ObjectStreamException;
|
||||||
*/
|
*/
|
||||||
public class DeathtouchAbility extends StaticAbility implements MageSingleton {
|
public class DeathtouchAbility extends StaticAbility implements MageSingleton {
|
||||||
|
|
||||||
private static final DeathtouchAbility instance = new DeathtouchAbility();
|
private static final DeathtouchAbility instance = new DeathtouchAbility();
|
||||||
|
|
||||||
private Object readResolve() throws ObjectStreamException {
|
private Object readResolve() throws ObjectStreamException {
|
||||||
return instance;
|
return instance;
|
||||||
|
@ -56,7 +55,7 @@ public class DeathtouchAbility extends StaticAbility implements MageSingleton {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Deathtouch <i>(Any amount of damage this deals to a creature is enough to destroy it.)</i>";
|
return "deathtouch";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -64,6 +63,4 @@ public class DeathtouchAbility extends StaticAbility implements MageSingleton {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,11 +24,9 @@
|
||||||
* The views and conclusions contained in the software and documentation are those of the
|
* 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
|
* authors and should not be interpreted as representing official policies, either expressed
|
||||||
* or implied, of BetaSteward_at_googlemail.com.
|
* or implied, of BetaSteward_at_googlemail.com.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package mage.abilities.keyword;
|
package mage.abilities.keyword;
|
||||||
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.EvasionAbility;
|
import mage.abilities.EvasionAbility;
|
||||||
|
@ -45,7 +43,7 @@ import java.io.ObjectStreamException;
|
||||||
*/
|
*/
|
||||||
public class FearAbility extends EvasionAbility implements MageSingleton {
|
public class FearAbility extends EvasionAbility implements MageSingleton {
|
||||||
|
|
||||||
private static final FearAbility instance = new FearAbility();
|
private static final FearAbility instance = new FearAbility();
|
||||||
|
|
||||||
private Object readResolve() throws ObjectStreamException {
|
private Object readResolve() throws ObjectStreamException {
|
||||||
return instance;
|
return instance;
|
||||||
|
@ -61,7 +59,7 @@ public class FearAbility extends EvasionAbility implements MageSingleton {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Fear";
|
return "fear";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -102,4 +100,4 @@ class FearEffect extends RestrictionEffect implements MageSingleton {
|
||||||
return new FearEffect(this);
|
return new FearEffect(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,15 +32,15 @@ import mage.constants.Zone;
|
||||||
import mage.abilities.StaticAbility;
|
import mage.abilities.StaticAbility;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OLD RULES:
|
* OLD RULES: 700.4. If a permanent is indestructible, rules and effects can't
|
||||||
* 700.4. If a permanent is indestructible, rules and effects can't destroy it. (See rule 701.6, "Destroy.")
|
* destroy it. (See rule 701.6, "Destroy.") Such permanents are not destroyed by
|
||||||
* Such permanents are not destroyed by lethal damage, and they ignore the lethal-damage state-based action
|
* lethal damage, and they ignore the lethal-damage state-based action (see rule
|
||||||
* (see rule 704.5g). Rules or effects may cause an indestructible permanent to be sacrificed, put into a
|
* 704.5g). Rules or effects may cause an indestructible permanent to be
|
||||||
* graveyard, or exiled. #
|
* sacrificed, put into a graveyard, or exiled. #
|
||||||
*
|
*
|
||||||
* 700.4a Although the text "[This permanent] is indestructible" is an ability, actually being
|
* 700.4a Although the text "[This permanent] is indestructible" is an ability,
|
||||||
* indestructible is neither an ability nor a characteristic. It's just something that's true
|
* actually being indestructible is neither an ability nor a characteristic.
|
||||||
* about a permanent.
|
* It's just something that's true about a permanent.
|
||||||
*
|
*
|
||||||
* NEW RULES
|
* NEW RULES
|
||||||
*
|
*
|
||||||
|
@ -48,10 +48,9 @@ import mage.abilities.StaticAbility;
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @author BetaSteward_at_googlemail.com
|
* @author BetaSteward_at_googlemail.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class IndestructibleAbility extends StaticAbility {
|
public class IndestructibleAbility extends StaticAbility {
|
||||||
|
|
||||||
private static final IndestructibleAbility instance;
|
private static final IndestructibleAbility instance;
|
||||||
|
@ -79,7 +78,7 @@ public class IndestructibleAbility extends StaticAbility {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Indestructible";
|
return "indestructible";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue