mirror of
https://github.com/magefree/mage.git
synced 2025-12-27 05:52:06 -08:00
even more text fixes/updates
This commit is contained in:
parent
410144eb52
commit
af89fd80ee
21 changed files with 45 additions and 82 deletions
|
|
@ -48,7 +48,7 @@ public final class BespokeBattlewagon extends CardImpl {
|
|||
// Pay {E}{E}{E}{E}: Bespoke Battlewagon becomes an artifact creature until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(new AddCardTypeSourceEffect(
|
||||
Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE
|
||||
), new PayEnergyCost(4)));
|
||||
).setText("{this} becomes an artifact creature until end of turn"), new PayEnergyCost(4)));
|
||||
|
||||
// Crew 4
|
||||
this.addAbility(new CrewAbility(4));
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ class CodieVociferousCodexDelayedTriggeredAbility extends DelayedTriggeredAbilit
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you cast your next spell this turn, exile cards from the top of your library "
|
||||
return "When you next cast a spell this turn, exile cards from the top of your library "
|
||||
+ "until you exile an instant or sorcery card with lesser mana value. Until end of turn, "
|
||||
+ "you may cast that card without paying its mana cost. Put each other card exiled this way "
|
||||
+ "on the bottom of your library in a random order.";
|
||||
|
|
|
|||
|
|
@ -13,7 +13,9 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -22,6 +24,16 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class Dreadmobile extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("another artifact or creature");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
filter.add(Predicates.or(
|
||||
CardType.ARTIFACT.getPredicate(),
|
||||
CardType.CREATURE.getPredicate()
|
||||
));
|
||||
}
|
||||
|
||||
public Dreadmobile(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{B}");
|
||||
|
||||
|
|
@ -36,7 +48,7 @@ public final class Dreadmobile extends CardImpl {
|
|||
Ability ability = new SimpleActivatedAbility(
|
||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new GenericManaCost(1)
|
||||
);
|
||||
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE_OR_ARTIFACT));
|
||||
ability.addCost(new SacrificeTargetCost(filter));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Crew 1
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public final class FetidGargantua extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// {2}{B}: Adapt 2.
|
||||
this.addAbility(new AdaptAbility(1, "{2}{B}"));
|
||||
this.addAbility(new AdaptAbility(2, "{2}{B}"));
|
||||
|
||||
// Whenever one or more +1/+1 counters are put on Fetid Gargantua, you may draw two cards. If you do, you lose 2 life.
|
||||
Ability ability = new OneOrMoreCountersAddedTriggeredAbility(new DrawCardSourceControllerEffect(2), true);
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ class FickleEfreetChangeControlEffect extends OneShotEffect {
|
|||
|
||||
FickleEfreetChangeControlEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "flip a coin at end of combat. If you lose the flip, choose one of your opponents. That player gains control of {this}";
|
||||
this.staticText = "flip a coin at end of combat. If you lose the flip, an opponent gains control of {this}";
|
||||
}
|
||||
|
||||
private FickleEfreetChangeControlEffect(final FickleEfreetChangeControlEffect effect) {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class GhostfireSlice extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("a multicolored permanent");
|
||||
private static final FilterPermanent filter = new FilterPermanent("an opponent controls a multicolored permanent");
|
||||
|
||||
static {
|
||||
filter.add(MulticoloredPredicate.instance);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,8 @@ public final class HopeEnderCoatl extends CardImpl {
|
|||
this.addAbility(FlashAbility.getInstance());
|
||||
|
||||
// When you cast this spell, counter target spell an opponent controls unless they pay {1}.
|
||||
Ability ability = new CastSourceTriggeredAbility(new CounterUnlessPaysEffect(new GenericManaCost(1)));
|
||||
Ability ability = new CastSourceTriggeredAbility(new CounterUnlessPaysEffect(new GenericManaCost(1))
|
||||
.setText("counter target spell an opponent controls unless they pay {1}"));
|
||||
ability.addTarget(new TargetSpell(filter));
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,13 @@
|
|||
package mage.cards.h;
|
||||
|
||||
import mage.abilities.DelayedTriggeredAbility;
|
||||
import mage.abilities.common.delayed.CopyNextSpellDelayedTriggeredAbility;
|
||||
import mage.abilities.condition.common.RaidCondition;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CopyTargetStackObjectEffect;
|
||||
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
|
||||
import mage.abilities.hint.common.RaidHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.watchers.common.PlayerAttackedWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -29,15 +22,13 @@ public final class HowlOfTheHorde extends CardImpl {
|
|||
|
||||
|
||||
// When you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy.
|
||||
Effect effect = new CreateDelayedTriggeredAbilityEffect(new HowlOfTheHordeDelayedTriggeredAbility());
|
||||
effect.setText("When you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy.");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new CopyNextSpellDelayedTriggeredAbility()));
|
||||
|
||||
// <i>Raid</i> — If you attacked with a creature this turn, when you cast your next instant or sorcery spell this turn, copy that spell an additional time. You may choose new targets for the copy.
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||
new CreateDelayedTriggeredAbilityEffect(new HowlOfTheHordeDelayedTriggeredAbility()),
|
||||
new CreateDelayedTriggeredAbilityEffect(new CopyNextSpellDelayedTriggeredAbility()),
|
||||
RaidCondition.instance,
|
||||
"<br><br><i>Raid</i> — If you attacked this turn, when you cast your next instant or sorcery spell this turn, copy that spell an additional time. You may choose new targets for the copy.")
|
||||
"<br><br><i>Raid</i> — If you attacked this turn, when you next cast an instant or sorcery spell this turn, copy that spell an additional time. You may choose new targets for the copy.")
|
||||
);
|
||||
this.getSpellAbility().addWatcher(new PlayerAttackedWatcher());
|
||||
this.getSpellAbility().addHint(RaidHint.instance);
|
||||
|
|
@ -52,43 +43,3 @@ public final class HowlOfTheHorde extends CardImpl {
|
|||
return new HowlOfTheHorde(this);
|
||||
}
|
||||
}
|
||||
|
||||
class HowlOfTheHordeDelayedTriggeredAbility extends DelayedTriggeredAbility {
|
||||
|
||||
HowlOfTheHordeDelayedTriggeredAbility() {
|
||||
super(new CopyTargetStackObjectEffect(true), Duration.EndOfTurn);
|
||||
}
|
||||
|
||||
private HowlOfTheHordeDelayedTriggeredAbility(final HowlOfTheHordeDelayedTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HowlOfTheHordeDelayedTriggeredAbility copy() {
|
||||
return new HowlOfTheHordeDelayedTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.SPELL_CAST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (event.getPlayerId().equals(this.getControllerId())) {
|
||||
Spell spell = game.getStack().getSpell(event.getTargetId());
|
||||
if (spell != null && spell.isInstantOrSorcery(game)) {
|
||||
for (Effect effect : this.getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getTargetId()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ class KumanoFacesKakkazanDamageEffect extends OneShotEffect {
|
|||
|
||||
class KumanoFacesKakkazanTriggeredAbility extends DelayedTriggeredAbility {
|
||||
|
||||
public KumanoFacesKakkazanTriggeredAbility() {
|
||||
KumanoFacesKakkazanTriggeredAbility() {
|
||||
super(null, Duration.EndOfTurn);
|
||||
}
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ class KumanoFacesKakkazanTriggeredAbility extends DelayedTriggeredAbility {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you cast your next creature spell this turn, that creature enters the battlefield with an additional +1/+1 counter on it.";
|
||||
return "When you next cast a creature spell this turn, that creature enters the battlefield with an additional +1/+1 counter on it.";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -140,7 +140,7 @@ class KumanoFacesKakkazanCounterEffect extends ReplacementEffectImpl {
|
|||
|
||||
private final UUID spellCastId;
|
||||
|
||||
public KumanoFacesKakkazanCounterEffect(UUID spellCastId) {
|
||||
KumanoFacesKakkazanCounterEffect(UUID spellCastId) {
|
||||
super(Duration.EndOfTurn, Outcome.BoostCreature);
|
||||
this.spellCastId = spellCastId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ public final class LocalizedDestruction extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new LocalizedDestructionEffect());
|
||||
|
||||
// Destroy all creatures.
|
||||
this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES));
|
||||
this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES).concatBy("<br>"));
|
||||
}
|
||||
|
||||
private LocalizedDestruction(final LocalizedDestruction card) {
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ class LongListOfTheEntsEffect extends OneShotEffect {
|
|||
|
||||
LongListOfTheEntsEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "note a creature type that hasn't been noted for {this}. When you cast your next creature spell " +
|
||||
staticText = "note a creature type that hasn't been noted for {this}. When you next cast a creature spell " +
|
||||
"of that type this turn, that creature enters the battlefield with an additional +1/+1 counter on it.";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ class NarsetTranscendentTriggeredAbility extends DelayedTriggeredAbility {
|
|||
|
||||
public NarsetTranscendentTriggeredAbility() {
|
||||
super(new NarsetTranscendentGainReboundEffect(), Duration.EndOfTurn, true);
|
||||
setTriggerPhrase("When you cast your next instant or sorcery spell from your hand this turn, ");
|
||||
setTriggerPhrase("When you next cast an instant or sorcery spell from your hand this turn, ");
|
||||
}
|
||||
|
||||
private NarsetTranscendentTriggeredAbility(final NarsetTranscendentTriggeredAbility ability) {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class Pyrogoyf extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.LHURGOYF, "{this} or another Lhurgoyf creature");
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.LHURGOYF, "Lhurgoyf creature");
|
||||
|
||||
private static final DynamicValue powerValue = CardTypesInGraveyardCount.ALL;
|
||||
|
||||
|
|
@ -91,4 +91,4 @@ class PyrogoyfEffect extends OneShotEffect {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,8 @@ public final class RalAndTheImplicitMaze extends CardImpl {
|
|||
// II -- You may discard a card. If you do, exile the top two cards of your library. You may play them until the end of your next turn.
|
||||
sagaAbility.addChapterEffect(
|
||||
this, SagaChapter.CHAPTER_II,
|
||||
new DoIfCostPaid(new ExileTopXMayPlayUntilEffect(2, Duration.UntilEndOfYourNextTurn), new DiscardCardCost())
|
||||
new DoIfCostPaid(new ExileTopXMayPlayUntilEffect(2, Duration.UntilEndOfYourNextTurn)
|
||||
.withTextOptions("them", true), new DiscardCardCost())
|
||||
);
|
||||
|
||||
// III -- Create a Spellgorger Weird token.
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ class RideTheAvalancheTriggeredAbility extends DelayedTriggeredAbility {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you cast your next spell this turn, " +
|
||||
return "When you next cast a spell this turn, " +
|
||||
"put X +1/+1 counters on up to one target creature, " +
|
||||
"where X is the mana value of that spell.";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ class StormKingsThunderEffect extends OneShotEffect {
|
|||
|
||||
StormKingsThunderEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "When you cast your next instant or sorcery spell this turn, " +
|
||||
staticText = "When you next cast an instant or sorcery spell this turn, " +
|
||||
"copy that spell X times. You may choose new targets for the copies.";
|
||||
}
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ class StormKingsThunderAbility extends DelayedTriggeredAbility {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you cast your next instant or sorcery spell this turn, " +
|
||||
return "When you next cast an instant or sorcery spell this turn, " +
|
||||
"copy that spell X times. You may choose new targets for the copies.";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ public final class TamiyoSeasonedScholar extends CardImpl {
|
|||
new AttacksAllTriggeredAbility(
|
||||
new BoostTargetEffect(-1, 0, Duration.EndOfTurn)
|
||||
.setText("it gets -1/-0 until end of turn"),
|
||||
false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE,
|
||||
false, StaticFilters.FILTER_PERMANENT_CREATURE,
|
||||
SetTargetPointer.PERMANENT, true
|
||||
)
|
||||
)
|
||||
|
|
@ -112,4 +112,4 @@ class TamiyoSeasonedScholarMinus3Effect extends OneShotEffect {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public final class ThunderclapDrake extends CardImpl {
|
|||
new CopyNextSpellDelayedTriggeredAbility(
|
||||
StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY,
|
||||
new ThunderclapDrakeEffect(),
|
||||
"When you cast your next instant or sorcery spell this turn, "
|
||||
"When you next cast an instant or sorcery spell this turn, "
|
||||
+ "copy it for each time you've cast your commander from the command zone this game. "
|
||||
+ "You may choose new targets for the copies."
|
||||
)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import mage.abilities.common.EntersBattlefieldAbility;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
|
|
@ -36,8 +35,6 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class UlamogTheDefiler extends CardImpl {
|
||||
|
||||
private static final DynamicValue xValue = new CountersSourceCount(CounterType.P1P1);
|
||||
|
||||
public UlamogTheDefiler(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{10}");
|
||||
|
||||
|
|
@ -52,7 +49,7 @@ public final class UlamogTheDefiler extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
|
||||
// Ward--Sacrifice two permanents.
|
||||
this.addAbility(new WardAbility(new SacrificeTargetCost(2, StaticFilters.FILTER_PERMANENT)));
|
||||
this.addAbility(new WardAbility(new SacrificeTargetCost(2, StaticFilters.FILTER_PERMANENTS)));
|
||||
|
||||
// Ulamog, the Defiler enters the battlefield with a number of +1/+1 counters on it equal to the greatest mana value among cards in exile.
|
||||
this.addAbility(
|
||||
|
|
@ -196,4 +193,4 @@ class UlamogTheDefilerContinuousAbility extends ContinuousEffectImpl {
|
|||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ class VivienMonstersAdvocateTriggeredAbility extends DelayedTriggeredAbility {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you cast your next creature spell this turn, "
|
||||
return "When you next cast a creature spell this turn, "
|
||||
+ "search your library for a creature card with lesser mana value, "
|
||||
+ "put it onto the battlefield, then shuffle.";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ public class OneOrMoreCountersAddedTriggeredAbility extends TriggeredAbilityImpl
|
|||
super(Zone.ALL, effect, optional);
|
||||
this.counterType = counterType;
|
||||
setTriggerPhrase("Whenever one or more " + counterType.getName() + " counters are put on {this}, ");
|
||||
this.withRuleTextReplacement(true);
|
||||
}
|
||||
|
||||
protected OneOrMoreCountersAddedTriggeredAbility(final OneOrMoreCountersAddedTriggeredAbility ability) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue