text fixes [WOE] etc. (#11035)

* Fix Callous Sell Sword text

* simple text fixes

* fix some target texts
This commit is contained in:
Susucre 2023-08-27 01:34:49 +02:00 committed by GitHub
parent c4e48a6f95
commit a9870b6ff8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 58 additions and 18 deletions

View file

@ -16,6 +16,7 @@ import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterAnyTarget;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
@ -29,6 +30,8 @@ import java.util.UUID;
*/ */
public final class CallousSellSword extends AdventureCard { public final class CallousSellSword extends AdventureCard {
private static final FilterAnyTarget filterSecondTarget = new FilterAnyTarget("any other target");
private static final Hint hint = new ValueHint( private static final Hint hint = new ValueHint(
"Creatures that died under your control this turn", CallousSellSwordValue.instance "Creatures that died under your control this turn", CallousSellSwordValue.instance
); );
@ -53,7 +56,7 @@ public final class CallousSellSword extends AdventureCard {
// Target creature you control deals damage equal to its power to any other target. Then sacrifice it. // Target creature you control deals damage equal to its power to any other target. Then sacrifice it.
this.getSpellCard().getSpellAbility().addEffect(new DamageWithPowerFromOneToAnotherTargetEffect()); this.getSpellCard().getSpellAbility().addEffect(new DamageWithPowerFromOneToAnotherTargetEffect());
this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent().setTargetTag(1)); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent().setTargetTag(1));
this.getSpellCard().getSpellAbility().addTarget(new TargetAnyTarget().setTargetTag(2)); this.getSpellCard().getSpellAbility().addTarget(new TargetAnyTarget(1, 1, filterSecondTarget).setTargetTag(2));
this.getSpellCard().getSpellAbility().addEffect(new CallousSellSwordSacrificeFirstTargetEffect().concatBy("Then")); this.getSpellCard().getSpellAbility().addEffect(new CallousSellSwordSacrificeFirstTargetEffect().concatBy("Then"));
} }

View file

@ -97,7 +97,7 @@ class InjuryEffect extends OneShotEffect {
InjuryEffect() { InjuryEffect() {
super(Outcome.Damage); super(Outcome.Damage);
this.staticText = "{this} deals 2 damage to target creature and 2 damage to target player"; this.staticText = "{this} deals 2 damage to target creature and 2 damage to target player or planeswalker";
} }
InjuryEffect(final InjuryEffect effect) { InjuryEffect(final InjuryEffect effect) {

View file

@ -12,7 +12,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.RoleType; import mage.constants.RoleType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID; import java.util.UUID;
@ -22,6 +23,13 @@ import java.util.UUID;
*/ */
public final class LivingLectern extends CardImpl { public final class LivingLectern extends CardImpl {
private static final FilterControlledCreaturePermanent filter =
new FilterControlledCreaturePermanent("other target creature you control");
static {
filter.add(AnotherPredicate.instance);
}
public LivingLectern(UUID ownerId, CardSetInfo setInfo) { public LivingLectern(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{U}");
@ -36,7 +44,7 @@ public final class LivingLectern extends CardImpl {
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addEffect(new CreateRoleAttachedTargetEffect(RoleType.SORCERER)); ability.addEffect(new CreateRoleAttachedTargetEffect(RoleType.SORCERER));
ability.addTarget(new TargetPermanent( ability.addTarget(new TargetPermanent(
0, 1, StaticFilters.FILTER_ANOTHER_CREATURE_YOU_CONTROL 0, 1, filter
)); ));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -47,7 +47,8 @@ public final class RedcapGutterDweller extends CardImpl {
new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)), new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)),
"Sacrifice another creature? If you do, put a +1/+1 counter on {this} " "Sacrifice another creature? If you do, put a +1/+1 counter on {this} "
+ "and exile the top card of your library. You may play that card this turn." + "and exile the top card of your library. You may play that card this turn."
).addEffect(new ExileTopXMayPlayUntilEndOfTurnEffect(1, false).concatBy("and")), ).addEffect(new ExileTopXMayPlayUntilEndOfTurnEffect(1, false)
.setText("and exile the top card of your library. You may play that card this turn")),
TargetController.YOU, TargetController.YOU,
false false
)); ));

