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

[MOM] various text fixes

This commit is contained in:
theelk801 2023-04-11 09:32:31 -04:00
parent a035b1a3f1
commit 312cff0c0f
29 changed files with 73 additions and 58 deletions

View file

@ -33,6 +33,7 @@ public final class AlabasterHostIntercessor extends CardImpl {
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileUntilSourceLeavesEffect());
ability.addTarget(new TargetOpponentsCreaturePermanent());
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(ability);
// Plainscycling {2}
this.addAbility(new PlainscyclingAbility(new ManaCostsImpl<>("{2}")));

View file

@ -45,7 +45,7 @@ public final class AncientImperiosaur extends CardImpl {
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(
CounterType.P1P1.createInstance(), xValue, true
), null, "{this} enters the battlefield with two " +
"+1/+1 counters on it for each creature that convoked it", null));
"+1/+1 counters on it for each creature that convoked it.", null));
}
private AncientImperiosaur(final AncientImperiosaur card) {

View file

@ -40,7 +40,8 @@ public final class ArchangelElspeth extends CardImpl {
// -2: Put two +1/+1 counters on target creature. It becomes an Angel in addition to its other types and gains flying.
Ability ability = new LoyaltyAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2)), -2);
ability.addEffect(new AddCardSubTypeTargetEffect(SubType.ANGEL, Duration.Custom));
ability.addEffect(new AddCardSubTypeTargetEffect(SubType.ANGEL, Duration.Custom)
.setText("It becomes an Angel in addition to its other types"));
ability.addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.Custom).setText("and gains flying"));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);

View file

@ -42,7 +42,7 @@ public final class AttentiveSkywarden extends CardImpl {
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(
new TransformTargetEffect(), false
).setOrBattle(true);
ability.addTarget(new TargetPermanent(filter));
ability.addTarget(new TargetPermanent(0, 1, filter));
this.addAbility(ability);
}

View file

@ -33,7 +33,7 @@ public final class BeamtownBeatstick extends CardImpl {
this.subtype.add(SubType.EQUIPMENT);
// Equipped creature gets +1/+0 and has menace.
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 2));
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 0));
ability.addEffect(new GainAbilityAttachedEffect(
new MenaceAbility(), AttachmentType.EQUIPMENT
).setText("and has menace. <i>(It can't be blocked except by two or more creatures.)</i>"));

View file

@ -1,11 +1,14 @@
package mage.cards.c;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect;
import mage.abilities.keyword.BackupAbility;
import mage.abilities.keyword.DauntAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import java.util.UUID;
@ -27,7 +30,9 @@ public final class ChompingKavu extends CardImpl {
this.addAbility(backupAbility);
// This creature can't be blocked by creatures with power 2 or less.
backupAbility.addAbility(new DauntAbility());
backupAbility.addAbility(new SimpleStaticAbility(new CantBeBlockedByCreaturesSourceEffect(
DauntAbility.getFilter(), Duration.WhileOnBattlefield
).setText("this creature can't be blocked by creatures with power 2 or less")));
}
private ChompingKavu(final ChompingKavu card) {

View file

@ -6,6 +6,7 @@ import mage.abilities.effects.common.ExileTopXMayPlayUntilEndOfTurnEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import java.util.UUID;
@ -27,7 +28,9 @@ public final class CompleatedConjurer extends CardImpl {
this.nightCard = true;
// When this creature transforms into Compleated Conjurer, exile the top card of your library. Until the end of your next turn, you may play that card.
this.addAbility(new TransformIntoSourceTriggeredAbility(new ExileTopXMayPlayUntilEndOfTurnEffect(1)));
this.addAbility(new TransformIntoSourceTriggeredAbility(
new ExileTopXMayPlayUntilEndOfTurnEffect(1, false, Duration.UntilEndOfYourNextTurn)
));
}
private CompleatedConjurer(final CompleatedConjurer card) {

View file

@ -42,6 +42,7 @@ public final class CrystalCarapace extends CardImpl {
ability.addEffect(new GainAbilityAttachedEffect(
new WardAbility(new GenericManaCost(2), false), AttachmentType.AURA
).setText("and has ward {2}"));
this.addAbility(ability);
// Cycling {2}
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}")));

View file

@ -44,7 +44,7 @@ public final class EtaliPrimalSickness extends CardImpl {
// Whenever Etali, Primal Sickness deals combat damage to a player, they get that many poison counters.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(
new EtaliPrimalConquerorEffect(), false, true
new EtaliPrimalSicknessEffect(), false, true
));
}

