diff --git a/forge-game/src/main/java/forge/game/ability/effects/ManifestBaseEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ManifestBaseEffect.java index 3fc3347c51f..99e79ff4f07 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ManifestBaseEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ManifestBaseEffect.java @@ -36,7 +36,7 @@ public abstract class ManifestBaseEffect extends SpellAbilityEffect { choiceZone = ZoneType.smartValueOf(sa.getParam("ChoiceZone")); fromLibrary = choiceZone.equals(ZoneType.Library); } - CardCollectionView choices = game.getCardsIn(choiceZone); + CardCollectionView choices = p.getCardsIn(choiceZone); if (sa.hasParam("Choices")) { choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, source, sa); } 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 5f7c66ca2e1..5c76ce379f7 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3831,18 +3831,18 @@ public class CardFactoryUtil { inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); } else if (keyword.equals("Enlist")) { String effect = "Mode$ OptionalAttackCost | ValidCard$ Card.Self | Cost$ Enlist<1/CARDNAME/creature> | Secondary$ True" + - "| Trigger$ TrigEnlist | Description$ Enlist ( " + inst.getReminderText() + ")"; + "| Trigger$ TrigEnlist | Description$ Enlist (" + inst.getReminderText() + ")"; StaticAbility st = StaticAbility.create(effect, state.getCard(), state, intrinsic); st.setSVar("TrigEnlist", "DB$ Pump | NumAtt$ TriggerRemembered$CardPower" + " | SpellDescription$ When you do, add its power to this creature's until end of turn."); inst.addStaticAbility(st); } else if (keyword.equals("Fear")) { String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.nonArtifact+nonBlack | Secondary$ True" + - " | Description$ Fear ( " + inst.getReminderText() + ")"; + " | Description$ Fear (" + inst.getReminderText() + ")"; inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); } else if (keyword.equals("Flying")) { String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.withoutFlying+withoutReach | Secondary$ True" + - " | Description$ Flying ( " + inst.getReminderText() + ")"; + " | Description$ Flying (" + inst.getReminderText() + ")"; inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); } else if (keyword.startsWith("Hexproof")) { final StringBuilder sbDesc = new StringBuilder("Hexproof"); @@ -3861,11 +3861,11 @@ public class CardFactoryUtil { inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); } else if (keyword.equals("Horsemanship")) { String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.withoutHorsemanship | Secondary$ True " + - " | Description$ Horsemanship ( " + inst.getReminderText() + ")"; + " | Description$ Horsemanship (" + inst.getReminderText() + ")"; inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); } else if (keyword.equals("Intimidate")) { String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.nonArtifact+notSharesColorWith | Secondary$ True " + - " | Description$ Intimidate ( " + inst.getReminderText() + ")"; + " | Description$ Intimidate (" + inst.getReminderText() + ")"; inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); } else if (keyword.startsWith("Landwalk")) { final String[] k = keyword.split(":"); @@ -3927,7 +3927,7 @@ public class CardFactoryUtil { inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); } else if (keyword.equals("Skulk")) { String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.powerGTX | Secondary$ True " + - " | Description$ Skulk ( " + inst.getReminderText() + ")"; + " | Description$ Skulk (" + inst.getReminderText() + ")"; StaticAbility st = StaticAbility.create(effect, state.getCard(), state, intrinsic); st.setSVar("X", "Count$CardPower"); inst.addStaticAbility(st); diff --git a/forge-gui/res/cardsfolder/upcoming/fanatic_of_rhonas.txt b/forge-gui/res/cardsfolder/upcoming/fanatic_of_rhonas.txt new file mode 100644 index 00000000000..13fa67c0857 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fanatic_of_rhonas.txt @@ -0,0 +1,9 @@ +Name:Fanatic of Rhonas +ManaCost:1 G +Types:Creature Snake Druid +PT:1/4 +A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}. +A:AB$ Mana | Cost$ T | Produced$ G | Amount$ 4 | IsPresent$ Creature.YouCtrl+powerGE4 | PrecostDesc$ Ferocious — | SpellDescription$ Add {G}{G}{G}{G}. Activate only if you control a creature with power 4 or greater. +K:Eternalize:2 G G +DeckHas:Ability$Token & Type$Zombie +Oracle:{T}: Add {G}.\nFerocious — {T}: Add {G}{G}{G}{G}. Activate only if you control a creature with power 4 or greater.\nEternalize {2}{G}{G} ({2}{G}{G}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a 4/4 black Zombie Snake Druid with no mana cost. Eternalize only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/upcoming/flare_of_fortitude.txt b/forge-gui/res/cardsfolder/upcoming/flare_of_fortitude.txt new file mode 100644 index 00000000000..e8f04508b36 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/flare_of_fortitude.txt @@ -0,0 +1,8 @@ +Name:Flare of Fortitude +ManaCost:2 W W +Types:Instant +S:Mode$ AlternativeCost | ValidSA$ Spell.Self | EffectZone$ All | Cost$ Sac<1/Creature.White+nonToken/a nontoken white creature> | Description$ You may sacrifice a nontoken white creature rather than pay this spell's mana cost. +A:SP$ Effect | Duration$ UntilYourNextTurn | StaticAbilities$ STCantChange | SubAbility$ DBPumpAll | SpellDescription$ Until end of turn, your life total can't change, and permanents you control gain hexproof and indestructible. +SVar:DBPumpAll:DB$ PumpAll | ValidCards$ Permanent.YouCtrl | KW$ Hexproof & Indestructible +SVar:STCantChange:Mode$ CantChangeLife | ValidPlayer$ You | Description$ Your life total can't change. +Oracle:You may sacrifice a nontoken white creature rather than pay this spell's mana cost.\nUntil end of turn, your life total can't change, and permanents you control gain hexproof and indestructible. diff --git a/forge-gui/res/cardsfolder/upcoming/flare_of_malice.txt b/forge-gui/res/cardsfolder/upcoming/flare_of_malice.txt new file mode 100644 index 00000000000..e33903e1479 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/flare_of_malice.txt @@ -0,0 +1,12 @@ +Name:Flare of Malice +ManaCost:2 B B +Types:Sorcery +S:Mode$ AlternativeCost | ValidSA$ Spell.Self | EffectZone$ All | Cost$ Sac<1/Creature.Black+nonToken/a nontoken black creature> | Description$ You may sacrifice a nontoken black creature rather than pay this spell's mana cost. +A:SP$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBSacAll | SpellDescription$¨Each opponent sacrifices a creature or planeswalker with the greatest mana value among creatures and planeswalkers they control. +SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.RememberedPlayerCtrl+cmcEQX,Planeswalker.RememberedPlayerCtrl+cmcEQX | ChoiceTitle$ Choose a creature or planeswalker with the greatest mana value among creatures and planeswalkers you control | Mandatory$ True | RememberChosen$ True +SVar:X:Count$Valid Creature.RememberedPlayerCtrl,Planeswalker.RememberedPlayerCtrl$GreatestCMC +SVar:DBSacAll:DB$ SacrificeAll | ValidCards$ Card.IsRemembered | SubAbility$ DBCleanup +SVar:DBCleanupChosen:DB$ Cleanup | ClearChosenPlayer$ True +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:NeedsToPlay:Creature.OppCtrl +Oracle:You may sacrifice a nontoken black creature rather than pay this spell's mana cost.\nEach opponent sacrifices a creature or planeswalker with the greatest mana value among creatures and planeswalkers they control. diff --git a/forge-gui/res/cardsfolder/upcoming/guardian_of_the_forgotten.txt b/forge-gui/res/cardsfolder/upcoming/guardian_of_the_forgotten.txt new file mode 100644 index 00000000000..0e138347469 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/guardian_of_the_forgotten.txt @@ -0,0 +1,9 @@ +Name:Guardian of the Forgotten +ManaCost:3 W +Types:Creature Elephant Warrior +PT:4/4 +K:Vigilance +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+modified | TriggerZones$ Battlefield | Execute$ TrigManifest | TriggerDescription$ Whenever a modified creature you control dies, manifest the top card of your library. (Equipment, Auras you control, and counters are modifications. To manifest a card, put the top card of your library onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it’s a creature card.) +SVar:TrigManifest:DB$ Manifest +DeckHints:Ability$Counters & Type$Equipment|Aura +Oracle:Vigilance\nWhenever a modified creature you control dies, manifest the top card of your library. (Equipment, Auras you control, and counters are modifications. To manifest a card, put the top card of your library onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it’s a creature card.) diff --git a/forge-gui/res/cardsfolder/upcoming/kozilek_the_broken_reality.txt b/forge-gui/res/cardsfolder/upcoming/kozilek_the_broken_reality.txt new file mode 100644 index 00000000000..cf1deb24831 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/kozilek_the_broken_reality.txt @@ -0,0 +1,12 @@ +Name:Kozilek, the Broken Reality +ManaCost:9 +Types:Legendary Creature Eldrazi +PT:9/9 +T:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigManifest | TriggerDescription$ When you cast this spell, up to two target players each manifest two cards from their hands. For each card manifested this way, you draw a card. (To manifest a card, put it onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it's a creature card.) +SVar:TrigManifest:DB$ Manifest | ValidTgts$ Player | TargetMin$ 0 | Amount$ 2 | TargetMax$ 2 | RememberManifested$ True | SubAbility$ DBDraw | TgtPrompt$ Select up to two target players | Choices$ Card.TargetedPlayerOwn | ChoiceZone$ Hand | DefinedPlayer$ Targeted +SVar:DBDraw:DB$ Draw | NumCards$ X | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Remembered$Amount +S:Mode$ Continuous | Affected$ Creature.Colorless+YouCtrl+Other | AddPower$ 3 | AddToughness$ 2 | Description$ Other colorless creatures you control get +3/+2. +DeckHints:Color$Colorless & Type$Construct|Eldrazi|Juggernaut|Scarecrow +Oracle:When you cast this spell, up to two target players each manifest two cards from their hands. For each card manifested this way, you draw a card. (To manifest a card, put it onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it's a creature card.)\nOther colorless creatures you control get +3/+2. diff --git a/forge-gui/res/cardsfolder/upcoming/mindless_conscription.txt b/forge-gui/res/cardsfolder/upcoming/mindless_conscription.txt new file mode 100644 index 00000000000..49ace556798 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mindless_conscription.txt @@ -0,0 +1,8 @@ +Name:Mindless Conscription +ManaCost:2 B +Types:Enchantment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAmass | TriggerDescription$ When CARDNAME enters the battlefield and whenever you draw your third card each turn, amass Zombies 3. (Put three +1/+1 counters on an Army you control. It's also a Zombie. If you don't control an Army, create a 0/0 black Zombie Army creature token first.) +T:Mode$ Drawn | ValidCard$ Card.YouCtrl | Number$ 3 | TriggerZones$ Battlefield | Execute$ TrigAmass | Secondary$ True | TriggerDescription$ When CARDNAME enters the battlefield and whenever you draw your third card each turn, amass Zombies 3. (Put three +1/+1 counters on an Army you control. It's also a Zombie. If you don't control an Army, create a 0/0 black Zombie Army creature token first.) +SVar:TrigAmass:DB$ Amass | Type$ Zombie | Num$ 3 +DeckHas:Ability$Token & Type$Zombie +Oracle:When Mindless Conscription enters the battlefield and whenever you draw your third card each turn, amass Zombies 3. (Put three +1/+1 counters on an Army you control. It's also a Zombie. If you don’t control an Army, create a 0/0 black Zombie Army creature token first.) diff --git a/forge-gui/res/cardsfolder/upcoming/shadow_of_the_second_sun.txt b/forge-gui/res/cardsfolder/upcoming/shadow_of_the_second_sun.txt new file mode 100644 index 00000000000..7a2b74767d1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/shadow_of_the_second_sun.txt @@ -0,0 +1,9 @@ +Name:Shadow of the Second Sun +ManaCost:4 U U +Types:Enchantment Aura +K:Enchant player +A:SP$ Attach | ValidTgts$ Player +T:Mode$ Phase | Phase$ Main2 | ValidPlayer$ Player.EnchantedBy | TriggerZones$ Battlefield | Execute$ TrigAddPhase | TriggerDescription$ At the beginning of enchanted player's postcombat main phase, there is an additional beginning phase after this phase. (The end step happens after the added untap, upkeep, and draw steps.) +SVar:TrigAddPhase:DB$ AddPhase | ExtraPhase$ Beginning +AI:RemoveDeck:Random +Oracle:Enchant player\nAt the beginning of enchanted player's postcombat main phase, there is an additional beginning phase after this phase. (The end step happens after the added untap, upkeep, and draw steps.) diff --git a/forge-gui/res/cardsfolder/upcoming/strix_serenade.txt b/forge-gui/res/cardsfolder/upcoming/strix_serenade.txt new file mode 100644 index 00000000000..c059d66c84f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/strix_serenade.txt @@ -0,0 +1,7 @@ +Name:Strix Serenade +ManaCost:U +Types:Instant +A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target artifact, creature, or planeswalker spell | ValidTgts$ Artifact,Creature,Planeswalker | SubAbility$ DBToken | SpellDescription$ Counter target artifact, creature, or planeswalker spell. +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ TargetedController | TokenScript$ u_2_2_bird_flying | SpellDescription$ Its controller creates a 2/2 blue Bird creature token with flying. +DeckHas:Ability$Token & Type$Bird +Oracle:Counter target artifact, creature, or planeswalker spell. Its controller creates a 2/2 blue Bird creature token with flying. diff --git a/forge-gui/res/cardsfolder/upcoming/ugins_binding.txt b/forge-gui/res/cardsfolder/upcoming/ugins_binding.txt new file mode 100644 index 00000000000..d60130afa11 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ugins_binding.txt @@ -0,0 +1,9 @@ +Name:Ugin's Binding +ManaCost:2 U +Types:Instant +K:Devoid +A:SP$ ChangeZone | ValidTgts$ Permanent.nonLand+YouDontCtrl | TgtPrompt$ Select target nonland permanent you don't control | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target nonland permanent you don't control to its owner's hand. +T:Mode$ SpellCast | ValidCard$ Card.Colorless+cmcGE7+YouCtrl | TriggerZones$ Graveyard | Execute$ TrigImmediateTrig | TriggerDescription$ Whenever you cast a colorless spell with mana value 7 or greater, you may exile CARDNAME from your graveyard. When you do, return each nonland permanent you don't control to its owner's hand. +SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ ExileFromGrave<1/CARDNAME> | Execute$ TrigBounceAll | TriggerDescription$ When you do, return each nonland permanent you don't control to its owner's hand. +SVar:TrigBounceAll:DB$ ChangeZoneAll | ChangeType$ Permanent.nonLand+YouDontCtrl | Origin$ Battlefield | Destination$ Hand +Oracle:Devoid\nReturn target nonland permanent you don't control to its owner's hand.\nWhenever you cast a colorless spell with mana value 7 or greater, you may exile Ugin's Binding from your graveyard. When you do, return each nonland permanent you don't control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/upcoming/ugins_labyrinth.txt b/forge-gui/res/cardsfolder/upcoming/ugins_labyrinth.txt new file mode 100644 index 00000000000..931a5adb778 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ugins_labyrinth.txt @@ -0,0 +1,10 @@ +Name:Ugin's Labyrinth +ManaCost:no cost +Types:Land +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ Imprint — When CARDNAME enters the battlefield, you may exile a colorless card with mana value 7 or greater from your hand. +SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | ChangeType$ Card.Colorless+cmcGE7 | ChangeNum$ 1 +A:AB$ Mana | Cost$ T | Produced$ C | Amount$ X | SpellDescription$ Add {C}. If a card is exiled with CARDNAME, add {C}{C} instead. +A:AB$ ChangeZone | Cost$ T | Defined$ ExiledWith | Origin$ Exile | Destination$ Hand | SpellDescription$ Return the exiled card to its owner's hand. +SVar:X:Count$Compare Y GE1.2.1 +SVar:Y:Count$ValidExile Card.ExiledWithSource +Oracle:Imprint — When Ugin's Labyrinth enters the battlefield, you may exile a colorless card with mana value 7 or greater from your hand.\n{T}: Add {C}. If a card is exiled with Ugin's Labyrinth, add {C}{C} instead.\n{T}: Return the exiled card to its owner's hand.