mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
parent
934d8e13f5
commit
074f58d341
89 changed files with 154 additions and 234 deletions
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -28,7 +27,9 @@ public final class AcolyteOfTheInferno extends CardImpl {
|
||||||
this.addAbility(new RenownAbility(1));
|
this.addAbility(new RenownAbility(1));
|
||||||
|
|
||||||
// Whenever Acolyte of the Inferno becomes blocked by a creature, it deals 2 damage to that creature
|
// Whenever Acolyte of the Inferno becomes blocked by a creature, it deals 2 damage to that creature
|
||||||
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new DamageTargetEffect(2, true, "that creature", "it"), false));
|
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(
|
||||||
|
new DamageTargetEffect(2, "it")
|
||||||
|
.withTargetDescription("that creature"), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private AcolyteOfTheInferno(final AcolyteOfTheInferno card) {
|
private AcolyteOfTheInferno(final AcolyteOfTheInferno card) {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public final class AdrenalineJockey extends CardImpl {
|
||||||
|
|
||||||
// Whenever a player casts a spell, if it's not their turn, this creature deals 4 damage to them.
|
// Whenever a player casts a spell, if it's not their turn, this creature deals 4 damage to them.
|
||||||
this.addAbility(new SpellCastAllTriggeredAbility(
|
this.addAbility(new SpellCastAllTriggeredAbility(
|
||||||
new DamageTargetEffect(4, true, "them"),
|
new DamageTargetEffect(4).withTargetDescription("them"),
|
||||||
filter, false, SetTargetPointer.PLAYER
|
filter, false, SetTargetPointer.PLAYER
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.abilities.hint.common.RaidHint;
|
import mage.abilities.hint.common.RaidHint;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.AbilityWord;
|
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.target.common.TargetAnyTarget;
|
import mage.target.common.TargetAnyTarget;
|
||||||
import mage.watchers.common.PlayerAttackedWatcher;
|
import mage.watchers.common.PlayerAttackedWatcher;
|
||||||
|
|
@ -30,7 +29,7 @@ public final class ArrowStorm extends CardImpl {
|
||||||
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
||||||
// Raid - If you attacked with a creature this turn, instead Arrow Storm deals 5 damage to that creature or player and the damage can't be prevented.
|
// Raid - If you attacked with a creature this turn, instead Arrow Storm deals 5 damage to that creature or player and the damage can't be prevented.
|
||||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||||
new DamageTargetEffect(5, false),
|
new DamageTargetEffect(5).withCantBePrevented(),
|
||||||
RaidCondition.instance,
|
RaidCondition.instance,
|
||||||
"<br/><br/><i>Raid</i> — If you attacked this turn, instead {this} deals 5 damage to that permanent or player and the damage can't be prevented"));
|
"<br/><br/><i>Raid</i> — If you attacked this turn, instead {this} deals 5 damage to that permanent or player and the damage can't be prevented"));
|
||||||
this.getSpellAbility().addWatcher(new PlayerAttackedWatcher());
|
this.getSpellAbility().addWatcher(new PlayerAttackedWatcher());
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ public final class AshmouthHound extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// Whenever Ashmouth Hound blocks or becomes blocked by a creature, Ashmouth Hound deals 1 damage to that creature.
|
// Whenever Ashmouth Hound blocks or becomes blocked by a creature, Ashmouth Hound deals 1 damage to that creature.
|
||||||
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(new DamageTargetEffect(1, true, "that creature")));
|
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(new DamageTargetEffect(1).withTargetDescription("that creature")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private AshmouthHound(final AshmouthHound card) {
|
private AshmouthHound(final AshmouthHound card) {
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ public final class AvalancheOfSector7 extends CardImpl {
|
||||||
class AvalancheOfSector7TriggeredAbility extends TriggeredAbilityImpl {
|
class AvalancheOfSector7TriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
AvalancheOfSector7TriggeredAbility() {
|
AvalancheOfSector7TriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(1).withTargetDescription("that player"));
|
||||||
setTriggerPhrase("Whenever an opponent activates an ability of an artifact they control, ");
|
setTriggerPhrase("Whenever an opponent activates an ability of an artifact they control, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,10 +49,10 @@ public final class BarretWallace extends CardImpl {
|
||||||
|
|
||||||
// Whenever Barret Wallace attacks, it deals damage equal to the number of equipped creatures you control to defending player.
|
// Whenever Barret Wallace attacks, it deals damage equal to the number of equipped creatures you control to defending player.
|
||||||
this.addAbility(new AttacksTriggeredAbility(
|
this.addAbility(new AttacksTriggeredAbility(
|
||||||
new DamageTargetEffect(xValue, true, "it")
|
new DamageTargetEffect(xValue)
|
||||||
.setText("it deals damage equal to the number of equipped creatures you control to defending player"),
|
.setText("it deals damage equal to the number of equipped creatures you control to defending player"),
|
||||||
false, null, SetTargetPointer.PLAYER
|
false, null, SetTargetPointer.PLAYER
|
||||||
).withRuleTextReplacement(true).addHint(hint));
|
).addHint(hint));
|
||||||
}
|
}
|
||||||
|
|
||||||
private BarretWallace(final BarretWallace card) {
|
private BarretWallace(final BarretWallace card) {
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ public final class BenBenAkkiHermit extends CardImpl {
|
||||||
|
|
||||||
this.power = new MageInt(1);
|
this.power = new MageInt(1);
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter), true), new TapSourceCost());
|
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), new TapSourceCost());
|
||||||
ability.addTarget(new TargetAttackingCreature());
|
ability.addTarget(new TargetAttackingCreature());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,8 @@ public final class BonecrusherGiant extends AdventureCard {
|
||||||
|
|
||||||
// Whenever Bonecrusher Giant becomes the target of a spell, Bonecrusher Giant deals 2 damage to that spell's controller.
|
// Whenever Bonecrusher Giant becomes the target of a spell, Bonecrusher Giant deals 2 damage to that spell's controller.
|
||||||
this.addAbility(new BecomesTargetSourceTriggeredAbility(
|
this.addAbility(new BecomesTargetSourceTriggeredAbility(
|
||||||
new DamageTargetEffect(
|
new DamageTargetEffect(2).withTargetDescription("that spell's controller"),
|
||||||
2, true, "that spell's controller", "{this}"
|
StaticFilters.FILTER_SPELL_A, SetTargetPointer.PLAYER, false)
|
||||||
), StaticFilters.FILTER_SPELL_A, SetTargetPointer.PLAYER, false)
|
|
||||||
.withRuleTextReplacement(false));
|
.withRuleTextReplacement(false));
|
||||||
|
|
||||||
// Stomp
|
// Stomp
|
||||||
|
|
|
||||||
|
|
@ -51,8 +51,11 @@ public final class BoobyTrap extends CardImpl {
|
||||||
|
|
||||||
class BoobyTrapTriggeredAbility extends TriggeredAbilityImpl {
|
class BoobyTrapTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
public BoobyTrapTriggeredAbility() {
|
BoobyTrapTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DoIfCostPaid(new DamageTargetEffect(10, true, "that player"), new SacrificeSourceCost(), "", false), false);
|
super(Zone.BATTLEFIELD, new DoIfCostPaid(
|
||||||
|
new DamageTargetEffect(10).withTargetDescription("that player"),
|
||||||
|
new SacrificeSourceCost(), "", false
|
||||||
|
), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BoobyTrapTriggeredAbility(final BoobyTrapTriggeredAbility ability) {
|
private BoobyTrapTriggeredAbility(final BoobyTrapTriggeredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public final class BurningEarth extends CardImpl {
|
||||||
|
|
||||||
// Whenever a player taps a nonbasic land for mana, Burning Earth deals 1 damage to that player.
|
// Whenever a player taps a nonbasic land for mana, Burning Earth deals 1 damage to that player.
|
||||||
this.addAbility(new TapForManaAllTriggeredAbility(
|
this.addAbility(new TapForManaAllTriggeredAbility(
|
||||||
new DamageTargetEffect(1, true, "that player"),
|
new DamageTargetEffect(1).withTargetDescription("that player"),
|
||||||
filter, SetTargetPointer.PLAYER));
|
filter, SetTargetPointer.PLAYER));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package mage.cards.b;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
|
@ -46,7 +45,8 @@ public final class BurningTreeShaman extends CardImpl {
|
||||||
class BurningTreeShamanTriggeredAbility extends TriggeredAbilityImpl {
|
class BurningTreeShamanTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
BurningTreeShamanTriggeredAbility() {
|
BurningTreeShamanTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(1), true, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(1).withTargetDescription("that player"));
|
||||||
|
setTriggerPhrase("Whenever a player activates an ability that isn't a mana ability, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
private BurningTreeShamanTriggeredAbility(final BurningTreeShamanTriggeredAbility ability) {
|
private BurningTreeShamanTriggeredAbility(final BurningTreeShamanTriggeredAbility ability) {
|
||||||
|
|
@ -75,8 +75,4 @@ class BurningTreeShamanTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRule() {
|
|
||||||
return "Whenever a player activates an ability that isn't a mana ability, {this} deals 1 damage to that player.";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ class CemeteryGatekeeperEffect extends OneShotEffect {
|
||||||
class CemeteryGatekeeperTriggeredAbility extends TriggeredAbilityImpl {
|
class CemeteryGatekeeperTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
public CemeteryGatekeeperTriggeredAbility() {
|
public CemeteryGatekeeperTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(2, true, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(2).withTargetDescription("that player"));
|
||||||
setTriggerPhrase("Whenever a player plays a land or casts a spell, if it shares a card type with the exiled card, ");
|
setTriggerPhrase("Whenever a player plays a land or casts a spell, if it shares a card type with the exiled card, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,9 +51,8 @@ public class ChandraHopesBeacon extends CardImpl {
|
||||||
this.addAbility(new LoyaltyAbility(new ChandraHopesBeaconEffect(), 1), new ChandraHopesBeaconWatcher());
|
this.addAbility(new LoyaltyAbility(new ChandraHopesBeaconEffect(), 1), new ChandraHopesBeaconWatcher());
|
||||||
|
|
||||||
//−X: Chandra, Hope’s Beacon deals X damage to each of up to two targets.
|
//−X: Chandra, Hope’s Beacon deals X damage to each of up to two targets.
|
||||||
LoyaltyAbility loyaltyAbility = new LoyaltyAbility(new DamageTargetEffect(
|
LoyaltyAbility loyaltyAbility = new LoyaltyAbility(new DamageTargetEffect(GetXValue.instance)
|
||||||
GetXValue.instance, true, "each of up to two targets"
|
.withTargetDescription("each of up to two targets"));
|
||||||
));
|
|
||||||
loyaltyAbility.addTarget(new TargetAnyTarget(0, 2));
|
loyaltyAbility.addTarget(new TargetAnyTarget(0, 2));
|
||||||
this.addAbility(loyaltyAbility);
|
this.addAbility(loyaltyAbility);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public final class ChandraTheFirebrand extends CardImpl {
|
||||||
));
|
));
|
||||||
|
|
||||||
// -6: Chandra, the Firebrand deals 6 damage to each of up to six target creatures and/or players
|
// -6: Chandra, the Firebrand deals 6 damage to each of up to six target creatures and/or players
|
||||||
LoyaltyAbility ability2 = new LoyaltyAbility(new DamageTargetEffect(6, true, "each of up to six targets"), -6);
|
LoyaltyAbility ability2 = new LoyaltyAbility(new DamageTargetEffect(6).withTargetDescription("each of up to six targets"), -6);
|
||||||
ability2.addTarget(new TargetAnyTarget(0, 6));
|
ability2.addTarget(new TargetAnyTarget(0, 6));
|
||||||
this.addAbility(ability2);
|
this.addAbility(ability2);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ public final class Cindervines extends CardImpl {
|
||||||
|
|
||||||
// Whenever an opponent casts a noncreature spell, Cindervines deals 1 damage to that player.
|
// Whenever an opponent casts a noncreature spell, Cindervines deals 1 damage to that player.
|
||||||
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
||||||
Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player"),
|
Zone.BATTLEFIELD, new DamageTargetEffect(1).withTargetDescription("that player"),
|
||||||
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER
|
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.ObjectColor;
|
import mage.ObjectColor;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
|
@ -16,7 +15,8 @@ import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.Predicates;
|
import mage.filter.predicate.Predicates;
|
||||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -36,7 +36,7 @@ public final class Combust extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}");
|
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}");
|
||||||
|
|
||||||
// Combust deals 5 damage to target white or blue creature. The damage can't be prevented.
|
// Combust deals 5 damage to target white or blue creature. The damage can't be prevented.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(5, false));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(5).withCantBePrevented());
|
||||||
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
||||||
|
|
||||||
// Combust can't be countered.
|
// Combust can't be countered.
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ public final class CopperTablet extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
|
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, Copper Tablet deals 1 damage to that player.
|
// At the beginning of each player's upkeep, Copper Tablet deals 1 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(TargetController.EACH_PLAYER, new DamageTargetEffect(1, true, "that player"), false));
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(TargetController.EACH_PLAYER, new DamageTargetEffect(1).withTargetDescription("that player"), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private CopperTablet(final CopperTablet card) {
|
private CopperTablet(final CopperTablet card) {
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,7 @@ public final class DavrielRogueShadowmage extends CardImpl {
|
||||||
// At the beginning of each opponent's upkeep, if that player has one or fewer cards in hand, Davriel, Rogue Shadowmage deals 2 damage to them.
|
// At the beginning of each opponent's upkeep, if that player has one or fewer cards in hand, Davriel, Rogue Shadowmage deals 2 damage to them.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.OPPONENT,
|
TargetController.OPPONENT,
|
||||||
new DamageTargetEffect(
|
new DamageTargetEffect(2).withTargetDescription("them"), false
|
||||||
2, true, "them", "{this}"
|
|
||||||
), false
|
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
|
|
||||||
// -1: Target player discards a card.
|
// -1: Target player discards a card.
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public final class Demonfire extends CardImpl {
|
||||||
|
|
||||||
// Hellbent - If you have no cards in hand, Demonfire can't be countered and the damage can't be prevented.
|
// Hellbent - If you have no cards in hand, Demonfire can't be countered and the damage can't be prevented.
|
||||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||||
new DamageTargetEffect(GetXValue.instance, false),
|
new DamageTargetEffect(GetXValue.instance).withCantBePrevented(),
|
||||||
HellbentCondition.instance,
|
HellbentCondition.instance,
|
||||||
"<br/><i>Hellbent</i> — If you have no cards in hand, this spell can't be countered and the damage can't be prevented."));
|
"<br/><i>Hellbent</i> — If you have no cards in hand, this spell can't be countered and the damage can't be prevented."));
|
||||||
// can't be countered
|
// can't be countered
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class DwarvenSeaClan extends CardImpl {
|
||||||
// {tap}: Choose target attacking or blocking creature whose controller controls an Island. Dwarven Sea Clan deals 2 damage to that creature at end of combat. Activate this ability only before the end of combat step.
|
// {tap}: Choose target attacking or blocking creature whose controller controls an Island. Dwarven Sea Clan deals 2 damage to that creature at end of combat. Activate this ability only before the end of combat step.
|
||||||
Ability ability = new ActivateIfConditionActivatedAbility(
|
Ability ability = new ActivateIfConditionActivatedAbility(
|
||||||
new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(
|
new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(
|
||||||
new DamageTargetEffect(2, true, "that creature")
|
new DamageTargetEffect(2).withTargetDescription("that creature")
|
||||||
)).setText("Choose target attacking or blocking creature whose controller controls an Island. " +
|
)).setText("Choose target attacking or blocking creature whose controller controls an Island. " +
|
||||||
"{this} deals 2 damage to that creature at end of combat."),
|
"{this} deals 2 damage to that creature at end of combat."),
|
||||||
new TapSourceCost(), BeforeEndCombatCondition.getInstance()
|
new TapSourceCost(), BeforeEndCombatCondition.getInstance()
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ class EidolonOfTheGreatRevelTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
|
|
||||||
public EidolonOfTheGreatRevelTriggeredAbility() {
|
public EidolonOfTheGreatRevelTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(2, true, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(2).withTargetDescription("that player"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,8 @@ public final class FalkenrathPerforator extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// Whenever Falkenrath Perforator attacks, it deals 1 damage to defending player.
|
// Whenever Falkenrath Perforator attacks, it deals 1 damage to defending player.
|
||||||
this.addAbility(new AttacksTriggeredAbility(new DamageTargetEffect(
|
this.addAbility(new AttacksTriggeredAbility(new DamageTargetEffect(1)
|
||||||
1, true, "defending player", "it"
|
.withTargetDescription("defending player"), false, null, SetTargetPointer.PLAYER));
|
||||||
), false, null, SetTargetPointer.PLAYER));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private FalkenrathPerforator(final FalkenrathPerforator card) {
|
private FalkenrathPerforator(final FalkenrathPerforator card) {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@ public final class FallOfTheTitans extends CardImpl {
|
||||||
|
|
||||||
// Fall of the Titans deals X damage to each of up to two target creatures and/or players.
|
// Fall of the Titans deals X damage to each of up to two target creatures and/or players.
|
||||||
this.getSpellAbility().addTarget(new TargetAnyTarget(0, 2));
|
this.getSpellAbility().addTarget(new TargetAnyTarget(0, 2));
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(GetXValue.instance, true, "each of up to two targets"));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(GetXValue.instance)
|
||||||
|
.withTargetDescription("each of up to two targets"));
|
||||||
|
|
||||||
// Surge {X}{R}
|
// Surge {X}{R}
|
||||||
addAbility(new SurgeAbility(this, "{X}{R}"));
|
addAbility(new SurgeAbility(this, "{X}{R}"));
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class FateUnraveler extends CardImpl {
|
||||||
this.toughness = new MageInt(4);
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
// Whenever an opponent draws a card, Fate Unraveler deals 1 damage to that player.
|
// Whenever an opponent draws a card, Fate Unraveler deals 1 damage to that player.
|
||||||
this.addAbility(new DrawCardOpponentTriggeredAbility(new DamageTargetEffect(1, true, "that player"), false, true));
|
this.addAbility(new DrawCardOpponentTriggeredAbility(new DamageTargetEffect(1).withTargetDescription("that player"), false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FateUnraveler(final FateUnraveler card) {
|
private FateUnraveler(final FateUnraveler card) {
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public final class FatefulEnd extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
|
||||||
|
|
||||||
// Fateful End deals 3 damage to any target. Scry 1.
|
// Fateful End deals 3 damage to any target. Scry 1.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(3, true, "any target"));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(3));
|
||||||
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
||||||
this.getSpellAbility().addEffect(new ScryEffect(1, false));
|
this.getSpellAbility().addEffect(new ScryEffect(1, false));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,14 +36,12 @@ public final class FieryAnnihilation extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
|
||||||
|
|
||||||
// Fiery Annihilation deals 5 damage to target creature. Exile up to one target Equipment attached to that creature. If that creature would die this turn, exile it instead.
|
// Fiery Annihilation deals 5 damage to target creature. Exile up to one target Equipment attached to that creature. If that creature would die this turn, exile it instead.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(
|
this.getSpellAbility().addEffect(new DamageTargetEffect(5));
|
||||||
5, true, "target creature"
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
));
|
|
||||||
this.getSpellAbility().addEffect(new ExileTargetEffect()
|
this.getSpellAbility().addEffect(new ExileTargetEffect()
|
||||||
.setTargetPointer(new SecondTargetPointer())
|
.setTargetPointer(new SecondTargetPointer())
|
||||||
.setText("exile up to one target Equipment attached to that creature"));
|
.setText("exile up to one target Equipment attached to that creature"));
|
||||||
this.getSpellAbility().addEffect(new ExileTargetIfDiesEffect());
|
this.getSpellAbility().addEffect(new ExileTargetIfDiesEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
|
||||||
this.getSpellAbility().addTarget(new TargetPermanent(0, 1, filter));
|
this.getSpellAbility().addTarget(new TargetPermanent(0, 1, filter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ public final class FlamebladeAngel extends CardImpl {
|
||||||
// Flying
|
// Flying
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
// Whenever a source an opponent controls deals damage to you or a permanent you control, you may have Flameblade Angel deal 1 damage to that source's controller.
|
// Whenever a source an opponent controls deals damage to you or a permanent you control, you may have Flameblade Angel deal 1 damage to that source's controller.
|
||||||
Effect effect = new DamageTargetEffect(1, true, "that source's controller");
|
Effect effect = new DamageTargetEffect(1).withTargetDescription("that source's controller");
|
||||||
this.addAbility(new SourceDealsDamageToYouTriggeredAbility(effect, StaticFilters.FILTER_PERMANENT, true));
|
this.addAbility(new SourceDealsDamageToYouTriggeredAbility(effect, StaticFilters.FILTER_PERMANENT, true));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public final class FlameheartWerewolf extends CardImpl {
|
||||||
this.nightCard = true;
|
this.nightCard = true;
|
||||||
|
|
||||||
// Whenever Flameheart Werewolf blocks or becomes blocked by a creature, Flameheart Werewolf deals 2 damage to that creature.
|
// Whenever Flameheart Werewolf blocks or becomes blocked by a creature, Flameheart Werewolf deals 2 damage to that creature.
|
||||||
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(new DamageTargetEffect(2, true, "that creature")));
|
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(new DamageTargetEffect(2).withTargetDescription("that creature")));
|
||||||
|
|
||||||
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Flameheart Werewolf.
|
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Flameheart Werewolf.
|
||||||
this.addAbility(new WerewolfBackTriggeredAbility());
|
this.addAbility(new WerewolfBackTriggeredAbility());
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class FlamesOfTheBloodHand extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
|
||||||
|
|
||||||
// Flames of the Blood Hand deals 4 damage to target player. The damage can't be prevented.
|
// Flames of the Blood Hand deals 4 damage to target player. The damage can't be prevented.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(4, false));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(4).withCantBePrevented());
|
||||||
// If that player would gain life this turn, that player gains no life instead.
|
// If that player would gain life this turn, that player gains no life instead.
|
||||||
this.getSpellAbility().addEffect(new FlamesOfTheBloodHandReplacementEffect());
|
this.getSpellAbility().addEffect(new FlamesOfTheBloodHandReplacementEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
|
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import mage.abilities.LoyaltyAbility;
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
|
||||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.abilities.effects.common.ExileSpellEffect;
|
import mage.abilities.effects.common.ExileSpellEffect;
|
||||||
|
|
@ -73,7 +72,8 @@ public final class FlamescrollCelebrant extends ModalDoubleFacedCard {
|
||||||
class FlamescrollCelebrantTriggeredAbility extends TriggeredAbilityImpl {
|
class FlamescrollCelebrantTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
FlamescrollCelebrantTriggeredAbility() {
|
FlamescrollCelebrantTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(1), true, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(1).withTargetDescription("that player"));
|
||||||
|
setTriggerPhrase("Whenever an opponent activates an ability that isn't a mana ability, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
private FlamescrollCelebrantTriggeredAbility(final FlamescrollCelebrantTriggeredAbility ability) {
|
private FlamescrollCelebrantTriggeredAbility(final FlamescrollCelebrantTriggeredAbility ability) {
|
||||||
|
|
@ -103,11 +103,6 @@ class FlamescrollCelebrantTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRule() {
|
|
||||||
return "Whenever an opponent activates an ability that isn't a mana ability, " +
|
|
||||||
"{this} deals 1 damage to that player.";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class RevelInSilenceEffect extends ContinuousRuleModifyingEffectImpl {
|
class RevelInSilenceEffect extends ContinuousRuleModifyingEffectImpl {
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public final class FuriousReprisal extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}");
|
||||||
|
|
||||||
// Furious Reprisal deals 2 damage to each of two target creatures and/or players.
|
// Furious Reprisal deals 2 damage to each of two target creatures and/or players.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(2, true, "each of two targets"));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(2).withTargetDescription("each of two targets"));
|
||||||
this.getSpellAbility().addTarget(new TargetAnyTarget(2, 2));
|
this.getSpellAbility().addTarget(new TargetAnyTarget(2, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ public final class FurnaceScamp extends CardImpl {
|
||||||
|
|
||||||
// Whenever Furnace Scamp deals combat damage to a player, you may sacrifice it. If you do, Furnace Scamp deals 3 damage to that player.
|
// Whenever Furnace Scamp deals combat damage to a player, you may sacrifice it. If you do, Furnace Scamp deals 3 damage to that player.
|
||||||
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(
|
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(
|
||||||
new DamageTargetEffect(3, true, "that player"), new SacrificeSourceCost()
|
new DamageTargetEffect(3).withTargetDescription("that player"), new SacrificeSourceCost()
|
||||||
), false, true);
|
), false, true);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public final class GibberingFiend extends CardImpl {
|
||||||
// <i>Delirium</i> — At the beginning of each opponent's upkeep, if there are four or more card types among cards in your graveyard,
|
// <i>Delirium</i> — At the beginning of each opponent's upkeep, if there are four or more card types among cards in your graveyard,
|
||||||
// Gibbering Fiend deals 1 damage to that player.
|
// Gibbering Fiend deals 1 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.OPPONENT, new DamageTargetEffect(1, true, "that player"), false
|
TargetController.OPPONENT, new DamageTargetEffect(1).withTargetDescription("that player"), false
|
||||||
).withInterveningIf(DeliriumCondition.instance).setAbilityWord(AbilityWord.DELIRIUM).addHint(CardTypesInGraveyardCount.YOU.getHint()));
|
).withInterveningIf(DeliriumCondition.instance).setAbilityWord(AbilityWord.DELIRIUM).addHint(CardTypesInGraveyardCount.YOU.getHint()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
|
|
@ -48,7 +47,8 @@ public final class HarshMentor extends CardImpl {
|
||||||
class HarshMentorTriggeredAbility extends TriggeredAbilityImpl {
|
class HarshMentorTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
HarshMentorTriggeredAbility() {
|
HarshMentorTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(2), true, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(2).withTargetDescription("that player"));
|
||||||
|
setTriggerPhrase("Whenever an opponent activates an ability of an artifact, creature, or land on the battlefield, if it isn't a mana ability, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
private HarshMentorTriggeredAbility(final HarshMentorTriggeredAbility ability) {
|
private HarshMentorTriggeredAbility(final HarshMentorTriggeredAbility ability) {
|
||||||
|
|
@ -82,8 +82,4 @@ class HarshMentorTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRule() {
|
|
||||||
return "Whenever an opponent activates an ability of an artifact, creature, or land on the battlefield, if it isn't a mana ability, {this} deals 2 damage to that player.";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public final class HellfireMongrel extends CardImpl {
|
||||||
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Hellfire Mongrel deals 2 damage to that player.
|
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Hellfire Mongrel deals 2 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.OPPONENT,
|
TargetController.OPPONENT,
|
||||||
new DamageTargetEffect(2, true, "that player"),
|
new DamageTargetEffect(2).withTargetDescription("that player"),
|
||||||
false
|
false
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,7 @@
|
||||||
package mage.cards.i;
|
package mage.cards.i;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
|
@ -20,6 +16,10 @@ import mage.game.stack.Spell;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
import mage.watchers.Watcher;
|
import mage.watchers.Watcher;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author L_J
|
* @author L_J
|
||||||
|
|
@ -50,7 +50,8 @@ public final class IchneumonDruid extends CardImpl {
|
||||||
class IchneumonDruidAbility extends TriggeredAbilityImpl {
|
class IchneumonDruidAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
IchneumonDruidAbility() {
|
IchneumonDruidAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(4), false, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(4).withTargetDescription("that player"));
|
||||||
|
setTriggerPhrase("Whenever an opponent casts an instant spell other than the first instant spell that player casts each turn, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
private IchneumonDruidAbility(final IchneumonDruidAbility ability) {
|
private IchneumonDruidAbility(final IchneumonDruidAbility ability) {
|
||||||
|
|
@ -84,10 +85,6 @@ class IchneumonDruidAbility extends TriggeredAbilityImpl {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRule() {
|
|
||||||
return "Whenever an opponent casts an instant spell other than the first instant spell that player casts each turn, {this} deals 4 damage to that player.";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class IchneumonDruidWatcher extends Watcher {
|
class IchneumonDruidWatcher extends Watcher {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import mage.abilities.Ability;
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||||
|
|
@ -67,7 +66,7 @@ public final class ImmolationShaman extends CardImpl {
|
||||||
class ImmolationShamanTriggeredAbility extends TriggeredAbilityImpl {
|
class ImmolationShamanTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
ImmolationShamanTriggeredAbility() {
|
ImmolationShamanTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(1), true, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(1).withTargetDescription("that player"));
|
||||||
setTriggerPhrase("Whenever an opponent activates an ability of an artifact, creature, or land that isn't a mana ability, ");
|
setTriggerPhrase("Whenever an opponent activates an ability of an artifact, creature, or land that isn't a mana ability, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@ public final class InfernoElemental extends CardImpl {
|
||||||
this.toughness = new MageInt(4);
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
// Whenever Inferno Elemental blocks or becomes blocked by a creature, Inferno Elemental deals 3 damage to that creature.
|
// Whenever Inferno Elemental blocks or becomes blocked by a creature, Inferno Elemental deals 3 damage to that creature.
|
||||||
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(new DamageTargetEffect(3, true, "that creature")));
|
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(
|
||||||
|
new DamageTargetEffect(3).withTargetDescription("that creature")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private InfernoElemental(final InfernoElemental card) {
|
private InfernoElemental(final InfernoElemental card) {
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ public final class IshiIshiAkkiCrackshot extends CardImpl {
|
||||||
|
|
||||||
// Whenever an opponent casts a Spirit or Arcane spell, Ishi-Ishi, Akki Crackshot deals 2 damage to that player.
|
// Whenever an opponent casts a Spirit or Arcane spell, Ishi-Ishi, Akki Crackshot deals 2 damage to that player.
|
||||||
this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD,
|
this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD,
|
||||||
new DamageTargetEffect(2, true, "that player"),
|
new DamageTargetEffect(2).withTargetDescription("that player"),
|
||||||
StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false, SetTargetPointer.PLAYER));
|
StaticFilters.FILTER_SPELL_SPIRIT_OR_ARCANE, false, SetTargetPointer.PLAYER));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ public final class JaggedLightning extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}{R}");
|
||||||
|
|
||||||
// Jagged Lightning deals 3 damage to each of two target creatures.
|
// Jagged Lightning deals 3 damage to each of two target creatures.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(3, true, "each of two target creatures"));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(3).withTargetDescription("each of two target creatures"));
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(2));
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,7 @@ public final class JeskaiRevelation extends CardImpl {
|
||||||
// Return target spell or permanent to its owner's hand. Jeskai Revelation deals 4 damage to any target. Create two 1/1 white Monk creature tokens with prowess. Draw two cards. You gain 4 life.
|
// Return target spell or permanent to its owner's hand. Jeskai Revelation deals 4 damage to any target. Create two 1/1 white Monk creature tokens with prowess. Draw two cards. You gain 4 life.
|
||||||
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetSpellOrPermanent());
|
this.getSpellAbility().addTarget(new TargetSpellOrPermanent());
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(
|
this.getSpellAbility().addEffect(new DamageTargetEffect(4).setTargetPointer(new SecondTargetPointer()));
|
||||||
4, true, "any target"
|
|
||||||
).setTargetPointer(new SecondTargetPointer()));
|
|
||||||
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
||||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new MonasteryMentorToken(), 2));
|
this.getSpellAbility().addEffect(new CreateTokenEffect(new MonasteryMentorToken(), 2));
|
||||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2));
|
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2));
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.k;
|
package mage.cards.k;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -17,7 +16,6 @@ import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
import mage.game.events.GameEvent.EventType;
|
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -56,7 +54,7 @@ class KederektParasiteTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
KederektParasiteTriggeredAbility() {
|
KederektParasiteTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "opponent"), true);
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(1), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private KederektParasiteTriggeredAbility(final KederektParasiteTriggeredAbility ability) {
|
private KederektParasiteTriggeredAbility(final KederektParasiteTriggeredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public final class KessigForgemaster extends CardImpl {
|
||||||
this.secondSideCardClazz = mage.cards.f.FlameheartWerewolf.class;
|
this.secondSideCardClazz = mage.cards.f.FlameheartWerewolf.class;
|
||||||
|
|
||||||
// Whenever Kessig Forgemaster blocks or becomes blocked by a creature, Kessig Forgemaster deals 1 damage to that creature.
|
// Whenever Kessig Forgemaster blocks or becomes blocked by a creature, Kessig Forgemaster deals 1 damage to that creature.
|
||||||
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(new DamageTargetEffect(1, true, "that creature")));
|
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(new DamageTargetEffect(1).withTargetDescription("that creature")));
|
||||||
|
|
||||||
// At the beginning of each upkeep, if no spells were cast last turn, transform Kessig Forgemaster.
|
// At the beginning of each upkeep, if no spells were cast last turn, transform Kessig Forgemaster.
|
||||||
this.addAbility(new TransformAbility());
|
this.addAbility(new TransformAbility());
|
||||||
|
|
|
||||||
|
|
@ -30,13 +30,11 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class KnollspineInvocation extends CardImpl {
|
public final class KnollspineInvocation extends CardImpl {
|
||||||
|
|
||||||
protected static final FilterCard filter = new FilterCard("a card with mana value X");
|
|
||||||
|
|
||||||
public KnollspineInvocation(UUID ownerId, CardSetInfo setInfo) {
|
public KnollspineInvocation(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}{R}");
|
||||||
|
|
||||||
// {X}, Discard a card with mana value X: This enchantment deals X damage to any target.
|
// {X}, Discard a card with mana value X: This enchantment deals X damage to any target.
|
||||||
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(GetXValue.instance, true), new ManaCostsImpl<>("{X}"));
|
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(GetXValue.instance), new ManaCostsImpl<>("{X}"));
|
||||||
ability.addCost(new KnollspineInvocationDiscardCost());
|
ability.addCost(new KnollspineInvocationDiscardCost());
|
||||||
ability.addTarget(new TargetAnyTarget());
|
ability.addTarget(new TargetAnyTarget());
|
||||||
ability.setCostAdjuster(KnollspineInvocationAdjuster.instance);
|
ability.setCostAdjuster(KnollspineInvocationAdjuster.instance);
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class KolaghanAspirant extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// Whenever Kolaghan Aspirant becomes blocked by a creature, Kolaghan Aspirant deals 1 damage to that creature.
|
// Whenever Kolaghan Aspirant becomes blocked by a creature, Kolaghan Aspirant deals 1 damage to that creature.
|
||||||
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new DamageTargetEffect(1, true, "that creature"), false));
|
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new DamageTargetEffect(1).withTargetDescription("that creature"), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private KolaghanAspirant(final KolaghanAspirant card) {
|
private KolaghanAspirant(final KolaghanAspirant card) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public final class LavabornMuse extends CardImpl {
|
||||||
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Lavaborn Muse deals 3 damage to that player.
|
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Lavaborn Muse deals 3 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.OPPONENT,
|
TargetController.OPPONENT,
|
||||||
new DamageTargetEffect(3, true, "that player"),
|
new DamageTargetEffect(3).withTargetDescription("that player"),
|
||||||
false
|
false
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public final class LightningSurge extends CardImpl {
|
||||||
// Lightning Surge deals 4 damage to any target.
|
// Lightning Surge deals 4 damage to any target.
|
||||||
// Threshold - If seven or more cards are in your graveyard, instead Lightning Surge deals 6 damage to that creature or player and the damage can't be prevented.
|
// Threshold - If seven or more cards are in your graveyard, instead Lightning Surge deals 6 damage to that creature or player and the damage can't be prevented.
|
||||||
Effect effect = new ConditionalOneShotEffect(
|
Effect effect = new ConditionalOneShotEffect(
|
||||||
new DamageTargetEffect(6, false), new DamageTargetEffect(4),
|
new DamageTargetEffect(6).withCantBePrevented(), new DamageTargetEffect(4),
|
||||||
ThresholdCondition.instance, "{this} deals 4 damage to any target.<br>" +
|
ThresholdCondition.instance, "{this} deals 4 damage to any target.<br>" +
|
||||||
AbilityWord.THRESHOLD.formatWord() + "If seven or more cards are in your graveyard, " +
|
AbilityWord.THRESHOLD.formatWord() + "If seven or more cards are in your graveyard, " +
|
||||||
"instead {this} deals 6 damage to that permanent or player and the damage can't be prevented"
|
"instead {this} deals 6 damage to that permanent or player and the damage can't be prevented"
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ public final class Manabarbs extends CardImpl {
|
||||||
|
|
||||||
// Whenever a player taps a land for mana, Manabarbs deals 1 damage to that player.
|
// Whenever a player taps a land for mana, Manabarbs deals 1 damage to that player.
|
||||||
this.addAbility(new TapForManaAllTriggeredAbility(
|
this.addAbility(new TapForManaAllTriggeredAbility(
|
||||||
new DamageTargetEffect(1, true, "that player"),
|
new DamageTargetEffect(1).withTargetDescription("that player"),
|
||||||
new FilterLandPermanent("a player taps a land"), SetTargetPointer.PLAYER));
|
new FilterLandPermanent("a player taps a land"), SetTargetPointer.PLAYER));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class MaskOfIntolerance extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, if there are four or more basic land types among lands that player controls, Mask of Intolerance deals 3 damage to that player.
|
// At the beginning of each player's upkeep, if there are four or more basic land types among lands that player controls, Mask of Intolerance deals 3 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.EACH_PLAYER, new DamageTargetEffect(3, true, "that player"), false
|
TargetController.EACH_PLAYER, new DamageTargetEffect(3).withTargetDescription("that player"), false
|
||||||
).withInterveningIf(MaskOfIntoleranceCondition.instance).addHint(DomainHint.instance));
|
).withInterveningIf(MaskOfIntoleranceCondition.instance).addHint(DomainHint.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ public final class Megrim extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{B}");
|
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{B}");
|
||||||
|
|
||||||
// Whenever an opponent discards a card, Megrim deals 2 damage to that player.
|
// Whenever an opponent discards a card, Megrim deals 2 damage to that player.
|
||||||
this.addAbility(new DiscardsACardOpponentTriggeredAbility(new DamageTargetEffect(2, true, "that player"), false, SetTargetPointer.PLAYER));
|
this.addAbility(new DiscardsACardOpponentTriggeredAbility(new DamageTargetEffect(2).withTargetDescription("that player"), false, SetTargetPointer.PLAYER));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Megrim(final Megrim card) {
|
private Megrim(final Megrim card) {
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public final class NekusarTheMindrazer extends CardImpl {
|
||||||
false));
|
false));
|
||||||
|
|
||||||
// Whenever an opponent draws a card, Nekusar, the Mindrazer deals 1 damage to that player.
|
// Whenever an opponent draws a card, Nekusar, the Mindrazer deals 1 damage to that player.
|
||||||
this.addAbility(new DrawCardOpponentTriggeredAbility(new DamageTargetEffect(1, true, "that player"), false, true));
|
this.addAbility(new DrawCardOpponentTriggeredAbility(new DamageTargetEffect(1).withTargetDescription("that player"), false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private NekusarTheMindrazer(final NekusarTheMindrazer card) {
|
private NekusarTheMindrazer(final NekusarTheMindrazer card) {
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,8 @@ public final class ObNixilisTheHateTwisted extends CardImpl {
|
||||||
this.setStartingLoyalty(5);
|
this.setStartingLoyalty(5);
|
||||||
|
|
||||||
// Whenever an opponent draws a card, Ob Nixilis, the Hate-Twisted deals 1 damage to that player.
|
// Whenever an opponent draws a card, Ob Nixilis, the Hate-Twisted deals 1 damage to that player.
|
||||||
this.addAbility(new DrawCardOpponentTriggeredAbility(new DamageTargetEffect(
|
this.addAbility(new DrawCardOpponentTriggeredAbility(new DamageTargetEffect(1)
|
||||||
1, true, "that player"
|
.withTargetDescription("that player"), false, true));
|
||||||
), false, true));
|
|
||||||
|
|
||||||
// -2: Destroy target creature. Its controller draws two cards.
|
// -2: Destroy target creature. Its controller draws two cards.
|
||||||
Ability ability = new LoyaltyAbility(new DestroyTargetEffect(), -2);
|
Ability ability = new LoyaltyAbility(new DestroyTargetEffect(), -2);
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class OrneryGoblin extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// Whenever Ornery Goblin blocks or becomes blocked by a creature, Ornery Goblin deals 1 damage to that creature.
|
// Whenever Ornery Goblin blocks or becomes blocked by a creature, Ornery Goblin deals 1 damage to that creature.
|
||||||
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(new DamageTargetEffect(1, true, "that creature")));
|
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(new DamageTargetEffect(1).withTargetDescription("that creature")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private OrneryGoblin(final OrneryGoblin card) {
|
private OrneryGoblin(final OrneryGoblin card) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public final class Overabundance extends CardImpl {
|
||||||
));
|
));
|
||||||
|
|
||||||
this.addAbility(new TapForManaAllTriggeredAbility(
|
this.addAbility(new TapForManaAllTriggeredAbility(
|
||||||
new DamageTargetEffect(1, true, "that player"),
|
new DamageTargetEffect(1).withTargetDescription("that player"),
|
||||||
new FilterLandPermanent("a player taps a land"),
|
new FilterLandPermanent("a player taps a land"),
|
||||||
SetTargetPointer.PLAYER
|
SetTargetPointer.PLAYER
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class PaupersCage extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Paupers' Cage deals 2 damage to that player.
|
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Paupers' Cage deals 2 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.OPPONENT, new DamageTargetEffect(2, true, "that player"), false
|
TargetController.OPPONENT, new DamageTargetEffect(2).withTargetDescription("that player"), false
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public final class PinpointAvalanche extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{R}{R}");
|
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{R}{R}");
|
||||||
|
|
||||||
// Pinpoint Avalanche deals 4 damage to target creature. The damage can't be prevented.
|
// Pinpoint Avalanche deals 4 damage to target creature. The damage can't be prevented.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(4, false));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(4).withCantBePrevented());
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public final class PrickleFaeries extends CardImpl {
|
||||||
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Prickle Faeries deals 2 damage to them.
|
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Prickle Faeries deals 2 damage to them.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
Zone.BATTLEFIELD, TargetController.OPPONENT,
|
Zone.BATTLEFIELD, TargetController.OPPONENT,
|
||||||
new DamageTargetEffect(2, true, "them"), false
|
new DamageTargetEffect(2).withTargetDescription("them"), false
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ class PyrostaticPillarTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
|
|
||||||
public PyrostaticPillarTriggeredAbility() {
|
public PyrostaticPillarTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(2, true, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(2).withTargetDescription("that player"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -76,4 +76,4 @@ class PyrostaticPillarTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever a player casts a spell with mana value 3 or less, {this} deals 2 damage to that player.";
|
return "Whenever a player casts a spell with mana value 3 or less, {this} deals 2 damage to that player.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class QuenchableFire extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(3));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(3));
|
||||||
// It deals an additional 3 damage to that player or planeswalker at the beginning of your next upkeep step unless that player or that planeswalker’s controller pays {U} before that step.
|
// It deals an additional 3 damage to that player or planeswalker at the beginning of your next upkeep step unless that player or that planeswalker’s controller pays {U} before that step.
|
||||||
this.getSpellAbility().addEffect(new UnlessPaysDelayedEffect(new ManaCostsImpl<>("{U}"),
|
this.getSpellAbility().addEffect(new UnlessPaysDelayedEffect(new ManaCostsImpl<>("{U}"),
|
||||||
new DamageTargetEffect(3, true, "that player or that planeswalker's controller"), PhaseStep.UPKEEP, false,
|
new DamageTargetEffect(3).withTargetDescription("that player or that planeswalker's controller"), PhaseStep.UPKEEP, false,
|
||||||
"It deals an additional 3 damage to that player or planeswalker at the beginning of your next upkeep step unless that player or that planeswalker's controller pays {U} before that step."));
|
"It deals an additional 3 damage to that player or planeswalker at the beginning of your next upkeep step unless that player or that planeswalker's controller pays {U} before that step."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,9 @@ public final class RampagingFerocidon extends CardImpl {
|
||||||
this.addAbility(new SimpleStaticAbility(new CantGainLifeAllEffect()));
|
this.addAbility(new SimpleStaticAbility(new CantGainLifeAllEffect()));
|
||||||
|
|
||||||
// Whenever another creature enters the battlefield, Rampaging Ferocidon deals 1 damage to that creature's controller.
|
// Whenever another creature enters the battlefield, Rampaging Ferocidon deals 1 damage to that creature's controller.
|
||||||
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
|
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
|
||||||
Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that creature's controller"), filter, false, SetTargetPointer.PLAYER));
|
new DamageTargetEffect(1).withTargetDescription("that creature's controller"),
|
||||||
|
filter, false, SetTargetPointer.PLAYER));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RampagingFerocidon(final RampagingFerocidon card) {
|
private RampagingFerocidon(final RampagingFerocidon card) {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public final class RazorPendulum extends CardImpl {
|
||||||
// At the beginning of each player’s end step, if that player has 5 or less life, Razor Pendulum deals 2 damage to that player.
|
// At the beginning of each player’s end step, if that player has 5 or less life, Razor Pendulum deals 2 damage to that player.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
TargetController.EACH_PLAYER,
|
TargetController.EACH_PLAYER,
|
||||||
new DamageTargetEffect(2, true, "that player"),
|
new DamageTargetEffect(2).withTargetDescription("that player"),
|
||||||
false, condition
|
false, condition
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,9 +35,9 @@ public final class RazorkinNeedlehead extends CardImpl {
|
||||||
)));
|
)));
|
||||||
|
|
||||||
// Whenever an opponent draws a card, Razorkin Needlehead deals 1 damage to them.
|
// Whenever an opponent draws a card, Razorkin Needlehead deals 1 damage to them.
|
||||||
this.addAbility(new DrawCardOpponentTriggeredAbility(new DamageTargetEffect(
|
this.addAbility(new DrawCardOpponentTriggeredAbility(
|
||||||
1, true, "them"
|
new DamageTargetEffect(1).withTargetDescription("them"),
|
||||||
), false, true));
|
false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RazorkinNeedlehead(final RazorkinNeedlehead card) {
|
private RazorkinNeedlehead(final RazorkinNeedlehead card) {
|
||||||
|
|
|
||||||
|
|
@ -32,15 +32,15 @@ public final class RoilingVortex extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, Roiling Vortex deals 1 damage to them.
|
// At the beginning of each player's upkeep, Roiling Vortex deals 1 damage to them.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.EACH_PLAYER, new DamageTargetEffect(1, true, "them"),
|
TargetController.EACH_PLAYER, new DamageTargetEffect(1).withTargetDescription("them"),
|
||||||
false
|
false
|
||||||
));
|
));
|
||||||
|
|
||||||
// Whenever a player casts a spell, if no mana was spent to cast that spell, Roiling Vortex deals 5 damage to that player.
|
// Whenever a player casts a spell, if no mana was spent to cast that spell, Roiling Vortex deals 5 damage to that player.
|
||||||
this.addAbility(new SpellCastAllTriggeredAbility(new DamageTargetEffect(
|
this.addAbility(new SpellCastAllTriggeredAbility(
|
||||||
5, true, "that player",
|
new DamageTargetEffect(5)
|
||||||
"if no mana was spent to cast that spell, {this}"
|
.setText("if no mana was spent to cast that spell, {this} deals 5 damage to that player"),
|
||||||
), filter, false, SetTargetPointer.PLAYER));
|
filter, false, SetTargetPointer.PLAYER));
|
||||||
|
|
||||||
// {R}: Your opponents can't gain life this turn.
|
// {R}: Your opponents can't gain life this turn.
|
||||||
this.addAbility(new SimpleActivatedAbility(
|
this.addAbility(new SimpleActivatedAbility(
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public final class ScabClanBerserker extends CardImpl {
|
||||||
// Whenever an opponent casts a noncreature spell, if Scab-Clan Berserker is renowned, Scab-Clan Berserker deals 2 damage to that player.
|
// Whenever an opponent casts a noncreature spell, if Scab-Clan Berserker is renowned, Scab-Clan Berserker deals 2 damage to that player.
|
||||||
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new DamageTargetEffect(2, true, "that player"),
|
new DamageTargetEffect(2).withTargetDescription("that player"),
|
||||||
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER
|
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER
|
||||||
).withInterveningIf(RenownedSourceCondition.THIS));
|
).withInterveningIf(RenownedSourceCondition.THIS));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public final class Scald extends CardImpl {
|
||||||
|
|
||||||
// Whenever a player taps an Island for mana, Scald deals 1 damage to that player.
|
// Whenever a player taps an Island for mana, Scald deals 1 damage to that player.
|
||||||
this.addAbility(new TapForManaAllTriggeredAbility(
|
this.addAbility(new TapForManaAllTriggeredAbility(
|
||||||
new DamageTargetEffect(1, true, "that player"),
|
new DamageTargetEffect(1).withTargetDescription("that player"),
|
||||||
filter,
|
filter,
|
||||||
SetTargetPointer.PLAYER));
|
SetTargetPointer.PLAYER));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public final class ScaldingViper extends AdventureCard {
|
||||||
|
|
||||||
// Whenever an opponent casts a spell with mana value 3 or less, Scalding Viper deals 1 damage to that player.
|
// Whenever an opponent casts a spell with mana value 3 or less, Scalding Viper deals 1 damage to that player.
|
||||||
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
||||||
Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player"),
|
Zone.BATTLEFIELD, new DamageTargetEffect(1).withTargetDescription("that player"),
|
||||||
filter, false, SetTargetPointer.PLAYER
|
filter, false, SetTargetPointer.PLAYER
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ public final class SearingBlood extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(2));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(2));
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new WhenTargetDiesDelayedTriggeredAbility(
|
new WhenTargetDiesDelayedTriggeredAbility(
|
||||||
new DamageTargetEffect(3, true, "the creature's controller"),
|
new DamageTargetEffect(3).withTargetDescription("the creature's controller"),
|
||||||
SetTargetPointer.PLAYER
|
SetTargetPointer.PLAYER
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import mage.constants.Zone;
|
||||||
import mage.filter.common.FilterCreatureCard;
|
import mage.filter.common.FilterCreatureCard;
|
||||||
import mage.filter.predicate.ObjectSourcePlayer;
|
import mage.filter.predicate.ObjectSourcePlayer;
|
||||||
import mage.filter.predicate.ObjectSourcePlayerPredicate;
|
import mage.filter.predicate.ObjectSourcePlayerPredicate;
|
||||||
import mage.game.Controllable;
|
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
import mage.game.stack.Spell;
|
import mage.game.stack.Spell;
|
||||||
|
|
@ -22,6 +21,7 @@ import mage.players.Player;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
import mage.watchers.Watcher;
|
import mage.watchers.Watcher;
|
||||||
import mage.watchers.common.SpellsCastWatcher;
|
import mage.watchers.common.SpellsCastWatcher;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -108,8 +108,8 @@ class FirstCastCreatureSpellPredicate implements ObjectSourcePlayerPredicate<Car
|
||||||
|
|
||||||
class ShadowInTheWarpTriggeredAbility extends TriggeredAbilityImpl {
|
class ShadowInTheWarpTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
public ShadowInTheWarpTriggeredAbility() {
|
ShadowInTheWarpTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(2, false));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ShadowInTheWarpTriggeredAbility(final ShadowInTheWarpTriggeredAbility ability) {
|
private ShadowInTheWarpTriggeredAbility(final ShadowInTheWarpTriggeredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public final class ShriekTreblemaker extends CardImpl {
|
||||||
// Sonic Blast -- Whenever a creature an opponent controls dies, Shriek deals 1 damage to that player.
|
// Sonic Blast -- Whenever a creature an opponent controls dies, Shriek deals 1 damage to that player.
|
||||||
this.addAbility(new DiesCreatureTriggeredAbility(
|
this.addAbility(new DiesCreatureTriggeredAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new DamageTargetEffect(1, true, "that player"),
|
new DamageTargetEffect(1).withTargetDescription("that player"),
|
||||||
false,
|
false,
|
||||||
StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE,
|
StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE,
|
||||||
SetTargetPointer.PLAYER)
|
SetTargetPointer.PLAYER)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.dynamicvalue.DynamicValue;
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
|
|
@ -13,6 +12,8 @@ import mage.game.Game;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
import mage.watchers.common.AmountOfDamageAPlayerReceivedThisTurnWatcher;
|
import mage.watchers.common.AmountOfDamageAPlayerReceivedThisTurnWatcher;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author MTGfan
|
* @author MTGfan
|
||||||
|
|
@ -21,14 +22,13 @@ public final class Simulacrum extends CardImpl {
|
||||||
|
|
||||||
public Simulacrum(UUID ownerId, CardSetInfo setInfo) {
|
public Simulacrum(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}");
|
||||||
|
|
||||||
|
|
||||||
// You gain life equal to the damage dealt to you this turn. Simulacrum deals damage to target creature you control equal to the damage dealt to you this turn.
|
// You gain life equal to the damage dealt to you this turn. Simulacrum deals damage to target creature you control equal to the damage dealt to you this turn.
|
||||||
this.getSpellAbility().addEffect(new GainLifeEffect(new SimulacrumAmount(), "You gain life equal to the damage dealt to you this turn."));
|
this.getSpellAbility().addEffect(new GainLifeEffect(SimulacrumAmount.instance, "You gain life equal to the damage dealt to you this turn."));
|
||||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||||
Effect effect = new DamageTargetEffect(new SimulacrumAmount(), true, "target creature you control");
|
this.getSpellAbility().addEffect(new DamageTargetEffect(SimulacrumAmount.instance)
|
||||||
effect.setText(" {this} deals damage to target creature you control equal to the damage dealt to you this turn.");
|
.setText("{this} deals damage to target creature you control equal to the damage dealt to you this turn"));
|
||||||
this.getSpellAbility().addEffect(effect);
|
|
||||||
this.getSpellAbility().addWatcher(new AmountOfDamageAPlayerReceivedThisTurnWatcher());
|
this.getSpellAbility().addWatcher(new AmountOfDamageAPlayerReceivedThisTurnWatcher());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -42,12 +42,13 @@ public final class Simulacrum extends CardImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SimulacrumAmount implements DynamicValue {
|
enum SimulacrumAmount implements DynamicValue {
|
||||||
|
instance;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||||
AmountOfDamageAPlayerReceivedThisTurnWatcher watcher = game.getState().getWatcher(AmountOfDamageAPlayerReceivedThisTurnWatcher.class);
|
AmountOfDamageAPlayerReceivedThisTurnWatcher watcher = game.getState().getWatcher(AmountOfDamageAPlayerReceivedThisTurnWatcher.class);
|
||||||
if(watcher != null) {
|
if (watcher != null) {
|
||||||
return watcher.getAmountOfDamageReceivedThisTurn(sourceAbility.getControllerId());
|
return watcher.getAmountOfDamageReceivedThisTurn(sourceAbility.getControllerId());
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -55,7 +56,7 @@ class SimulacrumAmount implements DynamicValue {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SimulacrumAmount copy() {
|
public SimulacrumAmount copy() {
|
||||||
return new SimulacrumAmount();
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public final class SkewerSlinger extends CardImpl {
|
||||||
|
|
||||||
// Whenever Skewer Slinger blocks or becomes blocked by a creature, Skewer Slinger deals 1 damage to that creature.
|
// Whenever Skewer Slinger blocks or becomes blocked by a creature, Skewer Slinger deals 1 damage to that creature.
|
||||||
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(
|
this.addAbility(new BlocksOrBlockedByCreatureSourceTriggeredAbility(
|
||||||
new DamageTargetEffect(1, true, "that creature")
|
new DamageTargetEffect(1).withTargetDescription("that creature")
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public final class SomberwaldVigilante extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// Whenever Somberwald Vigilante becomes blocked by a creature, Somberwald Vigilante deals 1 damage to that creature.
|
// Whenever Somberwald Vigilante becomes blocked by a creature, Somberwald Vigilante deals 1 damage to that creature.
|
||||||
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new DamageTargetEffect(1, true, "that creature"), false));
|
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new DamageTargetEffect(1).withTargetDescription("that creature"), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SomberwaldVigilante(final SomberwaldVigilante card) {
|
private SomberwaldVigilante(final SomberwaldVigilante card) {
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ class SpellshockTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
|
|
||||||
public SpellshockTriggeredAbility() {
|
public SpellshockTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(2, true, "that player"));
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(2).withTargetDescription("that player"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -76,4 +76,4 @@ class SpellshockTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever a player casts a spell, {this} deals 2 damage to that player.";
|
return "Whenever a player casts a spell, {this} deals 2 damage to that player.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,14 +39,11 @@ public final class SpikedPitTrap extends CardImpl {
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// 1-9 | Spiked Pit Trap deals 5 damage to that creature.
|
// 1-9 | Spiked Pit Trap deals 5 damage to that creature.
|
||||||
effect.addTableEntry(1, 9, new DamageTargetEffect(
|
effect.addTableEntry(1, 9, new DamageTargetEffect(5).withTargetDescription("that creature"));
|
||||||
5, true, "that creature"
|
|
||||||
));
|
|
||||||
|
|
||||||
// 10-20 | Spike Pit Trap deals 5 damage to that creature. Create a Treasure token.
|
// 10-20 | Spike Pit Trap deals 5 damage to that creature. Create a Treasure token.
|
||||||
effect.addTableEntry(10, 20, new DamageTargetEffect(
|
effect.addTableEntry(10, 20, new DamageTargetEffect(5).withTargetDescription("that creature"),
|
||||||
5, true, "that creature."
|
new CreateTokenEffect(new TreasureToken()));
|
||||||
), new CreateTokenEffect(new TreasureToken()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private SpikedPitTrap(final SpikedPitTrap card) {
|
private SpikedPitTrap(final SpikedPitTrap card) {
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ public final class StructuralCollapse extends CardImpl {
|
||||||
.setText("target player sacrifices an artifact"));
|
.setText("target player sacrifices an artifact"));
|
||||||
this.getSpellAbility().addEffect(new SacrificeEffect(StaticFilters.FILTER_LANDS, 1, "Target player")
|
this.getSpellAbility().addEffect(new SacrificeEffect(StaticFilters.FILTER_LANDS, 1, "Target player")
|
||||||
.setText("and a land of their choice"));
|
.setText("and a land of their choice"));
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(2, true, "that player"));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(2).withTargetDescription("that player"));
|
||||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.abilities.keyword.SplitSecondAbility;
|
import mage.abilities.keyword.SplitSecondAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
|
@ -9,6 +7,8 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.target.common.TargetAnyTarget;
|
import mage.target.common.TargetAnyTarget;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
|
|
@ -18,11 +18,11 @@ public final class SuddenShock extends CardImpl {
|
||||||
public SuddenShock(UUID ownerId, CardSetInfo setInfo) {
|
public SuddenShock(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}");
|
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}");
|
||||||
|
|
||||||
|
|
||||||
// Split second
|
// Split second
|
||||||
this.addAbility(new SplitSecondAbility());
|
this.addAbility(new SplitSecondAbility());
|
||||||
|
|
||||||
// Sudden Shock deals 2 damage to any target.
|
// Sudden Shock deals 2 damage to any target.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(2, true));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(2));
|
||||||
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ public final class SulfuricVortex extends CardImpl {
|
||||||
|
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, Sulfuric Vortex deals 2 damage to that player.
|
// At the beginning of each player's upkeep, Sulfuric Vortex deals 2 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(TargetController.EACH_PLAYER, new DamageTargetEffect(2, true, "that player"), false));
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(TargetController.EACH_PLAYER, new DamageTargetEffect(2).withTargetDescription("that player"), false));
|
||||||
|
|
||||||
// If a player would gain life, that player gains no life instead.
|
// If a player would gain life, that player gains no life instead.
|
||||||
this.addAbility(new SimpleStaticAbility(new SulfuricVortexReplacementEffect()));
|
this.addAbility(new SimpleStaticAbility(new SulfuricVortexReplacementEffect()));
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -18,7 +17,7 @@ public final class Swelter extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}");
|
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}");
|
||||||
|
|
||||||
// Swelter deals 2 damage to each of two target creatures.
|
// Swelter deals 2 damage to each of two target creatures.
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(2, true, "each of two target creatures"));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(2).withTargetDescription("each of two target creatures"));
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(2, 2));
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent(2, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -202,7 +202,7 @@ class TakklemaggotUpkeepAbility extends TriggeredAbilityImpl {
|
||||||
private final UUID playerId;
|
private final UUID playerId;
|
||||||
|
|
||||||
TakklemaggotUpkeepAbility(UUID playerId) {
|
TakklemaggotUpkeepAbility(UUID playerId) {
|
||||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player")
|
super(Zone.BATTLEFIELD, new DamageTargetEffect(1).withTargetDescription("that player")
|
||||||
.setTargetPointer(new FixedTarget(playerId)), false);
|
.setTargetPointer(new FixedTarget(playerId)), false);
|
||||||
this.playerId = playerId;
|
this.playerId = playerId;
|
||||||
setTriggerPhrase("At the beginning of that player's upkeep, ");
|
setTriggerPhrase("At the beginning of that player's upkeep, ");
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ public final class TitanHunter extends CardImpl {
|
||||||
// At the beginning of each player's end step, if no creatures died this turn, Titan Hunter deals 4 damage to that player.
|
// At the beginning of each player's end step, if no creatures died this turn, Titan Hunter deals 4 damage to that player.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
TargetController.EACH_PLAYER,
|
TargetController.EACH_PLAYER,
|
||||||
new DamageTargetEffect(4, true, "that player"),
|
new DamageTargetEffect(4).withTargetDescription("that player"),
|
||||||
false, condition
|
false, condition
|
||||||
).addHint(MorbidHint.instance));
|
).addHint(MorbidHint.instance));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ public final class TovolarsMagehunter extends CardImpl {
|
||||||
|
|
||||||
// Whenever an opponent casts a spell, Tovolar's Magehunter deals 2 damage to that player.
|
// Whenever an opponent casts a spell, Tovolar's Magehunter deals 2 damage to that player.
|
||||||
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
||||||
Zone.BATTLEFIELD, new DamageTargetEffect(2, true, "that player"),
|
Zone.BATTLEFIELD, new DamageTargetEffect(2).withTargetDescription("that player"),
|
||||||
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.PLAYER
|
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.PLAYER
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public final class UnderworldDreams extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{B}{B}{B}");
|
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{B}{B}{B}");
|
||||||
|
|
||||||
// Whenever an opponent draws a card, Underworld Dreams deals 1 damage to that player.
|
// Whenever an opponent draws a card, Underworld Dreams deals 1 damage to that player.
|
||||||
this.addAbility(new DrawCardOpponentTriggeredAbility(new DamageTargetEffect(1, true, "that player"), false, true));
|
this.addAbility(new DrawCardOpponentTriggeredAbility(new DamageTargetEffect(1).withTargetDescription("that player"), false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private UnderworldDreams(final UnderworldDreams card) {
|
private UnderworldDreams(final UnderworldDreams card) {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public final class UrborgStalker extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, if that player controls a nonblack, nonland permanent, Urborg Stalker deals 1 damage to that player.
|
// At the beginning of each player's upkeep, if that player controls a nonblack, nonland permanent, Urborg Stalker deals 1 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.EACH_PLAYER, new DamageTargetEffect(1, true, "that player"), false
|
TargetController.EACH_PLAYER, new DamageTargetEffect(1).withTargetDescription("that player"), false
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ public final class UrzasRage extends CardImpl {
|
||||||
|
|
||||||
// Urza's Rage deals 3 damage to any target. If Urza's Rage was kicked, instead it deals 10 damage to that creature or player and the damage can't be prevented.
|
// Urza's Rage deals 3 damage to any target. If Urza's Rage was kicked, instead it deals 10 damage to that creature or player and the damage can't be prevented.
|
||||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||||
new DamageTargetEffect(10, false), new DamageTargetEffect(3),
|
new DamageTargetEffect(10).withCantBePrevented(), new DamageTargetEffect(3),
|
||||||
KickedCondition.ONCE, "{this} deals 3 damage to any target. If this spell was kicked, " +
|
KickedCondition.ONCE, "{this} deals 3 damage to any target. If this spell was kicked, " +
|
||||||
"instead it deals 10 damage to that permanent or player and the damage can't be prevented."
|
"instead it deals 10 damage to that permanent or player and the damage can't be prevented."
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public final class VengefulTracker extends CardImpl {
|
||||||
|
|
||||||
// Whenever an opponent sacrifices an artifact, Vengeful Tracker deals 2 damage to them.
|
// Whenever an opponent sacrifices an artifact, Vengeful Tracker deals 2 damage to them.
|
||||||
this.addAbility(new SacrificePermanentTriggeredAbility(
|
this.addAbility(new SacrificePermanentTriggeredAbility(
|
||||||
Zone.BATTLEFIELD, new DamageTargetEffect(2, true, "them"),
|
Zone.BATTLEFIELD, new DamageTargetEffect(2).withTargetDescription("them"),
|
||||||
StaticFilters.FILTER_PERMANENT_ARTIFACT, TargetController.OPPONENT, SetTargetPointer.PLAYER, false
|
StaticFilters.FILTER_PERMANENT_ARTIFACT, TargetController.OPPONENT, SetTargetPointer.PLAYER, false
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,6 @@ import mage.constants.Outcome;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.Target;
|
|
||||||
import mage.util.CardUtil;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -21,63 +19,37 @@ import java.util.UUID;
|
||||||
public class DamageTargetEffect extends OneShotEffect {
|
public class DamageTargetEffect extends OneShotEffect {
|
||||||
|
|
||||||
private final DynamicValue amount;
|
private final DynamicValue amount;
|
||||||
private final boolean preventable;
|
private boolean preventable = true;
|
||||||
private String targetDescription;
|
|
||||||
private String sourceName = "{this}";
|
private String sourceName = "{this}";
|
||||||
|
|
||||||
public DamageTargetEffect(int amount) {
|
public DamageTargetEffect(int amount) {
|
||||||
this(StaticValue.get(amount), true);
|
this(StaticValue.get(amount));
|
||||||
}
|
}
|
||||||
|
|
||||||
public DamageTargetEffect(int amount, String whoDealDamageName) {
|
public DamageTargetEffect(int amount, String whoDealDamageName) {
|
||||||
this(StaticValue.get(amount), true);
|
this(amount);
|
||||||
this.sourceName = whoDealDamageName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DamageTargetEffect(int amount, boolean preventable) {
|
|
||||||
this(StaticValue.get(amount), preventable);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DamageTargetEffect(int amount, boolean preventable, String targetDescription) {
|
|
||||||
this(StaticValue.get(amount), preventable, targetDescription);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DamageTargetEffect(int amount, boolean preventable, String targetDescription, String whoDealDamageName) {
|
|
||||||
this(StaticValue.get(amount), preventable, targetDescription);
|
|
||||||
this.sourceName = whoDealDamageName;
|
this.sourceName = whoDealDamageName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DamageTargetEffect(DynamicValue amount) {
|
public DamageTargetEffect(DynamicValue amount) {
|
||||||
this(amount, true);
|
super(Outcome.Damage);
|
||||||
|
this.amount = amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DamageTargetEffect(DynamicValue amount, String whoDealDamageName) {
|
public DamageTargetEffect(DynamicValue amount, String whoDealDamageName) {
|
||||||
this(amount, true);
|
this(amount);
|
||||||
this.sourceName = whoDealDamageName;
|
this.sourceName = whoDealDamageName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DamageTargetEffect(DynamicValue amount, boolean preventable) {
|
|
||||||
this(amount, preventable, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
public DamageTargetEffect(DynamicValue amount, boolean preventable, String targetDescription) {
|
|
||||||
super(Outcome.Damage);
|
|
||||||
this.amount = amount;
|
|
||||||
this.preventable = preventable;
|
|
||||||
this.targetDescription = targetDescription;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected DamageTargetEffect(final DamageTargetEffect effect) {
|
protected DamageTargetEffect(final DamageTargetEffect effect) {
|
||||||
super(effect);
|
super(effect);
|
||||||
this.amount = effect.amount.copy();
|
this.amount = effect.amount.copy();
|
||||||
this.preventable = effect.preventable;
|
this.preventable = effect.preventable;
|
||||||
this.targetDescription = effect.targetDescription;
|
|
||||||
this.sourceName = effect.sourceName;
|
this.sourceName = effect.sourceName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public DamageTargetEffect withCantBePrevented() {
|
||||||
public DamageTargetEffect withTargetDescription(String targetDescription) {
|
this.preventable = false;
|
||||||
this.targetDescription = targetDescription;
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -117,39 +89,11 @@ public class DamageTargetEffect extends OneShotEffect {
|
||||||
sb.append(' ');
|
sb.append(' ');
|
||||||
}
|
}
|
||||||
sb.append("damage to ");
|
sb.append("damage to ");
|
||||||
if (!targetDescription.isEmpty()) {
|
String targetDescription = getTargetPointer().describeTargets(mode.getTargets(), "that target");
|
||||||
sb.append(targetDescription);
|
if (targetDescription.startsWith("up to") && !targetDescription.startsWith("up to one")) {
|
||||||
} else {
|
sb.append("each of ");
|
||||||
if (!mode.getTargets().isEmpty()) {
|
|
||||||
Target firstTarget = mode.getTargets().get(0);
|
|
||||||
String targetName = firstTarget.getTargetName();
|
|
||||||
if (targetName.contains("any")) {
|
|
||||||
sb.append(targetName);
|
|
||||||
} else {
|
|
||||||
if (firstTarget.getMinNumberOfTargets() == 0) {
|
|
||||||
int maxTargets = firstTarget.getMaxNumberOfTargets();
|
|
||||||
switch (maxTargets) {
|
|
||||||
case Integer.MAX_VALUE:
|
|
||||||
sb.append("any number of ");
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
sb.append("up to one ");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sb.append("each of up to ");
|
|
||||||
sb.append(CardUtil.numberToText(maxTargets));
|
|
||||||
sb.append(' ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!targetName.contains("target ")) {
|
|
||||||
sb.append("target ");
|
|
||||||
}
|
|
||||||
sb.append(targetName);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
sb.append("that target");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
sb.append(targetDescription);
|
||||||
if (!message.isEmpty()) {
|
if (!message.isEmpty()) {
|
||||||
if (message.equals("1")) {
|
if (message.equals("1")) {
|
||||||
sb.append(" equal to the number of ");
|
sb.append(" equal to the number of ");
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ public final class InzervaMasterOfInsightsEmblem extends Emblem {
|
||||||
));
|
));
|
||||||
// Whenever an opponent draws a card, this emblem deals 1 damage to them
|
// Whenever an opponent draws a card, this emblem deals 1 damage to them
|
||||||
this.getAbilities().add(new DrawCardOpponentTriggeredAbility(
|
this.getAbilities().add(new DrawCardOpponentTriggeredAbility(
|
||||||
Zone.COMMAND, new DamageTargetEffect(1, true, "them")
|
Zone.COMMAND, new DamageTargetEffect(1)
|
||||||
.setText("this emblem deals 1 damage to them"), false, true
|
.setText("this emblem deals 1 damage to them"), false, true
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,9 @@ public class EachTargetPointer extends TargetPointerImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String describeTargets(Targets targets, String defaultDescription) {
|
public String describeTargets(Targets targets, String defaultDescription) {
|
||||||
if (targetDescription != null) return targetDescription;
|
if (targetDescription != null) {
|
||||||
|
return targetDescription;
|
||||||
|
}
|
||||||
if (targets.isEmpty()) {
|
if (targets.isEmpty()) {
|
||||||
return defaultDescription;
|
return defaultDescription;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,9 @@ public abstract class NthTargetPointer extends TargetPointerImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String describeTargets(Targets targets, String defaultDescription) {
|
public String describeTargets(Targets targets, String defaultDescription) {
|
||||||
if (targetDescription != null) return targetDescription;
|
if (targetDescription != null) {
|
||||||
|
return targetDescription;
|
||||||
|
}
|
||||||
if (targets.size() <= this.targetIndex) {
|
if (targets.size() <= this.targetIndex) {
|
||||||
// TODO: need research, is it used for non setup targets ?!
|
// TODO: need research, is it used for non setup targets ?!
|
||||||
// Typical usage example: trigger sets fixed target pointer
|
// Typical usage example: trigger sets fixed target pointer
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue