mirror of
https://github.com/correl/mage.git
synced 2024-11-15 19:19:33 +00:00
Merge origin/master
This commit is contained in:
commit
ca033647d3
10 changed files with 40 additions and 28 deletions
|
@ -68,7 +68,7 @@ class CertainDeathEffect extends OneShotEffect {
|
||||||
|
|
||||||
public CertainDeathEffect() {
|
public CertainDeathEffect() {
|
||||||
super(Outcome.DestroyPermanent);
|
super(Outcome.DestroyPermanent);
|
||||||
this.staticText = "Destroy target creature. Its controler loses 2 life and you gain 2 life";
|
this.staticText = "Destroy target creature. Its controller loses 2 life and you gain 2 life";
|
||||||
}
|
}
|
||||||
|
|
||||||
public CertainDeathEffect(final CertainDeathEffect effect) {
|
public CertainDeathEffect(final CertainDeathEffect effect) {
|
||||||
|
|
|
@ -77,8 +77,10 @@ public class Cryptbreaker extends CardImpl {
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Tap three untapped Zombies you control: You draw a card and you lose 1 life.
|
// Tap three untapped Zombies you control: You draw a card and you lose 1 life.
|
||||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new TapTargetCost(new TargetControlledCreaturePermanent(3, 3, filter, true)));
|
Effect effect = new DrawCardSourceControllerEffect(1);
|
||||||
Effect effect = new LoseLifeSourceControllerEffect(1);
|
effect.setText("You draw a card");
|
||||||
|
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapTargetCost(new TargetControlledCreaturePermanent(3, 3, filter, true)));
|
||||||
|
effect = new LoseLifeSourceControllerEffect(1);
|
||||||
effect.setText("and you lose 1 life");
|
effect.setText("and you lose 1 life");
|
||||||
ability.addEffect(effect);
|
ability.addEffect(effect);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -41,8 +41,8 @@ import mage.constants.Rarity;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
|
||||||
import mage.game.permanent.token.ZombieToken;
|
import mage.game.permanent.token.ZombieToken;
|
||||||
|
import mage.players.Player;
|
||||||
import mage.target.TargetPlayer;
|
import mage.target.TargetPlayer;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
import mage.target.targetpointer.SecondTargetPointer;
|
import mage.target.targetpointer.SecondTargetPointer;
|
||||||
|
@ -62,9 +62,9 @@ public class DarkSalvation extends CardImpl {
|
||||||
Effect effect = new CreateTokenTargetEffect(new ZombieToken(), new ManacostVariableValue());
|
Effect effect = new CreateTokenTargetEffect(new ZombieToken(), new ManacostVariableValue());
|
||||||
effect.setText("Target player puts X 2/2 black Zombie creature tokens onto the battlefield");
|
effect.setText("Target player puts X 2/2 black Zombie creature tokens onto the battlefield");
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 1, new FilterCreaturePermanent(), false));
|
DynamicValue value = new ZombiesControlledByTargetPlayerCount();
|
||||||
|
|
||||||
DynamicValue value = new ZombiesControlledByTargetCreaturesControllerCount();
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 1, new FilterCreaturePermanent(), false));
|
||||||
effect = new BoostTargetEffect(value, value, Duration.EndOfTurn, true);
|
effect = new BoostTargetEffect(value, value, Duration.EndOfTurn, true);
|
||||||
effect.setTargetPointer(new SecondTargetPointer());
|
effect.setTargetPointer(new SecondTargetPointer());
|
||||||
effect.setText(", then up to one target creature gets -1/-1 until end of turn for each Zombie that player controls");
|
effect.setText(", then up to one target creature gets -1/-1 until end of turn for each Zombie that player controls");
|
||||||
|
@ -81,7 +81,7 @@ public class DarkSalvation extends CardImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ZombiesControlledByTargetCreaturesControllerCount implements DynamicValue {
|
class ZombiesControlledByTargetPlayerCount implements DynamicValue {
|
||||||
|
|
||||||
private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("Zombies");
|
private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("Zombies");
|
||||||
|
|
||||||
|
@ -90,15 +90,15 @@ class ZombiesControlledByTargetCreaturesControllerCount implements DynamicValue
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ZombiesControlledByTargetCreaturesControllerCount copy() {
|
public ZombiesControlledByTargetPlayerCount copy() {
|
||||||
return new ZombiesControlledByTargetCreaturesControllerCount();
|
return new ZombiesControlledByTargetPlayerCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||||
Permanent targetCreature = game.getPermanent(effect.getTargetPointer().getFirst(game, sourceAbility));
|
Player player = game.getPlayer(sourceAbility.getTargets().get(0).getFirstTarget());
|
||||||
if (targetCreature != null) {
|
if (player != null) {
|
||||||
int value = game.getBattlefield().countAll(filter, targetCreature.getControllerId(), game);
|
int value = game.getBattlefield().countAll(filter, player.getId(), game);
|
||||||
return -1 * value;
|
return -1 * value;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -62,6 +62,7 @@ public class DuskFeaster extends CardImpl {
|
||||||
|
|
||||||
// <i>Delirium</i> — Dusk Feaster costs {2} less to cast if there are four or more card types among cards in your graveyard.
|
// <i>Delirium</i> — Dusk Feaster costs {2} less to cast if there are four or more card types among cards in your graveyard.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.STACK, new DuskFeasterCostReductionEffect()));
|
this.addAbility(new SimpleStaticAbility(Zone.STACK, new DuskFeasterCostReductionEffect()));
|
||||||
|
|
||||||
// Flying
|
// Flying
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
}
|
}
|
||||||
|
@ -80,7 +81,7 @@ class DuskFeasterCostReductionEffect extends CostModificationEffectImpl {
|
||||||
|
|
||||||
DuskFeasterCostReductionEffect() {
|
DuskFeasterCostReductionEffect() {
|
||||||
super(Duration.Custom, Outcome.Benefit, CostModificationType.REDUCE_COST);
|
super(Duration.Custom, Outcome.Benefit, CostModificationType.REDUCE_COST);
|
||||||
staticText = "{this} costs {2} less to cast if there are four or more card types among cards in your graveyard";
|
staticText = "<i>Delirium</i> — {this} costs {2} less to cast if there are four or more card types among cards in your graveyard";
|
||||||
}
|
}
|
||||||
|
|
||||||
DuskFeasterCostReductionEffect(final DuskFeasterCostReductionEffect effect) {
|
DuskFeasterCostReductionEffect(final DuskFeasterCostReductionEffect effect) {
|
||||||
|
|
|
@ -33,6 +33,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.common.ExileFromGraveCost;
|
import mage.abilities.costs.common.ExileFromGraveCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.CreateTokenEffect;
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||||
import mage.abilities.keyword.MenaceAbility;
|
import mage.abilities.keyword.MenaceAbility;
|
||||||
|
@ -64,7 +65,9 @@ public class GrafHarvest extends CardImpl {
|
||||||
this.expansionSetCode = "EMN";
|
this.expansionSetCode = "EMN";
|
||||||
|
|
||||||
// Zombies you control have menace.
|
// Zombies you control have menace.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(new MenaceAbility(), Duration.WhileOnBattlefield, filter)));
|
Effect effect = new GainAbilityAllEffect(new MenaceAbility(), Duration.WhileOnBattlefield, filter);
|
||||||
|
effect.setText("Zombies you control have menace. <i>(They can't be blocked except by two or more creatures.)</i>");
|
||||||
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||||
|
|
||||||
// {3}{B}, Exile a creature card from your graveyard: Put a 2/2 black Zombie creature token onto the battlefield.
|
// {3}{B}, Exile a creature card from your graveyard: Put a 2/2 black Zombie creature token onto the battlefield.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new ZombieToken()), new ManaCostsImpl("{3}{B}"));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new ZombieToken()), new ManaCostsImpl("{3}{B}"));
|
||||||
|
|
|
@ -60,8 +60,7 @@ public class NoosegrafMob extends CardImpl {
|
||||||
this.toughness = new MageInt(0);
|
this.toughness = new MageInt(0);
|
||||||
|
|
||||||
// Noosegraf Mob enters the battlefield with five +1/+1 counters on it.
|
// Noosegraf Mob enters the battlefield with five +1/+1 counters on it.
|
||||||
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(5)),
|
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(5)), "with five +1/+1 counters on it"));
|
||||||
"{this} enters the battlefield with five +1/+1 counters on it"));
|
|
||||||
|
|
||||||
// Whenever a player casts a spell, remove a +1/+1 counter from Noosegraf Mob. If you do, put a 2/2 black Zombie creature token onto the battlefield.
|
// Whenever a player casts a spell, remove a +1/+1 counter from Noosegraf Mob. If you do, put a 2/2 black Zombie creature token onto the battlefield.
|
||||||
this.addAbility(new SpellCastAllTriggeredAbility(new NoosegrafMobEffect(), false));
|
this.addAbility(new SpellCastAllTriggeredAbility(new NoosegrafMobEffect(), false));
|
||||||
|
|
|
@ -28,8 +28,10 @@
|
||||||
package mage.sets.eldritchmoon;
|
package mage.sets.eldritchmoon;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import mage.abilities.costs.Cost;
|
||||||
import mage.abilities.costs.common.DiscardTargetCost;
|
import mage.abilities.costs.common.DiscardTargetCost;
|
||||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||||
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
@ -51,11 +53,16 @@ public class RuthlessDisposal extends CardImpl {
|
||||||
this.expansionSetCode = "EMN";
|
this.expansionSetCode = "EMN";
|
||||||
|
|
||||||
// As an additional cost to cast Ruthless Disposal, discard a card and sacrifice a creature.
|
// As an additional cost to cast Ruthless Disposal, discard a card and sacrifice a creature.
|
||||||
this.getSpellAbility().addCost(new DiscardTargetCost(new TargetCardInHand(new FilterCard("card to discard"))));
|
this.getSpellAbility().addCost(new DiscardTargetCost(new TargetCardInHand(new FilterCard("a card"))));
|
||||||
this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent()));
|
Cost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent());
|
||||||
|
cost.setText("As an additional cost to cast {this}, sacrifice a creature");
|
||||||
|
this.getSpellAbility().addCost(cost);
|
||||||
|
|
||||||
// Two target creatures each get -13/-13 until end of turn.
|
// Two target creatures each get -13/-13 until end of turn.
|
||||||
|
Effect effect = new BoostTargetEffect(-13, -13, Duration.EndOfTurn);
|
||||||
|
effect.setText("Two target creatures each get -13/-13 until end of turn");
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(2));
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent(2));
|
||||||
this.getSpellAbility().addEffect(new BoostTargetEffect(-13, -13, Duration.EndOfTurn));
|
this.getSpellAbility().addEffect(effect);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class StrangeAugmentation extends CardImpl {
|
||||||
|
|
||||||
// <i>Delirium</i> &mdash Enchanted creature gets an additional +2/+2 as long as there are four or more card types among cards in your graveyard.
|
// <i>Delirium</i> &mdash Enchanted creature gets an additional +2/+2 as long as there are four or more card types among cards in your graveyard.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostEnchantedEffect(2, 2), DeliriumCondition.getInstance(),
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostEnchantedEffect(2, 2), DeliriumCondition.getInstance(),
|
||||||
"<i>Delirium</i> — Enchanted creature gets an additional +2/+2 as long as you have no cards in hand")));
|
"<i>Delirium</i> — Enchanted creature gets an additional +2/+2 as long as there are four or more card types among cards in your graveyard.")));
|
||||||
}
|
}
|
||||||
|
|
||||||
public StrangeAugmentation(final StrangeAugmentation card) {
|
public StrangeAugmentation(final StrangeAugmentation card) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class StromkirkCondemned extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public StromkirkCondemned(UUID ownerId) {
|
public StromkirkCondemned(UUID ownerId) {
|
||||||
super(ownerId, 105, "Stromkirk Condemned", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{B}{B}");
|
super(ownerId, 106, "Stromkirk Condemned", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{B}{B}");
|
||||||
this.expansionSetCode = "EMN";
|
this.expansionSetCode = "EMN";
|
||||||
this.subtype.add("Vampire");
|
this.subtype.add("Vampire");
|
||||||
this.subtype.add("Horror");
|
this.subtype.add("Horror");
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class WhispersOfEmrakul extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||||
new DiscardTargetEffect(1, true),
|
new DiscardTargetEffect(1, true),
|
||||||
new InvertCondition(DeliriumCondition.getInstance()),
|
new InvertCondition(DeliriumCondition.getInstance()),
|
||||||
"Target player sacrifices a creature or planeswalker."));
|
"Target opponent discards a card at random."));
|
||||||
|
|
||||||
// <i>Delirium</i> — If there are four or more card types among cards in your graveyard, that player discards two cards at random instead.
|
// <i>Delirium</i> — If there are four or more card types among cards in your graveyard, that player discards two cards at random instead.
|
||||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||||
|
|
Loading…
Reference in a new issue