mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
[KHM] more text fixes
This commit is contained in:
parent
8f4d3d9673
commit
f9dfb56d4e
10 changed files with 63 additions and 109 deletions
|
@ -4,7 +4,8 @@ import mage.abilities.effects.common.SacrificeAllEffect;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -13,14 +14,13 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class BarterInBlood extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("creatures");
|
||||
|
||||
public BarterInBlood(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}{B}");
|
||||
|
||||
|
||||
// Each player sacrifices two creatures.
|
||||
this.getSpellAbility().addEffect(new SacrificeAllEffect(
|
||||
2, StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT
|
||||
));
|
||||
this.getSpellAbility().addEffect(new SacrificeAllEffect(2, filter));
|
||||
}
|
||||
|
||||
public BarterInBlood(final BarterInBlood card) {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package mage.cards.e;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.CompoundAbility;
|
||||
|
@ -8,16 +7,17 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.abilities.mana.AnyColorManaAbility;
|
||||
import mage.cards.*;
|
||||
import mage.constants.*;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class EsikaGodOfTheTree extends ModalDoubleFacesCard {
|
||||
|
@ -50,7 +50,7 @@ public final class EsikaGodOfTheTree extends ModalDoubleFacesCard {
|
|||
this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
new CompoundAbility(VigilanceAbility.getInstance(), new AnyColorManaAbility()),
|
||||
Duration.WhileOnBattlefield, filter, true
|
||||
)));
|
||||
).setText("other legendary creatures you control have vigilance and \"{T}: Add one mana of any color.\"")));
|
||||
|
||||
// 2.
|
||||
// The Prismatic Bridge
|
||||
|
|
|
@ -32,7 +32,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
public final class FirjasRetribution extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter
|
||||
= new FilterCreaturePermanent("creature with less power than this creature's power");
|
||||
= new FilterCreaturePermanent("creature with power less than this creature's power");
|
||||
private static final FilterControlledPermanent filter2
|
||||
= new FilterControlledPermanent(SubType.ANGEL, "Angels you control");
|
||||
|
||||
|
@ -56,7 +56,7 @@ public final class FirjasRetribution extends CardImpl {
|
|||
ability.addTarget(new TargetCreaturePermanent(filter));
|
||||
sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new GainAbilityAllEffect(
|
||||
ability, Duration.EndOfTurn, filter2
|
||||
));
|
||||
).setText("until end of turn, Angels you control gain \"{T}: Destroy target creature with power less than this creature's power.\""));
|
||||
|
||||
// III — Angels you control gain double strike until end of turn.
|
||||
sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new GainAbilityAllEffect(
|
||||
|
|
|
@ -9,7 +9,6 @@ import mage.abilities.costs.Costs;
|
|||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
|
||||
import mage.cards.Card;
|
||||
|
@ -32,9 +31,12 @@ public class GlimpseTheCosmos extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}");
|
||||
|
||||
// Look at the top three cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order.
|
||||
Effect glimpseTheCosmosEffect = new LookLibraryAndPickControllerEffect(StaticValue.get(3), false, StaticValue.get(1),
|
||||
StaticFilters.FILTER_CARD, Zone.LIBRARY, false, false, false, Zone.HAND, false);
|
||||
this.getSpellAbility().addEffect(glimpseTheCosmosEffect);
|
||||
this.getSpellAbility().addEffect(new LookLibraryAndPickControllerEffect(
|
||||
StaticValue.get(3), false, StaticValue.get(1),
|
||||
StaticFilters.FILTER_CARD, Zone.LIBRARY, false,
|
||||
false, false, Zone.HAND, false
|
||||
).setText("look at the top three cards of your library. " +
|
||||
"Put one of them into your hand and the rest on the bottom of your library in any order"));
|
||||
|
||||
//As long as you control a Giant, you may cast Glimpse the Cosmos from your graveyard by paying {U} rather than paying its mana cost. If you cast Glimpse the Cosmos this way and it would be put into your graveyard, exile it instead.
|
||||
this.addAbility(new GlimpseTheCosmosAbility(new ManaCostsImpl("{U}")));
|
||||
|
@ -80,7 +82,7 @@ class GlimpseTheCosmosAbility extends SpellAbility {
|
|||
}
|
||||
|
||||
//Must control a giant
|
||||
Condition controlGiantCondition = new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.GIANT, "you control a Giant"));
|
||||
Condition controlGiantCondition = new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.GIANT, "you control a Giant"));
|
||||
if (!controlGiantCondition.apply(game, this)) {
|
||||
return ActivationStatus.getFalse();
|
||||
}
|
||||
|
|
|
@ -5,7 +5,8 @@ import mage.abilities.keyword.ForetellAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -14,13 +15,13 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class TergridsShadow extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("creatures");
|
||||
|
||||
public TergridsShadow(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{B}{B}");
|
||||
|
||||
// Each player sacrifices two creatures.
|
||||
this.getSpellAbility().addEffect(new SacrificeAllEffect(
|
||||
2, StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT
|
||||
));
|
||||
this.getSpellAbility().addEffect(new SacrificeAllEffect(2, filter));
|
||||
|
||||
// Foretell {2}{B}{B}
|
||||
this.addAbility(new ForetellAbility(this, "{2}{B}{B}"));
|
||||
|
|
|
@ -1,24 +1,28 @@
|
|||
package mage.cards.t;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SagaAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.MillCardsControllerEffect;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||
import mage.cards.*;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.Cards;
|
||||
import mage.cards.CardsImpl;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterPermanentCard;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.TargetEvent;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetCard;
|
||||
import mage.target.common.TargetCardInGraveyard;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class TheThreeSeasons extends CardImpl {
|
||||
|
@ -63,12 +67,12 @@ public final class TheThreeSeasons extends CardImpl {
|
|||
|
||||
class TheThreeSeasonsEffect extends OneShotEffect {
|
||||
|
||||
public TheThreeSeasonsEffect() {
|
||||
TheThreeSeasonsEffect() {
|
||||
super(Outcome.Neutral);
|
||||
staticText = "Choose up to three cards in each graveyard. Their owners shuffle those cards into their libraries";
|
||||
staticText = "Choose three cards in each graveyard. Their owners shuffle those cards into their libraries";
|
||||
}
|
||||
|
||||
private TheThreeSeasonsEffect (final TheThreeSeasonsEffect effect) {
|
||||
private TheThreeSeasonsEffect(final TheThreeSeasonsEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
|
@ -80,83 +84,27 @@ class TheThreeSeasonsEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
Map<Player, Cards> playerCardsMap = new LinkedHashMap<>();
|
||||
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
TheThreeSeasonsTarget target = new TheThreeSeasonsTarget(player);
|
||||
controller.chooseTarget(outcome, target, source, game);
|
||||
playerCardsMap.put(player, new CardsImpl(target.getTargets()));
|
||||
}
|
||||
}
|
||||
for (Map.Entry<Player, Cards> entry : playerCardsMap.entrySet()) {
|
||||
entry.getKey().shuffleCardsToLibrary(entry.getValue(), game, source);
|
||||
}
|
||||
return true;
|
||||
if (controller == null) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class TheThreeSeasonsTarget extends TargetCard {
|
||||
|
||||
private final Player player;
|
||||
|
||||
public TheThreeSeasonsTarget(Player player) {
|
||||
super(0, 3, Zone.GRAVEYARD, new FilterCard(
|
||||
"cards in " + player.getLogName() + "'s graveyard"
|
||||
));
|
||||
this.setNotTarget(true);
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
private TheThreeSeasonsTarget(final TheThreeSeasonsTarget target) {
|
||||
super(target);
|
||||
this.player = target.player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TheThreeSeasonsTarget copy() {
|
||||
return new TheThreeSeasonsTarget(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTarget(UUID id, Game game) {
|
||||
Card card = game.getCard(id);
|
||||
return card != null && game.getState().getZone(card.getId()) == Zone.GRAVEYARD
|
||||
&& player.getGraveyard().contains(id) && filter.match(card, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTarget(UUID id, Ability source, Game game) {
|
||||
return this.canTarget(id, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTarget(UUID playerId, UUID id, Ability source, Game game) {
|
||||
return this.canTarget(id, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||
Set<UUID> possibleTargets = new HashSet<>();
|
||||
for (Card card : player.getGraveyard().getCards(filter, game)) {
|
||||
if (sourceId == null || isNotTarget() || !game.replaceEvent(new TargetEvent(card, sourceId, sourceControllerId))) {
|
||||
possibleTargets.add(card.getId());
|
||||
}
|
||||
}
|
||||
return possibleTargets;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> possibleTargets(UUID sourceControllerId, Cards cards, Game game) {
|
||||
Set<UUID> possibleTargets = new HashSet<>();
|
||||
for (Card card : cards.getCards(filter, game)) {
|
||||
if (player.getGraveyard().getCards(game).contains(card)) {
|
||||
possibleTargets.add(card.getId());
|
||||
}
|
||||
}
|
||||
return possibleTargets;
|
||||
Map<Player, Cards> playerCardsMap = new LinkedHashMap<>();
|
||||
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player == null) {
|
||||
continue;
|
||||
}
|
||||
int cardCount = Math.min(player.getGraveyard().size(), 3);
|
||||
if (cardCount < 1) {
|
||||
continue;
|
||||
}
|
||||
TargetCard target = new TargetCardInGraveyard(cardCount, StaticFilters.FILTER_CARD);
|
||||
target.setNotTarget(true);
|
||||
controller.chooseTarget(outcome, player.getGraveyard(), target, source, game);
|
||||
playerCardsMap.put(player, new CardsImpl(target.getTargets()));
|
||||
}
|
||||
for (Map.Entry<Player, Cards> entry : playerCardsMap.entrySet()) {
|
||||
entry.getKey().shuffleCardsToLibrary(entry.getValue(), game, source);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ public final class TheTricksterGodsHeist extends CardImpl {
|
|||
|
||||
// II — You may exchange control of two target nonbasic, noncreature permanents that share a card type.
|
||||
sagaAbility.addChapterEffect(
|
||||
this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_I,
|
||||
this, SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_II,
|
||||
new ExchangeControlTargetEffect(
|
||||
Duration.EndOfGame, "exchange control of two target nonbasic, " +
|
||||
"noncreature permanents that share a card type"
|
||||
|
|
|
@ -4,7 +4,6 @@ import com.google.common.base.CharMatcher;
|
|||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.keyword.ScryEffect;
|
||||
import mage.abilities.keyword.ChangelingAbility;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.abilities.keyword.MultikickerAbility;
|
||||
import mage.cards.*;
|
||||
|
@ -1497,7 +1496,7 @@ public class VerifyCardDataTest {
|
|||
}
|
||||
// mana ability fix
|
||||
for (String s : refText.split("[\\$\\\n]")) {
|
||||
if (!s.startsWith("{T}: Add {") || !s.contains("} or {")) {
|
||||
if (!(s.startsWith("{T}: Add {") || s.startsWith("({T}: Add {")) || !s.contains("} or {")) {
|
||||
continue;
|
||||
}
|
||||
String newStr = "";
|
||||
|
|
|
@ -121,6 +121,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
|||
|| ruleLow.startsWith("put")
|
||||
|| ruleLow.startsWith("remove")
|
||||
|| ruleLow.startsWith("counter")
|
||||
|| ruleLow.startsWith("exchange")
|
||||
|| ruleLow.startsWith("goad")) {
|
||||
sb.append("you may ");
|
||||
} else if (!ruleLow.startsWith("its controller may")) {
|
||||
|
|
|
@ -103,6 +103,9 @@ public class BoostTargetEffect extends ContinuousEffectImpl {
|
|||
}
|
||||
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(" target ").append(target.getTargetName()).append(" get ");
|
||||
} else {
|
||||
if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) {
|
||||
sb.append("up to ").append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' ');
|
||||
}
|
||||
if (!target.getTargetName().toLowerCase(Locale.ENGLISH).startsWith("another")) {
|
||||
sb.append("target ");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue