1
0
Fork 0
mirror of https://github.com/correl/mage.git synced 2025-04-13 01:01:11 -09:00

[MOM] various text fixes

This commit is contained in:
theelk801 2023-04-15 21:11:25 -04:00
parent 6d87041d74
commit 56d37b3496
11 changed files with 50 additions and 25 deletions

View file

@ -15,7 +15,9 @@ import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.players.Player; import mage.players.Player;
@ -29,6 +31,12 @@ import java.util.UUID;
*/ */
public final class EleshNorn extends CardImpl { public final class EleshNorn extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("other creatures");
static {
filter.add(AnotherPredicate.instance);
}
public EleshNorn(UUID ownerId, CardSetInfo setInfo) { public EleshNorn(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
@ -51,7 +59,7 @@ public final class EleshNorn extends CardImpl {
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED), new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED),
new ManaCostsImpl<>("{2}{W}") new ManaCostsImpl<>("{2}{W}")
); );
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(3, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(3, filter)));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -44,8 +44,11 @@ public final class InvasionOfRegatha extends CardImpl {
// When Invasion of Regatha enters the battlefield, it deals 4 damage to another target battle or opponent and 1 damage to up to one target creature. // When Invasion of Regatha enters the battlefield, it deals 4 damage to another target battle or opponent and 1 damage to up to one target creature.
Ability ability = new EntersBattlefieldTriggeredAbility( Ability ability = new EntersBattlefieldTriggeredAbility(
new DamageTargetEffect(4, "it") new DamageTargetEffect(
.setUseOnlyTargetPointer(true) 4, true,
"another target battle or opponent", "it"
).setUseOnlyTargetPointer(true)
); );
ability.addTarget(new TargetPermanentOrPlayer(filter)); ability.addTarget(new TargetPermanentOrPlayer(filter));
ability.addEffect(new DamageTargetEffect(1) ability.addEffect(new DamageTargetEffect(1)

View file

@ -7,7 +7,7 @@ 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.SubType;
import mage.game.permanent.token.KrakenToken; import mage.game.permanent.token.Kraken11Token;
import java.util.UUID; import java.util.UUID;
@ -27,7 +27,7 @@ public final class InvasionOfSegovia extends CardImpl {
this.addAbility(new SiegeAbility()); this.addAbility(new SiegeAbility());
// When Invasion of Segovia enters the battlefield, create two 1/1 blue Kraken creature tokens with trample. // When Invasion of Segovia enters the battlefield, create two 1/1 blue Kraken creature tokens with trample.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new KrakenToken(), 2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new Kraken11Token(), 2)));
} }
private InvasionOfSegovia(final InvasionOfSegovia card) { private InvasionOfSegovia(final InvasionOfSegovia card) {

View file

@ -1,6 +1,7 @@
package mage.cards.o; package mage.cards.o;
import mage.MageInt; import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfPreCombatMainTriggeredAbility; import mage.abilities.common.BeginningOfPreCombatMainTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
@ -83,8 +84,8 @@ class OmnathLocusOfAllCardEffect extends OneShotEffect {
OmnathLocusOfAllCardEffect() { OmnathLocusOfAllCardEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "look at the top card of your library. You may reveal that card if it has three or more " + this.staticText = "look at the top card of your library. You may reveal that card if it has three or more " +
"colored mana symbols in its mana cost. If you do, add three mana in any combination of colors and " + "colored mana symbols in its mana cost. If you do, add three mana in any combination of its colors " +
"put it into your hand. If you don't reveal it, put it into your hand."; "and put it into your hand. If you don't reveal it, put it into your hand.";
} }
private OmnathLocusOfAllCardEffect(final OmnathLocusOfAllCardEffect effect) { private OmnathLocusOfAllCardEffect(final OmnathLocusOfAllCardEffect effect) {
@ -115,9 +116,18 @@ class OmnathLocusOfAllCardEffect extends OneShotEffect {
.map(c -> "" + c) .map(c -> "" + c)
.filter(wubrg::contains) .filter(wubrg::contains)
.count() >= 3 .count() >= 3
&& player.chooseUse(outcome, "Reveal " + card.getName() + '?', source, game)) { && player.chooseUse(outcome, "Reveal " + card.getName() + '?', source, game)
) {
player.revealCards(source, new CardsImpl(card), game); player.revealCards(source, new CardsImpl(card), game);
new AddManaInAnyCombinationEffect(3).apply(game, source); ColoredManaSymbol[] colors = card
.getColor(game)
.getColors()
.stream()
.map(ObjectColor::getOneColoredManaSymbol)
.toArray(ColoredManaSymbol[]::new);
if (colors.length > 0) {
new AddManaInAnyCombinationEffect(3, colors).apply(game, source);
}
} }
player.moveCards(card, Zone.HAND, source, game); player.moveCards(card, Zone.HAND, source, game);
return true; return true;

View file

@ -51,6 +51,7 @@ public final class RealmbreakerTheInvasionTree extends CardImpl {
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addEffect(new RealmbreakerTheInvasionTreeEffect()); ability.addEffect(new RealmbreakerTheInvasionTreeEffect());
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
this.addAbility(ability);
// {10}, {T}, Sacrifice Realmbreaker, the Invasion Tree: Search your library for any number of Praetor cards, put them onto the battlefield, then shuffle. // {10}, {T}, Sacrifice Realmbreaker, the Invasion Tree: Search your library for any number of Praetor cards, put them onto the battlefield, then shuffle.
ability = new SimpleActivatedAbility(new SearchLibraryPutInPlayEffect( ability = new SimpleActivatedAbility(new SearchLibraryPutInPlayEffect(

View file

@ -31,7 +31,8 @@ public final class ScrappyBruiser extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// Whenever Scrappy Bruiser attacks, up to one target attacking creature gets +2/+0 and gains trample until end of turn. Return that creature to its owner's hand at end of combat. // Whenever Scrappy Bruiser attacks, up to one target attacking creature gets +2/+0 and gains trample until end of turn. Return that creature to its owner's hand at end of combat.
Ability ability = new AttacksTriggeredAbility(new BoostTargetEffect(2, 0)); Ability ability = new AttacksTriggeredAbility(new BoostTargetEffect(2, 0)
.setText("up to one target attacking creature gets +2/+0"));
ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance()) ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance())
.setText("and gains trample until end of turn")); .setText("and gains trample until end of turn"));
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility( ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(

View file

@ -14,7 +14,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import java.util.UUID; import java.util.UUID;
@ -26,6 +25,7 @@ public final class ThaliaAndTheGitrogMonster extends CardImpl {
private static final FilterPermanent filter private static final FilterPermanent filter
= new FilterPermanent("creatures and nonbasic lands your opponents control"); = new FilterPermanent("creatures and nonbasic lands your opponents control");
private static final FilterPermanent filter2 = new FilterPermanent("a creature or land");
static { static {
filter.add(Predicates.or( filter.add(Predicates.or(
@ -36,6 +36,10 @@ public final class ThaliaAndTheGitrogMonster extends CardImpl {
) )
)); ));
filter.add(TargetController.OPPONENT.getControllerPredicate()); filter.add(TargetController.OPPONENT.getControllerPredicate());
filter2.add(Predicates.or(
CardType.CREATURE.getPredicate(),
CardType.LAND.getPredicate()
));
} }
public ThaliaAndTheGitrogMonster(UUID ownerId, CardSetInfo setInfo) { public ThaliaAndTheGitrogMonster(UUID ownerId, CardSetInfo setInfo) {
@ -63,9 +67,7 @@ public final class ThaliaAndTheGitrogMonster extends CardImpl {
this.addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect(filter))); this.addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect(filter)));
// Whenever Thalia and The Gitrog Monster attacks, sacrifice a creature or land, then draw a card. // Whenever Thalia and The Gitrog Monster attacks, sacrifice a creature or land, then draw a card.
Ability ability = new AttacksTriggeredAbility(new SacrificeControllerEffect( Ability ability = new AttacksTriggeredAbility(new SacrificeControllerEffect(filter2, 1, null));
StaticFilters.FILTER_CONTROLLED_ARTIFACT_OR_CREATURE_SHORT_TEXT, 1, null
));
ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy(", then")); ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy(", then"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -139,7 +139,7 @@ class TheGreatWorkReplacementEffect extends ReplacementEffectImpl {
public TheGreatWorkReplacementEffect() { public TheGreatWorkReplacementEffect() {
super(Duration.EndOfTurn, Outcome.Exile); super(Duration.EndOfTurn, Outcome.Exile);
staticText = "iIf a spell cast this way would be put into a graveyard, exile it instead"; staticText = "if a spell cast this way would be put into a graveyard, exile it instead";
} }
private TheGreatWorkReplacementEffect(final TheGreatWorkReplacementEffect effect) { private TheGreatWorkReplacementEffect(final TheGreatWorkReplacementEffect effect) {

View file

@ -87,7 +87,7 @@ public class VerifyCardDataTest {
private static final List<String> evergreenKeywords = Arrays.asList( private static final List<String> evergreenKeywords = Arrays.asList(
"flying", "lifelink", "menace", "trample", "haste", "first strike", "hexproof", "fear", "flying", "lifelink", "menace", "trample", "haste", "first strike", "hexproof", "fear",
"deathtouch", "double strike", "indestructible", "reach", "flash", "defender", "vigilance", "deathtouch", "double strike", "indestructible", "reach", "flash", "defender", "vigilance",
"plainswalk", "islandwalk", "swampwalk", "mountainwalk", "forestwalk", "myriad" "plainswalk", "islandwalk", "swampwalk", "mountainwalk", "forestwalk", "myriad", "prowess"
); );
private static final List<String> doubleNumbers = new ArrayList<>(); private static final List<String> doubleNumbers = new ArrayList<>();

View file

@ -88,31 +88,31 @@ public class CardsInHandCondition implements Condition {
StringBuilder sb = new StringBuilder("if"); StringBuilder sb = new StringBuilder("if");
switch (targetController) { switch (targetController) {
case YOU: case YOU:
sb.append(" you have"); sb.append(" you have ");
break; break;
case ANY: case ANY:
sb.append(" each player has"); sb.append(" each player has ");
break; break;
} }
switch (this.type) { switch (this.type) {
case FEWER_THAN: case FEWER_THAN:
sb.append(CardUtil.numberToText(count)); sb.append(CardUtil.numberToText(count - 1));
sb.append(" or fewer "); sb.append(" or fewer ");
break; break;
case MORE_THAN: case MORE_THAN:
sb.append(CardUtil.numberToText(count)); sb.append(CardUtil.numberToText(count + 1));
sb.append(" or more "); sb.append(" or more ");
break; break;
case EQUAL_TO: case EQUAL_TO:
if (count > 0) { if (count > 0) {
sb.append(" exactly "); sb.append("exactly ");
sb.append(CardUtil.numberToText(count)); sb.append(CardUtil.numberToText(count));
} else { } else {
sb.append(" no "); sb.append("no ");
} }
break; break;
} }
sb.append(" cards in hand"); sb.append("cards in hand");
return sb.toString(); return sb.toString();
} }
} }

View file

@ -78,7 +78,7 @@ public class ConditionalActivatedAbility extends ActivatedAbilityImpl {
StringBuilder sb = new StringBuilder(super.getRule()); StringBuilder sb = new StringBuilder(super.getRule());
sb.append(" Activate only "); sb.append(" Activate only ");
if (timing == TimingRule.SORCERY) { if (timing == TimingRule.SORCERY) {
sb.append("as a sorcery and only"); sb.append("as a sorcery and only ");
} }
String conditionText = condition.toString(); String conditionText = condition.toString();
if (conditionText.startsWith("during") if (conditionText.startsWith("during")