diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 9b45731b97f..de01fdd20c3 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -2886,7 +2886,37 @@ public class CardFactoryUtil { public static void addTriggerAbility(final String keyword, final Card card, final KeywordsChange kws) { final boolean intrinsic = kws == null; - if (keyword.equals("Exalted")) { + if (keyword.equals("Cascade")) { + final int cascade = intrinsic ? card.getAmountOfKeyword("Cascade") : 1; + if (cascade != -1) { + final StringBuilder trigScript = new StringBuilder( + "Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigCascade | Secondary$ " + + "True | TriggerDescription$ Cascade - CARDNAME"); + + final String abString = "AB$ DigUntil | Cost$ 0 | Defined$ You | Amount$ 1 | Valid$ " + + "Card.nonLand+cmcLTCascadeX | FoundDestination$ Exile | RevealedDestination$" + + " Exile | References$ CascadeX | ImprintRevealed$ True | RememberFound$ True" + + " | SubAbility$ CascadeCast"; + final String dbCascadeCast = "DB$ Play | Defined$ Remembered | WithoutManaCost$ True | " + + "Optional$ True | SubAbility$ CascadeMoveToLib"; + final String dbMoveToLib = "DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered,Card.IsImprinted" + + " | Origin$ Exile | Destination$ Library | RandomOrder$ True | LibraryPosition$ -1" + + " | SubAbility$ CascadeCleanup"; + card.setSVar("TrigCascade", abString); + card.setSVar("CascadeCast", dbCascadeCast); + card.setSVar("CascadeMoveToLib", dbMoveToLib); + card.setSVar("CascadeX", "Count$CardManaCost"); + card.setSVar("CascadeCleanup", "DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True"); + final Trigger cascadeTrigger = TriggerHandler.parseTrigger(trigScript.toString(), card, intrinsic); + + for (int i = 0; i < cascade; i++) { + final Trigger cardTrigger = card.addTrigger(cascadeTrigger); + if (!intrinsic) { + kws.addTrigger(cardTrigger); + } + } + } + } else if (keyword.equals("Exalted")) { final StringBuilder trigExalted = new StringBuilder( "Mode$ Attacks | ValidCard$ Creature.YouCtrl | Alone$ True | " + "Execute$ ExaltedPump | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ " @@ -3576,29 +3606,9 @@ public class CardFactoryUtil { card.addTrigger(stormTrigger); } // Storm - final int cascade = card.getAmountOfKeyword("Cascade"); - for (int i = 0; i < cascade; i++) { - final StringBuilder trigScript = new StringBuilder( - "Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigCascade | Secondary$ " + - "True | TriggerDescription$ Cascade - CARDNAME"); - final String abString = "AB$ DigUntil | Cost$ 0 | Defined$ You | Amount$ 1 | Valid$ " - + "Card.nonLand+cmcLTCascadeX | FoundDestination$ Exile | RevealedDestination$" - + " Exile | References$ CascadeX | ImprintRevealed$ True | RememberFound$ True" - + " | SubAbility$ CascadeCast"; - final String dbCascadeCast = "DB$ Play | Defined$ Remembered | WithoutManaCost$ True | " - + "Optional$ True | SubAbility$ CascadeMoveToLib"; - final String dbMoveToLib = "DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered,Card.IsImprinted" - + " | Origin$ Exile | Destination$ Library | RandomOrder$ True | LibraryPosition$ -1" - + " | SubAbility$ CascadeCleanup"; - card.setSVar("TrigCascade", abString); - card.setSVar("CascadeCast", dbCascadeCast); - card.setSVar("CascadeMoveToLib", dbMoveToLib); - card.setSVar("CascadeX", "Count$CardManaCost"); - card.setSVar("CascadeCleanup", "DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True"); - final Trigger cascadeTrigger = TriggerHandler.parseTrigger(trigScript.toString(), card, true); - - card.addTrigger(cascadeTrigger); + if (hasKeyword(card, "Cascade") != -1) { + addTriggerAbility("Cascade", card, null); } // Cascade if (hasKeyword(card, "Recover") != -1) { diff --git a/forge-gui/res/cardsfolder/m/maelstrom_nexus.txt b/forge-gui/res/cardsfolder/m/maelstrom_nexus.txt index 9acca6521ab..9d094528398 100644 --- a/forge-gui/res/cardsfolder/m/maelstrom_nexus.txt +++ b/forge-gui/res/cardsfolder/m/maelstrom_nexus.txt @@ -1,12 +1,8 @@ Name:Maelstrom Nexus ManaCost:W U B R G Types:Enchantment -T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | CheckSVar$ Y | SVarCompare$ EQ1 | NoResolvingCheck$ True | TriggerZones$ Battlefield | Execute$ MaelstromCascade | TriggerDescription$ The first spell you cast each turn has cascade. (When you cast your first spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order.) -SVar:MaelstromCascade:AB$ DigUntil | Cost$ 0 | Defined$ You | Amount$ 1 | Valid$ Card.nonLand+cmcLTX | FoundDestination$ Exile | RevealedDestination$ Exile | References$ X | ImprintRevealed$ True | RememberFound$ True | SubAbility$ DBCast -SVar:DBCast:DB$ Play | Defined$ Remembered | WithoutManaCost$ True | Optional$ True | SubAbility$ DBMoveToLib -SVar:DBMoveToLib:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered,Card.IsImprinted | Origin$ Exile | Destination$ Library | RandomOrder$ True | LibraryPosition$ -1 | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True -SVar:X:Count$TriggeredCardManaCost + +S:Mode$ Continuous | Affected$ Card.YouCtrl | AffectedZone$ Exile,Graveyard,Hand,Library,Command | CheckSVar$ Y | SVarCompare$ EQ1 | AddKeyword$ Cascade | Description$ The first spell you cast each turn has cascade. SVar:Y:Count$ThisTurnCast_Card.YouCtrl SVar:Picture:http://www.wizards.com/global/images/magic/general/maelstrom_nexus.jpg Oracle:The first spell you cast each turn has cascade. (When you cast your first spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order.)