From 00360e55d2ad5660e37e86d331f9c6c3f40a796c Mon Sep 17 00:00:00 2001 From: swordshine Date: Sat, 26 May 2018 13:02:23 +0800 Subject: [PATCH 1/9] - Added some cards --- .../src/main/java/forge/game/CardTraitBase.java | 6 +++++- .../src/main/java/forge/game/card/CardProperty.java | 4 ++++ forge-gui/res/cardsfolder/upcoming/arena_rector.txt | 11 +++++++++++ .../res/cardsfolder/upcoming/aurora_champion.txt | 7 +++++++ forge-gui/res/cardsfolder/upcoming/brightling.txt | 12 ++++++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/arena_rector.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/aurora_champion.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/brightling.txt diff --git a/forge-game/src/main/java/forge/game/CardTraitBase.java b/forge-game/src/main/java/forge/game/CardTraitBase.java index d3ff7689545..b59c994a80c 100644 --- a/forge-game/src/main/java/forge/game/CardTraitBase.java +++ b/forge-game/src/main/java/forge/game/CardTraitBase.java @@ -314,7 +314,11 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView { list.addAll(p.getCardsIn(presentZone)); } } - + if (presentPlayer.equals("Any")) { + for (final Player p : this.getHostCard().getController().getAllies()) { + list.addAll(p.getCardsIn(presentZone)); + } + } list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), null); int right = 1; 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 d1d83fe6c1a..682825fe282 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -132,6 +132,10 @@ public class CardProperty { if (!controller.equals(sourceController)) { return false; } + } else if (property.startsWith("YourTeamCtrl")) { + if (controller.getTeam() != sourceController.getTeam()) { + return false; + } } else if (property.startsWith("YouDontCtrl")) { if (controller.equals(sourceController)) { return false; diff --git a/forge-gui/res/cardsfolder/upcoming/arena_rector.txt b/forge-gui/res/cardsfolder/upcoming/arena_rector.txt new file mode 100644 index 00000000000..7033368ff34 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/arena_rector.txt @@ -0,0 +1,11 @@ +Name:Arena Rector +ManaCost:3 W +Types:Creature Human Cleric +PT:1/2 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigExile | OptionalDecider$ TriggeredCardController | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may exile it. If you do, search your library for a planeswalker card, put that card onto the battlefield, then shuffle your library. +SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | Defined$ TriggeredCard | SubAbility$ DBReturn +SVar:DBReturn:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Planeswalker.YouOwn | ChangeNum$ 1 +SVar:SacMe:4 +SVar:RemRandomDeck:True +DeckNeeds:Type$Planeswalker +Oracle:When Arena Rector dies, you may exile it. If you do, search your library for a planeswalker card, put that card onto the battlefield, then shuffle your library. diff --git a/forge-gui/res/cardsfolder/upcoming/aurora_champion.txt b/forge-gui/res/cardsfolder/upcoming/aurora_champion.txt new file mode 100644 index 00000000000..dd922ad75df --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/aurora_champion.txt @@ -0,0 +1,7 @@ +Name:Aurora Champion +ManaCost:2 W +Types:Creature Elf Warrior +PT:3/2 +T:Mode$ Attacks | ValidCard$ Card.Self | IsPresent$ Warrior.Other+YourTeamCtrl | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ Whenever CARDNAME attacks, if your team controls another Warrior, tap target creature. +SVar:TrigTap:DB$ Tap | ValidTgts$ Creature | TgtPrompt$ Select target creature +Oracle:Whenever Aurora Champion attacks, if your team controls another Warrior, tap target creature. diff --git a/forge-gui/res/cardsfolder/upcoming/brightling.txt b/forge-gui/res/cardsfolder/upcoming/brightling.txt new file mode 100644 index 00000000000..e38fef20862 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/brightling.txt @@ -0,0 +1,12 @@ +Name:Brightling +ManaCost:1 W W +Types:Creature Shapeshifter +PT:3/3 +A:AB$ Pump | Cost$ W | KW$ Vigilance | Defined$ Self | SpellDescription$ CARDNAME gains vigilance until end of turn. +A:AB$ Pump | Cost$ W | KW$ Lifelink | Defined$ Self | SpellDescription$ CARDNAME gains lifelink until end of turn. +A:AB$ ChangeZone | Cost$ W | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return CARDNAME to its owner's hand. +A:AB$ Pump | Cost$ 1 | Subability$ ABChoice | SpellDescription$ CARDNAME gets +1/-1 or -1/+1 until end of turn. +SVar:ABChoice:DB$ GenericChoice | Defined$ You | Choices$ ABPump1,ABPump2 +SVar:ABPump1:DB$ Pump | Defined$ Self | NumAtt$ +1 | NumDef$ -1 | SpellDescription$ +1/-1 +SVar:ABPump2:DB$ Pump | Defined$ Self | NumAtt$ -1 | NumDef$ +1 | SpellDescription$ -1/+1 +Oracle:{W|: Brightling gains vigilance until end of turn.\n{W}: Brightling gains lifelink until end of turn.\n{W}: Return Brightling to its owner's hand.\n{1}: Brightling gets +1/-1 or -1/+1 until end of turn From 614e98d32aa37adca0a4566e5864ae16a80edc9f Mon Sep 17 00:00:00 2001 From: swordshine Date: Sat, 26 May 2018 13:14:01 +0800 Subject: [PATCH 2/9] - Updated TypeLists --- forge-gui/res/cardsfolder/upcoming/brightling.txt | 2 +- forge-gui/res/lists/TypeLists.txt | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/brightling.txt b/forge-gui/res/cardsfolder/upcoming/brightling.txt index e38fef20862..bd69bc0057a 100644 --- a/forge-gui/res/cardsfolder/upcoming/brightling.txt +++ b/forge-gui/res/cardsfolder/upcoming/brightling.txt @@ -9,4 +9,4 @@ A:AB$ Pump | Cost$ 1 | Subability$ ABChoice | SpellDescription$ CARDNAME gets +1 SVar:ABChoice:DB$ GenericChoice | Defined$ You | Choices$ ABPump1,ABPump2 SVar:ABPump1:DB$ Pump | Defined$ Self | NumAtt$ +1 | NumDef$ -1 | SpellDescription$ +1/-1 SVar:ABPump2:DB$ Pump | Defined$ Self | NumAtt$ -1 | NumDef$ +1 | SpellDescription$ -1/+1 -Oracle:{W|: Brightling gains vigilance until end of turn.\n{W}: Brightling gains lifelink until end of turn.\n{W}: Return Brightling to its owner's hand.\n{1}: Brightling gets +1/-1 or -1/+1 until end of turn +Oracle:{W|: Brightling gains vigilance until end of turn.\n{W}: Brightling gains lifelink until end of turn.\n{W}: Return Brightling to its owner's hand.\n{1}: Brightling gets +1/-1 or -1/+1 until end of turn. diff --git a/forge-gui/res/lists/TypeLists.txt b/forge-gui/res/lists/TypeLists.txt index 33857b9d908..86761752799 100644 --- a/forge-gui/res/lists/TypeLists.txt +++ b/forge-gui/res/lists/TypeLists.txt @@ -28,6 +28,7 @@ Assembly-Worker:Assembly-Workers Atog:Atogs Aurochs:Aurochs Avatar:Avatars +Azra:Azra Badger:Badgers Barbarian:Barbarians Basilisk:Basilisks @@ -296,6 +297,7 @@ Narset Nissa Nixilis Ral +Rowan Saheeli Samut Sarkhan @@ -307,4 +309,7 @@ Tibalt Ugin Venser Vraska +Will Xenagos +Yanggu +Yanling From d4c25caeef4ef8d8de1a77d68fb49c7433ede785 Mon Sep 17 00:00:00 2001 From: swordshine Date: Sat, 26 May 2018 13:31:43 +0800 Subject: [PATCH 3/9] - Added some cards --- forge-gui/res/cardsfolder/upcoming/aurora_champion.txt | 1 + forge-gui/res/cardsfolder/upcoming/bull_rush_bruiser.txt | 8 ++++++++ forge-gui/res/cardsfolder/upcoming/jubilant_mascot.txt | 7 +++++++ 3 files changed, 16 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/bull_rush_bruiser.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/jubilant_mascot.txt diff --git a/forge-gui/res/cardsfolder/upcoming/aurora_champion.txt b/forge-gui/res/cardsfolder/upcoming/aurora_champion.txt index dd922ad75df..13f0d2ae042 100644 --- a/forge-gui/res/cardsfolder/upcoming/aurora_champion.txt +++ b/forge-gui/res/cardsfolder/upcoming/aurora_champion.txt @@ -4,4 +4,5 @@ Types:Creature Elf Warrior PT:3/2 T:Mode$ Attacks | ValidCard$ Card.Self | IsPresent$ Warrior.Other+YourTeamCtrl | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ Whenever CARDNAME attacks, if your team controls another Warrior, tap target creature. SVar:TrigTap:DB$ Tap | ValidTgts$ Creature | TgtPrompt$ Select target creature +SVar:BuffedBy:Warrior Oracle:Whenever Aurora Champion attacks, if your team controls another Warrior, tap target creature. diff --git a/forge-gui/res/cardsfolder/upcoming/bull_rush_bruiser.txt b/forge-gui/res/cardsfolder/upcoming/bull_rush_bruiser.txt new file mode 100644 index 00000000000..212a3050bcc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bull_rush_bruiser.txt @@ -0,0 +1,8 @@ +Name:Bull-Rush Bruiser +ManaCost:3 R +Types:Creature Minotaur Warrior +PT:4/3 +T:Mode$ Attacks | ValidCard$ Card.Self | IsPresent$ Warrior.Other+YourTeamCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, if your team controls another Warrior, CARDNAME gains first strike until end of turn. +SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ First Strike | Defined$ Self +SVar:BuffedBy:Warrior +Oracle:Whenever Bull-Rush Bruiser attacks, if your team controls another Warrior, Bull-Rush Bruiser gains first strike until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/jubilant_mascot.txt b/forge-gui/res/cardsfolder/upcoming/jubilant_mascot.txt new file mode 100644 index 00000000000..f95bd64ddd1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/jubilant_mascot.txt @@ -0,0 +1,7 @@ +Name:Jubilant Mascot +ManaCost:2 W +Types:Creature Homonculus +PT:1/1 +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of combat on your turn, you may pay {3}{W}. If you do, support 2. (Put a +1/+1 counter on each of up to two other target creatures.) +SVar:TrigPutCounter:AB$ PutCounter | Cost$ 3 W | ValidTgts$ Creature.Other | TgtPrompt$ Select target creature other than CARDNAME | TargetMin$ 0 | TargetMax$ 2 | CounterType$ P1P1 | CounterNum$ 1 +Oracle:At the beginning of combat on your turn, you may pay {3}{W}. If you do, support 2. (Put a +1/+1 counter on each of up to two other target creatures.) From 1b01336514c212f6abb7951952fd7be14378120b Mon Sep 17 00:00:00 2001 From: swordshine Date: Sat, 26 May 2018 17:03:27 +0800 Subject: [PATCH 4/9] - Added some cards --- .../cardsfolder/upcoming/archon_of_valors_reach.txt | 11 +++++++++++ .../res/cardsfolder/upcoming/last_one_standing.txt | 7 +++++++ .../res/cardsfolder/upcoming/rushblade_commander.txt | 8 ++++++++ forge-gui/res/cardsfolder/upcoming/victory_chimes.txt | 7 +++++++ 4 files changed, 33 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/archon_of_valors_reach.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/last_one_standing.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/rushblade_commander.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/victory_chimes.txt diff --git a/forge-gui/res/cardsfolder/upcoming/archon_of_valors_reach.txt b/forge-gui/res/cardsfolder/upcoming/archon_of_valors_reach.txt new file mode 100644 index 00000000000..8b5fdd67d67 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/archon_of_valors_reach.txt @@ -0,0 +1,11 @@ +Name:Archon of Valor's Reach +ManaCost:4 G W +Types:Creature Archon +PT:5/6 +K:Flying +K:Vigilance +K:Trample +K:ETBReplacement:Other:ChooseT +SVar:ChooseT:DB$ ChooseType | Type$ Card | ValidTypes$ Artifact,Enchantment,Instant,Sorcery,Planeswalker | AILogic$ MostProminentInComputerDeck | SpellDescription$ As CARDNAME enters the battlefield, choose artifact, enchantment, instant, sorcery, or planeswalker. +S:Mode$ CantBeCast | ValidCard$ Card.ChosenType | Description$ Players can't cast spells of the chosen type. +Oracle:Flying, vigilance, trample\nAs Archon of Valor's Reach enters the battlefield, choose artifact, enchantment, instant, sorcery, or planeswalker.\nPlayers can't cast spells of the chosen type. diff --git a/forge-gui/res/cardsfolder/upcoming/last_one_standing.txt b/forge-gui/res/cardsfolder/upcoming/last_one_standing.txt new file mode 100644 index 00000000000..395db2c1865 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/last_one_standing.txt @@ -0,0 +1,7 @@ +Name:Last One Standing +ManaCost:1 B R +Types:Sorcery +A:SP$ ChooseCard | Cost$ 1 B R | Defined$ You | Amount$ 1 | Choices$ Creature | AtRandom$ True | SubAbility$ DBDestroyAll | RememberChosen$ True | SpellDescription$ Choose a creature at random, then destroy the rest. +SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Creature.IsNotRemembered | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Choose a creature at random, then destroy the rest. diff --git a/forge-gui/res/cardsfolder/upcoming/rushblade_commander.txt b/forge-gui/res/cardsfolder/upcoming/rushblade_commander.txt new file mode 100644 index 00000000000..c84bb0a734b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rushblade_commander.txt @@ -0,0 +1,8 @@ +Name:Rushblade CommanderRushblade Commander +ManaCost:B R +Types:Creature Azra Warrior +PT:2/2 +S:Mode$ Continuous | Affected$ Warrior.YourTeamCtrl | AddKeyword$ Haste | Description$ Warriors your team controls have haste. +SVar:PlayMain1:TRUE +SVar:BuffedBy:Warrior +Oracle:Warriors your team controls have haste. diff --git a/forge-gui/res/cardsfolder/upcoming/victory_chimes.txt b/forge-gui/res/cardsfolder/upcoming/victory_chimes.txt new file mode 100644 index 00000000000..308d832d7cb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/victory_chimes.txt @@ -0,0 +1,7 @@ +Name:Victory Chimes +ManaCost:3 +Types:Artifact +K:CARDNAME untaps during each other player's untap step. +A:AB$ ChoosePlayer | Cost$ T | Defined$ You | Choices$ Player | ChoiceTitle$ Choose an player | SubAbility$ DBMana | SpellDescription$ Choose a player. That player adds one mana of any color they choose. +SVar:DBMana:DB$ Mana | Produced$ Any | Defined$ ChosenPlayer +Oracle:Untap Victory Chimes during each other player's untap step.\n{T}: A player of your choice adds {C}. From 51a0a9e70ad5b32febd01cf3b8cdb89a3c23abfa Mon Sep 17 00:00:00 2001 From: Hanmac Date: Sat, 26 May 2018 09:31:12 +0200 Subject: [PATCH 5/9] CardType: fixed seting specific SubTypes --- .../main/java/forge/ai/ComputerUtilCard.java | 4 +- .../main/java/forge/ai/ability/AnimateAi.java | 93 +++++-------------- .../main/java/forge/card/CardChangedType.java | 17 +++- .../src/main/java/forge/card/CardType.java | 74 ++++++++++++++- .../main/java/forge/game/StaticEffect.java | 2 +- .../ability/effects/AnimateAllEffect.java | 42 ++++++--- .../game/ability/effects/AnimateEffect.java | 46 +++++---- .../ability/effects/AnimateEffectBase.java | 47 +++++----- .../ability/effects/CopyPermanentEffect.java | 2 +- .../game/ability/effects/DebuffEffect.java | 2 +- .../ability/effects/ProtectAllEffect.java | 2 +- .../game/ability/effects/ProtectEffect.java | 5 +- .../game/ability/effects/PumpAllEffect.java | 25 +++-- .../game/ability/effects/PumpEffect.java | 4 +- .../src/main/java/forge/game/card/Card.java | 83 +++++++++++------ .../java/forge/game/card/CardFactoryUtil.java | 1 + .../forge/game/keyword/KeywordsChange.java | 26 ++++-- .../main/java/forge/game/mana/ManaPool.java | 2 +- .../main/java/forge/game/player/Player.java | 5 +- .../forge/game/spellability/SpellAbility.java | 9 ++ .../game/staticability/StaticAbility.java | 4 +- .../StaticAbilityContinuous.java | 51 +++++++--- 22 files changed, 346 insertions(+), 200 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java index 1e05d7a55e4..ae3a451a74a 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java @@ -1573,7 +1573,7 @@ public class ComputerUtilCard { pumped.addNewPT(c.getCurrentPower(), c.getCurrentToughness(), timestamp); pumped.addTempPowerBoost(c.getTempPowerBoost() + power + berserkPower); pumped.addTempToughnessBoost(c.getTempToughnessBoost() + toughness); - pumped.addChangedCardKeywords(kws, new ArrayList(), false, timestamp); + pumped.addChangedCardKeywords(kws, null, false, false, timestamp); Set types = c.getCounters().keySet(); for(CounterType ct : types) { pumped.addCounterFireNoEvents(ct, c.getCounters(ct), c, true); @@ -1596,7 +1596,7 @@ public class ComputerUtilCard { } } final long timestamp2 = c.getGame().getNextTimestamp(); //is this necessary or can the timestamp be re-used? - pumped.addChangedCardKeywordsInternal(toCopy, Lists.newArrayList(), false, timestamp2, true); + pumped.addChangedCardKeywordsInternal(toCopy, null, false, false, timestamp2, true); ComputerUtilCard.applyStaticContPT(ai.getGame(), pumped, new CardCollection(c)); return pumped; } diff --git a/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java b/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java index 28e8fb5bb9c..76fdbbd3d0d 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java @@ -23,12 +23,12 @@ import forge.game.staticability.StaticAbilityLayer; import forge.game.trigger.Trigger; import forge.game.trigger.TriggerHandler; import forge.game.zone.ZoneType; -import forge.util.collect.FCollectionView; import java.util.Arrays; import java.util.List; import java.util.Map; +import forge.game.ability.effects.AnimateEffectBase; /** *

@@ -363,11 +363,11 @@ public class AnimateAi extends SpellAbilityAi { card.setSickness(hasOriginalCardSickness); // AF specific sa - int power = -1; + Integer power = null; if (sa.hasParam("Power")) { power = AbilityUtils.calculateAmount(source, sa.getParam("Power"), sa); } - int toughness = -1; + Integer toughness = null; if (sa.hasParam("Toughness")) { toughness = AbilityUtils.calculateAmount(source, sa.getParam("Toughness"), sa); } @@ -453,65 +453,7 @@ public class AnimateAi extends SpellAbilityAi { sVars.addAll(Arrays.asList(sa.getParam("sVars").split(","))); } - // duplicating AnimateEffectBase.doAnimate - boolean removeSuperTypes = false; - boolean removeCardTypes = false; - boolean removeSubTypes = false; - boolean removeCreatureTypes = false; - boolean removeArtifactTypes = false; - - if (sa.hasParam("OverwriteTypes")) { - removeSuperTypes = true; - removeCardTypes = true; - removeSubTypes = true; - removeCreatureTypes = true; - removeArtifactTypes = true; - } - - if (sa.hasParam("KeepSupertypes")) { - removeSuperTypes = false; - } - - if (sa.hasParam("KeepCardTypes")) { - removeCardTypes = false; - } - - if (sa.hasParam("RemoveSuperTypes")) { - removeSuperTypes = true; - } - - if (sa.hasParam("RemoveCardTypes")) { - removeCardTypes = true; - } - - if (sa.hasParam("RemoveSubTypes")) { - removeSubTypes = true; - } - - if (sa.hasParam("RemoveCreatureTypes")) { - removeCreatureTypes = true; - } - - if (sa.hasParam("RemoveArtifactTypes")) { - removeArtifactTypes = true; - } - - if ((power != -1) || (toughness != -1)) { - card.addNewPT(power, toughness, timestamp); - } - - if (!types.isEmpty() || !removeTypes.isEmpty() || removeCreatureTypes) { - card.addChangedCardTypes(types, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes, - removeCreatureTypes, removeArtifactTypes, timestamp); - } - - card.addChangedCardKeywords(keywords, removeKeywords, sa.hasParam("RemoveAllAbilities"), timestamp); - - for (final String k : hiddenKeywords) { - card.addHiddenExtrinsicKeyword(k); - } - - card.addColor(finalDesc, !sa.hasParam("OverwriteColors"), timestamp); + AnimateEffectBase.doAnimate(card, sa, power, toughness, types, removeTypes, finalDesc, keywords, removeKeywords, hiddenKeywords, timestamp); // back to duplicating AnimateEffect.resolve // TODO will all these abilities/triggers/replacements/etc. lead to @@ -521,10 +463,14 @@ public class AnimateAi extends SpellAbilityAi { boolean clearAbilities = sa.hasParam("OverwriteAbilities"); boolean clearSpells = sa.hasParam("OverwriteSpells"); boolean removeAll = sa.hasParam("RemoveAllAbilities"); + boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities"); if (clearAbilities || clearSpells || removeAll) { for (final SpellAbility ab : card.getSpellAbilities()) { - if (removeAll || (ab.isAbility() && clearAbilities) || (ab.isSpell() && clearSpells)) { + if (removeAll + || (ab.isIntrinsic() && removeIntrinsic && !ab.isBasicLandAbility()) + || (ab.isAbility() && clearAbilities) + || (ab.isSpell() && clearSpells)) { card.removeSpellAbility(ab); removedAbilities.add(ab); } @@ -565,9 +511,11 @@ public class AnimateAi extends SpellAbilityAi { // suppress triggers from the animated card final List removedTriggers = Lists.newArrayList(); - if (sa.hasParam("OverwriteTriggers") || removeAll) { - final FCollectionView triggersToRemove = card.getTriggers(); - for (final Trigger trigger : triggersToRemove) { + if (sa.hasParam("OverwriteTriggers") || removeAll || removeIntrinsic) { + for (final Trigger trigger : card.getTriggers()) { + if (removeIntrinsic && !trigger.isIntrinsic()) { + continue; + } trigger.setSuppressed(true); removedTriggers.add(trigger); } @@ -603,9 +551,11 @@ public class AnimateAi extends SpellAbilityAi { // suppress static abilities from the animated card final List removedStatics = Lists.newArrayList(); - if (sa.hasParam("OverwriteStatics") || removeAll) { - final FCollectionView staticsToRemove = card.getStaticAbilities(); - for (final StaticAbility stAb : staticsToRemove) { + if (sa.hasParam("OverwriteStatics") || removeAll || removeIntrinsic) { + for (final StaticAbility stAb : card.getStaticAbilities()) { + if (removeIntrinsic && !stAb.isIntrinsic()) { + continue; + } stAb.setTemporarilySuppressed(true); removedStatics.add(stAb); } @@ -613,8 +563,11 @@ public class AnimateAi extends SpellAbilityAi { // suppress static abilities from the animated card final List removedReplacements = Lists.newArrayList(); - if (sa.hasParam("OverwriteReplacements") || removeAll) { + if (sa.hasParam("OverwriteReplacements") || removeAll || removeIntrinsic) { for (final ReplacementEffect re : card.getReplacementEffects()) { + if (removeIntrinsic && !re.isIntrinsic()) { + continue; + } re.setTemporarilySuppressed(true); removedReplacements.add(re); } diff --git a/forge-core/src/main/java/forge/card/CardChangedType.java b/forge-core/src/main/java/forge/card/CardChangedType.java index 1aae3bd41fa..6e855548598 100644 --- a/forge-core/src/main/java/forge/card/CardChangedType.java +++ b/forge-core/src/main/java/forge/card/CardChangedType.java @@ -32,19 +32,24 @@ public class CardChangedType { private final boolean removeSuperTypes; private final boolean removeCardTypes; private final boolean removeSubTypes; + private final boolean removeLandTypes; private final boolean removeCreatureTypes; private final boolean removeArtifactTypes; + private final boolean removeEnchantmentTypes; public CardChangedType(final CardType addType0, final CardType removeType0, final boolean removeSuperType0, - final boolean removeCardType0, final boolean removeSubType0, final boolean removeCreatureType0, - final boolean removeArtifactType0) { + final boolean removeCardType0, final boolean removeSubType0, final boolean removeLandType0, + final boolean removeCreatureType0, final boolean removeArtifactType0, + final boolean removeEnchantmentTypes0) { addType = addType0; removeType = removeType0; removeSuperTypes = removeSuperType0; removeCardTypes = removeCardType0; removeSubTypes = removeSubType0; + removeLandTypes = removeLandType0; removeCreatureTypes = removeCreatureType0; removeArtifactTypes = removeArtifactType0; + removeEnchantmentTypes = removeEnchantmentTypes0; } public final CardType getAddType() { @@ -67,6 +72,10 @@ public class CardChangedType { return removeSubTypes; } + public final boolean isRemoveLandTypes() { + return removeLandTypes; + } + public final boolean isRemoveCreatureTypes() { return removeCreatureTypes; } @@ -74,4 +83,8 @@ public class CardChangedType { public final boolean isRemoveArtifactTypes() { return removeArtifactTypes; } + + public final boolean isRemoveEnchantmentTypes() { + return removeEnchantmentTypes; + } } diff --git a/forge-core/src/main/java/forge/card/CardType.java b/forge-core/src/main/java/forge/card/CardType.java index f01b9e59413..e3713cf1f1b 100644 --- a/forge-core/src/main/java/forge/card/CardType.java +++ b/forge-core/src/main/java/forge/card/CardType.java @@ -190,7 +190,7 @@ public final class CardType implements Comparable, CardTypeView { public boolean setCreatureTypes(Collection ctypes) { // if it isn't a creature then this has no effect - if (!coreTypes.contains(CoreType.Creature)) { + if (!isCreature() && !isTribal()) { return false; } boolean changed = Iterables.removeIf(subtypes, Predicates.IS_CREATURE_TYPE); @@ -236,7 +236,7 @@ public final class CardType implements Comparable, CardTypeView { final Set landTypes = Sets.newHashSet(); if (isLand()) { for (final String t : subtypes) { - if (isALandType(t) || isABasicLandType(t)) { + if (isALandType(t)) { landTypes.add(t); } } @@ -435,6 +435,9 @@ public final class CardType implements Comparable, CardTypeView { @Override public CardTypeView getTypeWithChanges(final Iterable changedCardTypes) { CardType newType = null; + if (Iterables.isEmpty(changedCardTypes)) { + return this; + } // we assume that changes are already correctly ordered (taken from TreeMap.values()) for (final CardChangedType ct : changedCardTypes) { if(null == newType) @@ -449,7 +452,10 @@ public final class CardType implements Comparable, CardTypeView { if (ct.isRemoveSubTypes()) { newType.subtypes.clear(); } - else { + else if (!newType.subtypes.isEmpty()) { + if (ct.isRemoveLandTypes()) { + Iterables.removeIf(newType.subtypes, Predicates.IS_LAND_TYPE); + } if (ct.isRemoveCreatureTypes()) { Iterables.removeIf(newType.subtypes, Predicates.IS_CREATURE_TYPE); // need to remove AllCreatureTypes too when removing creature Types @@ -458,6 +464,9 @@ public final class CardType implements Comparable, CardTypeView { if (ct.isRemoveArtifactTypes()) { Iterables.removeIf(newType.subtypes, Predicates.IS_ARTIFACT_TYPE); } + if (ct.isRemoveEnchantmentTypes()) { + Iterables.removeIf(newType.subtypes, Predicates.IS_ENCHANTMENT_TYPE); + } } if (ct.getRemoveType() != null) { newType.removeAll(ct.getRemoveType()); @@ -466,6 +475,28 @@ public final class CardType implements Comparable, CardTypeView { newType.addAll(ct.getAddType()); } } + // sanisfy subtypes + if (newType != null && !newType.subtypes.isEmpty()) { + if (!newType.isCreature() && !newType.isTribal()) { + Iterables.removeIf(newType.subtypes, Predicates.IS_CREATURE_TYPE); + newType.subtypes.remove("AllCreatureTypes"); + } + if (!newType.isLand()) { + Iterables.removeIf(newType.subtypes, Predicates.IS_LAND_TYPE); + } + if (!newType.isArtifact()) { + Iterables.removeIf(newType.subtypes, Predicates.IS_ARTIFACT_TYPE); + } + if (!newType.isEnchantment()) { + Iterables.removeIf(newType.subtypes, Predicates.IS_ENCHANTMENT_TYPE); + } + if (!newType.isInstant() && !newType.isSorcery()) { + Iterables.removeIf(newType.subtypes, Predicates.IS_SPELL_TYPE); + } + if (!newType.isPlaneswalker() && !newType.isEmblem()) { + Iterables.removeIf(newType.subtypes, Predicates.IS_WALKER_TYPE); + } + } return newType == null ? this : newType; } @@ -574,6 +605,13 @@ public final class CardType implements Comparable, CardTypeView { public static final BiMap singularTypes = pluralTypes.inverse(); } public static class Predicates { + public static Predicate IS_LAND_TYPE = new Predicate() { + @Override + public boolean apply(String input) { + return CardType.isALandType(input); + } + }; + public static Predicate IS_ARTIFACT_TYPE = new Predicate() { @Override public boolean apply(String input) { @@ -587,6 +625,27 @@ public final class CardType implements Comparable, CardTypeView { return CardType.isACreatureType(input); } }; + + public static Predicate IS_ENCHANTMENT_TYPE = new Predicate() { + @Override + public boolean apply(String input) { + return CardType.isAnEnchantmentType(input); + } + }; + + public static Predicate IS_SPELL_TYPE = new Predicate() { + @Override + public boolean apply(String input) { + return CardType.isASpellType(input); + } + }; + + public static Predicate IS_WALKER_TYPE = new Predicate() { + @Override + public boolean apply(String input) { + return CardType.isAPlaneswalkerType(input); + } + }; } @@ -656,7 +715,7 @@ public final class CardType implements Comparable, CardTypeView { } public static boolean isALandType(final String cardType) { - return (Constant.LAND_TYPES.contains(cardType)); + return Constant.LAND_TYPES.contains(cardType) || isABasicLandType(cardType); } public static boolean isAPlaneswalkerType(final String cardType) { @@ -667,6 +726,13 @@ public final class CardType implements Comparable, CardTypeView { return (Constant.BASIC_TYPES.contains(cardType)); } + public static boolean isAnEnchantmentType(final String cardType) { + return (Constant.ENCHANTMENT_TYPES.contains(cardType)); + } + + public static boolean isASpellType(final String cardType) { + return (Constant.SPELL_TYPES.contains(cardType)); + } /** * If the input is a plural type, return the corresponding singular form. diff --git a/forge-game/src/main/java/forge/game/StaticEffect.java b/forge-game/src/main/java/forge/game/StaticEffect.java index 4462acce247..f01c811b022 100644 --- a/forge-game/src/main/java/forge/game/StaticEffect.java +++ b/forge-game/src/main/java/forge/game/StaticEffect.java @@ -1036,7 +1036,7 @@ public class StaticEffect { } // remove abilities - if (params.containsKey("RemoveAllAbilities")) { + if (params.containsKey("RemoveAllAbilities") || params.containsKey("RemoveIntrinsicAbilities")) { affectedCard.unSuppressCardTraits(); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java index 17b5a336eb1..0f3219c7e55 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java @@ -25,6 +25,8 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import com.google.common.collect.ImmutableList; + public class AnimateAllEffect extends AnimateEffectBase { @Override @@ -144,6 +146,9 @@ public class AnimateAllEffect extends AnimateEffectBase { list = CardLists.getValidCards(list, valid.split(","), host.getController(), host, sa); + boolean removeAll = sa.hasParam("RemoveAllAbilities"); + boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities"); + for (final Card c : list) { doAnimate(c, sa, power, toughness, types, removeTypes, finalDesc, keywords, removeKeywords, hiddenKeywords, timestamp); @@ -161,11 +166,14 @@ public class AnimateAllEffect extends AnimateEffectBase { // remove abilities final List removedAbilities = new ArrayList(); - if (sa.hasParam("OverwriteAbilities") || sa.hasParam("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteAbilities") || removeAll || removeIntrinsic) { for (final SpellAbility ab : c.getSpellAbilities()) { if (ab.isAbility()) { - c.removeSpellAbility(ab); - removedAbilities.add(ab); + if (removeAll + || (ab.isIntrinsic() && removeIntrinsic && !ab.isBasicLandAbility())) { + ab.setTemporarilySuppressed(true); + removedAbilities.add(ab); + } } } } @@ -190,19 +198,24 @@ public class AnimateAllEffect extends AnimateEffectBase { // suppress triggers from the animated card final List removedTriggers = new ArrayList(); - if (sa.hasParam("OverwriteTriggers") || sa.hasParam("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteTriggers") || removeAll || removeIntrinsic) { final FCollectionView triggersToRemove = c.getTriggers(); for (final Trigger trigger : triggersToRemove) { - trigger.setSuppressed(true); + if (removeIntrinsic && !trigger.isIntrinsic()) { + continue; + } + trigger.setSuppressed(true); // why this not TemporarilySuppressed? removedTriggers.add(trigger); } } // suppress static abilities from the animated card final List removedStatics = new ArrayList(); - if (sa.hasParam("OverwriteStatics") || sa.hasParam("RemoveAllAbilities")) { - final FCollectionView staticsToRemove = c.getStaticAbilities(); - for (final StaticAbility stAb : staticsToRemove) { + if (sa.hasParam("OverwriteStatics") || removeAll || removeIntrinsic) { + for (final StaticAbility stAb : c.getStaticAbilities()) { + if (removeIntrinsic && !stAb.isIntrinsic()) { + continue; + } stAb.setTemporarilySuppressed(true); removedStatics.add(stAb); } @@ -210,9 +223,11 @@ public class AnimateAllEffect extends AnimateEffectBase { // suppress static abilities from the animated card final List removedReplacements = new ArrayList(); - if (sa.hasParam("OverwriteReplacements") || sa.hasParam("RemoveAllAbilities")) { - final FCollectionView replacementsToRemove = c.getReplacementEffects(); - for (final ReplacementEffect re : replacementsToRemove) { + if (sa.hasParam("OverwriteReplacements") || removeAll || removeIntrinsic) { + for (final ReplacementEffect re : c.getReplacementEffects()) { + if (removeIntrinsic && !re.isIntrinsic()) { + continue; + } re.setTemporarilySuppressed(true); removedReplacements.add(re); } @@ -234,8 +249,11 @@ public class AnimateAllEffect extends AnimateEffectBase { public void run() { doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, addedReplacements, - false, removedAbilities, timestamp); + ImmutableList.of(), timestamp); + for (final SpellAbility sa : removedAbilities) { + sa.setTemporarilySuppressed(false); + } // give back suppressed triggers for (final Trigger t : removedTriggers) { t.setSuppressed(false); diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java index e2de4258f82..cb4429f3e25 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java @@ -18,7 +18,6 @@ import forge.game.spellability.SpellAbility; import forge.game.staticability.StaticAbility; import forge.game.trigger.Trigger; import forge.game.trigger.TriggerHandler; -import forge.util.collect.FCollectionView; import java.util.Arrays; import java.util.List; @@ -162,21 +161,20 @@ public class AnimateEffect extends AnimateEffectBase { boolean clearAbilities = sa.hasParam("OverwriteAbilities"); boolean clearSpells = sa.hasParam("OverwriteSpells"); boolean removeAll = sa.hasParam("RemoveAllAbilities"); + boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities"); if (clearAbilities || clearSpells || removeAll) { for (final SpellAbility ab : c.getSpellAbilities()) { - if (removeAll || (ab.isAbility() && clearAbilities) + if (removeAll + || (ab.isIntrinsic() && removeIntrinsic && !ab.isBasicLandAbility()) + || (ab.isAbility() && clearAbilities) || (ab.isSpell() && clearSpells)) { + ab.setTemporarilySuppressed(true); removedAbilities.add(ab); } } } - // Can't rmeove SAs in foreach loop that finds them - for (final SpellAbility ab : removedAbilities) { - c.removeSpellAbility(ab); - } - if (sa.hasParam("RemoveThisAbility") && !removedAbilities.contains(sa)) { c.removeSpellAbility(sa); removedAbilities.add(sa); @@ -215,20 +213,23 @@ public class AnimateEffect extends AnimateEffectBase { // suppress triggers from the animated card final List removedTriggers = Lists.newArrayList(); - if (sa.hasParam("OverwriteTriggers") || removeAll) { - final FCollectionView triggersToRemove = c.getTriggers(); - for (final Trigger trigger : triggersToRemove) { - trigger.setSuppressed(true); + if (sa.hasParam("OverwriteTriggers") || removeAll || removeIntrinsic) { + for (final Trigger trigger : c.getTriggers()) { + if (removeIntrinsic && !trigger.isIntrinsic()) { + continue; + } + trigger.setSuppressed(true); // why this not TemporarilySuppressed? removedTriggers.add(trigger); } } // give static abilities (should only be used by cards to give // itself a static ability) + final List addedStaticAbilities = Lists.newArrayList(); if (stAbs.size() > 0) { for (final String s : stAbs) { final String actualAbility = source.getSVar(s); - c.addStaticAbility(actualAbility); + addedStaticAbilities.add(c.addStaticAbility(actualAbility)); } } @@ -248,9 +249,11 @@ public class AnimateEffect extends AnimateEffectBase { // suppress static abilities from the animated card final List removedStatics = Lists.newArrayList(); - if (sa.hasParam("OverwriteStatics") || removeAll) { - final FCollectionView staticsToRemove = c.getStaticAbilities(); - for (final StaticAbility stAb : staticsToRemove) { + if (sa.hasParam("OverwriteStatics") || removeAll || removeIntrinsic) { + for (final StaticAbility stAb : c.getStaticAbilities()) { + if (removeIntrinsic && !stAb.isIntrinsic()) { + continue; + } stAb.setTemporarilySuppressed(true); removedStatics.add(stAb); } @@ -258,8 +261,11 @@ public class AnimateEffect extends AnimateEffectBase { // suppress static abilities from the animated card final List removedReplacements = Lists.newArrayList(); - if (sa.hasParam("OverwriteReplacements") || removeAll) { + if (sa.hasParam("OverwriteReplacements") || removeAll || removeIntrinsic) { for (final ReplacementEffect re : c.getReplacementEffects()) { + if (removeIntrinsic && !re.isIntrinsic()) { + continue; + } re.setTemporarilySuppressed(true); removedReplacements.add(re); } @@ -272,8 +278,6 @@ public class AnimateEffect extends AnimateEffectBase { } } - final boolean givesStAbs = (stAbs.size() > 0); - final GameCommand unanimate = new GameCommand() { private static final long serialVersionUID = -5861759814760561373L; @@ -281,9 +285,13 @@ public class AnimateEffect extends AnimateEffectBase { public void run() { doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, addedReplacements, - givesStAbs, removedAbilities, timestamp); + addedStaticAbilities, timestamp); game.fireEvent(new GameEventCardStatsChanged(c)); + + for (final SpellAbility sa : removedAbilities) { + sa.setTemporarilySuppressed(false); + } // give back suppressed triggers for (final Trigger t : removedTriggers) { t.setSuppressed(false); diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java index 627e5e6e84b..e6f814bb780 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffectBase.java @@ -24,11 +24,10 @@ import forge.game.replacement.ReplacementEffect; import forge.game.spellability.SpellAbility; import forge.game.staticability.StaticAbility; import forge.game.trigger.Trigger; -import java.util.ArrayList; import java.util.List; public abstract class AnimateEffectBase extends SpellAbilityEffect { - void doAnimate(final Card c, final SpellAbility sa, final Integer power, final Integer toughness, + public static void doAnimate(final Card c, final SpellAbility sa, final Integer power, final Integer toughness, final CardType addType, final CardType removeType, final String colors, final List keywords, final List removeKeywords, final List hiddenKeywords, final long timestamp) { @@ -36,15 +35,19 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { boolean removeSuperTypes = false; boolean removeCardTypes = false; boolean removeSubTypes = false; + boolean removeLandTypes = false; boolean removeCreatureTypes = false; boolean removeArtifactTypes = false; + boolean removeEnchantmentTypes = false; if (sa.hasParam("OverwriteTypes")) { removeSuperTypes = true; removeCardTypes = true; removeSubTypes = true; + removeLandTypes = true; removeCreatureTypes = true; removeArtifactTypes = true; + removeEnchantmentTypes = true; } if (sa.hasParam("KeepSupertypes")) { @@ -57,6 +60,10 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { if (sa.hasParam("KeepSubtypes")) { removeSubTypes = false; + removeLandTypes = false; + removeCreatureTypes = false; + removeArtifactTypes = false; + removeEnchantmentTypes = false; } if (sa.hasParam("RemoveSuperTypes")) { @@ -71,23 +78,30 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { removeSubTypes = true; } + if (sa.hasParam("RemoveLandTypes")) { + removeCreatureTypes = true; + } if (sa.hasParam("RemoveCreatureTypes")) { removeCreatureTypes = true; } - if (sa.hasParam("RemoveArtifactTypes")) { removeArtifactTypes = true; } + if (sa.hasParam("RemoveEnchantmentTypes")) { + removeEnchantmentTypes = true; + } + if ((power != null) || (toughness != null)) { c.addNewPT(power, toughness, timestamp); } if (!addType.isEmpty() || !removeType.isEmpty() || removeCreatureTypes) { c.addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, - removeCreatureTypes, removeArtifactTypes, timestamp); + removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes, timestamp); } - c.addChangedCardKeywords(keywords, removeKeywords, sa.hasParam("RemoveAllAbilities"), timestamp); + c.addChangedCardKeywords(keywords, removeKeywords, + sa.hasParam("RemoveAllAbilities"), sa.hasParam("RemoveIntrinsicAbilities"), timestamp); for (final String k : hiddenKeywords) { c.addHiddenExtrinsicKeyword(k); @@ -114,10 +128,10 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { * @param timestamp * a long. */ - void doUnanimate(final Card c, SpellAbility sa, final String colorDesc, + static void doUnanimate(final Card c, SpellAbility sa, final String colorDesc, final List hiddenKeywords, final List addedAbilities, final List addedTriggers, final List addedReplacements, - final boolean givesStAbs, final List removedAbilities, final long timestamp) { + final List addedStaticAbilities, final long timestamp) { if (sa.hasParam("LastsIndefinitely")) { return; @@ -127,16 +141,7 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { c.removeChangedCardKeywords(timestamp); - // remove all static abilities - if (givesStAbs) { - c.setStaticAbilities(new ArrayList()); - } - - if (sa.hasParam("Types") || sa.hasParam("RemoveTypes") - || sa.hasParam("RemoveCreatureTypes") || sa.hasParam("RemoveArtifactTypes")) { - c.removeChangedCardTypes(timestamp); - } - + c.removeChangedCardTypes(timestamp); c.removeColor(timestamp); for (final String k : hiddenKeywords) { @@ -147,10 +152,6 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { c.removeSpellAbility(saAdd); } - for (final SpellAbility saRem : removedAbilities) { - c.addSpellAbility(saRem); - } - for (final Trigger t : addedTriggers) { c.removeTrigger(t); } @@ -159,6 +160,10 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { c.removeReplacementEffect(rep); } + for (final StaticAbility stAb : addedStaticAbilities) { + c.removeStaticAbility(stAb); + } + // any other unanimate cleanup if (!c.isCreature()) { c.unEquipAllCards(); 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 72678bb72a6..b2f331aca7a 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 @@ -350,7 +350,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect { copyInPlay.setCloneOrigin(host); sa.getHostCard().addClone(copyInPlay); if (!pumpKeywords.isEmpty()) { - copyInPlay.addChangedCardKeywords(pumpKeywords, Lists.newArrayList(), false, timestamp); + copyInPlay.addChangedCardKeywords(pumpKeywords, Lists.newArrayList(), false, false, timestamp); } crds.add(copyInPlay); if (sa.hasParam("RememberCopied")) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/DebuffEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DebuffEffect.java index 71256eab926..767f43bd9d8 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DebuffEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DebuffEffect.java @@ -137,7 +137,7 @@ public class DebuffEffect extends SpellAbilityEffect { } removedKW.addAll(kws); - tgtC.addChangedCardKeywords(addedKW, removedKW, false, timestamp); + tgtC.addChangedCardKeywords(addedKW, removedKW, false, false, timestamp); } if (!sa.hasParam("Permanent")) { game.getEndOfTurn().addUntil(new GameCommand() { diff --git a/forge-game/src/main/java/forge/game/ability/effects/ProtectAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ProtectAllEffect.java index a0a29b16aea..2a09ba0eb5b 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ProtectAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ProtectAllEffect.java @@ -90,7 +90,7 @@ public class ProtectAllEffect extends SpellAbilityEffect { for (final Card tgtC : list) { if (tgtC.isInPlay()) { - tgtC.addChangedCardKeywords(gainsKWList, ImmutableList.of(), false, timestamp, true); + tgtC.addChangedCardKeywords(gainsKWList, null, false, false, timestamp, true); if (!sa.hasParam("Permanent")) { // If not Permanent, remove protection at EOT diff --git a/forge-game/src/main/java/forge/game/ability/effects/ProtectEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ProtectEffect.java index 9ad893fd8be..3b2b1fe6445 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ProtectEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ProtectEffect.java @@ -1,6 +1,5 @@ package forge.game.ability.effects; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import forge.GameCommand; import forge.card.MagicColor; @@ -153,7 +152,7 @@ public class ProtectEffect extends SpellAbilityEffect { continue; } - tgtC.addChangedCardKeywords(gainsKWList, ImmutableList.of(), false, timestamp, true); + tgtC.addChangedCardKeywords(gainsKWList, null, false, false, timestamp, true); if (!sa.hasParam("Permanent")) { // If not Permanent, remove protection at EOT @@ -181,7 +180,7 @@ public class ProtectEffect extends SpellAbilityEffect { continue; } - unTgtC.addChangedCardKeywords(gainsKWList, ImmutableList.of(), false, timestamp, true); + unTgtC.addChangedCardKeywords(gainsKWList, null, false, false, timestamp, true); if (!sa.hasParam("Permanent")) { // If not Permanent, remove protection at EOT diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java index 8a5d0dfebfb..e009bc3f718 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java @@ -13,10 +13,11 @@ import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; import forge.util.TextUtil; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.google.common.collect.Lists; + public class PumpAllEffect extends SpellAbilityEffect { private static void applyPumpAll(final SpellAbility sa, final List list, final int a, final int d, @@ -24,23 +25,18 @@ public class PumpAllEffect extends SpellAbilityEffect { final Game game = sa.getActivatingPlayer().getGame(); final long timestamp = game.getNextTimestamp(); - final List kws = new ArrayList(); - final List hiddenkws = new ArrayList(); - boolean suspend = false; + final List kws = Lists.newArrayList(); + final List hiddenkws = Lists.newArrayList(); for (String kw : keywords) { if (kw.startsWith("HIDDEN")) { hiddenkws.add(kw); } else { kws.add(kw); - if (kw.equals("Suspend")) { - suspend = true; - } } } for (final Card tgtC : list) { - // only pump things in the affected zones. boolean found = false; for (final ZoneType z : affectedZones) { @@ -55,7 +51,7 @@ public class PumpAllEffect extends SpellAbilityEffect { tgtC.addTempPowerBoost(a); tgtC.addTempToughnessBoost(d); - tgtC.addChangedCardKeywords(kws, new ArrayList(), false, timestamp); + tgtC.addChangedCardKeywords(kws, null, false, false, timestamp); for (String kw : hiddenkws) { tgtC.addHiddenExtrinsicKeyword(kw); @@ -118,13 +114,11 @@ public class PumpAllEffect extends SpellAbilityEffect { @Override public void resolve(final SpellAbility sa) { final List tgtPlayers = getTargetPlayers(sa); - final List affectedZones = new ArrayList(); + final List affectedZones = Lists.newArrayList(); final Game game = sa.getActivatingPlayer().getGame(); if (sa.hasParam("PumpZone")) { - for (final String zone : sa.getParam("PumpZone").split(",")) { - affectedZones.add(ZoneType.valueOf(zone)); - } + affectedZones.addAll(ZoneType.listValueOf(sa.getParam("PumpZone"))); } else { affectedZones.add(ZoneType.Battlefield); } @@ -149,7 +143,10 @@ public class PumpAllEffect extends SpellAbilityEffect { list = (CardCollection)AbilityUtils.filterListByType(list, valid, sa); - List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList(); + List keywords = Lists.newArrayList(); + if (sa.hasParam("KW")) { + keywords.addAll(Arrays.asList(sa.getParam("KW").split(" & "))); + } final int a = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumAtt"), sa, true); final int d = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumDef"), sa, true); diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java index cbbccffafe2..ad44066b83d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java @@ -52,7 +52,7 @@ public class PumpEffect extends SpellAbilityEffect { applyTo.addTempPowerBoost(a); applyTo.addTempToughnessBoost(d); - applyTo.addChangedCardKeywords(kws, Lists.newArrayList(), false, timestamp); + applyTo.addChangedCardKeywords(kws, Lists.newArrayList(), false, false, timestamp); if (redrawPT) { applyTo.updatePowerToughnessForView(); } if (sa.hasParam("LeaveBattlefield")) { @@ -251,7 +251,7 @@ public class PumpEffect extends SpellAbilityEffect { final String landtype = sa.getParam("DefinedLandwalk"); final Card c = AbilityUtils.getDefinedCards(host, landtype, sa).get(0); for (String type : c.getType()) { - if (CardType.isALandType(type) || CardType.isABasicLandType(type)) { + if (CardType.isALandType(type)) { keywords.add(type + "walk"); } } 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 4bf199ef40b..0974bec1015 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -117,7 +117,7 @@ public class Card extends GameEntity implements Comparable { // changes by AF animate and continuous static effects - timestamp is the key of maps private final Map changedCardTypes = Maps.newTreeMap(); private final Map changedCardKeywords = Maps.newTreeMap(); - private final SortedMap changedCardColors = Maps.newTreeMap(); + private final Map changedCardColors = Maps.newTreeMap(); // changes that say "replace each instance of one [color,type] by another - timestamp is the key of maps private final CardChangedWords changedTextColors = new CardChangedWords(); @@ -2776,17 +2776,22 @@ public class Card extends GameEntity implements Comparable { public final void addChangedCardTypes(final CardType addType, final CardType removeType, final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes, - final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp) { - addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes, removeArtifactTypes, timestamp, true); + final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes, + final boolean removeEnchantmentTypes, + final long timestamp) { + addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, removeLandTypes, + removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes, timestamp, true); } public final void addChangedCardTypes(final CardType addType, final CardType removeType, final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes, - final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp, final boolean updateView) { + final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes, + final boolean removeEnchantmentTypes, + final long timestamp, final boolean updateView) { changedCardTypes.put(timestamp, new CardChangedType( addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, - removeCreatureTypes, removeArtifactTypes)); + removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes)); if (updateView) { currentState.getView().updateType(currentState); } @@ -2794,13 +2799,19 @@ public class Card extends GameEntity implements Comparable { public final void addChangedCardTypes(final String[] types, final String[] removeTypes, final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes, - final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp) { - addChangedCardTypes(types, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes, removeArtifactTypes, timestamp, true); + final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes, + final boolean removeEnchantmentTypes, + final long timestamp) { + addChangedCardTypes(types, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes, + removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes, + timestamp, true); } public final void addChangedCardTypes(final String[] types, final String[] removeTypes, final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes, - final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp, final boolean updateView) { + final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes, + final boolean removeEnchantmentTypes, + final long timestamp, final boolean updateView) { CardType addType = null; CardType removeType = null; if (types != null) { @@ -2812,7 +2823,8 @@ public class Card extends GameEntity implements Comparable { } addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, - removeCreatureTypes, removeArtifactTypes, timestamp, updateView); + removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes, + timestamp, updateView); } public final void removeChangedCardTypes(final long timestamp) { @@ -3272,23 +3284,25 @@ public class Card extends GameEntity implements Comparable { } public final void addChangedCardKeywords(final List keywords, final List removeKeywords, - final boolean removeAllKeywords, final long timestamp) { - addChangedCardKeywords(keywords, removeKeywords, removeAllKeywords, timestamp, true); + final boolean removeAllKeywords, final boolean removeIntrinsicKeywords, final long timestamp) { + addChangedCardKeywords(keywords, removeKeywords, removeAllKeywords, removeIntrinsicKeywords, timestamp, true); } public final void addChangedCardKeywords(final List keywords, final List removeKeywords, - final boolean removeAllKeywords, final long timestamp, final boolean updateView) { + final boolean removeAllKeywords, final boolean removeIntrinsicKeywords, final long timestamp, final boolean updateView) { keywords.removeAll(getCantHaveOrGainKeyword()); // if the key already exists - merge entries final KeywordsChange cks = changedCardKeywords.get(timestamp); if (cks != null) { - final KeywordsChange newCks = cks.merge(keywords, removeKeywords, removeAllKeywords); + final KeywordsChange newCks = cks.merge(keywords, removeKeywords, + removeAllKeywords, removeIntrinsicKeywords); newCks.addKeywordsToCard(this); changedCardKeywords.put(timestamp, newCks); } else { - final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, removeAllKeywords); + final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, + removeAllKeywords, removeIntrinsicKeywords); newCks.addKeywordsToCard(this); changedCardKeywords.put(timestamp, newCks); } @@ -3298,20 +3312,24 @@ public class Card extends GameEntity implements Comparable { } } - public final void addChangedCardKeywordsInternal(final List keywords, final List removeKeywords, - final boolean removeAllKeywords, final long timestamp, final boolean updateView) { + public final void addChangedCardKeywordsInternal( + final List keywords, final List removeKeywords, + final boolean removeAllKeywords, final boolean removeIntrinsicKeywords, + final long timestamp, final boolean updateView) { KeywordCollection list = new KeywordCollection(); list.insertAll(keywords); list.removeAll(getCantHaveOrGainKeyword()); // if the key already exists - merge entries final KeywordsChange cks = changedCardKeywords.get(timestamp); if (cks != null) { - final KeywordsChange newCks = cks.merge(keywords, removeKeywords, removeAllKeywords); + final KeywordsChange newCks = cks.merge(keywords, removeKeywords, + removeAllKeywords, removeIntrinsicKeywords); newCks.addKeywordsToCard(this); changedCardKeywords.put(timestamp, newCks); } else { - final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, removeAllKeywords); + final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, + removeAllKeywords, removeIntrinsicKeywords); newCks.addKeywordsToCard(this); changedCardKeywords.put(timestamp, newCks); } @@ -3322,7 +3340,7 @@ public class Card extends GameEntity implements Comparable { } public final void addChangedCardKeywords(final String[] keywords, final String[] removeKeywords, - final boolean removeAllKeywords, final long timestamp) { + final boolean removeAllKeywords, final boolean removeIntrinsicKeywords, final long timestamp) { List keywordsList = Lists.newArrayList(); List removeKeywordsList = Lists.newArrayList(); if (keywords != null) { @@ -3333,7 +3351,8 @@ public class Card extends GameEntity implements Comparable { removeKeywordsList = Lists.newArrayList(Arrays.asList(removeKeywords)); } - addChangedCardKeywords(keywordsList, removeKeywordsList, removeAllKeywords, timestamp); + addChangedCardKeywords(keywordsList, removeKeywordsList, + removeAllKeywords, removeIntrinsicKeywords, timestamp); } public final KeywordsChange removeChangedCardKeywords(final long timestamp) { @@ -3360,8 +3379,17 @@ public class Card extends GameEntity implements Comparable { KeywordCollection keywords = new KeywordCollection(); //final List keywords = Lists.newArrayList(); - - keywords.insertAll(state.getIntrinsicKeywords()); + boolean removeIntrinsic = false; + for (final KeywordsChange ck : changedCardKeywords.values()) { + if (ck.isRemoveIntrinsicKeywords()) { + removeIntrinsic = true; + break; + } + } + + if (!removeIntrinsic) { + keywords.insertAll(state.getIntrinsicKeywords()); + } keywords.insertAll(extrinsicKeyword.getValues()); // see if keyword changes are in effect @@ -3435,7 +3463,8 @@ public class Card extends GameEntity implements Comparable { public final void addChangedTextTypeWord(final String originalWord, final String newWord, final Long timestamp) { changedTextTypes.add(timestamp, originalWord, newWord); if (getType().hasSubtype(originalWord)) { - addChangedCardTypes(CardType.parse(newWord), CardType.parse(originalWord), false, false, false, false, false, timestamp); + addChangedCardTypes(CardType.parse(newWord), CardType.parse(originalWord), + false, false, false, false, false, false, false, timestamp); } updateKeywordsChangedText(timestamp); updateChangedText(); @@ -3474,7 +3503,7 @@ public class Card extends GameEntity implements Comparable { keywordsGrantedByTextChanges.add(newKw); } } - addChangedCardKeywordsInternal(addKeywords, removeKeywords, false, timestamp, true); + addChangedCardKeywordsInternal(addKeywords, removeKeywords, false, false, timestamp, true); } private void updateKeywordsOnRemoveChangedText(final KeywordsChange k) { @@ -4738,8 +4767,10 @@ public class Card extends GameEntity implements Comparable { public final void animateBestow(final boolean updateView) { bestowTimestamp = getGame().getNextTimestamp(); addChangedCardTypes(new CardType(Collections.singletonList("Aura")), - new CardType(Collections.singletonList("Creature")), false, false, false, false, true, bestowTimestamp, updateView); - addChangedCardKeywords(Collections.singletonList("Enchant creature"), Lists.newArrayList(), false, bestowTimestamp, updateView); + new CardType(Collections.singletonList("Creature")), + false, false, false, false, false, false, true, bestowTimestamp, updateView); + addChangedCardKeywords(Collections.singletonList("Enchant creature"), Lists.newArrayList(), + false, false, bestowTimestamp, updateView); } public final void unanimateBestow() { 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 72f6c28a315..9cbf572afb8 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -79,6 +79,7 @@ public class CardFactoryUtil { " | SpellDescription$ Add {" + strcolor + "}."; SpellAbility sa = AbilityFactory.getAbility(abString, state); sa.setIntrinsic(true); // always intristic + sa.setBasicLandAbility(true); // to exclude it from other suspress effects return sa; } diff --git a/forge-game/src/main/java/forge/game/keyword/KeywordsChange.java b/forge-game/src/main/java/forge/game/keyword/KeywordsChange.java index ff51ca12e27..292741c323c 100644 --- a/forge-game/src/main/java/forge/game/keyword/KeywordsChange.java +++ b/forge-game/src/main/java/forge/game/keyword/KeywordsChange.java @@ -37,6 +37,7 @@ public class KeywordsChange { private final List removeKeywordInterfaces = Lists.newArrayList(); private final List removeKeywords = Lists.newArrayList(); private boolean removeAllKeywords; + private boolean removeIntrinsicKeywords; /** * @@ -49,7 +50,8 @@ public class KeywordsChange { public KeywordsChange( final Iterable keywordList, final Collection removeKeywordList, - final boolean removeAll) { + final boolean removeAll, + final boolean removeIntrinsic) { if (keywordList != null) { this.keywords.addAll(keywordList); } @@ -59,12 +61,14 @@ public class KeywordsChange { } this.removeAllKeywords = removeAll; + this.removeIntrinsicKeywords = removeIntrinsic; } public KeywordsChange( final Collection keywordList, final Collection removeKeywordInterfaces, - final boolean removeAll) { + final boolean removeAll, + final boolean removeIntrinsic) { if (keywordList != null) { this.keywords.insertAll(keywordList); } @@ -74,6 +78,7 @@ public class KeywordsChange { } this.removeAllKeywords = removeAll; + this.removeIntrinsicKeywords = removeIntrinsic; } /** @@ -109,6 +114,10 @@ public class KeywordsChange { return this.removeAllKeywords; } + public final boolean isRemoveIntrinsicKeywords() { + return this.removeIntrinsicKeywords; + } + /** * @return whether this KeywordsChange doesn't have any effect. */ @@ -135,8 +144,9 @@ public class KeywordsChange { public final KeywordsChange merge( final Collection keywordList, final Collection removeKeywordList, - final boolean removeAll) { - KeywordsChange result = new KeywordsChange(keywordList, removeKeywordList, removeAll); + final boolean removeAll, + final boolean removeIntrinsic) { + KeywordsChange result = new KeywordsChange(keywordList, removeKeywordList, removeAll, removeIntrinsic); result.__merge(this); return result; } @@ -144,8 +154,9 @@ public class KeywordsChange { public final KeywordsChange merge( final Iterable keywordList, final Collection removeKeywordList, - final boolean removeAll) { - KeywordsChange result = new KeywordsChange(keywordList, removeKeywordList, removeAll); + final boolean removeAll, + final boolean removeIntrinsic) { + KeywordsChange result = new KeywordsChange(keywordList, removeKeywordList, removeAll, removeIntrinsic); result.__merge(this); return result; } @@ -157,5 +168,8 @@ public class KeywordsChange { if (other.removeAllKeywords) { removeAllKeywords = true; } + if (other.removeIntrinsicKeywords) { + removeIntrinsicKeywords = true; + } } } diff --git a/forge-game/src/main/java/forge/game/mana/ManaPool.java b/forge-game/src/main/java/forge/game/mana/ManaPool.java index a5c1930239a..2d2de63d968 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaPool.java +++ b/forge-game/src/main/java/forge/game/mana/ManaPool.java @@ -246,7 +246,7 @@ public class ManaPool implements Iterable { && host.getType().hasStringType(mana.getManaAbility().getAddsKeywordsType())) { final long timestamp = sa.getHostCard().getGame().getNextTimestamp(); final List kws = Arrays.asList(mana.getAddedKeywords().split(" & ")); - host.addChangedCardKeywords(kws, new ArrayList(), false, timestamp); + host.addChangedCardKeywords(kws, null, false, false, timestamp); if (mana.addsKeywordsUntil()) { final GameCommand untilEOT = new GameCommand() { private static final long serialVersionUID = -8285169579025607693L; diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 685eb2f827b..fc3db4f65d1 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -986,12 +986,13 @@ public class Player extends GameEntity implements Comparable { final KeywordsChange cks = changedKeywords.get(timestamp); ; - changedKeywords.put(timestamp, cks.merge(addKeywords, removeKeywords, cks.isRemoveAllKeywords())); + changedKeywords.put(timestamp, cks.merge(addKeywords, removeKeywords, + cks.isRemoveAllKeywords(), cks.isRemoveIntrinsicKeywords())); updateKeywords(); return; } - changedKeywords.put(timestamp, new KeywordsChange(addKeywords, removeKeywords, false)); + changedKeywords.put(timestamp, new KeywordsChange(addKeywords, removeKeywords, false, false)); updateKeywords(); game.fireEvent(new GameEventPlayerStatsChanged(this)); } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index 2118184f9cb..b03e6538b83 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -106,6 +106,8 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit private boolean blessing = false; private Integer chapter = null; + private boolean basicLandAbility = false; + private SplitSide splitSide = null; enum SplitSide { LEFT, RIGHT }; private int totalManaSpent = 0; @@ -754,6 +756,13 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit return flashBackAbility; } + public void setBasicLandAbility(final boolean basicLandAbility0) { + basicLandAbility = basicLandAbility0; + } + public boolean isBasicLandAbility() { + return basicLandAbility && isIntrinsic(); + } + /** * @return the aftermath */ diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index a1af6d78c2b..ca173f8171b 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -126,7 +126,9 @@ public class StaticAbility extends CardTraitBase implements Comparable addFullAbs = null; boolean removeAllAbilities = false; + boolean removeIntrinsicAbilities = false; boolean removeNonMana = false; boolean removeSuperTypes = false; boolean removeCardTypes = false; boolean removeSubTypes = false; + boolean removeLandTypes = false; boolean removeCreatureTypes = false; boolean removeArtifactTypes = false; + boolean removeEnchantmentTypes = false; List mayLookAt = null; List withFlash = null; @@ -253,6 +256,11 @@ public final class StaticAbilityContinuous { removeNonMana = true; } } + // do this in type layer too in case of blood moon + if ((layer == StaticAbilityLayer.ABILITIES1 || layer == StaticAbilityLayer.TYPE) + && params.containsKey("RemoveIntrinsicAbilities")) { + removeIntrinsicAbilities = true; + } if (layer == StaticAbilityLayer.ABILITIES2 && params.containsKey("AddAbility")) { final String[] sVars = params.get("AddAbility").split(" & "); @@ -310,12 +318,18 @@ public final class StaticAbilityContinuous { removeSubTypes = true; } + if (params.containsKey("RemoveLandTypes")) { + removeLandTypes = true; + } if (params.containsKey("RemoveCreatureTypes")) { removeCreatureTypes = true; } if (params.containsKey("RemoveArtifactTypes")) { removeArtifactTypes = true; } + if (params.containsKey("RemoveEnchantmentTypes")) { + removeEnchantmentTypes = true; + } } if (layer == StaticAbilityLayer.COLOR) { @@ -604,7 +618,7 @@ public final class StaticAbilityContinuous { // add keywords // TODO regular keywords currently don't try to use keyword multiplier // (Although nothing uses it at this time) - if ((addKeywords != null) || (removeKeywords != null) || removeAllAbilities) { + if ((addKeywords != null) || (removeKeywords != null) || removeAllAbilities || removeIntrinsicAbilities) { String[] newKeywords = null; if (addKeywords != null) { newKeywords = Arrays.copyOf(addKeywords, addKeywords.length); @@ -622,7 +636,8 @@ public final class StaticAbilityContinuous { } } - affectedCard.addChangedCardKeywords(newKeywords, removeKeywords, removeAllAbilities, + affectedCard.addChangedCardKeywords(newKeywords, removeKeywords, + removeAllAbilities, removeIntrinsicAbilities, hostCard.getTimestamp()); } @@ -686,7 +701,8 @@ public final class StaticAbilityContinuous { // add Types if ((addTypes != null) || (removeTypes != null)) { affectedCard.addChangedCardTypes(addTypes, removeTypes, removeSuperTypes, removeCardTypes, - removeSubTypes, removeCreatureTypes, removeArtifactTypes, hostCard.getTimestamp()); + removeSubTypes, removeLandTypes, removeCreatureTypes, removeArtifactTypes, + removeEnchantmentTypes, hostCard.getTimestamp()); } // add colors @@ -731,28 +747,41 @@ public final class StaticAbilityContinuous { } // remove triggers - if ((layer == StaticAbilityLayer.ABILITIES2 && (params.containsKey("RemoveTriggers")) || removeAllAbilities)) { + if ((layer == StaticAbilityLayer.ABILITIES2 && (params.containsKey("RemoveTriggers")) + || removeAllAbilities || removeIntrinsicAbilities)) { for (final Trigger trigger : affectedCard.getTriggers()) { - trigger.setTemporarilySuppressed(true); + if (removeAllAbilities || (removeIntrinsicAbilities && trigger.isIntrinsic())) { + trigger.setTemporarilySuppressed(true); + } } } // remove activated and static abilities - if (removeAllAbilities) { + if (removeAllAbilities || removeIntrinsicAbilities) { if (removeNonMana) { // Blood Sun - for (final SpellAbility mana : affectedCard.getNonManaAbilities()) { - mana.setTemporarilySuppressed(true); + for (final SpellAbility mana : affectedCard.getNonManaAbilities()) { + if (removeAllAbilities + || (removeIntrinsicAbilities && mana.isIntrinsic() && !mana.isBasicLandAbility())) { + mana.setTemporarilySuppressed(true); + } } } else { for (final SpellAbility ab : affectedCard.getSpellAbilities()) { - ab.setTemporarilySuppressed(true); + if (removeAllAbilities + || (removeIntrinsicAbilities && ab.isIntrinsic() && !ab.isBasicLandAbility())) { + ab.setTemporarilySuppressed(true); + } } } for (final StaticAbility stA : affectedCard.getStaticAbilities()) { - stA.setTemporarilySuppressed(true); + if (removeAllAbilities || (removeIntrinsicAbilities && stA.isIntrinsic())) { + stA.setTemporarilySuppressed(true); + } } for (final ReplacementEffect rE : affectedCard.getReplacementEffects()) { - rE.setTemporarilySuppressed(true); + if (removeAllAbilities || (removeIntrinsicAbilities && rE.isIntrinsic())) { + rE.setTemporarilySuppressed(true); + } } } From ba29d1cfd956068ce59c1db17fc7a6a7d610e54b Mon Sep 17 00:00:00 2001 From: Hanmac Date: Sat, 26 May 2018 09:36:52 +0200 Subject: [PATCH 6/9] Cards: use new Remove-Types Params and RemoveIntrinsicAbilities --- forge-gui/res/cardsfolder/b/blood_moon.txt | 2 +- forge-gui/res/cardsfolder/c/calming_licid.txt | 2 +- forge-gui/res/cardsfolder/c/celestial_dawn.txt | 2 +- forge-gui/res/cardsfolder/c/contaminated_ground.txt | 2 +- forge-gui/res/cardsfolder/c/conversion.txt | 2 +- forge-gui/res/cardsfolder/c/convincing_mirage.txt | 2 +- forge-gui/res/cardsfolder/c/convulsing_licid.txt | 2 +- forge-gui/res/cardsfolder/c/corrupting_licid.txt | 2 +- forge-gui/res/cardsfolder/c/cyclopean_giant.txt | 2 +- forge-gui/res/cardsfolder/c/cyclopean_tomb.txt | 2 +- forge-gui/res/cardsfolder/d/deepwood_elder.txt | 2 +- forge-gui/res/cardsfolder/d/dominating_licid.txt | 2 +- forge-gui/res/cardsfolder/d/dream_thrush.txt | 2 +- forge-gui/res/cardsfolder/d/dreamwinder.txt | 2 +- forge-gui/res/cardsfolder/e/elsewhere_flask.txt | 2 +- forge-gui/res/cardsfolder/e/enraging_licid.txt | 2 +- forge-gui/res/cardsfolder/e/evil_presence.txt | 2 +- forge-gui/res/cardsfolder/f/floodchaser.txt | 2 +- forge-gui/res/cardsfolder/g/gaeas_liege.txt | 2 +- forge-gui/res/cardsfolder/g/glaciers.txt | 2 +- forge-gui/res/cardsfolder/g/gliding_licid.txt | 2 +- forge-gui/res/cardsfolder/g/graceful_antelope.txt | 4 ++-- forge-gui/res/cardsfolder/g/grixis_illusionist.txt | 2 +- forge-gui/res/cardsfolder/j/jinx.txt | 2 +- forge-gui/res/cardsfolder/k/kavu_recluse.txt | 2 +- forge-gui/res/cardsfolder/l/leeching_licid.txt | 2 +- forge-gui/res/cardsfolder/l/lingering_mirage.txt | 2 +- forge-gui/res/cardsfolder/l/lush_growth.txt | 2 +- forge-gui/res/cardsfolder/m/magus_of_the_moon.txt | 2 +- forge-gui/res/cardsfolder/m/moonbow_illusionist.txt | 2 +- forge-gui/res/cardsfolder/m/mystic_compass.txt | 2 +- forge-gui/res/cardsfolder/n/nurturing_licid.txt | 2 +- forge-gui/res/cardsfolder/o/orcish_farmer.txt | 2 +- forge-gui/res/cardsfolder/p/phantasmal_terrain.txt | 2 +- forge-gui/res/cardsfolder/q/quickening_licid.txt | 2 +- forge-gui/res/cardsfolder/q/quicksilver_fountain.txt | 2 +- forge-gui/res/cardsfolder/r/reef_shaman.txt | 2 +- forge-gui/res/cardsfolder/s/sea_snidd.txt | 2 +- forge-gui/res/cardsfolder/s/seas_claim.txt | 2 +- forge-gui/res/cardsfolder/s/shimmering_mirage.txt | 2 +- forge-gui/res/cardsfolder/s/slimy_kavu.txt | 2 +- forge-gui/res/cardsfolder/s/song_of_the_dryads.txt | 2 +- forge-gui/res/cardsfolder/s/spreading_seas.txt | 2 +- forge-gui/res/cardsfolder/s/stinging_licid.txt | 2 +- forge-gui/res/cardsfolder/s/streambed_aquitects.txt | 2 +- forge-gui/res/cardsfolder/t/tainted_well.txt | 2 +- forge-gui/res/cardsfolder/t/tempting_licid.txt | 2 +- forge-gui/res/cardsfolder/t/terraformer.txt | 2 +- forge-gui/res/cardsfolder/t/thelonite_monk.txt | 2 +- forge-gui/res/cardsfolder/t/tidal_warrior.txt | 2 +- forge-gui/res/cardsfolder/t/tideshaper_mystic.txt | 2 +- forge-gui/res/cardsfolder/t/transmogrifying_licid.txt | 2 +- forge-gui/res/cardsfolder/t/tundra_kavu.txt | 4 ++-- forge-gui/res/cardsfolder/u/unstable_frontier.txt | 2 +- forge-gui/res/cardsfolder/v/vision_charm.txt | 2 +- forge-gui/res/cardsfolder/z/zombie_trailblazer.txt | 4 ++-- 56 files changed, 59 insertions(+), 59 deletions(-) diff --git a/forge-gui/res/cardsfolder/b/blood_moon.txt b/forge-gui/res/cardsfolder/b/blood_moon.txt index 1d1d1f105de..344f6a76c96 100644 --- a/forge-gui/res/cardsfolder/b/blood_moon.txt +++ b/forge-gui/res/cardsfolder/b/blood_moon.txt @@ -1,7 +1,7 @@ Name:Blood Moon ManaCost:2 R Types:Enchantment -S:Mode$ Continuous | Affected$ Land.nonBasic | AddType$ Mountain | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Nonbasic lands are Mountains. +S:Mode$ Continuous | Affected$ Land.nonBasic | AddType$ Mountain | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Nonbasic lands are Mountains. SVar:NonStackingEffect:True SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/blood_moon.jpg diff --git a/forge-gui/res/cardsfolder/c/calming_licid.txt b/forge-gui/res/cardsfolder/c/calming_licid.txt index f888cfb6a99..e6658df15bc 100644 --- a/forge-gui/res/cardsfolder/c/calming_licid.txt +++ b/forge-gui/res/cardsfolder/c/calming_licid.txt @@ -2,7 +2,7 @@ Name:Calming Licid ManaCost:2 W Types:Creature Licid PT:2/2 -A:AB$ Animate | Cost$ W T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ W | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect. +A:AB$ Animate | Cost$ W T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ W | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack. | Description$ Enchanted creature can't attack. diff --git a/forge-gui/res/cardsfolder/c/celestial_dawn.txt b/forge-gui/res/cardsfolder/c/celestial_dawn.txt index aa35ecf8e94..c3521f84c52 100644 --- a/forge-gui/res/cardsfolder/c/celestial_dawn.txt +++ b/forge-gui/res/cardsfolder/c/celestial_dawn.txt @@ -1,7 +1,7 @@ Name:Celestial Dawn ManaCost:1 W W Types:Enchantment -S:Mode$ Continuous | Affected$ Land.YouCtrl | AddType$ Plains | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Lands you control are Plains. +S:Mode$ Continuous | Affected$ Land.YouCtrl | AddType$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Lands you control are Plains. S:Mode$ Continuous | Affected$ Card.YouOwn+nonLand | SetColor$ White | AffectedZone$ Hand,Library,Graveyard,Exile,Command | Description$ Nonland permanents you control are white. The same is true for spells you control and nonland cards you own that aren't on the battlefield. S:Mode$ Continuous | Affected$ Card.YouCtrl+nonLand | SetColor$ White | AffectedZone$ Battlefield,Stack S:Mode$ Continuous | Affected$ You | ManaColorConversion$ Additive | WhiteConversion$ All | Description$ You may spend white mana as though it were mana of any color. diff --git a/forge-gui/res/cardsfolder/c/contaminated_ground.txt b/forge-gui/res/cardsfolder/c/contaminated_ground.txt index 7a3410d5d8d..1d0189ebb8a 100644 --- a/forge-gui/res/cardsfolder/c/contaminated_ground.txt +++ b/forge-gui/res/cardsfolder/c/contaminated_ground.txt @@ -3,7 +3,7 @@ ManaCost:1 B Types:Enchantment Aura K:Enchant land A:SP$ Attach | Cost$ 1 B | ValidTgts$ Land | AILogic$ ChangeType -S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is a Swamp. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is a Swamp. T:Mode$ Taps | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigLose | TriggerDescription$ Whenever enchanted land becomes tapped, its controller loses 2 life. SVar:TrigLose:DB$LoseLife | Defined$ TriggeredCardController | LifeAmount$ 2 SVar:Picture:http://www.wizards.com/global/images/magic/general/contaminated_ground.jpg diff --git a/forge-gui/res/cardsfolder/c/conversion.txt b/forge-gui/res/cardsfolder/c/conversion.txt index ee053732125..1ae932bceaf 100644 --- a/forge-gui/res/cardsfolder/c/conversion.txt +++ b/forge-gui/res/cardsfolder/c/conversion.txt @@ -2,7 +2,7 @@ Name:Conversion ManaCost:2 W W Types:Enchantment K:UpkeepCost:W W -S:Mode$ Continuous | Affected$ Mountain | AddType$ Plains | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ All Mountains are Plains. +S:Mode$ Continuous | Affected$ Mountain | AddType$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ All Mountains are Plains. SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/conversion.jpg Oracle:At the beginning of your upkeep, sacrifice Conversion unless you pay {W}{W}.\nAll Mountains are Plains. diff --git a/forge-gui/res/cardsfolder/c/convincing_mirage.txt b/forge-gui/res/cardsfolder/c/convincing_mirage.txt index 0166192e03d..75f1c3a335e 100644 --- a/forge-gui/res/cardsfolder/c/convincing_mirage.txt +++ b/forge-gui/res/cardsfolder/c/convincing_mirage.txt @@ -5,7 +5,7 @@ K:Enchant land A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType K:ETBReplacement:Other:DBChooseBasic SVar:DBChooseBasic:DB$ ChooseType | Type$ Basic Land | SpellDescription$ As CARDNAME enters the battlefield, choose a basic land type. -S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ ChosenType | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is the chosen type. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is the chosen type. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/convincing_mirage.jpg Oracle:Enchant land\nAs Convincing Mirage enters the battlefield, choose a basic land type.\nEnchanted land is the chosen type. diff --git a/forge-gui/res/cardsfolder/c/convulsing_licid.txt b/forge-gui/res/cardsfolder/c/convulsing_licid.txt index c9a6d8efce4..9506bc828bc 100644 --- a/forge-gui/res/cardsfolder/c/convulsing_licid.txt +++ b/forge-gui/res/cardsfolder/c/convulsing_licid.txt @@ -2,7 +2,7 @@ Name:Convulsing Licid ManaCost:2 R Types:Creature Licid PT:2/2 -A:AB$ Animate | Cost$ R T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ R | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect. +A:AB$ Animate | Cost$ R T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ R | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't block. | Description$ Enchanted creature can't block. diff --git a/forge-gui/res/cardsfolder/c/corrupting_licid.txt b/forge-gui/res/cardsfolder/c/corrupting_licid.txt index 6b51baaa81d..0d9576a8e7a 100644 --- a/forge-gui/res/cardsfolder/c/corrupting_licid.txt +++ b/forge-gui/res/cardsfolder/c/corrupting_licid.txt @@ -2,7 +2,7 @@ Name:Corrupting Licid ManaCost:2 B Types:Creature Licid PT:2/2 -A:AB$ Animate | Cost$ B T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ B | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect. +A:AB$ Animate | Cost$ B T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ B | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Fear | Description$ Enchanted creature has fear. (It can't be blocked except by artifact creatures and/or black creatures.) diff --git a/forge-gui/res/cardsfolder/c/cyclopean_giant.txt b/forge-gui/res/cardsfolder/c/cyclopean_giant.txt index 8178d983108..493e1872703 100644 --- a/forge-gui/res/cardsfolder/c/cyclopean_giant.txt +++ b/forge-gui/res/cardsfolder/c/cyclopean_giant.txt @@ -3,7 +3,7 @@ ManaCost:2 B B Types:Creature Zombie Giant PT:4/2 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigAnimate | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, target land becomes a Swamp. Exile CARDNAME. -SVar:TrigAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | Permanent$ True | SubAbility$ DBExile | SpellDescription$ Target land becomes a Swamp. +SVar:TrigAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Permanent$ True | SubAbility$ DBExile | SpellDescription$ Target land becomes a Swamp. SVar:DBExile:DB$ ChangeZone | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Exile SVar:Picture:http://www.wizards.com/global/images/magic/general/cyclopean_giant.jpg Oracle:When Cyclopean Giant dies, target land becomes a Swamp. Exile Cyclopean Giant. diff --git a/forge-gui/res/cardsfolder/c/cyclopean_tomb.txt b/forge-gui/res/cardsfolder/c/cyclopean_tomb.txt index 34706e45442..ceed206a8b2 100644 --- a/forge-gui/res/cardsfolder/c/cyclopean_tomb.txt +++ b/forge-gui/res/cardsfolder/c/cyclopean_tomb.txt @@ -3,7 +3,7 @@ ManaCost:4 Types:Artifact A:AB$ PutCounter | Cost$ 2 T | ValidTgts$ Land.nonSwamp | TgtPrompt$ Select target non-Swamp land | RememberTargets$ True | CounterType$ MIRE | CounterNum$ 1 | ActivationPhases$ Upkeep | SubAbility$ DBAnimate | SpellDescription$ Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate this ability only during your upkeep. SVar:DBAnimate:DB$ Animate | Defined$ ParentTarget | staticAbilities$ AnimateSwamp | Permanent$ True -SVar:AnimateSwamp:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_MIRE | AddType$ Swamp | RemoveSubTypes$ True | RemoveAllAbilities$ True +SVar:AnimateSwamp:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_MIRE | AddType$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with CARDNAME but that a mire counter has not been removed from with CARDNAME. SVar:TrigEffect:DB$ Effect | ImprintCards$ Remembered | Triggers$ UpkeepRemove,TrigForget | SVars$ PumpForget,TrigRemove,DBRemoveCounter,DBForget | Duration$ Permanent SVar:UpkeepRemove:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigRemove | TriggerZones$ Command | TriggerDescription$ At the beginning of your upkeep, remove all mire counters from a land that a mire counter was put onto with Cyclopean Tomb but that a mire counter has not been removed from with Cyclopean Tomb. diff --git a/forge-gui/res/cardsfolder/d/deepwood_elder.txt b/forge-gui/res/cardsfolder/d/deepwood_elder.txt index b1e7562b464..cca7bb4a639 100644 --- a/forge-gui/res/cardsfolder/d/deepwood_elder.txt +++ b/forge-gui/res/cardsfolder/d/deepwood_elder.txt @@ -2,7 +2,7 @@ Name:Deepwood Elder ManaCost:G G Types:Creature Dryad Spellshaper PT:2/2 -A:AB$ Animate | Cost$ X G G T Discard<1/Card> | TargetMin$ 0 | TargetMax$ Maxtgt | ValidTgts$ Land | TgtPrompt$ Select target land to become forest | Types$ Forest | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | References$ MaxTgt | SpellDescription$ X target lands become Forests until end of turn. +A:AB$ Animate | Cost$ X G G T Discard<1/Card> | TargetMin$ 0 | TargetMax$ Maxtgt | ValidTgts$ Land | TgtPrompt$ Select target land to become forest | Types$ Forest | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | References$ MaxTgt | SpellDescription$ X target lands become Forests until end of turn. SVar:X:TargetedObjects$Amount SVar:RemAIDeck:True SVar:Maxtgt:Count$Valid Land diff --git a/forge-gui/res/cardsfolder/d/dominating_licid.txt b/forge-gui/res/cardsfolder/d/dominating_licid.txt index 0461ab43f48..93fe235b55e 100644 --- a/forge-gui/res/cardsfolder/d/dominating_licid.txt +++ b/forge-gui/res/cardsfolder/d/dominating_licid.txt @@ -2,7 +2,7 @@ Name:Dominating Licid ManaCost:1 U U Types:Creature Licid PT:1/1 -A:AB$ Animate | Cost$ 1 U U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect. +A:AB$ Animate | Cost$ 1 U U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ GainControl SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted creature. diff --git a/forge-gui/res/cardsfolder/d/dream_thrush.txt b/forge-gui/res/cardsfolder/d/dream_thrush.txt index f353a2cbc1e..6fee1bba41e 100644 --- a/forge-gui/res/cardsfolder/d/dream_thrush.txt +++ b/forge-gui/res/cardsfolder/d/dream_thrush.txt @@ -4,7 +4,7 @@ Types:Creature Bird PT:1/1 K:Flying A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/dream_thrush.jpg Oracle:Flying\n{T}: Target land becomes the basic land type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/d/dreamwinder.txt b/forge-gui/res/cardsfolder/d/dreamwinder.txt index 7a8b2775738..0ac176bd8dd 100644 --- a/forge-gui/res/cardsfolder/d/dreamwinder.txt +++ b/forge-gui/res/cardsfolder/d/dreamwinder.txt @@ -3,7 +3,7 @@ ManaCost:3 U Types:Creature Serpent PT:4/3 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. -A:AB$ Animate | Cost$ U Sac<1/Island> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. +A:AB$ Animate | Cost$ U Sac<1/Island> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/dreamwinder.jpg Oracle:Dreamwinder can't attack unless defending player controls an Island.\n{U}, Sacrifice an Island: Target land becomes an Island until end of turn. diff --git a/forge-gui/res/cardsfolder/e/elsewhere_flask.txt b/forge-gui/res/cardsfolder/e/elsewhere_flask.txt index 077870edba3..ba3abf04173 100644 --- a/forge-gui/res/cardsfolder/e/elsewhere_flask.txt +++ b/forge-gui/res/cardsfolder/e/elsewhere_flask.txt @@ -4,7 +4,7 @@ Types:Artifact T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. SVar:TrigDraw:DB$ Draw | NumCards$ 1 A:AB$ ChooseType | Cost$ Sac<1/CARDNAME> | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Choose a basic land type. Each land you control becomes that type until end of turn. -SVar:DBAnimate:DB$ AnimateAll | ValidCards$ Land.YouCtrl | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ AnimateAll | ValidCards$ Land.YouCtrl | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/elsewhere_flask.jpg Oracle:When Elsewhere Flask enters the battlefield, draw a card.\nSacrifice Elsewhere Flask: Choose a basic land type. Each land you control becomes that type until end of turn. diff --git a/forge-gui/res/cardsfolder/e/enraging_licid.txt b/forge-gui/res/cardsfolder/e/enraging_licid.txt index 08b98acca0c..e4fc0844bdb 100644 --- a/forge-gui/res/cardsfolder/e/enraging_licid.txt +++ b/forge-gui/res/cardsfolder/e/enraging_licid.txt @@ -2,7 +2,7 @@ Name:Enraging Licid ManaCost:1 R Types:Creature Licid PT:1/1 -A:AB$ Animate | Cost$ R T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ R | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect. +A:AB$ Animate | Cost$ R T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ R | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Haste | Description$ Enchanted creature has haste. diff --git a/forge-gui/res/cardsfolder/e/evil_presence.txt b/forge-gui/res/cardsfolder/e/evil_presence.txt index 4a0eca48f1b..bee19fd7e06 100644 --- a/forge-gui/res/cardsfolder/e/evil_presence.txt +++ b/forge-gui/res/cardsfolder/e/evil_presence.txt @@ -3,6 +3,6 @@ ManaCost:B Types:Enchantment Aura K:Enchant land A:SP$ Attach | Cost$ B | ValidTgts$ Land | AILogic$ ChangeType -S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is a Swamp. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is a Swamp. SVar:Picture:http://www.wizards.com/global/images/magic/general/evil_presence.jpg Oracle:Enchant land\nEnchanted land is a Swamp. diff --git a/forge-gui/res/cardsfolder/f/floodchaser.txt b/forge-gui/res/cardsfolder/f/floodchaser.txt index de870553253..6cc1acb2d79 100644 --- a/forge-gui/res/cardsfolder/f/floodchaser.txt +++ b/forge-gui/res/cardsfolder/f/floodchaser.txt @@ -4,7 +4,7 @@ Types:Creature Elemental PT:0/0 K:etbCounter:P1P1:6 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. -A:AB$ Animate | Cost$ U SubCounter<1/P1P1> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. +A:AB$ Animate | Cost$ U SubCounter<1/P1P1> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/floodchaser.jpg Oracle:Floodchaser enters the battlefield with six +1/+1 counters on it.\nFloodchaser can't attack unless defending player controls an Island.\n{U}, Remove a +1/+1 counter from Floodchaser: Target land becomes an Island until end of turn. diff --git a/forge-gui/res/cardsfolder/g/gaeas_liege.txt b/forge-gui/res/cardsfolder/g/gaeas_liege.txt index 0ca101ad738..815683424fb 100644 --- a/forge-gui/res/cardsfolder/g/gaeas_liege.txt +++ b/forge-gui/res/cardsfolder/g/gaeas_liege.txt @@ -8,7 +8,7 @@ SVar:X:Count$Valid Forest.YouCtrl S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ Y | SetToughness$ Y | CheckSVar$ B | SVarCompare$ EQ1 SVar:B:Count$Valid Card.Self+attacking SVar:Y:Count$Valid Forest.DefenderCtrl -A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | UntilHostLeavesPlay$ True | SpellDescription$ Target land becomes a Forest until CARDNAME leaves the battlefield. +A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | UntilHostLeavesPlay$ True | SpellDescription$ Target land becomes a Forest until CARDNAME leaves the battlefield. SVar:BuffedBy:Forest SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/gaeas_liege.jpg diff --git a/forge-gui/res/cardsfolder/g/glaciers.txt b/forge-gui/res/cardsfolder/g/glaciers.txt index 28f27f8febb..bf97c3aa521 100644 --- a/forge-gui/res/cardsfolder/g/glaciers.txt +++ b/forge-gui/res/cardsfolder/g/glaciers.txt @@ -2,7 +2,7 @@ Name:Glaciers ManaCost:2 W U Types:Enchantment K:UpkeepCost:W U -S:Mode$ Continuous | Affected$ Mountain | AddType$ Plains | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ All Mountains are Plains. +S:Mode$ Continuous | Affected$ Mountain | AddType$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ All Mountains are Plains. SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/glaciers.jpg Oracle:At the beginning of your upkeep, sacrifice Glaciers unless you pay {W}{U}.\nAll Mountains are Plains. diff --git a/forge-gui/res/cardsfolder/g/gliding_licid.txt b/forge-gui/res/cardsfolder/g/gliding_licid.txt index ede3b90e56a..f9c69bb38e7 100644 --- a/forge-gui/res/cardsfolder/g/gliding_licid.txt +++ b/forge-gui/res/cardsfolder/g/gliding_licid.txt @@ -2,7 +2,7 @@ Name:Gliding Licid ManaCost:2 U Types:Creature Licid PT:2/2 -A:AB$ Animate | Cost$ U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect. +A:AB$ Animate | Cost$ U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Flying | Description$ Enchanted creature has flying. diff --git a/forge-gui/res/cardsfolder/g/graceful_antelope.txt b/forge-gui/res/cardsfolder/g/graceful_antelope.txt index 0cf22cf4210..4b9a1f08b3e 100644 --- a/forge-gui/res/cardsfolder/g/graceful_antelope.txt +++ b/forge-gui/res/cardsfolder/g/graceful_antelope.txt @@ -4,7 +4,7 @@ Types:Creature Antelope PT:1/4 K:Plainswalk T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigAnimate | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may have target land become a Plains until CARDNAME leaves the battlefield. -SVar:TrigAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | UntilHostLeavesPlay$ True | Types$ Plains | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:TrigAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | UntilHostLeavesPlay$ True | Types$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/graceful_antelope.jpg -Oracle:Plainswalk\nWhenever Graceful Antelope deals combat damage to a player, you may have target land become a Plains until Graceful Antelope leaves the battlefield. +Oracle:Plainswalk (This creature can't be blocked as long as defending player controls a Plains.)\nWhenever Graceful Antelope deals combat damage to a player, you may have target land become a Plains until Graceful Antelope leaves the battlefield. diff --git a/forge-gui/res/cardsfolder/g/grixis_illusionist.txt b/forge-gui/res/cardsfolder/g/grixis_illusionist.txt index 0fcf222de67..b6399b25d01 100644 --- a/forge-gui/res/cardsfolder/g/grixis_illusionist.txt +++ b/forge-gui/res/cardsfolder/g/grixis_illusionist.txt @@ -3,7 +3,7 @@ ManaCost:U Types:Creature Human Wizard PT:1/1 A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land you control becomes the basic land type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/grixis_illusionist.jpg Oracle:{T}: Target land you control becomes the basic land type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/j/jinx.txt b/forge-gui/res/cardsfolder/j/jinx.txt index f8f8790b812..3d467dd07f1 100644 --- a/forge-gui/res/cardsfolder/j/jinx.txt +++ b/forge-gui/res/cardsfolder/j/jinx.txt @@ -2,7 +2,7 @@ Name:Jinx ManaCost:1 U Types:Instant A:SP$ ChooseType | Cost$ 1 U | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. Draw a card at the beginning of the next turn's upkeep. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SubAbility$ DelTrigSlowtrip +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SubAbility$ DelTrigSlowtrip SVar:DelTrigSlowtrip:DB$ DelayedTrigger | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ DrawSlowtrip | TriggerDescription$ Draw a card. SVar:DrawSlowtrip:DB$Draw | NumCards$ 1 | Defined$ You SVar:RemAIDeck:True diff --git a/forge-gui/res/cardsfolder/k/kavu_recluse.txt b/forge-gui/res/cardsfolder/k/kavu_recluse.txt index 27ce81172c4..b5b208fc5bf 100644 --- a/forge-gui/res/cardsfolder/k/kavu_recluse.txt +++ b/forge-gui/res/cardsfolder/k/kavu_recluse.txt @@ -2,7 +2,7 @@ Name:Kavu Recluse ManaCost:2 R Types:Creature Kavu PT:2/2 -A:AB$Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes a Forest until end of turn. +A:AB$Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes a Forest until end of turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/kavu_recluse.jpg Oracle:{T}: Target land becomes a Forest until end of turn. diff --git a/forge-gui/res/cardsfolder/l/leeching_licid.txt b/forge-gui/res/cardsfolder/l/leeching_licid.txt index 44e5e996086..b78d2424640 100644 --- a/forge-gui/res/cardsfolder/l/leeching_licid.txt +++ b/forge-gui/res/cardsfolder/l/leeching_licid.txt @@ -2,7 +2,7 @@ Name:Leeching Licid ManaCost:1 B Types:Creature Licid PT:1/1 -A:AB$ Animate | Cost$ B T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ B | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect. +A:AB$ Animate | Cost$ B T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ B | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ EnchantedController | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of the upkeep of enchanted creature's controller, CARDNAME deals 1 damage to that player. diff --git a/forge-gui/res/cardsfolder/l/lingering_mirage.txt b/forge-gui/res/cardsfolder/l/lingering_mirage.txt index 5cd26cb77eb..a517fb4e6dc 100644 --- a/forge-gui/res/cardsfolder/l/lingering_mirage.txt +++ b/forge-gui/res/cardsfolder/l/lingering_mirage.txt @@ -3,7 +3,7 @@ ManaCost:1 U Types:Enchantment Aura K:Enchant land A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType -S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is an Island. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is an Island. K:Cycling:2 SVar:Picture:http://www.wizards.com/global/images/magic/general/lingering_mirage.jpg Oracle:Enchant land\nEnchanted land is an Island.\nCycling {2} ({2}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/l/lush_growth.txt b/forge-gui/res/cardsfolder/l/lush_growth.txt index 476cb74064b..e01915fc5b6 100644 --- a/forge-gui/res/cardsfolder/l/lush_growth.txt +++ b/forge-gui/res/cardsfolder/l/lush_growth.txt @@ -3,7 +3,7 @@ ManaCost:G Types:Enchantment Aura K:Enchant land A:SP$ Attach | Cost$ G | ValidTgts$ Land | AILogic$ Pump -S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Mountain & Forest & Plains | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is a Mountain, Forest, and Plains. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Mountain & Forest & Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is a Mountain, Forest, and Plains. SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/lush_growth.jpg Oracle:Enchant land\nEnchanted land is a Mountain, Forest, and Plains. diff --git a/forge-gui/res/cardsfolder/m/magus_of_the_moon.txt b/forge-gui/res/cardsfolder/m/magus_of_the_moon.txt index afab5134ef3..1d0221c6984 100644 --- a/forge-gui/res/cardsfolder/m/magus_of_the_moon.txt +++ b/forge-gui/res/cardsfolder/m/magus_of_the_moon.txt @@ -2,7 +2,7 @@ Name:Magus of the Moon ManaCost:2 R Types:Creature Human Wizard PT:2/2 -S:Mode$ Continuous | Affected$ Land.nonBasic | AddType$ Mountain | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Nonbasic lands are Mountains. +S:Mode$ Continuous | Affected$ Land.nonBasic | AddType$ Mountain | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Nonbasic lands are Mountains. SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/magus_of_the_moon.jpg Oracle:Nonbasic lands are Mountains. diff --git a/forge-gui/res/cardsfolder/m/moonbow_illusionist.txt b/forge-gui/res/cardsfolder/m/moonbow_illusionist.txt index 487a837d64d..aa870e5b3ba 100644 --- a/forge-gui/res/cardsfolder/m/moonbow_illusionist.txt +++ b/forge-gui/res/cardsfolder/m/moonbow_illusionist.txt @@ -4,7 +4,7 @@ Types:Creature Moonfolk Wizard PT:2/1 K:Flying A:AB$ ChooseType | Cost$ 2 Return<1/Land> | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/moonbow_illusionist.jpg Oracle:Flying\n{2}, Return a land you control to its owner's hand: Target land becomes the basic land type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/m/mystic_compass.txt b/forge-gui/res/cardsfolder/m/mystic_compass.txt index a673b9c63e3..227f5c8f874 100644 --- a/forge-gui/res/cardsfolder/m/mystic_compass.txt +++ b/forge-gui/res/cardsfolder/m/mystic_compass.txt @@ -2,7 +2,7 @@ Name:Mystic Compass ManaCost:2 Types:Artifact A:AB$ ChooseType | Cost$ 1 T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mystic_compass.jpg Oracle:{1}, {T}: Target land becomes the basic land type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/n/nurturing_licid.txt b/forge-gui/res/cardsfolder/n/nurturing_licid.txt index 04715862ed1..4aa4b948ef7 100644 --- a/forge-gui/res/cardsfolder/n/nurturing_licid.txt +++ b/forge-gui/res/cardsfolder/n/nurturing_licid.txt @@ -2,7 +2,7 @@ Name:Nurturing Licid ManaCost:1 G Types:Creature Licid PT:1/1 -A:AB$ Animate | Cost$ G T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ G | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {G} to end this effect. +A:AB$ Animate | Cost$ G T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ G | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {G} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature A:AB$ Regenerate | Cost$ G | Defined$ Enchanted | SpellDescription$ Regenerate enchanted creature. diff --git a/forge-gui/res/cardsfolder/o/orcish_farmer.txt b/forge-gui/res/cardsfolder/o/orcish_farmer.txt index 5f6e59532b8..87254748702 100644 --- a/forge-gui/res/cardsfolder/o/orcish_farmer.txt +++ b/forge-gui/res/cardsfolder/o/orcish_farmer.txt @@ -2,7 +2,7 @@ Name:Orcish Farmer ManaCost:1 R R Types:Creature Orc PT:2/2 -A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | UntilControllerNextUntap$ True | SpellDescription$ Target land becomes a Swamp until its controller's next untap step. +A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | UntilControllerNextUntap$ True | SpellDescription$ Target land becomes a Swamp until its controller's next untap step. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/orcish_farmer.jpg Oracle:{T}: Target land becomes a Swamp until its controller's next untap step. diff --git a/forge-gui/res/cardsfolder/p/phantasmal_terrain.txt b/forge-gui/res/cardsfolder/p/phantasmal_terrain.txt index 06081b05e6a..5aea46a0d21 100644 --- a/forge-gui/res/cardsfolder/p/phantasmal_terrain.txt +++ b/forge-gui/res/cardsfolder/p/phantasmal_terrain.txt @@ -5,7 +5,7 @@ K:Enchant land A:SP$ Attach | Cost$ U U | ValidTgts$ Land | AILogic$ ChangeType K:ETBReplacement:Other:DBChooseBasic SVar:DBChooseBasic:DB$ ChooseType | Type$ Basic Land | SpellDescription$ As CARDNAME enters the battlefield, choose a basic land type. -S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ ChosenType | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is the chosen type. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is the chosen type. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/phantasmal_terrain.jpg Oracle:Enchant land\nAs Phantasmal Terrain enters the battlefield, choose a basic land type.\nEnchanted land is the chosen type. diff --git a/forge-gui/res/cardsfolder/q/quickening_licid.txt b/forge-gui/res/cardsfolder/q/quickening_licid.txt index d0aadc4dede..8f63209701c 100644 --- a/forge-gui/res/cardsfolder/q/quickening_licid.txt +++ b/forge-gui/res/cardsfolder/q/quickening_licid.txt @@ -2,7 +2,7 @@ Name:Quickening Licid ManaCost:1 W Types:Creature Licid PT:1/1 -A:AB$ Animate | Cost$ W T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ W | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect. +A:AB$ Animate | Cost$ W T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ W | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ First Strike | Description$ Enchanted creature has first strike. diff --git a/forge-gui/res/cardsfolder/q/quicksilver_fountain.txt b/forge-gui/res/cardsfolder/q/quicksilver_fountain.txt index 47337221cfb..fa55c5d3dac 100644 --- a/forge-gui/res/cardsfolder/q/quicksilver_fountain.txt +++ b/forge-gui/res/cardsfolder/q/quicksilver_fountain.txt @@ -4,7 +4,7 @@ Types:Artifact T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player puts a flood counter on target non-Island land they control of their choice. That land is an Island for as long as it has a flood counter on it. SVar:TrigPutCounter:DB$ PutCounter | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Land.nonIsland+ActivePlayerCtrl | TgtPrompt$ Select target non-Island land you control | CounterType$ FLOOD | CounterNum$ 1 | SubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | Defined$ Targeted | staticAbilities$ STFlood | Permanent$ True -SVar:STFlood:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_FLOOD | AddType$ Island | RemoveSubTypes$ True | RemoveAllAbilities$ True +SVar:STFlood:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_FLOOD | AddType$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True T:Mode$ Phase | Phase$ End of Turn | CheckSVar$ X | SVarCompare$ EQ0 | TriggerZones$ Battlefield | Execute$ TrigRemoveAll | References$ X | TriggerDescription$ At the beginning of each end step, if all lands on the battlefield are Islands, remove all flood counters from them. SVar:TrigRemoveAll:DB$ RemoveCounterAll | ValidCards$ Land | CounterType$ FLOOD | AllCounters$ True SVar:X:Count$Valid Land.nonIsland diff --git a/forge-gui/res/cardsfolder/r/reef_shaman.txt b/forge-gui/res/cardsfolder/r/reef_shaman.txt index fa73261629c..f47c69b6356 100644 --- a/forge-gui/res/cardsfolder/r/reef_shaman.txt +++ b/forge-gui/res/cardsfolder/r/reef_shaman.txt @@ -3,7 +3,7 @@ ManaCost:U Types:Creature Merfolk Shaman PT:0/2 A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/reef_shaman.jpg Oracle:{T}: Target land becomes the basic land type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/s/sea_snidd.txt b/forge-gui/res/cardsfolder/s/sea_snidd.txt index c096ae729f4..91a7402a6f0 100644 --- a/forge-gui/res/cardsfolder/s/sea_snidd.txt +++ b/forge-gui/res/cardsfolder/s/sea_snidd.txt @@ -3,7 +3,7 @@ ManaCost:4 U Types:Creature Beast PT:3/3 A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/sea_snidd.jpg Oracle:{T}: Target land becomes the basic land type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/s/seas_claim.txt b/forge-gui/res/cardsfolder/s/seas_claim.txt index 602272edfce..961ef91e3f6 100644 --- a/forge-gui/res/cardsfolder/s/seas_claim.txt +++ b/forge-gui/res/cardsfolder/s/seas_claim.txt @@ -3,6 +3,6 @@ ManaCost:U Types:Enchantment Aura K:Enchant land A:SP$ Attach | Cost$ U | ValidTgts$ Land | AILogic$ ChangeType -S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is an Island. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is an Island. SVar:Picture:http://www.wizards.com/global/images/magic/general/seas_claim.jpg Oracle:Enchant land (Target a land as you cast this. This card enters the battlefield attached to that land.)\nEnchanted land is an Island. diff --git a/forge-gui/res/cardsfolder/s/shimmering_mirage.txt b/forge-gui/res/cardsfolder/s/shimmering_mirage.txt index d0af42f12d6..63781c37fb8 100644 --- a/forge-gui/res/cardsfolder/s/shimmering_mirage.txt +++ b/forge-gui/res/cardsfolder/s/shimmering_mirage.txt @@ -2,7 +2,7 @@ Name:Shimmering Mirage ManaCost:1 U Types:Instant A:SP$ ChooseType | Cost$ 1 U | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. Draw a card. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SubAbility$ DBDraw +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/shimmering_mirage.jpg diff --git a/forge-gui/res/cardsfolder/s/slimy_kavu.txt b/forge-gui/res/cardsfolder/s/slimy_kavu.txt index fe92c7a6dae..4397233ed1c 100644 --- a/forge-gui/res/cardsfolder/s/slimy_kavu.txt +++ b/forge-gui/res/cardsfolder/s/slimy_kavu.txt @@ -2,7 +2,7 @@ Name:Slimy Kavu ManaCost:2 R Types:Creature Kavu PT:2/2 -A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes a Swamp until end of turn. +A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes a Swamp until end of turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/slimy_kavu.jpg Oracle:{T}: Target land becomes a Swamp until end of turn. diff --git a/forge-gui/res/cardsfolder/s/song_of_the_dryads.txt b/forge-gui/res/cardsfolder/s/song_of_the_dryads.txt index cf99c0cf27d..67715fd7f70 100644 --- a/forge-gui/res/cardsfolder/s/song_of_the_dryads.txt +++ b/forge-gui/res/cardsfolder/s/song_of_the_dryads.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Enchantment Aura K:Enchant permanent A:SP$ Attach | Cost$ 2 G | ValidTgts$ Permanent | AILogic$ Curse | AITgts$ Card.cmcGE3 -S:Mode$ Continuous | Affected$ Card.EnchantedBy | SetColor$ Colorless | AddType$ Land & Forest | RemoveCardTypes$ True | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted permanent is a colorless Forest land. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | SetColor$ Colorless | AddType$ Land & Forest | RemoveCardTypes$ True | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted permanent is a colorless Forest land. SVar:NonStackingAttachEffect:True SVar:Picture:http://www.wizards.com/global/images/magic/general/song_of_the_dryads.jpg Oracle:Enchant permanent\nEnchanted permanent is a colorless Forest land. diff --git a/forge-gui/res/cardsfolder/s/spreading_seas.txt b/forge-gui/res/cardsfolder/s/spreading_seas.txt index b786c28f9a3..b7d7d105205 100644 --- a/forge-gui/res/cardsfolder/s/spreading_seas.txt +++ b/forge-gui/res/cardsfolder/s/spreading_seas.txt @@ -3,7 +3,7 @@ ManaCost:1 U Types:Enchantment Aura K:Enchant land A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType -S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is an Island. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is an Island. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1 SVar:Picture:http://www.wizards.com/global/images/magic/general/spreading_seas.jpg diff --git a/forge-gui/res/cardsfolder/s/stinging_licid.txt b/forge-gui/res/cardsfolder/s/stinging_licid.txt index d6f23abb229..0731f7ea8b2 100644 --- a/forge-gui/res/cardsfolder/s/stinging_licid.txt +++ b/forge-gui/res/cardsfolder/s/stinging_licid.txt @@ -2,7 +2,7 @@ Name:Stinging Licid ManaCost:1 U Types:Creature Licid PT:1/1 -A:AB$ Animate | Cost$ 1 U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect. +A:AB$ Animate | Cost$ 1 U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature T:Mode$ Taps | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever enchanted creature becomes tapped, CARDNAME deals 2 damage to that creature's controller. diff --git a/forge-gui/res/cardsfolder/s/streambed_aquitects.txt b/forge-gui/res/cardsfolder/s/streambed_aquitects.txt index a0ee818f92b..ad6515c4fa5 100644 --- a/forge-gui/res/cardsfolder/s/streambed_aquitects.txt +++ b/forge-gui/res/cardsfolder/s/streambed_aquitects.txt @@ -3,6 +3,6 @@ ManaCost:1 U U Types:Creature Merfolk Scout PT:2/3 A:AB$ Pump | Cost$ T | ValidTgts$ Merfolk | TgtPrompt$ Select target Merfolk creature | NumAtt$ +1 | NumDef$ +1 | KW$ Islandwalk | SpellDescription$ Target Merfolk creature gets +1/+1 and gains islandwalk until end of turn. -A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. +A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. SVar:Picture:http://www.wizards.com/global/images/magic/general/streambed_aquitects.jpg Oracle:{T}: Target Merfolk creature gets +1/+1 and gains islandwalk until end of turn. (It can't be blocked as long as defending player controls an Island.)\n{T}: Target land becomes an Island until end of turn. diff --git a/forge-gui/res/cardsfolder/t/tainted_well.txt b/forge-gui/res/cardsfolder/t/tainted_well.txt index 0f3278fa234..a7d6b83352f 100644 --- a/forge-gui/res/cardsfolder/t/tainted_well.txt +++ b/forge-gui/res/cardsfolder/t/tainted_well.txt @@ -3,7 +3,7 @@ ManaCost:2 B Types:Enchantment Aura K:Enchant land A:SP$ Attach | Cost$ 2 B | ValidTgts$ Land | AILogic$ ChangeType -S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is a Swamp. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is a Swamp. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1 SVar:Picture:http://www.wizards.com/global/images/magic/general/tainted_well.jpg diff --git a/forge-gui/res/cardsfolder/t/tempting_licid.txt b/forge-gui/res/cardsfolder/t/tempting_licid.txt index 4791c1189d1..c989133f14f 100644 --- a/forge-gui/res/cardsfolder/t/tempting_licid.txt +++ b/forge-gui/res/cardsfolder/t/tempting_licid.txt @@ -2,7 +2,7 @@ Name:Tempting Licid ManaCost:2 G Types:Creature Licid PT:2/2 -A:AB$ Animate | Cost$ G T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ G | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {G} to end this effect. +A:AB$ Animate | Cost$ G T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ G | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {G} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ All creatures able to block CARDNAME do so. | Description$ All creatures able to block enchanted creature do so. diff --git a/forge-gui/res/cardsfolder/t/terraformer.txt b/forge-gui/res/cardsfolder/t/terraformer.txt index af5a9886ad9..486a1a9225d 100644 --- a/forge-gui/res/cardsfolder/t/terraformer.txt +++ b/forge-gui/res/cardsfolder/t/terraformer.txt @@ -3,7 +3,7 @@ ManaCost:2 U Types:Creature Human Wizard PT:2/2 A:AB$ ChooseType | Cost$ 1 | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Choose a basic land type. Each land you control becomes that type until end of turn. -SVar:DBAnimate:DB$ AnimateAll | ValidCards$ Land.YouCtrl | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ AnimateAll | ValidCards$ Land.YouCtrl | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/terraformer.jpg Oracle:{1}: Choose a basic land type. Each land you control becomes that type until end of turn. diff --git a/forge-gui/res/cardsfolder/t/thelonite_monk.txt b/forge-gui/res/cardsfolder/t/thelonite_monk.txt index c17d9afed8c..11a2e316de5 100644 --- a/forge-gui/res/cardsfolder/t/thelonite_monk.txt +++ b/forge-gui/res/cardsfolder/t/thelonite_monk.txt @@ -2,7 +2,7 @@ Name:Thelonite Monk ManaCost:2 G G Types:Creature Insect Monk Cleric PT:1/2 -A:AB$ Animate | Cost$ T Sac<1/Creature.Green/green creature> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | Permanent$ True | SpellDescription$ Target land becomes a Forest. (This effect lasts indefinitely.) +A:AB$ Animate | Cost$ T Sac<1/Creature.Green/green creature> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Permanent$ True | SpellDescription$ Target land becomes a Forest. (This effect lasts indefinitely.) SVar:AIPreference:SacCost$Creature.Green+token SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/thelonite_monk.jpg diff --git a/forge-gui/res/cardsfolder/t/tidal_warrior.txt b/forge-gui/res/cardsfolder/t/tidal_warrior.txt index 5facec674cb..319fc99a204 100644 --- a/forge-gui/res/cardsfolder/t/tidal_warrior.txt +++ b/forge-gui/res/cardsfolder/t/tidal_warrior.txt @@ -2,7 +2,7 @@ Name:Tidal Warrior ManaCost:U Types:Creature Merfolk Warrior PT:1/1 -A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. +A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/tidal_warrior.jpg Oracle:{T}: Target land becomes an Island until end of turn. diff --git a/forge-gui/res/cardsfolder/t/tideshaper_mystic.txt b/forge-gui/res/cardsfolder/t/tideshaper_mystic.txt index 8e50fab4939..0329908b82d 100644 --- a/forge-gui/res/cardsfolder/t/tideshaper_mystic.txt +++ b/forge-gui/res/cardsfolder/t/tideshaper_mystic.txt @@ -3,7 +3,7 @@ ManaCost:U Types:Creature Merfolk Wizard PT:1/1 A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | PlayerTurn$ True | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. Activate this ability only during your turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/tideshaper_mystic.jpg Oracle:{T}: Target land becomes the basic land type of your choice until end of turn. Activate this ability only during your turn. diff --git a/forge-gui/res/cardsfolder/t/transmogrifying_licid.txt b/forge-gui/res/cardsfolder/t/transmogrifying_licid.txt index 1cacae55404..881847c36f7 100644 --- a/forge-gui/res/cardsfolder/t/transmogrifying_licid.txt +++ b/forge-gui/res/cardsfolder/t/transmogrifying_licid.txt @@ -2,7 +2,7 @@ Name:Transmogrifying Licid ManaCost:3 Types:Artifact Creature Licid PT:2/2 -A:AB$ Animate | Cost$ 1 T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | Permanent$ True | RevertCost$ 1 | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {1} to end this effect. +A:AB$ Animate | Cost$ 1 T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | Permanent$ True | RevertCost$ 1 | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {1} to end this effect. SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddType$ Artifact | Description$ Enchanted creature gets +1/+1 and is an artifact in addition to its other types. diff --git a/forge-gui/res/cardsfolder/t/tundra_kavu.txt b/forge-gui/res/cardsfolder/t/tundra_kavu.txt index 2ca8fabc976..355c92c1a6b 100644 --- a/forge-gui/res/cardsfolder/t/tundra_kavu.txt +++ b/forge-gui/res/cardsfolder/t/tundra_kavu.txt @@ -4,8 +4,8 @@ Types:Creature Kavu PT:2/2 A:AB$ Pump | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ TypeChoice | StackDescription$ Target land becomes a | SpellDescription$ Target land becomes a Plains or an Island until end of turn. SVar:TypeChoice:DB$ GenericChoice | Choices$ SVar1,SVar2 | StackDescription$ Plains or an Island until end of turn. -SVar:SVar1:DB$ Animate | Defined$ Targeted | Types$ Plains | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Targeted land becomes a Plains until end of turn. -SVar:SVar2:DB$ Animate | Defined$ Targeted | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Targeted land becomes an Island until end of turn. +SVar:SVar1:DB$ Animate | Defined$ Targeted | Types$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Targeted land becomes a Plains until end of turn. +SVar:SVar2:DB$ Animate | Defined$ Targeted | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Targeted land becomes an Island until end of turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/tundra_kavu.jpg Oracle:{T}: Target land becomes a Plains or an Island until end of turn. diff --git a/forge-gui/res/cardsfolder/u/unstable_frontier.txt b/forge-gui/res/cardsfolder/u/unstable_frontier.txt index 0190d6b2336..0e3276eaf00 100644 --- a/forge-gui/res/cardsfolder/u/unstable_frontier.txt +++ b/forge-gui/res/cardsfolder/u/unstable_frontier.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land you control becomes the basic land type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/unstable_frontier.jpg Oracle:{T}: Add {C}.\n{T}: Target land you control becomes the basic land type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/v/vision_charm.txt b/forge-gui/res/cardsfolder/v/vision_charm.txt index c2b033d1af2..0c6e96b7ece 100644 --- a/forge-gui/res/cardsfolder/v/vision_charm.txt +++ b/forge-gui/res/cardsfolder/v/vision_charm.txt @@ -6,7 +6,7 @@ SVar:MillOpp:DB$ Mill | NumCards$ 4 | ValidTgts$ Player | TgtPrompt$ Choose a pl SVar:ChangeType:DB$ ChooseType | Defined$ You | Type$ Land | SubAbility$ RemFirstLand | SpellDescription$ Choose a land type and a basic land type. Each land of the first chosen type becomes the second chosen type until end of turn. SVar:RemFirstLand:DB$ PumpAll | ValidCards$ Land.ChosenType | RememberAllPumped$ True | SubAbility$ ChooseType2 SVar:ChooseType2:DB$ ChooseType | Defined$ You | Type$ Basic Land | AILogic$ MostNeededType | SubAbility$ AnimateFirst -SVar:AnimateFirst:DB$ AnimateAll | ValidCards$ Land.IsRemembered | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SubAbility$ DBCleanup +SVar:AnimateFirst:DB$ AnimateAll | ValidCards$ Land.IsRemembered | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:PhaseArtifact:DB$ Phases | ValidTgts$ Artifact | TgtPrompt$ Choose a artifact | SpellDescription$ Target artifact phases out. SVar:RemAIDeck:True diff --git a/forge-gui/res/cardsfolder/z/zombie_trailblazer.txt b/forge-gui/res/cardsfolder/z/zombie_trailblazer.txt index 1d54750ac46..021324dac57 100644 --- a/forge-gui/res/cardsfolder/z/zombie_trailblazer.txt +++ b/forge-gui/res/cardsfolder/z/zombie_trailblazer.txt @@ -2,8 +2,8 @@ Name:Zombie Trailblazer ManaCost:B B B Types:Creature Zombie Scout PT:2/2 -A:AB$ Animate | Cost$ tapXType<1/Zombie> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes a Swamp until end of turn. +A:AB$ Animate | Cost$ tapXType<1/Zombie> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes a Swamp until end of turn. A:AB$ Pump | Cost$ tapXType<1/Zombie> | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Swampwalk | SpellDescription$ Target creature gains swampwalk until end of turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/zombie_trailblazer.jpg -Oracle:Tap an untapped Zombie you control: Target land becomes a Swamp until end of turn.\nTap an untapped Zombie you control: Target creature gains swampwalk until end of turn. +Oracle:Tap an untapped Zombie you control: Target land becomes a Swamp until end of turn.\nTap an untapped Zombie you control: Target creature gains swampwalk until end of turn. (It can't be blocked as long as defending player controls a Swamp.) From 9650bacca515fc91e18046763d9d5dacdde36354 Mon Sep 17 00:00:00 2001 From: swordshine Date: Sat, 26 May 2018 21:26:30 +0800 Subject: [PATCH 7/9] - Added some cards --- .../cardsfolder/upcoming/archfiend_of_despair.txt | 11 +++++++++++ .../cardsfolder/upcoming/archon_of_valors_reach.txt | 4 +++- forge-gui/res/cardsfolder/upcoming/inner_demon.txt | 9 +++++++++ .../res/cardsfolder/upcoming/rushblade_commander.txt | 2 +- forge-gui/res/cardsfolder/upcoming/sickle_dancer.txt | 8 ++++++++ .../res/cardsfolder/upcoming/stunning_reversal.txt | 12 ++++++++++++ .../src/main/java/forge/card/CardScriptParser.java | 4 ++-- 7 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/archfiend_of_despair.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/inner_demon.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/sickle_dancer.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/stunning_reversal.txt diff --git a/forge-gui/res/cardsfolder/upcoming/archfiend_of_despair.txt b/forge-gui/res/cardsfolder/upcoming/archfiend_of_despair.txt new file mode 100644 index 00000000000..55da4ac35fd --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/archfiend_of_despair.txt @@ -0,0 +1,11 @@ +Name:Archfiend of Despair +ManaCost:6 B B +Types:Creature Demon +PT:6/6 +K:Flying +S:Mode$ Continuous | Affected$ Player.Opponent | AddKeyword$ You can't gain life. | Description$ Your opponents can't gain life. +T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ RepeatOpps | TriggerDescription$ At the beginning of each end step, each opponent loses life equal to the life they lost this turn. (Damage causes loss of life.) +SVar:RepeatOpps:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ TrigLoseLife +SVar:TrigLoseLife:DB$ LoseLife | Defined$ Remembered | LifeAmount$ X | References$ X +SVar:X:PlayerCountRemembered$LifeLostThisTurn +Oracle:Flying\nYour opponents can't gain life.\nAt the beginning of each end step, each opponent loses life equal to the life that player lost this turn. (Damage causes loss of life.) diff --git a/forge-gui/res/cardsfolder/upcoming/archon_of_valors_reach.txt b/forge-gui/res/cardsfolder/upcoming/archon_of_valors_reach.txt index 8b5fdd67d67..6cd4f46f2d3 100644 --- a/forge-gui/res/cardsfolder/upcoming/archon_of_valors_reach.txt +++ b/forge-gui/res/cardsfolder/upcoming/archon_of_valors_reach.txt @@ -6,6 +6,8 @@ K:Flying K:Vigilance K:Trample K:ETBReplacement:Other:ChooseT -SVar:ChooseT:DB$ ChooseType | Type$ Card | ValidTypes$ Artifact,Enchantment,Instant,Sorcery,Planeswalker | AILogic$ MostProminentInComputerDeck | SpellDescription$ As CARDNAME enters the battlefield, choose artifact, enchantment, instant, sorcery, or planeswalker. +SVar:ChooseT:DB$ ChooseType | Type$ Card | ValidTypes$ Artifact,Enchantment,Instant,Sorcery,Planeswalker | SpellDescription$ As CARDNAME enters the battlefield, choose artifact, enchantment, instant, sorcery, or planeswalker. S:Mode$ CantBeCast | ValidCard$ Card.ChosenType | Description$ Players can't cast spells of the chosen type. +SVar:RemAIDeck:True +SVar:RemRandomDeck:True Oracle:Flying, vigilance, trample\nAs Archon of Valor's Reach enters the battlefield, choose artifact, enchantment, instant, sorcery, or planeswalker.\nPlayers can't cast spells of the chosen type. diff --git a/forge-gui/res/cardsfolder/upcoming/inner_demon.txt b/forge-gui/res/cardsfolder/upcoming/inner_demon.txt new file mode 100644 index 00000000000..89e4236cf93 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/inner_demon.txt @@ -0,0 +1,9 @@ +Name:Inner Demon +ManaCost:2 B B +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | Cost$ 2 B B | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Flying | AddType$ Demon | Description$ Enchanted creature gets +2/+2, has flying, and is a Demon in addition to its other types. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerDescription$ When CARDNAME enters the battlefield, all other creatures get -2/-2 until end of turn. +SVar:TrigPumpAll:DB$ PumpAll | NumAtt$ -2 | NumDef$ -2 | ValidCards$ Creature.nonDemon | IsCurse$ True +Oracle:Enchant creature\nEnchanted creature gets +2/+2, has flying, and is a Demon in addition to its other types.\nWhen Inner Demon enters the battlefield, all non-Demon creatures get -2/-2 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/rushblade_commander.txt b/forge-gui/res/cardsfolder/upcoming/rushblade_commander.txt index c84bb0a734b..ea8c1cef46d 100644 --- a/forge-gui/res/cardsfolder/upcoming/rushblade_commander.txt +++ b/forge-gui/res/cardsfolder/upcoming/rushblade_commander.txt @@ -1,4 +1,4 @@ -Name:Rushblade CommanderRushblade Commander +Name:Rushblade Commander ManaCost:B R Types:Creature Azra Warrior PT:2/2 diff --git a/forge-gui/res/cardsfolder/upcoming/sickle_dancer.txt b/forge-gui/res/cardsfolder/upcoming/sickle_dancer.txt new file mode 100644 index 00000000000..08458161327 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sickle_dancer.txt @@ -0,0 +1,8 @@ +Name:Sickle Dancer +ManaCost:2 B +Types:Creature Human Warrior +PT:3/2 +T:Mode$ Attacks | ValidCard$ Card.Self | IsPresent$ Warrior.Other+YourTeamCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, if your team controls another Warrior, CARDNAME gets +1/+1 until end of turn. +SVar:TrigPump:DB$ Pump | NumAtt$ +1 | NumDef$ +1 | Defined$ Self +SVar:BuffedBy:Warrior +Oracle:Whenever Sickle Dancer attacks, if your team controls another Warrior, Sickle Dancer gets +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/stunning_reversal.txt b/forge-gui/res/cardsfolder/upcoming/stunning_reversal.txt new file mode 100644 index 00000000000..8b4d5148664 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/stunning_reversal.txt @@ -0,0 +1,12 @@ +Name:Stunning Reversal +ManaCost:3 B +Types:Instant +A:SP$ Effect | Cost$ 3 B | Name$ Stunning Reversal Effect | ReplacementEffects$ LoseReplace | SVars$ ExileEffect,DBSetLife,DrawSeven | SubAbility$ DBExile | SpellDescription$ The next time you would lose the game this turn, instead draw seven cards and your life total becomes 1. Exile CARDNAME. +SVar:LoseReplace:Event$ GameLoss | ActiveZones$ Command | ValidPlayer$ You | ReplaceWith$ DrawSeven | Description$ The next time you would lose the game this turn, instead draw seven cards and your life total becomes 1. +SVar:DrawSeven:DB$ Draw | NumCards$ 7 | SubAbility$ DBSetLife +SVar:DBSetLife:DB$ SetLife | Defined$ You | LifeAmount$ 1 | SubAbility$ ExileEffect +SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:DBExile:DB$ ChangeZone | Defined$ Self | Origin$ Stack | Destination$ Exile +SVar:RemAIDeck:True +SVar:RemRandomDeck:True +Oracle:The next time you would lose the game this turn, instead draw seven cards and your life total becomes 1.\nExile Stunning Reversal. diff --git a/forge-gui/src/main/java/forge/card/CardScriptParser.java b/forge-gui/src/main/java/forge/card/CardScriptParser.java index 67917a28104..a62037712cc 100644 --- a/forge-gui/src/main/java/forge/card/CardScriptParser.java +++ b/forge-gui/src/main/java/forge/card/CardScriptParser.java @@ -399,8 +399,8 @@ public final class CardScriptParser { "Green", "nonWhite", "nonBlue", "nonBlack", "nonRed", "nonGreen", "Colorless", "nonColorless", "Multicolor", "nonMulticolor", "Monocolor", "nonMonocolor", "ChosenColor", "AllChosenColors", - "AnyChosenColor", "DoubleFaced", "Flip", "YouCtrl", "YouDontCtrl", - "OppCtrl", "ChosenCtrl", "DefenderCtrl", + "AnyChosenColor", "DoubleFaced", "Flip", "YouCtrl", "YourTeamCtrl", + "YouDontCtrl", "OppCtrl", "ChosenCtrl", "DefenderCtrl", "DefenderCtrlForRemembered", "DefendingPlayerCtrl", "EnchantedPlayerCtrl", "EnchantedControllerCtrl", "RememberedPlayer", "RememberedPlayerCtrl", From 599407ff14f091e05e613ab0d0473a560de6b6df Mon Sep 17 00:00:00 2001 From: Hanmac Date: Sat, 26 May 2018 16:35:07 +0200 Subject: [PATCH 8/9] Cards: more on Animate Types, remove OverwriteTypes --- .../src/main/java/forge/game/card/CardFactoryUtil.java | 4 ++-- forge-gui/res/cardsfolder/a/ageless_sentinels.txt | 5 ++--- forge-gui/res/cardsfolder/e/ensouled_scimitar.txt | 2 +- .../res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt | 2 +- forge-gui/res/cardsfolder/h/heart_of_kiran.txt | 2 +- forge-gui/res/cardsfolder/h/hidden_ancients.txt | 2 +- forge-gui/res/cardsfolder/h/hidden_gibbons.txt | 2 +- forge-gui/res/cardsfolder/h/hidden_guerrillas.txt | 2 +- forge-gui/res/cardsfolder/h/hidden_herd.txt | 2 +- forge-gui/res/cardsfolder/h/hidden_predators.txt | 2 +- forge-gui/res/cardsfolder/h/hidden_spider.txt | 2 +- forge-gui/res/cardsfolder/h/hidden_stag.txt | 4 ++-- forge-gui/res/cardsfolder/i/imagecrafter.txt | 2 +- forge-gui/res/cardsfolder/i/imprisoned_in_the_moon.txt | 2 +- forge-gui/res/cardsfolder/k/kukemssa_serpent.txt | 2 +- forge-gui/res/cardsfolder/l/lurking_evil.txt | 2 +- forge-gui/res/cardsfolder/l/lurking_jackals.txt | 2 +- forge-gui/res/cardsfolder/l/lurking_skirge.txt | 2 +- forge-gui/res/cardsfolder/m/mistform_dreamer.txt | 2 +- forge-gui/res/cardsfolder/m/mistform_mask.txt | 2 +- forge-gui/res/cardsfolder/m/mistform_mutant.txt | 2 +- forge-gui/res/cardsfolder/m/mistform_seaswift.txt | 2 +- forge-gui/res/cardsfolder/m/mistform_shrieker.txt | 2 +- forge-gui/res/cardsfolder/m/mistform_skyreaver.txt | 2 +- forge-gui/res/cardsfolder/m/mistform_stalker.txt | 2 +- forge-gui/res/cardsfolder/m/mistform_wakecaster.txt | 4 ++-- forge-gui/res/cardsfolder/m/mistform_wall.txt | 2 +- forge-gui/res/cardsfolder/m/mistform_warchief.txt | 2 +- forge-gui/res/cardsfolder/n/nightcreep.txt | 2 +- forge-gui/res/cardsfolder/o/opal_acrolith.txt | 4 ++-- forge-gui/res/cardsfolder/o/opal_archangel.txt | 4 ++-- forge-gui/res/cardsfolder/o/opal_avenger.txt | 2 +- forge-gui/res/cardsfolder/o/opal_caryatid.txt | 2 +- forge-gui/res/cardsfolder/o/opal_champion.txt | 2 +- forge-gui/res/cardsfolder/o/opal_gargoyle.txt | 2 +- forge-gui/res/cardsfolder/o/opal_guardian.txt | 2 +- forge-gui/res/cardsfolder/o/opal_titan.txt | 2 +- forge-gui/res/cardsfolder/p/proteus_machine.txt | 2 +- forge-gui/res/cardsfolder/s/sarkhan_the_dragonspeaker.txt | 2 +- forge-gui/res/cardsfolder/s/shades_breath.txt | 2 +- forge-gui/res/cardsfolder/s/skinshifter.txt | 6 +++--- forge-gui/res/cardsfolder/s/soul_sculptor.txt | 2 +- forge-gui/res/cardsfolder/s/standardize.txt | 2 +- forge-gui/res/cardsfolder/t/takklemaggot.txt | 2 +- forge-gui/res/cardsfolder/t/trickery_charm.txt | 2 +- forge-gui/res/cardsfolder/t/turn_burn.txt | 4 ++-- forge-gui/res/cardsfolder/u/unnatural_selection.txt | 2 +- forge-gui/res/cardsfolder/v/veil_of_birds.txt | 2 +- forge-gui/res/cardsfolder/v/veiled_apparition.txt | 2 +- forge-gui/res/cardsfolder/v/veiled_crocodile.txt | 2 +- forge-gui/res/cardsfolder/v/veiled_sentry.txt | 2 +- forge-gui/res/cardsfolder/v/veiled_serpent.txt | 2 +- 52 files changed, 61 insertions(+), 62 deletions(-) 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 9cbf572afb8..bec2af7feef 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -4154,8 +4154,8 @@ public class CardFactoryUtil { // So adding redundant YouCtrl to simplify matters even though its unnecessary String effect = "AB$ Animate | Cost$ tapXType | CostDesc$ Crew " + power + " (Tap any number of creatures you control with total power " + power + - " or more: | Crew$ True | Secondary$ True | Defined$ Self | Types$ Creature,Artifact | OverwriteTypes$ True | " + - "KeepSubtypes$ True | KeepSupertypes$ True | SpellDescription$ CARDNAME becomes an artifact creature until end of turn.)"; + " or more: | Crew$ True | Secondary$ True | Defined$ Self | Types$ Creature,Artifact | RemoveCardTypes$ True" + + " | SpellDescription$ CARDNAME becomes an artifact creature until end of turn.)"; final SpellAbility sa = AbilityFactory.getAbility(effect, card); sa.setIntrinsic(intrinsic); diff --git a/forge-gui/res/cardsfolder/a/ageless_sentinels.txt b/forge-gui/res/cardsfolder/a/ageless_sentinels.txt index 6a549ddb7c6..62827c22a5b 100644 --- a/forge-gui/res/cardsfolder/a/ageless_sentinels.txt +++ b/forge-gui/res/cardsfolder/a/ageless_sentinels.txt @@ -4,8 +4,7 @@ Types:Creature Wall PT:4/4 K:Flying K:Defender -T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigDebuff | TriggerDescription$ When CARDNAME blocks, it becomes a Bird Giant, and it loses defender. -SVar:TrigDebuff:DB$ Debuff | Keywords$ Defender | Defined$ TriggeredBlocker | Permanent$ True | SubAbility$ Animate -SVar:Animate:DB$ Animate | Defined$ TriggeredBlocker | Types$ Bird,Giant | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | Permanent$ True +T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ Animate | TriggerDescription$ When CARDNAME blocks, it becomes a Bird Giant, and it loses defender. +SVar:Animate:DB$ Animate | Defined$ TriggeredBlocker | Types$ Bird,Giant | RemoveCardTypes$ True | RemoveKeywords$ Defender | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/ageless_sentinels.jpg Oracle:Defender (This creature can't attack.)\nFlying\nWhen Ageless Sentinels blocks, it becomes a Bird Giant, and it loses defender. (It's no longer a Wall. This effect lasts indefinitely.) diff --git a/forge-gui/res/cardsfolder/e/ensouled_scimitar.txt b/forge-gui/res/cardsfolder/e/ensouled_scimitar.txt index 6d50a19c6b3..8043d78f817 100644 --- a/forge-gui/res/cardsfolder/e/ensouled_scimitar.txt +++ b/forge-gui/res/cardsfolder/e/ensouled_scimitar.txt @@ -2,7 +2,7 @@ Name:Ensouled Scimitar ManaCost:3 Types:Artifact Equipment K:Equip:2 -A:AB$ Animate | Cost$ 3 | Defined$ Self | Power$ 1 | Toughness$ 5 | Types$ Creature,Artifact,Spirit | Keywords$ Flying | OverwriteTypes$ True | SpellDescription$ CARDNAME becomes a 1/5 Spirit artifact creature with flying until end of turn. (Equipment that's a creature can't equip a creature.) +A:AB$ Animate | Cost$ 3 | Defined$ Self | Power$ 1 | Toughness$ 5 | Types$ Creature,Artifact,Spirit | Keywords$ Flying | RemoveCardTypes$ True | RemoveCreatureTypes$ True | SpellDescription$ CARDNAME becomes a 1/5 Spirit artifact creature with flying until end of turn. (Equipment that's a creature can't equip a creature.) S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ 1 | AddToughness$ 5 | Description$ Equipped creature gets +1/+5. SVar:Picture:http://www.wizards.com/global/images/magic/general/ensouled_scimitar.jpg Oracle:{3}: Ensouled Scimitar becomes a 1/5 Spirit artifact creature with flying until end of turn. (Equipment that's a creature can't equip a creature.)\nEquipped creature gets +1/+5.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt b/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt index 6a4d9503168..4cbbda95afa 100644 --- a/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt +++ b/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt @@ -5,7 +5,7 @@ HandLifeModifier:+0/-3 A:AB$ Effect | ActivationZone$ Command | Cost$ PayLife<1> | TgtZone$ Graveyard | ValidTgts$ Creature.YouOwn | PumpZone$ Graveyard | TgtPrompt$ Select target creature in your graveyard, you may play it this turn | RememberObjects$ Targeted | StaticAbilities$ Play | ExileOnMoved$ Graveyard | SpellDescription$ You may play target creature card in your graveyard this turn. SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Graveyard | Description$ You may play remembered card. T:Mode$ SpellCast | ValidCard$ Card.wasCastFromGraveyard | ValidControllingPlayer$ You | TriggerZones$ Command | Execute$ TrigAnimate | TriggerDescription$ Whenever you play a creature card from your graveyard, it becomes a black Zombie Knight. -SVar:TrigAnimate:DB$ Animate | Defined$ TriggeredCard | Types$ Zombie,Knight | Colors$ Black | OverwriteColors$ True | Permanent$ True | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:TrigAnimate:DB$ Animate | Defined$ TriggeredCard | Types$ Zombie,Knight | Colors$ Black | OverwriteColors$ True | Permanent$ True | RemoveCreatureTypes$ True R:Event$ Moved | ValidCard$ Card.Zombie+Knight | Destination$ Graveyard | ReplaceWith$ DBExile | Description$ If a Zombie Knight would be put into your graveyard from the battlefield, exile it instead. SVar:DBExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Battlefield | Destination$ Exile SVar:Picture:https://downloads.cardforge.org/images/cards/VAN/Haakon, Stromgald Scourge Avatar.full.jpg diff --git a/forge-gui/res/cardsfolder/h/heart_of_kiran.txt b/forge-gui/res/cardsfolder/h/heart_of_kiran.txt index f08ab5c52d1..c07727abead 100644 --- a/forge-gui/res/cardsfolder/h/heart_of_kiran.txt +++ b/forge-gui/res/cardsfolder/h/heart_of_kiran.txt @@ -6,6 +6,6 @@ K:Flying K:Vigilance K:Crew:3 S:Mode$ Continuous | Affected$ Card.Self | AddAbility$ KiranAnimate | Description$ You may remove a loyalty counter from a planeswalker you control rather than pay CARDNAME's crew cost. -SVar:KiranAnimate:AB$ Animate | Cost$ SubCounter<1/LOYALTY/Planeswalker.YouCtrl/Planeswalker you Control> | Crew$ True | Secondary$ True | CostDesc$ | Defined$ Self | Types$ Creature,Artifact | OverwriteTypes$ True | KeepSubtypes$ True | KeepSupertypes$ True | SpellDescription$ You may remove a loyalty counter from a planeswalker you control rather than pay Heart of Kiran's crew cost. +SVar:KiranAnimate:AB$ Animate | Cost$ SubCounter<1/LOYALTY/Planeswalker.YouCtrl/Planeswalker you Control> | Crew$ True | Secondary$ True | CostDesc$ | Defined$ Self | Types$ Creature,Artifact | RemoveCardTypes$ True | SpellDescription$ You may remove a loyalty counter from a planeswalker you control rather than pay Heart of Kiran's crew cost. SVar:Picture:http://www.wizards.com/global/images/magic/general/heart_of_kiran.jpg Oracle:Flying, vigilance\nCrew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)\nYou may remove a loyalty counter from a planeswalker you control rather than pay Heart of Kiran's crew cost. diff --git a/forge-gui/res/cardsfolder/h/hidden_ancients.txt b/forge-gui/res/cardsfolder/h/hidden_ancients.txt index 3f3e528ca83..5ab3dcaeba0 100644 --- a/forge-gui/res/cardsfolder/h/hidden_ancients.txt +++ b/forge-gui/res/cardsfolder/h/hidden_ancients.txt @@ -2,6 +2,6 @@ Name:Hidden Ancients ManaCost:1 G Types:Enchantment T:Mode$ SpellCast | ValidCard$ Enchantment | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts an enchantment spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/5 Treefolk creature. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 5 | Types$ Creature,Treefolk | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 5 | Types$ Creature,Treefolk | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_ancients.jpg Oracle:When an opponent casts an enchantment spell, if Hidden Ancients is an enchantment, Hidden Ancients becomes a 5/5 Treefolk creature. diff --git a/forge-gui/res/cardsfolder/h/hidden_gibbons.txt b/forge-gui/res/cardsfolder/h/hidden_gibbons.txt index 5f7e19dc345..d2ef3de4e2f 100644 --- a/forge-gui/res/cardsfolder/h/hidden_gibbons.txt +++ b/forge-gui/res/cardsfolder/h/hidden_gibbons.txt @@ -2,6 +2,6 @@ Name:Hidden Gibbons ManaCost:G Types:Enchantment T:Mode$ SpellCast | ValidCard$ Instant | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts an instant spell, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Ape creature. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Creature,Ape | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Creature,Ape | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_gibbons.jpg Oracle:When an opponent casts an instant spell, if Hidden Gibbons is an enchantment, Hidden Gibbons becomes a 4/4 Ape creature. diff --git a/forge-gui/res/cardsfolder/h/hidden_guerrillas.txt b/forge-gui/res/cardsfolder/h/hidden_guerrillas.txt index 6205a4814ff..370e0b74f2c 100644 --- a/forge-gui/res/cardsfolder/h/hidden_guerrillas.txt +++ b/forge-gui/res/cardsfolder/h/hidden_guerrillas.txt @@ -2,6 +2,6 @@ Name:Hidden Guerrillas ManaCost:G Types:Enchantment T:Mode$ SpellCast | ValidCard$ Artifact | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts an artifact spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/3 Soldier creature with trample. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 3 | Keywords$ Trample | Types$ Creature,Soldier | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 3 | Keywords$ Trample | Types$ Creature,Soldier | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_guerrillas.jpg Oracle:When an opponent casts an artifact spell, if Hidden Guerrillas is an enchantment, Hidden Guerrillas becomes a 5/3 Soldier creature with trample. diff --git a/forge-gui/res/cardsfolder/h/hidden_herd.txt b/forge-gui/res/cardsfolder/h/hidden_herd.txt index 6dd77e50d17..b1a8a262dda 100644 --- a/forge-gui/res/cardsfolder/h/hidden_herd.txt +++ b/forge-gui/res/cardsfolder/h/hidden_herd.txt @@ -2,6 +2,6 @@ Name:Hidden Herd ManaCost:G Types:Enchantment T:Mode$ LandPlayed | ValidCard$ Land.nonBasic+OppCtrl | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent plays a nonbasic land, if CARDNAME is an enchantment, CARDNAME becomes a 3/3 Beast creature. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Types$ Creature,Beast | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Types$ Creature,Beast | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_herd.jpg Oracle:When an opponent plays a nonbasic land, if Hidden Herd is an enchantment, Hidden Herd becomes a 3/3 Beast creature. diff --git a/forge-gui/res/cardsfolder/h/hidden_predators.txt b/forge-gui/res/cardsfolder/h/hidden_predators.txt index a04222fb7d3..7ef38b1cf89 100644 --- a/forge-gui/res/cardsfolder/h/hidden_predators.txt +++ b/forge-gui/res/cardsfolder/h/hidden_predators.txt @@ -2,6 +2,6 @@ Name:Hidden Predators ManaCost:G Types:Enchantment T:Mode$ Always | IsPresent$ Creature.powerGE4+OppCtrl | TriggerZones$ Battlefield | Execute$ TrigLurkingJackalsAnimate | IsPresent2$ Card.Self+Enchantment | ResolvingCheck$ IsPresent2 | TriggerDescription$ When an opponent controls a creature with power 4 or greater, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Beast creature. -SVar:TrigLurkingJackalsAnimate:DB$ Animate | Types$ Creature,Beast | Power$ 4 | Toughness$ 4 | OverwriteTypes$ True | Permanent$ True +SVar:TrigLurkingJackalsAnimate:DB$ Animate | Types$ Creature,Beast | Power$ 4 | Toughness$ 4 | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_predators.jpg Oracle:When an opponent controls a creature with power 4 or greater, if Hidden Predators is an enchantment, Hidden Predators becomes a 4/4 Beast creature. diff --git a/forge-gui/res/cardsfolder/h/hidden_spider.txt b/forge-gui/res/cardsfolder/h/hidden_spider.txt index 29d2e1fe4a9..989be698e2a 100644 --- a/forge-gui/res/cardsfolder/h/hidden_spider.txt +++ b/forge-gui/res/cardsfolder/h/hidden_spider.txt @@ -2,6 +2,6 @@ Name:Hidden Spider ManaCost:G Types:Enchantment T:Mode$ SpellCast | ValidCard$ Creature.withFlying | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell with flying, if CARDNAME is an enchantment, CARDNAME becomes a 3/5 Spider creature with reach. (It can block creatures with flying.) -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 5 | Keywords$ Reach | Types$ Creature,Spider | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 5 | Keywords$ Reach | Types$ Creature,Spider | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_spider.jpg Oracle:When an opponent casts a creature spell with flying, if Hidden Spider is an enchantment, Hidden Spider becomes a 3/5 Spider creature with reach. (It can block creatures with flying.) diff --git a/forge-gui/res/cardsfolder/h/hidden_stag.txt b/forge-gui/res/cardsfolder/h/hidden_stag.txt index 9b61eb0a3ff..0c47ae9fe68 100644 --- a/forge-gui/res/cardsfolder/h/hidden_stag.txt +++ b/forge-gui/res/cardsfolder/h/hidden_stag.txt @@ -2,9 +2,9 @@ Name:Hidden Stag ManaCost:1 G Types:Enchantment T:Mode$ LandPlayed | ValidCard$ Land.OppCtrl | IsPresent$ Card.Self+Enchantment | Execute$ TrigHiddenStagAnimateOppLand | TriggerZones$ Battlefield | TriggerDescription$ Whenever an opponent plays a land, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Elk Beast creature. -SVar:TrigHiddenStagAnimateOppLand:DB$ Animate | Defined$ Self | Types$ Creature,Elk,Beast | Power$ 3 | Toughness$ 2 | OverwriteTypes$ True | Permanent$ True +SVar:TrigHiddenStagAnimateOppLand:DB$ Animate | Defined$ Self | Types$ Creature,Elk,Beast | Power$ 3 | Toughness$ 2 | RemoveCardTypes$ True | Permanent$ True T:Mode$ LandPlayed | ValidCard$ Land.YouCtrl | IsPresent$ Card.Self+Creature | Execute$ TrigHiddenStagAnimateYourLand | TriggerZones$ Battlefield | TriggerDescription$ Whenever you play a land, if CARDNAME is a creature, CARDNAME becomes an enchantment. -SVar:TrigHiddenStagAnimateYourLand:DB$ Animate | Defined$ Self | Types$ Enchantment | OverwriteTypes$ True | Permanent$ True +SVar:TrigHiddenStagAnimateYourLand:DB$ Animate | Defined$ Self | Types$ Enchantment | RemoveCardTypes$ True | Permanent$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_stag.jpg Oracle:Whenever an opponent plays a land, if Hidden Stag is an enchantment, Hidden Stag becomes a 3/2 Elk Beast creature.\nWhenever you play a land, if Hidden Stag is a creature, Hidden Stag becomes an enchantment. diff --git a/forge-gui/res/cardsfolder/i/imagecrafter.txt b/forge-gui/res/cardsfolder/i/imagecrafter.txt index b69127ba95d..8e09b3fad80 100644 --- a/forge-gui/res/cardsfolder/i/imagecrafter.txt +++ b/forge-gui/res/cardsfolder/i/imagecrafter.txt @@ -3,7 +3,7 @@ ManaCost:U Types:Creature Human Wizard PT:1/1 A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Creature | InvalidTypes$ Wall | SubAbility$ DBAnimate | SpellDescription$ Choose a creature type other than Wall. Target creature becomes that type until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | RemoveCreatureTypes$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/imagecrafter.jpg Oracle:{T}: Choose a creature type other than Wall. Target creature becomes that type until end of turn. diff --git a/forge-gui/res/cardsfolder/i/imprisoned_in_the_moon.txt b/forge-gui/res/cardsfolder/i/imprisoned_in_the_moon.txt index a5b2395fc0a..ff17aa4a073 100644 --- a/forge-gui/res/cardsfolder/i/imprisoned_in_the_moon.txt +++ b/forge-gui/res/cardsfolder/i/imprisoned_in_the_moon.txt @@ -3,7 +3,7 @@ ManaCost:2 U Types:Enchantment Aura K:Enchant creature, land, or planeswalker A:SP$ Attach | Cost$ 2 U | ValidTgts$ Creature,Land,Planeswalker | AILogic$ Curse | AITgts$ Card.cmcGE3 -S:Mode$ Continuous | Affected$ Card.EnchantedBy | SetColor$ Colorless | AddType$ Land | RemoveCardTypes$ True | RemoveSubTypes$ True | RemoveAllAbilities$ True | AddAbility$ ABMana | Description$ Enchanted permanent is a colorless land with "{T}: Add {C}" and loses all other card types and abilities. +S:Mode$ Continuous | Affected$ Card.EnchantedBy | SetColor$ Colorless | AddType$ Land | RemoveCardTypes$ True | RemoveAllAbilities$ True | AddAbility$ ABMana | Description$ Enchanted permanent is a colorless land with "{T}: Add {C}" and loses all other card types and abilities. SVar:ABMana:AB$Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. SVar:NonStackingAttachEffect:True SVar:Picture:http://www.wizards.com/global/images/magic/general/imprisoned_in_the_moon.jpg diff --git a/forge-gui/res/cardsfolder/k/kukemssa_serpent.txt b/forge-gui/res/cardsfolder/k/kukemssa_serpent.txt index cdf9ee17fe8..7ccddbef885 100644 --- a/forge-gui/res/cardsfolder/k/kukemssa_serpent.txt +++ b/forge-gui/res/cardsfolder/k/kukemssa_serpent.txt @@ -3,7 +3,7 @@ ManaCost:3 U Types:Creature Serpent PT:4/3 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. -A:AB$ Animate | Cost$ U Sac<1/Island> | ValidTgts$ Land.OppCtrl | TgtPrompt$ Select target land an opponent controls | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | SpellDescription$ Target land an opponent controls becomes an Island until end of turn. +A:AB$ Animate | Cost$ U Sac<1/Island> | ValidTgts$ Land.OppCtrl | TgtPrompt$ Select target land an opponent controls | Types$ Island | RemoveLandTypes$ True | SpellDescription$ Target land an opponent controls becomes an Island until end of turn. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. SVar:TrigSac:DB$Sacrifice | Defined$ Self SVar:NeedsToPlay:Island.YouCtrl diff --git a/forge-gui/res/cardsfolder/l/lurking_evil.txt b/forge-gui/res/cardsfolder/l/lurking_evil.txt index 5caaa2a278d..6f091155929 100644 --- a/forge-gui/res/cardsfolder/l/lurking_evil.txt +++ b/forge-gui/res/cardsfolder/l/lurking_evil.txt @@ -1,7 +1,7 @@ Name:Lurking Evil ManaCost:B B B Types:Enchantment -A:AB$ Animate | Cost$ PayLife | Types$ Creature,Horror | Power$ 4 | Toughness$ 4 | Keywords$ Flying | OverwriteTypes$ True | Permanent$ True | CostDesc$ Pay half your life, rounded up: | References$ X | SpellDescription$ CARDNAME becomes a 4/4 Horror creature with flying. +A:AB$ Animate | Cost$ PayLife | Types$ Creature,Horror | Power$ 4 | Toughness$ 4 | Keywords$ Flying | RemoveCardTypes$ True | Permanent$ True | CostDesc$ Pay half your life, rounded up: | References$ X | SpellDescription$ CARDNAME becomes a 4/4 Horror creature with flying. SVar:X:Count$YourLifeTotal/HalfUp SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_evil.jpg diff --git a/forge-gui/res/cardsfolder/l/lurking_jackals.txt b/forge-gui/res/cardsfolder/l/lurking_jackals.txt index 2b73272e7e9..c7583493b7d 100644 --- a/forge-gui/res/cardsfolder/l/lurking_jackals.txt +++ b/forge-gui/res/cardsfolder/l/lurking_jackals.txt @@ -2,6 +2,6 @@ Name:Lurking Jackals ManaCost:B Types:Enchantment T:Mode$ Always | LifeTotal$ OpponentSmallest | LifeAmount$ LE10 | TriggerZones$ Battlefield | Execute$ TrigLurkingJackalsAnimate | IsPresent$ Card.Self+Enchantment | ResolvingCheck$ IsPresent | TriggerDescription$ When an opponent has 10 or less life, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Jackal creature. -SVar:TrigLurkingJackalsAnimate:DB$ Animate | Types$ Creature,Jackal | Power$ 3 | Toughness$ 2 | OverwriteTypes$ True | Permanent$ True +SVar:TrigLurkingJackalsAnimate:DB$ Animate | Types$ Creature,Jackal | Power$ 3 | Toughness$ 2 | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_jackals.jpg Oracle:When an opponent has 10 or less life, if Lurking Jackals is an enchantment, it becomes a 3/2 Jackal creature. diff --git a/forge-gui/res/cardsfolder/l/lurking_skirge.txt b/forge-gui/res/cardsfolder/l/lurking_skirge.txt index ebe5eff0517..9ee4d32430f 100644 --- a/forge-gui/res/cardsfolder/l/lurking_skirge.txt +++ b/forge-gui/res/cardsfolder/l/lurking_skirge.txt @@ -2,6 +2,6 @@ Name:Lurking Skirge ManaCost:1 B Types:Enchantment T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | ValidCard$ Creature.OppOwn | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When a creature is put into an opponent's graveyard from the battlefield, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Imp creature with flying. -SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ 3 | Toughness$ 2 | Types$ Creature,Imp | Keywords$ Flying | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ 3 | Toughness$ 2 | Types$ Creature,Imp | Keywords$ Flying | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_skirge.jpg Oracle:When a creature is put into an opponent's graveyard from the battlefield, if Lurking Skirge is an enchantment, Lurking Skirge becomes a 3/2 Imp creature with flying. diff --git a/forge-gui/res/cardsfolder/m/mistform_dreamer.txt b/forge-gui/res/cardsfolder/m/mistform_dreamer.txt index f1400bafb1e..02edcfb1abb 100644 --- a/forge-gui/res/cardsfolder/m/mistform_dreamer.txt +++ b/forge-gui/res/cardsfolder/m/mistform_dreamer.txt @@ -4,7 +4,7 @@ Types:Creature Illusion PT:2/1 K:Flying A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_dreamer.jpg Oracle:Flying\n{1}: Mistform Dreamer becomes the creature type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/m/mistform_mask.txt b/forge-gui/res/cardsfolder/m/mistform_mask.txt index 13932fce43e..d40c5ab40e2 100644 --- a/forge-gui/res/cardsfolder/m/mistform_mask.txt +++ b/forge-gui/res/cardsfolder/m/mistform_mask.txt @@ -4,7 +4,7 @@ Types:Enchantment Aura K:Enchant creature A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | AILogic$ Pump A:AB$ ChooseType | Cost$ 1 | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBAnimate | SpellDescription$ Enchanted creature becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | Defined$ Enchanted | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | Defined$ Enchanted | Types$ ChosenType | RemoveCreatureTypes$ True SVar:NonStackingAttachEffect:True SVar:RemAIDeck:True SVar:RemRandomDeck:True diff --git a/forge-gui/res/cardsfolder/m/mistform_mutant.txt b/forge-gui/res/cardsfolder/m/mistform_mutant.txt index 7162779391b..84206173cfa 100644 --- a/forge-gui/res/cardsfolder/m/mistform_mutant.txt +++ b/forge-gui/res/cardsfolder/m/mistform_mutant.txt @@ -3,7 +3,7 @@ ManaCost:4 U U Types:Creature Illusion Mutant PT:3/4 A:AB$ ChooseType | Cost$ 1 U | Defined$ You | Type$ Creature | InvalidTypes$ Wall | SubAbility$ DBAnimate | SpellDescription$ Choose a creature type other than Wall. Target creature becomes that type until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | RemoveCreatureTypes$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_mutant.jpg Oracle:{1}{U}: Choose a creature type other than Wall. Target creature becomes that type until end of turn. diff --git a/forge-gui/res/cardsfolder/m/mistform_seaswift.txt b/forge-gui/res/cardsfolder/m/mistform_seaswift.txt index 4e0996fe855..983540f6aa7 100644 --- a/forge-gui/res/cardsfolder/m/mistform_seaswift.txt +++ b/forge-gui/res/cardsfolder/m/mistform_seaswift.txt @@ -4,7 +4,7 @@ Types:Creature Illusion PT:3/1 K:Flying A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True K:Morph:1 U SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_seaswift.jpg diff --git a/forge-gui/res/cardsfolder/m/mistform_shrieker.txt b/forge-gui/res/cardsfolder/m/mistform_shrieker.txt index 07f94debc58..e5c284fb1b7 100644 --- a/forge-gui/res/cardsfolder/m/mistform_shrieker.txt +++ b/forge-gui/res/cardsfolder/m/mistform_shrieker.txt @@ -4,7 +4,7 @@ Types:Creature Illusion PT:3/3 K:Flying A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True K:Morph:3 U U SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_shrieker.jpg diff --git a/forge-gui/res/cardsfolder/m/mistform_skyreaver.txt b/forge-gui/res/cardsfolder/m/mistform_skyreaver.txt index cabb15e2a32..72bfa22c64c 100644 --- a/forge-gui/res/cardsfolder/m/mistform_skyreaver.txt +++ b/forge-gui/res/cardsfolder/m/mistform_skyreaver.txt @@ -4,7 +4,7 @@ Types:Creature Illusion PT:6/6 K:Flying A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_skyreaver.jpg Oracle:Flying\n{1}: Mistform Skyreaver becomes the creature type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/m/mistform_stalker.txt b/forge-gui/res/cardsfolder/m/mistform_stalker.txt index 02c66927a54..a8767180ee5 100644 --- a/forge-gui/res/cardsfolder/m/mistform_stalker.txt +++ b/forge-gui/res/cardsfolder/m/mistform_stalker.txt @@ -3,7 +3,7 @@ ManaCost:1 U Types:Creature Illusion PT:1/1 A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True A:AB$ Pump | Cost$ 2 U U | Defined$ Self | NumAtt$ +2 | NumDef$ +2 | KW$ Flying | SpellDescription$ CARDNAME gets +2/+2 and gains flying until end of turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_stalker.jpg diff --git a/forge-gui/res/cardsfolder/m/mistform_wakecaster.txt b/forge-gui/res/cardsfolder/m/mistform_wakecaster.txt index d55f89dfba5..c0ca68e0513 100644 --- a/forge-gui/res/cardsfolder/m/mistform_wakecaster.txt +++ b/forge-gui/res/cardsfolder/m/mistform_wakecaster.txt @@ -4,9 +4,9 @@ Types:Creature Illusion PT:2/3 K:Flying A:AB$ ChooseType | Cost$ 1 | Type$ Creature | Defined$ You | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True A:AB$ ChooseType | Cost$ 2 U U T | Type$ Creature | Defined$ You | SubAbility$ DBAnimateAll | SpellDescription$ Choose a creature type. Each creature you control becomes that type until end of turn. -SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Creature.YouCtrl | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Creature.YouCtrl | Types$ ChosenType | RemoveCreatureTypes$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_wakecaster.jpg Oracle:Flying\n{1}: Mistform Wakecaster becomes the creature type of your choice until end of turn.\n{2}{U}{U}, {T}: Choose a creature type. Each creature you control becomes that type until end of turn. diff --git a/forge-gui/res/cardsfolder/m/mistform_wall.txt b/forge-gui/res/cardsfolder/m/mistform_wall.txt index 589b232546d..ef4e9369bf7 100644 --- a/forge-gui/res/cardsfolder/m/mistform_wall.txt +++ b/forge-gui/res/cardsfolder/m/mistform_wall.txt @@ -4,7 +4,7 @@ Types:Creature Illusion Wall PT:1/4 S:Mode$ Continuous | Affected$ Card.Self+Wall | AddKeyword$ Defender | Description$ CARDNAME has defender as long as it's a Wall. A:AB$ ChooseType | Cost$ 1 | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_wall.jpg Oracle:Mistform Wall has defender as long as it's a Wall.\n{1}: Mistform Wall becomes the creature type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/m/mistform_warchief.txt b/forge-gui/res/cardsfolder/m/mistform_warchief.txt index c1c9edded0e..fc779ed9de8 100644 --- a/forge-gui/res/cardsfolder/m/mistform_warchief.txt +++ b/forge-gui/res/cardsfolder/m/mistform_warchief.txt @@ -4,7 +4,7 @@ Types:Creature Illusion PT:1/3 S:Mode$ ReduceCost | ValidCard$ Creature.sharesCreatureTypeWith | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Creature spells you cast that share a creature type with CARDNAME cost {1} less to cast. A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_warchief.jpg Oracle:Creature spells you cast that share a creature type with Mistform Warchief cost {1} less to cast.\n{T}: Mistform Warchief becomes the creature type of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/n/nightcreep.txt b/forge-gui/res/cardsfolder/n/nightcreep.txt index 464e1bb9818..b5f07727975 100644 --- a/forge-gui/res/cardsfolder/n/nightcreep.txt +++ b/forge-gui/res/cardsfolder/n/nightcreep.txt @@ -2,7 +2,7 @@ Name:Nightcreep ManaCost:B B Types:Instant A:SP$ AnimateAll | Cost$ B B | ValidCards$ Creature | Colors$ Black | OverwriteColors$ True | SubAbility$ AnimateSwamp | SpellDescription$ Until end of turn, all creatures become black and all lands become Swamps. -SVar:AnimateSwamp:DB$AnimateAll | ValidCards$ Land | Types$ Swamp | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:AnimateSwamp:DB$AnimateAll | ValidCards$ Land | Types$ Swamp | RemoveLandTypes$ True SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/nightcreep.jpg Oracle:Until end of turn, all creatures become black and all lands become Swamps. diff --git a/forge-gui/res/cardsfolder/o/opal_acrolith.txt b/forge-gui/res/cardsfolder/o/opal_acrolith.txt index 8ce112d9392..2cd8af16773 100644 --- a/forge-gui/res/cardsfolder/o/opal_acrolith.txt +++ b/forge-gui/res/cardsfolder/o/opal_acrolith.txt @@ -2,8 +2,8 @@ Name:Opal Acrolith ManaCost:2 W Types:Enchantment T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 2/4 Soldier creature. -A:AB$ Animate | Cost$ 0 | Defined$ Self | Types$ Enchantment | OverwriteTypes$ True | Permanent$ True | SpellDescription$ CARDNAME becomes an enchantment. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 4 | Types$ Creature,Soldier | OverwriteTypes$ True | Permanent$ True +A:AB$ Animate | Cost$ 0 | Defined$ Self | Types$ Enchantment | RemoveCardTypes$ True | Permanent$ True | SpellDescription$ CARDNAME becomes an enchantment. +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 4 | Types$ Creature,Soldier | RemoveCardTypes$ True | Permanent$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_acrolith.jpg Oracle:Whenever an opponent casts a creature spell, if Opal Acrolith is an enchantment, Opal Acrolith becomes a 2/4 Soldier creature.\n{0}: Opal Acrolith becomes an enchantment. diff --git a/forge-gui/res/cardsfolder/o/opal_archangel.txt b/forge-gui/res/cardsfolder/o/opal_archangel.txt index 110e51f7d0b..9de95dd2bb9 100644 --- a/forge-gui/res/cardsfolder/o/opal_archangel.txt +++ b/forge-gui/res/cardsfolder/o/opal_archangel.txt @@ -1,7 +1,7 @@ Name:Opal Archangel ManaCost:4 W Types:Enchantment -T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment| Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/5 Angel creature with flying and vigilance. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 5 | Keywords$ Flying & Vigilance | Types$ Creature,Angel | OverwriteTypes$ True | Permanent$ True +T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/5 Angel creature with flying and vigilance. +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 5 | Keywords$ Flying & Vigilance | Types$ Creature,Angel | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_archangel.jpg Oracle:When an opponent casts a creature spell, if Opal Archangel is an enchantment, Opal Archangel becomes a 5/5 Angel creature with flying and vigilance. diff --git a/forge-gui/res/cardsfolder/o/opal_avenger.txt b/forge-gui/res/cardsfolder/o/opal_avenger.txt index 680ff2548b0..9916889f5e9 100644 --- a/forge-gui/res/cardsfolder/o/opal_avenger.txt +++ b/forge-gui/res/cardsfolder/o/opal_avenger.txt @@ -2,6 +2,6 @@ Name:Opal Avenger ManaCost:2 W Types:Enchantment T:Mode$ Always | LifeTotal$ You | LifeAmount$ LE10 | TriggerZones$ Battlefield | Execute$ TrigOpalAvengerAnimate | IsPresent$ Card.Self+Enchantment | ResolvingCheck$ IsPresent | TriggerDescription$ When you have 10 or less life, if CARDNAME is an enchantment, CARDNAME becomes a 3/5 Soldier creature. -SVar:TrigOpalAvengerAnimate:DB$ Animate | Types$ Creature,Soldier | Power$ 3 | Toughness$ 5 | OverwriteTypes$ True | Permanent$ True +SVar:TrigOpalAvengerAnimate:DB$ Animate | Types$ Creature,Soldier | Power$ 3 | Toughness$ 5 | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_avenger.jpg Oracle:When you have 10 or less life, if Opal Avenger is an enchantment, Opal Avenger becomes a 3/5 Soldier creature. diff --git a/forge-gui/res/cardsfolder/o/opal_caryatid.txt b/forge-gui/res/cardsfolder/o/opal_caryatid.txt index e9138279898..59c6bd9e4a1 100644 --- a/forge-gui/res/cardsfolder/o/opal_caryatid.txt +++ b/forge-gui/res/cardsfolder/o/opal_caryatid.txt @@ -2,6 +2,6 @@ Name:Opal Caryatid ManaCost:W Types:Enchantment T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 2/2 Soldier creature. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Creature,Soldier | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Creature,Soldier | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_caryatid.jpg Oracle:When an opponent casts a creature spell, if Opal Caryatid is an enchantment, Opal Caryatid becomes a 2/2 Soldier creature. diff --git a/forge-gui/res/cardsfolder/o/opal_champion.txt b/forge-gui/res/cardsfolder/o/opal_champion.txt index 24d4facd393..dcb23572af4 100644 --- a/forge-gui/res/cardsfolder/o/opal_champion.txt +++ b/forge-gui/res/cardsfolder/o/opal_champion.txt @@ -2,6 +2,6 @@ Name:Opal Champion ManaCost:2 W Types:Enchantment T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment| Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 3/3 Knight creature with first strike. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Keywords$ First Strike | Types$ Creature,Knight | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Keywords$ First Strike | Types$ Creature,Knight | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_champion.jpg Oracle:When an opponent casts a creature spell, if Opal Champion is an enchantment, Opal Champion becomes a 3/3 Knight creature with first strike. diff --git a/forge-gui/res/cardsfolder/o/opal_gargoyle.txt b/forge-gui/res/cardsfolder/o/opal_gargoyle.txt index 5b8649c9e5a..483a7c8a319 100644 --- a/forge-gui/res/cardsfolder/o/opal_gargoyle.txt +++ b/forge-gui/res/cardsfolder/o/opal_gargoyle.txt @@ -2,6 +2,6 @@ Name:Opal Gargoyle ManaCost:1 W Types:Enchantment T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 2/2 Gargoyle creature with flying. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Creature,Gargoyle | Keywords$ Flying | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Creature,Gargoyle | Keywords$ Flying | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_gargoyle.jpg Oracle:When an opponent casts a creature spell, if Opal Gargoyle is an enchantment, Opal Gargoyle becomes a 2/2 Gargoyle creature with flying. diff --git a/forge-gui/res/cardsfolder/o/opal_guardian.txt b/forge-gui/res/cardsfolder/o/opal_guardian.txt index 469c65030a2..c1f83d8bff3 100644 --- a/forge-gui/res/cardsfolder/o/opal_guardian.txt +++ b/forge-gui/res/cardsfolder/o/opal_guardian.txt @@ -2,6 +2,6 @@ Name:Opal Guardian ManaCost:W W W Types:Enchantment T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 3/4 Gargoyle creature with flying and protection from red. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 4 | Types$ Creature,Gargoyle | Keywords$ Flying & Protection from red | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 4 | Types$ Creature,Gargoyle | Keywords$ Flying & Protection from red | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_guardian.jpg Oracle:When an opponent casts a creature spell, if Opal Guardian is an enchantment, Opal Guardian becomes a 3/4 Gargoyle creature with flying and protection from red. diff --git a/forge-gui/res/cardsfolder/o/opal_titan.txt b/forge-gui/res/cardsfolder/o/opal_titan.txt index c05dd46aa2d..e049870e00f 100644 --- a/forge-gui/res/cardsfolder/o/opal_titan.txt +++ b/forge-gui/res/cardsfolder/o/opal_titan.txt @@ -2,7 +2,7 @@ Name:Opal Titan ManaCost:2 W W Types:Enchantment T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | Execute$ TrigOpalTitanAnimate | IsPresent$ Card.Self+Enchantment | TriggerZones$ Battlefield | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Giant creature with protection from each of that spell's colors. -SVar:TrigOpalTitanAnimate:DB$ Animate | Defined$ Self | Types$ Creature,Giant | Power$ 4 | Toughness$ 4 | OverwriteTypes$ True | Permanent$ True | SubAbility$ DBOpalTitanProtectionWhite | Permanent$ True +SVar:TrigOpalTitanAnimate:DB$ Animate | Defined$ Self | Types$ Creature,Giant | Power$ 4 | Toughness$ 4 | RemoveCardTypes$ True | Permanent$ True | SubAbility$ DBOpalTitanProtectionWhite | Permanent$ True SVar:DBOpalTitanProtectionWhite:DB$ Protection | Gains$ white | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.White | ConditionCompare$ GE1 | SubAbility$ DBOpalTitanProtectionBlue | Permanent$ True SVar:DBOpalTitanProtectionBlue:DB$ Protection | Gains$ blue | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.Blue | ConditionCompare$ GE1 | SubAbility$ DBOpalTitanProtectionBlack | Permanent$ True SVar:DBOpalTitanProtectionBlack:DB$ Protection | Gains$ black | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.Black | ConditionCompare$ GE1 | SubAbility$ DBOpalTitanProtectionGreen | Permanent$ True diff --git a/forge-gui/res/cardsfolder/p/proteus_machine.txt b/forge-gui/res/cardsfolder/p/proteus_machine.txt index 6212e8428ea..518437ec0ea 100644 --- a/forge-gui/res/cardsfolder/p/proteus_machine.txt +++ b/forge-gui/res/cardsfolder/p/proteus_machine.txt @@ -5,6 +5,6 @@ PT:2/2 K:Morph:0 T:Mode$ TurnFaceUp | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME is turned face up, it becomes the creature type of your choice. (This effect lasts indefinitely.) SVar:TrigChoose:DB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | AILogic$ MostProminentInComputerDeck -SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | LastsIndefinitely$ True +SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ ChosenType | RemoveCreatureTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/proteus_machine.jpg Oracle:Morph {0} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)\nWhen Proteus Machine is turned face up, it becomes the creature type of your choice. (This effect lasts indefinitely.) diff --git a/forge-gui/res/cardsfolder/s/sarkhan_the_dragonspeaker.txt b/forge-gui/res/cardsfolder/s/sarkhan_the_dragonspeaker.txt index 860c299e018..89fe8a2070f 100644 --- a/forge-gui/res/cardsfolder/s/sarkhan_the_dragonspeaker.txt +++ b/forge-gui/res/cardsfolder/s/sarkhan_the_dragonspeaker.txt @@ -2,7 +2,7 @@ Name:Sarkhan, the Dragonspeaker ManaCost:3 R R Types:Legendary Planeswalker Sarkhan Loyalty:4 -A:AB$ Animate | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Power$ 4 | Toughness$ 4 | Types$ Creature,Legendary,Dragon | Colors$ Red | OverwriteColors$ True | OverwriteTypes$ True | KeepSupertypes$ True | Keywords$ Flying & Indestructible & Haste | SpellDescription$ Until end of turn, CARDNAME becomes a legendary 4/4 red Dragon creature with flying, indestructible, and haste. (He doesn't lose loyalty while he's not a planeswalker.) +A:AB$ Animate | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Power$ 4 | Toughness$ 4 | Types$ Creature,Legendary,Dragon | Colors$ Red | OverwriteColors$ True | RemoveCardTypes$ True | Keywords$ Flying & Indestructible & Haste | SpellDescription$ Until end of turn, CARDNAME becomes a legendary 4/4 red Dragon creature with flying, indestructible, and haste. (He doesn't lose loyalty while he's not a planeswalker.) A:AB$ DealDamage | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to target creature. A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem - Sarkhan, the Dragonspeaker | Triggers$ BODTrig,EOTTrig | SVars$ SarkhanDraw,SarkhanDiscard | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "At the beginning of your draw step, draw two additional cards" and "At the beginning of your end step, discard your hand." SVar:BODTrig:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | TriggerZones$ Command | Execute$ SarkhanDraw | TriggerDescription$ At the beginning of your draw step, draw two additional cards. diff --git a/forge-gui/res/cardsfolder/s/shades_breath.txt b/forge-gui/res/cardsfolder/s/shades_breath.txt index ceda1541e88..2d00ea550c7 100644 --- a/forge-gui/res/cardsfolder/s/shades_breath.txt +++ b/forge-gui/res/cardsfolder/s/shades_breath.txt @@ -1,7 +1,7 @@ Name:Shade's Breath ManaCost:1 B Types:Instant -A:SP$ AnimateAll | Cost$ 1 B | ValidCards$ Creature.YouCtrl | Colors$ Black | OverwriteColors$ True | Types$ Shade | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True| Abilities$ ABPump | SpellDescription$ Until end of turn, each creature you control becomes black, its creature type becomes Shade, and it gains "{B}: This creature gets +1/+1 until end of turn." +A:SP$ AnimateAll | Cost$ 1 B | ValidCards$ Creature.YouCtrl | Colors$ Black | OverwriteColors$ True | Types$ Shade | RemoveCreatureTypes$ True | Abilities$ ABPump | SpellDescription$ Until end of turn, each creature you control becomes black, its creature type becomes Shade, and it gains "{B}: This creature gets +1/+1 until end of turn." SVar:ABPump:AB$Pump | Cost$ B | NumAtt$ +1 | NumDef$ +1 | SpellDescription$ CARDNAME gets +1/+1 until end of turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/shades_breath.jpg diff --git a/forge-gui/res/cardsfolder/s/skinshifter.txt b/forge-gui/res/cardsfolder/s/skinshifter.txt index f8ccbc69928..ff586005ec0 100644 --- a/forge-gui/res/cardsfolder/s/skinshifter.txt +++ b/forge-gui/res/cardsfolder/s/skinshifter.txt @@ -3,9 +3,9 @@ ManaCost:1 G Types:Creature Human Shaman PT:1/1 A:AB$ Charm | Cost$ G | Choices$ DBRhino,DBBird,DBPlant | CharmNum$ 1 | ActivationLimit$ 1 -SVar:DBRhino:DB$Animate | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Creature,Rhino | OverwriteTypes$ True | Keywords$ Trample | SpellDescription$ Until end of turn, CARDNAME becomes a Rhino with base power and toughness 4/4 and gains trample. Activate this ability only once each turn. -SVar:DBBird:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Creature,Bird | OverwriteTypes$ True | Keywords$ Flying | SpellDescription$ Until end of turn, CARDNAME becomes a Bird with base power and toughness 2/2 and gains flying. Activate this ability only once each turn. -SVar:DBPlant:DB$Animate | Defined$ Self | Power$ 0 | Toughness$ 8 | Types$ Creature,Plant | OverwriteTypes$ True | SpellDescription$ Until end of turn, CARDNAME becomes a Plant with base power and toughness 0/8. Activate this ability only once each turn. +SVar:DBRhino:DB$Animate | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Rhino | RemoveCreatureTypes$ True | Keywords$ Trample | SpellDescription$ Until end of turn, CARDNAME becomes a Rhino with base power and toughness 4/4 and gains trample. Activate this ability only once each turn. +SVar:DBBird:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Bird | RemoveCreatureTypes$ True | Keywords$ Flying | SpellDescription$ Until end of turn, CARDNAME becomes a Bird with base power and toughness 2/2 and gains flying. Activate this ability only once each turn. +SVar:DBPlant:DB$Animate | Defined$ Self | Power$ 0 | Toughness$ 8 | Types$ Plant | RemoveCreatureTypes$ True | SpellDescription$ Until end of turn, CARDNAME becomes a Plant with base power and toughness 0/8. Activate this ability only once each turn. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/skinshifter.jpg Oracle:{G}: Choose one —\n• Until end of turn, Skinshifter becomes a Rhino with base power and toughness 4/4 and gains trample. Activate this ability only once each turn.\n• Until end of turn, Skinshifter becomes a Bird with base power and toughness 2/2 and gains flying. Activate this ability only once each turn.\n• Until end of turn, Skinshifter becomes a Plant with base power and toughness 0/8. Activate this ability only once each turn. diff --git a/forge-gui/res/cardsfolder/s/soul_sculptor.txt b/forge-gui/res/cardsfolder/s/soul_sculptor.txt index 0282b855ec8..b9dcb51f5be 100644 --- a/forge-gui/res/cardsfolder/s/soul_sculptor.txt +++ b/forge-gui/res/cardsfolder/s/soul_sculptor.txt @@ -2,7 +2,7 @@ Name:Soul Sculptor ManaCost:2 W Types:Creature Human PT:1/1 -A:AB$ Animate | Cost$ 1 W T | ValidTgts$ Creature | Types$ Enchantment | RemoveAllAbilities$ True | OverwriteTypes$ True | KeepSupertypes$ True | UntilAPlayerCastSpell$ Creature | SpellDescription$ Target creature becomes an enchantment and loses all abilities until a player casts a creature spell. +A:AB$ Animate | Cost$ 1 W T | ValidTgts$ Creature | Types$ Enchantment | RemoveAllAbilities$ True | RemoveCardTypes$ True | UntilAPlayerCastSpell$ Creature | SpellDescription$ Target creature becomes an enchantment and loses all abilities until a player casts a creature spell. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/soul_sculptor.jpg Oracle:{1}{W}, {T}: Target creature becomes an enchantment and loses all abilities until a player casts a creature spell. diff --git a/forge-gui/res/cardsfolder/s/standardize.txt b/forge-gui/res/cardsfolder/s/standardize.txt index a54c397776d..39bef978c2f 100644 --- a/forge-gui/res/cardsfolder/s/standardize.txt +++ b/forge-gui/res/cardsfolder/s/standardize.txt @@ -2,7 +2,7 @@ Name:Standardize ManaCost:U U Types:Instant A:SP$ ChooseType | Cost$ U U | Defined$ You | Type$ Creature | InvalidTypes$ Wall | SubAbility$ DBAnimateAll | SpellDescription$ Choose a creature type other than Wall. Each creature becomes that type until end of turn. -SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Creature | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Creature | Types$ ChosenType | RemoveCreatureTypes$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/standardize.jpg Oracle:Choose a creature type other than Wall. Each creature becomes that type until end of turn. diff --git a/forge-gui/res/cardsfolder/t/takklemaggot.txt b/forge-gui/res/cardsfolder/t/takklemaggot.txt index cff83591be1..70529d3ce76 100644 --- a/forge-gui/res/cardsfolder/t/takklemaggot.txt +++ b/forge-gui/res/cardsfolder/t/takklemaggot.txt @@ -10,7 +10,7 @@ SVar:TrigPutCounter:DB$ PutCounter | Defined$ Enchanted | CounterType$ M0M1 | Co T:Mode$ ChangesZone | ValidCard$ Card.AttachedBy | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigChoose | TriggerDescription$ When enchanted creature dies, that creature's controller chooses a creature that CARDNAME could enchant. If they do, return CARDNAME to the battlefield under your control attached to that creature. If they don't, return CARDNAME to the battlefield under your control as a non-Aura enchantment. It loses "enchant creature" and gains "At the beginning of that player's upkeep, CARDNAME deals 1 damage to them." SVar:TrigChoose:DB$ ChooseCard | Defined$ TriggeredCardController | Choices$ Creature.CanBeEnchantedBy | Mandatory$ True | SubAbility$ DBChangeZone SVar:DBChangeZone:DB$ ChangeZone | Defined$ Self | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | AttachedTo$ ChosenCard | ConditionDefined$ ChosenCard | ConditionPresent$ Creature | ConditionCompare$ GE1 | SubAbility$ DBAnimate -SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ Enchantment | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveKeywords$ Enchant creature | Triggers$ TrigUpkeep | ConditionDefined$ ChosenCard | ConditionPresent$ Creature | ConditionCompare$ EQ0 | SubAbility$ DBPump | Permanent$ True +SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ Enchantment | RemoveEnchantmentTypes$ True | RemoveKeywords$ Enchant creature | Triggers$ TrigUpkeep | ConditionDefined$ ChosenCard | ConditionPresent$ Creature | ConditionCompare$ EQ0 | SubAbility$ DBPump | Permanent$ True SVar:DBPump:DB$ Pump | RememberObjects$ TriggeredCardController | SubAbility$ DBChangeZone2 | ConditionDefined$ ChosenCard | ConditionPresent$ Creature | ConditionCompare$ EQ0 SVar:DBChangeZone2:DB$ ChangeZone | Defined$ Self | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | ConditionDefined$ ChosenCard | ConditionPresent$ Creature | ConditionCompare$ EQ0 SVar:TrigUpkeep:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player.IsRemembered | Execute$ TrigDmg | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of that player's upkeep, CARDNAME deals 1 damage to them. diff --git a/forge-gui/res/cardsfolder/t/trickery_charm.txt b/forge-gui/res/cardsfolder/t/trickery_charm.txt index 92b0b42d5d6..861cf054962 100644 --- a/forge-gui/res/cardsfolder/t/trickery_charm.txt +++ b/forge-gui/res/cardsfolder/t/trickery_charm.txt @@ -4,7 +4,7 @@ Types:Instant A:SP$ Charm | Cost$ U | Choices$ DBPump,DBChooseType,DBRearrage SVar:DBPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Flying | SpellDescription$ Target creature gains flying until end of turn. SVar:DBChooseType:DB$ ChooseType | Type$ Creature | Defined$ You | SubAbility$ DBAnimate | SpellDescription$ Target creature becomes the creature type of your choice until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | RemoveCreatureTypes$ True SVar:DBRearrage:DB$ RearrangeTopOfLibrary | Defined$ You | NumCards$ 4 | SpellDescription$ Look at the top four cards of your library, then put them back in any order. SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/trickery_charm.jpg diff --git a/forge-gui/res/cardsfolder/t/turn_burn.txt b/forge-gui/res/cardsfolder/t/turn_burn.txt index 68076e365e9..d66bd6e5b88 100644 --- a/forge-gui/res/cardsfolder/t/turn_burn.txt +++ b/forge-gui/res/cardsfolder/t/turn_burn.txt @@ -12,5 +12,5 @@ ALTERNATE Name:Burn ManaCost:1 R Types:Instant -A:SP$ DealDamage | Cost$ 1 R | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target creature or player. -Oracle:Burn deals 2 damage to target creature or player.\nFuse (You may cast one or both halves of this card from your hand.) +A:SP$ DealDamage | Cost$ 1 R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to any target. +Oracle:Burn deals 2 damage to any target.\nFuse (You may cast one or both halves of this card from your hand.) diff --git a/forge-gui/res/cardsfolder/u/unnatural_selection.txt b/forge-gui/res/cardsfolder/u/unnatural_selection.txt index 58515141bd3..bd0254a1d5b 100644 --- a/forge-gui/res/cardsfolder/u/unnatural_selection.txt +++ b/forge-gui/res/cardsfolder/u/unnatural_selection.txt @@ -2,7 +2,7 @@ Name:Unnatural Selection ManaCost:1 U Types:Enchantment A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | InvalidTypes$ Wall | SubAbility$ DBAnimate | SpellDescription$ Choose a creature type other than Wall. Target creature becomes that type until end of turn. -SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True +SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | RemoveCreatureTypes$ True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/unnatural_selection.jpg Oracle:{1}: Choose a creature type other than Wall. Target creature becomes that type until end of turn. diff --git a/forge-gui/res/cardsfolder/v/veil_of_birds.txt b/forge-gui/res/cardsfolder/v/veil_of_birds.txt index 9afd3961eed..645d31fe877 100644 --- a/forge-gui/res/cardsfolder/v/veil_of_birds.txt +++ b/forge-gui/res/cardsfolder/v/veil_of_birds.txt @@ -2,6 +2,6 @@ Name:Veil of Birds ManaCost:U Types:Enchantment T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a spell, if CARDNAME is an enchantment, CARDNAME becomes a 1/1 Bird creature with flying. -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 1 | Toughness$ 1 | Keywords$ Flying | Types$ Creature,Bird | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 1 | Toughness$ 1 | Keywords$ Flying | Types$ Creature,Bird | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/veil_of_birds.jpg Oracle:When an opponent casts a spell, if Veil of Birds is an enchantment, Veil of Birds becomes a 1/1 Bird creature with flying. diff --git a/forge-gui/res/cardsfolder/v/veiled_apparition.txt b/forge-gui/res/cardsfolder/v/veiled_apparition.txt index 8c3139e8d6b..d45fa1b80d9 100644 --- a/forge-gui/res/cardsfolder/v/veiled_apparition.txt +++ b/forge-gui/res/cardsfolder/v/veiled_apparition.txt @@ -2,6 +2,6 @@ Name:Veiled Apparition ManaCost:1 U Types:Enchantment T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a spell, if CARDNAME is an enchantment, CARDNAME becomes a 3/3 Illusion creature with flying and "At the beginning of your upkeep, sacrifice CARDNAME unless you pay {1}{U}." -SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Keywords$ Flying & UpkeepCost:1 U | Types$ Creature,Illusion | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Keywords$ Flying & UpkeepCost:1 U | Types$ Creature,Illusion | RemoveCardTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/veiled_apparition.jpg Oracle:When an opponent casts a spell, if Veiled Apparition is an enchantment, Veiled Apparition becomes a 3/3 Illusion creature with flying and "At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}." diff --git a/forge-gui/res/cardsfolder/v/veiled_crocodile.txt b/forge-gui/res/cardsfolder/v/veiled_crocodile.txt index 5094be09ed7..6d0acc07fc2 100644 --- a/forge-gui/res/cardsfolder/v/veiled_crocodile.txt +++ b/forge-gui/res/cardsfolder/v/veiled_crocodile.txt @@ -2,7 +2,7 @@ Name:Veiled Crocodile ManaCost:2 U Types:Enchantment T:Mode$ Always | CheckSVar$ X | SVarCompare$ EQ0 | TriggerZones$ Battlefield | Execute$ TrigVCAnimate | IsPresent$ Card.Self+Enchantment | ResolvingCheck$ IsPresent | TriggerDescription$ When a player has no cards in hand, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Crocodile creature. -SVar:TrigVCAnimate:DB$ Animate | Types$ Creature,Crocodile | Power$ 4 | Toughness$ 4 | OverwriteTypes$ True | Permanent$ True +SVar:TrigVCAnimate:DB$ Animate | Types$ Creature,Crocodile | Power$ 4 | Toughness$ 4 | RemoveCardTypes$ True | Permanent$ True SVar:X:PlayerCountPlayers$LowestValidHand Card.YouOwn SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/veiled_crocodile.jpg diff --git a/forge-gui/res/cardsfolder/v/veiled_sentry.txt b/forge-gui/res/cardsfolder/v/veiled_sentry.txt index 10734438793..9ece8f80487 100644 --- a/forge-gui/res/cardsfolder/v/veiled_sentry.txt +++ b/forge-gui/res/cardsfolder/v/veiled_sentry.txt @@ -2,7 +2,7 @@ Name:Veiled Sentry ManaCost:U Types:Enchantment T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Opponent | Execute$ TrigAnimate | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | TriggerDescription$ When an opponent casts a spell, if CARDNAME is an enchantment, CARDNAME becomes an Illusion creature with power and toughness each equal to that spell's converted mana cost. -SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ X | Toughness$ X | Types$ Creature,Illusion | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ X | Toughness$ X | Types$ Creature,Illusion | RemoveCardTypes$ True | Permanent$ True SVar:X:TriggerCount$CastSACMC SVar:Picture:http://www.wizards.com/global/images/magic/general/veiled_sentry.jpg Oracle:When an opponent casts a spell, if Veiled Sentry is an enchantment, Veiled Sentry becomes an Illusion creature with power and toughness each equal to that spell's converted mana cost. diff --git a/forge-gui/res/cardsfolder/v/veiled_serpent.txt b/forge-gui/res/cardsfolder/v/veiled_serpent.txt index 10c554c0a09..14f8a4ee66d 100644 --- a/forge-gui/res/cardsfolder/v/veiled_serpent.txt +++ b/forge-gui/res/cardsfolder/v/veiled_serpent.txt @@ -2,7 +2,7 @@ Name:Veiled Serpent ManaCost:2 U Types:Enchantment T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a spell, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Serpent creature that can't attack unless defending player controls an Island. -SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ 4 | Toughness$ 4 | staticAbilities$ VeiledSerpentST | Types$ Creature,Serpent | OverwriteTypes$ True | Permanent$ True +SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ 4 | Toughness$ 4 | staticAbilities$ VeiledSerpentST | Types$ Creature,Serpent | RemoveCardTypes$ True | Permanent$ True K:Cycling:2 SVar:VeiledSerpentST:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. SVar:Picture:http://www.wizards.com/global/images/magic/general/veiled_serpent.jpg From 95cf25d531e12180f4a3f69f89165213ed724108 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Sat, 26 May 2018 17:13:54 +0200 Subject: [PATCH 9/9] Ageless Sentinels: fixed RemoveCreatureTypes --- forge-gui/res/cardsfolder/a/ageless_sentinels.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/a/ageless_sentinels.txt b/forge-gui/res/cardsfolder/a/ageless_sentinels.txt index 62827c22a5b..0a5f8bf39ed 100644 --- a/forge-gui/res/cardsfolder/a/ageless_sentinels.txt +++ b/forge-gui/res/cardsfolder/a/ageless_sentinels.txt @@ -5,6 +5,6 @@ PT:4/4 K:Flying K:Defender T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ Animate | TriggerDescription$ When CARDNAME blocks, it becomes a Bird Giant, and it loses defender. -SVar:Animate:DB$ Animate | Defined$ TriggeredBlocker | Types$ Bird,Giant | RemoveCardTypes$ True | RemoveKeywords$ Defender | Permanent$ True +SVar:Animate:DB$ Animate | Defined$ TriggeredBlocker | Types$ Bird,Giant | RemoveCreatureTypes$ True | RemoveKeywords$ Defender | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/ageless_sentinels.jpg Oracle:Defender (This creature can't attack.)\nFlying\nWhen Ageless Sentinels blocks, it becomes a Bird Giant, and it loses defender. (It's no longer a Wall. This effect lasts indefinitely.)