mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
text fixes
This commit is contained in:
parent
f74dfcb8b6
commit
b0fdb4ef5a
18 changed files with 77 additions and 178 deletions
|
@ -60,7 +60,7 @@ class BalduvianWarlordUnblockEffect extends OneShotEffect {
|
||||||
|
|
||||||
BalduvianWarlordUnblockEffect() {
|
BalduvianWarlordUnblockEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = " Remove target blocking creature from combat. Creatures it was blocking that hadn't become blocked by another creature this combat become unblocked, then it blocks an attacking creature of your choice";
|
this.staticText = "Remove target blocking creature from combat. Creatures it was blocking that hadn't become blocked by another creature this combat become unblocked, then it blocks an attacking creature of your choice";
|
||||||
}
|
}
|
||||||
|
|
||||||
private BalduvianWarlordUnblockEffect(final BalduvianWarlordUnblockEffect effect) {
|
private BalduvianWarlordUnblockEffect(final BalduvianWarlordUnblockEffect effect) {
|
||||||
|
|
|
@ -1,16 +1,11 @@
|
||||||
|
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
|
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.costs.Cost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.Effect;
|
|
||||||
import mage.abilities.effects.Effects;
|
|
||||||
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
|
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
|
||||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||||
import mage.abilities.effects.common.turn.SkipNextTurnSourceEffect;
|
import mage.abilities.effects.common.turn.SkipNextTurnSourceEffect;
|
||||||
|
@ -18,14 +13,15 @@ import mage.abilities.mana.BlueManaAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.EffectType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.game.permanent.token.custom.CreatureToken;
|
import mage.game.permanent.token.custom.CreatureToken;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author emerald000
|
* @author emerald000
|
||||||
*/
|
*/
|
||||||
|
@ -38,19 +34,21 @@ public final class ChronatogTotem extends CardImpl {
|
||||||
this.addAbility(new BlueManaAbility());
|
this.addAbility(new BlueManaAbility());
|
||||||
|
|
||||||
// {1}{U}: Chronatog Totem becomes a 1/2 blue Atog artifact creature until end of turn.
|
// {1}{U}: Chronatog Totem becomes a 1/2 blue Atog artifact creature until end of turn.
|
||||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(
|
this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect(
|
||||||
new CreatureToken(1, 2, "1/2 blue Atog artifact creature")
|
new CreatureToken(1, 2, "1/2 blue Atog artifact creature")
|
||||||
.withColor("U")
|
.withColor("U")
|
||||||
.withSubType(SubType.ATOG)
|
.withSubType(SubType.ATOG)
|
||||||
.withType(CardType.ARTIFACT),
|
.withType(CardType.ARTIFACT),
|
||||||
"", Duration.EndOfTurn), new ManaCostsImpl<>("{1}{U}")));
|
"", Duration.EndOfTurn
|
||||||
|
), new ManaCostsImpl<>("{1}{U}")));
|
||||||
|
|
||||||
// {0}: Chronatog Totem gets +3/+3 until end of turn. You skip your next turn. Activate this ability only once each turn and only if Chronatog Totem is a creature.
|
// {0}: Chronatog Totem gets +3/+3 until end of turn. You skip your next turn. Activate this ability only once each turn and only if Chronatog Totem is a creature.
|
||||||
Ability ability = new ChronatogTotemAbility(
|
Ability ability = new LimitedTimesPerTurnActivatedAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new BoostSourceEffect(3, 3, Duration.EndOfTurn),
|
new BoostSourceEffect(3, 3, Duration.EndOfTurn),
|
||||||
new ManaCostsImpl<>("{0}"),
|
new GenericManaCost(0), 1,
|
||||||
new ChronatogTotemCondition());
|
ChronatogTotemCondition.instance
|
||||||
|
);
|
||||||
ability.addEffect(new SkipNextTurnSourceEffect());
|
ability.addEffect(new SkipNextTurnSourceEffect());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
@ -65,42 +63,8 @@ public final class ChronatogTotem extends CardImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ChronatogTotemAbility extends LimitedTimesPerTurnActivatedAbility {
|
enum ChronatogTotemCondition implements Condition {
|
||||||
|
instance;
|
||||||
private static final Effects emptyEffects = new Effects();
|
|
||||||
|
|
||||||
public ChronatogTotemAbility(Zone zone, Effect effect, Cost cost, Condition condition) {
|
|
||||||
super(zone, effect, cost);
|
|
||||||
this.condition = condition;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChronatogTotemAbility(ChronatogTotemAbility ability) {
|
|
||||||
super(ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Effects getEffects(Game game, EffectType effectType) {
|
|
||||||
if (!condition.apply(game, this)) {
|
|
||||||
return emptyEffects;
|
|
||||||
}
|
|
||||||
return super.getEffects(game, effectType);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ChronatogTotemAbility copy() {
|
|
||||||
return new ChronatogTotemAbility(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRule() {
|
|
||||||
StringBuilder sb = new StringBuilder(super.getRule());
|
|
||||||
sb.deleteCharAt(sb.length() - 1); // remove last '.'
|
|
||||||
sb.append(" and only if ").append(condition.toString()).append('.');
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ChronatogTotemCondition implements Condition {
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
||||||
|
@ -15,16 +13,12 @@ import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.abilities.effects.common.continuous.SetPowerSourceEffect;
|
import mage.abilities.effects.common.continuous.SetPowerSourceEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.AbilityWord;
|
import mage.constants.*;
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Duration;
|
|
||||||
import mage.constants.SubLayer;
|
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class CraterElemental extends CardImpl {
|
public final class CraterElemental extends CardImpl {
|
||||||
|
@ -36,7 +30,9 @@ public final class CraterElemental extends CardImpl {
|
||||||
this.toughness = new MageInt(6);
|
this.toughness = new MageInt(6);
|
||||||
|
|
||||||
// {R}, {T}, Sacrifice Crater Elemental: Crater Elemental deals 4 damage to target creature.
|
// {R}, {T}, Sacrifice Crater Elemental: Crater Elemental deals 4 damage to target creature.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(4), new ManaCostsImpl("{R}"));
|
Ability ability = new SimpleActivatedAbility(
|
||||||
|
new DamageTargetEffect(4, "it"), new ManaCostsImpl<>("{R}")
|
||||||
|
);
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
|
@ -45,9 +41,11 @@ public final class CraterElemental extends CardImpl {
|
||||||
// <i>Formidable</i> — {2}{R}: Crater Elemental has base power 8 until end of turn. Activate this ability only if creatures you control have total power 8 or greater.
|
// <i>Formidable</i> — {2}{R}: Crater Elemental has base power 8 until end of turn. Activate this ability only if creatures you control have total power 8 or greater.
|
||||||
ability = new ActivateIfConditionActivatedAbility(
|
ability = new ActivateIfConditionActivatedAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new SetPowerSourceEffect(StaticValue.get(8), Duration.EndOfTurn, SubLayer.SetPT_7b),
|
new SetPowerSourceEffect(StaticValue.get(8), Duration.EndOfTurn, SubLayer.SetPT_7b)
|
||||||
new ManaCostsImpl("{2}{R}"),
|
.setText("{this} has base power 8 until end of turn"),
|
||||||
FormidableCondition.instance);
|
new ManaCostsImpl<>("{2}{R}"),
|
||||||
|
FormidableCondition.instance
|
||||||
|
);
|
||||||
ability.setAbilityWord(AbilityWord.FORMIDABLE);
|
ability.setAbilityWord(AbilityWord.FORMIDABLE);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ import mage.target.common.TargetControlledPermanent;
|
||||||
*/
|
*/
|
||||||
public final class DeathlessBehemoth extends CardImpl {
|
public final class DeathlessBehemoth extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("two Eldrazi Scions");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Eldrazi Scions");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(Predicates.and(
|
filter.add(Predicates.and(
|
||||||
|
|
|
@ -38,7 +38,9 @@ public final class EnergyVortex extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of your upkeep, remove all vortex counters from Energy Vortex.
|
// At the beginning of your upkeep, remove all vortex counters from Energy Vortex.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
new RemoveAllCountersSourceEffect(CounterType.VORTEX), TargetController.YOU, false
|
new RemoveAllCountersSourceEffect(CounterType.VORTEX)
|
||||||
|
.setText("remove all vortex counters from {this}"),
|
||||||
|
TargetController.YOU, false
|
||||||
));
|
));
|
||||||
|
|
||||||
// At the beginning of the chosen player's upkeep, Energy Vortex deals 3 damage to that player unless they pay {1} for each vortex counter on Energy Vortex.
|
// At the beginning of the chosen player's upkeep, Energy Vortex deals 3 damage to that player unless they pay {1} for each vortex counter on Energy Vortex.
|
||||||
|
|
|
@ -29,7 +29,7 @@ public final class GoblinFirestarter extends CardImpl {
|
||||||
|
|
||||||
// Sacrifice Goblin Firestarter: Goblin Firestarter deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared.
|
// Sacrifice Goblin Firestarter: Goblin Firestarter deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared.
|
||||||
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new DamageTargetEffect(1), new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
|
new DamageTargetEffect(1,"it"), new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
|
||||||
ability.addTarget(new TargetAnyTarget());
|
ability.addTarget(new TargetAnyTarget());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,6 +149,6 @@ class HakimLoreweaverCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "only during your upkeep and only if {this} isn't enchanted";
|
return "during your upkeep and only if {this} isn't enchanted";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,15 +13,13 @@ import mage.abilities.hint.common.MetalcraftHint;
|
||||||
import mage.abilities.mana.ColorlessManaAbility;
|
import mage.abilities.mana.ColorlessManaAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.AbilityWord;
|
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterArtifactPermanent;
|
import mage.filter.common.FilterArtifactPermanent;
|
||||||
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.common.TargetCardInLibrary;
|
import mage.target.common.TargetCardInLibrary;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
@ -31,12 +29,6 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class InventorsFair extends CardImpl {
|
public final class InventorsFair extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter = new FilterCard("artifact");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(CardType.ARTIFACT.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public InventorsFair(UUID ownerId, CardSetInfo setInfo) {
|
public InventorsFair(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||||
addSuperType(SuperType.LEGENDARY);
|
addSuperType(SuperType.LEGENDARY);
|
||||||
|
@ -49,7 +41,7 @@ public final class InventorsFair extends CardImpl {
|
||||||
|
|
||||||
// {4}, {T}, Sacrifice Inventors' Fair: Search your library for an artifact card, reveal it, put it into your hand, then shuffle your library.
|
// {4}, {T}, Sacrifice Inventors' Fair: Search your library for an artifact card, reveal it, put it into your hand, then shuffle your library.
|
||||||
// Activate this ability only if you control threeor more artifacts.
|
// Activate this ability only if you control threeor more artifacts.
|
||||||
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInHandEffect(new TargetCardInLibrary(1, filter), true),
|
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_ARTIFACT), true),
|
||||||
new GenericManaCost(4), MetalcraftCondition.instance);
|
new GenericManaCost(4), MetalcraftCondition.instance);
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
|
|
|
@ -71,7 +71,7 @@ class LiciaSanguineTribuneCostReductionEffect extends CostModificationEffectImpl
|
||||||
|
|
||||||
LiciaSanguineTribuneCostReductionEffect() {
|
LiciaSanguineTribuneCostReductionEffect() {
|
||||||
super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.REDUCE_COST);
|
super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.REDUCE_COST);
|
||||||
staticText = "this spell costs {1} less to cast for each 1 life you have gained this turn.";
|
staticText = "this spell costs {1} less to cast for each 1 life you gained this turn.";
|
||||||
}
|
}
|
||||||
|
|
||||||
LiciaSanguineTribuneCostReductionEffect(LiciaSanguineTribuneCostReductionEffect effect) {
|
LiciaSanguineTribuneCostReductionEffect(LiciaSanguineTribuneCostReductionEffect effect) {
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
|
|
||||||
package mage.cards.l;
|
package mage.cards.l;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.costs.Cost;
|
import mage.abilities.condition.common.SourceHasCounterCondition;
|
||||||
import mage.abilities.costs.CostImpl;
|
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||||
import mage.abilities.effects.common.CreateTokenEffect;
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
@ -15,32 +13,40 @@ import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.TargetController;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
|
||||||
import mage.game.events.GameEvent.EventType;
|
|
||||||
import mage.game.permanent.token.AngelToken;
|
import mage.game.permanent.token.AngelToken;
|
||||||
import mage.watchers.common.PlayerLostLifeWatcher;
|
import mage.watchers.common.PlayerLostLifeWatcher;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author jeffwadsworth
|
* @author jeffwadsworth
|
||||||
*/
|
*/
|
||||||
public final class LuminarchAscension extends CardImpl {
|
public final class LuminarchAscension extends CardImpl {
|
||||||
|
|
||||||
private static final String rule = "At the beginning of each opponent's end step, if you didn't lose life this turn, you may put a quest counter on {this}. (Damage causes loss of life.)";
|
private static final String rule = "At the beginning of each opponent's end step, " +
|
||||||
|
"if you didn't lose life this turn, you may put a quest counter on {this}.";
|
||||||
|
private static final Condition condition = new SourceHasCounterCondition(CounterType.QUEST, 4);
|
||||||
|
|
||||||
public LuminarchAscension(UUID ownerId, CardSetInfo setInfo) {
|
public LuminarchAscension(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
|
||||||
|
|
||||||
// At the beginning of each opponent's end step, if you didn't lose life this turn, you may put a quest counter on Luminarch Ascension.
|
// At the beginning of each opponent's end step, if you didn't lose life this turn, you may put a quest counter on Luminarch Ascension.
|
||||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new LuminarchAscensionTriggeredAbility(), YouLostNoLifeThisTurnCondition.instance, rule));
|
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||||
|
new BeginningOfEndStepTriggeredAbility(
|
||||||
|
new AddCountersSourceEffect(CounterType.QUEST.createInstance()),
|
||||||
|
TargetController.OPPONENT, true
|
||||||
|
), LuminarchAscensionCondition.instance, rule
|
||||||
|
));
|
||||||
|
|
||||||
// {1}{W}: Create a 4/4 white Angel creature token with flying. Activate this ability only if Luminarch Ascension has four or more quest counters on it.
|
// {1}{W}: Create a 4/4 white Angel creature token with flying. Activate this ability only if Luminarch Ascension has four or more quest counters on it.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new AngelToken()), new ManaCostsImpl("{1}{W}"));
|
this.addAbility(new ActivateIfConditionActivatedAbility(
|
||||||
ability.addCost(new SourceHasCountersCost(4, CounterType.QUEST));
|
Zone.BATTLEFIELD, new CreateTokenEffect(new AngelToken()),
|
||||||
this.addAbility(ability);
|
new ManaCostsImpl<>("{1}{W}"), condition
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private LuminarchAscension(final LuminarchAscension card) {
|
private LuminarchAscension(final LuminarchAscension card) {
|
||||||
|
@ -53,68 +59,7 @@ public final class LuminarchAscension extends CardImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class LuminarchAscensionTriggeredAbility extends TriggeredAbilityImpl {
|
enum LuminarchAscensionCondition implements Condition {
|
||||||
|
|
||||||
public LuminarchAscensionTriggeredAbility() {
|
|
||||||
super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LuminarchAscensionTriggeredAbility(LuminarchAscensionTriggeredAbility ability) {
|
|
||||||
super(ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LuminarchAscensionTriggeredAbility copy() {
|
|
||||||
return new LuminarchAscensionTriggeredAbility(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checkEventType(GameEvent event, Game game) {
|
|
||||||
return event.getType() == GameEvent.EventType.END_TURN_STEP_PRE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checkTrigger(GameEvent event, Game game) {
|
|
||||||
return game.getOpponents(controllerId).contains(event.getPlayerId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class SourceHasCountersCost extends CostImpl {
|
|
||||||
|
|
||||||
private final int counters;
|
|
||||||
private final CounterType counterType;
|
|
||||||
|
|
||||||
public SourceHasCountersCost(int counters, CounterType counterType) {
|
|
||||||
this.counters = counters;
|
|
||||||
this.counterType = counterType;
|
|
||||||
this.text = "Activate only if Luminarch Ascension has 4 or more quest counters on it";
|
|
||||||
}
|
|
||||||
|
|
||||||
public SourceHasCountersCost(final SourceHasCountersCost cost) {
|
|
||||||
super(cost);
|
|
||||||
this.counters = cost.counters;
|
|
||||||
this.counterType = cost.counterType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPay(Ability ability, Ability source, UUID controllerId, Game game) {
|
|
||||||
return (game.getPermanent(source.getSourceId()).getCounters(game).getCount(counterType) >= counters);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean pay(Ability ability, Game game, Ability source, UUID controllerId, boolean noMana, Cost costToPay) {
|
|
||||||
this.paid = true;
|
|
||||||
return paid;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SourceHasCountersCost copy() {
|
|
||||||
return new SourceHasCountersCost(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum YouLostNoLifeThisTurnCondition implements Condition {
|
|
||||||
|
|
||||||
instance;
|
instance;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -62,8 +62,7 @@ public final class Marjhan extends CardImpl {
|
||||||
|
|
||||||
// {U}{U}: Marjhan gets -1/-0 until end of turn and deals 1 damage to target attacking creature without flying.
|
// {U}{U}: Marjhan gets -1/-0 until end of turn and deals 1 damage to target attacking creature without flying.
|
||||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(-1, 0, Duration.EndOfTurn), new ManaCostsImpl("{U}{U}"));
|
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(-1, 0, Duration.EndOfTurn), new ManaCostsImpl("{U}{U}"));
|
||||||
Effect effect = new DamageTargetEffect(1);
|
ability.addEffect(new DamageTargetEffect(1, "and"));
|
||||||
ability.addEffect(effect);
|
|
||||||
ability.addTarget(new TargetCreaturePermanent(filter));
|
ability.addTarget(new TargetCreaturePermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ public final class TransmogrifyingWand extends CardImpl {
|
||||||
// Transmogrifying Wand enters the battlefield with three charge counters on it.
|
// Transmogrifying Wand enters the battlefield with three charge counters on it.
|
||||||
this.addAbility(new EntersBattlefieldAbility(
|
this.addAbility(new EntersBattlefieldAbility(
|
||||||
new AddCountersSourceEffect(CounterType.CHARGE.createInstance(3)),
|
new AddCountersSourceEffect(CounterType.CHARGE.createInstance(3)),
|
||||||
"{this} enters the battlefield with three charge counters on it"
|
"with three charge counters on it"
|
||||||
));
|
));
|
||||||
|
|
||||||
// {1}, {T}, Remove a charge counter from Transmogrifying Wand: Destroy target creature. Its controller creates a 2/4 white Ox creature token. Activate this ability only any time you could cast a sorcery.
|
// {1}, {T}, Remove a charge counter from Transmogrifying Wand: Destroy target creature. Its controller creates a 2/4 white Ox creature token. Activate this ability only any time you could cast a sorcery.
|
||||||
|
|
|
@ -46,7 +46,7 @@ public final class VentifactBottle extends CardImpl {
|
||||||
new SourceHasCounterCondition(CounterType.CHARGE, 1, Integer.MAX_VALUE),
|
new SourceHasCounterCondition(CounterType.CHARGE, 1, Integer.MAX_VALUE),
|
||||||
"At the beginning of your precombat main phase, "
|
"At the beginning of your precombat main phase, "
|
||||||
+ "if {this} has a charge counter on it, tap it and remove all charge counters from it. "
|
+ "if {this} has a charge counter on it, tap it and remove all charge counters from it. "
|
||||||
+ "Add {C} for each charge counter removed this way"));
|
+ "Add {C} for each charge counter removed this way."));
|
||||||
}
|
}
|
||||||
|
|
||||||
private VentifactBottle(final VentifactBottle card) {
|
private VentifactBottle(final VentifactBottle card) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledPermanent;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
@ -51,7 +51,8 @@ public final class VishKalBloodArbiter extends CardImpl {
|
||||||
this.addAbility(new SimpleActivatedAbility(
|
this.addAbility(new SimpleActivatedAbility(
|
||||||
new AddCountersSourceEffect(
|
new AddCountersSourceEffect(
|
||||||
CounterType.P1P1.createInstance(), SacrificeCostCreaturesPower.instance, true
|
CounterType.P1P1.createInstance(), SacrificeCostCreaturesPower.instance, true
|
||||||
), new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))
|
).setText("put X +1/+1 counters on {this}, where X is the sacrificed creature's power"),
|
||||||
|
new SacrificeTargetCost(new TargetControlledPermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))
|
||||||
));
|
));
|
||||||
|
|
||||||
// Remove all +1/+1 counters from Vish Kal: Target creature gets -1/-1 until end of turn for each +1/+1 counter removed this way.
|
// Remove all +1/+1 counters from Vish Kal: Target creature gets -1/-1 until end of turn for each +1/+1 counter removed this way.
|
||||||
|
@ -59,7 +60,7 @@ public final class VishKalBloodArbiter extends CardImpl {
|
||||||
VishKalBloodArbiterDynamicValue.instance,
|
VishKalBloodArbiterDynamicValue.instance,
|
||||||
VishKalBloodArbiterDynamicValue.instance,
|
VishKalBloodArbiterDynamicValue.instance,
|
||||||
Duration.EndOfTurn, true
|
Duration.EndOfTurn, true
|
||||||
), new RemoveAllCountersSourceCost(CounterType.P1P1));
|
).setText("target creature gets -1/-1 until end of turn for each +1/+1 counter removed this way"), new RemoveAllCountersSourceCost(CounterType.P1P1));
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,7 @@ import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.TargetController;
|
import mage.constants.TargetController;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterCard;
|
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.TargetPlayer;
|
import mage.target.TargetPlayer;
|
||||||
import mage.target.common.TargetCardInHand;
|
import mage.target.common.TargetCardInHand;
|
||||||
|
@ -45,10 +43,11 @@ public final class VolrathsDungeon extends CardImpl {
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Discard a card: Target player puts a card from their hand on top of their library. Activate this ability only any time you could cast a sorcery.
|
// Discard a card: Target player puts a card from their hand on top of their library. Activate this ability only any time you could cast a sorcery.
|
||||||
FilterCard filter = new FilterCard("a card for payment");
|
ability = new ActivateAsSorceryActivatedAbility(
|
||||||
Ability ability2 = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new VolrathsDungeonEffect(), new DiscardCardCost(filter));
|
Zone.BATTLEFIELD, new VolrathsDungeonEffect(), new DiscardCardCost()
|
||||||
ability2.addTarget(new TargetPlayer());
|
);
|
||||||
this.addAbility(ability2);
|
ability.addTarget(new TargetPlayer());
|
||||||
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
private VolrathsDungeon(final VolrathsDungeon card) {
|
private VolrathsDungeon(final VolrathsDungeon card) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class WirewoodSymbiote extends CardImpl {
|
public final class WirewoodSymbiote extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Elf");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("an Elf");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(SubType.ELF.getPredicate());
|
filter.add(SubType.ELF.getPredicate());
|
||||||
|
|
|
@ -7,9 +7,9 @@ import mage.cards.Card;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author nantuko
|
* @author nantuko
|
||||||
*/
|
*/
|
||||||
public class SourceHasCounterCondition implements Condition {
|
public class SourceHasCounterCondition implements Condition {
|
||||||
|
@ -68,14 +68,13 @@ public class SourceHasCounterCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
if (from != -1) { //range compare
|
if (from != -1) {
|
||||||
if (to == Integer.MAX_VALUE) {
|
if (to == Integer.MAX_VALUE) {
|
||||||
return "{this} has equal to or more than " + from + " " + this.counterType.toString() + " counters";
|
return "{this} has equal to or more than " + from + " " + this.counterType.toString() + " counters";
|
||||||
}
|
}
|
||||||
return "{this} has between " + from + " and " + to + " " + this.counterType.toString() + " counters";
|
return "{this} has between " + from + " and " + to + " " + this.counterType.toString() + " counters";
|
||||||
} else // single compare (lte)
|
} else {
|
||||||
{
|
return "{this} has " + CardUtil.numberToText(amount) + " or more " + this.counterType.toString() + " counters on it";
|
||||||
return "{this} has equal or more than " + amount + " " + this.counterType.toString() + " counters";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package mage.abilities.effects.common;
|
||||||
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.Mode;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.cards.Cards;
|
import mage.cards.Cards;
|
||||||
import mage.cards.CardsImpl;
|
import mage.cards.CardsImpl;
|
||||||
|
@ -17,8 +18,6 @@ import mage.target.common.TargetCardInHand;
|
||||||
import mage.target.common.TargetCardInYourGraveyard;
|
import mage.target.common.TargetCardInYourGraveyard;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author BetaSteward_at_googlemail.com
|
* @author BetaSteward_at_googlemail.com
|
||||||
*/
|
*/
|
||||||
|
@ -43,7 +42,6 @@ public class ExileFromZoneTargetEffect extends OneShotEffect {
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
this.withSource = withSource;
|
this.withSource = withSource;
|
||||||
setText();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExileFromZoneTargetEffect(final ExileFromZoneTargetEffect effect) {
|
public ExileFromZoneTargetEffect(final ExileFromZoneTargetEffect effect) {
|
||||||
|
@ -87,8 +85,10 @@ public class ExileFromZoneTargetEffect extends OneShotEffect {
|
||||||
return new ExileFromZoneTargetEffect(this);
|
return new ExileFromZoneTargetEffect(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setText() {
|
@Override
|
||||||
staticText = "target player exiles " + CardUtil.numberToText(amount, "a")
|
public String getText(Mode mode) {
|
||||||
+ ' ' + filter.getMessage() + " from their " + zone.toString().toLowerCase(Locale.ENGLISH);
|
return "target " + mode.getTargets().get(0).getTargetName() + " exiles "
|
||||||
|
+ CardUtil.numberToText(amount, "a") + ' ' + filter.getMessage()
|
||||||
|
+ " from their " + zone.toString().toLowerCase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue