mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
text fixes [WOE] etc. (#11035)
* Fix Callous Sell Sword text * simple text fixes * fix some target texts
This commit is contained in:
parent
c4e48a6f95
commit
a9870b6ff8
14 changed files with 58 additions and 18 deletions
|
|
@ -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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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}")
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue