diff --git a/forge-game/src/main/java/forge/game/ability/effects/ScryEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ScryEffect.java index 2907d82480f..dd2171a7861 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ScryEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ScryEffect.java @@ -11,7 +11,6 @@ import forge.game.spellability.SpellAbility; import forge.util.Lang; import forge.util.Localizer; - public class ScryEffect extends SpellAbilityEffect { @Override protected String getStackDescription(SpellAbility sa) { @@ -37,10 +36,8 @@ public class ScryEffect extends SpellAbilityEffect { } boolean isOptional = sa.hasParam("Optional"); + final List players = Lists.newArrayList(); - final List players = Lists.newArrayList(); // players really affected - - // Optional here for spells that have optional multi-player scrying for (final Player p : getTargetPlayers(sa)) { if (!p.isInGame()) { continue; diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerAbilityTriggered.java b/forge-game/src/main/java/forge/game/trigger/TriggerAbilityTriggered.java index e17b405baf6..804d658be9a 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerAbilityTriggered.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerAbilityTriggered.java @@ -21,11 +21,12 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import forge.game.ability.AbilityKey; import forge.game.card.Card; +import forge.game.card.CardCollection; +import forge.game.card.CardLists; import forge.game.card.CardZoneTable; import forge.game.spellability.SpellAbility; -import forge.game.zone.ZoneType; import forge.util.Localizer; -import forge.util.TextUtil; +import org.apache.commons.lang3.StringUtils; import java.util.*; @@ -84,14 +85,13 @@ public class TriggerAbilityTriggered extends Trigger { return false; } - if (hasParam("TriggeredOwnAbility") && "True".equals(getParam("TriggeredOwnAbility")) && !Iterables.contains(causes, source)) { + if (hasParam("TriggeredOwnAbility") && !Iterables.contains(causes, source)) { return false; } return true; } - /** {@inheritDoc} */ @Override public final void setTriggeringObjects(final SpellAbility sa, Map runParams) { @@ -118,14 +118,16 @@ public class TriggerAbilityTriggered extends Trigger { newRunParams.put(AbilityKey.Cause, ImmutableList.of(runParams.get(AbilityKey.Card))); } else if (regtrig.getMode() == TriggerType.ChangesZoneAll) { final CardZoneTable table = (CardZoneTable) runParams.get(AbilityKey.Cards); - Set destinations = new HashSet<>(); - for (ZoneType dest : ZoneType.values()) { - if (table.containsColumn(dest) && !table.column(dest).isEmpty()) { - destinations.add(dest.toString()); - } - } - newRunParams.put(AbilityKey.Destination, TextUtil.join(destinations, ",")); + newRunParams.put(AbilityKey.Destination, StringUtils.join(table.columnKeySet(), ",")); newRunParams.put(AbilityKey.Cause, table.allCards()); + } else if (regtrig.getMode() == TriggerType.Attacks) { + newRunParams.put(AbilityKey.Cause, ImmutableList.of(runParams.get(AbilityKey.Attacker))); + } else if (regtrig.getMode() == TriggerType.AttackersDeclared || regtrig.getMode() == TriggerType.AttackersDeclaredOneTarget) { + CardCollection attackers = (CardCollection) runParams.get(AbilityKey.Attackers); + if (regtrig.hasParam("ValidAttackers")) { + attackers = CardLists.getValidCards(attackers, regtrig.getParam("ValidAttackers"), regtrig.getHostCard().getController(), regtrig.getHostCard(), regtrig); + } + newRunParams.put(AbilityKey.Cause, attackers); } newRunParams.put(AbilityKey.SpellAbility, sa); diff --git a/forge-gui/res/cardsfolder/d/drannith_magistrate.txt b/forge-gui/res/cardsfolder/d/drannith_magistrate.txt index 8617c9d783e..268567727a0 100644 --- a/forge-gui/res/cardsfolder/d/drannith_magistrate.txt +++ b/forge-gui/res/cardsfolder/d/drannith_magistrate.txt @@ -2,5 +2,5 @@ Name:Drannith Magistrate ManaCost:1 W Types:Creature Human Wizard PT:1/3 -S:Mode$ CantBeCast | ValidCard$ Card | Caster$ Opponent | Origin$ Library,Graveyard,Exile,Command | Description$ Your opponents can't cast spells from anywhere other than their hands. +S:Mode$ CantBeCast | ValidCard$ Card.!wasCastFromTheirHand | Caster$ Opponent | Description$ Your opponents can't cast spells from anywhere other than their hands. Oracle:Your opponents can't cast spells from anywhere other than their hands. diff --git a/forge-gui/res/cardsfolder/f/fervent_mastery.txt b/forge-gui/res/cardsfolder/f/fervent_mastery.txt index f07ac5e2711..b0bafe73463 100644 --- a/forge-gui/res/cardsfolder/f/fervent_mastery.txt +++ b/forge-gui/res/cardsfolder/f/fervent_mastery.txt @@ -7,8 +7,7 @@ SVar:OppDiscard:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | Cho SVar:DBDiscard:DB$ Discard | Defined$ ChosenPlayer | AILogic$ DiscardUncastableAndExcess | AnyNumber$ True | Optional$ True | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | Defined$ ChosenPlayer | NumCards$ Y | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBSearch -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Hidden$ True | ChangeNum$ 3 | ChangeType$ Card | Destination$ Hand | SubAbility$ DBResolve -SVar:DBResolve:DB$ ChangeZoneResolve | SubAbility$ DBDiscard2 +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Hidden$ True | ChangeNum$ 3 | ChangeType$ Card | Destination$ Hand | SubAbility$ DBDiscard2 SVar:DBDiscard2:DB$ Discard | Defined$ You | NumCards$ 3 | Mode$ Random SVar:Y:Remembered$Amount SVar:AltCostPaid:Count$AltCost.1.0 diff --git a/forge-gui/res/cardsfolder/upcoming/airship_engine_room.txt b/forge-gui/res/cardsfolder/upcoming/airship_engine_room.txt new file mode 100644 index 00000000000..29bebd79fa8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/airship_engine_room.txt @@ -0,0 +1,9 @@ +Name:Airship Engine Room +ManaCost:no cost +Types:Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. +SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True +A:AB$ Mana | Cost$ T | Produced$ Combo U R | SpellDescription$ Add {U} or {R}. +A:AB$ Draw | Cost$ 4 T Sac<1/CARDNAME> | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +Oracle:This land enters tapped.\n{T}: Add {U} or {R}.\n{4}, {T}, Sacrifice this land: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/avatars_wrath.txt b/forge-gui/res/cardsfolder/upcoming/avatars_wrath.txt new file mode 100644 index 00000000000..452392f5145 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/avatars_wrath.txt @@ -0,0 +1,9 @@ +Name:Avatar's Wrath +ManaCost:2 W W +Types:Sorcery +A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select up to one target creature | TargetMin$ 0 | TargetMax$ 1 | SubAbility$ DBAirbend | SpellDescription$ Choose up to one target creature, then airbend all other creatures. (Exile them. While each one is exiled, its owner may cast it for {2} rather than its mana cost.) Until your next turn, your opponents can't cast spells from anywhere other than their hands. Exile CARDNAME. +SVar:DBAirbend:DB$ Airbend | Defined$ Valid Creature.NotDefinedTargeted | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | StaticAbilities$ CantCast | Duration$ UntilYourNextTurn | SubAbility$ DBExile +SVar:CantCast:Mode$ CantBeCast | ValidCard$ Card.!wasCastFromTheirHand | Caster$ Opponent | Description$ Your opponents can't cast spells from anywhere other than their hands. +SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile +Oracle:Choose up to one target creature, then airbend all other creatures. (Exile them. While each one is exiled, its owner may cast it for {2} rather than its mana cost.)\nUntil your next turn, your opponents can't cast spells from anywhere other than their hands.\nExile Avatar's Wrath. diff --git a/forge-gui/res/cardsfolder/upcoming/beifongs_bounty_hunters.txt b/forge-gui/res/cardsfolder/upcoming/beifongs_bounty_hunters.txt new file mode 100644 index 00000000000..a86a81b1bef --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/beifongs_bounty_hunters.txt @@ -0,0 +1,8 @@ +Name:Beifong's Bounty Hunters +ManaCost:2 B G +Types:Creature Human Mercenary +PT:4/4 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.nonLand+YouCtrl | Execute$ TrigEarthbend | TriggerDescription$ Whenever a nonland creature you control dies, earthbend X, where X is that creature's power. (Target land you control becomes a 0/0 creature with haste that's still a land. Put X +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) +SVar:TrigEarthbend:DB$ Earthbend | Num$ X +SVar:X:TriggeredCard$CardPower +Oracle:Whenever a nonland creature you control dies, earthbend X, where X is that creature's power. (Target land you control becomes a 0/0 creature with haste that's still a land. Put X +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) diff --git a/forge-gui/res/cardsfolder/upcoming/bitter_work.txt b/forge-gui/res/cardsfolder/upcoming/bitter_work.txt new file mode 100644 index 00000000000..63edacf6267 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bitter_work.txt @@ -0,0 +1,7 @@ +Name:Bitter Work +ManaCost:1 R G +Types:Enchantment +T:Mode$ AttackersDeclaredOneTarget | ValidAttackers$ Creature.YouCtrl+powerGE4 | AttackedTarget$ Player | Execute$ TrigDraw | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack a player with one or more creatures with power 4 or greater, draw a card. +SVar:TrigDraw:DB$ Draw +A:AB$ Earthbend | Cost$ 4 | Exhaust$ True | PlayerTurn$ True | Num$ 4 | SpellDescription$ Earthbend 4. Activate only during your turn. (Target land you control becomes a 0/0 creature with haste that's still a land. Put four +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped. Activate each exhaust ability only once.) +Oracle:Whenever you attack a player with one or more creatures with power 4 or greater, draw a card.\nExhaust — {4}: Earthbend 4. Activate only during your turn. (Target land you control becomes a 0/0 creature with haste that's still a land. Put four +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped. Activate each exhaust ability only once.) diff --git a/forge-gui/res/cardsfolder/upcoming/boiling_rock_prison.txt b/forge-gui/res/cardsfolder/upcoming/boiling_rock_prison.txt new file mode 100644 index 00000000000..8bf893525a2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/boiling_rock_prison.txt @@ -0,0 +1,9 @@ +Name:Boiling Rock Prison +ManaCost:no cost +Types:Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. +SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True +A:AB$ Mana | Cost$ T | Produced$ Combo B R | SpellDescription$ Add {B} or {R}. +A:AB$ Draw | Cost$ 4 T Sac<1/CARDNAME> | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +Oracle:This land enters tapped.\n{T}: Add {B} or {R}.\n{4}, {T}, Sacrifice this land: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/callous_inspector.txt b/forge-gui/res/cardsfolder/upcoming/callous_inspector.txt new file mode 100644 index 00000000000..8255baaa0ca --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/callous_inspector.txt @@ -0,0 +1,9 @@ +Name:Callous Inspector +ManaCost:B +Types:Creature Human Soldier +PT:1/1 +K:Menace +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDamage | TriggerDescription$ When this creature dies, it deals 1 damage to you. Create a Clue token. (It's an artifact with "{2}, Sacrifice this token: Draw a card.") +SVar:TrigDamage:DB$ DealDamage | NumDmg$ 1 | Defined$ You | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_clue_draw | TokenOwner$ You +Oracle:Menace (This creature can't be blocked except by two or more creatures.)\nWhen this creature dies, it deals 1 damage to you. Create a Clue token. (It's an artifact with "{2}, Sacrifice this token: Draw a card.") diff --git a/forge-gui/res/cardsfolder/upcoming/earth_kingdom_general.txt b/forge-gui/res/cardsfolder/upcoming/earth_kingdom_general.txt new file mode 100644 index 00000000000..b4af6aa746e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/earth_kingdom_general.txt @@ -0,0 +1,12 @@ +Name:Earth Kingdom General +ManaCost:3 G +Types:Creature Human Soldier Ally +PT:2/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigEarthbend | TriggerDescription$ When this creature enters, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.) +SVar:TrigEarthbend:DB$ Earthbend | Num$ 2 +T:Mode$ CounterAddedOnce | CounterType$ P1P1 | Valid$ Creature | TriggerZones$ Battlefield | Execute$ TrigGainLife | ResolvedLimit$ 1 | OptionalDecider$ You | ValidSource$ You | TriggerDescription$ Whenever you put one or more +1/+1 counters on a creature, you may gain that much life. Do this only once each turn. +SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ X +SVar:X:TriggerCount$Amount +DeckHas:Ability$Lifegain +DeckHints:Ability$Counters +Oracle:When this creature enters, earthbend 2. (Target land you control becomes a 0/0 creature with haste that's still a land. Put two +1/+1 counters on it. When it dies or is exiled, return it to the battlefield tapped.)\nWhenever you put one or more +1/+1 counters on a creature, you may gain that much life. Do this only once each turn. diff --git a/forge-gui/res/cardsfolder/upcoming/elemental_teachings.txt b/forge-gui/res/cardsfolder/upcoming/elemental_teachings.txt new file mode 100644 index 00000000000..a974df5a406 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/elemental_teachings.txt @@ -0,0 +1,8 @@ +Name:Elemental Teachings +ManaCost:4 G +Types:Instant +A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land | ChangeNum$ 4 | RememberChanged$ True | Reveal$ True | Shuffle$ False | DifferentNames$ True | StackDescription$ SpellDescription | SubAbility$ DBChangeZone1 | SpellDescription$ Search your library for up to four land cards with different names and reveal them. An opponent chooses two of those cards. Put the chosen cards into your graveyard and the rest onto the battlefield tapped, then shuffle. +SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.IsRemembered | Chooser$ Opponent | ChangeNum$ 2 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select two cards to be put into the graveyard of CARDNAME's controller | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None +SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Card.IsRemembered | ChangeNum$ 2 | Mandatory$ True | NoLooking$ True | StackDescription$ None | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Search your library for up to four land cards with different names and reveal them. An opponent chooses two of those cards. Put the chosen cards into your graveyard and the rest onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/upcoming/enter_the_avatar_state.txt b/forge-gui/res/cardsfolder/upcoming/enter_the_avatar_state.txt new file mode 100644 index 00000000000..61dfd07495f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/enter_the_avatar_state.txt @@ -0,0 +1,5 @@ +Name:Enter the Avatar State +ManaCost:W +Types:Instant Lesson +A:SP$ Animate | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | Keywords$ Flying & First Strike & Lifelink & Hexproof | Types$ Avatar | SpellDescription$ Until end of turn, target creature you control becomes an Avatar in addition to its other types and gains flying, first strike, lifelink, and hexproof. (A creature with hexproof can't be the target of spells or abilities your opponents control.) +Oracle:Until end of turn, target creature you control becomes an Avatar in addition to its other types and gains flying, first strike, lifelink, and hexproof. (A creature with hexproof can't be the target of spells or abilities your opponents control.) diff --git a/forge-gui/res/cardsfolder/upcoming/firebender_ascension.txt b/forge-gui/res/cardsfolder/upcoming/firebender_ascension.txt new file mode 100644 index 00000000000..3ef31ae95a9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/firebender_ascension.txt @@ -0,0 +1,9 @@ +Name:Firebender Ascension +ManaCost:1 R +Types:Enchantment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When this enchantment enters, create a 2/2 red Soldier creature token with firebending 1. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_2_2_soldier_firebending_1 | TokenOwner$ You +T:Mode$ AbilityTriggered | TriggerZones$ Battlefield | ValidMode$ Attacks,AttackersDeclared,AttackersDeclaredOneTarget | Execute$ TrigPutCounter | ValidSource$ Creature.YouCtrl | TriggeredOwnAbility$ True | TriggerDescription$ Whenever a creature you control attacking causes a triggered ability of that creature to trigger, put a quest counter on this enchantment. Then if it has four or more quest counters on it, you may copy that ability. You may choose new targets for the copy. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ QUEST | CounterNum$ 1 | SubAbility$ DBCopy +SVar:DBCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | Optional$ True | MayChooseTarget$ True | ConditionPresent$ Card.Self+counters_GE4_QUEST +Oracle:When this enchantment enters, create a 2/2 red Soldier creature token with firebending 1.\nWhenever a creature you control attacking causes a triggered ability of that creature to trigger, put a quest counter on this enchantment. Then if it has four or more quest counters on it, you may copy that ability. You may choose new targets for the copy. diff --git a/forge-gui/res/cardsfolder/upcoming/foggy_bottom_swamp.txt b/forge-gui/res/cardsfolder/upcoming/foggy_bottom_swamp.txt new file mode 100644 index 00000000000..7be0c10a513 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/foggy_bottom_swamp.txt @@ -0,0 +1,9 @@ +Name:Foggy Bottom Swamp +ManaCost:no cost +Types:Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. +SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True +A:AB$ Mana | Cost$ T | Produced$ Combo B G | SpellDescription$ Add {B} or {G}. +A:AB$ Draw | Cost$ 4 T Sac<1/CARDNAME> | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +Oracle:This land enters tapped.\n{T}: Add {B} or {G}.\n{4}, {T}, Sacrifice this land: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/jeong_jeong_the_deserter.txt b/forge-gui/res/cardsfolder/upcoming/jeong_jeong_the_deserter.txt new file mode 100644 index 00000000000..8c04f03a6f0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/jeong_jeong_the_deserter.txt @@ -0,0 +1,10 @@ +Name:Jeong Jeong, the Deserter +ManaCost:2 R +Types:Legendary Creature Human Rebel Ally +PT:2/3 +K:Firebending:1 +A:AB$ PutCounter | Cost$ 3 | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | Exhaust$ True | SubAbility$ DBTrigger | SpellDescription$ Put a +1/+1 counter on NICKNAME. When you next cast a Lesson spell this turn, copy it and you may choose new targets for the copy. (Activate each exhaust ability only once.) +SVar:DBTrigger:DB$ DelayedTrigger | Mode$ SpellCast | ValidCard$ Lesson | ValidActivatingPlayer$ You | ThisTurn$ True | Execute$ EffTrigCopy | TriggerDescription$ When you next cast a Lesson spell this turn, copy it and you may choose new targets for the copy. +SVar:EffTrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True +DeckHints:Type$Lesson +Oracle:Firebending 1 (Whenever this creature attacks, add {R}. This mana lasts until end of combat.)\nExhaust — {3}: Put a +1/+1 counter on Jeong Jeong. When you next cast a Lesson spell this turn, copy it and you may choose new targets for the copy. (Activate each exhaust ability only once.) diff --git a/forge-gui/res/cardsfolder/upcoming/kyoshi_village.txt b/forge-gui/res/cardsfolder/upcoming/kyoshi_village.txt new file mode 100644 index 00000000000..f2219e3b7ff --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/kyoshi_village.txt @@ -0,0 +1,9 @@ +Name:Kyoshi Village +ManaCost:no cost +Types:Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. +SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True +A:AB$ Mana | Cost$ T | Produced$ Combo G W | SpellDescription$ Add {G} or {W}. +A:AB$ Draw | Cost$ 4 T Sac<1/CARDNAME> | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +Oracle:This land enters tapped.\n{T}: Add {G} or {W}.\n{4}, {T}, Sacrifice this land: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/mai_scornful_striker.txt b/forge-gui/res/cardsfolder/upcoming/mai_scornful_striker.txt new file mode 100644 index 00000000000..f24609e6466 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mai_scornful_striker.txt @@ -0,0 +1,8 @@ +Name:Mai, Scornful Striker +ManaCost:1 B +Types:Legendary Creature Human Noble Ally +PT:2/2 +K:First Strike +T:Mode$ SpellCast | TriggerZones$ Battlefield | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ Player | Execute$ TrigLoseLife | TriggerDescription$ Whenever a player casts a noncreature spell, they lose 2 life. +SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredActivator | LifeAmount$ 2 +Oracle:First strike\nWhenever a player casts a noncreature spell, they lose 2 life. diff --git a/forge-gui/res/cardsfolder/upcoming/meditation_pools.txt b/forge-gui/res/cardsfolder/upcoming/meditation_pools.txt new file mode 100644 index 00000000000..9f7d5bdd688 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/meditation_pools.txt @@ -0,0 +1,9 @@ +Name:Meditation Pools +ManaCost:no cost +Types:Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. +SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True +A:AB$ Mana | Cost$ T | Produced$ Combo G U | SpellDescription$ Add {G} or {U}. +A:AB$ Draw | Cost$ 4 T Sac<1/CARDNAME> | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +Oracle:This land enters tapped.\n{T}: Add {G} or {U}.\n{4}, {T}, Sacrifice this land: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/misty_palms_oasis.txt b/forge-gui/res/cardsfolder/upcoming/misty_palms_oasis.txt new file mode 100644 index 00000000000..e42251deda3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/misty_palms_oasis.txt @@ -0,0 +1,9 @@ +Name:Misty Palms Oasis +ManaCost:no cost +Types:Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. +SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True +A:AB$ Mana | Cost$ T | Produced$ Combo W B | SpellDescription$ Add {W} or {B}. +A:AB$ Draw | Cost$ 4 T Sac<1/CARDNAME> | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +Oracle:This land enters tapped.\n{T}: Add {W} or {B}.\n{4}, {T}, Sacrifice this land: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/north_pole_gates.txt b/forge-gui/res/cardsfolder/upcoming/north_pole_gates.txt index cad6c8644a8..e13ce02dc54 100644 --- a/forge-gui/res/cardsfolder/upcoming/north_pole_gates.txt +++ b/forge-gui/res/cardsfolder/upcoming/north_pole_gates.txt @@ -1,6 +1,6 @@ Name:North Pole Gates ManaCost:no cost -Types:Land Gate +Types:Land R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True A:AB$ Mana | Cost$ T | Produced$ Combo W U | SpellDescription$ Add {W} or {U}. diff --git a/forge-gui/res/cardsfolder/upcoming/omashu_city.txt b/forge-gui/res/cardsfolder/upcoming/omashu_city.txt new file mode 100644 index 00000000000..efb5fa46c7d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/omashu_city.txt @@ -0,0 +1,9 @@ +Name:Omashu City +ManaCost:no cost +Types:Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. +SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True +A:AB$ Mana | Cost$ T | Produced$ Combo R G | SpellDescription$ Add {R} or {G}. +A:AB$ Draw | Cost$ 4 T Sac<1/CARDNAME> | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +Oracle:This land enters tapped.\n{T}: Add {R} or {G}.\n{4}, {T}, Sacrifice this land: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/platypus_bear.txt b/forge-gui/res/cardsfolder/upcoming/platypus_bear.txt new file mode 100644 index 00000000000..3416cbeb651 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/platypus_bear.txt @@ -0,0 +1,11 @@ +Name:Platypus Bear +ManaCost:1 GU +Types:Creature Platypus Bear +PT:2/3 +K:Defender +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMill | TriggerDescription$ When this creature enters, mill two cards. (Put the top two cards of your library into your graveyard.) +SVar:TrigMill:DB$ Mill | Defined$ You | NumCards$ 2 +S:Mode$ CanAttackDefender | ValidCard$ Card.Self | IsPresent$ Lesson.YouOwn | PresentZone$ Graveyard | Description$ As long as there is a Lesson card in your graveyard, this creature can attack as though it didn't have defender. +DeckHas:Ability$Mill|Graveyard +DeckHints:Type$Lesson +Oracle:Defender\nWhen this creature enters, mill two cards. (Put the top two cards of your library into your graveyard.)\nAs long as there is a Lesson card in your graveyard, this creature can attack as though it didn't have defender. diff --git a/forge-gui/res/cardsfolder/upcoming/serpents_pass.txt b/forge-gui/res/cardsfolder/upcoming/serpents_pass.txt new file mode 100644 index 00000000000..8db52ba09fd --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/serpents_pass.txt @@ -0,0 +1,9 @@ +Name:Serpent's Pass +ManaCost:no cost +Types:Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. +SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True +A:AB$ Mana | Cost$ T | Produced$ Combo U B | SpellDescription$ Add {U} or {B}. +A:AB$ Draw | Cost$ 4 T Sac<1/CARDNAME> | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +Oracle:This land enters tapped.\n{T}: Add {U} or {B}.\n{4}, {T}, Sacrifice this land: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/shared_roots.txt b/forge-gui/res/cardsfolder/upcoming/shared_roots.txt new file mode 100644 index 00000000000..27462bbc434 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/shared_roots.txt @@ -0,0 +1,5 @@ +Name:Shared Roots +ManaCost:1 G +Types:Sorcery Lesson +A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeTypeDesc$ basic land | Tapped$ True | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. +Oracle:Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/upcoming/sun_blessed_peak.txt b/forge-gui/res/cardsfolder/upcoming/sun_blessed_peak.txt new file mode 100644 index 00000000000..2f41353fa31 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sun_blessed_peak.txt @@ -0,0 +1,9 @@ +Name:Sun-Blessed Peak +ManaCost:no cost +Types:Land +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | ReplaceWith$ ETBTapped | Description$ This land enters tapped. +SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True +A:AB$ Mana | Cost$ T | Produced$ Combo R W | SpellDescription$ Add {R} or {W}. +A:AB$ Draw | Cost$ 4 T Sac<1/CARDNAME> | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +Oracle:This land enters tapped.\n{T}: Add {R} or {W}.\n{4}, {T}, Sacrifice this land: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/tiger_dillo.txt b/forge-gui/res/cardsfolder/upcoming/tiger_dillo.txt new file mode 100644 index 00000000000..f0aa63fe596 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tiger_dillo.txt @@ -0,0 +1,6 @@ +Name:Tiger-Dillo +ManaCost:1 R +Types:Creature Cat Armadillo +PT:4/3 +S:Mode$ CantAttack,CantBlock | ValidCard$ Card.Self | IsPresent$ Creature.Other+YouCtrl+powerGE4 | PresentCompare$ EQ0 | Description$ This creature can't attack or block unless you control another creature with power 4 or greater. +Oracle:This creature can't attack or block unless you control another creature with power 4 or greater. diff --git a/forge-gui/res/cardsfolder/upcoming/tolls_of_war.txt b/forge-gui/res/cardsfolder/upcoming/tolls_of_war.txt new file mode 100644 index 00000000000..0a2c83a16dc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tolls_of_war.txt @@ -0,0 +1,8 @@ +Name:Tolls of War +ManaCost:W B +Types:Enchantment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When this enchantment enters, create a Clue token. (It's an artifact with "{2}, Sacrifice this token: Draw a card.") +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_clue_draw | TokenOwner$ You +T:Mode$ Sacrificed | ValidCard$ Permanent.YouCtrl | Execute$ TrigToken | TriggerZones$ Battlefield | ValidPlayer$ You | PlayerTurn$ True | ActivationLimit$ 1 | TriggerDescription$ Whenever you sacrifice a permanent during your turn, create a 1/1 white Ally creature token. This ability triggers only once each turn. +SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_ally +Oracle:When this enchantment enters, create a Clue token. (It's an artifact with "{2}, Sacrifice this token: Draw a card.")\nWhenever you sacrifice a permanent during your turn, create a 1/1 white Ally creature token. This ability triggers only once each turn. diff --git a/forge-gui/res/lists/TypeLists.txt b/forge-gui/res/lists/TypeLists.txt index d3a368b2758..874897ef42a 100644 --- a/forge-gui/res/lists/TypeLists.txt +++ b/forge-gui/res/lists/TypeLists.txt @@ -234,6 +234,7 @@ Pilot:Pilots Pincher:Pinchers Pirate:Pirates Plant:Plants +Platypus:Platypuses Porcupine:Porcupines Possum:Possums Praetor:Praetors