diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index e663feb77da..4939cdd9282 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -1398,7 +1398,7 @@ public abstract class GameState { c.setTurnInZone(turn); } else if (info.equals("IsToken")) { c.setGamePieceType(GamePieceType.TOKEN); - } else if (info.equals("ClassLevel:")) { + } else if (info.startsWith("ClassLevel:")) { c.setClassLevel(Integer.parseInt(info.substring(info.indexOf(':') + 1))); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java index 7f3ca431d7d..08ac7418f67 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java @@ -258,6 +258,10 @@ public class CopyPermanentEffect extends TokenEffectBase { if (sa.hasParam("ForEach")) { for (Player p : AbilityUtils.getDefinedPlayers(host, sa.getParam("ForEach"), sa)) { + if (sa.hasParam("OptionalForEach") && !activator.getController().confirmAction(sa, null, + Localizer.getInstance().getMessage("lblCopyPermanentConfirm") + " (" + p + ")", null)) { + continue; + } Card proto = getProtoType(sa, c, controller); proto.addRemembered(p); tokenTable.put(controller, proto, numCopies); diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java index e02678d9cc8..a5884ba720c 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java @@ -123,7 +123,6 @@ public class DigEffect extends SpellAbilityEffect { int destZone1ChangeNum = 1; String changeValid = sa.getParamOrDefault("ChangeValid", ""); final boolean anyNumber = sa.hasParam("AnyNumber"); - final boolean optional = sa.hasParam("Optional"); final boolean skipReorder = sa.hasParam("SkipReorder"); @@ -300,6 +299,17 @@ public class DigEffect extends SpellAbilityEffect { if (!movedCards.isEmpty()) { game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedChosen", chooser.getName(), "")); } + } else if (sa.hasParam("WithDifferentPowers")) { + movedCards = new CardCollection(); + while (!valid.isEmpty() && (anyNumber || movedCards.size() < destZone1ChangeNum)) { + String title = Localizer.getInstance().getMessage(movedCards.isEmpty()?"lblChooseCreature":"lblChooseCreatureWithDiffPower"); + Card choice = p.getController().chooseSingleEntityForEffect(valid, sa, title, true, null); + if (choice == null) { + break; + } + movedCards.add(choice); + valid = CardLists.getValidCards(valid, "Card.powerNE" + choice.getNetPower(), activator, host, sa); + } } else { String prompt; 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 df4e2fc8cfe..fe5b8489d91 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -7206,6 +7206,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr setRegeneratedThisTurn(0); resetShieldCount(); setBecameTargetThisTurn(false); + setValiant(false); setFoughtThisTurn(false); turnedFaceUpThisTurn = false; clearMustBlockCards(); 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 4d64ee8fb2d..ecb07b2b39b 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1553,7 +1553,7 @@ public class CardFactoryUtil { final String actualTrigger = "Mode$ Attacks | ValidCard$ Card.Self | Secondary$ True" + " | TriggerDescription$ Myriad (" + inst.getReminderText() + ")"; - final String copyStr = "DB$ CopyPermanent | Defined$ Self | TokenTapped$ True | Optional$ True | TokenAttacking$ RememberedPlayer & Valid Planeswalker.ControlledBy Remembered" + final String copyStr = "DB$ CopyPermanent | Defined$ Self | TokenTapped$ True | OptionalForEach$ True | TokenAttacking$ RememberedPlayer & Valid Planeswalker.ControlledBy Remembered" + "| ForEach$ OppNonDefendingPlayer | AtEOT$ ExileCombat | CleanupForEach$ True"; final SpellAbility copySA = AbilityFactory.getAbility(copyStr, card); diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index d8649bd4ebc..cccbaac5d86 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -292,17 +292,6 @@ public class CardProperty { if (!source.isRemembered(p)) { return false; } - } else if (property.startsWith("nonRememberedPlayerCtrl")) { - if (!source.hasRemembered()) { - final Card newCard = game.getCardState(source); - if (newCard.isRemembered(controller)) { - return false; - } - } - - if (source.isRemembered(controller)) { - return false; - } } else if (property.equals("targetedBy")) { if (!(spellAbility instanceof SpellAbility)) { return false; diff --git a/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java b/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java index 1b2933d00f0..04788a01ae3 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java +++ b/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java @@ -307,7 +307,7 @@ public class ManaCostBeingPaid { sc.xCount = sc.totalCount; } // nothing more left in otherSubtract - return; + break; } } } @@ -327,7 +327,7 @@ public class ManaCostBeingPaid { sc.xCount = sc.totalCount; } // nothing more left in otherSubtract - return; + break; } } } @@ -347,7 +347,7 @@ public class ManaCostBeingPaid { sc.xCount = sc.totalCount; } // nothing more left in otherSubtract - return; + break; } } } @@ -367,7 +367,7 @@ public class ManaCostBeingPaid { sc.xCount = sc.totalCount; } // nothing more left in otherSubtract - return; + break; } } } @@ -389,7 +389,7 @@ public class ManaCostBeingPaid { sc.xCount = sc.totalCount; } // nothing more left in otherSubtract - return; + break; } } else if (sc.xCount > 0) { // X part that can only be paid by specific color if (otherSubtract >= sc.xCount) { @@ -403,7 +403,7 @@ public class ManaCostBeingPaid { sc.totalCount -= otherSubtract; sc.xCount -= otherSubtract; // nothing more left in otherSubtract - return; + break; } } } diff --git a/forge-gui/res/cardsfolder/c/choose_your_champion.txt b/forge-gui/res/cardsfolder/c/choose_your_champion.txt index 43e11ba6009..3a2eff44e61 100644 --- a/forge-gui/res/cardsfolder/c/choose_your_champion.txt +++ b/forge-gui/res/cardsfolder/c/choose_your_champion.txt @@ -4,6 +4,6 @@ Types:Scheme T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ ChooseChampion | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, target opponent chooses a player. Until your next turn, only you and the chosen player can cast spells and attack with creatures. SVar:ChooseChampion:DB$ ChoosePlayer | ValidTgts$ Opponent | Choices$ Player | AILogic$ BestAllyBoardPosition | SubAbility$ PrepChamps SVar:PrepChamps:DB$ Effect | RememberObjects$ ChosenPlayer,You | Name$ Choose Your Champion Scheme | Duration$ UntilYourNextTurn | StaticAbilities$ RestrictAttackers,RestrictCasting -SVar:RestrictAttackers:Mode$ CantAttack | EffectZone$ Command | ValidCard$ Creature.nonRememberedPlayerCtrl | Description$ Until your next turn, only you and the chosen player can attack with creatures. +SVar:RestrictAttackers:Mode$ CantAttack | EffectZone$ Command | ValidCard$ Creature.!RememberedPlayerCtrl | Description$ Until your next turn, only you and the chosen player can attack with creatures. SVar:RestrictCasting:Mode$ CantBeCast | ValidCard$ Card | Caster$ Player.IsNotRemembered | EffectZone$ Command | Description$ Until your next turn, only you and the chosen player can cast spells. Oracle:When you set this scheme in motion, target opponent chooses a player. Until your next turn, only you and the chosen player can cast spells and attack with creatures. diff --git a/forge-gui/res/cardsfolder/d/doomsday.txt b/forge-gui/res/cardsfolder/d/doomsday.txt index 2554696e343..e0b92280dc4 100644 --- a/forge-gui/res/cardsfolder/d/doomsday.txt +++ b/forge-gui/res/cardsfolder/d/doomsday.txt @@ -1,7 +1,7 @@ Name:Doomsday ManaCost:B B B Types:Sorcery -A:SP$ ChangeZone | Origin$ Graveyard,Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 5 | SubAbility$ DBChangeZone | RememberChanged$ True | Mandatory$ True | SpellDescription$ Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. +A:SP$ ChangeZone | Origin$ Graveyard,Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 5 | Shuffle$ False | SubAbility$ DBChangeZone | RememberChanged$ True | Mandatory$ True | SpellDescription$ Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. SVar:DBChangeZone:DB$ ChangeZoneAll | Defined$ You | Origin$ Graveyard,Library | Destination$ Exile | ChangeType$ Card.IsNotRemembered | SubAbility$ DBDig SVar:DBDig:DB$ RearrangeTopOfLibrary | Defined$ You | NumCards$ X | SubAbility$ DBLoseLife SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ Y | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/d/drop_tower.txt b/forge-gui/res/cardsfolder/d/drop_tower.txt index 3f4934695db..c00f4b335e5 100644 --- a/forge-gui/res/cardsfolder/d/drop_tower.txt +++ b/forge-gui/res/cardsfolder/d/drop_tower.txt @@ -11,5 +11,5 @@ K:Visit:TrigPump SVar:TrigPump:DB$ Effect | StaticAbilities$ Pump | ValidTgts$ Creature | Triggers$ ExileSelf | RememberObjects$ Targeted | SpellDescription$ Target creature gains flying until end of turn, or until any player rolls a 1, whichever comes first. SVar:Pump:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ Flying | Description$ This creature gains flying until end of turn, or until any player rolls a 1. SVar:ExileSelf:Mode$ RolledDie | Execute$ TrigRemove | ValidResult$ EQ1 | Static$ True -SVar:TrigRemove:DB$ ChangeZone | Origin$ Command | Defined$ Self | Destination$ Exiled +SVar:TrigRemove:DB$ ChangeZone | Origin$ Command | Defined$ Self | Destination$ Exile Oracle:Visit — Target creature gains flying until end of turn, or until any player rolls a 1, whichever comes first. diff --git a/forge-gui/res/cardsfolder/f/fortunate_few.txt b/forge-gui/res/cardsfolder/f/fortunate_few.txt index e6874990823..d39c590222d 100644 --- a/forge-gui/res/cardsfolder/f/fortunate_few.txt +++ b/forge-gui/res/cardsfolder/f/fortunate_few.txt @@ -2,7 +2,7 @@ Name:Fortunate Few ManaCost:3 W W Types:Sorcery A:SP$ RepeatEach | StartingWithActivator$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose | SubAbility$ DBDestroyAll | SpellDescription$ Choose a nonland permanent you don't control, then each other player chooses a nonland permanent they don't control that hasn't been chosen this way. Destroy all other nonland permanents. -SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Permanent.nonLand+nonRememberedPlayerCtrl+IsNotRemembered | RememberChosen$ True | ChoiceZone$ Battlefield | AILogic$ WorstCard +SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Permanent.nonLand+!RememberedPlayerCtrl+IsNotRemembered | RememberChosen$ True | ChoiceZone$ Battlefield | AILogic$ WorstCard SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Permanent.nonLand+IsNotRemembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Choose a nonland permanent you don't control, then each other player chooses a nonland permanent they don't control that hasn't been chosen this way. Destroy all other nonland permanents. diff --git a/forge-gui/res/cardsfolder/k/keen_duelist.txt b/forge-gui/res/cardsfolder/k/keen_duelist.txt index c2857ad4526..b9737f76f5e 100644 --- a/forge-gui/res/cardsfolder/k/keen_duelist.txt +++ b/forge-gui/res/cardsfolder/k/keen_duelist.txt @@ -2,14 +2,11 @@ Name:Keen Duelist ManaCost:1 B Types:Creature Human Wizard PT:2/2 -T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigRepeatEach | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, you and target opponent each reveal the top card of your library. You each lose life equal to the mana value of the card revealed by the other player. You each put the card you revealed into your hand. -SVar:TrigRepeatEach:DB$ RepeatEach | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | RepeatPlayers$ TargetedAndYou | RepeatSubAbility$ DBReveal | SubAbility$ DBRepeatEach -SVar:DBReveal:DB$ Dig | Defined$ Player.IsRemembered | DigNum$ 1 | Reveal$ True | ChangeNum$ All | ChangeValid$ Card | DestinationZone$ Library | RememberChanged$ True -SVar:DBRepeatEach:DB$ RepeatEach | RepeatPlayers$ TargetedAndYou | RepeatSubAbility$ DBImprint | SubAbility$ DBChangeZoneAll -SVar:DBImprint:DB$ Pump | ImprintCards$ ValidAll Card.IsRemembered+nonRememberedPlayerCtrl | SubAbility$ DBLoseLife -SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ X | SubAbility$ DBClearImprint -SVar:DBClearImprint:DB$ Cleanup | ClearImprinted$ True +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigReveal | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, you and target opponent each reveal the top card of your library. You each lose life equal to the mana value of the card revealed by the other player. You each put the card you revealed into your hand. +SVar:TrigReveal:DB$ PeekAndReveal | NoPeek$ True | ValidTgts$ Opponent | Defined$ TargetedAndYou | RememberRevealed$ True | SubAbility$ DBRepeatEach +SVar:DBRepeatEach:DB$ RepeatEach | RepeatPlayers$ TargetedAndYou | RepeatSubAbility$ DBLoseLife | SubAbility$ DBChangeZoneAll +SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ X SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Hand | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Imprinted$CardManaCost +SVar:X:Count$ValidLibrary Card.IsRemembered+!RememberedPlayerCtrl$CardManaCost Oracle:At the beginning of your upkeep, you and target opponent each reveal the top card of your library. You each lose life equal to the mana value of the card revealed by the other player. You each put the card you revealed into your hand. diff --git a/forge-gui/res/cardsfolder/m/myra_the_magnificent.txt b/forge-gui/res/cardsfolder/m/myra_the_magnificent.txt index 142d1778e98..9738fdc29ba 100644 --- a/forge-gui/res/cardsfolder/m/myra_the_magnificent.txt +++ b/forge-gui/res/cardsfolder/m/myra_the_magnificent.txt @@ -6,8 +6,9 @@ T:Mode$ SpellCast | ValidCard$ Instant.wasCastFromYourHandByYou,Sorcery.wasCastF SVar:TrigOpenAttraction:DB$ OpenAttraction A:AB$ ChangeZone | Cost$ X T | ValidTgts$ Instant.cmcEQX+YouCtrl,Sorcery.cmcEQX+YouCtrl | Origin$ Graveyard | Imprint$ True | Destination$ Exile | SubAbility$ DBPutCounter | SpellDescription$ Exile target instant or sorcery card with mana value X from your graveyard and choose an Attraction you control that doesn't have a midway counter on it. Put a midway counter on it. For as long as that Attraction is on the battlefield, whenever you visit it, copy the exiled card. You may cast the copy without paying its mana cost. SVar:DBPutCounter:DB$ PutCounter | Choices$ Attraction.YouCtrl+counters_EQ0_MIDWAY | RememberPut$ True | ChoicePrompt$ Select target attraction you control that doesn't have a midway counter on it | CounterType$ MIDWAY | CounterNum$ 1 | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | Triggers$ TrigVisit,RemoveEffect | RememberObjects$ Remembered | ImprintCards$ Imprinted | Duration$ Permanent -SVar:TrigVisit:Mode$ VisitAttraction | ValidCard$ Attraction.IsRemembered | Execute$ TrigCopy | TriggerDescription$ For as long as that Attraction is on the battlefield, whenever you visit it, copy the exiled card. You may cast the copy without paying its mana cost. +SVar:DBEffect:DB$ Effect | Triggers$ TrigVisit,RemoveEffect | RememberObjects$ Remembered | ImprintCards$ Imprinted | Duration$ Permanent | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True +SVar:TrigVisit:Mode$ VisitAttraction | ValidPlayer$ You | ValidCard$ Attraction.IsRemembered | Execute$ TrigCopy | TriggerDescription$ For as long as that Attraction is on the battlefield, whenever you visit it, copy the exiled card. You may cast the copy without paying its mana cost. SVar:TrigCopy:DB$ Play | Valid$ Card.IsImprinted | ValidSA$ Spell | ValidZone$ Exile | WithoutManaCost$ True | Amount$ All | Optional$ True | CopyCard$ True SVar:RemoveEffect:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsRemembered | Static$ True | Execute$ ExileEffect SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile diff --git a/forge-gui/res/cardsfolder/s/saw_in_half.txt b/forge-gui/res/cardsfolder/s/saw_in_half.txt index 9a6f9ba25af..de86038d9a0 100644 --- a/forge-gui/res/cardsfolder/s/saw_in_half.txt +++ b/forge-gui/res/cardsfolder/s/saw_in_half.txt @@ -2,7 +2,7 @@ Name:Saw in Half ManaCost:2 B Types:Instant A:SP$ Destroy | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBCopy | RememberLKI$ True | SpellDescription$ Destroy target creature. -SVar:DBCopy:DB$ CopyPermanent | Defined$ Remembered | NumCopies$ 2 | Controller$ TargetedController | SetPower$ dX | SetToughness$ dY | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup | StackDescription$ SpellDescription | SpellDescription$ If that creature dies this way, its controller creates two tokens that are copies of that creature, except their base power is half that creature's power and their base toughness is half that creature's toughness. Round up each time. +SVar:DBCopy:DB$ CopyPermanent | Defined$ RememberedLKI | NumCopies$ 2 | Controller$ TargetedController | SetPower$ dX | SetToughness$ dY | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup | StackDescription$ SpellDescription | SpellDescription$ If that creature dies this way, its controller creates two tokens that are copies of that creature, except their base power is half that creature's power and their base toughness is half that creature's toughness. Round up each time. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount SVar:dX:RememberedLKI$CardPower/HalfUp diff --git a/forge-gui/res/cardsfolder/upcoming/a_premonition_of_your_demise.txt b/forge-gui/res/cardsfolder/upcoming/a_premonition_of_your_demise.txt index 141d9a98e09..a134c66e025 100644 --- a/forge-gui/res/cardsfolder/upcoming/a_premonition_of_your_demise.txt +++ b/forge-gui/res/cardsfolder/upcoming/a_premonition_of_your_demise.txt @@ -1,7 +1,7 @@ Name:A Premonition of Your Demise ManaCost:no cost Types:Scheme -T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ TrigRepeatEach | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, reveal the top two cards of your library and put them into your hand. When you reveal one or more nonland cards this way, this scheme deals damage equal to their total mana value to any target. +T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DBDig | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, reveal the top two cards of your library and put them into your hand. When you reveal one or more nonland cards this way, this scheme deals damage equal to their total mana value to any target. SVar:DBDig:DB$ Dig | DigNum$ 2 | Reveal$ True | ChangeNum$ All | ChangeValid$ Card | DestinationZone$ Hand | RememberChanged$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card.nonLand | Execute$ TrigDamage | SubAbility$ DBCleanup | SpellDescription$ When you reveal one or more nonland cards this way, this scheme deals damage equal to their total mana value to any target. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Any | NumDmg$ X diff --git a/forge-gui/res/cardsfolder/upcoming/beastie_beatdown.txt b/forge-gui/res/cardsfolder/upcoming/beastie_beatdown.txt new file mode 100644 index 00000000000..3f2ece9b25f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/beastie_beatdown.txt @@ -0,0 +1,7 @@ +Name:Beastie Beatdown +ManaCost:R G +Types:Sorcery +A:SP$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | Condition$ Delirium | AILogic$ Fight | CounterType$ P1P1 | CounterNum$ 2 | SubAbility$ DBDealDamage | SpellDescription$ Choose target creature you control and target creature an opponent controls. Delirium — If there are four or more card types among cards in your graveyard, put two +1/+1 counters on the creature you control. The creature you control deals damage equal to its power to the creature an opponent controls. +SVar:DBDealDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature an opponent controls | NumDmg$ X | DamageSource$ ParentTarget +SVar:X:ParentTargeted$CardPower +Oracle:Choose target creature you control and target creature an opponent controls.\nDelirium — If there are four or more card types among cards in your graveyard, put two +1/+1 counters on the creature you control.\nThe creature you control deals damage equal to its power to the creature an opponent controls. diff --git a/forge-gui/res/cardsfolder/upcoming/cackling_slasher.txt b/forge-gui/res/cardsfolder/upcoming/cackling_slasher.txt new file mode 100644 index 00000000000..5549bcf1ad1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cackling_slasher.txt @@ -0,0 +1,8 @@ +Name:Cackling Slasher +ManaCost:3 B +Types:Creature Human Assassin +PT:3/3 +K:Deathtouch +K:etbCounter:P1P1:1:CheckSVar$ Count$Morbid.1.0:CARDNAME enters with a +1/+1 counter on it if a creature died this turn. +DeckHas:Ability$Counters +Oracle:Deathtouch\nCackling Slasher enters with a +1/+1 counter on it if a creature died this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/dissection_tools.txt b/forge-gui/res/cardsfolder/upcoming/dissection_tools.txt new file mode 100644 index 00000000000..4ef8e047fc5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/dissection_tools.txt @@ -0,0 +1,10 @@ +Name:Dissection Tools +ManaCost:5 +Types:Artifact Equipment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDread | TriggerDescription$ When CARDNAME enters, manifest dread, then attach CARDNAME to that creature. +SVar:TrigDread:DB$ ManifestDread | RememberManifested$ True | SubAbility$ DBAttach +SVar:DBAttach:DB$ Attach | Defined$ Remembered | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Deathtouch & Lifelink | Description$ Equipped creature has +2/+2 and has deathtouch and lifelink. +K:Equip:Sac<1/Creature> +Oracle:When Dissection Tools enters, manifest dread, then attach Dissection Tools to that creature.\nEquipped creature has +2/+2 and has deathtouch and lifelink.\nEquip—Sacrifice a creature. diff --git a/forge-gui/res/cardsfolder/upcoming/enter_the_enigma.txt b/forge-gui/res/cardsfolder/upcoming/enter_the_enigma.txt index d0c48c63235..11b856d5273 100644 --- a/forge-gui/res/cardsfolder/upcoming/enter_the_enigma.txt +++ b/forge-gui/res/cardsfolder/upcoming/enter_the_enigma.txt @@ -3,5 +3,5 @@ ManaCost:U Types:Instant A:SP$ Effect | ValidTgts$ Creature | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable | AILogic$ Pump | StackDescription$ {c:Targeted} can't be blocked this turn. | SubAbility$ DBDraw | SpellDescription$ Target creature can't be blocked this turn. Draw a card. SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ This creature can't be blocked this turn. -SVar:TrigDraw:DB$ Draw -Oracle:Target creature can't be blocked this turn.\nDraw a card. \ No newline at end of file +SVar:DBDraw:DB$ Draw +Oracle:Target creature can't be blocked this turn.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/entity_tracker.txt b/forge-gui/res/cardsfolder/upcoming/entity_tracker.txt new file mode 100644 index 00000000000..0c4293319f5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/entity_tracker.txt @@ -0,0 +1,10 @@ +Name:Entity Tracker +ManaCost:2 U +Types:Creature Human Scout +PT:2/3 +K:Flash +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Enchantment.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Eerie — Whenever an enchantment you control enters and whenever you fully unlock a Room, draw a card. +T:Mode$ FullyUnlock | ValidCard$ Card.Room | ValidPlayer$ You | Secondary$ True | Execute$ TrigDraw | TriggerDescription$ Eerie — Whenever an enchantment you control enters and whenever you fully unlock a Room, draw a card. +SVar:TrigDraw:DB$ Draw +DeckNeeds:Type$Enchantment +Oracle:Flash\nEerie — Whenever an enchantment you control enters and whenever you fully unlock a Room, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/friendly_teddy.txt b/forge-gui/res/cardsfolder/upcoming/friendly_teddy.txt index 95cb1eb8a63..28d409da95f 100644 --- a/forge-gui/res/cardsfolder/upcoming/friendly_teddy.txt +++ b/forge-gui/res/cardsfolder/upcoming/friendly_teddy.txt @@ -2,6 +2,6 @@ Name:Friendly Teddy ManaCost:2 Types:Artifact Creature Bear Toy PT:2/2 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters, each player draws a card. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME dies, each player draws a card. SVar:TrigDraw:DB$ Draw | Defined$ Player -Oracle:When Friendly Teddy enters, each player draws a card. \ No newline at end of file +Oracle:When Friendly Teddy dies, each player draws a card. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/get_out.txt b/forge-gui/res/cardsfolder/upcoming/get_out.txt new file mode 100644 index 00000000000..658b3bcc90e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/get_out.txt @@ -0,0 +1,7 @@ +Name:Get Out +ManaCost:U U +Types:Instant +A:SP$ Charm | Choices$ DBCounter,DBChangeZone +SVar:DBCounter:DB$ Counter | TargetType$ Spell | ValidTgts$ Creature,Enchantment | TgtPrompt$ Counter target creature or enchantment spell | SpellDescription$ Counter target creature or enchantment spell. +SVar:DBChangeZone:DB$ ChangeZone | ValidTgts$ Creature.YouOwn,Enchantment.YouOwn | TgtPrompt$ Select target creature or enchantment you own | TargetMin$ 1 | TargetMax$ 2 | TgtZone$ Battlefield | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return one or two target creatures and/or enchantments you own to your hand. +Oracle:Choose one —\n• Counter target creature or enchantment spell.\n• Return one or two target creatures and/or enchantments you own to your hand. diff --git a/forge-gui/res/cardsfolder/upcoming/living_phone.txt b/forge-gui/res/cardsfolder/upcoming/living_phone.txt new file mode 100644 index 00000000000..91289a7e185 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/living_phone.txt @@ -0,0 +1,7 @@ +Name:Living Phone +ManaCost:2 W +Types:Artifact Creature Toy +PT:2/1 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ When CARDNAME dies, look at the top five cards of your library. You may reveal a creature card with power 2 or less from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 5 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Creature.powerLE2 | RestRandomOrder$ True | ForceRevealToController$ True +Oracle:When Living Phone dies, look at the top five cards of your library. You may reveal a creature card with power 2 or less from among them and put it into your hand. Put the rest on the bottom of your library in a random order. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/monstrous_emergence.txt b/forge-gui/res/cardsfolder/upcoming/monstrous_emergence.txt new file mode 100644 index 00000000000..1473bb4189d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/monstrous_emergence.txt @@ -0,0 +1,7 @@ +Name:Monstrous Emergence +ManaCost:1 G +Types:Sorcery +A:SP$ DealDamage | Cost$ 1 G RevealOrChoose<1/Creature> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ X | SpellDescription$ CARDNAME deals damage equal to the power of the creature you chose or the card you revealed to target creature. +SVar:X:Revealed$CardPower +AI:RemoveDeck:All +Oracle:As an additional cost to cast this spell, choose a creature you control or reveal a creature card from your hand.\nMonstrous Emergence deals damage equal to the power of the creature you chose or the card you revealed to target creature. diff --git a/forge-gui/res/cardsfolder/upcoming/rip_spawn_hunter.txt b/forge-gui/res/cardsfolder/upcoming/rip_spawn_hunter.txt new file mode 100644 index 00000000000..75cdbfe197a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rip_spawn_hunter.txt @@ -0,0 +1,8 @@ +Name:Rip, Spawn Hunter +Types:Legendary Creature Human Survivor +ManaCost:2 G W +PT:4/4 +T:Mode$ Phase | Phase$ Main2 | ValidPlayer$ You | PresentDefined$ Self | IsPresent$ Card.tapped | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ Survival — At the beginning of your second main phase, if CARDNAME is tapped, reveal the top X cards of your library, where X is its power. Put any number of creature and/or Vehicle cards with different powers from among them into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ X | AnyNumber$ True | WithDifferentPowers$ True | ChangeValid$ Creature,Vehicle | RestRandomOrder$ True | ForceRevealToController$ True +SVar:X:Count$CardPower +Oracle:Survival — At the beginning of your second main phase, if Rip, Spawn Hunter is tapped, reveal the top X cards of your library, where X is its power. Put any number of creature and/or Vehicle cards with different powers from among them into your hand. Put the rest on the bottom of your library in a random order. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/ripchain_razorkin.txt b/forge-gui/res/cardsfolder/upcoming/ripchain_razorkin.txt new file mode 100644 index 00000000000..5e3b213c392 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ripchain_razorkin.txt @@ -0,0 +1,7 @@ +Name:Ripchain Razorkin +ManaCost:3 R +Types:Creature Human Berserker +PT:5/3 +K:Reach +A:AB$ Draw | Cost$ 2 R Sac<1/Land> | SpellDescription$ Draw a card. +Oracle:Reach\n{2}{R}, Sacrifice a land: Draw a card. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/unidentified_hovership.txt b/forge-gui/res/cardsfolder/upcoming/unidentified_hovership.txt new file mode 100644 index 00000000000..5f1f7995005 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/unidentified_hovership.txt @@ -0,0 +1,12 @@ +Name:Unidentified Hovership +ManaCost:1 W W +Types:Artifact Vehicle +PT:2/2 +K:Flying +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, exile up to one target creature with toughness 5 or less. +SVar:TrigChangeZone:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature.toughnessLE5 | TgtPrompt$ Select target creature with toughness 5 or less. | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigDread | TriggerDescription$ When CARDNAME leaves the battlefield, the exiled card's owner manifests dread. +SVar:TrigDread:DB$ ManifestDread | DefinedPlayer$ RememberedOwner | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +K:Crew:1 +Oracle:Flying\nWhen Unidentified Hovership enters, exile up to one target creature with toughness 5 or less.\nWhen Unidentified Hovership leaves the battlefield, the exiled card's owner manifests dread.\nCrew 1 diff --git a/forge-gui/res/cardsfolder/upcoming/unnerving_grasp.txt b/forge-gui/res/cardsfolder/upcoming/unnerving_grasp.txt new file mode 100644 index 00000000000..d2acd38f625 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/unnerving_grasp.txt @@ -0,0 +1,6 @@ +Name:Unnerving Grasp +ManaCost:2 U +Types:Sorcery +A:SP$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | Origin$ Battlefield | Destination$ Hand | TargetMin$ 0 | TargetMax$ 1 | SubAbility$ DBDread | SpellDescription$ Return up to one target nonland permanent to its owner's hand. Manifest dread. (Look at the top two cards of your library. Put one onto the battlefield face down as a 2/2 creature and the other into your graveyard. Turn it face up any time for its mana cost if it's a creature card.) +SVar:DBDread:DB$ ManifestDread +Oracle:Return up to one target nonland permanent to its owner's hand. Manifest dread. (Look at the top two cards of your library. Put one onto the battlefield face down as a 2/2 creature and the other into your graveyard. Turn it face up any time for its mana cost if it's a creature card.) diff --git a/forge-gui/res/cardsfolder/upcoming/valgavoth_terror_eater.txt b/forge-gui/res/cardsfolder/upcoming/valgavoth_terror_eater.txt index 8d953f72576..6f003372032 100644 --- a/forge-gui/res/cardsfolder/upcoming/valgavoth_terror_eater.txt +++ b/forge-gui/res/cardsfolder/upcoming/valgavoth_terror_eater.txt @@ -5,7 +5,7 @@ PT:9/9 K:Flying K:Lifelink K:Ward:Sac<3/Permanent.nonLand/nonland permanent> -R:Event$ Moved | ActiveZones$ Battlefield | Destination$ Graveyard | ValidCard$ Card.nonToken+YouDontCtrl+OppOwn | ReplaceWith$ Exile | Description$ If a card you didn't control would be put into an opponent's graveyard from anywhere, exile it instead. +R:Event$ Moved | ActiveZones$ Battlefield | Destination$ Graveyard | ValidLKI$ Card.nonToken+YouDontCtrl+OppOwn | ReplaceWith$ Exile | Description$ If a card you didn't control would be put into an opponent's graveyard from anywhere, exile it instead. SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard S:Mode$ Continuous | Condition$ PlayerTurn | MayPlay$ True | Affected$ Card.ExiledWithSource | AffectedZone$ Exile | MayPlayAltManaCost$ PayLife | Description$ During your turn, you may play cards exiled with NICKNAME. If you cast a spell this way, pay life equal to its mana value rather than pay its mana cost. Oracle:Flying, lifelink\nWard—Sacrifice three nonland permanents.\nIf a card you didn't control would be put into an opponent's graveyard from anywhere, exile it instead.\nDuring your turn, you may play cards exiled with Valgavoth. If you cast a spell this way, pay life equal to its mana value rather than pay its mana cost. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/valgavoths_onslaught.txt b/forge-gui/res/cardsfolder/upcoming/valgavoths_onslaught.txt index b40db49938f..96b8e79f6f4 100644 --- a/forge-gui/res/cardsfolder/upcoming/valgavoths_onslaught.txt +++ b/forge-gui/res/cardsfolder/upcoming/valgavoths_onslaught.txt @@ -1,6 +1,6 @@ Name:Valgavoth's Onslaught ManaCost:X X G -Types:Instant +Types:Sorcery A:SP$ ManifestDread | Amount$ X | RememberManifested$ True | SubAbility$ DBPutCounter SVar:DBPutCounter:DB$ PutCounter | Defined$ RememberedCard | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/upcoming/winters_intervention.txt b/forge-gui/res/cardsfolder/upcoming/winters_intervention.txt new file mode 100644 index 00000000000..47757627732 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/winters_intervention.txt @@ -0,0 +1,6 @@ +Name:Winter's Intervention +ManaCost:1 B +Types:Instant +A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 2 | SubAbility$ DBGainLife | SpellDescription$ CARDNAME deals 2 damage to target creature. You gain 2 life. +SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 +Oracle:Winter's Intervention deals 2 damage to target creature. You gain 2 life. \ No newline at end of file diff --git a/forge-gui/res/deckgendecks/Modern.lda.dat b/forge-gui/res/deckgendecks/Modern.lda.dat index e5d36e526e6..ee597208cc9 100644 Binary files a/forge-gui/res/deckgendecks/Modern.lda.dat and b/forge-gui/res/deckgendecks/Modern.lda.dat differ diff --git a/forge-gui/res/deckgendecks/Modern.raw.dat b/forge-gui/res/deckgendecks/Modern.raw.dat index 79cebf03fcb..a5a4a5ecc44 100644 Binary files a/forge-gui/res/deckgendecks/Modern.raw.dat and b/forge-gui/res/deckgendecks/Modern.raw.dat differ diff --git a/forge-gui/res/deckgendecks/Standard.lda.dat b/forge-gui/res/deckgendecks/Standard.lda.dat index 0e7e024cc75..8a2bed276b8 100644 Binary files a/forge-gui/res/deckgendecks/Standard.lda.dat and b/forge-gui/res/deckgendecks/Standard.lda.dat differ diff --git a/forge-gui/res/deckgendecks/Standard.raw.dat b/forge-gui/res/deckgendecks/Standard.raw.dat index 3192fb60758..765f5388dc1 100644 Binary files a/forge-gui/res/deckgendecks/Standard.raw.dat and b/forge-gui/res/deckgendecks/Standard.raw.dat differ diff --git a/forge-gui/res/formats/Casual/Commander.txt b/forge-gui/res/formats/Casual/Commander.txt index f98af3000b7..d83f943ab00 100644 --- a/forge-gui/res/formats/Casual/Commander.txt +++ b/forge-gui/res/formats/Casual/Commander.txt @@ -3,4 +3,4 @@ Name:Commander Type:Casual Subtype:Commander Order:137 -Banned:Adriana's Valor; Advantageous Proclamation; Ashnod's Coupon; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Double Cross; Double Deal; Double Dip; Double Play; Double Stroke; Double Take; Echoing Boon; Emissary's Ploy; Enter the Dungeon; Flash; Hired Heist; Hold the Perimeter; Hullbreacher; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Lutri, the Spellchaser; Magical Hacker; Mox Lotus; Muzzio's Preparations; Natural Unity; Once More with Feeling; Power Play; R&D's Secret Lair; Richard Garfield, Ph.D.; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Staying Power; Summoner's Bond; Time Machine; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Ancestral Recall; Balance; Biorhythm; Black Lotus; Braids, Cabal Minion; Chaos Orb; Coalition Victory; Channel; Emrakul, the Aeons Torn; Erayo, Soratami Ascendant; Falling Star; Fastbond; Gifts Ungiven; Griselbrand; Iona, Shield of Emeria; Karakas; Leovold, Emissary of Trest; Library of Alexandria; Limited Resources; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Panoptic Mirror; Paradox Engine; Primeval Titan; Prophet of Kruphix; Recurring Nightmare; Rofellos, Llanowar Emissary; Shahrazad; Sundering Titan; Sway of the Stars; Sylvan Primordial; Time Vault; Time Walk; Tinker; Tolarian Academy; Trade Secrets; Upheaval; Yawgmoth's Bargain; Cleanse; Crusade; Imprison; Invoke Prejudice; Jihad; Pradesh Gypsies; Stone-Throwing Devils; Golos, Tireless Pilgrim +Banned:Adriana's Valor; Advantageous Proclamation; Ashnod's Coupon; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Dockside Extortionist; Double Cross; Double Deal; Double Dip; Double Play; Double Stroke; Double Take; Echoing Boon; Emissary's Ploy; Enter the Dungeon; Flash; Hired Heist; Hold the Perimeter; Hullbreacher; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Jeweled Lotus; Lutri, the Spellchaser; Magical Hacker; Mana Crypt; Mox Lotus; Muzzio's Preparations; Nadu, Winged Wisdom; Natural Unity; Once More with Feeling; Power Play; R&D's Secret Lair; Richard Garfield, Ph.D.; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Staying Power; Summoner's Bond; Time Machine; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Ancestral Recall; Balance; Biorhythm; Black Lotus; Braids, Cabal Minion; Chaos Orb; Coalition Victory; Channel; Emrakul, the Aeons Torn; Erayo, Soratami Ascendant; Falling Star; Fastbond; Gifts Ungiven; Griselbrand; Iona, Shield of Emeria; Karakas; Leovold, Emissary of Trest; Library of Alexandria; Limited Resources; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Panoptic Mirror; Paradox Engine; Primeval Titan; Prophet of Kruphix; Recurring Nightmare; Rofellos, Llanowar Emissary; Shahrazad; Sundering Titan; Sway of the Stars; Sylvan Primordial; Time Vault; Time Walk; Tinker; Tolarian Academy; Trade Secrets; Upheaval; Yawgmoth's Bargain; Cleanse; Crusade; Imprison; Invoke Prejudice; Jihad; Pradesh Gypsies; Stone-Throwing Devils; Golos, Tireless Pilgrim diff --git a/forge-gui/res/puzzle/PS_BLB4.pzl b/forge-gui/res/puzzle/PS_BLB4.pzl new file mode 100644 index 00000000000..6ce0bc5ecad --- /dev/null +++ b/forge-gui/res/puzzle/PS_BLB4.pzl @@ -0,0 +1,16 @@ +[metadata] +Name:Possibility Storm - Bloomburrow #04 +URL:https://i2.wp.com/www.possibilitystorm.com/wp-content/uploads/2024/09/latest-scaled.jpg?ssl=1 +Goal:Win +Turns:1 +Difficulty:Mythic +Description:Win this turn. Ensure your solution satisfies all possible blocking decisions. Good luck! +[state] +turn=1 +activeplayer=p0 +activephase=MAIN1 +p0life=20 +p0hand=Ornery Tumblewagg;Oko, the Ringleader;Season of Gathering;Shivan Devastator;Ferocification +p0battlefield=Innkeeper's Talent|ClassLevel:2;Rampaging Geoderm;Kami of Whispered Hopes|Counters:P1P1=2;Island;Island;Mountain;Mountain;Forest;Forest +p1life=17 +p1battlefield=Fear of Immobility;Shield-Wall Sentinel diff --git a/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java b/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java index d776f1d4e8b..a65dd2873cf 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java +++ b/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java @@ -445,8 +445,7 @@ public final class CardScriptParser { "YouDontCtrl", "OppCtrl", "ChosenCtrl", "DefenderCtrl", "DefenderCtrlForRemembered", "DefendingPlayerCtrl", "EnchantedPlayerCtrl", "EnchantedControllerCtrl", - "RememberedPlayer", "RememberedPlayerCtrl", - "nonRememberedPlayerCtrl", "TargetedPlayerCtrl", + "RememberedPlayer", "RememberedPlayerCtrl", "TargetedPlayerCtrl", "TargetedControllerCtrl", "ActivePlayerCtrl", "YouOwn", "YouDontOwn", "OppOwn", "TargetedPlayerOwn", "OwnerDoesntControl", "Other", "Self",