diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 2f929466932..14ad8377db4 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -261,7 +261,6 @@ public class Game { return null; } - public void addPlayer(int id, Player player) { playerCache.put(id, player); } diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 3ac81fc393d..f28ecbc75cd 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -1535,7 +1535,7 @@ public class GameAction { } } - // 704.5z If a player controls a permanent with start your engines! and that player has no speed, that player’s speed becomes 1. See rule 702.179, “Start Your Engines!” + // 704.5z If a player controls a permanent with start your engines! and that player has no speed, that player’s speed becomes 1. if (p.getSpeed() == 0 && p.getCardsIn(ZoneType.Battlefield).anyMatch(c -> c.hasKeyword(Keyword.START_YOUR_ENGINES))) { p.increaseSpeed(); checkAgain = true; @@ -1550,6 +1550,7 @@ public class GameAction { } // 704.5m World rule checkAgain |= handleWorldRule(noRegCreats); + // only check static abilities once after destroying all the creatures // (e.g. helpful for Erebos's Titan and another creature dealing lethal damage to each other simultaneously) setHoldCheckingStaticAbilities(true); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java index ab5238988bd..3229c4d31fd 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java @@ -122,7 +122,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect { } } - if (validTypes.isEmpty() && sa.hasParam("Note")) { + if (validTypes.isEmpty() && sa.hasParam("TypesFromDefined")) { // OK to end up with no choices/have nothing new to note } else if (!validTypes.isEmpty()) { for (final Player p : tgtPlayers) { 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 7f582dd9b06..46436ecab53 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1692,12 +1692,12 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr @Override public void addCounterInternal(final CounterType counterType, final int n, final Player source, final boolean fireEvents, GameEntityCounterTable table, Map params) { int addAmount = n; - // Rules say it is only a SBA, but is it checked there too? + if (counterType.is(CounterEnumType.DREAM) && hasKeyword("CARDNAME can't have more than seven dream counters on it.")) { addAmount = Math.min(addAmount, 7 - getCounters(CounterEnumType.DREAM)); } if (addAmount <= 0 || !canReceiveCounters(counterType)) { - // As per rule 107.1b + // CR 107.1b return; } 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 084f94e370a..8c707bffef3 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1050,7 +1050,7 @@ public class CardFactoryUtil { inst.addTrigger(dethroneTrigger); } else if (keyword.equals("Double team")) { - final String trigString = "Mode$ Attacks | ValidCard$ Card.Self+nonToken | TriggerZones$ Battlefield" + + final String trigString = "Mode$ Attacks | ValidCard$ Card.Self+!token | TriggerZones$ Battlefield" + " | Secondary$ True | TriggerDescription$ Double team (" + inst.getReminderText() + ")"; final String maSt = "DB$ MakeCard | DefinedName$ Self | Zone$ Hand | RememberMade$ True | Conjure$ True"; final String puSt = "DB$ Pump | RememberObjects$ Self"; @@ -4129,7 +4129,7 @@ public class CardFactoryUtil { SpellAbility saExile = AbilityFactory.getAbility(abExile, card); - String abEffect = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ForgetOnMoved$ Exile | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.!copiedSpell+nonToken"; + String abEffect = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ForgetOnMoved$ Exile | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.!copiedSpell+!token"; AbilitySub saEffect = (AbilitySub)AbilityFactory.getAbility(abEffect, card); StringBuilder sbPlay = new StringBuilder(); 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 b8c6241363e..7a30590eaaa 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1163,7 +1163,7 @@ public class CardProperty { } else if (prop.isEmpty() && dmgSource.equalsWithGameTimestamp(source)) { found = true; - } else if (dmgSource.isValid(prop.split(","), sourceController, source, spellAbility)) { + } else if (dmgSource.isValid(prop.split(";"), sourceController, source, spellAbility)) { found = true; } if (found) { @@ -1410,10 +1410,6 @@ public class CardProperty { if (property.contains("Created") && card.getCastSA() != null) { return false; } - } else if (property.startsWith("nonToken")) { - if (card.isToken() || card.isTokenCard()) { - return false; - } } else if (property.startsWith("copiedSpell")) { if (!card.isCopiedSpell()) { return false; diff --git a/forge-gui/res/adventure/common/custom_cards/chefs_boss_effect.txt b/forge-gui/res/adventure/common/custom_cards/chefs_boss_effect.txt index e0137018856..1d9b65aae32 100644 --- a/forge-gui/res/adventure/common/custom_cards/chefs_boss_effect.txt +++ b/forge-gui/res/adventure/common/custom_cards/chefs_boss_effect.txt @@ -2,7 +2,7 @@ Name:Chef's Boss Effect ManaCost:no cost Colors:blue,green,white Types:Enchantment -S:Mode$ Continuous | AddAbility$ FoodSac | AddType$ Food & Artifact | Affected$ Creature.nonToken | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Nontoken creature are Food artifacts in addition to their other types and gain "{2}, {T}, Sacrifice this creature: You gain 3 life." +S:Mode$ Continuous | AddAbility$ FoodSac | AddType$ Food & Artifact | Affected$ Creature.!token | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Nontoken creature are Food artifacts in addition to their other types and gain "{2}, {T}, Sacrifice this creature: You gain 3 life." SVar:FoodSac:AB$ GainLife | Cost$ 2 T Sac<1/CARDNAME/this creature> | Defined$ You | LifeAmount$ 3 | SpellDescription$ You gain 3 life. T:Mode$ Sacrificed | ValidCard$ Food | Origin$ Any | Destination$ Battlefield | Execute$ TrigPutCounter | TriggerZones$ Command | TriggerDescription$ Whenever a player sacrifices a Food, put a flavor counter on Chef's Boss Effect. SVar:TrigPutCounter:DB$ PutCounter | CounterType$ FLAVOR diff --git a/forge-gui/res/adventure/common/custom_cards/fungus_of_slimefoots_boss_effect.txt b/forge-gui/res/adventure/common/custom_cards/fungus_of_slimefoots_boss_effect.txt index c753bda84f7..f86926dc0c5 100644 --- a/forge-gui/res/adventure/common/custom_cards/fungus_of_slimefoots_boss_effect.txt +++ b/forge-gui/res/adventure/common/custom_cards/fungus_of_slimefoots_boss_effect.txt @@ -8,6 +8,6 @@ SVar:ABMana:AB$Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}. T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Command | CheckSVar$ X | SVarCompare$ GE2 | Execute$ TrigConjure | TriggerDescription$ At the beginning of each end step, if two or more creatures died this turn, conjure a random Fungus onto the battlefield. SVar:TrigConjure:DB$ MakeCard | Conjure$ True | AtRandom$ True | Spellbook$ Cankerbloom,Corpsejack Menace,Undercellar Myconid,Utopia Mycon,Sporemound,Deathspore Thallid,Sporoloth Ancient,Thallid Shell-Dweller,Psychotrope Thallid,Sporecrown Thallid,Sporesower Thallid,Thallid | Zone$ Battlefield SVar:X:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature.YouCtrl -T:Mode$ ChangesZoneAll | ValidCards$ Creature.nonToken+YouCtrl | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Command | ActivationLimit$ 1 | Execute$ TrigToken | TriggerDescription$ Whenever one or more nontoken creatures you control die, create a 1/1 green Saproling creature token. This ability triggers only once each turn. +T:Mode$ ChangesZoneAll | ValidCards$ Creature.!token+YouCtrl | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Command | ActivationLimit$ 1 | Execute$ TrigToken | TriggerDescription$ Whenever one or more nontoken creatures you control die, create a 1/1 green Saproling creature token. This ability triggers only once each turn. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_1_1_saproling Oracle:Saprolings you control are Forest lands in addition to their other types.\nAt the beginning of each end step, if two or more creatures died this turn, conjure a random Fungus onto the battlefield. \nWhenever one or more nontoken creatures you control die, create a 1/1 green Saproling creature token. This ability triggers only once each turn. diff --git a/forge-gui/res/adventure/common/custom_cards/grolnok_boss_effect.txt b/forge-gui/res/adventure/common/custom_cards/grolnok_boss_effect.txt index cad295f89e6..105d3cb5395 100644 --- a/forge-gui/res/adventure/common/custom_cards/grolnok_boss_effect.txt +++ b/forge-gui/res/adventure/common/custom_cards/grolnok_boss_effect.txt @@ -3,7 +3,7 @@ ManaCost:no cost Colors:black,green,blue Types:Enchantment S:Mode$ Continuous | Affected$ Enchantment.nonAura+Other,Artifact | EffectZone$ Command | SetPower$ AffectedX | SetToughness$ AffectedX | AddType$ Creature | Description$ Artifacts and enchantments are creatures in addition to their other types and has base power and base toughness each equal to its mana value. -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonToken+OppCtrl | TriggerZones$ Command | Execute$ TrigDualCopy | TriggerDescription$ Whenever a nontoken creature an opponent controls enters, create a token that's a copy of that creature except it's a 1/1 green Frog. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.!token+OppCtrl | TriggerZones$ Command | Execute$ TrigDualCopy | TriggerDescription$ Whenever a nontoken creature an opponent controls enters, create a token that's a copy of that creature except it's a 1/1 green Frog. SVar:TrigDualCopy:DB$ CopyPermanent | Defined$ TriggeredCardLKICopy | SetPower$ 1 | SetToughness$ 1 | SetColor$ Green | SetCreatureTypes$ Frog SVar:AffectedX:Count$CardManaCost Oracle:Artifacts and enchantments are creatures in addition to their other types and has base power and base toughness each equal to its mana value.\nWhenever a nontoken creature an opponent controls enters, create a token that's a copy of that creature except it's a 1/1 green Frog. diff --git a/forge-gui/res/adventure/common/custom_cards/sliver_queen_boss_effect.txt b/forge-gui/res/adventure/common/custom_cards/sliver_queen_boss_effect.txt index 1de6587e731..c2b8479ea99 100644 --- a/forge-gui/res/adventure/common/custom_cards/sliver_queen_boss_effect.txt +++ b/forge-gui/res/adventure/common/custom_cards/sliver_queen_boss_effect.txt @@ -6,7 +6,7 @@ A:AB$ Token | Cost$ 4 | TokenAmount$ 1 | TokenScript$ c_1_1_sliver | ActivationZ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigCharm | TriggerDescription$ At the beginning of your upkeep, ABILITY. SVar:TrigCharm:DB$ Charm | Random$ True | Choices$ DBToken,DBChoose,DBSeek SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_1_1_sliver | SpellDescription$ Create a 1/1 colorless Sliver creature token. -SVar:DBChoose:DB$ ChooseCard | AtRandom$ True | Choices$ Creature.nonToken+OppCtrl | SubAbility$ DBCopy | SpellDescription$ Create a token of a random nontoken creature your opponent controls. That creature becomes a Sliver in addition to its other types. +SVar:DBChoose:DB$ ChooseCard | AtRandom$ True | Choices$ Creature.!token+OppCtrl | SubAbility$ DBCopy | SpellDescription$ Create a token of a random nontoken creature your opponent controls. That creature becomes a Sliver in addition to its other types. SVar:DBCopy:DB$ CopyPermanent | Defined$ ChosenCard | AddTypes$ Sliver | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True SVar:DBSeek:DB$ Seek | Type$ Card.Sliver | SpellDescription$ Seek a Sliver card. diff --git a/forge-gui/res/adventure/common/custom_cards/slobads_iron_boots.txt b/forge-gui/res/adventure/common/custom_cards/slobads_iron_boots.txt index 5df645c5387..c4337fd6677 100644 --- a/forge-gui/res/adventure/common/custom_cards/slobads_iron_boots.txt +++ b/forge-gui/res/adventure/common/custom_cards/slobads_iron_boots.txt @@ -2,7 +2,7 @@ Name:Slobad's Iron Boots ManaCost:no cost Types:Artifact S:Mode$ Continuous | Affected$ Creature.YouCtrl+Artifact | AddToughness$ 1 | AddPower$ 1 | EffectZone$ Command | Description$ Artifact Creatures you control get +1/+1 -T:Mode$ ChangesZone | ValidCard$ Artifact.nonToken+YouCtrl | ActivationLimit$ 1 | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigToken | TriggerZones$ Command | TriggerDescription$ Whenever a nontoken artifact you control is put into a graveyard from the battlefield, create a colorless artifact token named Scrap. This ability triggers only once each turn. +T:Mode$ ChangesZone | ValidCard$ Artifact.!token+YouCtrl | ActivationLimit$ 1 | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigToken | TriggerZones$ Command | TriggerDescription$ Whenever a nontoken artifact you control is put into a graveyard from the battlefield, create a colorless artifact token named Scrap. This ability triggers only once each turn. SVar:TrigToken:DB$ Token | TokenScript$ scrap A:AB$ Token | Cost$ 4 PayShards<2> Sac<3/Artifact> | ActivationLimit$ 1 | ActivationZone$ Command | TokenScript$ c_0_0_a_construct_total_artifacts | TokenOwner$ You | SubAbility$ DBExileSelf | SpellDescription$ Create a 0/0 colorless Construct artifact creature token with "This creature gets +1/+1 for each artifact you control." Exile Slobad's Iron Boots. SVar:DBExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile diff --git a/forge-gui/res/adventure/common/custom_cards/xira_boss_effect.txt b/forge-gui/res/adventure/common/custom_cards/xira_boss_effect.txt index ba6496d8a72..ec4fd395279 100644 --- a/forge-gui/res/adventure/common/custom_cards/xira_boss_effect.txt +++ b/forge-gui/res/adventure/common/custom_cards/xira_boss_effect.txt @@ -2,9 +2,9 @@ Name:Xira's Boss Effect ManaCost:no cost Colors:black,green,red Types:Enchantment -S:Mode$ Continuous | Affected$ Insect.YouCtrl+nonToken | EffectZone$ Command | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Double team | Description$ Nontoken Insects you control have +1/+1 and double team. +S:Mode$ Continuous | Affected$ Insect.YouCtrl+!token | EffectZone$ Command | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Double team | Description$ Nontoken Insects you control have +1/+1 and double team. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ PutCounterAll | TriggerDescription$ At the beginning of your upkeep, put an egg counter on each nontoken creature. -SVar:PutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.nonToken | CounterType$ EGG | CounterNum$ 1 +SVar:PutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.!token | CounterType$ EGG | CounterNum$ 1 T:Mode$ ChangesZone | Origin$ Battlefield | TriggerZones$ Command | Destination$ Graveyard | ValidCard$ Creature.counters_GE1_EGG | Execute$ TrigDraw | TriggerDescription$ Whenever a creature with an egg counter on it dies, draw a card and create X 1/1 black Insect creature token with flying where X is the amount of egg counters on that creature. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ DBToken SVar:DBToken:DB$ Token | TokenScript$ b_1_1_insect_flying | TokenAmount$ X diff --git a/forge-gui/res/adventure/common/custom_cards/xiras_hive.txt b/forge-gui/res/adventure/common/custom_cards/xiras_hive.txt index 480e468905a..e99ecb0b5d2 100644 --- a/forge-gui/res/adventure/common/custom_cards/xiras_hive.txt +++ b/forge-gui/res/adventure/common/custom_cards/xiras_hive.txt @@ -5,7 +5,7 @@ Types:Creature Insect PT:0/2 K:Defender K:Reach -S:Mode$ Continuous | Affected$ Insect.YouCtrl+nonToken | EffectZone$ Battlefield | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Double team | Description$ Nontoken Insects you control have +1/+1 and double team. +S:Mode$ Continuous | Affected$ Insect.YouCtrl+!token | EffectZone$ Battlefield | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Double team | Description$ Nontoken Insects you control have +1/+1 and double team. T:Mode$ DamageDone | ActivationLimit$ 1 | ValidSource$ Card.OppCtrl,Emblem.OppCtrl | ValidTarget$ You | TriggerZones$ Battlefield | Execute$ TrigCounter | TriggerDescription$ When a source an opponent controls deals damage to you for the first time each turn, put an egg counter on CARDNAME. SVar:TrigCounter:DB$ PutCounter | CounterType$ EGG | CounterNum$ 1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create X 1/1 black Insect tokens for each egg counter on CARDNAME. diff --git a/forge-gui/res/cardsfolder/a/aegar_the_freezing_flame.txt b/forge-gui/res/cardsfolder/a/aegar_the_freezing_flame.txt index 2021d582d90..28ae2d53d0f 100644 --- a/forge-gui/res/cardsfolder/a/aegar_the_freezing_flame.txt +++ b/forge-gui/res/cardsfolder/a/aegar_the_freezing_flame.txt @@ -2,6 +2,6 @@ Name:Aegar, the Freezing Flame ManaCost:1 U R Types:Legendary Creature Giant Wizard PT:3/3 -T:Mode$ ExcessDamage | ValidTarget$ Creature.OppCtrl+DamagedByGiant.YouCtrl,Creature.OppCtrl+DamagedByWizard.YouCtrl,Creature.OppCtrl+DamagedBySpell.YouCtrl,Planeswalker.OppCtrl+DamagedByGiant.YouCtrl,Planeswalker.OppCtrl+DamagedByWizard.YouCtrl,Planeswalker.OppCtrl+DamagedBySpell.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a creature or planeswalker an opponent controls is dealt excess damage, if a Giant, Wizard, or spell you controlled dealt damage to it this turn, draw a card. +T:Mode$ ExcessDamage | ValidTarget$ Creature.OppCtrl+DamagedByGiant.YouCtrl;Wizard.YouCtrl;Spell.YouCtrl,Planeswalker.OppCtrl+DamagedByGiant.YouCtrl;Wizard.YouCtrl;Spell.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a creature or planeswalker an opponent controls is dealt excess damage, if a Giant, Wizard, or spell you controlled dealt damage to it this turn, draw a card. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 Oracle:Whenever a creature or planeswalker an opponent controls is dealt excess damage, if a Giant, Wizard, or spell you controlled dealt damage to it this turn, draw a card. diff --git a/forge-gui/res/cardsfolder/b/bloodsoaked_altar.txt b/forge-gui/res/cardsfolder/b/bloodsoaked_altar.txt index 76d942f5def..f7c7c98f818 100644 --- a/forge-gui/res/cardsfolder/b/bloodsoaked_altar.txt +++ b/forge-gui/res/cardsfolder/b/bloodsoaked_altar.txt @@ -2,7 +2,7 @@ Name:Bloodsoaked Altar ManaCost:4 B B Types:Artifact A:AB$ Token | Cost$ T PayLife<2> Discard<1/Card> Sac<1/Creature> | TokenAmount$ 1 | TokenScript$ b_5_5_demon_flying | TokenOwner$ You | SorcerySpeed$ True | SpellDescription$ Create a 5/5 black Demon creature token with flying. Activate only as a sorcery. -SVar:AIPreference:DiscardCost$Card | SacCost$Creature.Token,Creature.cmcLE3 +SVar:AIPreference:DiscardCost$Card | SacCost$Creature.token,Creature.cmcLE3 AI:RemoveDeck:Random DeckHas:Ability$Token Oracle:{T}, Pay 2 life, Discard a card, Sacrifice a creature: Create a 5/5 black Demon creature token with flying. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/b/bushmeat_poacher.txt b/forge-gui/res/cardsfolder/b/bushmeat_poacher.txt index c9fd1f45c05..d42fb9572cb 100644 --- a/forge-gui/res/cardsfolder/b/bushmeat_poacher.txt +++ b/forge-gui/res/cardsfolder/b/bushmeat_poacher.txt @@ -5,6 +5,6 @@ PT:2/4 A:AB$ GainLife | Cost$ 1 T Sac<1/Creature.Other/another creature> | Defined$ You | LifeAmount$ X | SubAbility$ DBDraw | SpellDescription$ You gain life equal to the sacrificed creature's toughness. Draw a card. SVar:DBDraw:DB$ Draw | NumCards$ 1 SVar:X:Sacrificed$CardToughness -SVar:AIPreference:SacCost$Creature.Token,Creature.cmcLE3 +SVar:AIPreference:SacCost$Creature.token,Creature.cmcLE3 DeckHas:Ability$LifeGain Oracle:{1}, {T}, Sacrifice another creature: You gain life equal to the sacrificed creature's toughness. Draw a card. diff --git a/forge-gui/res/cardsfolder/h/hurler_cyclops.txt b/forge-gui/res/cardsfolder/h/hurler_cyclops.txt index 9a341643e94..5e6a24ed7c7 100644 --- a/forge-gui/res/cardsfolder/h/hurler_cyclops.txt +++ b/forge-gui/res/cardsfolder/h/hurler_cyclops.txt @@ -3,6 +3,6 @@ ManaCost:3 R R Types:Creature Cyclops PT:5/4 A:AB$ DealDamage | Cost$ 1 Sac<1/Creature.Other/another creature> | ValidTgts$ Any | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to any target. -SVar:AIPreference:SacCost$Creature.Token,Creature.cmcLE2 +SVar:AIPreference:SacCost$Creature.token,Creature.cmcLE2 AI:RemoveDeck:Random Oracle:{1}, Sacrifice another creature: Hurler Cyclops deals 1 damage to any target. diff --git a/forge-gui/res/cardsfolder/j/jan_jansen_chaos_crafter.txt b/forge-gui/res/cardsfolder/j/jan_jansen_chaos_crafter.txt index cb4956a5631..45791ceadaf 100644 --- a/forge-gui/res/cardsfolder/j/jan_jansen_chaos_crafter.txt +++ b/forge-gui/res/cardsfolder/j/jan_jansen_chaos_crafter.txt @@ -5,7 +5,7 @@ PT:3/3 K:Haste A:AB$ Token | Cost$ T Sac<1/Creature.Artifact/artifact creature> | TokenAmount$ 2 | TokenScript$ c_a_treasure_sac | SpellDescription$ Create two Treasure tokens. A:AB$ Token | Cost$ T Sac<1/Artifact.nonCreature/noncreature artifact> | TokenAmount$ 2 | TokenScript$ c_1_1_a_construct | SpellDescription$ Create two 1/1 colorless Construct artifact creature tokens. -SVar:AIPreference:SacCost$Artifact.nonCreature+Token+powerLE1+toughnessEQ1 +SVar:AIPreference:SacCost$Artifact.nonCreature+token+powerLE1+toughnessEQ1 DeckHas:Ability$Token|Sacrifice & Type$Treasure|Construct|Artifact DeckNeeds:Type$Artifact Oracle:Haste\n{T}, Sacrifice an artifact creature: Create two Treasure tokens.\n{T}, Sacrifice a noncreature artifact: Create two 1/1 colorless Construct artifact creature tokens. diff --git a/forge-gui/res/cardsfolder/j/junkyard_genius.txt b/forge-gui/res/cardsfolder/j/junkyard_genius.txt index 92d25849cff..ae5e1007d17 100644 --- a/forge-gui/res/cardsfolder/j/junkyard_genius.txt +++ b/forge-gui/res/cardsfolder/j/junkyard_genius.txt @@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigToken:DB$ Token | TokenTapped$ True | TokenScript$ c_a_powerstone A:AB$ PumpAll | Cost$ 1 B R Sac<1/Creature.Other;Artifact.Other/another creature or artifact> | ValidCards$ Creature.YouCtrl+StrictlyOther | NumAtt$ 1 | KW$ Menace & Haste | SpellDescription$ Until end of turn, other creatures you control get +1/+0 and gain menace and haste. SVar:PlayMain1:TRUE -SVar:AIPreference:SacCost$Artifact.Token,Creature.Other+cmcLE2,Artifact.cmcEQ1 +SVar:AIPreference:SacCost$Artifact.token,Creature.Other+cmcLE2,Artifact.cmcEQ1 DeckHas:Ability$Token|Sacrifice & Type$Artifact DeckHints:Type$Artifact Oracle:When Junkyard Genius enters, create a tapped Powerstone token. (It's an artifact with "{T}: Add {C}. This mana can't be spent to cast a nonartifact spell.")\n{1}{B}{R}, Sacrifice another creature or artifact: Until end of turn, other creatures you control get +1/+0 and gain menace and haste. diff --git a/forge-gui/res/cardsfolder/k/ketramose_the_new_dawn.txt b/forge-gui/res/cardsfolder/k/ketramose_the_new_dawn.txt index f75bb008e2f..0d53e535f36 100644 --- a/forge-gui/res/cardsfolder/k/ketramose_the_new_dawn.txt +++ b/forge-gui/res/cardsfolder/k/ketramose_the_new_dawn.txt @@ -6,7 +6,7 @@ K:Menace K:Lifelink K:Indestructible S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't attack or block. | IsPresent$ Card | PresentZone$ Exile | PresentCompare$ LT7 | Description$ NICKNAME can't attack or block unless there are seven or more cards in exile. -T:Mode$ ChangesZoneAll | ValidCards$ Card.nonToken | Origin$ Battlefield,Graveyard | Destination$ Exile | TriggerZones$ Battlefield | PlayerTurn$ True | Execute$ TrigDraw | TriggerDescription$ Whenever one or more cards are put into exile from graveyards and/or the battlefield during your turn, you draw a card and lose 1 life. +T:Mode$ ChangesZoneAll | ValidCards$ Card.!token | Origin$ Battlefield,Graveyard | Destination$ Exile | TriggerZones$ Battlefield | PlayerTurn$ True | Execute$ TrigDraw | TriggerDescription$ Whenever one or more cards are put into exile from graveyards and/or the battlefield during your turn, you draw a card and lose 1 life. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ DBLoseLife SVar:DBLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 1 Oracle:Menace, lifelink, indestructible\nKetramose can't attack or block unless there are seven or more cards in exile.\nWhenever one or more cards are put into exile from graveyards and/or the battlefield during your turn, you draw a card and lose 1 life. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/k/kill_zone_acrobat.txt b/forge-gui/res/cardsfolder/k/kill_zone_acrobat.txt index ab2fab045c5..db739f53a28 100644 --- a/forge-gui/res/cardsfolder/k/kill_zone_acrobat.txt +++ b/forge-gui/res/cardsfolder/k/kill_zone_acrobat.txt @@ -5,7 +5,7 @@ PT:3/2 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, you may sacrifice another creature or artifact. If you do, CARDNAME gains flying until end of turn. SVar:TrigPump:AB$ Pump | Cost$ Sac<1/Creature.Other;Artifact.Other/another creature or artifact> | Defined$ Self | KW$ Flying SVar:PlayMain1:TRUE -SVar:AIPreference:SacCost$Artifact.Token,Creature.Other+cmcLE2+withoutFlying,Artifact.cmcEQ1 +SVar:AIPreference:SacCost$Artifact.token,Creature.Other+cmcLE2+withoutFlying,Artifact.cmcEQ1 SVar:HasAttackEffect:TRUE DeckHas:Ability$Sacrifice DeckHints:Type$Artifact diff --git a/forge-gui/res/cardsfolder/k/kumano_faces_kakkazan_etching_of_kumano.txt b/forge-gui/res/cardsfolder/k/kumano_faces_kakkazan_etching_of_kumano.txt index af962b2c653..21232e4f5b4 100644 --- a/forge-gui/res/cardsfolder/k/kumano_faces_kakkazan_etching_of_kumano.txt +++ b/forge-gui/res/cardsfolder/k/kumano_faces_kakkazan_etching_of_kumano.txt @@ -24,6 +24,6 @@ Colors:red Types:Enchantment Creature Human Shaman PT:2/2 K:Haste -R:Event$ Moved | ValidLKI$ Creature.DamagedByCard.YouCtrl,Creature.DamagedByEmblem.YouCtrl | Destination$ Graveyard | ReplaceWith$ DBExile | ActiveZones$ Battlefield | Description$ If a creature dealt damage this turn by a source you controlled would die, exile it instead. +R:Event$ Moved | ValidLKI$ Creature.DamagedByCard.YouCtrl;Emblem.YouCtrl | Destination$ Graveyard | ReplaceWith$ DBExile | ActiveZones$ Battlefield | Description$ If a creature dealt damage this turn by a source you controlled would die, exile it instead. SVar:DBExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Battlefield | Destination$ Exile Oracle:Haste\nIf a creature dealt damage this turn by a source you controlled would die, exile it instead. diff --git a/forge-gui/res/cardsfolder/m/malevolent_noble.txt b/forge-gui/res/cardsfolder/m/malevolent_noble.txt index 012f8ec33bc..340dc45f6f5 100644 --- a/forge-gui/res/cardsfolder/m/malevolent_noble.txt +++ b/forge-gui/res/cardsfolder/m/malevolent_noble.txt @@ -3,6 +3,6 @@ ManaCost:1 B Types:Creature Human Noble PT:2/2 A:AB$ PutCounter | Cost$ 2 Sac<1/Artifact;Creature.Other/artifact or another creature> | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on CARDNAME. -SVar:AIPreference:SacCost$Artifact.Token,Creature.Other+cmcLE2,Artifact.cmcEQ1 +SVar:AIPreference:SacCost$Artifact.token,Creature.Other+cmcLE2,Artifact.cmcEQ1 DeckHas:Ability$Counters Oracle:{2}, Sacrifice an artifact or another creature: Put a +1/+1 counter on Malevolent Noble. diff --git a/forge-gui/res/cardsfolder/m/melira_the_living_cure.txt b/forge-gui/res/cardsfolder/m/melira_the_living_cure.txt index ca25cddb388..1734ea5d8a0 100644 --- a/forge-gui/res/cardsfolder/m/melira_the_living_cure.txt +++ b/forge-gui/res/cardsfolder/m/melira_the_living_cure.txt @@ -7,7 +7,7 @@ SVar:OnlyOnePoison:DB$ ReplaceCounter | ValidCounterType$ POISON | Amount$ 1 | S SVar:DBImmediateTrigger:DB$ ImmediateTrigger | Static$ True | Execute$ TrigEffect | AfterReplacement$ True SVar:TrigEffect:DB$ Effect | StaticAbilities$ NoMorePoison SVar:NoMorePoison:Mode$ CantPutCounter | ValidPlayer$ You | CounterType$ POISON | Description$ You can't get additional poison counters this turn. -A:AB$ DelayedTrigger | Cost$ Exile<1/CARDNAME> | ValidTgts$ Creature.Other,Artifact.Other | TgtPrompt$ Select another target creature or artifact | Mode$ ChangesZone | RememberObjects$ Targeted | ValidCard$ Card.IsTriggerRemembered | Origin$ Battlefield | Destination$ Graveyard | ThisTurn$ True | Execute$ TrigReturn | StackDescription$ When {c:Targeted} is put into a graveyard this turn, return it to the battlefield under its owner's control. | SpellDescription$ Choose another target creature or artifact. When it's put into a graveyard this turn, return that card to the battlefield under its owner's control. +A:AB$ DelayedTrigger | Cost$ Exile<1/NICKNAME> | ValidTgts$ Creature.Other,Artifact.Other | TgtPrompt$ Select another target creature or artifact | Mode$ ChangesZone | RememberObjects$ Targeted | ValidCard$ Card.IsTriggerRemembered | Origin$ Battlefield | Destination$ Graveyard | ThisTurn$ True | Execute$ TrigReturn | StackDescription$ When {c:Targeted} is put into a graveyard this turn, return it to the battlefield under its owner's control. | SpellDescription$ Choose another target creature or artifact. When it's put into a graveyard this turn, return that card to the battlefield under its owner's control. SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredCard DeckHints:Ability$Graveyard|Sacrifice -Oracle:If you would get one or more poison counters, instead you get one poison counter and you can't get additional poison counters this turn.\nExile Melira, the Living Cure: Choose another target creature or artifact. When it's put into a graveyard this turn, return that card to the battlefield under its owner's control. +Oracle:If you would get one or more poison counters, instead you get one poison counter and you can't get additional poison counters this turn.\nExile Melira: Choose another target creature or artifact. When it's put into a graveyard this turn, return that card to the battlefield under its owner's control. diff --git a/forge-gui/res/cardsfolder/m/mold_folk.txt b/forge-gui/res/cardsfolder/m/mold_folk.txt index 59142327b13..6baf127b119 100644 --- a/forge-gui/res/cardsfolder/m/mold_folk.txt +++ b/forge-gui/res/cardsfolder/m/mold_folk.txt @@ -4,7 +4,7 @@ Types:Creature Fungus Warrior PT:1/1 K:Lifelink A:AB$ PutCounter | Cost$ 1 Sac<1/Creature.Other;Artifact/another creature or an artifact> | CounterType$ P1P1 | CounterNum$ 1 | PrecostDesc$ Mold Harvest — | SpellDescription$ Put a +1/+1 counter on CARDNAME. -SVar:AIPreference:SacCost$Artifact.Token,Creature.Other+cmcLE2,Artifact.cmcEQ1 +SVar:AIPreference:SacCost$Artifact.token,Creature.Other+cmcLE2,Artifact.cmcEQ1 DeckHints:Type$Artifact DeckHas:Ability$Counters|Sacrifice Oracle:Lifelink\nMold Harvest — {1}, Sacrifice another creature or an artifact: Put a +1/+1 counter on Mold Folk. diff --git a/forge-gui/res/cardsfolder/m/mutual_destruction.txt b/forge-gui/res/cardsfolder/m/mutual_destruction.txt index b45cb8fbe98..832601c8868 100644 --- a/forge-gui/res/cardsfolder/m/mutual_destruction.txt +++ b/forge-gui/res/cardsfolder/m/mutual_destruction.txt @@ -3,5 +3,5 @@ ManaCost:B Types:Sorcery S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Flash | IsPresent$ Permanent.YouCtrl+hasKeywordFlash | Description$ CARDNAME has flash as long as you control a permanent with flash. A:SP$ Destroy | Cost$ B Sac<1/Creature> | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Destroy target creature. -SVar:AIPreference:SacCost$Creature.Token,Creature.cmcLE2 +SVar:AIPreference:SacCost$Creature.token,Creature.cmcLE2 Oracle:This spell has flash as long as you control a permanent with flash.\nAs an additional cost to cast this spell, sacrifice a creature.\nDestroy target creature. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-kumano_faces_kakkazan_etching_of_kumano.txt b/forge-gui/res/cardsfolder/rebalanced/a-kumano_faces_kakkazan_etching_of_kumano.txt index 238ef7e3ee0..df6794699e2 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-kumano_faces_kakkazan_etching_of_kumano.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-kumano_faces_kakkazan_etching_of_kumano.txt @@ -23,6 +23,6 @@ ManaCost:no cost Colors:red Types:Enchantment Creature Human Shaman PT:2/2 -R:Event$ Moved | ValidLKI$ Creature.DamagedByCard.YouCtrl,Creature.DamagedByEmblem.YouCtrl | Destination$ Graveyard | ReplaceWith$ DBExile | ActiveZones$ Battlefield | Description$ If a creature dealt damage this turn by a source you controlled would die, exile it instead. +R:Event$ Moved | ValidLKI$ Creature.DamagedByCard.YouCtrl;Emblem.YouCtrl | Destination$ Graveyard | ReplaceWith$ DBExile | ActiveZones$ Battlefield | Description$ If a creature dealt damage this turn by a source you controlled would die, exile it instead. SVar:DBExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Battlefield | Destination$ Exile Oracle:If a creature dealt damage this turn by a source you controlled would die, exile it instead. diff --git a/forge-gui/res/cardsfolder/s/silvar_devourer_of_the_free.txt b/forge-gui/res/cardsfolder/s/silvar_devourer_of_the_free.txt index cd68de41ad8..3b0a818a187 100644 --- a/forge-gui/res/cardsfolder/s/silvar_devourer_of_the_free.txt +++ b/forge-gui/res/cardsfolder/s/silvar_devourer_of_the_free.txt @@ -6,7 +6,7 @@ K:Partner:Trynn, Champion of Freedom:Trynn K:Menace A:AB$ PutCounter | Cost$ Sac<1/Human> | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPump | SpellDescription$ Put a +1/+1 counter on CARDNAME. It gains indestructible until end of turn. SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Indestructible -SVar:AIPreference:SacCost$Creature.Token+Human,Creature.Human+cmcLE2 +SVar:AIPreference:SacCost$Creature.token+Human,Creature.Human+cmcLE2 DeckHas:Ability$Counters DeckHints:Name$Trynn, Champion of Freedom & Type$Human Oracle:Partner with Trynn, Champion of Freedom (When this creature enters, target player may put Trynn into their hand from their library, then shuffle.)\nMenace\nSacrifice a Human: Put a +1/+1 counter on Silvar, Devourer of the Free. It gains indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/s/sivriss_nightmare_speaker.txt b/forge-gui/res/cardsfolder/s/sivriss_nightmare_speaker.txt index 95310bce4c5..7d7d79214a3 100644 --- a/forge-gui/res/cardsfolder/s/sivriss_nightmare_speaker.txt +++ b/forge-gui/res/cardsfolder/s/sivriss_nightmare_speaker.txt @@ -7,7 +7,7 @@ SVar:DBMill:DB$ Mill | Imprint$ True | SubAbility$ DBReturn SVar:DBReturn:DB$ ChangeZone | Defined$ Imprinted | Origin$ Graveyard | Destination$ Hand | UnlessCost$ PayLife<3> | UnlessPayer$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True K:Choose a Background -SVar:AIPreference:SacCost$Artifact.Token,Creature.Other+cmcLE2,Artifact.cmcLE1 +SVar:AIPreference:SacCost$Artifact.token,Creature.Other+cmcLE2,Artifact.cmcLE1 DeckHints:Type$Artifact DeckHas:Ability$Sacrifice|Mill|Graveyard Oracle:{T}, Sacrifice another creature or an artifact: For each opponent, you mill a card, then return that card from your graveyard to your hand unless that player pays 3 life. (To mill a card, put the top card of your library into your graveyard.)\nChoose a Background (You can have a Background as a second commander.) diff --git a/forge-gui/res/cardsfolder/z/zahur_glorys_past.txt b/forge-gui/res/cardsfolder/z/zahur_glorys_past.txt index 602d08ca341..6583ca34e52 100644 --- a/forge-gui/res/cardsfolder/z/zahur_glorys_past.txt +++ b/forge-gui/res/cardsfolder/z/zahur_glorys_past.txt @@ -5,7 +5,7 @@ PT:3/2 K:Start your engines A:AB$ Surveil | Cost$ Sac<1/Creature.Other/another creature> | ActivationLimit$ 1 | SpellDescription$ Surveil 1. Activate only once each turn. S:Mode$ Continuous | Affected$ Card.Self | Condition$ MaxSpeed | AddTrigger$ TrigDies | Description$ Max speed — Whenever a nontoken creature you control dies, create a tapped 2/2 black Zombie creature token. -SVar:TrigDies:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+nonToken | TriggerZones$ Battlefield | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Max speed — Whenever a nontoken creature you control dies, create a tapped 2/2 black Zombie creature token. +SVar:TrigDies:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+!token | TriggerZones$ Battlefield | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Max speed — Whenever a nontoken creature you control dies, create a tapped 2/2 black Zombie creature token. SVar:TrigToken:DB$ Token | TokenScript$ b_2_2_zombie | TokenTapped$ True DeckHas:Ability$Sacrifice|Token Oracle:Start your engines! (If you have no speed, it starts at 1. It increases once on each of your turns when an opponent loses life. Max speed is 4.)\nSacrifice another creature: Surveil 1. Activate only once each turn.\nMax speed — Whenever a nontoken creature you control dies, create a tapped 2/2 black Zombie creature token.