mirror of
https://github.com/correl/mage.git
synced 2024-11-14 19:19:32 +00:00
[LTR] Implement Dunland Crebain
This commit is contained in:
parent
82073bba73
commit
b9f31eb937
27 changed files with 213 additions and 72 deletions
|
@ -34,7 +34,7 @@ public final class AngrathCaptainOfChaos extends CardImpl {
|
|||
)));
|
||||
|
||||
// -2: Amass 2. (Put two +1/+1 counters on an Army you control. If you don’t control one, create a 0/0 black Zombie Army creature token first.)
|
||||
this.addAbility(new LoyaltyAbility(new AmassEffect(2), -2));
|
||||
this.addAbility(new LoyaltyAbility(new AmassEffect(2, SubType.ZOMBIE), -2));
|
||||
}
|
||||
|
||||
private AngrathCaptainOfChaos(final AngrathCaptainOfChaos card) {
|
||||
|
|
|
@ -29,7 +29,7 @@ public final class AvenEternal extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Aven Eternal enters the battlefield, amass 1.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(1)));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(1, SubType.ZOMBIE)));
|
||||
}
|
||||
|
||||
private AvenEternal(final AvenEternal card) {
|
||||
|
|
|
@ -6,6 +6,7 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
@ -21,7 +22,7 @@ public final class BleedingEdge extends CardImpl {
|
|||
// Up to one target creature gets -2/-2 until end of turn. Amass 2.
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(-2, -2, Duration.EndOfTurn));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 1));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(2));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(2, SubType.ZOMBIE));
|
||||
}
|
||||
|
||||
private BleedingEdge(final BleedingEdge card) {
|
||||
|
|
|
@ -5,6 +5,7 @@ import mage.abilities.effects.keyword.AmassEffect;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.target.common.TargetNonlandPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
@ -22,7 +23,7 @@ public final class CallousDismissal extends CardImpl {
|
|||
this.getSpellAbility().addTarget(new TargetNonlandPermanent());
|
||||
|
||||
// Amass 1.
|
||||
this.getSpellAbility().addEffect(new AmassEffect(1).concatBy("<br>"));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(1, SubType.ZOMBIE).concatBy("<br>"));
|
||||
}
|
||||
|
||||
private CallousDismissal(final CallousDismissal card) {
|
||||
|
|
|
@ -8,6 +8,7 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
|
@ -42,7 +43,9 @@ class CommenceTheEndgameEffect extends OneShotEffect {
|
|||
|
||||
CommenceTheEndgameEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "Draw two cards, then amass X, where X is the number of cards in your hand.";
|
||||
staticText = "draw two cards, then amass Zombies X, where X is the number of cards in your hand. " +
|
||||
"<i>(Put X +1/+1 counterson an Army you control. It's also a Zombie. If you don't control an Army, " +
|
||||
"create a 0/0 black Zombie Army creature token first.)</i>";
|
||||
}
|
||||
|
||||
private CommenceTheEndgameEffect(final CommenceTheEndgameEffect effect) {
|
||||
|
@ -61,6 +64,7 @@ class CommenceTheEndgameEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
player.drawCards(2, source, game);
|
||||
return new AmassEffect(player.getHand().size()).apply(game, source);
|
||||
AmassEffect.doAmass(player.getHand().size(), SubType.ZOMBIE, game, source);
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ import mage.abilities.effects.keyword.AmassEffect;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.target.TargetSpell;
|
||||
|
||||
import java.util.UUID;
|
||||
|
@ -23,7 +24,7 @@ public final class CrushDissent extends CardImpl {
|
|||
this.getSpellAbility().addTarget(new TargetSpell());
|
||||
|
||||
// Amass 2.
|
||||
this.getSpellAbility().addEffect(new AmassEffect(2));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(2, SubType.ZOMBIE));
|
||||
}
|
||||
|
||||
private CrushDissent(final CrushDissent card) {
|
||||
|
|
|
@ -37,7 +37,7 @@ public final class DreadhordeInvasion extends CardImpl {
|
|||
Ability ability = new BeginningOfUpkeepTriggeredAbility(
|
||||
new LoseLifeSourceControllerEffect(1), TargetController.YOU, false
|
||||
);
|
||||
ability.addEffect(new AmassEffect(1).concatBy("and"));
|
||||
ability.addEffect(new AmassEffect(1, SubType.ZOMBIE).concatBy("and"));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Whenever a Zombie token you control with power 6 or greater attacks, it gains lifelink until end of turn.
|
||||
|
|
|
@ -37,7 +37,7 @@ public final class DreadhordeTwins extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Dreadhorde Twins enters the battlefield, amass 2.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(2)));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(2, SubType.ZOMBIE)));
|
||||
|
||||
// Zombie tokens you control have trample.
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
|
|
42
Mage.Sets/src/mage/cards/d/DunlandCrebain.java
Normal file
42
Mage.Sets/src/mage/cards/d/DunlandCrebain.java
Normal file
|
@ -0,0 +1,42 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.keyword.AmassEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DunlandCrebain extends CardImpl {
|
||||
|
||||
public DunlandCrebain(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||
|
||||
this.subtype.add(SubType.BIRD);
|
||||
this.subtype.add(SubType.HORROR);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Dunland Crebain enters the battlefield, amass Orcs 2.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(2, SubType.ORC)));
|
||||
}
|
||||
|
||||
private DunlandCrebain(final DunlandCrebain card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DunlandCrebain copy() {
|
||||
return new DunlandCrebain(this);
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
@ -75,6 +76,6 @@ class EnterTheGodEternalsEffect extends OneShotEffect {
|
|||
}
|
||||
}
|
||||
}
|
||||
return new AmassEffect(4).apply(game, source);
|
||||
return new AmassEffect(4, SubType.ZOMBIE).apply(game, source);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ public final class EternalSkylord extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// When Eternal Skylord enters the batttlefield, amass 2.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(2)));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(2, SubType.ZOMBIE)));
|
||||
|
||||
// Zombie tokens you control have flying.
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
|
|
|
@ -38,7 +38,7 @@ public final class GleamingOverseer extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// When Gleaming Overseer enters the battlefield, amass 1.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(1)));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(1, SubType.ZOMBIE)));
|
||||
|
||||
// Zombie tokens you control have hexproof and menace.
|
||||
Ability ability = new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
|
|
|
@ -28,7 +28,7 @@ public final class GrimInitiate extends CardImpl {
|
|||
this.addAbility(FirstStrikeAbility.getInstance());
|
||||
|
||||
// When Grim Initiate dies, amass 1.
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new AmassEffect(1)));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new AmassEffect(1, SubType.ZOMBIE)));
|
||||
}
|
||||
|
||||
private GrimInitiate(final GrimInitiate card) {
|
||||
|
|
|
@ -24,7 +24,7 @@ public final class HeraldOfTheDreadhorde extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Herald of the Dreadhorde dies, amass 2.
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new AmassEffect(2)));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new AmassEffect(2, SubType.ZOMBIE)));
|
||||
}
|
||||
|
||||
private HeraldOfTheDreadhorde(final HeraldOfTheDreadhorde card) {
|
||||
|
|
|
@ -7,6 +7,7 @@ import mage.abilities.effects.keyword.AmassEffect;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
@ -21,7 +22,7 @@ public final class HonorTheGodPharaoh extends CardImpl {
|
|||
|
||||
// Draw two cards. Amass 1.
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).setText("draw two cards"));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(1));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(1, SubType.ZOMBIE));
|
||||
}
|
||||
|
||||
private HonorTheGodPharaoh(final HonorTheGodPharaoh card) {
|
||||
|
|
|
@ -1,11 +1,19 @@
|
|||
package mage.cards.i;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.keyword.AmassEffect;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.hint.ValueHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.common.FilterInstantOrSorceryCard;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -14,14 +22,16 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class InvadeTheCity extends CardImpl {
|
||||
|
||||
public static final FilterInstantOrSorceryCard filter
|
||||
= new FilterInstantOrSorceryCard("instant and sorcery cards");
|
||||
private static final Hint hint = new ValueHint(
|
||||
"Instants and sorceries in your graveyard",
|
||||
new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY)
|
||||
);
|
||||
|
||||
public InvadeTheCity(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}{R}");
|
||||
|
||||
// Amass X, where X is the number of instant and sorcery cards in your graveyard.
|
||||
this.getSpellAbility().addEffect(new AmassEffect(new CardsInControllerGraveyardCount(filter)));
|
||||
this.getSpellAbility().addEffect(new InvadeTheCityEffect());
|
||||
}
|
||||
|
||||
private InvadeTheCity(final InvadeTheCity card) {
|
||||
|
@ -33,3 +43,33 @@ public final class InvadeTheCity extends CardImpl {
|
|||
return new InvadeTheCity(this);
|
||||
}
|
||||
}
|
||||
|
||||
class InvadeTheCityEffect extends OneShotEffect {
|
||||
|
||||
InvadeTheCityEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "amass Zombies X, where X is the number of instant and sorcery cards in your graveyard. " +
|
||||
"<i>(Put X +1/+1 counterson an Army you control. It's also a Zombie. If you don't control an Army, " +
|
||||
"create a 0/0 black Zombie Army creature token first.)</i>";
|
||||
}
|
||||
|
||||
private InvadeTheCityEffect(final InvadeTheCityEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InvadeTheCityEffect copy() {
|
||||
return new InvadeTheCityEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player == null) {
|
||||
return false;
|
||||
}
|
||||
return AmassEffect.doAmass(player.getGraveyard().count(
|
||||
StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY, game
|
||||
), SubType.ZOMBIE, game, source) != null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ public final class InvadingManticore extends CardImpl {
|
|||
this.toughness = new MageInt(5);
|
||||
|
||||
// When Invading Manticore enters the battlefield, amass 2.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(2)));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(2, SubType.ZOMBIE)));
|
||||
}
|
||||
|
||||
private InvadingManticore(final InvadingManticore card) {
|
||||
|
|
|
@ -27,7 +27,7 @@ public final class LazotepChancellor extends CardImpl {
|
|||
|
||||
// Whenever you discard a card, you may pay {1}. If you do, amass 2.
|
||||
this.addAbility(new DiscardCardControllerTriggeredAbility(
|
||||
new DoIfCostPaid(new AmassEffect(2), new GenericManaCost(1)), false
|
||||
new DoIfCostPaid(new AmassEffect(2, SubType.ZOMBIE), new GenericManaCost(1)), false
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ import mage.constants.Duration;
|
|||
import java.util.UUID;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControllerEffect;
|
||||
import mage.constants.SubType;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
@ -21,7 +22,7 @@ public final class LazotepPlating extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
|
||||
|
||||
// Amass 1.
|
||||
this.getSpellAbility().addEffect(new AmassEffect(1));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(1, SubType.ZOMBIE));
|
||||
|
||||
// You and permanents you control gain hexproof until end of turn.
|
||||
Effect effect = new GainAbilityControllerEffect(
|
||||
|
|
|
@ -24,7 +24,7 @@ public final class LazotepReaver extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Lazotep Reaver enters the battlefield, amass 1.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(1)));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(1, SubType.ZOMBIE)));
|
||||
}
|
||||
|
||||
private LazotepReaver(final LazotepReaver card) {
|
||||
|
|
|
@ -4,6 +4,7 @@ import mage.abilities.effects.keyword.AmassEffect;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -16,7 +17,7 @@ public final class RelentlessAdvance extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{U}");
|
||||
|
||||
// Amass 3. (Put three +1/+1 counters on an Army you control. If you don't control one, create a 0/0 black Zombie Army creature token first.
|
||||
this.getSpellAbility().addEffect(new AmassEffect(3));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(3, SubType.ZOMBIE));
|
||||
}
|
||||
|
||||
private RelentlessAdvance(final RelentlessAdvance card) {
|
||||
|
|
|
@ -5,6 +5,7 @@ import mage.abilities.effects.keyword.AmassEffect;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetOpponent;
|
||||
|
||||
|
@ -23,7 +24,7 @@ public final class TollOfTheInvasion extends CardImpl {
|
|||
this.getSpellAbility().addTarget(new TargetOpponent());
|
||||
|
||||
// Amass 1.
|
||||
this.getSpellAbility().addEffect(new AmassEffect(1).concatBy("<br>"));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(1, SubType.ZOMBIE).concatBy("<br>"));
|
||||
}
|
||||
|
||||
private TollOfTheInvasion(final TollOfTheInvasion card) {
|
||||
|
|
|
@ -36,7 +36,7 @@ public final class VizierOfTheScorpion extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// When Vizier of the Scorpion enters the battlefield, amass 1.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(1)));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AmassEffect(1, SubType.ZOMBIE)));
|
||||
|
||||
// Zombie tokens you control have deathtouch.
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
|
|
|
@ -8,6 +8,9 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
|
@ -37,11 +40,17 @@ public final class WidespreadBrutality extends CardImpl {
|
|||
|
||||
class WidespreadBrutalityEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent();
|
||||
|
||||
static {
|
||||
filter.add(Predicates.not(SubType.ARMY.getPredicate()));
|
||||
}
|
||||
|
||||
WidespreadBrutalityEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "Amass 2, then the Army you amassed deals damage equal to its power to each non-Army creature. " +
|
||||
"<i>(To amass 2, put two +1/+1 counters on an Army you control. " +
|
||||
"If you don't control one, create a 0/0 black Zombie Army creature token first.)</i>";
|
||||
staticText = "amass Zombies 2, then the Army you amassed deals damage equal to its power " +
|
||||
"to each non-Army creature. <i>(To amass 2, put two +1/+1 counters on an Army you control. It's also " +
|
||||
"a Zombie. If you don't control one, create a 0/0 black Zombie Army creature token first.)</i>";
|
||||
}
|
||||
|
||||
private WidespreadBrutalityEffect(final WidespreadBrutalityEffect effect) {
|
||||
|
@ -55,18 +64,16 @@ class WidespreadBrutalityEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
AmassEffect amassEffect = new AmassEffect(2);
|
||||
amassEffect.apply(game, source);
|
||||
Permanent amassedArmy = game.getPermanent(amassEffect.getAmassedCreatureId());
|
||||
Permanent amassedArmy = AmassEffect.doAmass(2, SubType.ZOMBIE, game, source);
|
||||
if (amassedArmy == null) {
|
||||
return false;
|
||||
}
|
||||
game.getState().processAction(game);
|
||||
int power = amassedArmy.getPower().getValue();
|
||||
for (Permanent permanent : game.getBattlefield().getActivePermanents(source.getControllerId(), game)) {
|
||||
if (permanent != null && permanent.isCreature(game) && !permanent.hasSubtype(SubType.ARMY, game)) {
|
||||
permanent.damage(power, amassedArmy.getId(), source, game);
|
||||
}
|
||||
for (Permanent permanent : game.getBattlefield().getActivePermanents(
|
||||
filter, source.getControllerId(), source, game
|
||||
)) {
|
||||
permanent.damage(power, amassedArmy.getId(), source, game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ public final class TheLordOfTheRingsTalesOfMiddleEarth extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Aragorn and Arwen, Wed", 287, Rarity.MYTHIC, mage.cards.a.AragornAndArwenWed.class));
|
||||
cards.add(new SetCardInfo("Bilbo, Retired Burglar", 196, Rarity.UNCOMMON, mage.cards.b.BilboRetiredBurglar.class));
|
||||
cards.add(new SetCardInfo("Call of the Ring", 79, Rarity.RARE, mage.cards.c.CallOfTheRing.class));
|
||||
cards.add(new SetCardInfo("Dunland Crebain", 82, Rarity.COMMON, mage.cards.d.DunlandCrebain.class));
|
||||
cards.add(new SetCardInfo("Forest", 280, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
|
||||
cards.add(new SetCardInfo("Frodo Baggins", 205, Rarity.UNCOMMON, mage.cards.f.FrodoBaggins.class));
|
||||
cards.add(new SetCardInfo("Frodo, Sauron's Bane", 18, Rarity.RARE, mage.cards.f.FrodoSauronsBane.class));
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
package mage.abilities.effects.keyword;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.continuous.AddCardSubTypeTargetEffect;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
|
@ -12,14 +11,15 @@ import mage.filter.FilterPermanent;
|
|||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.OrcArmyToken;
|
||||
import mage.game.permanent.token.Token;
|
||||
import mage.game.permanent.token.ZombieArmyToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
|
@ -31,28 +31,23 @@ public class AmassEffect extends OneShotEffect {
|
|||
filter.add(SubType.ARMY.getPredicate());
|
||||
}
|
||||
|
||||
private final DynamicValue amassNumber;
|
||||
private UUID amassedCreatureId = null;
|
||||
private final int amount;
|
||||
private final SubType subType;
|
||||
|
||||
public AmassEffect(int amassNumber) {
|
||||
this(StaticValue.get(amassNumber));
|
||||
staticText = "amass " + amassNumber + ". <i>(Put " + CardUtil.numberToText(amassNumber)
|
||||
+ " +1/+1 counter" + (amassNumber > 1 ? "s " : " ")
|
||||
+ "on an Army you control. If you don't control one, "
|
||||
+ "create a 0/0 black Zombie Army creature token first.)</i>";
|
||||
}
|
||||
|
||||
public AmassEffect(DynamicValue amassNumber) {
|
||||
public AmassEffect(int amount, SubType subType) {
|
||||
super(Outcome.BoostCreature);
|
||||
this.amassNumber = amassNumber;
|
||||
staticText = "amass X, where X is the number of " + amassNumber.getMessage() + ". <i>(Put X +1/+1 counters"
|
||||
+ "on an Army you control. If you don't control one, "
|
||||
+ "create a 0/0 black Zombie Army creature token first.)</i>";
|
||||
this.amount = amount;
|
||||
this.subType = subType;
|
||||
staticText = "amass " + subType + "s " + amount + ". <i>(Put " + CardUtil.numberToText(amount) +
|
||||
" +1/+1 counter" + (amount > 1 ? "s " : " ") + "on an Army you control. It's also " +
|
||||
subType.getIndefiniteArticle() + ' ' + subType + ". If you don't control an Army, " +
|
||||
"create a 0/0 black " + subType + " Army creature token first.)</i>";
|
||||
}
|
||||
|
||||
private AmassEffect(final AmassEffect effect) {
|
||||
super(effect);
|
||||
this.amassNumber = effect.amassNumber;
|
||||
this.amount = effect.amount;
|
||||
this.subType = effect.subType;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -62,29 +57,42 @@ public class AmassEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int xValue = amassNumber.calculate(game, source, this);
|
||||
return doAmass(amount, subType, game, source) != null;
|
||||
}
|
||||
|
||||
private static Token makeToken(SubType subType) {
|
||||
switch (subType) {
|
||||
case ORC:
|
||||
return new OrcArmyToken();
|
||||
default:
|
||||
case ZOMBIE:
|
||||
return new ZombieArmyToken();
|
||||
}
|
||||
}
|
||||
|
||||
public static Permanent doAmass(int xValue, SubType subType, Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player == null) {
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
if (!game.getBattlefield().containsControlled(filter, source, game, 1)) {
|
||||
new CreateTokenEffect(new ZombieArmyToken()).apply(game, source);
|
||||
if (!game.getBattlefield().contains(filter, source, game, 1)) {
|
||||
makeToken(subType).putOntoBattlefield(1, game, source);
|
||||
}
|
||||
Target target = new TargetPermanent(filter);
|
||||
target.setNotTarget(true);
|
||||
if (!player.choose(outcome, target, source, game)) {
|
||||
return false;
|
||||
}
|
||||
player.choose(Outcome.BoostCreature, target, source, game);
|
||||
Permanent permanent = game.getPermanent(target.getFirstTarget());
|
||||
if (permanent == null) {
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
permanent.addCounters(CounterType.P1P1.createInstance(xValue), source.getControllerId(), source, game);
|
||||
this.amassedCreatureId = permanent.getId();
|
||||
return true;
|
||||
}
|
||||
|
||||
public UUID getAmassedCreatureId() {
|
||||
return amassedCreatureId;
|
||||
game.addEffect(new AddCardSubTypeTargetEffect(subType, Duration.Custom)
|
||||
.setTargetPointer(new FixedTarget(permanent, game)), source);
|
||||
if (xValue > 0) {
|
||||
permanent.addCounters(
|
||||
CounterType.P1P1.createInstance(xValue),
|
||||
source.getControllerId(), source, game
|
||||
);
|
||||
}
|
||||
return permanent;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
package mage.game.permanent.token;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class OrcArmyToken extends TokenImpl {
|
||||
|
||||
public OrcArmyToken() {
|
||||
super("Orc Army Token", "0/0 black Orc Army creature token");
|
||||
|
||||
cardType.add(CardType.CREATURE);
|
||||
color.setBlack(true);
|
||||
subtype.add(SubType.ORC);
|
||||
subtype.add(SubType.ARMY);
|
||||
power = new MageInt(0);
|
||||
toughness = new MageInt(0);
|
||||
}
|
||||
|
||||
private OrcArmyToken(final OrcArmyToken token) {
|
||||
super(token);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrcArmyToken copy() {
|
||||
return new OrcArmyToken(this);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue