From ee2ad22967df24399bb7e87605a661fb87bebbf8 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 21 May 2022 20:23:55 -0400 Subject: [PATCH 1/2] skyway_robber.txt --- .../cardsfolder/upcoming/skyway_robber.txt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/skyway_robber.txt diff --git a/forge-gui/res/cardsfolder/upcoming/skyway_robber.txt b/forge-gui/res/cardsfolder/upcoming/skyway_robber.txt new file mode 100644 index 00000000000..046d0b8d788 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/skyway_robber.txt @@ -0,0 +1,20 @@ +Name:Skyway Robber +ManaCost:3 U +Types:Creature Bird Rogue +PT:3/3 +K:Flying +K:Escape:3 U ExileFromGrave<5/Card.Other/other> +A:SP$ PermanentCreature | RememberCostCards$ True +SVar:AIPreference:ExileFromGraveCost$Artifact.YouOwn+Other+inZoneGraveyard,Instant.YouOwn+Other+inZoneGraveyard,Sorcery.YouOwn+Other+inZoneGraveyard +#R:Event$ Moved | ValidCard$ Card.Self+escaped | Destination$ Battlefield | ReplaceWith$ DBAnimate | Description$ CARDNAME escapes with "Whenever CARDNAME deals combat damage to a player, you may cast an artifact, instant, or sorcery spell from among cards exiled with CARDNAME without paying its mana cost." +K:ETBReplacement:Other:DBAnimate:Mandatory::Card.Self+escaped +SVar:DBAnimate:DB$ Animate | Triggers$ DamageTrig | Duration$ Permanent | SpellDescription$ CARDNAME escapes with "Whenever CARDNAME deals combat damage to a player, you may cast an artifact, instant, or sorcery spell from among cards exiled with CARDNAME without paying its mana cost." +SVar:DamageTrig:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigCast | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may cast an artifact, instant, or sorcery spell from among cards exiled with CARDNAME without paying its mana cost. +SVar:TrigCast:DB$ Play | ValidZone$ Exile | Valid$ Artifact.IsRemembered+ExiledWithSource,Instant.IsRemembered+ExiledWithSource,Sorcery.IsRemembered+ExiledWithSource | ValidSA$ Spell | Controller$ You | WithoutManaCost$ True | Amount$ 1 | Optional$ True +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigCleanup | Static$ True +SVar:TrigCleanup:DB$ Cleanup | ClearRemembered$ True +T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered+ExiledWithSource | Execute$ DBForget +SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard +DeckHas:Ability$Graveyard +DeckHints:Type$Artifact|Instant|Sorcery +Oracle:Flying\nEscape—{3}{U}, Exile five other cards from your graveyard. (You may cast this card from your graveyard for its escape cost.)\nSkyway Robber escapes with "Whenever Skyway Robber deals combat damage to a player, you may cast an artifact, instant, or sorcery spell from among cards exiled with Skyway Robber without paying its mana cost." From 48bc0737ecddfa9551807733e5498b108268aefd Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 21 May 2022 20:25:21 -0400 Subject: [PATCH 2/2] AbilityUtils > handleRemembering - "RememberCostCards" look at paidHash instead of referencing Cost --- .../java/forge/game/ability/AbilityUtils.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 5439518582a..c897b596d6e 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1602,42 +1602,39 @@ public class AbilityUtils { if (sa.hasParam("RememberCostCards") && !sa.getPaidHash().isEmpty()) { List noList = Lists.newArrayList(); + Map paidLists = sa.getPaidHash(); if (sa.hasParam("RememberCostExcept")) { noList.addAll(AbilityUtils.getDefinedCards(host, sa.getParam("RememberCostExcept"), sa)); } - if (sa.getParam("Cost").contains("Exile")) { + if (paidLists.containsKey("Exiled")) { final CardCollection paidListExiled = sa.getPaidList("Exiled"); for (final Card exiledAsCost : paidListExiled) { if (!noList.contains(exiledAsCost)) { host.addRemembered(exiledAsCost); } } - } - else if (sa.getParam("Cost").contains("Sac")) { + } else if (paidLists.containsKey("Sacrificed")) { final CardCollection paidListSacrificed = sa.getPaidList("Sacrificed"); for (final Card sacrificedAsCost : paidListSacrificed) { if (!noList.contains(sacrificedAsCost)) { host.addRemembered(sacrificedAsCost); } } - } - else if (sa.getParam("Cost").contains("tapXType")) { + } else if (paidLists.containsKey("Tapped")) { final CardCollection paidListTapped = sa.getPaidList("Tapped"); for (final Card tappedAsCost : paidListTapped) { if (!noList.contains(tappedAsCost)) { host.addRemembered(tappedAsCost); } } - } - else if (sa.getParam("Cost").contains("Unattach")) { + } else if (paidLists.containsKey("Unattached")) { final CardCollection paidListUnattached = sa.getPaidList("Unattached"); for (final Card unattachedAsCost : paidListUnattached) { if (!noList.contains(unattachedAsCost)) { host.addRemembered(unattachedAsCost); } } - } - else if (sa.getParam("Cost").contains("Discard")) { + } else if (paidLists.containsKey("Discarded")) { final CardCollection paidListDiscarded = sa.getPaidList("Discarded"); for (final Card discardedAsCost : paidListDiscarded) { if (!noList.contains(discardedAsCost)) {