From e233eed8eb32060150fea7509ec98dd30655dbee Mon Sep 17 00:00:00 2001 From: Adam Pantel <> Date: Mon, 29 Mar 2021 14:21:55 -0400 Subject: [PATCH] STX cards --- .../ability/effects/CountersPutAllEffect.java | 7 ++++++- forge-gui/res/cardsfolder/a/arcanists_owl.txt | 2 +- forge-gui/res/cardsfolder/h/harsh_mentor.txt | 2 +- .../upcoming/academic_probation.txt | 9 +++++++++ .../upcoming/codie_vociferous_codex.txt | 12 +++++++++++ .../upcoming/creative_outburst.txt | 8 ++++++++ .../upcoming/efreet_flamepainter.txt | 8 ++++++++ ...flamescroll_celebrant_revel_in_silence.txt | 20 +++++++++++++++++++ .../res/cardsfolder/upcoming/magma_opus.txt | 10 ++++++++++ .../cardsfolder/upcoming/make_your_mark.txt | 9 +++++++++ .../cardsfolder/upcoming/semesters_end.txt | 12 +++++++++++ 11 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/academic_probation.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/codie_vociferous_codex.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/creative_outburst.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/efreet_flamepainter.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/flamescroll_celebrant_revel_in_silence.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/magma_opus.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/make_your_mark.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/semesters_end.txt diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersPutAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersPutAllEffect.java index 736a95da3aa..fa35617f424 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersPutAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersPutAllEffect.java @@ -44,6 +44,7 @@ public class CountersPutAllEffect extends SpellAbilityEffect { final int counterAmount = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("CounterNum"), sa); final String valid = sa.getParam("ValidCards"); final ZoneType zone = sa.hasParam("ValidZone") ? ZoneType.smartValueOf(sa.getParam("ValidZone")) : ZoneType.Battlefield; + final boolean etbcounter = sa.hasParam("ETB"); final Game game = activator.getGame(); if (counterAmount <= 0) { @@ -67,7 +68,11 @@ public class CountersPutAllEffect extends SpellAbilityEffect { GameEntityCounterTable table = new GameEntityCounterTable(); for (final Card tgtCard : cards) { boolean inBattlefield = game.getZoneOf(tgtCard).is(ZoneType.Battlefield); - tgtCard.addCounter(CounterType.getType(type), counterAmount, placer, inBattlefield, table); + if (etbcounter) { + tgtCard.addEtbCounter(CounterType.getType(type), counterAmount, placer); + } else { + tgtCard.addCounter(CounterType.getType(type), counterAmount, placer, inBattlefield, table); + } game.updateLastStateForCard(tgtCard); } table.triggerCountersPutAll(game); diff --git a/forge-gui/res/cardsfolder/a/arcanists_owl.txt b/forge-gui/res/cardsfolder/a/arcanists_owl.txt index bc1a12c4223..6e61a8580ac 100644 --- a/forge-gui/res/cardsfolder/a/arcanists_owl.txt +++ b/forge-gui/res/cardsfolder/a/arcanists_owl.txt @@ -4,5 +4,5 @@ Types:Artifact Creature Bird PT:3/3 K:Flying T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters the battlefield, look at the top four cards of your library. You may reveal an artifact or enchantment card 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$ 4 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Artifact,Enchantment | RestRandomOrder$ True | RestRandomOrder$ True +SVar:TrigDig:DB$ Dig | DigNum$ 4 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Artifact,Enchantment | RestRandomOrder$ True Oracle:Flying\nWhen Arcanist's Owl enters the battlefield, look at the top four cards of your library. You may reveal an artifact or enchantment card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/cardsfolder/h/harsh_mentor.txt b/forge-gui/res/cardsfolder/h/harsh_mentor.txt index bd98eb79397..034fb8e927b 100644 --- a/forge-gui/res/cardsfolder/h/harsh_mentor.txt +++ b/forge-gui/res/cardsfolder/h/harsh_mentor.txt @@ -2,7 +2,7 @@ Name:Harsh Mentor ManaCost:1 R Types:Creature Human Cleric PT:2/2 -T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield,Land.inZoneBattlefield | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability of an artifact, creature, or land on the battlefield, if it isn't a mana ability, Harsh Mentor deals 2 damage to that player. +T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | ValidCard$ Artifact.inZoneBattlefield,Creature.inZoneBattlefield,Land.inZoneBattlefield | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability of an artifact, creature, or land on the battlefield, if it isn't a mana ability, CARDNAME deals 2 damage to that player. SVar:TrigDmg:DB$ DealDamage | NumDmg$ 2 | Defined$ TriggeredActivator SVar:Picture:http://www.wizards.com/global/images/magic/general/harsh_mentor.jpg Oracle:Whenever an opponent activates an ability of an artifact, creature, or land on the battlefield, if it isn't a mana ability, Harsh Mentor deals 2 damage to that player. diff --git a/forge-gui/res/cardsfolder/upcoming/academic_probation.txt b/forge-gui/res/cardsfolder/upcoming/academic_probation.txt new file mode 100644 index 00000000000..c47a6d3c2ff --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/academic_probation.txt @@ -0,0 +1,9 @@ +Name:Academic Probation +ManaCost:1 W +Types:Sorcery Lesson +A:SP$ Charm | Cost$ 1 W | Choices$ DBNameCard,DBPump +SVar:DBNameCard:DB$ NameCard | Defined$ You | ValidCards$ Card.nonLand | ValidDesc$ nonland | SubAbility$ DBEffect | SpellDescription$ Choose a nonland card name. Until your next turn, your opponents can't cast spells with the chosen name. +SVar:DBEffect:DB$ Effect | StaticAbilities$ CantCast | Duration$ UntilYourNextTurn +SVar:CantCast:Mode$ CantBeCast | ValidCard$ Card.nonLand+NamedCard | Caster$ Opponent | EffectZone$ Command | Description$ Your opponents can't cast spells with the chosen name. +SVar:DBPump:DB$ Pump | ValidTgts$ Permanent.nonLand | TgtPrompt$ Choose target nonland permanent | KW$ HIDDEN CARDNAME can't attack or block. & HIDDEN CARDNAME's activated abilities can't be activated. | IsCurse$ True | UntilYourNextTurn$ True | AILogic$ DetainNonLand | SpellDescription$ Choose target nonland permanent. Until your next turn, it can't attack or block, and its activated abilities can't be activated. +Oracle:Choose one -\n• Choose a nonland card name. Opponents can't cast spells with the chosen name until your next turn.\n• Choose target nonland permanent. Until your next turn, it can't attack or block, and its activated abilities can't be activated. diff --git a/forge-gui/res/cardsfolder/upcoming/codie_vociferous_codex.txt b/forge-gui/res/cardsfolder/upcoming/codie_vociferous_codex.txt new file mode 100644 index 00000000000..9b4ff4e419d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/codie_vociferous_codex.txt @@ -0,0 +1,12 @@ +Name:Codie, Vociferous Codex +ManaCost:3 +Types:Legendary Artifact Creature Construct +PT:1/4 +S:Mode$ CantBeCast | ValidCard$ Permanent | Caster$ You | Description$ You can't cast permanent spells. +A:AB$ Mana | Cost$ 4 T | Produced$ W U B R G | SubAbility$ DBTrigger | SpellDescription$ Add {W}{U}{B}{R}{G}. When you cast your next spell this turn, exile cards from the top of your library until you exile an instant or sorcery card with lesser mana value. Until end of turn, you may cast that card without paying its mana cost. Put each other card exiled this way on the bottom of your library in a random order. +SVar:DBTrigger:DB$ DelayedTrigger | Mode$ SpellCast | ValidActivatingPlayer$ You | Execute$ DBDig | TriggerDescription$ When you cast your next spell this turn, exile cards from the top of your library until you exile an instant or sorcery card with lesser mana value. Until end of turn, you may cast that card without paying its mana cost. Put each other card exiled this way on the bottom of your library in a random order. +SVar:DBDig:DB$ DigUntil | Defined$ You | Valid$ Instant.cmcLTX,Sorcery.cmcLTX | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | RememberRevealed$ True | ImprintFound$ True | RevealRandomOrder$ True | SubAbility$ DBPlay +SVar:DBPlay:DB$ Play | Defined$ Imprinted | WithoutManaCost$ True | Optional$ True | ForgetTargetRemembered$ True | SubAbility$ DBRestRandomOrder +SVar:DBRestRandomOrder:DB$ ChangeZone | Defined$ Remembered | AtRandom$ True | Origin$ Library | Destination$ Library | LibraryPosition$ -1 +SVar:X:TriggeredCard$CardManaCost +Oracle:You can't cast creature spells. diff --git a/forge-gui/res/cardsfolder/upcoming/creative_outburst.txt b/forge-gui/res/cardsfolder/upcoming/creative_outburst.txt new file mode 100644 index 00000000000..c95a088b2c0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/creative_outburst.txt @@ -0,0 +1,8 @@ +Name:Creative Outburst +ManaCost:3 U U R R +Types:Instant +A:SP$ DealDamage | Cost$ 3 U U R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 5 | SubAbility$ DBDig | SpellDescription$ CARDNAME deals 5 damage to any target. Look at the top five cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order. +SVar:DBDig:DB$Dig | DigNum$ 5 | RestRandomOrder$ True +A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | SpellDescription$ Create a Treasure token. +DeckHas:Ability$Token +Oracle:Creative Outburst deals 5 damage to any target. Look at the top five cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order.\n{U/R}{U/R}, Discard Creative Outburst: Create a Treasure token. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/efreet_flamepainter.txt b/forge-gui/res/cardsfolder/upcoming/efreet_flamepainter.txt new file mode 100644 index 00000000000..72cbfc0036b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/efreet_flamepainter.txt @@ -0,0 +1,8 @@ +Name:Efreet Flamepainter +ManaCost:3 R +Types:Creature Efreet Shaman +PT:1/4 +K:Double Strike +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPlay | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may cast target instant or sorcery card from your graveyard without paying its mana cost. If that spell would be put into a graveyard this turn, exile it instead. +SVar:TrigPlay:DB$ Play | TgtZone$ Graveyard | ValidTgts$ Instant.YouOwn,Sorcery.YouOwn | TgtPrompt$ Choose target instant or sorcery card from your graveyard | WithoutManaCost$ True | Optional$ True | ReplaceGraveyard$ Exile | AILogic$ ReplaySpell +Oracle:Double Strike\nWhenever Efreet Flamepainter deals combat damage to a player, you may cast target instant or sorcery card from your graveyard without paying its mana cost. If that spell would be put into a graveyard this turn, exile it instead. diff --git a/forge-gui/res/cardsfolder/upcoming/flamescroll_celebrant_revel_in_silence.txt b/forge-gui/res/cardsfolder/upcoming/flamescroll_celebrant_revel_in_silence.txt new file mode 100644 index 00000000000..e71cdfc0b06 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/flamescroll_celebrant_revel_in_silence.txt @@ -0,0 +1,20 @@ +Name:Flamescroll Celebrant +ManaCost:1 R +Types:Creature Human Cleric +PT:2/2 +T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability that isn't a mana ability, CARDNAME deals 1 damage to that player. +SVar:TrigDmg:DB$ DealDamage | NumDmg$ 1 | Defined$ TriggeredActivator +A:AB$ Pump | Cost$ 1 R | Defined$ Self | NumAtt$ +2 | SpellDescription$ CARDNAME gets +2/+0 until end of turn. +AlternateMode:Modal +Oracle:Whenever an opponent activates an ability that isn't a mana ability, Flamescroll Celebrant deals 1 damage to that player.\n{1}{R}: Flamescroll Celebrant gets +2/+0 until end of turn. + +ALTERNATE + +Name:Revel in Silence +ManaCost:W W +Types:Instant +A:SP$ Effect | Cost$ W | Name$ Silence Effect | StaticAbilities$ STCantBeCast,STCantBeActivated | AILogic$ BeginningOfOppTurn | SubAbility$ DBChange | SpellDescription$ Your opponents can't cast spells or activate planeswalkers' loyalty abilities this turn. +SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | StackDescription$ Exile CARDNAME +SVar:STCantBeCast:Mode$ CantBeCast | EffectZone$ Command | ValidCard$ Card | Caster$ Opponent | Description$ Your opponents can't cast spells. +SVar:STCantBeActivated:Mode$ CantBeActivated | Activator$ Opponent | EffectZone$ Command | ValidCard$ Planeswalker | Loyalty$ True | Description$ Your opponents can't activate planeswalkers' loyalty abilities. +Oracle:Your opponents can't cast spells this turn. (Spells cast before this resolves are unaffected.) diff --git a/forge-gui/res/cardsfolder/upcoming/magma_opus.txt b/forge-gui/res/cardsfolder/upcoming/magma_opus.txt new file mode 100644 index 00000000000..d93b45ca90f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/magma_opus.txt @@ -0,0 +1,10 @@ +Name:Magma Opus +ManaCost:6 U R +Types:Instant +A:SP$ DealDamage | Cost$ 6 U R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select target to distribute damage to | NumDmg$ 4 | TargetMin$ 1 | TargetMax$ 4 | DividedAsYouChoose$ 4 | SubAbility$ DBTap | SpellDescription$ CARDNAME deals 4 damage divided as you choose among any number of targets. Tap two target permanents. Create a 4/4 blue and red Elemental creature token. Draw two cards. +SVar:DBTap:DB$ Tap | TargetMin$ 2 | TargetMax$ 2 | ValidTgts$ Permanent | TgtPrompt$ Select target permanent to tap | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenScript$ ur_4_4_elemental | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | NumCards$ 2 +A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | SpellDescription$ Create a Treasure token. +DeckHas:Ability$Token +Oracle:Magma Opus deals 4 damage divided as you choose among any number of targets. Tap two target permanents. Create a 4/4 blue and red Elemental creature token. Draw two cards.\n{U/R}{U/R}, Discard Magma Opus: Create a Treasure token. diff --git a/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt b/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt new file mode 100644 index 00000000000..996adc97280 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt @@ -0,0 +1,9 @@ +Name:Make your Mark +ManaCost:RW +Types:Instant +A:SP$ Pump | Cost$ R | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +1 | SubAbility$ DBEffect | SpellDescription$ Target creature gets +1/+0 until end of turn. When that creature dies this turn, create a 3/2 red and white Spirit creature token. +SVar:DBEffect:DB$ Effect | Triggers$ SpiritEmerge | RememberObjects$ ParentTarget | ExileOnMoved$ Battlefield | StackDescription$ When {c:Targeted} dies this turn, create a 3/2 red and white Spirit creature token. +SVar:SpiritEmerge:Mode$ ChangesZone | ValidCard$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Graveyard | Execute$ DBToken | TriggerDescription$ When that creature dies this turn, create a 3/2 red and white Spirit creature token. +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ rw_3_2_spirit | TokenOwner$ You +DeckHas:Ability$Token +Oracle:Target creature gets +1/+0 until end of turn. When that creature dies this turn, create a 3/2 red and white Spirit creature token. diff --git a/forge-gui/res/cardsfolder/upcoming/semesters_end.txt b/forge-gui/res/cardsfolder/upcoming/semesters_end.txt new file mode 100644 index 00000000000..f0b3792184b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/semesters_end.txt @@ -0,0 +1,12 @@ +Name:Semester's End +ManaCost:3 W +Types:Instant +A:SP$ ChangeZone | Cost$ 3 W | ValidTgts$ Creature.YouCtrl,Planeswalker.YouCtrl | TargetMin$ 0 | TargetMax$ X | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Select target creature you control | SubAbility$ DelTrig | RememberChanged$ True | SpellDescription$ Exile any number of target creatures and/or planeswalkers you control. At the beginning of the next end step, return each of them to the battlefield under its owner's control. Each of them enters the battlefield with an additional +1/+1 counter on it if it's a creature and an additional loyalty counter on it if it's a planeswalker. +SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigP1P1 | RememberObjects$ RememberedLKI | TriggerDescription$ Return each of them to the battlefield under its owner's control. Each of them enters the battlefield with an additional +1/+1 counter on it if it's a creature and an additional loyalty counter on it if it's a planeswalker. | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:TrigP1P1:DB$ PutCounterAll | ValidCards$ Creature.IsRemembered | ValidZone$ Exile | CounterType$ P1P1 | CounterNum$ 1 | ETB$ True | SubAbility$ TrigLoyal +SVar:TrigLoyal:DB$ PutCounterAll | ValidCards$ Planeswalker.IsRemembered | ValidZone$ Exile | CounterType$ LOYALTY | CounterNum$ 1 | ETB$ True | SubAbility$ TrigReturn +SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ Remembered +SVar:X:Count$Valid Permanent.YouCtrl +DeckHas:Ability$Counters +Oracle:Exile any number of target creatures and/or planeswalkers you control. At the beginning of the next end step, return each of them to the battlefield under its owner's control. Each of them enters the battlefield with an additional +1/+1 counter on it if it's a creature and an additional loyalty counter on it if it's a planeswalker.