View file

@ -40,7 +40,7 @@ public final class ExpeditionLookout extends CardImpl {
).setText("as long as an opponent has eight or more cards in their graveyard, " +
"{this} can attack as though it didn't have defender"));
ability.addEffect(new ConditionalRestrictionEffect(
new CantBeBlockedSourceEffect(), CardsInOpponentGraveyardCondition.EIGHT, "and can't be blocked"
new CantBeBlockedSourceEffect(), CardsInOpponentGraveyardCondition.EIGHT, "and it can't be blocked"
));
this.addAbility(ability.addHint(CardsInOpponentGraveyardCondition.EIGHT.getHint()));
}

View file

@ -49,7 +49,7 @@ public final class FlittingGuerrilla extends CardImpl {
ReflexiveTriggeredAbility rAbility = new ReflexiveTriggeredAbility(new PutOnLibraryTargetEffect(true), false);
rAbility.addTarget(new TargetCardInYourGraveyard(filter));
Ability ability = new DiesSourceTriggeredAbility(new MillCardsEachPlayerEffect(2, TargetController.EACH_PLAYER));
ability.addEffect(new DoWhenCostPaid(rAbility, new ExileSourceFromGraveCost(), "Exile this from your graveyard?"));
ability.addEffect(new DoWhenCostPaid(rAbility, new ExileSourceFromGraveCost().setText("exile {this}"), "Exile this from your graveyard?").concatBy("Then"));
this.addAbility(ability);
}

View file

@ -28,7 +28,7 @@ public final class GlisteningGoremonger extends CardImpl {
this.nightCard = true;
// When Glistening Goremonger dies, each opponent sacrifices an artifact or creature.
this.addAbility(new DiesSourceTriggeredAbility(new SacrificeOpponentsEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE)));
this.addAbility(new DiesSourceTriggeredAbility(new SacrificeOpponentsEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_CREATURE)));
}
private GlisteningGoremonger(final GlisteningGoremonger card) {

View file

@ -51,7 +51,7 @@ public final class GraftedButcher extends CardImpl {
// {3}{B}, Sacrifice an artifact or creature: Return Grafted Butcher from your graveyard to the battlefield. Activate only as a sorcery.
Ability ability = new ActivateAsSorceryActivatedAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(), new ManaCostsImpl<>("{3}{B}")
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(false, false), new ManaCostsImpl<>("{3}{B}")
);
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ARTIFACT_OR_CREATURE_SHORT_TEXT));
this.addAbility(ability);

View file

