From 3c1cbad44177610ee07fff8493fbdbc1b6fb54e1 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 9 Dec 2025 16:37:46 -0500 Subject: [PATCH] [MSH] Implement Super-Skrull --- Mage.Sets/src/mage/cards/b/BasaltGolem.java | 6 +- Mage.Sets/src/mage/cards/s/SuperSkrull.java | 71 +++++++++++++++++++ .../src/mage/sets/MarvelSuperHeroes.java | 1 + .../src/main/java/mage/constants/SubType.java | 1 + .../{WallToken.java => BasaltGolemToken.java} | 10 +-- .../permanent/token/WallColorlessToken.java | 29 ++++++++ 6 files changed, 110 insertions(+), 8 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/s/SuperSkrull.java rename Mage/src/main/java/mage/game/permanent/token/{WallToken.java => BasaltGolemToken.java} (71%) create mode 100644 Mage/src/main/java/mage/game/permanent/token/WallColorlessToken.java diff --git a/Mage.Sets/src/mage/cards/b/BasaltGolem.java b/Mage.Sets/src/mage/cards/b/BasaltGolem.java index f13c6b69fe7..908e1eaeeb5 100644 --- a/Mage.Sets/src/mage/cards/b/BasaltGolem.java +++ b/Mage.Sets/src/mage/cards/b/BasaltGolem.java @@ -19,7 +19,7 @@ import mage.constants.SubType; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.game.permanent.token.WallToken; +import mage.game.permanent.token.BasaltGolemToken; import mage.players.Player; /** @@ -30,7 +30,7 @@ public final class BasaltGolem extends CardImpl { public BasaltGolem(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}"); - + this.subtype.add(SubType.GOLEM); this.power = new MageInt(2); this.toughness = new MageInt(4); @@ -83,6 +83,6 @@ class BasaltGolemEffect extends OneShotEffect { if (!creature.sacrifice(source, game)) return false; - return new WallToken().putOntoBattlefield(1, game, source, player.getId()); + return new BasaltGolemToken().putOntoBattlefield(1, game, source, player.getId()); } } diff --git a/Mage.Sets/src/mage/cards/s/SuperSkrull.java b/Mage.Sets/src/mage/cards/s/SuperSkrull.java new file mode 100644 index 00000000000..3786fc5d88b --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SuperSkrull.java @@ -0,0 +1,71 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.DrawCardTargetEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.game.permanent.token.WallColorlessToken; +import mage.target.TargetPlayer; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SuperSkrull extends CardImpl { + + public SuperSkrull(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}{B}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.SKRULL); + this.subtype.add(SubType.SHAPESHIFTER); + this.subtype.add(SubType.VILLAIN); + this.power = new MageInt(4); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {2}{W}: Create a 0/4 colorless Wall creature token with defender. + this.addAbility(new SimpleActivatedAbility( + new CreateTokenEffect(new WallColorlessToken()), new ManaCostsImpl<>("{2}{W}") + )); + + // {3}{G}: Super-Skrull gets +4/+4 until end of turn. + this.addAbility(new SimpleActivatedAbility( + new BoostSourceEffect(4, 4, Duration.EndOfTurn), new ManaCostsImpl<>("{3}{G}") + )); + + // {4}{R}: Super-Skrull deals 4 damage to target creature. + Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(4), new ManaCostsImpl<>("{4}{R}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // {5}{U}: Target player draws four cards. + ability = new SimpleActivatedAbility(new DrawCardTargetEffect(4), new ManaCostsImpl<>("{5}{U}")); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + private SuperSkrull(final SuperSkrull card) { + super(card); + } + + @Override + public SuperSkrull copy() { + return new SuperSkrull(this); + } +} diff --git a/Mage.Sets/src/mage/sets/MarvelSuperHeroes.java b/Mage.Sets/src/mage/sets/MarvelSuperHeroes.java index 5351ea17832..cfbf67d3408 100644 --- a/Mage.Sets/src/mage/sets/MarvelSuperHeroes.java +++ b/Mage.Sets/src/mage/sets/MarvelSuperHeroes.java @@ -21,5 +21,6 @@ public final class MarvelSuperHeroes extends ExpansionSet { this.hasBasicLands = false; // temporary cards.add(new SetCardInfo("Quicksilver, Brash Blur", 148, Rarity.RARE, mage.cards.q.QuicksilverBrashBlur.class)); + cards.add(new SetCardInfo("Super-Skrull", 115, Rarity.RARE, mage.cards.s.SuperSkrull.class)); } } diff --git a/Mage/src/main/java/mage/constants/SubType.java b/Mage/src/main/java/mage/constants/SubType.java index ee879b56228..7217602b84d 100644 --- a/Mage/src/main/java/mage/constants/SubType.java +++ b/Mage/src/main/java/mage/constants/SubType.java @@ -382,6 +382,7 @@ public enum SubType { SIREN("Siren", SubTypeSet.CreatureType), SITH("Sith", SubTypeSet.CreatureType), SKELETON("Skeleton", SubTypeSet.CreatureType), + SKRULL("Skrull", SubTypeSet.CreatureType), SKUNK("Skunk", SubTypeSet.CreatureType), SLITH("Slith", SubTypeSet.CreatureType), SLIVER("Sliver", SubTypeSet.CreatureType), diff --git a/Mage/src/main/java/mage/game/permanent/token/WallToken.java b/Mage/src/main/java/mage/game/permanent/token/BasaltGolemToken.java similarity index 71% rename from Mage/src/main/java/mage/game/permanent/token/WallToken.java rename to Mage/src/main/java/mage/game/permanent/token/BasaltGolemToken.java index 00ffad3b5bb..eeec6781c3f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WallToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BasaltGolemToken.java @@ -8,9 +8,9 @@ import mage.constants.SubType; /** * @author lagdotcom */ -public final class WallToken extends TokenImpl { +public final class BasaltGolemToken extends TokenImpl { - public WallToken() { + public BasaltGolemToken() { super("Wall Token", "0/2 colorless Wall artifact creature token with defender"); cardType.add(CardType.ARTIFACT); cardType.add(CardType.CREATURE); @@ -20,11 +20,11 @@ public final class WallToken extends TokenImpl { addAbility(DefenderAbility.getInstance()); } - private WallToken(final WallToken token) { + private BasaltGolemToken(final BasaltGolemToken token) { super(token); } - public WallToken copy() { - return new WallToken(this); + public BasaltGolemToken copy() { + return new BasaltGolemToken(this); } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WallColorlessToken.java b/Mage/src/main/java/mage/game/permanent/token/WallColorlessToken.java new file mode 100644 index 00000000000..969299ebcae --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/WallColorlessToken.java @@ -0,0 +1,29 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.keyword.DefenderAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author TheElk801 + */ +public final class WallColorlessToken extends TokenImpl { + + public WallColorlessToken() { + super("Wall Token", "0/4 colorless Wall creature token with defender"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.WALL); + power = new MageInt(0); + toughness = new MageInt(4); + addAbility(DefenderAbility.getInstance()); + } + + private WallColorlessToken(final WallColorlessToken token) { + super(token); + } + + public WallColorlessToken copy() { + return new WallColorlessToken(this); + } +}