forked from External/mage
[J25] various text fixes
This commit is contained in:
parent
cfd51d7dce
commit
1ab9eeaad8
17 changed files with 101 additions and 134 deletions
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
|
@ -18,11 +17,11 @@ import mage.game.permanent.Permanent;
|
|||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class AuramancersGuise extends CardImpl {
|
||||
|
|
@ -36,16 +35,16 @@ public final class AuramancersGuise extends CardImpl {
|
|||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
Ability ability = new EnchantAbility(auraTarget);
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new EnchantAbility(auraTarget));
|
||||
|
||||
// Enchanted creature gets +2/+2 for each Aura attached to it and has vigilance.
|
||||
DynamicValue ptBoost = new EnchantedCreatureAurasCount();
|
||||
BoostEnchantedEffect effect = new BoostEnchantedEffect(ptBoost, ptBoost, Duration.WhileOnBattlefield);
|
||||
effect.setText("Enchanted creature gets +2/+2 for each Aura attached to it");
|
||||
SimpleStaticAbility ability2 = new SimpleStaticAbility(effect);
|
||||
ability2.addEffect(new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA).setText("and has vigilance"));
|
||||
this.addAbility(ability2);
|
||||
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(
|
||||
AuramancersGuiseValue.instance, AuramancersGuiseValue.instance, Duration.WhileOnBattlefield
|
||||
));
|
||||
ability.addEffect(new GainAbilityAttachedEffect(
|
||||
VigilanceAbility.getInstance(), AttachmentType.AURA
|
||||
).setText("and has vigilance"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private AuramancersGuise(final AuramancersGuise card) {
|
||||
|
|
@ -58,48 +57,40 @@ public final class AuramancersGuise extends CardImpl {
|
|||
}
|
||||
}
|
||||
|
||||
class EnchantedCreatureAurasCount implements DynamicValue {
|
||||
|
||||
public EnchantedCreatureAurasCount() {
|
||||
}
|
||||
|
||||
private EnchantedCreatureAurasCount(final EnchantedCreatureAurasCount dynamicValue) {
|
||||
}
|
||||
enum AuramancersGuiseValue implements DynamicValue {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
int count = 0;
|
||||
Permanent aura = game.getPermanent(sourceAbility.getSourceId());
|
||||
if (aura != null) {
|
||||
Permanent permanent = game.getPermanent(aura.getAttachedTo());
|
||||
if (permanent != null) {
|
||||
List<UUID> attachments = permanent.getAttachments();
|
||||
for (UUID attachmentId : attachments) {
|
||||
Permanent attached = game.getPermanent(attachmentId);
|
||||
if (attached != null && attached.hasSubtype(SubType.AURA, game)) {
|
||||
count++;
|
||||
}
|
||||
|
||||
}
|
||||
return 2 * count;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
Permanent permanent = Optional
|
||||
.ofNullable(sourceAbility.getSourcePermanentIfItStillExists(game))
|
||||
.map(Permanent::getAttachedTo)
|
||||
.map(game::getPermanent)
|
||||
.orElse(null);
|
||||
return permanent != null
|
||||
? 2 * permanent
|
||||
.getAttachments()
|
||||
.stream()
|
||||
.map(game::getPermanent)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(p -> p.hasSubtype(SubType.AURA, game))
|
||||
.mapToInt(x -> 1)
|
||||
.sum()
|
||||
: 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnchantedCreatureAurasCount copy() {
|
||||
return new EnchantedCreatureAurasCount(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "1";
|
||||
public AuramancersGuiseValue copy() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "of its auras";
|
||||
return "for each Aura attached to it";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "2";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,8 +48,8 @@ class BountyOfSkemfarEffect extends OneShotEffect {
|
|||
|
||||
BountyOfSkemfarEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "reveal the top six cards of your library. You may put a land card from among them " +
|
||||
"onto the battlefield tapped and an Elf card from among them into your hand. " +
|
||||
staticText = "reveal the top six cards of your library. You may put up to one land card from among them " +
|
||||
"onto the battlefield tapped and up to one Elf card from among them into your hand. " +
|
||||
"Put the rest on the bottom of your library in a random order";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ public final class FaithfulPikemaster extends CardImpl {
|
|||
// As long as it's your turn, Faithful Pikemaster has first strike.
|
||||
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||
new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||
MyTurnCondition.instance, "during your turn, {this} has first strike."
|
||||
MyTurnCondition.instance, "as long as it's your turn, {this} has first strike."
|
||||
)).addHint(MyTurnHint.instance));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ class GodsendRuleModifyingEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
|
||||
GodsendRuleModifyingEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||
staticText = "Your opponents can't cast cards with the same name as cards exiled with {this}";
|
||||
staticText = "Your opponents can't cast spells with the same name as a card exiled with {this}";
|
||||
}
|
||||
|
||||
private GodsendRuleModifyingEffect(final GodsendRuleModifyingEffect effect) {
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
|
||||
package mage.cards.l;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.SourceHasCounterCondition;
|
||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
|
|
@ -12,26 +11,29 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class Lightwalker extends CardImpl {
|
||||
|
||||
private static final Condition condition = new SourceHasCounterCondition(CounterType.P1P1);
|
||||
|
||||
public Lightwalker(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Lightwalker has flying as long as it has a +1/+1 counter on it.
|
||||
this.addAbility(new SimpleStaticAbility(
|
||||
new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance()),
|
||||
new SourceHasCounterCondition(CounterType.P1P1),"Lightwalker has flying as long as it has a +1/+1 counter on it")));
|
||||
// Lightwalker has flying as long as it has a +1/+1 counter on it.
|
||||
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||
new GainAbilitySourceEffect(FlyingAbility.getInstance()), condition,
|
||||
"{this} has flying as long as it has a +1/+1 counter on it"
|
||||
)));
|
||||
}
|
||||
|
||||
private Lightwalker(final Lightwalker card) {
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class NabanDeanOfIterationEffect extends ReplacementEffectImpl {
|
|||
|
||||
NabanDeanOfIterationEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
||||
staticText = "If a Wizard entering under your control causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time";
|
||||
staticText = "if a Wizard you control entering causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time";
|
||||
}
|
||||
|
||||
private NabanDeanOfIterationEffect(final NabanDeanOfIterationEffect effect) {
|
||||
|
|
|
|||
|
|
@ -1,18 +1,28 @@
|
|||
package mage.cards.p;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.ControlsPermanentGreatestCMCCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.hint.ConditionHint;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.keyword.HexproofAbility;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||
import mage.filter.predicate.Predicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -21,8 +31,16 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class PadeemConsulOfInnovation extends CardImpl {
|
||||
|
||||
private static final Condition condition
|
||||
= new ControlsPermanentGreatestCMCCondition(StaticFilters.FILTER_PERMANENT_ARTIFACT);
|
||||
private static final FilterPermanent filter = new FilterControlledArtifactPermanent(
|
||||
"you control the artifact with the greatest mana value or tied for the greatest mana value"
|
||||
);
|
||||
|
||||
static {
|
||||
filter.add(PadeemConsulOfInnovationPredicate.instance);
|
||||
}
|
||||
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
|
||||
private static final Hint hint = new ConditionHint(condition);
|
||||
|
||||
public PadeemConsulOfInnovation(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
|
||||
|
|
@ -39,12 +57,7 @@ public final class PadeemConsulOfInnovation extends CardImpl {
|
|||
)));
|
||||
|
||||
// At the beginning of your upkeep, if you control the artifact with the highest converted mana cost or tied for the highest converted mana cost, draw a card.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), false
|
||||
), condition, "At the beginning of your upkeep, if you control the artifact " +
|
||||
"with the highest mana value or tied for the highest mana value, draw a card."
|
||||
));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DrawCardSourceControllerEffect(1)).withInterveningIf(condition).addHint(hint));
|
||||
}
|
||||
|
||||
private PadeemConsulOfInnovation(final PadeemConsulOfInnovation card) {
|
||||
|
|
@ -56,3 +69,18 @@ public final class PadeemConsulOfInnovation extends CardImpl {
|
|||
return new PadeemConsulOfInnovation(this);
|
||||
}
|
||||
}
|
||||
|
||||
enum PadeemConsulOfInnovationPredicate implements Predicate<Permanent> {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean apply(Permanent input, Game game) {
|
||||
return input.getManaValue() >= game
|
||||
.getBattlefield()
|
||||
.getActivePermanents(StaticFilters.FILTER_PERMANENT_ARTIFACT, input.getControllerId(), game)
|
||||
.stream()
|
||||
.mapToInt(MageObject::getManaValue)
|
||||
.max()
|
||||
.orElse(-1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ public final class PriestOfForgottenGods extends CardImpl {
|
|||
);
|
||||
ability.addEffect(
|
||||
new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "")
|
||||
.setText("and sacrifice a creature")
|
||||
.setText("and sacrifice a creature of their choice")
|
||||
);
|
||||
ability.addCost(new SacrificeTargetCost(2, filter));
|
||||
ability.addEffect(new BasicManaEffect(Mana.BlackMana(2)).setText("You add {B}{B}"));
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public final class RevTitheExtractor extends CardImpl {
|
|||
);
|
||||
ability.addEffect(new ExileFaceDownTopNLibraryYouMayPlayAsLongAsExiledTargetEffect(true, CastManaAdjustment.NONE)
|
||||
.setText(", then look at the top card of that player's library and exile it face down. "
|
||||
+ "You may play that card for as long as it remains exiled"));
|
||||
+ "You may cast that card for as long as it remains exiled"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ class ScreamingSwarmEffect extends OneShotEffect {
|
|||
|
||||
ScreamingSwarmEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "put {this} from your graveyard into your library second from the top";
|
||||
staticText = "put this card from your graveyard into your library second from the top";
|
||||
}
|
||||
|
||||
private ScreamingSwarmEffect(final ScreamingSwarmEffect effect) {
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public final class ShieldMare extends CardImpl {
|
|||
|
||||
// When Shield Mare enters the battlefield or becomes the target of a spell or ability and opponent controls, you gain 3 life.
|
||||
this.addAbility(new OrTriggeredAbility(Zone.ALL, new GainLifeEffect(3), false,
|
||||
"Whenever {this} enters or becomes the target of a spell or ability an opponent controls, ",
|
||||
"When {this} enters or becomes the target of a spell or ability an opponent controls, ",
|
||||
new EntersBattlefieldTriggeredAbility(null),
|
||||
new BecomesTargetSourceTriggeredAbility(null, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,10 +48,10 @@ public final class ToughCookie extends CardImpl {
|
|||
// {2}{G}: Target noncreature artifact you control becomes a 4/4 artifact creature until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(new AddCardTypeTargetEffect(
|
||||
Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE
|
||||
).setText("target noncreature artifact you control becomes"), new ManaCostsImpl<>("{2}{G}"));
|
||||
).setText("until end of turn, target noncreature artifact you control becomes"), new ManaCostsImpl<>("{2}{G}"));
|
||||
ability.addEffect(new SetBasePowerToughnessTargetEffect(
|
||||
4, 4, Duration.EndOfTurn
|
||||
).setText(" a 4/4 artifact creature until end of turn"));
|
||||
).setText(" a 4/4 artifact creature"));
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ class WoodlandChampionTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever one or more tokens enter the battlefield under your control, " +
|
||||
return "Whenever one or more tokens you control enter, " +
|
||||
"put that many +1/+1 counters on {this}.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ public class VerifyCardDataTest {
|
|||
|
||||
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
|
||||
|
||||
private static final String FULL_ABILITIES_CHECK_SET_CODES = "ODY,TOR,JUD,ONS,LGN,SCG"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
|
||||
private static final String FULL_ABILITIES_CHECK_SET_CODES = "J25"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
|
||||
private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
|
||||
private static final boolean CHECK_COPYABLE_FIELDS = true; // disable for better verify test performance
|
||||
|
||||
|
|
|
|||
|
|
@ -1,54 +0,0 @@
|
|||
package mage.abilities.condition.common;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class ControlsPermanentGreatestCMCCondition implements Condition {
|
||||
|
||||
private final FilterPermanent filter;
|
||||
|
||||
public ControlsPermanentGreatestCMCCondition() {
|
||||
this(new FilterPermanent());
|
||||
}
|
||||
|
||||
public ControlsPermanentGreatestCMCCondition(FilterPermanent filter) {
|
||||
super();
|
||||
this.filter = filter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Set<UUID> controllers = new HashSet<>();
|
||||
Integer maxCMC = null;
|
||||
|
||||
List<Permanent> permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source, game);
|
||||
for (Permanent permanent : permanents) {
|
||||
int cmc = permanent.getManaCost().manaValue();
|
||||
if (maxCMC == null || cmc > maxCMC) {
|
||||
maxCMC = cmc;
|
||||
controllers.clear();
|
||||
}
|
||||
if (cmc == maxCMC) {
|
||||
controllers.add(permanent.getControllerId());
|
||||
}
|
||||
}
|
||||
return controllers.contains(source.getControllerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "you control the " + filter.getMessage() + " with the highest mana value or tied for the highest mana value";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -11,14 +11,14 @@ import mage.constants.SubType;
|
|||
public final class FishToken extends TokenImpl {
|
||||
|
||||
public FishToken() {
|
||||
super("Fish Token", "1/1 blue Fish creature token with \"This creature can't be blocked.\"");
|
||||
super("Fish Token", "1/1 blue Fish creature token with \"This token can't be blocked.\"");
|
||||
cardType.add(CardType.CREATURE);
|
||||
subtype.add(SubType.FISH);
|
||||
color.setBlue(true);
|
||||
power = new MageInt(1);
|
||||
toughness = new MageInt(1);
|
||||
|
||||
addAbility(new CantBeBlockedSourceAbility("this creature can't be blocked"));
|
||||
addAbility(new CantBeBlockedSourceAbility("this token can't be blocked"));
|
||||
}
|
||||
|
||||
private FishToken(final FishToken token) {
|
||||
|
|
|
|||
|
|
@ -980,7 +980,7 @@ public final class CardUtil {
|
|||
}
|
||||
if (!targetPlayerGets) {
|
||||
sb.append(add ? " on " : " from ");
|
||||
if (description.contains("up to")) {
|
||||
if (description.contains("up to") && !description.contains("up to one")) {
|
||||
sb.append("each of ");
|
||||
}
|
||||
sb.append(description);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue