diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index b43e975147b..e76cc329aee 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2040,7 +2040,7 @@ public class ComputerUtilCombat { final boolean hasTrample = attacker.hasKeyword(Keyword.TRAMPLE); - if (combat != null && hasTrample && attacker.isAttacking()) { + if (combat != null && remaining != null && hasTrample && attacker.isAttacking()) { // if attacker has trample and some of its blockers are also blocking others it's generally a good idea // to assign those without trample first so we can maximize the damage to the defender for (final Card c : remaining) { 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 0dd3f2a444f..f6dc9b4d031 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -3230,7 +3230,6 @@ public class AbilityUtils { return num; } return secondaryNum; - } else { return num; } @@ -3389,15 +3388,15 @@ public class AbilityUtils { String[] lparts = l[0].split(" ", 2); final List vZone = ZoneType.listValueOf(lparts[0].split("Valid")[1]); String restrictions = TextUtil.fastReplace(l[0], TextUtil.addSuffix(lparts[0]," "), ""); - CardCollection cards = CardLists.getValidCards(game.getCardsIn(vZone), restrictions, player, source, ctb); - return doXMath(cards.size(), m, source, ctb); + int num = CardLists.getValidCardCount(game.getCardsIn(vZone), restrictions, player, source, ctb); + return doXMath(num, m, source, ctb); } // count valid cards on the battlefield if (l[0].startsWith("Valid ")) { final String restrictions = l[0].substring(6); - CardCollection cardsonbattlefield = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restrictions, player, source, ctb); - return doXMath(cardsonbattlefield.size(), m, source, ctb); + int num = CardLists.getValidCardCount(game.getCardsIn(ZoneType.Battlefield), restrictions, player, source, ctb); + return doXMath(num, m, source, ctb); } if (l[0].startsWith("ThisTurnEntered")) { @@ -3606,21 +3605,10 @@ public class AbilityUtils { */ public static int handlePaid(final Iterable paidList, final String string, final Card source, CardTraitBase ctb) { if (Iterables.isEmpty(paidList)) { - if (string.contains(".")) { - final String[] splitString = string.split("\\.", 2); - return doXMath(0, splitString[1], source, ctb); - } else { - return 0; - } + return doXMath(0, CardFactoryUtil.extractOperators(string), source, ctb); } if (string.startsWith("Amount")) { - int size = Iterables.size(paidList); - if (string.contains(".")) { - final String[] splitString = string.split("\\.", 2); - return doXMath(size, splitString[1], source, ctb); - } else { - return size; - } + return doXMath(Iterables.size(paidList), CardFactoryUtil.extractOperators(string), source, ctb); } if (string.startsWith("GreatestPower")) { @@ -3653,8 +3641,8 @@ public class AbilityUtils { if (string.startsWith("Valid")) { final String[] splitString = string.split("/", 2); String valid = splitString[0].substring(6); - final List list = CardLists.getValidCardsAsList(paidList, valid, source.getController(), source, ctb); - return doXMath(list.size(), splitString.length > 1 ? splitString[1] : null, source, ctb); + final int num = CardLists.getValidCardCount(paidList, valid, source.getController(), source, ctb); + return doXMath(num, splitString.length > 1 ? splitString[1] : null, source, ctb); } String filteredString = string; diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java index 175e5b60357..4fda72a8664 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java @@ -198,6 +198,7 @@ public class AnimateEffect extends AnimateEffectBase { if (sa.hasParam("Crew")) { c.becomesCrewed(sa); + c.updatePowerToughnessForView(); } game.fireEvent(new GameEventCardStatsChanged(c)); diff --git a/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java index e6d28711947..1b0e2146d1d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java @@ -167,7 +167,7 @@ public class MakeCardEffect extends SpellAbilityEffect { game.getTriggerHandler().runTrigger(TriggerType.ConjureAll, runParams, false); } - if (zone.equals(ZoneType.Library)) { + if (zone.equals(ZoneType.Library) && !sa.hasParam("LibraryPosition")) { player.shuffle(sa); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java index ff1fb278172..52488f3005e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java @@ -161,7 +161,7 @@ public class RepeatEachEffect extends SpellAbilityEffect { if (sa.hasParam("ChooseOrder") && !sa.getParam("ChooseOrder").equals("True")) { chooser = AbilityUtils.getDefinedPlayers(source, sa.getParam("ChooseOrder"), sa).get(0); } - while (validTypes.size() > 0) { + while (!validTypes.isEmpty()) { String chosenT = chooser.getController().chooseSomeType("card", sa, validTypes, null); source.setChosenType(chosenT); AbilityUtils.resolve(repeat); diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 8cf751a1997..673c1c621e0 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -6361,7 +6361,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { continue; } - if (!tr.getParam("Destination").equals(ZoneType.Battlefield.toString())) { + if (!ZoneType.Battlefield.toString().equals(tr.getParam("Destination"))) { continue; } diff --git a/forge-gui/res/cardsfolder/b/barrel_down_sokenzan.txt b/forge-gui/res/cardsfolder/b/barrel_down_sokenzan.txt index fa49cfeba4d..2a9d9ff4fa6 100644 --- a/forge-gui/res/cardsfolder/b/barrel_down_sokenzan.txt +++ b/forge-gui/res/cardsfolder/b/barrel_down_sokenzan.txt @@ -4,6 +4,6 @@ Types:Instant Arcane A:SP$ ChangeZone | Cost$ 2 R | Origin$ Battlefield | Destination$ Hand | ChangeType$ Mountain.YouCtrl | ChangeNum$ X | Hidden$ True | RememberChanged$ True | SubAbility$ DBDamage | SpellDescription$ Sweep — Return any number of Mountains you control to their owner's hand. CARDNAME deals damage to target creature equal to twice the number of Mountains returned this way. SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ Y SVar:X:Count$Valid Mountain.YouCtrl -SVar:Y:Remembered$Amount.Twice +SVar:Y:Remembered$Amount/Twice AI:RemoveDeck:All Oracle:Sweep — Return any number of Mountains you control to their owner's hand. Barrel Down Sokenzan deals damage to target creature equal to twice the number of Mountains returned this way. diff --git a/forge-gui/res/cardsfolder/b/bess_soul_nourisher.txt b/forge-gui/res/cardsfolder/b/bess_soul_nourisher.txt index 4ca83ed68a8..9ee210ce259 100644 --- a/forge-gui/res/cardsfolder/b/bess_soul_nourisher.txt +++ b/forge-gui/res/cardsfolder/b/bess_soul_nourisher.txt @@ -5,7 +5,7 @@ PT:1/1 T:Mode$ ChangesZoneAll | ValidCards$ Creature.basePowerEQ1+baseToughnessEQ1+Other+YouCtrl | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever one or more other creatures with base power and toughness 1/1 enter the battlefield under your control, put a +1/+1 counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerDescription$ Whenever NICKNAME attacks, each other creature you control with base power and toughness 1/1 gets +X/+X until end of turn, where X is the number of +1/+1 counters on NICKNAME. -SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.basePowerEQ1+baseToughnessEQ1+Other | NumAtt$ +X | NumDef$ +X +SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.basePowerEQ1+baseToughnessEQ1+Other+YouCtrl | NumAtt$ +X | NumDef$ +X SVar:X:Count$CardCounters.P1P1 DeckHas:Ability$Counters DeckHints:Type$Citizen diff --git a/forge-gui/res/cardsfolder/c/chandra_flamecaller.txt b/forge-gui/res/cardsfolder/c/chandra_flamecaller.txt index 20ae0fc3db3..70adef5dbf9 100644 --- a/forge-gui/res/cardsfolder/c/chandra_flamecaller.txt +++ b/forge-gui/res/cardsfolder/c/chandra_flamecaller.txt @@ -5,7 +5,7 @@ Loyalty:4 A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TokenAmount$ 2 | TokenScript$ r_3_1_elemental_haste | AtEOT$ Exile | SpellDescription$ Create two 3/1 red Elemental creature tokens with haste. Exile them at the beginning of the next end step. A:AB$ Discard | Cost$ AddCounter<0/LOYALTY> | Planeswalker$ True | Defined$ You | Mode$ Hand | RememberDiscarded$ True | SubAbility$ DBDraw | SpellDescription$ Discard all the cards in your hand, then draw that many cards plus one. SVar:DBDraw:DB$ Draw | NumCards$ Y | Defined$ You | SubAbility$ DBCleanup -SVar:Y:Remembered$Amount.Plus.1 +SVar:Y:Remembered$Amount/Plus.1 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ DamageAll | Cost$ SubCounter | NumDmg$ X | ValidCards$ Creature | Planeswalker$ True | Ultimate$ True | ValidDescription$ each creature. | SpellDescription$ CARDNAME deals X damage to each creature. SVar:X:Count$xPaid diff --git a/forge-gui/res/cardsfolder/c/corpseweft.txt b/forge-gui/res/cardsfolder/c/corpseweft.txt index 97950fc526f..1561c91a5a9 100644 --- a/forge-gui/res/cardsfolder/c/corpseweft.txt +++ b/forge-gui/res/cardsfolder/c/corpseweft.txt @@ -3,6 +3,6 @@ ManaCost:2 B Types:Enchantment A:AB$ Token | XCantBe0$ True | Cost$ 1 B ExileFromGrave | TokenAmount$ 1 | TokenScript$ b_x_x_zombie_horror | TokenOwner$ You | TokenPower$ Y | TokenToughness$ Y | TokenTapped$ True | SpellDescription$ Create a tapped X/X black Zombie Horror creature token, where X is twice the number of cards exiled this way. SVar:X:Count$xPaid -SVar:Y:ExiledCards$Amount.Twice +SVar:Y:ExiledCards$Amount/Twice AI:RemoveDeck:All Oracle:{1}{B}, Exile one or more creature cards from your graveyard: Create a tapped X/X black Zombie Horror creature token, where X is twice the number of cards exiled this way. diff --git a/forge-gui/res/cardsfolder/d/dark_deal.txt b/forge-gui/res/cardsfolder/d/dark_deal.txt index 7cd8d087840..acca3d4c7f9 100644 --- a/forge-gui/res/cardsfolder/d/dark_deal.txt +++ b/forge-gui/res/cardsfolder/d/dark_deal.txt @@ -5,7 +5,7 @@ A:SP$ RepeatEach | Cost$ 2 B | RepeatPlayers$ Player | RepeatSubAbility$ DBDisca SVar:DBDiscard:DB$ Discard | Defined$ Player.IsRemembered | Mode$ Hand | RememberDiscarded$ True | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | NumCards$ X | Defined$ Player.IsRemembered | SubAbility$ CleanDrawn SVar:CleanDrawn:DB$ Cleanup | ClearRemembered$ True -# This calculation isn't considering the remembered player, only the remembered cards? +# This calculation isn't considering the remembered player, only the remembered cards SVar:X:Remembered$Amount.Minus.1 AI:RemoveDeck:All AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/d/devouring_rage.txt b/forge-gui/res/cardsfolder/d/devouring_rage.txt index 4e3b25694e8..91cd4321414 100644 --- a/forge-gui/res/cardsfolder/d/devouring_rage.txt +++ b/forge-gui/res/cardsfolder/d/devouring_rage.txt @@ -3,7 +3,7 @@ ManaCost:4 R Types:Instant Arcane A:SP$ Pump | Cost$ 4 R Sac | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ Z | SpellDescription$ Target creature gets +3/+0 until end of turn. For each Spirit sacrificed this way, that creature gets an additional +3/+0 until end of turn. SVar:Z:SVar$Y/Thrice -SVar:Y:Sacrificed$Amount.Plus.1 +SVar:Y:Sacrificed$Amount/Plus.1 SVar:X:Count$xPaid AI:RemoveDeck:Random AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/f/flux.txt b/forge-gui/res/cardsfolder/f/flux.txt index 35be41db6f6..93271cefba1 100644 --- a/forge-gui/res/cardsfolder/f/flux.txt +++ b/forge-gui/res/cardsfolder/f/flux.txt @@ -6,7 +6,7 @@ SVar:DBFluxDiscard:DB$ Discard | Defined$ Player.IsRemembered | AnyNumber$ True SVar:DBFluxDraw:DB$ Draw | NumCards$ X | Defined$ Player.IsRemembered | SubAbility$ CleanTheFlux SVar:CleanTheFlux:DB$ Cleanup | ClearRemembered$ True SVar:DBDraw:DB$ Draw | NumCards$ 1 -SVar:X:Remembered$Amount/Minus.1 +SVar:X:Remembered$Amount AI:RemoveDeck:All AI:RemoveDeck:Random Oracle:Each player discards any number of cards, then draws that many cards.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/f/fracturing_gust.txt b/forge-gui/res/cardsfolder/f/fracturing_gust.txt index 40c77f712ba..34b62af4745 100644 --- a/forge-gui/res/cardsfolder/f/fracturing_gust.txt +++ b/forge-gui/res/cardsfolder/f/fracturing_gust.txt @@ -3,5 +3,5 @@ ManaCost:2 GW GW GW Types:Instant A:SP$ DestroyAll | Cost$ 2 GW GW GW | ValidCards$ Artifact,Enchantment | RememberDestroyed$ True | SubAbility$ DBGainLife | SpellDescription$ Destroy all artifacts and enchantments. You gain 2 life for each permanent destroyed this way. SVar:DBGainLife:DB$ GainLife | LifeAmount$ X -SVar:X:Remembered$Amount.Twice +SVar:X:Remembered$Amount/Twice Oracle:Destroy all artifacts and enchantments. You gain 2 life for each permanent destroyed this way. diff --git a/forge-gui/res/cardsfolder/h/heartwarming_redemption.txt b/forge-gui/res/cardsfolder/h/heartwarming_redemption.txt index b0150b2a035..b2608723aa7 100644 --- a/forge-gui/res/cardsfolder/h/heartwarming_redemption.txt +++ b/forge-gui/res/cardsfolder/h/heartwarming_redemption.txt @@ -3,7 +3,7 @@ ManaCost:2 R W Types:Instant A:SP$ Discard | Cost$ 2 R W | Defined$ You | RememberDiscarded$ True | Mode$ Hand | SubAbility$ DBDraw | SpellDescription$ Discard all the cards in your hand, then draw that many cards plus one. You gain life equal to the number of cards in your hand. SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ X | SubAbility$ DBGainLife -SVar:X:Remembered$Amount.Plus.1 +SVar:X:Remembered$Amount/Plus.1 SVar:DBGainLife:DB$ GainLife | LifeAmount$ Y | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:Y:Count$InYourHand diff --git a/forge-gui/res/cardsfolder/h/hellfire.txt b/forge-gui/res/cardsfolder/h/hellfire.txt index bccdf9515c4..3c826357cb9 100644 --- a/forge-gui/res/cardsfolder/h/hellfire.txt +++ b/forge-gui/res/cardsfolder/h/hellfire.txt @@ -3,7 +3,7 @@ ManaCost:2 B B B Types:Sorcery A:SP$ DestroyAll | Cost$ 2 B B B | ValidCards$ Creature.nonBlack | RememberDestroyed$ True | SubAbility$ DBDealDamage | SpellDescription$ Destroy all nonblack creatures. CARDNAME deals X plus 3 damage to you, where X is the number of creatures that died this way. SVar:DBDealDamage:DB$ DealDamage | NumDmg$ X | Defined$ You -SVar:X:Remembered$Amount.Plus.3 +SVar:X:Remembered$Amount/Plus.3 # Remember Destroyed still isn't quite right since Hellfire cares about Replacement effects too SVar:NeedsToPlayVar:Y GE5 SVar:Y:Count$YourLifeTotal diff --git a/forge-gui/res/cardsfolder/i/incendiary_command.txt b/forge-gui/res/cardsfolder/i/incendiary_command.txt index c4703784a1b..a3f8adb4604 100644 --- a/forge-gui/res/cardsfolder/i/incendiary_command.txt +++ b/forge-gui/res/cardsfolder/i/incendiary_command.txt @@ -9,5 +9,5 @@ SVar:DBDiscard:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBInce SVar:DBIncendiaryDiscard:DB$ Discard | Defined$ Player.IsRemembered | Mode$ Hand | RememberDiscarded$ True | SubAbility$ DBIncendiaryDraw SVar:DBIncendiaryDraw:DB$ Draw | NumCards$ X | Defined$ Player.IsRemembered | SubAbility$ CleanIncendiary SVar:CleanIncendiary:DB$ Cleanup | ClearRemembered$ True -SVar:X:Remembered$Amount/Minus.1 +SVar:X:Remembered$Amount Oracle:Choose two —\n• Incendiary Command deals 4 damage to target player or planeswalker.\n• Incendiary Command deals 2 damage to each creature.\n• Destroy target nonbasic land.\n• Each player discards all the cards in their hand, then draws that many cards. diff --git a/forge-gui/res/cardsfolder/i/into_the_night.txt b/forge-gui/res/cardsfolder/i/into_the_night.txt index 28f74d88108..7d5e5a8b5bc 100644 --- a/forge-gui/res/cardsfolder/i/into_the_night.txt +++ b/forge-gui/res/cardsfolder/i/into_the_night.txt @@ -5,5 +5,5 @@ A:SP$ DayTime | Value$ Night | SubAbility$ DBDiscard | SpellDescription$ It beco SVar:DBDiscard:DB$ Discard | AnyNumber$ True | Optional$ True | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBDraw | StackDescription$ {p:You} discards any number of cards, | SpellDescription$ Discard any number of cards, SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ Y | SubAbility$ DBCleanup | StackDescription$ then draws that many cards plus one. | SpellDescription$ then draw that many cards plus one. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:Y:Remembered$Amount.Plus.1 +SVar:Y:Remembered$Amount/Plus.1 Oracle:It becomes night. Discard any number of cards, then draw that many cards plus one. diff --git a/forge-gui/res/cardsfolder/j/jasmine_seer.txt b/forge-gui/res/cardsfolder/j/jasmine_seer.txt index cebfa1f47ef..e5cca11fe55 100644 --- a/forge-gui/res/cardsfolder/j/jasmine_seer.txt +++ b/forge-gui/res/cardsfolder/j/jasmine_seer.txt @@ -4,7 +4,7 @@ Types:Creature Human Wizard PT:1/1 A:AB$ Reveal | Cost$ 2 W T | Defined$ You | RevealValid$ Card.White | AnyNumber$ True | RememberRevealed$ True | SubAbility$ DBJasmineLife | SpellDescription$ Reveal any number of white cards in your hand. You gain 2 life for each card revealed this way. SVar:DBJasmineLife:DB$ GainLife | LifeAmount$ JasmineX | SubAbility$ DBJasmineCleanup -SVar:JasmineX:Remembered$Amount.Twice +SVar:JasmineX:Remembered$Amount/Twice SVar:DBJasmineCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All Oracle:{2}{W}, {T}: Reveal any number of white cards in your hand. You gain 2 life for each card revealed this way. diff --git a/forge-gui/res/cardsfolder/k/khorvaths_fury.txt b/forge-gui/res/cardsfolder/k/khorvaths_fury.txt index fd66e79408d..edd45208b81 100644 --- a/forge-gui/res/cardsfolder/k/khorvaths_fury.txt +++ b/forge-gui/res/cardsfolder/k/khorvaths_fury.txt @@ -8,7 +8,7 @@ SVar:DBDraw:DB$ Draw | NumCards$ X | Defined$ Player.IsRemembered | SubAbility$ SVar:FoeRepeat:DB$ RepeatEach | RepeatPlayers$ Remembered | ClearRememberedBeforeLoop$ True | RepeatSubAbility$ DBDmg | DamageMap$ True | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals damage to each foe equal to the number of cards in their hand. SVar:DBDmg:DB$ DealDamage | Defined$ Player.IsRemembered | NumDmg$ Y SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Remembered$Amount.Plus.1 +SVar:X:Remembered$Amount/Plus.1 SVar:Y:Count$ValidHand Card.RememberedPlayerCtrl SVar:NeedsToPlayVar:Z GE4 SVar:Z:Count$ValidHand Card.OppCtrl diff --git a/forge-gui/res/cardsfolder/m/metalworker.txt b/forge-gui/res/cardsfolder/m/metalworker.txt index d0e53171ca2..bb88645ff84 100644 --- a/forge-gui/res/cardsfolder/m/metalworker.txt +++ b/forge-gui/res/cardsfolder/m/metalworker.txt @@ -5,7 +5,7 @@ PT:1/2 A:AB$ Reveal | Cost$ T | RevealValid$ Card.Artifact+YouCtrl | AnyNumber$ True | RememberRevealed$ True | SubAbility$ DBMetalWorkerMana | SpellDescription$ Reveal any number of artifact cards in your hand. Add {C}{C} for each card revealed this way. SVar:DBMetalWorkerMana:DB$ Mana | Produced$ C | Amount$ MetalWorkerX | SubAbility$ DBMetalWorkerCleanup SVar:DBMetalWorkerCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:MetalWorkerX:Remembered$Amount.Twice +SVar:MetalWorkerX:Remembered$Amount/Twice AI:RemoveDeck:All AI:RemoveDeck:Random Oracle:{T}: Reveal any number of artifact cards in your hand. Add {C}{C} for each card revealed this way. diff --git a/forge-gui/res/cardsfolder/m/mogg_infestation.txt b/forge-gui/res/cardsfolder/m/mogg_infestation.txt index 9b3a07d1d65..c1a6b5dcb9b 100644 --- a/forge-gui/res/cardsfolder/m/mogg_infestation.txt +++ b/forge-gui/res/cardsfolder/m/mogg_infestation.txt @@ -3,5 +3,5 @@ ManaCost:3 R R Types:Sorcery A:SP$ DestroyAll | Cost$ 3 R R | ValidTgts$ Player | TgtPrompt$ Select target player | ValidCards$ Creature | ValidDescription$ all creatures targeted player controls | RememberDestroyed$ True | SubAbility$ DBTokenInfestation | SpellDescription$ Destroy all creatures target player controls. For each creature that died this way, that player creates two 1/1 red Goblin creature tokens. SVar:DBTokenInfestation:DB$ Token | TokenAmount$ X | TokenScript$ r_1_1_goblin | TokenOwner$ Targeted -SVar:X:Remembered$Amount.Twice +SVar:X:Remembered$Amount/Twice Oracle:Destroy all creatures target player controls. For each creature that died this way, that player creates two 1/1 red Goblin creature tokens. diff --git a/forge-gui/res/cardsfolder/m/molten_psyche.txt b/forge-gui/res/cardsfolder/m/molten_psyche.txt index b69510a91f4..a077479c42c 100644 --- a/forge-gui/res/cardsfolder/m/molten_psyche.txt +++ b/forge-gui/res/cardsfolder/m/molten_psyche.txt @@ -6,7 +6,7 @@ SVar:ShuffleHand:DB$ ChangeZoneAll | Defined$ Player.IsRemembered | Origin$ Hand SVar:PsychoDraw:DB$ Draw | NumCards$ X | Defined$ Player.IsRemembered | SubAbility$ MindFlame SVar:MindFlame:DB$ DealDamage | Defined$ Player.Opponent+IsRemembered | NumDmg$ Y | ConditionPresent$ Artifact.YouCtrl | ConditionCompare$ GE3 | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Remembered$Amount/Minus.1 +SVar:X:Remembered$Amount SVar:Y:PlayerCountRemembered$CardsDrawn SVar:NeedsToPlayVar:Z LE2 SVar:Z:Count$InYourHand diff --git a/forge-gui/res/cardsfolder/m/multanis_decree.txt b/forge-gui/res/cardsfolder/m/multanis_decree.txt index 1d705ca06ae..d8d99011b41 100644 --- a/forge-gui/res/cardsfolder/m/multanis_decree.txt +++ b/forge-gui/res/cardsfolder/m/multanis_decree.txt @@ -3,5 +3,5 @@ ManaCost:3 G Types:Sorcery A:SP$ DestroyAll | Cost$ 3 G | ValidCards$ Enchantment | RememberDestroyed$ True | SubAbility$ DBGainLife | SpellDescription$ Destroy all enchantments. You gain 2 life for each enchantment destroyed this way. SVar:DBGainLife:DB$ GainLife | LifeAmount$ X -SVar:X:Remembered$Amount.Twice +SVar:X:Remembered$Amount/Twice Oracle:Destroy all enchantments. You gain 2 life for each enchantment destroyed this way. diff --git a/forge-gui/res/cardsfolder/o/organ_harvest.txt b/forge-gui/res/cardsfolder/o/organ_harvest.txt index 9c6f553d639..a51edaa1a32 100644 --- a/forge-gui/res/cardsfolder/o/organ_harvest.txt +++ b/forge-gui/res/cardsfolder/o/organ_harvest.txt @@ -6,5 +6,5 @@ SVar:DBSac:DB$ Sacrifice | Defined$ Remembered | Amount$ SacX | SacValid$ Creatu SVar:DBMana:DB$ Mana | Produced$ B | Amount$ ManaX | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:SacX:Count$Valid Creature -SVar:ManaX:Remembered$Amount.Twice +SVar:ManaX:Remembered$Amount/Twice Oracle:Your team may sacrifice any number of creatures. For each creature sacrificed this way, you add {B}{B}. diff --git a/forge-gui/res/cardsfolder/r/rain_of_daggers.txt b/forge-gui/res/cardsfolder/r/rain_of_daggers.txt index f81d0fa0488..5fb95b51c90 100644 --- a/forge-gui/res/cardsfolder/r/rain_of_daggers.txt +++ b/forge-gui/res/cardsfolder/r/rain_of_daggers.txt @@ -3,6 +3,6 @@ ManaCost:4 B B Types:Sorcery A:SP$ DestroyAll | Cost$ 4 B B | ValidCards$ Creature | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | RememberDestroyed$ True | SubAbility$ DBLoseLife | SpellDescription$ Destroy all creatures target opponent controls. You lose 2 life for each creature destroyed this way. SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X -SVar:X:Remembered$Amount.Twice +SVar:X:Remembered$Amount/Twice AI:RemoveDeck:All Oracle:Destroy all creatures target opponent controls. You lose 2 life for each creature destroyed this way. diff --git a/forge-gui/res/cardsfolder/r/renounce.txt b/forge-gui/res/cardsfolder/r/renounce.txt index 61a2c2ddf45..147028e6211 100644 --- a/forge-gui/res/cardsfolder/r/renounce.txt +++ b/forge-gui/res/cardsfolder/r/renounce.txt @@ -5,6 +5,6 @@ A:SP$ Sacrifice | Cost$ 1 W | Defined$ You | Amount$ SacX | SacValid$ Permanent SVar:DBGainLife:DB$ GainLife | LifeAmount$ LifeX | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:SacX:Count$Valid Permanent.YouCtrl -SVar:LifeX:Remembered$Amount.Twice +SVar:LifeX:Remembered$Amount/Twice AI:RemoveDeck:All Oracle:Sacrifice any number of permanents. You gain 2 life for each permanent sacrificed this way. diff --git a/forge-gui/res/cardsfolder/r/revival_experiment.txt b/forge-gui/res/cardsfolder/r/revival_experiment.txt index 97be59a766a..3e6e08cb2af 100644 --- a/forge-gui/res/cardsfolder/r/revival_experiment.txt +++ b/forge-gui/res/cardsfolder/r/revival_experiment.txt @@ -2,7 +2,7 @@ Name:Revival Experiment ManaCost:4 B G Types:Sorcery A:SP$ RepeatEach | RepeatTypesFrom$ Permanent.YouOwn | TypesFromZone$ Graveyard | RepeatSubAbility$ ChooseCard | SubAbility$ DBReturn | SpellDescription$ For each permanent type, return up to one card of that type from your graveyard to the battlefield. -SVar:ChooseCard:DB$ ChooseCard | Choices$ Card.ChosenType+YouOwn | ChoiceTitle$ Choose up to one card of this type to return | ChoiceTitleAppend$ ChosenType | RememberChosen$ True +SVar:ChooseCard:DB$ ChooseCard | Choices$ Card.ChosenType+YouOwn | ChoiceZone$ Graveyard | ChoiceTitle$ Choose up to one card of this type to return | ChoiceTitleAppend$ ChosenType | RememberChosen$ True SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ Remembered | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBLoseLife SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X | SubAbility$ DBChange | StackDescription$ SpellDescription | SubAbility$ DBExile | SpellDescription$ You lose 3 life for each card returned this way. SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | SubAbility$ DBCleanup | SpellDescription$ Exile CARDNAME. diff --git a/forge-gui/res/cardsfolder/r/righteous_fury.txt b/forge-gui/res/cardsfolder/r/righteous_fury.txt index f07f2e4dd6c..1799df1deeb 100644 --- a/forge-gui/res/cardsfolder/r/righteous_fury.txt +++ b/forge-gui/res/cardsfolder/r/righteous_fury.txt @@ -3,5 +3,5 @@ ManaCost:4 W W Types:Sorcery A:SP$ DestroyAll | Cost$ 4 W W | ValidCards$ Creature.tapped | RememberDestroyed$ True | SubAbility$ DBGainLife | SpellDescription$ Destroy all tapped creatures. You gain 2 life for each creature destroyed this way. SVar:DBGainLife:DB$ GainLife | LifeAmount$ X -SVar:X:Remembered$Amount.Twice +SVar:X:Remembered$Amount/Twice Oracle:Destroy all tapped creatures. You gain 2 life for each creature destroyed this way. diff --git a/forge-gui/res/cardsfolder/s/scent_of_jasmine.txt b/forge-gui/res/cardsfolder/s/scent_of_jasmine.txt index cd1d0c9a73f..2c160ec4ff0 100644 --- a/forge-gui/res/cardsfolder/s/scent_of_jasmine.txt +++ b/forge-gui/res/cardsfolder/s/scent_of_jasmine.txt @@ -3,7 +3,7 @@ ManaCost:W Types:Instant A:SP$ Reveal | Cost$ W | Defined$ You | RevealValid$ Card.White | AnyNumber$ True | RememberRevealed$ True | SubAbility$ DBScentOfJasmineLife | SpellDescription$ Reveal any number of white cards in your hand. You gain 2 life for each card revealed this way. SVar:DBScentOfJasmineLife:DB$ GainLife | LifeAmount$ ScentOfJasmineX | SubAbility$ DBScentOfJasmineCleanup -SVar:ScentOfJasmineX:Remembered$Amount.Twice +SVar:ScentOfJasmineX:Remembered$Amount/Twice SVar:DBScentOfJasmineCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All Oracle:Reveal any number of white cards in your hand. You gain 2 life for each card revealed this way. diff --git a/forge-gui/res/cardsfolder/w/whirlpool_warrior.txt b/forge-gui/res/cardsfolder/w/whirlpool_warrior.txt index e965ef7a2ed..606425e33c5 100644 --- a/forge-gui/res/cardsfolder/w/whirlpool_warrior.txt +++ b/forge-gui/res/cardsfolder/w/whirlpool_warrior.txt @@ -7,11 +7,9 @@ SVar:WhirlYou:DB$ ChangeZoneAll | Defined$ You | Origin$ Hand | Destination$ Lib SVar:DBDraw:DB$ Draw | NumCards$ X | Defined$ You | SubAbility$ DBCleanup A:AB$ RepeatEach | Cost$ R Sac<1/CARDNAME> | RepeatPlayers$ Player | RepeatSubAbility$ ShuffleHand | SpellDescription$ Each player shuffles the cards from their hand into their library, then draws that many cards. SVar:ShuffleHand:DB$ ChangeZoneAll | Defined$ Player.IsRemembered | Origin$ Hand | Destination$ Library | LibraryPosition$ -1 | RememberChanged$ True | Shuffle$ True | SubAbility$ WindDraw -SVar:WindDraw:DB$ Draw | NumCards$ Y | Defined$ Player.IsRemembered | SubAbility$ DBCleanup +SVar:WindDraw:DB$ Draw | NumCards$ X | Defined$ Player.IsRemembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount -# Amount Minus 1 because the Player is also being remembered at this point -SVar:Y:Remembered$Amount/Minus.1 AI:RemoveDeck:Random AI:RemoveDeck:All Oracle:When Whirlpool Warrior enters the battlefield, shuffle the cards from your hand into your library, then draw that many cards.\n{R}, Sacrifice Whirlpool Warrior: Each player shuffles the cards from their hand into their library, then draws that many cards. diff --git a/forge-gui/res/cardsfolder/w/winds_of_change.txt b/forge-gui/res/cardsfolder/w/winds_of_change.txt index 91287368af3..65949cb0ed3 100644 --- a/forge-gui/res/cardsfolder/w/winds_of_change.txt +++ b/forge-gui/res/cardsfolder/w/winds_of_change.txt @@ -5,8 +5,7 @@ A:SP$ RepeatEach | Cost$ R | RepeatPlayers$ Player | RepeatSubAbility$ ShuffleHa SVar:ShuffleHand:DB$ ChangeZoneAll | Defined$ Player.IsRemembered | Origin$ Hand | Destination$ Library | LibraryPosition$ -1 | RememberChanged$ True | Shuffle$ True | SubAbility$ WindDraw SVar:WindDraw:DB$ Draw | NumCards$ X | Defined$ Player.IsRemembered | SubAbility$ CleanTheWind SVar:CleanTheWind:DB$ Cleanup | ClearRemembered$ True -SVar:X:Remembered$Amount/Minus.1 -# Amount Minus 1 because the Player is also being remembered at this point +SVar:X:Remembered$Amount AI:RemoveDeck:Random AI:RemoveDeck:All Oracle:Each player shuffles the cards from their hand into their library, then draws that many cards.