diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java index 3dd27935c89..35c51a6bb08 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java @@ -118,7 +118,8 @@ public class DigUntilEffect extends SpellAbilityEffect { final boolean remember = sa.hasParam("RememberFound"); final boolean imprint = sa.hasParam("ImprintFound"); - final ZoneType foundDest = ZoneType.smartValueOf(sa.getParam("FoundDestination")); + ZoneType foundDest = ZoneType.smartValueOf(sa.getParam("FoundDestination")); + final ZoneType optionalNoDestination = ZoneType.smartValueOf(sa.getParamOrDefault("OptionalNoDestination", "None")); final int foundLibPos = AbilityUtils.calculateAmount(host, sa.getParam("FoundLibraryPosition"), sa); final ZoneType revealedDest = ZoneType.smartValueOf(sa.getParam("RevealedDestination")); final int revealedLibPos = AbilityUtils.calculateAmount(host, sa.getParam("RevealedLibraryPosition"), sa); @@ -192,10 +193,16 @@ public class DigUntilEffect extends SpellAbilityEffect { final Card c = itr.next(); final ZoneType origin = c.getZone().getZoneType(); - if (optionalFound && !p.getController().confirmAction(sa, null, - Localizer.getInstance().getMessage("lblDoYouWantPutCardToZone", foundDest.getTranslatedName()), null)) { - itr.remove(); - continue; + if (optionalFound) { + boolean result = p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantPutCardToZone", foundDest.getTranslatedName()), null); + if (!result) { + if (ZoneType.None.equals(optionalNoDestination)) { + itr.remove(); + continue; + } else { + foundDest = optionalNoDestination;; + } + } } Map moveParams = AbilityKey.newMap(); diff --git a/forge-gui/res/cardsfolder/upcoming/malleable_impostor.txt b/forge-gui/res/cardsfolder/upcoming/malleable_impostor.txt new file mode 100644 index 00000000000..7dbfca08248 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/malleable_impostor.txt @@ -0,0 +1,9 @@ +Name:Malleable Impostor +ManaCost:3 U +Types:Creature Faerie Shapeshifter +PT:0/0 +K:Flash +K:Flying +K:ETBReplacement:Copy:DBCopy:Optional +SVar:DBCopy:DB$ Clone | Choices$ Creature.OppCtrl | AddKeywords$ Flying | AddTypes$ Faerie & Shapeshifter | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of a creature an opponent controls, except it's a Faerie Shapeshifter in addition to its other types and it has flying. +Oracle:Flash\nFlying\nYou may have Malleable Impostor enter the battlefield as a copy of a creature an opponent controls, except it's a Faerie Shapeshifter in addition to its other types and it has flying. diff --git a/forge-gui/res/cardsfolder/upcoming/misleading_signpost.txt b/forge-gui/res/cardsfolder/upcoming/misleading_signpost.txt new file mode 100644 index 00000000000..a0ba60ff420 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/misleading_signpost.txt @@ -0,0 +1,9 @@ +Name:Misleading Signpost +ManaCost:2 U +Types:Artifact +K:Flash +T:Mode$ ChangesZone | Phase$ Declare Attackers | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeAttacker | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield during the declare attackers step, you may reselect which player or permanent target attacking creature is attacking. (It can't attack its controller or their permanents.) +SVar:TrigChangeAttacker:DB$ ChangeCombatants | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature +AI:RemoveDeck:All +A:AB$ Mana | Cost$ T | Produced$ U | SpellDescription$ Add {U}. +Oracle:Flash\nWhen Misleading Signpost enters the battlefield during the declare attackers step, you may reselect which player or permanent target attacking creature is attacking. (It can't attack its controller or their permanents.)\n{T}: Add {U}. diff --git a/forge-gui/res/cardsfolder/upcoming/nettling_nuisance.txt b/forge-gui/res/cardsfolder/upcoming/nettling_nuisance.txt new file mode 100644 index 00000000000..c4c449e4201 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/nettling_nuisance.txt @@ -0,0 +1,10 @@ +Name:Nettling Nuisance +ManaCost:2 B +Types:Creature Faerie Rogue +PT:3/1 +K:Flying +T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Creature.Faerie+YouCtrl | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever one or more Faeries you control deal combat damage to a player, that player creates a 4/2 red Pirate creature token with "This creature can't block." The token is goaded for the rest of the game. (It attacks each combat if able and attacks a player other than you if able.) +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_4_2_pirate_noblock | TokenOwner$ TriggeredTarget | RememberTokens$ True | SubAbility$ DBGoad +SVar:DBGoad:DB$ Goad | Defined$ Remembered | Duration$ Permanent | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Flying\nWhenever one or more Faeries you control deal combat damage to a player, that player creates a 4/2 red Pirate creature token with "This creature can't block." The token is goaded for the rest of the game. (It attacks each combat if able and attacks a player other than you if able.) diff --git a/forge-gui/res/cardsfolder/upcoming/ox_drover.txt b/forge-gui/res/cardsfolder/upcoming/ox_drover.txt new file mode 100644 index 00000000000..d00281ef50b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ox_drover.txt @@ -0,0 +1,11 @@ +Name:Ox Drover +ManaCost:3 W +Types:Creature Human Peasant +PT:4/4 +K:Vigilance +S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.Ox | Description$ CARDNAME can't be blocked by Oxen. +T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, target opponent creates a 2/4 white Ox creature token and you draw a card. +T:Mode$ Attacks | ValidCard$ Card.Self | Secondary$ True | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, target opponent creates a 2/4 white Ox creature token and you draw a card. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | ValidTgts$ Opponent | TokenOwner$ Targeted | TokenScript$ w_2_4_ox | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw +Oracle:Vigilance\nOx Drover can't be blocked by Oxen.\nWhenever Ox Drover enters the battlefield or attacks, target opponent creates a 2/4 white Ox creature token and you draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/shadow_puppeteers.txt b/forge-gui/res/cardsfolder/upcoming/shadow_puppeteers.txt new file mode 100644 index 00000000000..ae8a4484580 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/shadow_puppeteers.txt @@ -0,0 +1,11 @@ +Name:Shadow Puppeteers +ManaCost:6 U +Types:Creature Faerie Wizard +PT:4/4 +K:Flying +K:Ward:2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create two 1/1 black Faerie Rogue creature tokens with flying. +SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ b_1_1_faerie_rogue_flying | TokenOwner$ You +T:Mode$ Attacks | ValidCard$ Creature.YouCtrl+withFlying | TriggerZones$ Battlefield | Execute$ TrigAnimate | TriggerDescription$ Whenever a creature you control with flying attacks, you may have it become a red Dragon with base power and toughness 4/4 in addition to its other colors and types until end of turn. +SVar:TrigAnimate:DB$ Animate | Defined$ TriggeredAttackerLKICopy | Power$ 4 | Toughness$ 4 | Types$ Dragon | Colors$ Red | Optional$ True +Oracle:Flying, ward {2}\nWhen Shadow Puppeteers enters the battlefield, create two 1/1 black Faerie Rogue creature tokens with flying.\nWhenever a creature you control with flying attacks, you may have it become a red Dragon with base power and toughness 4/4 in addition to its other colors and types until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/songbirds_blessing.txt b/forge-gui/res/cardsfolder/upcoming/songbirds_blessing.txt new file mode 100644 index 00000000000..566e479987d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/songbirds_blessing.txt @@ -0,0 +1,10 @@ +Name:Songbirds' Blessing +ManaCost:3 W +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Pump +T:Mode$ Attacks | ValidCard$ Card.AttachedBy | Execute$ TrigDigUntil | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted creature attacks, reveal cards from the top of your library until you reveal an Aura card. You may put that card onto the battlefield. If you don't, put it into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDigUntil:DB$ DigUntil | Valid$ Aura | FoundDestination$ Battlefield | OptionalFoundMove$ True | OptionalNoDestination$ Hand | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddSVar$ AE +SVar:AE:SVar:HasAttackEffect:TRUE +Oracle:Enchant creature\nWhenever enchanted creature attacks, reveal cards from the top of your library until you reveal an Aura card. You may put that card onto the battlefield. If you don't, put it into your hand. Put the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/tokenscripts/r_4_2_pirate_noblock.txt b/forge-gui/res/tokenscripts/r_4_2_pirate_noblock.txt new file mode 100644 index 00000000000..5a9454fc673 --- /dev/null +++ b/forge-gui/res/tokenscripts/r_4_2_pirate_noblock.txt @@ -0,0 +1,7 @@ +Name:Pirate Token +ManaCost:no cost +Types:Creature Pirate +Colors:red +PT:4/2 +S:Mode$ CantBlockBy | ValidBlocker$ Creature.Self | Description$ CARDNAME can't block. +Oracle:This creature can't block.