Add 2 of the new Fallout SLD cards and reprint info (#14257)

* Add in Fallout SLD reprints

* update mtg-cards-data with new Fallout SLD cards

* [SLD] Implement Maximus, Knight Apparent, and The Ghoul, Gunslinger

* PR comments

* Correct SLD art declarations with reprints for Yoshimaru and Mindcrank introduced
This commit is contained in:
Muz 2026-01-16 08:52:03 -06:00 committed by GitHub
parent ae8b624c4c
commit cbfe10b4a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 199 additions and 3 deletions

View file

@ -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);
}
}

View file

@ -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;
}
}

View file

@ -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));

View file

@ -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).|