From 37086bfa5cb6630211569eb51b9553d68ceee6f8 Mon Sep 17 00:00:00 2001 From: LevelX Date: Sun, 12 Feb 2012 00:48:17 +0100 Subject: [PATCH] [DKA] Blck Cat Some text improvements Fixed NezumiBoneReader Added randomDiscard parameter to DiscardTargetEffect --- .../championsofkamigawa/NezumiBoneReader.java | 4 +- .../src/mage/sets/darkascension/BlackCat.java | 72 +++++++++++++++++++ .../sets/shardsofalara/CruelUltimatum.java | 2 +- Mage.Sets/src/mage/sets/tenth/CruelEdict.java | 3 +- .../effects/common/DiscardTargetEffect.java | 41 +++++++++-- 5 files changed, 111 insertions(+), 11 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/darkascension/BlackCat.java diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiBoneReader.java b/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiBoneReader.java index ae332ff5718..f7ceda9d980 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiBoneReader.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiBoneReader.java @@ -29,12 +29,12 @@ package mage.sets.championsofkamigawa; import java.util.UUID; - import mage.Constants.CardType; import mage.Constants.Rarity; import mage.Constants.Zone; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -58,7 +58,7 @@ public class NezumiBoneReader extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); // {B}, Sacrifice a creature: Target player discards a card. Activate this ability only any time you could cast a sorcery. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1),new SacrificeTargetCost(new TargetControlledCreaturePermanent())); + Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1),new SacrificeTargetCost(new TargetControlledCreaturePermanent())); ability.addCost(new ManaCostsImpl("{B}")); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/darkascension/BlackCat.java b/Mage.Sets/src/mage/sets/darkascension/BlackCat.java new file mode 100644 index 00000000000..fccfa8e2577 --- /dev/null +++ b/Mage.Sets/src/mage/sets/darkascension/BlackCat.java @@ -0,0 +1,72 @@ +/* + * + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + * + */ +package mage.sets.darkascension; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.effects.common.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.target.common.TargetOpponent; + +/** + * + * @author LevelX + */ +public class BlackCat extends CardImpl { + + public BlackCat(UUID ownerId) { + super(ownerId, 54, "Black Cat", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "DKA"; + this.subtype.add("Zombie"); + this.subtype.add("Car"); + + this.color.setBlack(true); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // When Black Cat dies, target opponent discards a card at random. + Ability ability = new DiesTriggeredAbility(new DiscardTargetEffect(1, true),false); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + public BlackCat(final BlackCat card) { + super(card); + } + + @Override + public BlackCat copy() { + return new BlackCat(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shardsofalara/CruelUltimatum.java b/Mage.Sets/src/mage/sets/shardsofalara/CruelUltimatum.java index b4970b74774..842c71aa2eb 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/CruelUltimatum.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/CruelUltimatum.java @@ -60,7 +60,7 @@ public class CruelUltimatum extends CardImpl { // Target opponent sacrifices a creature, discards three cards, then loses 5 life. You return a creature card from your graveyard to your hand, draw three cards, then gain 5 life. this.getSpellAbility().addTarget(new TargetOpponent()); - this.getSpellAbility().addEffect(new SacrificeEffect(new FilterCreaturePermanent(), 1, "a creature")); + this.getSpellAbility().addEffect(new SacrificeEffect(new FilterCreaturePermanent(), 1, "Target opponent sacrifices a creature")); this.getSpellAbility().addEffect(new DiscardTargetEffect(3)); this.getSpellAbility().addEffect(new LoseLifeTargetEffect(5)); diff --git a/Mage.Sets/src/mage/sets/tenth/CruelEdict.java b/Mage.Sets/src/mage/sets/tenth/CruelEdict.java index 0acf38ec0f6..aba69d05fd3 100644 --- a/Mage.Sets/src/mage/sets/tenth/CruelEdict.java +++ b/Mage.Sets/src/mage/sets/tenth/CruelEdict.java @@ -28,7 +28,6 @@ package mage.sets.tenth; import java.util.UUID; - import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.effects.common.SacrificeEffect; @@ -46,7 +45,7 @@ public class CruelEdict extends CardImpl { super(ownerId, 133, "Cruel Edict", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{B}"); this.expansionSetCode = "10E"; this.color.setBlack(true); - this.getSpellAbility().addEffect(new SacrificeEffect(new FilterCreaturePermanent(), 1, "a creature")); + this.getSpellAbility().addEffect(new SacrificeEffect(new FilterCreaturePermanent(), 1, "Target opponent sacrifices a creature")); this.getSpellAbility().addTarget(new TargetOpponent()); // Target opponent sacrifices a creature. } diff --git a/Mage/src/mage/abilities/effects/common/DiscardTargetEffect.java b/Mage/src/mage/abilities/effects/common/DiscardTargetEffect.java index 2d66fda643c..050e96b012c 100644 --- a/Mage/src/mage/abilities/effects/common/DiscardTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/DiscardTargetEffect.java @@ -29,9 +29,11 @@ package mage.abilities.effects.common; import mage.Constants.Outcome; import mage.abilities.Ability; +import mage.abilities.Mode; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.game.Game; import mage.players.Player; @@ -42,20 +44,30 @@ import mage.players.Player; public class DiscardTargetEffect extends OneShotEffect { protected DynamicValue amount; + protected boolean randomDiscard; public DiscardTargetEffect(DynamicValue amount) { + this(amount, false); + } + + public DiscardTargetEffect(DynamicValue amount, boolean randomDiscard) { super(Outcome.Discard); + this.randomDiscard = randomDiscard; this.amount = amount; - setText(); } public DiscardTargetEffect(int amount) { this(new StaticValue(amount)); } + public DiscardTargetEffect(int amount, boolean randomDiscard) { + this(new StaticValue(amount), randomDiscard); + } + public DiscardTargetEffect(final DiscardTargetEffect effect) { super(effect); this.amount = effect.amount.clone(); + this.randomDiscard = effect.randomDiscard; } @Override @@ -67,14 +79,28 @@ public class DiscardTargetEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(targetPointer.getFirst(source)); if (player != null) { - player.discard(amount.calculate(game, source), source, game); + if (randomDiscard) { + int maxAmount = Math.min(amount.calculate(game, source), player.getHand().size()); + for (int i = 0; i < maxAmount; i++) { + Card card = player.getHand().getRandom(game); + if (card != null) { + player.discard(card, source, game); + } + } + } else { + player.discard(amount.calculate(game, source), source, game); + } + return true; } return false; } - private void setText() { - StringBuilder sb = new StringBuilder("Target player discards "); + @Override + public String getText(Mode mode) { + StringBuilder sb = new StringBuilder("Target "); + sb.append(mode.getTargets().get(0).getTargetName()); + sb.append(" discards "); sb.append(amount).append(" card"); try { if (Integer.parseInt(amount.toString()) > 1) { @@ -83,11 +109,14 @@ public class DiscardTargetEffect extends OneShotEffect { } catch (Exception e) { sb.append("s"); } + if (randomDiscard) { + sb.append(" at random"); + } String message = amount.getMessage(); if (message.length() > 0) { sb.append(" for each "); } sb.append(message); - staticText = sb.toString(); - } + return sb.toString(); + } }