diff --git a/Mage.Sets/src/mage/cards/m/MaximusKnightApparent.java b/Mage.Sets/src/mage/cards/m/MaximusKnightApparent.java new file mode 100644 index 00000000000..08a28a8dc53 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MaximusKnightApparent.java @@ -0,0 +1,70 @@ +package mage.cards.m; + +import java.util.UUID; +import mage.MageInt; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.FilterCard; +import mage.filter.StaticFilters; +import mage.filter.predicate.mageobject.ManaValuePredicate; +import mage.target.common.TargetCardInLibrary; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ComparisonType; + +/** + * + * @author muz + */ +public final class MaximusKnightApparent extends CardImpl { + + private static final FilterCard filter = new FilterCard(SubType.EQUIPMENT, "an Equipment card with mana value 2"); + + static { + filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, 2)); + } + + public MaximusKnightApparent(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.KNIGHT); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // When Maximus enters, you may search your library for an Equipment card with mana value 2, reveal it, put it into your hand, then shuffle. + this.addAbility(new EntersBattlefieldTriggeredAbility( + new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true), true + )); + + // {1}, Sacrifice an artifact: You get {E}{E} (two energy counters). + Ability ability = new SimpleActivatedAbility( + new GetEnergyCountersControllerEffect(2), + new GenericManaCost(1) + ); + ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN)); + this.addAbility(ability); + } + + private MaximusKnightApparent(final MaximusKnightApparent card) { + super(card); + } + + @Override + public MaximusKnightApparent copy() { + return new MaximusKnightApparent(this); + } +} diff --git a/Mage.Sets/src/mage/cards/t/TheGhoulGunslinger.java b/Mage.Sets/src/mage/cards/t/TheGhoulGunslinger.java new file mode 100644 index 00000000000..dd25600de70 --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TheGhoulGunslinger.java @@ -0,0 +1,103 @@ +package mage.cards.t; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesThisOrAnotherTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.Game; +import mage.game.permanent.token.Token; +import mage.game.permanent.token.TreasureToken; +import mage.players.Player; +import mage.target.TargetPlayer; + +/** + * + * @author muz + */ +public final class TheGhoulGunslinger extends CardImpl { + + private static final FilterPermanent filter = new FilterControlledPermanent("another nontoken Zombie or Mutant you control"); + + static { + filter.add(Predicates.or( + SubType.ZOMBIE.getPredicate(), + SubType.MUTANT.getPredicate() + )); + filter.add(TokenPredicate.FALSE); + } + + public TheGhoulGunslinger(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.ZOMBIE); + this.subtype.add(SubType.MUTANT); + this.subtype.add(SubType.ROGUE); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // First strike + this.addAbility(FirstStrikeAbility.getInstance()); + + // Whenever The Ghoul or another nontoken Zombie or Mutant you control dies, target player gets two rad counters. + // If that player is you, create a Treasure token. + Ability ability = new DiesThisOrAnotherTriggeredAbility( + new TheGhoulGunslingerEffect(), false, filter + ); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + private TheGhoulGunslinger(final TheGhoulGunslinger card) { + super(card); + } + + @Override + public TheGhoulGunslinger copy() { + return new TheGhoulGunslinger(this); + } +} + +class TheGhoulGunslingerEffect extends OneShotEffect { + + TheGhoulGunslingerEffect() { + super(Outcome.GainLife); + staticText = "target player gets two rad counters. If that player is you, create a Treasure token."; + } + + private TheGhoulGunslingerEffect(final TheGhoulGunslingerEffect effect) { + super(effect); + } + + @Override + public TheGhoulGunslingerEffect copy() { + return new TheGhoulGunslingerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source)); + if (targetPlayer == null) { + return false; + } + targetPlayer.addCounters(CounterType.RAD.createInstance(2), source.getControllerId(), source, game); + if (source.isControlledBy(targetPlayer.getId())) { + Token token = new TreasureToken(); + token.putOntoBattlefield(1, game, source, source.getControllerId()); + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/SecretLairDrop.java b/Mage.Sets/src/mage/sets/SecretLairDrop.java index bb95ee1e5a5..9235eedde35 100644 --- a/Mage.Sets/src/mage/sets/SecretLairDrop.java +++ b/Mage.Sets/src/mage/sets/SecretLairDrop.java @@ -793,7 +793,7 @@ public class SecretLairDrop extends ExpansionSet { cards.add(new SetCardInfo("Solemn Simulacrum", "791*", Rarity.RARE, mage.cards.s.SolemnSimulacrum.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Command Tower", 792, Rarity.RARE, mage.cards.c.CommandTower.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nine Lives", 793, Rarity.RARE, mage.cards.n.NineLives.class)); - cards.add(new SetCardInfo("Yoshimaru, Ever Faithful", 794, Rarity.MYTHIC, mage.cards.y.YoshimaruEverFaithful.class)); + cards.add(new SetCardInfo("Yoshimaru, Ever Faithful", 794, Rarity.MYTHIC, mage.cards.y.YoshimaruEverFaithful.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wastes", "795*", Rarity.RARE, mage.cards.w.Wastes.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Mana Vault", "796*", Rarity.MYTHIC, mage.cards.m.ManaVault.class)); cards.add(new SetCardInfo("Seraph Sanctuary", 797, Rarity.RARE, mage.cards.s.SeraphSanctuary.class, NON_FULL_USE_VARIOUS)); @@ -1320,7 +1320,7 @@ public class SecretLairDrop extends ExpansionSet { cards.add(new SetCardInfo("Bottomless Pit", 1404, Rarity.RARE, mage.cards.b.BottomlessPit.class)); cards.add(new SetCardInfo("Necrogen Mists", 1405, Rarity.RARE, mage.cards.n.NecrogenMists.class)); cards.add(new SetCardInfo("Reassembling Skeleton", 1406, Rarity.RARE, mage.cards.r.ReassemblingSkeleton.class)); - cards.add(new SetCardInfo("Tinybones, Trinket Thief", 1407, Rarity.MYTHIC, mage.cards.t.TinybonesTrinketThief.class)); + cards.add(new SetCardInfo("Tinybones, Trinket Thief", 1407, Rarity.MYTHIC, mage.cards.t.TinybonesTrinketThief.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Geier Reach Sanitarium", 1408, Rarity.RARE, mage.cards.g.GeierReachSanitarium.class)); cards.add(new SetCardInfo("Captain Lannery Storm", 1409, Rarity.RARE, mage.cards.c.CaptainLanneryStorm.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Captain Lannery Storm", "1409*", Rarity.RARE, mage.cards.c.CaptainLanneryStorm.class, NON_FULL_USE_VARIOUS)); @@ -2140,7 +2140,7 @@ public class SecretLairDrop extends ExpansionSet { cards.add(new SetCardInfo("Captain N'ghathrod", 2183, Rarity.MYTHIC, mage.cards.c.CaptainNghathrod.class)); cards.add(new SetCardInfo("Nekusar, the Mindrazer", 2184, Rarity.RARE, mage.cards.n.NekusarTheMindrazer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Iron Maiden", 2185, Rarity.RARE, mage.cards.i.IronMaiden.class, FULL_ART)); - cards.add(new SetCardInfo("Mindcrank", 2186, Rarity.RARE, mage.cards.m.Mindcrank.class, FULL_ART)); + cards.add(new SetCardInfo("Mindcrank", 2186, Rarity.RARE, mage.cards.m.Mindcrank.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Lethal Scheme", 2187, Rarity.RARE, mage.cards.l.LethalScheme.class)); cards.add(new SetCardInfo("Grave Titan", 2188, Rarity.MYTHIC, mage.cards.g.GraveTitan.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Animate Dead", 2189, Rarity.RARE, mage.cards.a.AnimateDead.class)); @@ -2228,6 +2228,26 @@ public class SecretLairDrop extends ExpansionSet { cards.add(new SetCardInfo("Serum Visions", 2323, Rarity.RARE, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Umbris, Fear Manifest", 2324, Rarity.MYTHIC, mage.cards.u.UmbrisFearManifest.class)); cards.add(new SetCardInfo("Spellskite", 2325, Rarity.RARE, mage.cards.s.Spellskite.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Ghoul, Gunslinger", 2448, Rarity.MYTHIC, mage.cards.t.TheGhoulGunslinger.class)); + cards.add(new SetCardInfo("Maximus, Knight Apparent", 2449, Rarity.MYTHIC, mage.cards.m.MaximusKnightApparent.class)); + cards.add(new SetCardInfo("Pre-War Formalwear", 2450, Rarity.RARE, mage.cards.p.PreWarFormalwear.class)); + cards.add(new SetCardInfo("Spirit Mantle", 2451, Rarity.RARE, mage.cards.s.SpiritMantle.class)); + cards.add(new SetCardInfo("T-45 Power Armor", 2452, Rarity.RARE, mage.cards.t.T45PowerArmor.class)); + cards.add(new SetCardInfo("Ripples of Potential", 2453, Rarity.RARE, mage.cards.r.RipplesOfPotential.class)); + cards.add(new SetCardInfo("Mutational Advantage", 2454, Rarity.RARE, mage.cards.m.MutationalAdvantage.class)); + cards.add(new SetCardInfo("The Wise Mothman", 2455, Rarity.MYTHIC, mage.cards.t.TheWiseMothman.class)); + cards.add(new SetCardInfo("Mindcrank", 2456, Rarity.RARE, mage.cards.m.Mindcrank.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mesmeric Orb", 2457, Rarity.RARE, mage.cards.m.MesmericOrb.class)); + cards.add(new SetCardInfo("Tinybones, Trinket Thief", 2458, Rarity.MYTHIC, mage.cards.t.TinybonesTrinketThief.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Isshin, Two Heavens as One", 2459, Rarity.RARE, mage.cards.i.IsshinTwoHeavensAsOne.class)); + cards.add(new SetCardInfo("The Deck of Many Things", 2460, Rarity.MYTHIC, mage.cards.t.TheDeckOfManyThings.class)); + cards.add(new SetCardInfo("Caged Sun", 2461, Rarity.RARE, mage.cards.c.CagedSun.class)); + cards.add(new SetCardInfo("Nuka-Cola Vending Machine", 2462, Rarity.RARE, mage.cards.n.NukaColaVendingMachine.class)); + cards.add(new SetCardInfo("Yoshimaru, Ever Faithful", 2463, Rarity.MYTHIC, mage.cards.y.YoshimaruEverFaithful.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arcane Signet", 2464, Rarity.RARE, mage.cards.a.ArcaneSignet.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lightning Greaves", 2465, Rarity.RARE, mage.cards.l.LightningGreaves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Patchwork Banner", 2466, Rarity.RARE, mage.cards.p.PatchworkBanner.class)); + cards.add(new SetCardInfo("Sol Ring", 2467, Rarity.RARE, mage.cards.s.SolRing.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Feed the Swarm", 7001, Rarity.RARE, mage.cards.f.FeedTheSwarm.class)); cards.add(new SetCardInfo("Forge Anew", 7002, Rarity.RARE, mage.cards.f.ForgeAnew.class)); cards.add(new SetCardInfo("Silence", 7003, Rarity.RARE, mage.cards.s.Silence.class, NON_FULL_USE_VARIOUS)); diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 0b04dd31e54..34fda31200d 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -61547,3 +61547,6 @@ Thriving Isle|Lorwyn Eclipsed Commander|173|C||Land|||This land enters tapped. A Thriving Moor|Lorwyn Eclipsed Commander|174|C||Land|||This land enters tapped. As it enters, choose a color other than black.${T}: Add {B} or one mana of the chosen color.| Unclaimed Territory|Lorwyn Eclipsed Commander|175|U||Land|||As this land enters, choose a creature type.${T}: Add {C}.${T}: Add one mana of any color. Spend this mana only to cast a creature spell of the chosen type.| Woodland Cemetery|Lorwyn Eclipsed Commander|176|R||Land|||This land enters tapped unless you control a Swamp or a Forest.${T}: Add {B} or {G}.| +Lucy MacLean, Positively Armed|Secret Lair Drop|2447|M|{4}{W}|Legendary Creature - Human Survivor|3|5|Golden Rule -- Whenever a token enters, you may have target player other than its controller create a token that's a copy of it, then you draw a card if an opponent created a token this way. Do this only once each turn.| +The Ghoul, Gunslinger|Secret Lair Drop|2448|M|{1}{B}{B}|Legendary Creature - Zombie Mutant Rogue|2|3|First strike$Whenever The Ghoul or another nontoken Zombie or Mutant you control dies, target player gets two rad counters. If that player is you, create a Treasure token.| +Maximus, Knight Apparent|Secret Lair Drop|2449|M|{3}{R}|Legendary Creature - Human Knight|4|4|Trample$When Maximus enters, you may search your library for an Equipment card with mana value 2, reveal it, put it into your hand, then shuffle.${1}, Sacrifice an artifact: You get {E}{E} (two energy counters).|