diff --git a/Mage.Sets/src/mage/cards/c/Crackleburr.java b/Mage.Sets/src/mage/cards/c/Crackleburr.java index aa7b0a4963..f3a6900fbd 100644 --- a/Mage.Sets/src/mage/cards/c/Crackleburr.java +++ b/Mage.Sets/src/mage/cards/c/Crackleburr.java @@ -33,7 +33,7 @@ import mage.target.common.TargetCreaturePermanent; public final class Crackleburr extends CardImpl { private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped red creatures you control"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("tapped blue creatures you control"); + private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("tapped blue creature you control"); static { filter.add(new ColorPredicate(ObjectColor.RED)); diff --git a/Mage.Sets/src/mage/cards/h/HaloFountain.java b/Mage.Sets/src/mage/cards/h/HaloFountain.java new file mode 100644 index 0000000000..1a28be0903 --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HaloFountain.java @@ -0,0 +1,70 @@ +package mage.cards.h; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.common.UntapTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.WinGameSourceControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.game.permanent.token.CitizenGreenWhiteToken; +import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class HaloFountain extends CardImpl { + + private static final FilterControlledPermanent filter + = new FilterControlledCreaturePermanent("tapped creature you control"); + + static { + filter.add(TappedPredicate.TAPPED); + } + + public HaloFountain(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{W}"); + + // {W}, {T}, Untap an tapped creature you control: Create a 1/1 green and white Citizen creature token. + Ability ability = new SimpleActivatedAbility( + new CreateTokenEffect(new CitizenGreenWhiteToken()), new ManaCostsImpl<>("{W}") + ); + ability.addCost(new TapSourceCost()); + ability.addCost(new UntapTargetCost(new TargetControlledPermanent(filter))); + this.addAbility(ability); + + // {W}{W}, {T}, Untap two tapped creatures you control: Draw a card. + ability = new SimpleActivatedAbility( + new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{W}{W}") + ); + ability.addCost(new TapSourceCost()); + ability.addCost(new UntapTargetCost(new TargetControlledPermanent(2, filter))); + this.addAbility(ability); + + // {W}{W}{W}{W}{W}, {T}, Untap fifteen tapped creatures you control: You win the game. + ability = new SimpleActivatedAbility( + new WinGameSourceControllerEffect(), new ManaCostsImpl<>("{W}{W}{W}{W}{W}") + ); + ability.addCost(new TapSourceCost()); + ability.addCost(new UntapTargetCost(new TargetControlledPermanent(15, filter))); + this.addAbility(ability); + } + + private HaloFountain(final HaloFountain card) { + super(card); + } + + @Override + public HaloFountain copy() { + return new HaloFountain(this); + } +} diff --git a/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java b/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java index 84aab5d125..6ec24b0830 100644 --- a/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java +++ b/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java @@ -40,6 +40,7 @@ public final class StreetsOfNewCapenna extends ExpansionSet { cards.add(new SetCardInfo("Forest", 270, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gala Greeters", 148, Rarity.RARE, mage.cards.g.GalaGreeters.class)); cards.add(new SetCardInfo("Getaway Car", 237, Rarity.RARE, mage.cards.g.GetawayCar.class)); + cards.add(new SetCardInfo("Halo Fountain", 15, Rarity.MYTHIC, mage.cards.h.HaloFountain.class)); cards.add(new SetCardInfo("Island", 264, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Jetmir's Garden", 250, Rarity.RARE, mage.cards.j.JetmirsGarden.class)); cards.add(new SetCardInfo("Jetmir, Nexus of Revels", 193, Rarity.MYTHIC, mage.cards.j.JetmirNexusOfRevels.class)); diff --git a/Mage/src/main/java/mage/abilities/costs/common/UntapTargetCost.java b/Mage/src/main/java/mage/abilities/costs/common/UntapTargetCost.java index ab2e938c13..2206a4c73b 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/UntapTargetCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/UntapTargetCost.java @@ -1,29 +1,26 @@ - package mage.abilities.costs.common; -import mage.constants.Outcome; import mage.abilities.Ability; +import mage.abilities.costs.Cost; import mage.abilities.costs.CostImpl; +import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetControlledPermanent; - -import java.util.List; -import java.util.UUID; -import mage.abilities.costs.Cost; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public class UntapTargetCost extends CostImpl { - TargetControlledPermanent target; + private final TargetControlledPermanent target; public UntapTargetCost(TargetControlledPermanent target) { this.target = target; - this.text = "Untap " + CardUtil.numberToText(target.getMaxNumberOfTargets(), "") + ' ' + target.getTargetName(); + this.text = makeText(target); } public UntapTargetCost(final UntapTargetCost cost) { @@ -33,14 +30,15 @@ public class UntapTargetCost extends CostImpl { @Override public boolean pay(Ability ability, Game game, Ability source, UUID controllerId, boolean noMana, Cost costToPay) { - if (target.choose(Outcome.Untap, controllerId, source.getSourceId(), source, game)) { - for (UUID targetId : (List<UUID>) target.getTargets()) { - Permanent permanent = game.getPermanent(targetId); - if (permanent == null) { - return false; - } - paid |= permanent.untap(game); + if (!target.choose(Outcome.Untap, controllerId, source.getSourceId(), source, game)) { + return paid; + } + for (UUID targetId : target.getTargets()) { + Permanent permanent = game.getPermanent(targetId); + if (permanent == null) { + return false; } + paid |= permanent.untap(game); } return paid; } @@ -55,4 +53,14 @@ public class UntapTargetCost extends CostImpl { return new UntapTargetCost(this); } + private static String makeText(TargetControlledPermanent target) { + StringBuilder sb = new StringBuilder("untap "); + if (target.getMaxNumberOfTargets() > 1) { + sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())); + sb.append(target.getTargetName().replace("you control", "s you control")); + } else { + sb.append(CardUtil.addArticle(target.getTargetName())); + } + return sb.toString(); + } }