diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java index 3dc7de14b57..91817404a32 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java @@ -537,6 +537,9 @@ public class ScryfallImageSupportCards { add("LCC"); // Lost Caverns of Ixalan Commander add("REX"); // Jurassic World Collection add("SPG"); // Special Guests + + // Custom sets using Scryfall images - must provide a direct link for each card in directDownloadLinks + add("CALC"); // Custom Alchemized versions of existing cards } }; @@ -1003,6 +1006,9 @@ public class ScryfallImageSupportCards { put("PMEI/Jamuraan Lion/10*", "https://api.scryfall.com/cards/pmei/10★/"); // PRES put("PRES/Lathliss, Dragon Queen/149*", "https://api.scryfall.com/cards/pres/149★/"); + + // CALC -- custom alchemy version of cards. + put("CALC/C-Pillar of the Paruns", "https://api.scryfall.com/cards/dis/176/"); } }; diff --git a/Mage.Server.Plugins/Mage.Game.CustomPillarOfTheParunsDuel/src/mage/game/CustomPillarOfTheParunsDuel.java b/Mage.Server.Plugins/Mage.Game.CustomPillarOfTheParunsDuel/src/mage/game/CustomPillarOfTheParunsDuel.java index da43968c5ec..de170dfe6c9 100644 --- a/Mage.Server.Plugins/Mage.Game.CustomPillarOfTheParunsDuel/src/mage/game/CustomPillarOfTheParunsDuel.java +++ b/Mage.Server.Plugins/Mage.Game.CustomPillarOfTheParunsDuel/src/mage/game/CustomPillarOfTheParunsDuel.java @@ -32,9 +32,10 @@ import java.util.UUID; * To summarize, this uses the default rules for a 1v1 limited match, * with two additional custom rules:

* -> At the beginning of each player's first main phase, that player - * conjure into play a Pillar of the Paruns. This does count as a - * land drop for the turn.

- * -> The starting hand size is 6, not 7. + * conjure into play a custom version of Pillar of the Paruns. This + * does count as a land drop for the turn. The custom Pillar has + * hexproof and gain "{T}: add {1}."

+ * -> The starting hand size is 6, and the starting life count is 25. *

* I did took the inspiration for the mode from this cube list (not * sure it is the original source for the idea, but i did not found @@ -49,7 +50,7 @@ import java.util.UUID; public class CustomPillarOfTheParunsDuel extends GameImpl { public CustomPillarOfTheParunsDuel(MultiplayerAttackOption attackOption, RangeOfInfluence range, Mulligan mulligan) { - super(attackOption, range, mulligan, 20, 40, 6); + super(attackOption, range, mulligan, 25, 40, 6); } @Override @@ -57,7 +58,10 @@ public class CustomPillarOfTheParunsDuel extends GameImpl { super.init(choosingPlayerId); getPlayers().forEach((playerId, p) -> { - addDelayedTriggeredAbility(new AtTheBeginOfPlayerFirstMainPhase(playerId, "Pillar of the Paruns"), null); + addDelayedTriggeredAbility( + new AtTheBeginOfPlayerFirstMainPhase(playerId, "C-Pillar of the Paruns"), + null // TODO: Not sure how to mock something to be displayed instead. + ); }); state.getTurnMods().add(new TurnMod(startingPlayerId).withSkipStep(PhaseStep.DRAW)); @@ -89,28 +93,28 @@ class InitPillarOfTheParunsEffect extends OneShotEffect { private UUID playerId; private String cardName; - InitPillarOfTheParunsEffect(UUID playerId, String cardName){ + InitPillarOfTheParunsEffect(UUID playerId, String cardName) { super(Outcome.PutLandInPlay); this.playerId = playerId; this.cardName = cardName; this.staticText = "conjure " + cardName + " in play. It does count as a land played for the turn."; } - private InitPillarOfTheParunsEffect(final InitPillarOfTheParunsEffect effect){ + private InitPillarOfTheParunsEffect(final InitPillarOfTheParunsEffect effect) { super(effect); this.playerId = effect.playerId; this.cardName = effect.cardName; } @Override - public InitPillarOfTheParunsEffect copy(){ + public InitPillarOfTheParunsEffect copy() { return new InitPillarOfTheParunsEffect(this); } @Override - public boolean apply(Game game, Ability source){ + public boolean apply(Game game, Ability source) { Player player = game.getPlayer(playerId); - if(player == null){ + if (player == null) { return false; } diff --git a/Mage.Sets/src/mage/cards/p/PillarOfTheParunsCustom.java b/Mage.Sets/src/mage/cards/p/PillarOfTheParunsCustom.java new file mode 100644 index 00000000000..e933679273a --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/PillarOfTheParunsCustom.java @@ -0,0 +1,46 @@ + +package mage.cards.p; + +import mage.abilities.keyword.HexproofAbility; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.ConditionalAnyColorManaAbility; +import mage.abilities.mana.conditional.ConditionalSpellManaBuilder; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.StaticFilters; + +import java.util.UUID; + +/** + * Custom version of Pillar of the Paruns. + * Tweaked for the needs of the Pillar of the Paruns custom mode. + * + * Has Hexproof and "{T}: Add {1}" + * + * @author Susucr + */ +public final class PillarOfTheParunsCustom extends CardImpl { + + public PillarOfTheParunsCustom(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); + + // Custom: Hexproof + this.addAbility(HexproofAbility.getInstance()); + + // Custom: {T}: Add {1} + this.addAbility(new ColorlessManaAbility()); + + // {T}: Add one mana of any color. Spend this mana only to cast a multicolored spell. + this.addAbility(new ConditionalAnyColorManaAbility(1, new ConditionalSpellManaBuilder(StaticFilters.FILTER_SPELL_A_MULTICOLORED))); + } + + private PillarOfTheParunsCustom(final PillarOfTheParunsCustom card) { + super(card); + } + + @Override + public PillarOfTheParunsCustom copy() { + return new PillarOfTheParunsCustom(this); + } +} diff --git a/Mage.Sets/src/mage/sets/CustomAlchemy.java b/Mage.Sets/src/mage/sets/CustomAlchemy.java new file mode 100644 index 00000000000..58fa985a0bd --- /dev/null +++ b/Mage.Sets/src/mage/sets/CustomAlchemy.java @@ -0,0 +1,29 @@ + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * Custom version of the official cards. + * Similar to Alchemy tweaks of cards. + * @author Susucr + */ +public final class CustomAlchemy extends ExpansionSet { + + private static final CustomAlchemy instance = new CustomAlchemy(); + + public static CustomAlchemy getInstance() { + return instance; + } + + private CustomAlchemy() { + super("Custom Alchemy", "CALC", ExpansionSet.buildDate(2023, 9, 24), SetType.CUSTOM_SET); + this.hasBoosters = false; + this.hasBasicLands = false; + + cards.add(new SetCardInfo("C-Pillar of the Paruns", 1, Rarity.SPECIAL, mage.cards.p.PillarOfTheParunsCustom.class)); + } + +}