@ -65,7 +65,7 @@ class HaloChargedSkaabEffect extends OneShotEffect {
HaloChargedSkaabEffect() {
super(Outcome.Benefit);
staticText = "then you may put an instant, sorcery, or battle card from your graveyard on top of your library";
staticText = "Then you may put an instant, sorcery, or battle card from your graveyard on top of your library";
}
private HaloChargedSkaabEffect(final HaloChargedSkaabEffect effect) {

View file

@ -4,27 +4,24 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.effects.common.continuous.CastAsThoughItHadFlashAllEffect;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.FilterCard;
import mage.filter.common.FilterNonlandCard;
import mage.game.Game;
import mage.players.Player;
import mage.util.CardUtil;
import mage.watchers.common.CardsDrawnThisTurnWatcher;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
public class HeliodTheWarpedEclipse extends CardImpl {
private static final FilterCard filter = new FilterNonlandCard("spells");
public HeliodTheWarpedEclipse(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "");
this.color.setWhite(true);
@ -37,9 +34,7 @@ public class HeliodTheWarpedEclipse extends CardImpl {
this.nightCard = true;
//You may cast spells as though they had flash.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CastAsThoughItHadFlashAllEffect(
Duration.WhileOnBattlefield, StaticFilters.FILTER_CARD_NON_LAND
)));
this.addAbility(new SimpleStaticAbility(new CastAsThoughItHadFlashAllEffect(Duration.WhileOnBattlefield, filter)));
//Spells you cast cost {1} less to cast for each card your opponents have drawn this turn.
this.addAbility(new SimpleStaticAbility(new HeliodTheWarpedEclipseEffect()));

View file

@ -48,7 +48,6 @@ public final class KroxaAndKunoros extends CardImpl {
new ReturnFromGraveyardToBattlefieldTargetEffect(), false
);
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.addAbility(ability);
this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new DoWhenCostPaid(
ability, new ExileFromGraveCost(new TargetCardInYourGraveyard(5)),
"Exile five cards from your graveyard?"

View file

@ -27,7 +27,7 @@ public final class OrderOfTheAlabasterHost extends CardImpl {
this.nightCard = true;
// Whenever Order of the Alabaster Host becomes blocked by a creature, that creature gets -1/-1 until end of turn.
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new BoostTargetEffect(-1, -1), false));
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new BoostTargetEffect(-1, -1).setText("that creature gets -1/-1 until end of turn"), false));
}
private OrderOfTheAlabasterHost(final OrderOfTheAlabasterHost card) {

View file

@ -1,7 +1,5 @@
package mage.cards.p;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -12,21 +10,22 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
*
* @author Loki
*/
public final class PhyrexianGargantua extends CardImpl {
public PhyrexianGargantua(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{B}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}");
this.subtype.add(SubType.PHYREXIAN);
this.subtype.add(SubType.HORROR);
this.power = new MageInt(4);
this.toughness = new MageInt(4);
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(2), false);
ability.addEffect(new LoseLifeSourceControllerEffect(2));
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(2, "you"), false);
ability.addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and"));
this.addAbility(ability);
}

View file

@ -22,7 +22,7 @@ import java.util.UUID;
*/
public final class StreetwiseNegotiator extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("this creature");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
static {
filter.add(StreetwiseNegotiatorPredicate.instance);
@ -41,7 +41,8 @@ public final class StreetwiseNegotiator extends CardImpl {
this.addAbility(backupAbility);
// This creature assigns combat damage equal to its toughness rather than its power.
backupAbility.addAbility(new SimpleStaticAbility(new CombatDamageByToughnessEffect(filter, false)));
backupAbility.addAbility(new SimpleStaticAbility(new CombatDamageByToughnessEffect(filter, false)
.setText("this creature assigns combat damage equal to its toughness rather than its power")));
}
private StreetwiseNegotiator(final StreetwiseNegotiator card) {

View file

@ -46,7 +46,7 @@ class UnsealTheNecropolisEffect extends OneShotEffect {
UnsealTheNecropolisEffect() {
super(Outcome.Benefit);
staticText = "then you return up to two creature cards from your graveyard to your hand";
staticText = "Then you return up to two creature cards from your graveyard to your hand";
}
private UnsealTheNecropolisEffect(final UnsealTheNecropolisEffect effect) {

View file

@ -41,6 +41,7 @@ public final class UrnOfGodfire extends CardImpl {
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability);
}
private UrnOfGodfire(final UrnOfGodfire card) {

View file

@ -38,7 +38,9 @@ public final class VoldarenThrillseeker extends CardImpl {
// {1}, Sacrifice this creature: It deals damage equal to its power to any target.
Ability ability = new SimpleActivatedAbility(
new DamageTargetEffect(xValue, "it"), new GenericManaCost(1)
new DamageTargetEffect(xValue)
.setText("it deals damage equal to its power to any target"),
new GenericManaCost(1)
);
ability.addCost(new SacrificeSourceCost().setText("sacrifice this creature"));
ability.addTarget(new TargetAnyTarget());

View file

@ -63,7 +63,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODE = "40K"; // check all abilities and output cards with wrong abilities texts;
private static final String FULL_ABILITIES_CHECK_SET_CODE = "MOM"; // check all abilities and output cards with wrong abilities texts;
private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run

View file

@ -86,7 +86,7 @@ public class MillThenPutInHandEffect extends OneShotEffect {
sb.append(CardUtil.numberToText(amount));
sb.append(" cards. You may put ");
sb.append(filter.getMessage());
sb.append(" from among the cards milled this way into your hand");
sb.append(" from among the milled cards into your hand");
if (otherwiseEffect != null) {
sb.append(". If you don't, ");
sb.append(otherwiseEffect.getText(mode));

View file

@ -87,11 +87,13 @@ public class ReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEffect
if (target.getMaxNumberOfTargets() == Integer.MAX_VALUE
&& target.getMinNumberOfTargets() == 0) {
sb.append("any number of ");
} else {
if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
sb.append("up to ");
}
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' ');
} else if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
sb.append("up to ");
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets()));
sb.append(' ');
} else if (target.getMaxNumberOfTargets() > 1) {
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets()));
sb.append(' ');
}
String targetName = mode.getTargets().get(0).getTargetName();
if (!targetName.contains("target ")) {

View file

@ -50,11 +50,13 @@ public class TransformTargetEffect extends OneShotEffect {
if (target.getMaxNumberOfTargets() == Integer.MAX_VALUE
&& target.getMinNumberOfTargets() == 0) {
sb.append("any number of ");
} else {
if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
sb.append("up to ");
}
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' ');
} else if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
sb.append("up to ");
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets()));
sb.append(' ');
} else if (target.getMaxNumberOfTargets() > 1) {
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets()));
sb.append(' ');
}
String targetName = mode.getTargets().get(0).getTargetName();
if (!targetName.contains("target ")) {

View file

@ -69,7 +69,7 @@ public class UntapTargetEffect extends OneShotEffect {
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets()));
sb.append(haveTargetWord ? " " : " target ");
sb.append(target.getTargetName());
if (!target.getTargetName().endsWith("s")) {
if (target.getMaxNumberOfTargets() > 1 && !target.getTargetName().endsWith("s")) {
sb.append('s');
}
} else {

View file

@ -39,16 +39,16 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl {
/**
* @param token
* @param loseAllAbilities loses all creature subtypes, colors and abilities
* @param stillALand add rule text, "it's still a land"
* @param loseName permanent loses name and gets it from token
* @param keepAbilities lose subtypes/colors, but keep abilities (example:
* Scale Up)
* @param loseAllAbilities loses all creature subtypes, colors and abilities
* @param stillALand add rule text, "it's still a land"
* @param loseName permanent loses name and gets it from token
* @param keepAbilities lose subtypes/colors, but keep abilities (example:
* Scale Up)
* @param duration
* @param loseOtherCardTypes permanent loses other (original) card types, exclusively obtains card types of token
*/
public BecomesCreatureTargetEffect(Token token, boolean loseAllAbilities, boolean stillALand, Duration duration, boolean loseName,
boolean keepAbilities, boolean loseOtherCardTypes) {
boolean keepAbilities, boolean loseOtherCardTypes) {
super(duration, Outcome.BecomeCreature);
this.token = token;
this.loseAllAbilities = loseAllAbilities;
@ -179,10 +179,13 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl {
}
StringBuilder sb = new StringBuilder();
Target target = mode.getTargets().get(0);
if (target.getMaxNumberOfTargets() > 1) {
if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) {
sb.append("up to ");
if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) {
sb.append("up to ");
if (target.getMaxNumberOfTargets() == 1) {
sb.append("one ");
}
}
if (target.getMaxNumberOfTargets() > 1) {
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(" target ").append(target.getTargetName());
if (loseAllAbilities) {
sb.append(" lose all their abilities and ");

View file

@ -24,7 +24,7 @@ public class ModifyCountersAddedEffect extends ReplacementEffectImpl {
this.filter = filter;
this.counterType = counterType;
staticText = "if one or more " + (counterType != null ? counterType + " " : "") + "counters would be put on " +
CardUtil.addArticle(filter.getMessage()) + " you control, that many plus one " +
CardUtil.addArticle(filter.getMessage()) + ", that many plus one " +
(counterType != null ? counterType : "of each of those kinds of") + " counters are put on it instead";
}