View file

@ -40,7 +40,7 @@ public final class RestlessSpire extends CardImpl {
// {U}{R}: Until end of turn, Restless Spire becomes a 2/1 blue and red Elemental creature with "As long as it's your turn, this creature has first strike". It's still a land. // {U}{R}: Until end of turn, Restless Spire becomes a 2/1 blue and red Elemental creature with "As long as it's your turn, this creature has first strike". It's still a land.
this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect( this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect(
new CreatureToken(2, 1, "2/1 blue and red Elemental creature with \"As long as it's your turn, this creature has first strike\"") new CreatureToken(2, 1, "2/1 blue and red Elemental creature with \"As long as it's your turn, this creature has first strike.\"")
.withColor("UR").withSubType(SubType.ELEMENTAL) .withColor("UR").withSubType(SubType.ELEMENTAL)
.withAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( .withAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield), new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield),

View file

@ -44,7 +44,8 @@ public final class SentinelOfLostLore extends CardImpl {
// When Sentinel of Lost Lore enters the battlefield, choose one or more // When Sentinel of Lost Lore enters the battlefield, choose one or more
// Return target card you own in exile that has an Adventure to your hand. // Return target card you own in exile that has an Adventure to your hand.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()); Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()
.setText("return target card you own in exile that has an Adventure to your hand"));
ability.addTarget(new TargetCardInExile(filterOwnedCard)); ability.addTarget(new TargetCardInExile(filterOwnedCard));
ability.getModes().setMinModes(1); ability.getModes().setMinModes(1);
ability.getModes().setMaxModes(3); ability.getModes().setMaxModes(3);

View file

@ -1,7 +1,6 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@ -17,6 +16,8 @@ import mage.game.permanent.Permanent;
import mage.game.stack.StackObject; import mage.game.stack.StackObject;
import mage.target.TargetStackObject; import mage.target.TargetStackObject;
import java.util.UUID;
/** /**
* *
* @author AlumiuN * @author AlumiuN
@ -37,7 +38,7 @@ public final class TeferisResponse extends CardImpl {
this.getSpellAbility().addTarget(new TargetStackObject(filter)); this.getSpellAbility().addTarget(new TargetStackObject(filter));
// Draw two cards. // Draw two cards.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).concatBy("<br>"));
} }
private TeferisResponse(final TeferisResponse card) { private TeferisResponse(final TeferisResponse card) {

View file

@ -67,7 +67,7 @@ class TwiningTwinsEffect extends OneShotEffect {
TwiningTwinsEffect() { TwiningTwinsEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "Exile target nontoken creature. Return that card to the battlefield under its " staticText = "Exile target nontoken creature. Return it to the battlefield under its "
+ "owner's control at the beginning of the next end step"; + "owner's control at the beginning of the next end step";
} }

View file

@ -36,7 +36,8 @@ public final class VerdantOutrider extends CardImpl {
// {1}{G}: Verdant Outrider can't be blocked by creatures with power 2 or less this turn. // {1}{G}: Verdant Outrider can't be blocked by creatures with power 2 or less this turn.
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(
new CantBeBlockedByCreaturesSourceEffect(filter, Duration.EndOfTurn), new CantBeBlockedByCreaturesSourceEffect(filter, Duration.EndOfTurn)
.setText("{this} can't be blocked by creatures with power 2 or less this turn"),
new ManaCostsImpl<>("{1}{G}") new ManaCostsImpl<>("{1}{G}")
)); ));
} }

View file

@ -1,7 +1,6 @@
package mage.cards.v; package mage.cards.v;
import java.util.UUID;
import mage.MageObjectReference; import mage.MageObjectReference;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.Mode; import mage.abilities.Mode;
@ -18,6 +17,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.filter.FilterSpell;
import mage.filter.FilterStackObject; import mage.filter.FilterStackObject;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.other.NumberOfTargetsPredicate; import mage.filter.predicate.other.NumberOfTargetsPredicate;
@ -28,13 +28,15 @@ import mage.target.TargetPermanent;
import mage.target.TargetStackObject; import mage.target.TargetStackObject;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
* *
* @author spjspj * @author spjspj
*/ */
public final class VeryCrypticCommandD extends CardImpl { public final class VeryCrypticCommandD extends CardImpl {
private static final FilterStackObject filter = new FilterStackObject("spell or ability with a single target"); private static final FilterStackObject filter = new FilterSpell("spell with a single target");
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("nontoken creature"); private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("nontoken creature");
static { static {

View file

@ -178,7 +178,10 @@ public class DamageTargetEffect extends OneShotEffect {
sb.append(' '); sb.append(' ');
} }
} }
sb.append("target ").append(targetName); if (!targetName.contains("target ")) {
sb.append("target ");
}
sb.append(targetName);
} }
} else { } else {
sb.append("that target"); sb.append("that target");

View file

@ -70,8 +70,12 @@ public class PreventNextDamageFromChosenSourceToTargetEffect extends PreventionE
@Override @Override
public String getText(Mode mode) { public String getText(Mode mode) {
StringBuilder sb = new StringBuilder("The next time a ").append(targetSource.getFilter().getMessage()); StringBuilder sb = new StringBuilder("The next time a ").append(targetSource.getFilter().getMessage());
sb.append(" of your choice would deal damage to target "); sb.append(" of your choice would deal damage to ");
sb.append(mode.getTargets().get(0).getTargetName()); String targetName = mode.getTargets().get(0).getTargetName();
if (!targetName.contains("target ") && !targetName.endsWith("any target")) {
sb.append("target ");
}
sb.append(targetName);
if (duration == Duration.EndOfTurn) { if (duration == Duration.EndOfTurn) {
sb.append(" this turn"); sb.append(" this turn");
} }

View file

@ -119,7 +119,19 @@ public abstract class TargetImpl implements Target {
sb.append(CardUtil.numberToText(max)); sb.append(CardUtil.numberToText(max));
sb.append(' '); sb.append(' ');
} }
if (!isNotTarget() && !getTargetName().contains("target ") && !getTargetName().endsWith("any target")) { boolean addTargetWord = false;
if (!isNotTarget()) {
addTargetWord = true;
if (getTargetName().contains("target ")) {
addTargetWord = false;
} else if (getTargetName().endsWith("any target")
|| getTargetName().endsWith("any other target")) {
addTargetWord = false;
}
// endsWith needs to be specific.
// e.g. "spell with a single target" => need to prefix with "target ".
}
if (addTargetWord) {
sb.append("target "); sb.append("target ");
} }
if (isNotTarget() && min == 1 && max == 1) { if (isNotTarget() && min == 1 && max == 1) {

View file

@ -7,7 +7,7 @@ import mage.filter.common.FilterAnyTarget;
*/ */
public class TargetAnyTarget extends TargetPermanentOrPlayer { public class TargetAnyTarget extends TargetPermanentOrPlayer {
private static final FilterAnyTarget filter = new FilterAnyTarget(); private static final FilterAnyTarget defaultFilter = new FilterAnyTarget();
public TargetAnyTarget() { public TargetAnyTarget() {
this(1); this(1);
@ -18,6 +18,10 @@ public class TargetAnyTarget extends TargetPermanentOrPlayer {
} }
public TargetAnyTarget(int minNumTargets, int maxNumTargets) { public TargetAnyTarget(int minNumTargets, int maxNumTargets) {
this(minNumTargets, maxNumTargets, defaultFilter);
}
public TargetAnyTarget(int minNumTargets, int maxNumTargets, FilterAnyTarget filter) {
super(minNumTargets, maxNumTargets, filter, false); super(minNumTargets, maxNumTargets, filter, false);
} }