even more text fixes/updates

This commit is contained in:
xenohedron 2024-06-01 16:32:11 -04:00
parent 410144eb52
commit af89fd80ee
21 changed files with 45 additions and 82 deletions

View file

@ -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));

View file

@ -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.";

View file

@ -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

View file

@ -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);

View file

@ -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) {

View file

@ -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);

View file

@ -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);

View file

@ -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> &mdash; 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> &mdash; 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> &mdash; 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.";
}
}

View file

@ -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;
}

View file

@ -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) {

View file

@ -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.";
}

View file

@ -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) {

View file

@ -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;
}
}
}

View file

@ -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.

View file

@ -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.";
}

View file

@ -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.";
}

View file

@ -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;
}
}
}

View file

@ -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."
)

View file

@ -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;
}
}
}

View file

@ -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.";
}

View file

@ -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) {