mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 11:32:00 -08:00
replaced apostrophes
This commit is contained in:
parent
1ed85cef4d
commit
c4a0d9f916
165 changed files with 286 additions and 286 deletions
|
|
@ -49,7 +49,7 @@ public final class Aetherspouts extends CardImpl {
|
||||||
of their library. The active player (the player whose turn it is) makes all of
|
of their library. The active player (the player whose turn it is) makes all of
|
||||||
their choices first, followed by each other player in turn order.
|
their choices first, followed by each other player in turn order.
|
||||||
7/18/2014 If an effect puts two or more cards on the top or bottom of a library at the same time,
|
7/18/2014 If an effect puts two or more cards on the top or bottom of a library at the same time,
|
||||||
the owner of those cards may arrange them in any order. That library’s owner doesn’t reveal
|
the owner of those cards may arrange them in any order. That library's owner doesn't reveal
|
||||||
the order in which the cards go into their library.
|
the order in which the cards go into their library.
|
||||||
*/
|
*/
|
||||||
class AetherspoutsEffect extends OneShotEffect {
|
class AetherspoutsEffect extends OneShotEffect {
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public final class AngrathMinotaurPirate extends CardImpl {
|
||||||
Effects effects1 = new Effects();
|
Effects effects1 = new Effects();
|
||||||
effects1.add(new DamageTargetEffect(1));
|
effects1.add(new DamageTargetEffect(1));
|
||||||
effects1.add(new DamageAllControlledTargetEffect(1, new FilterCreaturePermanent())
|
effects1.add(new DamageAllControlledTargetEffect(1, new FilterCreaturePermanent())
|
||||||
.setText("and each creature that player or that planeswalker’s controller controls")
|
.setText("and each creature that player or that planeswalker's controller controls")
|
||||||
);
|
);
|
||||||
LoyaltyAbility ability1 = new LoyaltyAbility(effects1, +2);
|
LoyaltyAbility ability1 = new LoyaltyAbility(effects1, +2);
|
||||||
ability1.addTarget(new TargetOpponentOrPlaneswalker());
|
ability1.addTarget(new TargetOpponentOrPlaneswalker());
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ public final class AntiMagicAura extends CardImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 9/25/2006 ruling: If Consecrate Land enters the battlefield attached to a land that’s enchanted by other Auras, those Auras are put into their owners’ graveyards.
|
// 9/25/2006 ruling: If Consecrate Land enters the battlefield attached to a land that's enchanted by other Auras, those Auras are put into their owners' graveyards.
|
||||||
class AntiMagicAuraRuleEffect extends ContinuousRuleModifyingEffectImpl {
|
class AntiMagicAuraRuleEffect extends ContinuousRuleModifyingEffectImpl {
|
||||||
|
|
||||||
public AntiMagicAuraRuleEffect() {
|
public AntiMagicAuraRuleEffect() {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public final class ApocalypseDemon extends CardImpl {
|
||||||
// Flying
|
// Flying
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
// Apocalypse Demon’s power and toughness are each equal to the number of cards in your graveyard.
|
// Apocalypse Demon's power and toughness are each equal to the number of cards in your graveyard.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new CardsInControllerGraveyardCount(), Duration.EndOfGame)));
|
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new CardsInControllerGraveyardCount(), Duration.EndOfGame)));
|
||||||
|
|
||||||
// At the beginning of your upkeep, tap Apocalypse Demon unless you sacrifice another creature.
|
// At the beginning of your upkeep, tap Apocalypse Demon unless you sacrifice another creature.
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public final class AquaticIncursion extends CardImpl {
|
||||||
// When Aquatic Incursion enters the battlefield, create two 1/1 blue Merfolk creature tokens with hexproof.
|
// When Aquatic Incursion enters the battlefield, create two 1/1 blue Merfolk creature tokens with hexproof.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new MerfolkHexproofToken(), 2), false));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new MerfolkHexproofToken(), 2), false));
|
||||||
|
|
||||||
// {3}{U}: Target Merfolk can’t be blocked this turn.
|
// {3}{U}: Target Merfolk can't be blocked this turn.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(Duration.EndOfTurn), new ManaCostsImpl("{3}{U}"));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(Duration.EndOfTurn), new ManaCostsImpl("{3}{U}"));
|
||||||
ability.addTarget(new TargetPermanent(filter));
|
ability.addTarget(new TargetPermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class AzorTheLawbringer extends CardImpl {
|
||||||
// Flying
|
// Flying
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
// When Azor, the Lawbringer enters the battlefield, each opponent can’t cast instant or sorcery spells during that player’s next turn.
|
// When Azor, the Lawbringer enters the battlefield, each opponent can't cast instant or sorcery spells during that player's next turn.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AzorTheLawbringerEntersBattlefieldEffect(), false));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new AzorTheLawbringerEntersBattlefieldEffect(), false));
|
||||||
|
|
||||||
// Whenever Azor attacks, you may pay {X}{W}{U}{U}. If you do, you gain X life and draw X cards.
|
// Whenever Azor attacks, you may pay {X}{W}{U}{U}. If you do, you gain X life and draw X cards.
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ public final class BalanWanderingKnight extends CardImpl {
|
||||||
filter.add(new SubtypePredicate(SubType.EQUIPMENT));
|
filter.add(new SubtypePredicate(SubType.EQUIPMENT));
|
||||||
for (Permanent equipment : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(),game)) {
|
for (Permanent equipment : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(),game)) {
|
||||||
if (equipment != null) {
|
if (equipment != null) {
|
||||||
//If an Equipment can’t equip, it isn’t attached, and it doesn’t become unattached (if it’s attached to a creature).
|
//If an Equipment can't equip, it isn't attached, and it doesn't become unattached (if it's attached to a creature).
|
||||||
if (!balan.cantBeAttachedBy(equipment, game)) {
|
if (!balan.cantBeAttachedBy(equipment, game)) {
|
||||||
balan.addAttachment(equipment.getId(), game);
|
balan.addAttachment(equipment.getId(), game);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ class BalduvianWarlordUnblockEffect extends OneShotEffect {
|
||||||
if (chosenGroup != null) {
|
if (chosenGroup != null) {
|
||||||
// Relevant ruling for Balduvian Warlord:
|
// Relevant ruling for Balduvian Warlord:
|
||||||
// 7/15/2006 If an attacking creature has an ability that triggers “When this creature becomes blocked,”
|
// 7/15/2006 If an attacking creature has an ability that triggers “When this creature becomes blocked,”
|
||||||
// it triggers when a creature blocks it due to the Warlord’s ability only if it was unblocked at that point.
|
// it triggers when a creature blocks it due to the Warlord's ability only if it was unblocked at that point.
|
||||||
boolean notYetBlocked = chosenGroup.getBlockers().isEmpty();
|
boolean notYetBlocked = chosenGroup.getBlockers().isEmpty();
|
||||||
chosenGroup.addBlockerToGroup(permanent.getId(), controller.getId(), game);
|
chosenGroup.addBlockerToGroup(permanent.getId(), controller.getId(), game);
|
||||||
game.getCombat().addBlockingGroup(permanent.getId(), chosenPermanent.getId(), controller.getId(), game); // 702.21h
|
game.getCombat().addBlockingGroup(permanent.getId(), chosenPermanent.getId(), controller.getId(), game); // 702.21h
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ class BlightningEffect extends OneShotEffect {
|
||||||
|
|
||||||
BlightningEffect() {
|
BlightningEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = "That player or that planeswalker’s controller discards two cards.";
|
this.staticText = "That player or that planeswalker's controller discards two cards.";
|
||||||
}
|
}
|
||||||
|
|
||||||
BlightningEffect(final BlightningEffect effect) {
|
BlightningEffect(final BlightningEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class BonfireOfTheDamnedEffect extends OneShotEffect {
|
||||||
|
|
||||||
public BonfireOfTheDamnedEffect() {
|
public BonfireOfTheDamnedEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
staticText = "{this} deals X damage to target player or planeswalker and each creature that player or that planeswalker’s controller controls";
|
staticText = "{this} deals X damage to target player or planeswalker and each creature that player or that planeswalker's controller controls";
|
||||||
}
|
}
|
||||||
|
|
||||||
public BonfireOfTheDamnedEffect(final BonfireOfTheDamnedEffect effect) {
|
public BonfireOfTheDamnedEffect(final BonfireOfTheDamnedEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public final class CelestialColonnade extends CardImpl {
|
||||||
this.addAbility(new BlueManaAbility());
|
this.addAbility(new BlueManaAbility());
|
||||||
this.addAbility(new WhiteManaAbility());
|
this.addAbility(new WhiteManaAbility());
|
||||||
|
|
||||||
// {3}{W}{U}: Until end of turn, Celestial Colonnade becomes a 4/4 white and blue Elemental creature with flying and vigilance. It’s still a land.
|
// {3}{W}{U}: Until end of turn, Celestial Colonnade becomes a 4/4 white and blue Elemental creature with flying and vigilance. It's still a land.
|
||||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(
|
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(
|
||||||
new CreatureToken(4, 4, "4/4 white and blue Elemental creature with flying and vigilance")
|
new CreatureToken(4, 4, "4/4 white and blue Elemental creature with flying and vigilance")
|
||||||
.withColor("WU")
|
.withColor("WU")
|
||||||
|
|
|
||||||
|
|
@ -78,11 +78,11 @@ class CelestialConvergenceEffect extends OneShotEffect {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 801.14. If an effect states that a player wins the game, all of
|
* 801.14. If an effect states that a player wins the game, all of
|
||||||
* that player’s opponents within their range of influence lose the
|
* that player's opponents within their range of influence lose the
|
||||||
* game instead. #
|
* game instead. #
|
||||||
*
|
*
|
||||||
* 801.15. If the effect of a spell or ability states that the game
|
* 801.15. If the effect of a spell or ability states that the game
|
||||||
* is a draw, the game is a draw for that spell or ability’s
|
* is a draw, the game is a draw for that spell or ability's
|
||||||
* controller and all players within their range of influence. They
|
* controller and all players within their range of influence. They
|
||||||
* leave the game. All remaining players continue to play the game.
|
* leave the game. All remaining players continue to play the game.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ public final class ChandraNalaar extends CardImpl {
|
||||||
Effects effects1 = new Effects();
|
Effects effects1 = new Effects();
|
||||||
effects1.add(new DamageTargetEffect(10));
|
effects1.add(new DamageTargetEffect(10));
|
||||||
effects1.add(new DamageAllControlledTargetEffect(10, new FilterCreaturePermanent())
|
effects1.add(new DamageAllControlledTargetEffect(10, new FilterCreaturePermanent())
|
||||||
.setText("and each creature that player or that planeswalker’s controller controls")
|
.setText("and each creature that player or that planeswalker's controller controls")
|
||||||
);
|
);
|
||||||
LoyaltyAbility ability3 = new LoyaltyAbility(effects1, -8);
|
LoyaltyAbility ability3 = new LoyaltyAbility(effects1, -8);
|
||||||
ability3.addTarget(new TargetPlayerOrPlaneswalker());
|
ability3.addTarget(new TargetPlayerOrPlaneswalker());
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public final class ChandraPyrogenius extends CardImpl {
|
||||||
Effects effects = new Effects();
|
Effects effects = new Effects();
|
||||||
effects.add(new DamageTargetEffect(6));
|
effects.add(new DamageTargetEffect(6));
|
||||||
effects.add(new DamageAllControlledTargetEffect(6, new FilterCreaturePermanent())
|
effects.add(new DamageAllControlledTargetEffect(6, new FilterCreaturePermanent())
|
||||||
.setText("and each creature that player or that planeswalker’s controller controls")
|
.setText("and each creature that player or that planeswalker's controller controls")
|
||||||
);
|
);
|
||||||
ability = new LoyaltyAbility(effects, -10);
|
ability = new LoyaltyAbility(effects, -10);
|
||||||
ability.addTarget(new TargetPlayerOrPlaneswalker());
|
ability.addTarget(new TargetPlayerOrPlaneswalker());
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ class ChandraPyromasterEffect1 extends OneShotEffect {
|
||||||
|
|
||||||
public ChandraPyromasterEffect1() {
|
public ChandraPyromasterEffect1() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
staticText = "{this} deals 1 damage to target player or planeswalker and 1 damage to up to one target creature that player or that planeswalker’s controller controls. That creature can’t block this turn.";
|
staticText = "{this} deals 1 damage to target player or planeswalker and 1 damage to up to one target creature that player or that planeswalker's controller controls. That creature can't block this turn.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChandraPyromasterEffect1(final ChandraPyromasterEffect1 effect) {
|
public ChandraPyromasterEffect1(final ChandraPyromasterEffect1 effect) {
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ public final class ChandrasFury extends CardImpl {
|
||||||
// Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.
|
// Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
|
||||||
this.getSpellAbility().addEffect(new DamageAllControlledTargetEffect(1, new FilterCreaturePermanent())
|
this.getSpellAbility().addEffect(new DamageAllControlledTargetEffect(1, new FilterCreaturePermanent())
|
||||||
.setText("and each creature that player or that planeswalker’s controller controls")
|
.setText("and each creature that player or that planeswalker's controller controls")
|
||||||
);
|
);
|
||||||
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
|
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ class ConcussiveBoltEffect extends OneShotEffect {
|
||||||
|
|
||||||
public ConcussiveBoltEffect() {
|
public ConcussiveBoltEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = "Metalcraft - If you control three or more artifacts, creatures controlled by that player or by that planeswalker’s controller can’t block this turn.";
|
this.staticText = "Metalcraft - If you control three or more artifacts, creatures controlled by that player or by that planeswalker's controller can't block this turn.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConcussiveBoltEffect(final ConcussiveBoltEffect effect) {
|
public ConcussiveBoltEffect(final ConcussiveBoltEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ public final class ConsecrateLand extends CardImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 9/25/2006 ruling: If Consecrate Land enters the battlefield attached to a land that’s enchanted by other Auras, those Auras are put into their owners’ graveyards.
|
// 9/25/2006 ruling: If Consecrate Land enters the battlefield attached to a land that's enchanted by other Auras, those Auras are put into their owners' graveyards.
|
||||||
class ConsecrateLandRuleEffect extends ContinuousRuleModifyingEffectImpl {
|
class ConsecrateLandRuleEffect extends ContinuousRuleModifyingEffectImpl {
|
||||||
|
|
||||||
public ConsecrateLandRuleEffect() {
|
public ConsecrateLandRuleEffect() {
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ class DacksDuplicateApplyToPermanent extends ApplyToPermanent {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Permanent permanent, Ability source, UUID copyToObjectId) {
|
public boolean apply(Game game, Permanent permanent, Ability source, UUID copyToObjectId) {
|
||||||
/**
|
/**
|
||||||
* 29/05/2014 The ability of Dack’s Duplicate doesn’t target the
|
* 29/05/2014 The ability of Dack's Duplicate doesn't target the
|
||||||
* creature.
|
* creature.
|
||||||
*/
|
*/
|
||||||
permanent.addAbility(new DethroneAbility(), game);
|
permanent.addAbility(new DethroneAbility(), game);
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ public final class DarksteelJuggernaut extends CardImpl {
|
||||||
// Indestructible
|
// Indestructible
|
||||||
this.addAbility(IndestructibleAbility.getInstance());
|
this.addAbility(IndestructibleAbility.getInstance());
|
||||||
|
|
||||||
// Darksteel Juggernaut’s power and toughness are each equal to the number of artifacts you control.
|
// Darksteel Juggernaut's power and toughness are each equal to the number of artifacts you control.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.ALL,
|
this.addAbility(new SimpleStaticAbility(Zone.ALL,
|
||||||
new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(new FilterControlledArtifactPermanent("artifacts you control")), Duration.EndOfGame)));
|
new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(new FilterControlledArtifactPermanent("artifacts you control")), Duration.EndOfGame)));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,13 +75,13 @@ class DawnbreakReclaimerEffect extends OneShotEffect {
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
/**
|
/**
|
||||||
* 04.11.2015 If any opponent has a creature card in their
|
* 04.11.2015 If any opponent has a creature card in their
|
||||||
* graveyard as Dawnbreak Reclaimer’s ability resolves, then you must
|
* graveyard as Dawnbreak Reclaimer's ability resolves, then you must
|
||||||
* choose one of those cards. You can’t choose a different opponent with
|
* choose one of those cards. You can't choose a different opponent with
|
||||||
* no creature cards in their graveyard to avoid returning one of
|
* no creature cards in their graveyard to avoid returning one of
|
||||||
* those cards.
|
* those cards.
|
||||||
*
|
*
|
||||||
* 04.11.2015 If there are no creature cards in any opponent’s graveyard
|
* 04.11.2015 If there are no creature cards in any opponent's graveyard
|
||||||
* as Dawnbreak Reclaimer’s ability resolves, you’ll still have the
|
* as Dawnbreak Reclaimer's ability resolves, you'll still have the
|
||||||
* option to return a creature card from your graveyard to the
|
* option to return a creature card from your graveyard to the
|
||||||
* battlefield. You choose which opponent will choose a creature card in
|
* battlefield. You choose which opponent will choose a creature card in
|
||||||
* your graveyard.
|
* your graveyard.
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ class DeicideExileEffect extends SearchTargetGraveyardHandLibraryForCardNameAndE
|
||||||
controller.moveCardToExileWithInfo(targetEnchantment, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true);
|
controller.moveCardToExileWithInfo(targetEnchantment, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true);
|
||||||
// 4/26/2014
|
// 4/26/2014
|
||||||
// Deicide looks at the card in exile, not the permanent that was exiled, to determine
|
// Deicide looks at the card in exile, not the permanent that was exiled, to determine
|
||||||
// if it is a God. For each of the Gods in the Theros block, it won’t matter what your
|
// if it is a God. For each of the Gods in the Theros block, it won't matter what your
|
||||||
// devotion to its color(s) was. The card is a God card when not on the battlefield.
|
// devotion to its color(s) was. The card is a God card when not on the battlefield.
|
||||||
Card cardInExile = game.getExile().getCard(targetEnchantment.getId(), game);
|
Card cardInExile = game.getExile().getCard(targetEnchantment.getId(), game);
|
||||||
if (cardInExile != null && cardInExile.hasSubtype(SubType.GOD, game)) {
|
if (cardInExile != null && cardInExile.hasSubtype(SubType.GOD, game)) {
|
||||||
|
|
|
||||||
|
|
@ -156,7 +156,7 @@ class TargetControlledSource extends TargetSource {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 108.4a If anything asks for the controller of a card that doesn’t have one (because it’s not a permanent or spell), use its owner instead.
|
// 108.4a If anything asks for the controller of a card that doesn't have one (because it's not a permanent or spell), use its owner instead.
|
||||||
for (Card card : game.getExile().getAllCards(game)) {
|
for (Card card : game.getExile().getAllCards(game)) {
|
||||||
if (Objects.equals(card.getOwnerId(), sourceControllerId)) {
|
if (Objects.equals(card.getOwnerId(), sourceControllerId)) {
|
||||||
count++;
|
count++;
|
||||||
|
|
@ -189,7 +189,7 @@ class TargetControlledSource extends TargetSource {
|
||||||
for (Card card : player.getGraveyard().getCards(game)) {
|
for (Card card : player.getGraveyard().getCards(game)) {
|
||||||
possibleTargets.add(card.getId());
|
possibleTargets.add(card.getId());
|
||||||
}
|
}
|
||||||
// 108.4a If anything asks for the controller of a card that doesn’t have one (because it’s not a permanent or spell), use its owner instead.
|
// 108.4a If anything asks for the controller of a card that doesn't have one (because it's not a permanent or spell), use its owner instead.
|
||||||
for (Card card : game.getExile().getAllCards(game)) {
|
for (Card card : game.getExile().getAllCards(game)) {
|
||||||
if (Objects.equals(card.getOwnerId(), sourceControllerId)) {
|
if (Objects.equals(card.getOwnerId(), sourceControllerId)) {
|
||||||
possibleTargets.add(card.getId());
|
possibleTargets.add(card.getId());
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ class DrainPowerEffect extends OneShotEffect {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 106.12. One card (Drain Power) causes one player to lose unspent mana and another to add “the mana lost this way.” (Note that these may be the same player.)
|
// 106.12. One card (Drain Power) causes one player to lose unspent mana and another to add “the mana lost this way.” (Note that these may be the same player.)
|
||||||
// This empties the former player’s mana pool and causes the mana emptied this way to be put into the latter player’s mana pool. Which permanents, spells, and/or
|
// This empties the former player's mana pool and causes the mana emptied this way to be put into the latter player's mana pool. Which permanents, spells, and/or
|
||||||
// abilities produced that mana are unchanged, as are any restrictions or additional effects associated with any of that mana.
|
// abilities produced that mana are unchanged, as are any restrictions or additional effects associated with any of that mana.
|
||||||
List<ManaPoolItem> manaItems = targetPlayer.getManaPool().getManaItems();
|
List<ManaPoolItem> manaItems = targetPlayer.getManaPool().getManaItems();
|
||||||
targetPlayer.getManaPool().emptyPool(game);
|
targetPlayer.getManaPool().emptyPool(game);
|
||||||
|
|
|
||||||
|
|
@ -102,9 +102,9 @@ class EarthshakerKhenraEffect extends OneShotEffect {
|
||||||
if (sourceObject != null) {
|
if (sourceObject != null) {
|
||||||
Permanent targetCreature = game.getPermanent(getTargetPointer().getFirst(game, source));
|
Permanent targetCreature = game.getPermanent(getTargetPointer().getFirst(game, source));
|
||||||
/*
|
/*
|
||||||
27.06.2017 The target creature’s power is checked when you target it with Earthshaker Khenra’s ability
|
27.06.2017 The target creature's power is checked when you target it with Earthshaker Khenra's ability
|
||||||
and when that ability resolves. Once the ability resolves, if the creature’s power increases
|
and when that ability resolves. Once the ability resolves, if the creature's power increases
|
||||||
or Earthshaker Khenra’s power decreases, the target creature will still be unable to block.
|
or Earthshaker Khenra's power decreases, the target creature will still be unable to block.
|
||||||
*/
|
*/
|
||||||
if (targetCreature != null && targetCreature.getPower().getValue() <= sourceObject.getPower().getValue()) {
|
if (targetCreature != null && targetCreature.getPower().getValue() <= sourceObject.getPower().getValue()) {
|
||||||
ContinuousEffect effect = new CantBlockTargetEffect(Duration.EndOfTurn);
|
ContinuousEffect effect = new CantBlockTargetEffect(Duration.EndOfTurn);
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,8 @@ public final class EndlessSands extends CardImpl {
|
||||||
exileAbility.addTarget(new TargetControlledCreaturePermanent());
|
exileAbility.addTarget(new TargetControlledCreaturePermanent());
|
||||||
this.addAbility(exileAbility);
|
this.addAbility(exileAbility);
|
||||||
|
|
||||||
// {4}, {T}, Sacrifice Endless Sands: Return each creature card exiled with Endless Sands to the battlefield under its owner’s control.
|
// {4}, {T}, Sacrifice Endless Sands: Return each creature card exiled with Endless Sands to the battlefield under its owner's control.
|
||||||
ReturnCreaturesFromExileEffect returnFromExileEffect = new ReturnCreaturesFromExileEffect(this.getId(), true, "Return each creature card exiled with {this} to the battlefield under its owner’s control.");
|
ReturnCreaturesFromExileEffect returnFromExileEffect = new ReturnCreaturesFromExileEffect(this.getId(), true, "Return each creature card exiled with {this} to the battlefield under its owner's control.");
|
||||||
Ability returnAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, returnFromExileEffect, new ManaCostsImpl("{4}"));
|
Ability returnAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, returnFromExileEffect, new ManaCostsImpl("{4}"));
|
||||||
returnAbility.addCost(new TapSourceCost());
|
returnAbility.addCost(new TapSourceCost());
|
||||||
returnAbility.addCost(new SacrificeSourceCost());
|
returnAbility.addCost(new SacrificeSourceCost());
|
||||||
|
|
|
||||||
|
|
@ -32,14 +32,14 @@ public final class FalkenrathGorger extends CardImpl {
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
/**
|
/**
|
||||||
* 4/8/2016 Falkenrath Gorger’s ability only applies while it’s on the
|
* 4/8/2016 Falkenrath Gorger's ability only applies while it's on the
|
||||||
* battlefield. If you discard it, it won’t give itself madness.
|
* battlefield. If you discard it, it won't give itself madness.
|
||||||
* 4/8/2016 If Falkenrath Gorger leaves the battlefield before the
|
* 4/8/2016 If Falkenrath Gorger leaves the battlefield before the
|
||||||
* madness trigger has resolved for a Vampire card that gained madness
|
* madness trigger has resolved for a Vampire card that gained madness
|
||||||
* with its ability, the madness ability will still let you cast that
|
* with its ability, the madness ability will still let you cast that
|
||||||
* Vampire card for the appropriate cost even though it no longer has
|
* Vampire card for the appropriate cost even though it no longer has
|
||||||
* madness. 4/8/2016 If you discard a Vampire creature card that already
|
* madness. 4/8/2016 If you discard a Vampire creature card that already
|
||||||
* has a madness ability, you’ll choose which madness ability exiles it.
|
* has a madness ability, you'll choose which madness ability exiles it.
|
||||||
* You may choose either the one it normally has or the one it gains
|
* You may choose either the one it normally has or the one it gains
|
||||||
* from Falkenrath Gorger.
|
* from Falkenrath Gorger.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -156,7 +156,7 @@ class FalseOrdersUnblockEffect extends OneShotEffect {
|
||||||
if (chosenGroup != null) {
|
if (chosenGroup != null) {
|
||||||
// Relevant ruling for Balduvian Warlord:
|
// Relevant ruling for Balduvian Warlord:
|
||||||
// 7/15/2006 If an attacking creature has an ability that triggers “When this creature becomes blocked,”
|
// 7/15/2006 If an attacking creature has an ability that triggers “When this creature becomes blocked,”
|
||||||
// it triggers when a creature blocks it due to the Warlord’s ability only if it was unblocked at that point.
|
// it triggers when a creature blocks it due to the Warlord's ability only if it was unblocked at that point.
|
||||||
boolean notYetBlocked = chosenGroup.getBlockers().isEmpty();
|
boolean notYetBlocked = chosenGroup.getBlockers().isEmpty();
|
||||||
chosenGroup.addBlockerToGroup(permanent.getId(), controller.getId(), game);
|
chosenGroup.addBlockerToGroup(permanent.getId(), controller.getId(), game);
|
||||||
game.getCombat().addBlockingGroup(permanent.getId(), chosenPermanent.getId(), controller.getId(), game); // 702.21h
|
game.getCombat().addBlockingGroup(permanent.getId(), chosenPermanent.getId(), controller.getId(), game); // 702.21h
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ public final class FlameWave extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
|
||||||
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
|
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
|
||||||
this.getSpellAbility().addEffect(new DamageAllControlledTargetEffect(4, new FilterCreaturePermanent())
|
this.getSpellAbility().addEffect(new DamageAllControlledTargetEffect(4, new FilterCreaturePermanent())
|
||||||
.setText("and each creature that player or that planeswalker’s controller controls")
|
.setText("and each creature that player or that planeswalker's controller controls")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ public final class ForebearsBlade extends CardImpl {
|
||||||
ability.addEffect(effect);
|
ability.addEffect(effect);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Whenever equipped creature dies, attach Forebear’s Blade to target creature you control.
|
// Whenever equipped creature dies, attach Forebear's Blade to target creature you control.
|
||||||
ability = new DiesAttachedTriggeredAbility(
|
ability = new DiesAttachedTriggeredAbility(
|
||||||
new AttachEffect(Outcome.Neutral, "attach {this} to target creature you control"), "equipped creature", false);
|
new AttachEffect(Outcome.Neutral, "attach {this} to target creature you control"), "equipped creature", false);
|
||||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
ability.addTarget(new TargetControlledCreaturePermanent());
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ class GoblinLyreEffect extends OneShotEffect {
|
||||||
public GoblinLyreEffect() {
|
public GoblinLyreEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
this.staticText = "Flip a coin. If you win the flip, {this} deals damage to target opponent or planeswalker equal to the number of creatures you control. "
|
this.staticText = "Flip a coin. If you win the flip, {this} deals damage to target opponent or planeswalker equal to the number of creatures you control. "
|
||||||
+ "If you lose the flip, Goblin Lyre deals damage to you equal to the number of creatures that opponent or that planeswalker’s controller controls";
|
+ "If you lose the flip, Goblin Lyre deals damage to you equal to the number of creatures that opponent or that planeswalker's controller controls";
|
||||||
}
|
}
|
||||||
|
|
||||||
public GoblinLyreEffect(final GoblinLyreEffect effect) {
|
public GoblinLyreEffect(final GoblinLyreEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public final class GuardiansOfKoilos extends CardImpl {
|
||||||
this.power = new MageInt(4);
|
this.power = new MageInt(4);
|
||||||
this.toughness = new MageInt(4);
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
// When Guardians of Koilos enters the battlefield, you may return another target historic permanent you control to its owner’s hand.
|
// When Guardians of Koilos enters the battlefield, you may return another target historic permanent you control to its owner's hand.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter)
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter)
|
||||||
.setText("you may return another target historic permanent you control to its owner's hand. <i>(Artifacts, legendaries, and Sagas are historic.)</i>"), true));
|
.setText("you may return another target historic permanent you control to its owner's hand. <i>(Artifacts, legendaries, and Sagas are historic.)</i>"), true));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ class HallOfGemstoneEffect extends ReplacementEffectImpl {
|
||||||
if (colorChosen != null) {
|
if (colorChosen != null) {
|
||||||
ManaEvent manaEvent = (ManaEvent) event;
|
ManaEvent manaEvent = (ManaEvent) event;
|
||||||
Mana mana = manaEvent.getMana();
|
Mana mana = manaEvent.getMana();
|
||||||
// 8/23/2016 Colorless mana added to a player’s mana pool isn’t affected.
|
// 8/23/2016 Colorless mana added to a player's mana pool isn't affected.
|
||||||
int genericAmount = mana.getGeneric();
|
int genericAmount = mana.getGeneric();
|
||||||
int colorlessAmount = mana.getColorless();
|
int colorlessAmount = mana.getColorless();
|
||||||
int coloredAmount = mana.countColored();
|
int coloredAmount = mana.countColored();
|
||||||
|
|
|
||||||
|
|
@ -126,7 +126,7 @@ class HaphazardBombardmentEndOfTurnEffect extends OneShotEffect {
|
||||||
|
|
||||||
// 4/27/2018 If one or more of the permanents with aim counters on them have indestructible,
|
// 4/27/2018 If one or more of the permanents with aim counters on them have indestructible,
|
||||||
// select the permanent destroyed at random from among the permanents with aim counters
|
// select the permanent destroyed at random from among the permanents with aim counters
|
||||||
// that don’t have indestructible.
|
// that don't have indestructible.
|
||||||
FilterPermanent filter = new FilterPermanent("if two or more permanents you don't control have an aim counter on them");
|
FilterPermanent filter = new FilterPermanent("if two or more permanents you don't control have an aim counter on them");
|
||||||
filter.add(new ControllerPredicate(TargetController.NOT_YOU));
|
filter.add(new ControllerPredicate(TargetController.NOT_YOU));
|
||||||
filter.add(new CounterPredicate(CounterType.AIM));
|
filter.add(new CounterPredicate(CounterType.AIM));
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ class HeartOfBogardanTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "When a player doesn't pay {this}'s cumulative upkeep, "
|
return "When a player doesn't pay {this}'s cumulative upkeep, "
|
||||||
+ "{this} deals X damage to target player or planeswalker "
|
+ "{this} deals X damage to target player or planeswalker "
|
||||||
+ "and each creature that player or that planeswalker’s controller controls,"
|
+ "and each creature that player or that planeswalker's controller controls,"
|
||||||
+ " where X is twice the number of age counters on {this} minus 2.";
|
+ " where X is twice the number of age counters on {this} minus 2.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -87,7 +87,7 @@ class HeartOfBogardanEffect extends OneShotEffect {
|
||||||
public HeartOfBogardanEffect() {
|
public HeartOfBogardanEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
staticText = "{this} deals X damage to target player or planeswalker "
|
staticText = "{this} deals X damage to target player or planeswalker "
|
||||||
+ "and each creature that player or that planeswalker’s controller controls, "
|
+ "and each creature that player or that planeswalker's controller controls, "
|
||||||
+ "where X is twice the number of age counters on {this} minus 2";
|
+ "where X is twice the number of age counters on {this} minus 2";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,6 @@ class HellriderTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever a creature you control attacks, {this} deals 1 damage to the player or planeswalker it’s attacking.";
|
return "Whenever a creature you control attacks, {this} deals 1 damage to the player or planeswalker it's attacking.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ public final class HelmOfTheHost extends CardImpl {
|
||||||
this.addSuperType(SuperType.LEGENDARY);
|
this.addSuperType(SuperType.LEGENDARY);
|
||||||
this.subtype.add(SubType.EQUIPMENT);
|
this.subtype.add(SubType.EQUIPMENT);
|
||||||
|
|
||||||
// At the beginning of combat on your turn, create a token that’s a copy of equipped creature, except the token isn’t legendary if equipped creature is legendary. That token gains haste.
|
// At the beginning of combat on your turn, create a token that's a copy of equipped creature, except the token isn't legendary if equipped creature is legendary. That token gains haste.
|
||||||
TriggeredAbility ability = new BeginningOfCombatTriggeredAbility(
|
TriggeredAbility ability = new BeginningOfCombatTriggeredAbility(
|
||||||
new HelmOfTheHostEffect(),
|
new HelmOfTheHostEffect(),
|
||||||
TargetController.YOU,
|
TargetController.YOU,
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class JayasImmolatingInferno extends CardImpl {
|
||||||
// (You may cast a legendary sorcery only if you control a legendary creature or planeswalker.)
|
// (You may cast a legendary sorcery only if you control a legendary creature or planeswalker.)
|
||||||
this.addAbility(new LegendarySpellAbility());
|
this.addAbility(new LegendarySpellAbility());
|
||||||
|
|
||||||
// Jaya’s Immolating Inferno deals X damage to each of up to three targets.
|
// Jaya's Immolating Inferno deals X damage to each of up to three targets.
|
||||||
Effect effect = new DamageTargetEffect(new ManacostVariableValue());
|
Effect effect = new DamageTargetEffect(new ManacostVariableValue());
|
||||||
effect.setText("{this} deals X damage to each of up to three targets");
|
effect.setText("{this} deals X damage to each of up to three targets");
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public final class JunglebornPioneer extends CardImpl {
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
// When Jungleborn Pioneer enters the battlefield, create a 1/1 blue Merfolk creature token with hexproof. (It can’t be the target of spells or abilities your opponents control.)
|
// When Jungleborn Pioneer enters the battlefield, create a 1/1 blue Merfolk creature token with hexproof. (It can't be the target of spells or abilities your opponents control.)
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new MerfolkHexproofToken()),false);
|
Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new MerfolkHexproofToken()),false);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public final class KarnsTemporalSundering extends CardImpl {
|
||||||
// (You may cast a legendary sorcery only if you control a legendary creature or planeswalker.)
|
// (You may cast a legendary sorcery only if you control a legendary creature or planeswalker.)
|
||||||
this.addAbility(new LegendarySpellAbility());
|
this.addAbility(new LegendarySpellAbility());
|
||||||
|
|
||||||
// Target player takes an extra turn after this one. Return up to one target nonland permanent to its owner’s hand. Exile Karn’s Temporal Sundering.
|
// Target player takes an extra turn after this one. Return up to one target nonland permanent to its owner's hand. Exile Karn's Temporal Sundering.
|
||||||
this.getSpellAbility().addEffect(new KarnsTemporalSunderingEffect());
|
this.getSpellAbility().addEffect(new KarnsTemporalSunderingEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||||
this.getSpellAbility().addTarget(new TargetNonlandPermanent(0, 1, false));
|
this.getSpellAbility().addTarget(new TargetNonlandPermanent(0, 1, false));
|
||||||
|
|
@ -50,7 +50,7 @@ class KarnsTemporalSunderingEffect extends OneShotEffect {
|
||||||
|
|
||||||
public KarnsTemporalSunderingEffect() {
|
public KarnsTemporalSunderingEffect() {
|
||||||
super(Outcome.ExtraTurn);
|
super(Outcome.ExtraTurn);
|
||||||
this.staticText = "Target player takes an extra turn after this one. Return up to one target nonland permanent to its owner’s hand";
|
this.staticText = "Target player takes an extra turn after this one. Return up to one target nonland permanent to its owner's hand";
|
||||||
}
|
}
|
||||||
|
|
||||||
public KarnsTemporalSunderingEffect(final KarnsTemporalSunderingEffect effect) {
|
public KarnsTemporalSunderingEffect(final KarnsTemporalSunderingEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public final class KitesailCorsair extends CardImpl {
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// Kitesail Corsair has flying as long as it’s attacking.
|
// Kitesail Corsair has flying as long as it's attacking.
|
||||||
ContinuousEffect gainEffect = new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield);
|
ContinuousEffect gainEffect = new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield);
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
||||||
gainEffect,
|
gainEffect,
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ class LavalancheEffect extends OneShotEffect {
|
||||||
public LavalancheEffect(DynamicValue amount) {
|
public LavalancheEffect(DynamicValue amount) {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
staticText = "{this} deals X damage to target player or planeswalker and each creature that player or that planeswalker’s controller controls";
|
staticText = "{this} deals X damage to target player or planeswalker and each creature that player or that planeswalker's controller controls";
|
||||||
}
|
}
|
||||||
|
|
||||||
public LavalancheEffect(final LavalancheEffect effect) {
|
public LavalancheEffect(final LavalancheEffect effect) {
|
||||||
|
|
@ -71,7 +71,7 @@ class LavalancheEffect extends OneShotEffect {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
targetPlayer.damage(amount.calculate(game, source, this), source.getSourceId(), game, false, true);
|
targetPlayer.damage(amount.calculate(game, source, this), source.getSourceId(), game, false, true);
|
||||||
FilterPermanent filter = new FilterPermanent("and each creature that player or that planeswalker’s controller controls");
|
FilterPermanent filter = new FilterPermanent("and each creature that player or that planeswalker's controller controls");
|
||||||
filter.add(new CardTypePredicate(CardType.CREATURE));
|
filter.add(new CardTypePredicate(CardType.CREATURE));
|
||||||
filter.add(new ControllerIdPredicate(targetPlayer.getId()));
|
filter.add(new ControllerIdPredicate(targetPlayer.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);
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ class MageSlayerEffect extends OneShotEffect {
|
||||||
|
|
||||||
public MageSlayerEffect() {
|
public MageSlayerEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
staticText = "it deals damage equal to the player or planeswalker it’s attacking";
|
staticText = "it deals damage equal to the player or planeswalker it's attacking";
|
||||||
}
|
}
|
||||||
|
|
||||||
public MageSlayerEffect(final MageSlayerEffect effect) {
|
public MageSlayerEffect(final MageSlayerEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -47,13 +47,13 @@ public final class ManorGargoyle extends CardImpl {
|
||||||
613.7. Within a layer or sublayer, determining which order effects are applied in is sometimes done using a dependency system.
|
613.7. Within a layer or sublayer, determining which order effects are applied in is sometimes done using a dependency system.
|
||||||
If a dependency exists, it will override the timestamp system.
|
If a dependency exists, it will override the timestamp system.
|
||||||
613.7a An effect is said to “depend on” another if
|
613.7a An effect is said to “depend on” another if
|
||||||
(a) it’s applied in the same layer (and, if applicable, sublayer) as the other effect (see rules 613.1 and 613.3);
|
(a) it's applied in the same layer (and, if applicable, sublayer) as the other effect (see rules 613.1 and 613.3);
|
||||||
(b) applying the other would change the text or the existence of the first effect, what it applies to, or what
|
(b) applying the other would change the text or the existence of the first effect, what it applies to, or what
|
||||||
it does to any of the things it applies to; and
|
it does to any of the things it applies to; and
|
||||||
(c) neither effect is from a characteristic-defining ability or both effects are from characteristic-defining
|
(c) neither effect is from a characteristic-defining ability or both effects are from characteristic-defining
|
||||||
abilities. Otherwise, the effect is considered to be independent of the other effect.
|
abilities. Otherwise, the effect is considered to be independent of the other effect.
|
||||||
613.7b An effect dependent on one or more other effects waits to apply until just after all of those effects have been applied.
|
613.7b An effect dependent on one or more other effects waits to apply until just after all of those effects have been applied.
|
||||||
If multiple dependent effects would apply simultaneously in this way, they’re applied in timestamp order relative to each
|
If multiple dependent effects would apply simultaneously in this way, they're applied in timestamp order relative to each
|
||||||
other. If several dependent effects form a dependency loop, then this rule is ignored and the effects in the dependency
|
other. If several dependent effects form a dependency loop, then this rule is ignored and the effects in the dependency
|
||||||
loop are applied in timestamp order.
|
loop are applied in timestamp order.
|
||||||
613.7c After each effect is applied, the order of remaining effects is reevaluated and may change if an effect that has not yet
|
613.7c After each effect is applied, the order of remaining effects is reevaluated and may change if an effect that has not yet
|
||||||
|
|
|
||||||
|
|
@ -43,9 +43,9 @@ public final class MarkOfSakiko extends CardImpl {
|
||||||
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Enchanted creature has "Whenever this creature deals combat damage to a player, add that much {G}. Until end of turn, you don’t lose this mana as steps and phases end."
|
// Enchanted creature has "Whenever this creature deals combat damage to a player, add that much {G}. Until end of turn, you don't lose this mana as steps and phases end."
|
||||||
Effect effect = new GainAbilityAttachedEffect(new MarkOfSakikoTriggeredAbility(), AttachmentType.AURA);
|
Effect effect = new GainAbilityAttachedEffect(new MarkOfSakikoTriggeredAbility(), AttachmentType.AURA);
|
||||||
effect.setText("Enchanted creature has \"Whenever this creature deals combat damage to a player, add that much {G}. Until end of turn, you don’t lose this mana as steps and phases end.\"");
|
effect.setText("Enchanted creature has \"Whenever this creature deals combat damage to a player, add that much {G}. Until end of turn, you don't lose this mana as steps and phases end.\"");
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -87,7 +87,7 @@ class MarkOfSakikoTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
this.getEffects().clear();
|
this.getEffects().clear();
|
||||||
Effect effect = new AddManaToManaPoolTargetControllerEffect(Mana.GreenMana(event.getAmount()), "that player", true);
|
Effect effect = new AddManaToManaPoolTargetControllerEffect(Mana.GreenMana(event.getAmount()), "that player", true);
|
||||||
effect.setTargetPointer(new FixedTarget(getControllerId()));
|
effect.setTargetPointer(new FixedTarget(getControllerId()));
|
||||||
effect.setText("add that much {G}. Until end of turn, you don’t lose this mana as steps and phases end");
|
effect.setText("add that much {G}. Until end of turn, you don't lose this mana as steps and phases end");
|
||||||
this.addEffect(effect);
|
this.addEffect(effect);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -98,6 +98,6 @@ class MarkOfSakikoTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever this creature deals combat damage to a player, add that much {G}. "
|
return "Whenever this creature deals combat damage to a player, add that much {G}. "
|
||||||
+ "Until end of turn, you don’t lose this mana as steps and phases end.";
|
+ "Until end of turn, you don't lose this mana as steps and phases end.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ public final class MarwynTheNurturer extends CardImpl {
|
||||||
// Whenever another Elf enters the battlefield under your control, put a +1/+1 counter on Marwyn, the Nurturer.
|
// Whenever another Elf enters the battlefield under your control, put a +1/+1 counter on Marwyn, the Nurturer.
|
||||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter));
|
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter));
|
||||||
|
|
||||||
// {T}: Add an amount of {G} equal to Marwyn’s power.
|
// {T}: Add an amount of {G} equal to Marwyn's power.
|
||||||
this.addAbility(new DynamicManaAbility(Mana.GreenMana(1), new SourcePermanentPowerCount(), "Add an amount of {G} equal to {this}'s power"));
|
this.addAbility(new DynamicManaAbility(Mana.GreenMana(1), new SourcePermanentPowerCount(), "Add an amount of {G} equal to {this}'s power"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ public final class MazesEnd extends CardImpl {
|
||||||
// {T}: Add 1.
|
// {T}: Add 1.
|
||||||
this.addAbility(new ColorlessManaAbility());
|
this.addAbility(new ColorlessManaAbility());
|
||||||
|
|
||||||
// 3, {T}, Return Maze's End to its owner’s hand: Search your library for a Gate card, put it onto the battlefield, then shuffle your library. If you control ten or more Gates with different names, you win the game.
|
// 3, {T}, Return Maze's End to its owner's hand: Search your library for a Gate card, put it onto the battlefield, then shuffle your library. If you control ten or more Gates with different names, you win the game.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filterCard)), new GenericManaCost(3));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filterCard)), new GenericManaCost(3));
|
||||||
ability.addEffect(new MazesEndEffect());
|
ability.addEffect(new MazesEndEffect());
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
|
|
|
||||||
|
|
@ -22,19 +22,19 @@ import mage.players.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* As Meandering Towershell returns to the battlefield because of the delayed
|
* As Meandering Towershell returns to the battlefield because of the delayed
|
||||||
* triggered ability, you choose which opponent or opposing planeswalker it’s
|
* triggered ability, you choose which opponent or opposing planeswalker it's
|
||||||
* attacking. It doesn’t have to attack the same opponent or opposing
|
* attacking. It doesn't have to attack the same opponent or opposing
|
||||||
* planeswalker that it was when it was exiled.
|
* planeswalker that it was when it was exiled.
|
||||||
*
|
*
|
||||||
* If Meandering Towershell enters the battlefield attacking, it wasn’t declared
|
* If Meandering Towershell enters the battlefield attacking, it wasn't declared
|
||||||
* as an attacking creature that turn. Abilities that trigger when a creature
|
* as an attacking creature that turn. Abilities that trigger when a creature
|
||||||
* attacks, including its own triggered ability, won’t trigger.
|
* attacks, including its own triggered ability, won't trigger.
|
||||||
*
|
*
|
||||||
* On the turn Meandering Towershell attacks and is exiled, raid abilities will
|
* On the turn Meandering Towershell attacks and is exiled, raid abilities will
|
||||||
* see it as a creature that attacked. Conversely, on the turn Meandering
|
* see it as a creature that attacked. Conversely, on the turn Meandering
|
||||||
* Towershell enters the battlefield attacking, raid abilities will not.
|
* Towershell enters the battlefield attacking, raid abilities will not.
|
||||||
*
|
*
|
||||||
* If you attack with a Meandering Towershell that you don’t own, you’ll control
|
* If you attack with a Meandering Towershell that you don't own, you'll control
|
||||||
* it when it returns to the battlefield.
|
* it when it returns to the battlefield.
|
||||||
*
|
*
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ class MeddlingMageReplacementEffect extends ContinuousRuleModifyingEffectImpl {
|
||||||
|
|
||||||
public MeddlingMageReplacementEffect() {
|
public MeddlingMageReplacementEffect() {
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||||
staticText = "Spells with the chosen name can’t be cast";
|
staticText = "Spells with the chosen name can't be cast";
|
||||||
}
|
}
|
||||||
|
|
||||||
public MeddlingMageReplacementEffect(final MeddlingMageReplacementEffect effect) {
|
public MeddlingMageReplacementEffect(final MeddlingMageReplacementEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,6 @@ class MemoricideEffect extends SearchTargetGraveyardHandLibraryForCardNameAndExi
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getText(Mode mode) {
|
public String getText(Mode mode) {
|
||||||
return "Search target player’s graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles their library";
|
return "Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles their library";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,6 @@ class MisersCageTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "at the beginning of each opponent’s upkeep, if that player has five or more cards in hand, {this} deals 2 damage to that player";
|
return "at the beginning of each opponent's upkeep, if that player has five or more cards in hand, {this} deals 2 damage to that player";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ public final class MistCloakedHerald extends CardImpl {
|
||||||
this.power = new MageInt(1);
|
this.power = new MageInt(1);
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// Mist-Cloaked Herald can’t be blocked.
|
// Mist-Cloaked Herald can't be blocked.
|
||||||
this.addAbility(new CantBeBlockedSourceAbility());
|
this.addAbility(new CantBeBlockedSourceAbility());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ class MuldrothaTheGravetideWatcher extends Watcher {
|
||||||
final HashMap<MageObjectReference, Set<CardType>> sourcePlayedPermanentTypes = new HashMap<>(); // source that played permanent types from graveyard
|
final HashMap<MageObjectReference, Set<CardType>> sourcePlayedPermanentTypes = new HashMap<>(); // source that played permanent types from graveyard
|
||||||
// final HashMap<UUID, Set<CardType>> playerPlayedPermanentTypes = new HashMap<>(); // player that played permanent types from graveyard
|
// final HashMap<UUID, Set<CardType>> playerPlayedPermanentTypes = new HashMap<>(); // player that played permanent types from graveyard
|
||||||
// 4/27/2018 If multiple effects allow you to play a card from your graveyard, such as those of Gisa and Geralf and Karador,
|
// 4/27/2018 If multiple effects allow you to play a card from your graveyard, such as those of Gisa and Geralf and Karador,
|
||||||
// Ghost Chieftain, you must announce which permission you’re using as you begin to play the card.
|
// Ghost Chieftain, you must announce which permission you're using as you begin to play the card.
|
||||||
// 4/27/2018: If you play a card from your graveyard and then have a new Muldrotha come under your control in the same turn,
|
// 4/27/2018: If you play a card from your graveyard and then have a new Muldrotha come under your control in the same turn,
|
||||||
// you may play another card of that type from your graveyard that turn.
|
// you may play another card of that type from your graveyard that turn.
|
||||||
private Zone fromZone;
|
private Zone fromZone;
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ class MyrBattlesphereTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever {this} attacks, you may tap X untapped Myr you control. If you do, {this} gets +X/+0 until end of turn and deals X damage to the player or planeswalker it’s attacking.";
|
return "Whenever {this} attacks, you may tap X untapped Myr you control. If you do, {this} gets +X/+0 until end of turn and deals X damage to the player or planeswalker it's attacking.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -111,7 +111,7 @@ class MyrBattlesphereEffect extends OneShotEffect {
|
||||||
|
|
||||||
public MyrBattlesphereEffect() {
|
public MyrBattlesphereEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
staticText = "you may tap X untapped Myr you control. If you do, {this} gets +X/+0 until end of turn and deals X damage to the player or planeswalker it’s attacking.";
|
staticText = "you may tap X untapped Myr you control. If you do, {this} gets +X/+0 until end of turn and deals X damage to the player or planeswalker it's attacking.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public MyrBattlesphereEffect(final MyrBattlesphereEffect effect) {
|
public MyrBattlesphereEffect(final MyrBattlesphereEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public final class NavigatorsCompass extends CardImpl {
|
||||||
public NavigatorsCompass(UUID ownerId, CardSetInfo setInfo) {
|
public NavigatorsCompass(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
|
||||||
|
|
||||||
// When Navigator’s Compass enters the battlefield, you gain 3 life.
|
// When Navigator's Compass enters the battlefield, you gain 3 life.
|
||||||
Ability etbAbility = new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3));
|
Ability etbAbility = new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3));
|
||||||
this.addAbility(etbAbility);
|
this.addAbility(etbAbility);
|
||||||
// {tap}: Until end of turn, target land you control becomes the basic land type of your choice in addition to its other types.
|
// {tap}: Until end of turn, target land you control becomes the basic land type of your choice in addition to its other types.
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ class NevermoreEffect2 extends ContinuousRuleModifyingEffectImpl {
|
||||||
|
|
||||||
public NevermoreEffect2() {
|
public NevermoreEffect2() {
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||||
staticText = "Spells with the chosen name can’t be cast";
|
staticText = "Spells with the chosen name can't be cast";
|
||||||
}
|
}
|
||||||
|
|
||||||
public NevermoreEffect2(final NevermoreEffect2 effect) {
|
public NevermoreEffect2(final NevermoreEffect2 effect) {
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ public final class NicolBolasPlaneswalker extends CardImpl {
|
||||||
ability = new LoyaltyAbility(new DamageTargetEffect(7), -9);
|
ability = new LoyaltyAbility(new DamageTargetEffect(7), -9);
|
||||||
ability.addTarget(new TargetPlayerOrPlaneswalker());
|
ability.addTarget(new TargetPlayerOrPlaneswalker());
|
||||||
ability.addEffect(new DiscardTargetEffect(7)
|
ability.addEffect(new DiscardTargetEffect(7)
|
||||||
.setText("That player or that planeswalker’s controller discards seven cards")
|
.setText("That player or that planeswalker's controller discards seven cards")
|
||||||
);
|
);
|
||||||
ability.addEffect(new SacrificeEffect(new FilterPermanent(), 7, "then")
|
ability.addEffect(new SacrificeEffect(new FilterPermanent(), 7, "then")
|
||||||
.setText("then sacrifices seven permanents")
|
.setText("then sacrifices seven permanents")
|
||||||
|
|
|
||||||
|
|
@ -73,8 +73,8 @@ class OblivionSowerEffect extends OneShotEffect {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
/*
|
/*
|
||||||
8/25/2015: Oblivion Sower’s ability allows you to put any land cards the player owns from exile onto the battlefield, regardless of how those cards were exiled.
|
8/25/2015: Oblivion Sower's ability allows you to put any land cards the player owns from exile onto the battlefield, regardless of how those cards were exiled.
|
||||||
8/25/2015: Cards that are face down in exile have no characteristics. Such cards can’t be put onto the battlefield with Oblivion Sower’s ability.
|
8/25/2015: Cards that are face down in exile have no characteristics. Such cards can't be put onto the battlefield with Oblivion Sower's ability.
|
||||||
*/
|
*/
|
||||||
Player controller = game.getPlayer(source.getControllerId());
|
Player controller = game.getPlayer(source.getControllerId());
|
||||||
Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source));
|
Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source));
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class OmnathRuleEffect extends ContinuousEffectImpl {
|
||||||
|
|
||||||
public OmnathRuleEffect() {
|
public OmnathRuleEffect() {
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||||
staticText = "You don’t lose unspent green mana as steps and phases end";
|
staticText = "You don't lose unspent green mana as steps and phases end";
|
||||||
}
|
}
|
||||||
|
|
||||||
public OmnathRuleEffect(final OmnathRuleEffect effect) {
|
public OmnathRuleEffect(final OmnathRuleEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -25,20 +25,20 @@ import mage.target.common.TargetCreaturePermanentAmount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* * The value of X in Polukranos’s last ability is equal to the value chosen
|
* * The value of X in Polukranos's last ability is equal to the value chosen
|
||||||
* for X when its activated ability was activated.
|
* for X when its activated ability was activated.
|
||||||
*
|
*
|
||||||
* * The number of targets chosen for the triggered ability must be at least one
|
* * The number of targets chosen for the triggered ability must be at least one
|
||||||
* (if X wasn’t 0) and at most X. You choose the division of damage as you put
|
* (if X wasn't 0) and at most X. You choose the division of damage as you put
|
||||||
* the ability on the stack, not as it resolves. Each target must be assigned
|
* the ability on the stack, not as it resolves. Each target must be assigned
|
||||||
* at least 1 damage. In multiplayer games, you may choose creatures controlled
|
* at least 1 damage. In multiplayer games, you may choose creatures controlled
|
||||||
* by different opponents.
|
* by different opponents.
|
||||||
*
|
*
|
||||||
* * If some, but not all, of the ability’s targets become illegal, you can’t change
|
* * If some, but not all, of the ability's targets become illegal, you can't change
|
||||||
* the division of damage. Damage that would’ve been dealt to illegal targets
|
* the division of damage. Damage that would've been dealt to illegal targets
|
||||||
* simply isn’t dealt.
|
* simply isn't dealt.
|
||||||
*
|
*
|
||||||
* * As Polukranos’s triggered ability resolves, Polukranos deals damage first, then
|
* * As Polukranos's triggered ability resolves, Polukranos deals damage first, then
|
||||||
* the target creatures do. Although no creature will die until after the ability
|
* the target creatures do. Although no creature will die until after the ability
|
||||||
* finishes resolving, the order could matter if Polukranos has wither or infect.
|
* finishes resolving, the order could matter if Polukranos has wither or infect.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ public final class Polyraptor extends CardImpl {
|
||||||
this.power = new MageInt(5);
|
this.power = new MageInt(5);
|
||||||
this.toughness = new MageInt(5);
|
this.toughness = new MageInt(5);
|
||||||
|
|
||||||
// Enrage - Whenever Polyraptor is dealt damage, create a token that’s a copy of Polyraptor.
|
// Enrage - Whenever Polyraptor is dealt damage, create a token that's a copy of Polyraptor.
|
||||||
Ability ability = new DealtDamageToSourceTriggeredAbility(
|
Ability ability = new DealtDamageToSourceTriggeredAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new CreateTokenCopySourceEffect(),
|
new CreateTokenCopySourceEffect(),
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public final class PowerSink extends CardImpl {
|
||||||
public PowerSink(UUID ownerId, CardSetInfo setInfo) {
|
public PowerSink(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{U}");
|
||||||
|
|
||||||
// Counter target spell unless its controller pays {X}. If that player doesn’t, they tap all lands with mana abilities they control and lose all unspent mana.
|
// Counter target spell unless its controller pays {X}. If that player doesn't, they tap all lands with mana abilities they control and lose all unspent mana.
|
||||||
this.getSpellAbility().addEffect(new PowerSinkCounterUnlessPaysEffect());
|
this.getSpellAbility().addEffect(new PowerSinkCounterUnlessPaysEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetSpell());
|
this.getSpellAbility().addTarget(new TargetSpell());
|
||||||
}
|
}
|
||||||
|
|
@ -48,7 +48,7 @@ class PowerSinkCounterUnlessPaysEffect extends OneShotEffect {
|
||||||
|
|
||||||
public PowerSinkCounterUnlessPaysEffect() {
|
public PowerSinkCounterUnlessPaysEffect() {
|
||||||
super(Outcome.Detriment);
|
super(Outcome.Detriment);
|
||||||
this.staticText = "Counter target spell unless its controller pays {X}. If that player doesn’t, they tap all lands with mana abilities they control and lose all unspent mana";
|
this.staticText = "Counter target spell unless its controller pays {X}. If that player doesn't, they tap all lands with mana abilities they control and lose all unspent mana";
|
||||||
}
|
}
|
||||||
|
|
||||||
public PowerSinkCounterUnlessPaysEffect(final PowerSinkCounterUnlessPaysEffect effect) {
|
public PowerSinkCounterUnlessPaysEffect(final PowerSinkCounterUnlessPaysEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -77,11 +77,11 @@ class PrizedAmalgamTriggerdAbility extends EntersBattlefieldAllTriggeredAbility
|
||||||
@Override
|
@Override
|
||||||
public boolean checkTrigger(GameEvent event, Game game) {
|
public boolean checkTrigger(GameEvent event, Game game) {
|
||||||
/**
|
/**
|
||||||
* 4/8/2016 Prized Amalgam’s ability triggers only if it’s in your
|
* 4/8/2016 Prized Amalgam's ability triggers only if it's in your
|
||||||
* graveyard immediately after a creature enters the battlefield from
|
* graveyard immediately after a creature enters the battlefield from
|
||||||
* your graveyard or you cast a creature from your graveyard. A Prized
|
* your graveyard or you cast a creature from your graveyard. A Prized
|
||||||
* Amalgam that’s already on the battlefield won’t be returned at the
|
* Amalgam that's already on the battlefield won't be returned at the
|
||||||
* beginning of the next end step if it’s put into your graveyard later.
|
* beginning of the next end step if it's put into your graveyard later.
|
||||||
*/
|
*/
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
if (super.checkTrigger(event, game)) {
|
if (super.checkTrigger(event, game)) {
|
||||||
|
|
|
||||||
|
|
@ -45,12 +45,12 @@ public final class RadiantDestiny extends CardImpl {
|
||||||
// As Radiant Destiny enters the battlefield, choose a creature type.
|
// As Radiant Destiny enters the battlefield, choose a creature type.
|
||||||
this.addAbility(new AsEntersBattlefieldAbility(new ChooseCreatureTypeEffect(Outcome.BoostCreature)));
|
this.addAbility(new AsEntersBattlefieldAbility(new ChooseCreatureTypeEffect(Outcome.BoostCreature)));
|
||||||
|
|
||||||
// Creatures you control of the chosen type get +1/+1. As long as you have the city’s blessing, they also have vigilance.
|
// Creatures you control of the chosen type get +1/+1. As long as you have the city's blessing, they also have vigilance.
|
||||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllOfChosenSubtypeEffect(1, 1, Duration.WhileOnBattlefield, filter, true));
|
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllOfChosenSubtypeEffect(1, 1, Duration.WhileOnBattlefield, filter, true));
|
||||||
ContinuousEffect effect = new ConditionalContinuousEffect(
|
ContinuousEffect effect = new ConditionalContinuousEffect(
|
||||||
new GainAbilityAllOfChosenSubtypeEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, FILTER_PERMANENT_CREATURES_CONTROLLED),
|
new GainAbilityAllOfChosenSubtypeEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, FILTER_PERMANENT_CREATURES_CONTROLLED),
|
||||||
CitysBlessingCondition.instance,
|
CitysBlessingCondition.instance,
|
||||||
"As long as you have the city’s blessing, they also have vigilance.");
|
"As long as you have the city's blessing, they also have vigilance.");
|
||||||
ability.addEffect(effect);
|
ability.addEffect(effect);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ class RakdossReturnEffect extends OneShotEffect {
|
||||||
|
|
||||||
RakdossReturnEffect() {
|
RakdossReturnEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = "That player or that planeswalker’s controller discards X cards.";
|
this.staticText = "That player or that planeswalker's controller discards X cards.";
|
||||||
}
|
}
|
||||||
|
|
||||||
RakdossReturnEffect(final RakdossReturnEffect effect) {
|
RakdossReturnEffect(final RakdossReturnEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ class RavagerOfTheFellsAbility extends TriggeredAbilityImpl {
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever this creature transforms into {this}, "
|
return "Whenever this creature transforms into {this}, "
|
||||||
+ "it deals 2 damage to target opponent or planeswalker "
|
+ "it deals 2 damage to target opponent or planeswalker "
|
||||||
+ "and 2 damage to up to one target creature that player or that planeswalker’s controller controls.";
|
+ "and 2 damage to up to one target creature that player or that planeswalker's controller controls.";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ public final class RecklessRage extends CardImpl {
|
||||||
public RecklessRage(UUID ownerId, CardSetInfo setInfo) {
|
public RecklessRage(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}");
|
||||||
|
|
||||||
// Reckless Rage deals 4 damage to target creature you don’t control and 2 damage to target creature you control.
|
// Reckless Rage deals 4 damage to target creature you don't control and 2 damage to target creature you control.
|
||||||
FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you don’t control");
|
FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you don't control");
|
||||||
filter.add(new ControllerPredicate(TargetController.NOT_YOU));
|
filter.add(new ControllerPredicate(TargetController.NOT_YOU));
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(4).setUseOnlyTargetPointer(true));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(4).setUseOnlyTargetPointer(true));
|
||||||
|
|
|
||||||
|
|
@ -31,19 +31,19 @@ import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Once you announce you’re casting Rescue from the Underworld, no player may
|
* Once you announce you're casting Rescue from the Underworld, no player may
|
||||||
* attempt to stop you from casting the spell by removing the creature you want
|
* attempt to stop you from casting the spell by removing the creature you want
|
||||||
* to sacrifice.
|
* to sacrifice.
|
||||||
*
|
*
|
||||||
* If you sacrifice a creature token to cast Rescue from the Underworld, it
|
* If you sacrifice a creature token to cast Rescue from the Underworld, it
|
||||||
* won’t return to the battlefield, although the target creature card will.
|
* won't return to the battlefield, although the target creature card will.
|
||||||
*
|
*
|
||||||
* If either the sacrificed creature or the target creature card leaves the
|
* If either the sacrificed creature or the target creature card leaves the
|
||||||
* graveyard before the delayed triggered ability resolves during your next
|
* graveyard before the delayed triggered ability resolves during your next
|
||||||
* upkeep, it won’t return.
|
* upkeep, it won't return.
|
||||||
*
|
*
|
||||||
* However, if the sacrificed creature is put into another public zone instead
|
* However, if the sacrificed creature is put into another public zone instead
|
||||||
* of the graveyard, perhaps because it’s your commander or because of another
|
* of the graveyard, perhaps because it's your commander or because of another
|
||||||
* replacement effect, it will return to the battlefield from the zone it went
|
* replacement effect, it will return to the battlefield from the zone it went
|
||||||
* to.
|
* to.
|
||||||
*
|
*
|
||||||
|
|
@ -212,7 +212,7 @@ class RescueFromTheUnderworldReturnEffect extends OneShotEffect {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// However, if the sacrificed creature is put into another public zone instead of the graveyard,
|
// However, if the sacrificed creature is put into another public zone instead of the graveyard,
|
||||||
// perhaps because it’s your commander or because of another replacement effect, it will return
|
// perhaps because it's your commander or because of another replacement effect, it will return
|
||||||
// to the battlefield from the zone it went to.
|
// to the battlefield from the zone it went to.
|
||||||
if (source.getTargets().get(1) != null) {
|
if (source.getTargets().get(1) != null) {
|
||||||
for (UUID targetId : source.getTargets().get(1).getTargets()) {
|
for (UUID targetId : source.getTargets().get(1).getTargets()) {
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class RunedArch extends CardImpl {
|
||||||
// {X}, {tap}, Sacrifice Runed Arch: X target creatures with power 2 or less are unblockable this turn.
|
// {X}, {tap}, Sacrifice Runed Arch: X target creatures with power 2 or less are unblockable this turn.
|
||||||
Ability ability = new SimpleActivatedAbility(
|
Ability ability = new SimpleActivatedAbility(
|
||||||
new CantBeBlockedTargetEffect(Duration.EndOfGame)
|
new CantBeBlockedTargetEffect(Duration.EndOfGame)
|
||||||
.setText("X target creatures with power 2 or less can’t be blocked this turn."),
|
.setText("X target creatures with power 2 or less can't be blocked this turn."),
|
||||||
new ManaCostsImpl("{X}")
|
new ManaCostsImpl("{X}")
|
||||||
);
|
);
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public final class SakikoMotherOfSummer extends CardImpl {
|
||||||
this.power = new MageInt(3);
|
this.power = new MageInt(3);
|
||||||
this.toughness = new MageInt(3);
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
// Whenever a creature you control deals combat damage to a player, add that much {G}. Until end of turn, you don’t lose this mana as steps and phases end.
|
// Whenever a creature you control deals combat damage to a player, add that much {G}. Until end of turn, you don't lose this mana as steps and phases end.
|
||||||
this.addAbility(new SakikoMotherOfSummerTriggeredAbility());
|
this.addAbility(new SakikoMotherOfSummerTriggeredAbility());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -78,7 +78,7 @@ class SakikoMotherOfSummerTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
this.getEffects().clear();
|
this.getEffects().clear();
|
||||||
Effect effect = new AddManaToManaPoolTargetControllerEffect(Mana.GreenMana(event.getAmount()), "that player", true);
|
Effect effect = new AddManaToManaPoolTargetControllerEffect(Mana.GreenMana(event.getAmount()), "that player", true);
|
||||||
effect.setTargetPointer(new FixedTarget(creature.getControllerId()));
|
effect.setTargetPointer(new FixedTarget(creature.getControllerId()));
|
||||||
effect.setText("add that much {G}. Until end of turn, you don’t lose this mana as steps and phases end");
|
effect.setText("add that much {G}. Until end of turn, you don't lose this mana as steps and phases end");
|
||||||
this.addEffect(effect);
|
this.addEffect(effect);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -88,6 +88,6 @@ class SakikoMotherOfSummerTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever a creature you control deals combat damage to a player, add that much {G}. Until end of turn, you don’t lose this mana as steps and phases end.";
|
return "Whenever a creature you control deals combat damage to a player, add that much {G}. Until end of turn, you don't lose this mana as steps and phases end.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,9 @@ public final class SakuraTribeSpringcaller extends CardImpl {
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(4);
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
// At the beginning of your upkeep, add {G}. Until end of turn, you don’t lose this mana as steps and phases end.
|
// At the beginning of your upkeep, add {G}. Until end of turn, you don't lose this mana as steps and phases end.
|
||||||
Effect effect = new AddManaToManaPoolTargetControllerEffect(new Mana(Mana.GreenMana(1)), "your", true);
|
Effect effect = new AddManaToManaPoolTargetControllerEffect(new Mana(Mana.GreenMana(1)), "your", true);
|
||||||
effect.setText("add {G}. Until end of turn, you don’t lose this mana as steps and phases end");
|
effect.setText("add {G}. Until end of turn, you don't lose this mana as steps and phases end");
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false));
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ class SearingBlazeEffect extends OneShotEffect {
|
||||||
|
|
||||||
public SearingBlazeEffect() {
|
public SearingBlazeEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
staticText = "{this} deals 1 damage to target player or planeswalker and 1 damage to target creature that player or that planeswalker’s controller controls. \nLandfall - If you had a land enter the battlefield under your control this turn, {this} deals 3 damage to that player or planeswalker and 3 damage to that creature instead.";
|
staticText = "{this} deals 1 damage to target player or planeswalker and 1 damage to target creature that player or that planeswalker's controller controls. \nLandfall - If you had a land enter the battlefield under your control this turn, {this} deals 3 damage to that player or planeswalker and 3 damage to that creature instead.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public SearingBlazeEffect(final SearingBlazeEffect effect) {
|
public SearingBlazeEffect(final SearingBlazeEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -171,9 +171,9 @@ class MoveAuraEffect extends OneShotEffect {
|
||||||
5/1/2006
|
5/1/2006
|
||||||
For the second ability, only the Aura is targeted.
|
For the second ability, only the Aura is targeted.
|
||||||
When the ability resolves, you choose a permanent to move the Aura onto.
|
When the ability resolves, you choose a permanent to move the Aura onto.
|
||||||
It can’t be the permanent the Aura is already attached to, it must be controlled by the player who controls the permanent the Aura is attached to, and it must be able to be enchanted by the Aura.
|
It can't be the permanent the Aura is already attached to, it must be controlled by the player who controls the permanent the Aura is attached to, and it must be able to be enchanted by the Aura.
|
||||||
(It doesn’t matter who controls the Aura or who controls Simic Guildmage.)
|
(It doesn't matter who controls the Aura or who controls Simic Guildmage.)
|
||||||
If no such permanent exists, the Aura doesn’t move.
|
If no such permanent exists, the Aura doesn't move.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Player controller = game.getPlayer(source.getControllerId());
|
Player controller = game.getPlayer(source.getControllerId());
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ class SoulOfShandalarEffect extends OneShotEffect {
|
||||||
public SoulOfShandalarEffect() {
|
public SoulOfShandalarEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
staticText = "{this} deals 3 damage to target player or planeswalker "
|
staticText = "{this} deals 3 damage to target player or planeswalker "
|
||||||
+ "and 3 damage to up to one target creature that player or that planeswalker’s controller controls";
|
+ "and 3 damage to up to one target creature that player or that planeswalker's controller controls";
|
||||||
}
|
}
|
||||||
|
|
||||||
public SoulOfShandalarEffect(final SoulOfShandalarEffect effect) {
|
public SoulOfShandalarEffect(final SoulOfShandalarEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ public final class StormFleetSprinter extends CardImpl {
|
||||||
// Haste
|
// Haste
|
||||||
this.addAbility(HasteAbility.getInstance());
|
this.addAbility(HasteAbility.getInstance());
|
||||||
|
|
||||||
// Storm Fleet Sprinter can’t be blocked.
|
// Storm Fleet Sprinter can't be blocked.
|
||||||
this.addAbility(new CantBeBlockedSourceAbility());
|
this.addAbility(new CantBeBlockedSourceAbility());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ class SunforgerEffect extends OneShotEffect {
|
||||||
/**
|
/**
|
||||||
* 10/1/2005 Any card you find must be legally castable (for
|
* 10/1/2005 Any card you find must be legally castable (for
|
||||||
* example, you have to be able to choose a legal target for
|
* example, you have to be able to choose a legal target for
|
||||||
* it). If you can’t find a castable card (or choose not to),
|
* it). If you can't find a castable card (or choose not to),
|
||||||
* nothing happens and you shuffle your library.
|
* nothing happens and you shuffle your library.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ class SurveyorsScopeEffect extends OneShotEffect {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
game.informPlayers(new StringBuilder("Surveyor's Scope: X = ").append(numberOfLands).toString());
|
game.informPlayers(new StringBuilder("Surveyor's Scope: X = ").append(numberOfLands).toString());
|
||||||
// 10/17/2013 If no players control at least two more lands than you when the ability resolves, you’ll still search and shuffle your library.
|
// 10/17/2013 If no players control at least two more lands than you when the ability resolves, you'll still search and shuffle your library.
|
||||||
return new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, numberOfLands, StaticFilters.FILTER_CARD_BASIC_LAND)).apply(game, source);
|
return new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, numberOfLands, StaticFilters.FILTER_CARD_BASIC_LAND)).apply(game, source);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -59,11 +59,11 @@ class TeferisProtectionEffect extends OneShotEffect {
|
||||||
*
|
*
|
||||||
* 25.08.2017 If a player has protection from everything, it means three
|
* 25.08.2017 If a player has protection from everything, it means three
|
||||||
* things: 1) All damage that would be dealt to that player is prevented. 2)
|
* things: 1) All damage that would be dealt to that player is prevented. 2)
|
||||||
* Auras can’t be attached to that player. 3) That player can’t be the
|
* Auras can't be attached to that player. 3) That player can't be the
|
||||||
* target of spells or abilities.
|
* target of spells or abilities.
|
||||||
*
|
*
|
||||||
* 25.08.2017 Nothing other than the specified events are prevented or
|
* 25.08.2017 Nothing other than the specified events are prevented or
|
||||||
* illegal. An effect that doesn’t target you could still cause you to
|
* illegal. An effect that doesn't target you could still cause you to
|
||||||
* discard cards, for example. Creatures can still attack you while you have
|
* discard cards, for example. Creatures can still attack you while you have
|
||||||
* protection from everything, although combat damage that they would deal
|
* protection from everything, although combat damage that they would deal
|
||||||
* to you will be prevented.
|
* to you will be prevented.
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public final class TempleOfAclazotz extends CardImpl {
|
||||||
// {T}: Add {B}
|
// {T}: Add {B}
|
||||||
this.addAbility(new BlackManaAbility());
|
this.addAbility(new BlackManaAbility());
|
||||||
|
|
||||||
// {T}, Sacrifice a creature: You gain life equal to the sacrificed creature’s toughness.
|
// {T}, Sacrifice a creature: You gain life equal to the sacrificed creature's toughness.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TempleOfAclazotzEffect(), new TapSourceCost());
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TempleOfAclazotzEffect(), new TapSourceCost());
|
||||||
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
|
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -43,9 +43,9 @@ public final class TetsukoUmezawaFugitive extends CardImpl {
|
||||||
this.power = new MageInt(1);
|
this.power = new MageInt(1);
|
||||||
this.toughness = new MageInt(3);
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
// Creatures you control with power or toughness 1 or less can’t be blocked.
|
// Creatures you control with power or toughness 1 or less can't be blocked.
|
||||||
Effect effect = new CantBeBlockedAllEffect(filter, Duration.Custom);
|
Effect effect = new CantBeBlockedAllEffect(filter, Duration.Custom);
|
||||||
effect.setText("Creatures you control with power or toughness 1 or less can’t be blocked");
|
effect.setText("Creatures you control with power or toughness 1 or less can't be blocked");
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ class ThoughtHemorrhageEffect extends OneShotEffect {
|
||||||
|
|
||||||
static final String rule = "Target player reveals their hand. "
|
static final String rule = "Target player reveals their hand. "
|
||||||
+ "{this} deals 3 damage to that player for each card with the chosen name revealed this way. "
|
+ "{this} deals 3 damage to that player for each card with the chosen name revealed this way. "
|
||||||
+ "Search that player’s graveyard, hand, and library for all cards with that name and exile them. "
|
+ "Search that player's graveyard, hand, and library for all cards with that name and exile them. "
|
||||||
+ "Then that player shuffles their library";
|
+ "Then that player shuffles their library";
|
||||||
|
|
||||||
public ThoughtHemorrhageEffect() {
|
public ThoughtHemorrhageEffect() {
|
||||||
|
|
|
||||||
|
|
@ -31,11 +31,11 @@ import mage.target.common.TargetCreaturePermanent;
|
||||||
/**
|
/**
|
||||||
* Time to Feed has two targets: a creature an opponent controls and a creature you control.
|
* Time to Feed has two targets: a creature an opponent controls and a creature you control.
|
||||||
* If only one of those creatures is a legal target when Time to Feed tries to resolve, the
|
* If only one of those creatures is a legal target when Time to Feed tries to resolve, the
|
||||||
* creatures won’t fight and neither will deal or be dealt damage. However, you’ll still gain
|
* creatures won't fight and neither will deal or be dealt damage. However, you'll still gain
|
||||||
* 3 life when the creature you don’t control dies that turn, even if it was the illegal target as Time to Feed resolved.
|
* 3 life when the creature you don't control dies that turn, even if it was the illegal target as Time to Feed resolved.
|
||||||
* If neither creature is a legal target when Time to Feed tries to resolve, the spell will
|
* If neither creature is a legal target when Time to Feed tries to resolve, the spell will
|
||||||
* be countered and none of its effects will happen.
|
* be countered and none of its effects will happen.
|
||||||
* If the first target creature dies that turn, you’ll gain 3 life no matter what caused the creature to die or who controls the creature at that time.
|
* If the first target creature dies that turn, you'll gain 3 life no matter what caused the creature to die or who controls the creature at that time.
|
||||||
*
|
*
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public final class TombRobber extends CardImpl {
|
||||||
// Menace
|
// Menace
|
||||||
this.addAbility(new MenaceAbility(false));
|
this.addAbility(new MenaceAbility(false));
|
||||||
|
|
||||||
// {1}, Discard a card: Tomb Robber explores. (Reveal the top card of your library. Put that card into your hand if it’s a land. Otherwise, put a +1/+1 counter on this creature, then put the card back or put it into your graveyard.)
|
// {1}, Discard a card: Tomb Robber explores. (Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on this creature, then put the card back or put it into your graveyard.)
|
||||||
Effect effect = new ExploreSourceEffect(true, "{this}");
|
Effect effect = new ExploreSourceEffect(true, "{this}");
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new DiscardCardCost());
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new DiscardCardCost());
|
||||||
ability.addCost(new ManaCostsImpl("{1}"));
|
ability.addCost(new ManaCostsImpl("{1}"));
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,14 @@ import mage.game.stack.StackObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Protection from a player is a new variant of the protection ability. It means
|
* Protection from a player is a new variant of the protection ability. It means
|
||||||
* the following: -- True-Name Nemesis can’t be the target of spells or
|
* the following: -- True-Name Nemesis can't be the target of spells or
|
||||||
* abilities controlled by the chosen player. -- True-Name Nemesis can’t be
|
* abilities controlled by the chosen player. -- True-Name Nemesis can't be
|
||||||
* enchanted by Auras or equipped by Equipment controlled by the chosen player.
|
* enchanted by Auras or equipped by Equipment controlled by the chosen player.
|
||||||
* (The same is true for Fortifications controlled by the chosen player, if
|
* (The same is true for Fortifications controlled by the chosen player, if
|
||||||
* True-Name Nemesis becomes a land.) -- True-Name Nemesis can’t be blocked by
|
* True-Name Nemesis becomes a land.) -- True-Name Nemesis can't be blocked by
|
||||||
* creatures controlled by the chosen player. -- All damage that would be dealt
|
* creatures controlled by the chosen player. -- All damage that would be dealt
|
||||||
* to True-Name Nemesis by sources controlled by the chosen player is prevented.
|
* to True-Name Nemesis by sources controlled by the chosen player is prevented.
|
||||||
* (The same is true for sources owned by the chosen player that don’t have
|
* (The same is true for sources owned by the chosen player that don't have
|
||||||
* controllers.)
|
* controllers.)
|
||||||
*
|
*
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ class UpwellingRuleEffect extends ContinuousEffectImpl {
|
||||||
|
|
||||||
public UpwellingRuleEffect() {
|
public UpwellingRuleEffect() {
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||||
staticText = "Players don’t lose unspent mana as steps and phases end";
|
staticText = "Players don't lose unspent mana as steps and phases end";
|
||||||
}
|
}
|
||||||
|
|
||||||
public UpwellingRuleEffect(final UpwellingRuleEffect effect) {
|
public UpwellingRuleEffect(final UpwellingRuleEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ import mage.filter.predicate.mageobject.SupertypePredicate;
|
||||||
*/
|
*/
|
||||||
public final class UrzasRuinousBlast extends CardImpl {
|
public final class UrzasRuinousBlast extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterPermanent("nonland permanents that aren’t legendary");
|
private static final FilterPermanent filter = new FilterPermanent("nonland permanents that aren't legendary");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(Predicates.not(new CardTypePredicate(CardType.LAND)));
|
filter.add(Predicates.not(new CardTypePredicate(CardType.LAND)));
|
||||||
|
|
@ -33,7 +33,7 @@ public final class UrzasRuinousBlast extends CardImpl {
|
||||||
// (You may cast a legendary sorcery only if you control a legendary creature or planeswalker.)
|
// (You may cast a legendary sorcery only if you control a legendary creature or planeswalker.)
|
||||||
this.addAbility(new LegendarySpellAbility());
|
this.addAbility(new LegendarySpellAbility());
|
||||||
|
|
||||||
// Exile all nonland permanents that aren’t legendary.
|
// Exile all nonland permanents that aren't legendary.
|
||||||
this.getSpellAbility().addEffect(new ExileAllEffect(filter));
|
this.getSpellAbility().addEffect(new ExileAllEffect(filter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ class VialSmasherTheFierceTriggeredAbility extends SpellCastControllerTriggeredA
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever you cast your first spell each turn, choose an opponent at random. "
|
return "Whenever you cast your first spell each turn, choose an opponent at random. "
|
||||||
+ "{this} deals damage equal to that spell’s converted mana cost to that player or a planeswalker that player controls";
|
+ "{this} deals damage equal to that spell's converted mana cost to that player or a planeswalker that player controls";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,7 +106,7 @@ class VialSmasherTheFierceEffect extends OneShotEffect {
|
||||||
|
|
||||||
public VialSmasherTheFierceEffect() {
|
public VialSmasherTheFierceEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
this.staticText = "{this} choose an opponent at random. {this} deals damage equal to that spell’s converted mana cost to that player or a planeswalker that player controls";
|
this.staticText = "{this} choose an opponent at random. {this} deals damage equal to that spell's converted mana cost to that player or a planeswalker that player controls";
|
||||||
}
|
}
|
||||||
|
|
||||||
public VialSmasherTheFierceEffect(final VialSmasherTheFierceEffect effect) {
|
public VialSmasherTheFierceEffect(final VialSmasherTheFierceEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ class VoidstoneGargoyleReplacementEffect1 extends ContinuousRuleModifyingEffectI
|
||||||
|
|
||||||
public VoidstoneGargoyleReplacementEffect1() {
|
public VoidstoneGargoyleReplacementEffect1() {
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||||
staticText = "Spells with the chosen name can’t be cast";
|
staticText = "Spells with the chosen name can't be cast";
|
||||||
}
|
}
|
||||||
|
|
||||||
public VoidstoneGargoyleReplacementEffect1(final VoidstoneGargoyleReplacementEffect1 effect) {
|
public VoidstoneGargoyleReplacementEffect1(final VoidstoneGargoyleReplacementEffect1 effect) {
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ public final class VulshokBattlemaster extends CardImpl {
|
||||||
filter.add(new SubtypePredicate(SubType.EQUIPMENT));
|
filter.add(new SubtypePredicate(SubType.EQUIPMENT));
|
||||||
for (Permanent equipment : game.getBattlefield().getAllActivePermanents(filter, game)) {
|
for (Permanent equipment : game.getBattlefield().getAllActivePermanents(filter, game)) {
|
||||||
if (equipment != null) {
|
if (equipment != null) {
|
||||||
//If an Equipment can’t equip Vulshok Battlemaster, it isn’t attached to the Battlemaster, and it doesn’t become unattached (if it’s attached to a creature). (http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=48125)
|
//If an Equipment can't equip Vulshok Battlemaster, it isn't attached to the Battlemaster, and it doesn't become unattached (if it's attached to a creature). (http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=48125)
|
||||||
if (!battlemaster.cantBeAttachedBy(equipment, game)) {
|
if (!battlemaster.cantBeAttachedBy(equipment, game)) {
|
||||||
battlemaster.addAttachment(equipment.getId(), game);
|
battlemaster.addAttachment(equipment.getId(), game);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public final class WordOfUndoing extends CardImpl {
|
||||||
public WordOfUndoing(UUID ownerId, CardSetInfo setInfo) {
|
public WordOfUndoing(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
|
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
|
||||||
|
|
||||||
//Return target creature and all white Auras you own attached to it to their owners’ hands.
|
//Return target creature and all white Auras you own attached to it to their owners' hands.
|
||||||
this.getSpellAbility().addEffect(new WordOfUndoingReturnToHandEffect());
|
this.getSpellAbility().addEffect(new WordOfUndoingReturnToHandEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
|
|
||||||
|
|
@ -47,7 +47,7 @@ class WordOfUndoingReturnToHandEffect extends OneShotEffect {
|
||||||
|
|
||||||
public WordOfUndoingReturnToHandEffect() {
|
public WordOfUndoingReturnToHandEffect() {
|
||||||
super(Outcome.ReturnToHand);
|
super(Outcome.ReturnToHand);
|
||||||
this.staticText = "Return target creature and all white Auras you own attached to it to their owners’ hands.";
|
this.staticText = "Return target creature and all white Auras you own attached to it to their owners' hands.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public WordOfUndoingReturnToHandEffect(final WordOfUndoingReturnToHandEffect effect) {
|
public WordOfUndoingReturnToHandEffect(final WordOfUndoingReturnToHandEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public final class Worldpurge extends CardImpl {
|
||||||
public Worldpurge(UUID ownerId, CardSetInfo setInfo) {
|
public Worldpurge(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W/U}{W/U}{W/U}{W/U}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W/U}{W/U}{W/U}{W/U}");
|
||||||
|
|
||||||
// Return all permanents to their owners’ hands. Each player chooses up to seven cards in their hand, then shuffles the rest into their library. Each player loses all unspent mana.
|
// Return all permanents to their owners' hands. Each player chooses up to seven cards in their hand, then shuffles the rest into their library. Each player loses all unspent mana.
|
||||||
this.getSpellAbility().addEffect(new WorldpurgeEffect());
|
this.getSpellAbility().addEffect(new WorldpurgeEffect());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -49,7 +49,7 @@ class WorldpurgeEffect extends OneShotEffect {
|
||||||
|
|
||||||
public WorldpurgeEffect() {
|
public WorldpurgeEffect() {
|
||||||
super(Outcome.Discard);
|
super(Outcome.Discard);
|
||||||
this.staticText = "Return all permanents to their owners’ hands. Each player chooses up to seven cards in their hand, then shuffles the rest into their library. Each player loses all unspent mana";
|
this.staticText = "Return all permanents to their owners' hands. Each player chooses up to seven cards in their hand, then shuffles the rest into their library. Each player loses all unspent mana";
|
||||||
}
|
}
|
||||||
|
|
||||||
public WorldpurgeEffect(final WorldpurgeEffect effect) {
|
public WorldpurgeEffect(final WorldpurgeEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public final class WormfangNewt extends CardImpl {
|
||||||
ability1.addTarget(target);
|
ability1.addTarget(target);
|
||||||
this.addAbility(ability1);
|
this.addAbility(ability1);
|
||||||
|
|
||||||
// When Wormfang Turtle leaves the battlefield, return the exiled card to the battlefield under its owner’s control.
|
// When Wormfang Turtle leaves the battlefield, return the exiled card to the battlefield under its owner's control.
|
||||||
Ability ability2 = new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false);
|
Ability ability2 = new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false);
|
||||||
this.addAbility(ability2);
|
this.addAbility(ability2);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public final class WormfangTurtle extends CardImpl {
|
||||||
ability1.addTarget(target);
|
ability1.addTarget(target);
|
||||||
this.addAbility(ability1);
|
this.addAbility(ability1);
|
||||||
|
|
||||||
// When Wormfang Turtle leaves the battlefield, return the exiled card to the battlefield under its owner’s control.
|
// When Wormfang Turtle leaves the battlefield, return the exiled card to the battlefield under its owner's control.
|
||||||
Ability ability2 = new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false);
|
Ability ability2 = new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false);
|
||||||
this.addAbility(ability2);
|
this.addAbility(ability2);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class YawgmothsVileOffering extends CardImpl {
|
||||||
this.addAbility(new LegendarySpellAbility());
|
this.addAbility(new LegendarySpellAbility());
|
||||||
|
|
||||||
// Put up to one target creature or planeswalker from a graveyard onto the battlefield under your control.
|
// Put up to one target creature or planeswalker from a graveyard onto the battlefield under your control.
|
||||||
// Destroy up to one target creature or planeswalker. Exile Yawgmoth’s Vile Offering.
|
// Destroy up to one target creature or planeswalker. Exile Yawgmoth's Vile Offering.
|
||||||
this.getSpellAbility().addEffect(new YawgmothsVileOfferingEffect());
|
this.getSpellAbility().addEffect(new YawgmothsVileOfferingEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetCardInGraveyard(0, 1, cardFilter));
|
this.getSpellAbility().addTarget(new TargetCardInGraveyard(0, 1, cardFilter));
|
||||||
this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker(0, 1, new FilterCreatureOrPlaneswalkerPermanent(), false));
|
this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker(0, 1, new FilterCreatureOrPlaneswalkerPermanent(), false));
|
||||||
|
|
|
||||||
|
|
@ -315,8 +315,8 @@ public class BloodMoonTest extends CardTestPlayerBase {
|
||||||
* If Blood Moon is on the battlefield, Flagstones of Trokair will enter the
|
* If Blood Moon is on the battlefield, Flagstones of Trokair will enter the
|
||||||
* battlefield as a legendary non-basic Mountain. If Flagstones of Trokair
|
* battlefield as a legendary non-basic Mountain. If Flagstones of Trokair
|
||||||
* is put into the graveyard due to “Legends rule” or because it was
|
* is put into the graveyard due to “Legends rule” or because it was
|
||||||
* destroyed, its ability doesn’t trigger, because it doesn’t exist: it
|
* destroyed, its ability doesn't trigger, because it doesn't exist: it
|
||||||
* won’t fetch you a Plains.
|
* won't fetch you a Plains.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testBloodMoonFlagstonesOfTrokair() {
|
public void testBloodMoonFlagstonesOfTrokair() {
|
||||||
|
|
@ -350,13 +350,13 @@ public class BloodMoonTest extends CardTestPlayerBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Because Blood Moon’s static ability operates only when it’s on the
|
* Because Blood Moon's static ability operates only when it's on the
|
||||||
* battlefield and begins affecting any nonbasic lands immediately. In fact,
|
* battlefield and begins affecting any nonbasic lands immediately. In fact,
|
||||||
* Blood Moon’s effect is so quick that once a non-basic land hits the
|
* Blood Moon's effect is so quick that once a non-basic land hits the
|
||||||
* battlefield it’s going to be affected. Therefore:
|
* battlefield it's going to be affected. Therefore:
|
||||||
*
|
*
|
||||||
* If a nonbasic land’s has EtB triggered abilities, these will not trigger
|
* If a nonbasic land's has EtB triggered abilities, these will not trigger
|
||||||
* because the ability isn’t there (it’s gone). Effects that modify the way
|
* because the ability isn't there (it's gone). Effects that modify the way
|
||||||
* the land enters the battlefield are replacement effects. They are applied
|
* the land enters the battlefield are replacement effects. They are applied
|
||||||
* before the permanent enters the battlefield and taking into account
|
* before the permanent enters the battlefield and taking into account
|
||||||
* continuous effects that already exist and would apply to the permanent.
|
* continuous effects that already exist and would apply to the permanent.
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,8 @@ public class SkylineCascadeTest extends CardTestPlayerBase {
|
||||||
/**
|
/**
|
||||||
* Reported bug on Skyline Cascade not working properly.
|
* Reported bug on Skyline Cascade not working properly.
|
||||||
*
|
*
|
||||||
* "Skyline Cascade’s triggered ability doesn't tap the creature. It can target any creature, tapped or untapped.
|
* "Skyline Cascade's triggered ability doesn't tap the creature. It can target any creature, tapped or untapped.
|
||||||
* If that creature is already untapped at the beginning of its controller’s next untap step, the effect won’t do anything."
|
* If that creature is already untapped at the beginning of its controller's next untap step, the effect won't do anything."
|
||||||
* http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=402038
|
* http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=402038
|
||||||
*
|
*
|
||||||
* An untapped creature will remain untapped.
|
* An untapped creature will remain untapped.
|
||||||
|
|
|
||||||
|
|
@ -339,7 +339,7 @@ public class CloudshiftTest extends CardTestPlayerBase {
|
||||||
* of the end step even if Flickerwisp is no longer on the battlefield.
|
* of the end step even if Flickerwisp is no longer on the battlefield.
|
||||||
* 8/1/2008 If the permanent that returns to the battlefield has any
|
* 8/1/2008 If the permanent that returns to the battlefield has any
|
||||||
* abilities that trigger at the beginning of the end step, those abilities
|
* abilities that trigger at the beginning of the end step, those abilities
|
||||||
* won’t trigger that turn.
|
* won't trigger that turn.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testDoubleFlickerwisp() {
|
public void testDoubleFlickerwisp() {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ public class AfflictTest extends CardTestPlayerBase {
|
||||||
|
|
||||||
// {T}: Add {C}.
|
// {T}: Add {C}.
|
||||||
// {2}, {T}: Exile target creature you control.
|
// {2}, {T}: Exile target creature you control.
|
||||||
// {4}, {T}, Sacrifice Endless Sands: Return each creature card exiled with Endless Sands to the battlefield under its owner’s control.
|
// {4}, {T}, Sacrifice Endless Sands: Return each creature card exiled with Endless Sands to the battlefield under its owner's control.
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Endless Sands");
|
addCard(Zone.BATTLEFIELD, playerA, "Endless Sands");
|
||||||
|
|
||||||
// Deathtouch
|
// Deathtouch
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public class ChampionTest extends CardTestPlayerBase {
|
||||||
* 702.71a Champion represents two triggered abilities. “Champion an [object]” means “When this
|
* 702.71a Champion represents two triggered abilities. “Champion an [object]” means “When this
|
||||||
* permanent enters the battlefield, sacrifice it unless you exile another [object] you control” and
|
* permanent enters the battlefield, sacrifice it unless you exile another [object] you control” and
|
||||||
* “When this permanent leaves the battlefield, return the exiled card to the battlefield under its
|
* “When this permanent leaves the battlefield, return the exiled card to the battlefield under its
|
||||||
* owner’s control.”
|
* owner's control.”
|
||||||
*
|
*
|
||||||
* 702.71b The two abilities represented by champion are linked. See rule 607, “Linked Abilities.”
|
* 702.71b The two abilities represented by champion are linked. See rule 607, “Linked Abilities.”
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ public class ConspireTest extends CardTestPlayerBase {
|
||||||
* “As an additional cost to cast this spell, you may tap two untapped
|
* “As an additional cost to cast this spell, you may tap two untapped
|
||||||
* creatures you control that each share a color with it” and “When you cast
|
* creatures you control that each share a color with it” and “When you cast
|
||||||
* this spell, if its conspire cost was paid, copy it. If the spell has any
|
* this spell, if its conspire cost was paid, copy it. If the spell has any
|
||||||
* targets, you may choose new targets for the copy.” Paying a spell’s
|
* targets, you may choose new targets for the copy.” Paying a spell's
|
||||||
* conspire cost follows the rules for paying additional costs in rules
|
* conspire cost follows the rules for paying additional costs in rules
|
||||||
* 601.2b and 601.2e–g.
|
* 601.2b and 601.2e–g.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue