diff --git a/forge-ai/src/main/java/forge/ai/AiAttackController.java b/forge-ai/src/main/java/forge/ai/AiAttackController.java index 8479062b148..a13a08f4e92 100644 --- a/forge-ai/src/main/java/forge/ai/AiAttackController.java +++ b/forge-ai/src/main/java/forge/ai/AiAttackController.java @@ -20,6 +20,7 @@ package forge.ai; import java.util.ArrayList; import java.util.List; +import forge.game.staticability.StaticAbilityMustAttack; import org.apache.commons.lang3.tuple.Pair; import com.google.common.base.Predicate; @@ -795,14 +796,15 @@ public class AiAttackController { && isEffectiveAttacker(ai, attacker, combat, defender)) { mustAttack = true; } else if (seasonOfTheWitch) { - // TODO: if there are other ways to tap this creature (like mana creature), then don't need to attack + //TODO: if there are other ways to tap this creature (like mana creature), then don't need to attack mustAttack = true; } else { - // TODO move to static Ability - if (attacker.hasKeyword("CARDNAME attacks each combat if able.") || attacker.hasStartOfKeyword("CARDNAME attacks specific player each combat if able")) { - // TODO switch defender if there's one without a cost or it's not the specific player + final List e = StaticAbilityMustAttack.entitiesMustAttack(attacker); + if (!e.isEmpty()) { mustAttack = true; - } else if (attacker.getController().getMustAttackEntityThisTurn() != null && CombatUtil.getAttackCost(ai.getGame(), attacker, defender) == null) { + // TODO switch defender if there's one without a cost or it's not the specific player + } else if (attacker.getController().getMustAttackEntityThisTurn() != null && + CombatUtil.getAttackCost(ai.getGame(), attacker, defender) == null) { mustAttack = true; } } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 28d7406df18..5ce236749b1 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -41,7 +41,6 @@ import forge.game.combat.Combat; import forge.game.combat.CombatUtil; import forge.game.cost.CostPayment; import forge.game.keyword.Keyword; -import forge.game.keyword.KeywordInterface; import forge.game.phase.Untap; import forge.game.player.Player; import forge.game.replacement.ReplacementEffect; @@ -49,6 +48,7 @@ import forge.game.replacement.ReplacementLayer; import forge.game.replacement.ReplacementType; import forge.game.spellability.SpellAbility; import forge.game.staticability.StaticAbility; +import forge.game.staticability.StaticAbilityMustAttack; import forge.game.trigger.Trigger; import forge.game.trigger.TriggerType; import forge.game.zone.ZoneType; @@ -114,24 +114,11 @@ public class ComputerUtilCombat { return false; } - // TODO replace with Static Ability - for (final String keyword : attacker.getHiddenExtrinsicKeywords()) { - if (keyword.startsWith("CARDNAME attacks specific player each combat if able")) { - final String defined = keyword.split(":")[1]; - final Player player = AbilityUtils.getDefinedPlayers(attacker, defined, null).get(0); - if (!defender.equals(player)) { - return false; - } - } - } - for (final KeywordInterface inst : attacker.getKeywords(Keyword.UNDEFINED)) { - final String keyword = inst.getOriginal(); - if (keyword.startsWith("CARDNAME attacks specific player each combat if able")) { - final String defined = keyword.split(":")[1]; - final Player player = AbilityUtils.getDefinedPlayers(attacker, defined, null).get(0); - if (!defender.equals(player)) { - return false; - } + final List mustAttackEnts = StaticAbilityMustAttack.entitiesMustAttack(attacker); + //if it contains only attacker, it only has a non-specific must attack + if (mustAttackEnts.size() > 1 || (mustAttackEnts.size() == 1 && mustAttackEnts.get(0) != attacker)) { + if (!mustAttackEnts.contains(defender)) { + return false; } } diff --git a/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java b/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java index 40aaa132c3f..00485a66921 100644 --- a/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java +++ b/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java @@ -2,6 +2,7 @@ package forge.ai; import com.google.common.base.Function; +import forge.game.GameEntity; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; import forge.game.card.Card; @@ -9,6 +10,9 @@ import forge.game.card.CounterEnumType; import forge.game.cost.CostPayEnergy; import forge.game.keyword.Keyword; import forge.game.spellability.SpellAbility; +import forge.game.staticability.StaticAbilityMustAttack; + +import java.util.List; public class CreatureEvaluator implements Function { @Override @@ -174,13 +178,16 @@ public class CreatureEvaluator implements Function { value = addValue(50 + (c.getCMC() * 5), "useless"); // reset everything - useless } else if (c.hasKeyword("CARDNAME can't block.")) { value -= subValue(10, "cant-block"); - } else if (c.hasKeyword("CARDNAME attacks each combat if able.")) { - value -= subValue(10, "must-attack"); - } else if (c.hasStartOfKeyword("CARDNAME attacks specific player each combat if able")) { - value -= subValue(10, "must-attack-player"); - }/* else if (c.hasKeyword("CARDNAME can block only creatures with flying.")) { + } else { + List mAEnt = StaticAbilityMustAttack.entitiesMustAttack(c); + if (mAEnt.contains(c)) { + value -= subValue(10, "must-attack"); + } else if (!mAEnt.isEmpty()) { + value -= subValue(10, "must-attack-player"); + }/* else if (c.hasKeyword("CARDNAME can block only creatures with flying.")) { value -= subValue(toughness * 5, "reverse-reach"); }//*/ + } if (c.hasSVar("DestroyWhenDamaged")) { value -= subValue((toughness - 1) * 9, "dies-to-dmg"); 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 2ad754dd473..a7c850abef4 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 @@ -205,6 +205,23 @@ public class AnimateEffect extends AnimateEffectBase { @Override protected String getStackDescription(SpellAbility sa) { final Card host = sa.getHostCard(); + final StringBuilder sb = new StringBuilder(); + final List tgts = getCardsfromTargets(sa); + final boolean justOne = tgts.size() == 1; + + if (sa.hasParam("IfDesc")) { + if (sa.getParam("IfDesc").equals("True") && sa.hasParam("SpellDescription")) { + String ifDesc = sa.getParam("SpellDescription"); + sb.append(ifDesc, 0, ifDesc.indexOf(",") + 1); + } else { + tokenizeString(sa, sb, sa.getParam("IfDesc")); + } + sb.append(" "); + } + + sb.append(sa.hasParam("DefinedDesc") ? sa.getParam("DefinedDesc") : Lang.joinHomogenous(tgts)); + sb.append(" "); + int initial = sb.length(); Integer power = null; if (sa.hasParam("Power")) { @@ -237,23 +254,6 @@ public class AnimateEffect extends AnimateEffectBase { colors.addAll(Arrays.asList(sa.getParam("Colors").split(","))); } - final StringBuilder sb = new StringBuilder(); - - final List tgts = getCardsfromTargets(sa); - final boolean justOne = tgts.size() == 1; - - if (sa.hasParam("IfDesc")) { - if (sa.getParam("IfDesc").equals("True") && sa.hasParam("SpellDescription")) { - String ifDesc = sa.getParam("SpellDescription"); - sb.append(ifDesc, 0, ifDesc.indexOf(",") + 1); - } else { - sb.append(sa.getParam("IfDesc")); - } - sb.append(" "); - } - - sb.append(Lang.joinHomogenous(tgts)).append(" "); - // if power is -1, we'll assume it's not just setting toughness if (power != null || toughness != null) { sb.append(justOne ? "has" : "have" ).append(" base "); @@ -272,7 +272,7 @@ public class AnimateEffect extends AnimateEffectBase { sb.append("color of that player's choice"); } else { for (int i = 0; i < colors.size(); i++) { - sb.append(colors.get(i)).append(" "); + sb.append(colors.get(i).toLowerCase()).append(" "); if (i < (colors.size() - 1)) { sb.append("and "); } @@ -295,24 +295,27 @@ public class AnimateEffect extends AnimateEffectBase { } // sb.append(abilities) // sb.append(triggers) - if (!permanent) { + if (!permanent && sb.length() > initial) { final String duration = sa.getParam("Duration"); if ("UntilEndOfCombat".equals(duration)) { - sb.append("until end of combat."); + sb.append("until end of combat"); } else if ("UntilHostLeavesPlay".equals(duration)) { - sb.append("until ").append(host).append(" leaves the battlefield."); + sb.append("until ").append(host).append(" leaves the battlefield"); } else if ("UntilYourNextUpkeep".equals(duration)) { - sb.append("until your next upkeep."); + sb.append("until your next upkeep"); } else if ("UntilYourNextTurn".equals(duration)) { - sb.append("until your next turn."); + sb.append("until your next turn"); } else if ("UntilControllerNextUntap".equals(duration)) { - sb.append("until its controller's next untap step."); + sb.append("until its controller's next untap step"); } else { - sb.append("until end of turn."); + sb.append("until end of turn"); } - } else { - sb.append("."); } + if (sa.hasParam("staticAbilities") && sa.getParam("staticAbilities").contains("MustAttack")) { + sb.append(sb.length() > initial ? " and " : ""); + sb.append(justOne ? "attacks" : "attack").append(" this turn if able"); + } + sb.append("."); return sb.toString(); } 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 f0a65aa9e94..74127fd2d4e 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3213,10 +3213,13 @@ public class CardFactoryUtil { "| SpellDescription$ (" + inst.getReminderText() + ")"; final String copyStr = "DB$ CopyPermanent | Defined$ Self | ImprintTokens$ True " + - "| AddKeywords$ Haste | RememberTokens$ True | TokenRemembered$ Player.IsRemembered"; + "| AddKeywords$ Haste | RememberTokens$ True | TokenRemembered$ Player.IsRemembered " + + "| AddStaticAbilities$ MustAttack"; - final String pumpStr = "DB$ PumpAll | ValidCards$ Creature.IsRemembered " + - "| KW$ HIDDEN CARDNAME attacks specific player each combat if able:Remembered"; + final String pumpStr = "DB$ Animate | Defined$ Creature.IsRemembered | staticAbilities$ AttackChosen "; + + final String attackStaticStr = "Mode$ MustAttack | ValidCreature$ Card.Self | MustAttack$ Remembered" + + " | Description$ This token copy attacks that opponent this turn if able."; final String pumpcleanStr = "DB$ Cleanup | ForgetDefined$ RememberedCard"; @@ -3237,6 +3240,8 @@ public class CardFactoryUtil { AbilitySub pumpSA = (AbilitySub) AbilityFactory.getAbility(pumpStr, card); copySA.setSubAbility(pumpSA); + sa.setSVar("MustAttack", attackStaticStr); + AbilitySub pumpcleanSA = (AbilitySub) AbilityFactory.getAbility(pumpcleanStr, card); pumpSA.setSubAbility(pumpcleanSA); diff --git a/forge-game/src/main/java/forge/game/combat/AttackRequirement.java b/forge-game/src/main/java/forge/game/combat/AttackRequirement.java index 59a4b4364e4..55e8681241b 100644 --- a/forge-game/src/main/java/forge/game/combat/AttackRequirement.java +++ b/forge-game/src/main/java/forge/game/combat/AttackRequirement.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import forge.game.staticability.StaticAbilityMustAttack; import org.apache.commons.lang3.tuple.Pair; import com.google.common.base.Function; @@ -11,10 +12,8 @@ import com.google.common.collect.Lists; import forge.game.Game; import forge.game.GameEntity; -import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardLists; -import forge.game.keyword.KeywordInterface; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.collect.FCollectionView; @@ -51,24 +50,13 @@ public class AttackRequirement { nAttackAnything += attacker.getGoaded().size(); } - // remove it when all of them are HIDDEN or static - for (final KeywordInterface inst : attacker.getKeywords()) { - final String keyword = inst.getOriginal(); - if (keyword.startsWith("CARDNAME attacks specific player each combat if able")) { - final String defined = keyword.split(":")[1]; - final GameEntity mustAttack2 = AbilityUtils.getDefinedPlayers(attacker, defined, null).get(0); - defenderSpecific.add(mustAttack2); - } else if (keyword.equals("CARDNAME attacks each combat if able.")) { - nAttackAnything++; - } - } - for (final String keyword : attacker.getHiddenExtrinsicKeywords()) { - if (keyword.startsWith("CARDNAME attacks specific player each combat if able")) { - final String defined = keyword.split(":")[1]; - final GameEntity mustAttack2 = AbilityUtils.getDefinedPlayers(attacker, defined, null).get(0); - defenderSpecific.add(mustAttack2); - } else if (keyword.equals("CARDNAME attacks each combat if able.")) { - nAttackAnything++; + //MustAttack static check + final List e = StaticAbilityMustAttack.entitiesMustAttack(attacker); + if (e.contains(attacker)) { + nAttackAnything++; + } else if (!e.isEmpty()) { + for (GameEntity mustAtt : e) { + defenderSpecific.add(mustAtt); } } @@ -78,7 +66,6 @@ public class AttackRequirement { } final Game game = attacker.getGame(); - for (Card c : game.getCardsIn(ZoneType.Battlefield)) { if (c.hasKeyword("Each opponent must attack you or a planeswalker you control with at least one creature each combat if able.")) { if (attacker.getController().isOpponentOf(c.getController()) && !defenderOrPWSpecific.containsKey(c.getController())) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustAttack.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustAttack.java new file mode 100644 index 00000000000..39aa37a932d --- /dev/null +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustAttack.java @@ -0,0 +1,50 @@ +package forge.game.staticability; + +import forge.game.Game; +import forge.game.GameEntity; +import forge.game.ability.AbilityUtils; +import forge.game.card.Card; +import forge.game.player.Player; +import forge.game.zone.ZoneType; + +import java.util.ArrayList; +import java.util.List; + +public class StaticAbilityMustAttack { + + static String MODE = "MustAttack"; + + public static List entitiesMustAttack(final Card attacker) { + final List entityList = new ArrayList<>(); + final Game game = attacker.getGame(); + for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { + for (final StaticAbility stAb : ca.getStaticAbilities()) { + if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + continue; + } + if (stAb.matchesValidParam(stAb.getParam("ValidCreature"), attacker)) { + if (stAb.hasParam("MustAttack")) { + List def = AbilityUtils.getDefinedEntities(stAb.getHostCard(), + stAb.getParam("MustAttack"), stAb); + for (GameEntity e : def) { + if (e instanceof Player) { + Player attackPl = (Player) e; + if (!game.getPhaseHandler().isPlayerTurn(attackPl)) { // CR 506.2 + entityList.add(e); + } + } else if (e instanceof Card) { + Card attackPW = (Card) e; + if (!game.getPhaseHandler().isPlayerTurn(attackPW.getController())) { // CR 506.2 + entityList.add(e); + } + } + } + } else { // if the list is only the attacker, the attacker must attack, but no specific entity + entityList.add(attacker); + } + } + } + } + return entityList; + } +} diff --git a/forge-gui/res/cardsfolder/a/aggravate.txt b/forge-gui/res/cardsfolder/a/aggravate.txt index 0476f150002..d0290c504b9 100644 --- a/forge-gui/res/cardsfolder/a/aggravate.txt +++ b/forge-gui/res/cardsfolder/a/aggravate.txt @@ -1,7 +1,8 @@ Name:Aggravate ManaCost:3 R R Types:Instant -A:SP$ DamageAll | Cost$ 3 R R | ValidTgts$ Player | TgtPrompt$ Select target player | NumDmg$ 1 | RememberDamaged$ True | ValidCards$ Creature | ValidDescription$ each creature target player controls. | SubAbility$ DBAttack | SpellDescription$ CARDNAME deals 1 damage to each creature target player controls. -SVar:DBAttack:DB$ Pump | Defined$ Remembered | KW$ HIDDEN CARDNAME attacks each combat if able. | SubAbility$ DBCleanup | SpellDescription$ Each creature dealt damage this way attacks this turn if able. +A:SP$ DamageAll | ValidTgts$ Player | NumDmg$ 1 | RememberDamaged$ True | ValidCards$ Creature | ValidDescription$ each creature target player controls. | SubAbility$ DBAnimate | SpellDescription$ CARDNAME deals 1 damage to each creature target player controls. +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | DefinedDesc$ Each creature dealt damage this way | staticAbilities$ MustAttack | SubAbility$ DBCleanup | SpellDescription$ Each creature dealt damage this way attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Aggravate deals 1 damage to each creature target player controls. Each creature dealt damage this way attacks this turn if able. diff --git a/forge-gui/res/cardsfolder/a/akoum_firebird.txt b/forge-gui/res/cardsfolder/a/akoum_firebird.txt index d07fad223d5..c851eb51e31 100644 --- a/forge-gui/res/cardsfolder/a/akoum_firebird.txt +++ b/forge-gui/res/cardsfolder/a/akoum_firebird.txt @@ -4,7 +4,7 @@ Types:Creature Phoenix PT:3/3 K:Flying K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Graveyard | Execute$ TrigChange | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, you may pay {4}{R}{R}. If you do, return CARDNAME from your graveyard to the battlefield. SVar:TrigChange:AB$ ChangeZone | Cost$ 4 R R | Origin$ Graveyard | Destination$ Battlefield SVar:SacMe:3 diff --git a/forge-gui/res/cardsfolder/a/alpine_guide.txt b/forge-gui/res/cardsfolder/a/alpine_guide.txt index b2abe465514..e47c5dd6856 100644 --- a/forge-gui/res/cardsfolder/a/alpine_guide.txt +++ b/forge-gui/res/cardsfolder/a/alpine_guide.txt @@ -4,7 +4,7 @@ Types:Snow Creature Human Scout PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a Mountain card, put that card onto the battlefield tapped, then shuffle. SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Mountain | ShuffleNonMandatory$ True -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME leaves the battlefield, sacrifice a Mountain. SVar:TrigSac:DB$ Sacrifice | SacValid$ Mountain | Defined$ You Oracle:When Alpine Guide enters the battlefield, you may search your library for a Mountain card, put that card onto the battlefield tapped, then shuffle.\nAlpine Guide attacks each combat if able.\nWhen Alpine Guide leaves the battlefield, sacrifice a Mountain. diff --git a/forge-gui/res/cardsfolder/a/angler_turtle.txt b/forge-gui/res/cardsfolder/a/angler_turtle.txt index 401ef1f0b30..90c22d2a1da 100644 --- a/forge-gui/res/cardsfolder/a/angler_turtle.txt +++ b/forge-gui/res/cardsfolder/a/angler_turtle.txt @@ -3,5 +3,5 @@ ManaCost:5 U U Types:Creature Turtle PT:5/7 K:Hexproof -S:Mode$ Continuous | Affected$ Creature.OppCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures your opponents control attack each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.OppCtrl | Description$ Creatures your opponents control attack each combat if able. Oracle:Hexproof\nCreatures your opponents control attack each combat if able. diff --git a/forge-gui/res/cardsfolder/a/anjes_ravager.txt b/forge-gui/res/cardsfolder/a/anjes_ravager.txt index df58842a38e..6a70b0355fd 100644 --- a/forge-gui/res/cardsfolder/a/anjes_ravager.txt +++ b/forge-gui/res/cardsfolder/a/anjes_ravager.txt @@ -2,7 +2,7 @@ Name:Anje's Ravager ManaCost:2 R Types:Creature Vampire Berserker PT:3/3 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, discard your hand, then draw three cards. SVar:TrigDiscard:DB$ Discard | Mode$ Hand | Defined$ You | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 3 diff --git a/forge-gui/res/cardsfolder/a/arcums_whistle.txt b/forge-gui/res/cardsfolder/a/arcums_whistle.txt index 3bdaa1445a2..033a7ee72b3 100644 --- a/forge-gui/res/cardsfolder/a/arcums_whistle.txt +++ b/forge-gui/res/cardsfolder/a/arcums_whistle.txt @@ -1,7 +1,8 @@ Name:Arcum's Whistle ManaCost:3 Types:Artifact -A:AB$ Pump | Cost$ 3 T | ActivationPhases$ Upkeep->BeginCombat | ActivationFirstCombat$ True | ValidTgts$ Creature.nonWall+ActivePlayerCtrl+notFirstTurnControlled | TgtPrompt$ Select target non-Wall creature the active player has controlled continuously since the beginning of the turn. | IsCurse$ True | KW$ HIDDEN CARDNAME attacks each combat if able. | UnlessCost$ X | UnlessPayer$ TargetedController | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DestroyPacifist | SpellDescription$ Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That player may pay {X}, where X is that creature's mana value. If they don't pay, the creature attacks this turn if able, and at the beginning of the next end step, destroy it if it didn't attack this turn. Activate only before attackers are declared. +A:AB$ Animate | Cost$ 3 T | ActivationPhases$ Upkeep->BeginCombat | ActivationFirstCombat$ True | ValidTgts$ Creature.nonWall+ActivePlayerCtrl+notFirstTurnControlled | TgtPrompt$ Select target non-Wall creature the active player has controlled continuously since the beginning of the turn | IsCurse$ True | staticAbilities$ MustAttack | UnlessCost$ X | UnlessPayer$ TargetedController | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DestroyPacifist | SpellDescription$ Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That player may pay {X}, where X is that creature's mana value. If they don't pay, the creature attacks this turn if able, and at the beginning of the next end step, destroy it if it didn't attack this turn. Activate only before attackers are declared. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDestroy | RememberObjects$ ParentTarget | TriggerDescription$ At the beginning of the end step, destroy that creature if it didn't attack this turn. SVar:TrigDestroy:DB$ Destroy | Defined$ DelayTriggerRemembered | ConditionDefined$ DelayTriggerRemembered | ConditionPresent$ Creature.notAttackedThisTurn | ConditionCompare$ GE1 SVar:X:Targeted$CardManaCost diff --git a/forge-gui/res/cardsfolder/a/ashen_monstrosity.txt b/forge-gui/res/cardsfolder/a/ashen_monstrosity.txt index 2f00fb1e5ca..93c57bca1ff 100644 --- a/forge-gui/res/cardsfolder/a/ashen_monstrosity.txt +++ b/forge-gui/res/cardsfolder/a/ashen_monstrosity.txt @@ -3,5 +3,5 @@ ManaCost:5 R R Types:Creature Spirit PT:7/4 K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Haste\nAshen Monstrosity attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/a/avatar_of_slaughter.txt b/forge-gui/res/cardsfolder/a/avatar_of_slaughter.txt index a860516082d..97514be054b 100644 --- a/forge-gui/res/cardsfolder/a/avatar_of_slaughter.txt +++ b/forge-gui/res/cardsfolder/a/avatar_of_slaughter.txt @@ -2,5 +2,6 @@ Name:Avatar of Slaughter ManaCost:6 R R Types:Creature Avatar PT:8/8 -S:Mode$ Continuous | Affected$ Creature | AddKeyword$ Double Strike | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ All creatures have double strike and attack each combat if able. +S:Mode$ Continuous | Affected$ Creature | AddKeyword$ Double Strike | Description$ All creatures have double strike and attack each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature | Secondary$ True Oracle:All creatures have double strike and attack each combat if able. diff --git a/forge-gui/res/cardsfolder/b/barricade_breaker.txt b/forge-gui/res/cardsfolder/b/barricade_breaker.txt index 6bf374053d4..ac99d6589e2 100644 --- a/forge-gui/res/cardsfolder/b/barricade_breaker.txt +++ b/forge-gui/res/cardsfolder/b/barricade_breaker.txt @@ -3,5 +3,5 @@ ManaCost:7 Types:Artifact Creature Juggernaut PT:7/5 K:Improvise -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Improvise (Your artifacts can help cast this spell. Each artifact you tap after you're done activating mana abilities pays for {1}.)\nBarricade Breaker attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/b/basandra_battle_seraph.txt b/forge-gui/res/cardsfolder/b/basandra_battle_seraph.txt index 65f5f4bbc88..342c23ad4a2 100644 --- a/forge-gui/res/cardsfolder/b/basandra_battle_seraph.txt +++ b/forge-gui/res/cardsfolder/b/basandra_battle_seraph.txt @@ -4,5 +4,6 @@ Types:Legendary Creature Angel PT:4/4 K:Flying S:Mode$ CantBeCast | ValidCard$ Card | Phases$ BeginCombat->EndCombat | Description$ Players can't cast spells during combat. -A:AB$ Pump | Cost$ R | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME attacks each combat if able. | IsCurse$ True | SpellDescription$ Target creature attacks this turn if able. +A:AB$ Animate | Cost$ R | ValidTgts$ Creature | staticAbilities$ MustAttack | IsCurse$ True | SpellDescription$ Target creature attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. Oracle:Flying\nPlayers can't cast spells during combat.\n{R}: Target creature attacks this turn if able. diff --git a/forge-gui/res/cardsfolder/b/battle_mad_ronin.txt b/forge-gui/res/cardsfolder/b/battle_mad_ronin.txt index 34c1c7e2c91..dc2f8e58206 100644 --- a/forge-gui/res/cardsfolder/b/battle_mad_ronin.txt +++ b/forge-gui/res/cardsfolder/b/battle_mad_ronin.txt @@ -2,6 +2,6 @@ Name:Battle-Mad Ronin ManaCost:1 R Types:Creature Human Samurai PT:1/1 -K:CARDNAME attacks each combat if able. K:Bushido:2 +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Bushido 2 (Whenever this creature blocks or becomes blocked, it gets +2/+2 until end of turn.)\nBattle-Mad Ronin attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/b/berserkers_of_blood_ridge.txt b/forge-gui/res/cardsfolder/b/berserkers_of_blood_ridge.txt index 8a32544e1c6..43eb6e8379a 100644 --- a/forge-gui/res/cardsfolder/b/berserkers_of_blood_ridge.txt +++ b/forge-gui/res/cardsfolder/b/berserkers_of_blood_ridge.txt @@ -2,5 +2,5 @@ Name:Berserkers of Blood Ridge ManaCost:4 R Types:Creature Human Berserker PT:4/4 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Berserkers of Blood Ridge attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/b/bident_of_thassa.txt b/forge-gui/res/cardsfolder/b/bident_of_thassa.txt index 4e73a679b95..a699af1719e 100644 --- a/forge-gui/res/cardsfolder/b/bident_of_thassa.txt +++ b/forge-gui/res/cardsfolder/b/bident_of_thassa.txt @@ -4,6 +4,6 @@ Types:Legendary Enchantment Artifact T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | CombatDamage$ True | OptionalDecider$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a creature you control deals combat damage to a player, you may draw a card. SVar:TrigDraw:DB$ Draw | NumCards$ 1 A:AB$ Effect | Cost$ 1 U T | StaticAbilities$ MustAttack | SpellDescription$ Creatures your opponents control attack this turn if able. -SVar:MustAttack:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.OppCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures your opponents control attack this turn if able. +SVar:MustAttack:Mode$ MustAttack | EffectZone$ Command | ValidCreature$ Creature.OppCtrl | Description$ Creatures your opponents control attack this turn if able. SVar:PlayMain1:TRUE Oracle:Whenever a creature you control deals combat damage to a player, you may draw a card.\n{1}{U}, {T}: Creatures your opponents control attack this turn if able. diff --git a/forge-gui/res/cardsfolder/b/bloodcrazed_neonate.txt b/forge-gui/res/cardsfolder/b/bloodcrazed_neonate.txt index a1366f152bd..645b3000c23 100644 --- a/forge-gui/res/cardsfolder/b/bloodcrazed_neonate.txt +++ b/forge-gui/res/cardsfolder/b/bloodcrazed_neonate.txt @@ -2,7 +2,8 @@ Name:Bloodcrazed Neonate ManaCost:1 R Types:Creature Vampire PT:2/1 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, put a +1/+1 counter on it. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +DeckHas:Ability$Counters Oracle:Bloodcrazed Neonate attacks each combat if able.\nWhenever Bloodcrazed Neonate deals combat damage to a player, put a +1/+1 counter on it. diff --git a/forge-gui/res/cardsfolder/b/bloodrock_cyclops.txt b/forge-gui/res/cardsfolder/b/bloodrock_cyclops.txt index ff16f7be583..f5335e855ed 100644 --- a/forge-gui/res/cardsfolder/b/bloodrock_cyclops.txt +++ b/forge-gui/res/cardsfolder/b/bloodrock_cyclops.txt @@ -2,5 +2,5 @@ Name:Bloodrock Cyclops ManaCost:2 R Types:Creature Cyclops PT:3/3 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Bloodrock Cyclops attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/b/bloodshed_fever.txt b/forge-gui/res/cardsfolder/b/bloodshed_fever.txt index abf693c1f9d..61a47bda819 100644 --- a/forge-gui/res/cardsfolder/b/bloodshed_fever.txt +++ b/forge-gui/res/cardsfolder/b/bloodshed_fever.txt @@ -2,6 +2,6 @@ Name:Bloodshed Fever ManaCost:R Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ R | ValidTgts$ Creature | AILogic$ Curse -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Enchanted creature attacks each combat if able. +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Curse +S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedBy | Description$ Enchanted creature attacks each combat if able. Oracle:Enchant creature\nEnchanted creature attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/b/boiling_blood.txt b/forge-gui/res/cardsfolder/b/boiling_blood.txt index 5e686f889e8..63cd8af2cd9 100644 --- a/forge-gui/res/cardsfolder/b/boiling_blood.txt +++ b/forge-gui/res/cardsfolder/b/boiling_blood.txt @@ -1,7 +1,7 @@ Name:Boiling Blood ManaCost:2 R Types:Instant -A:SP$ Pump | Cost$ 2 R | ValidTgts$ Creature | KW$ HIDDEN CARDNAME attacks each combat if able. | TgtPrompt$ Select target creature | SpellDescription$ Target creature attacks this turn if able. | SubAbility$ DBDraw -SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. -AI:RemoveDeck:All +A:SP$ Animate | ValidTgts$ Creature | staticAbilities$ MustAttack | SubAbility$ DBDraw | SpellDescription$ Target creature attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. +SVar:DBDraw:DB$ Draw | SpellDescription$ Draw a card. Oracle:Target creature attacks this turn if able.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/b/boros_battleshaper.txt b/forge-gui/res/cardsfolder/b/boros_battleshaper.txt index 81c0ed1349c..6d89b070f64 100644 --- a/forge-gui/res/cardsfolder/b/boros_battleshaper.txt +++ b/forge-gui/res/cardsfolder/b/boros_battleshaper.txt @@ -3,7 +3,8 @@ ManaCost:5 R W Types:Creature Minotaur Soldier PT:5/5 T:Mode$ Phase | Phase$ BeginCombat | TriggerZones$ Battlefield | Execute$ TrigMustAttackBlock | TriggerDescription$ At the beginning of each combat, up to one target creature attacks or blocks this combat if able and up to one target creature can't attack or block this combat. -SVar:TrigMustAttackBlock:DB$ Pump | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Choose target creature to attack or block if able | KW$ HIDDEN CARDNAME attacks each combat if able. & HIDDEN CARDNAME blocks each combat if able. | IsCurse$ True | Duration$ UntilEndOfCombat | SubAbility$ DBCantAttackBlock +SVar:TrigMustAttackBlock:DB$ Animate | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Choose target creature to attack or block if able | staticAbilities$ MustAttack | HiddenKeywords$ CARDNAME blocks each combat if able. | IsCurse$ True | Duration$ UntilEndOfCombat | SubAbility$ DBCantAttackBlock +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this combat if able. SVar:DBCantAttackBlock:DB$ Pump | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Choose target creature that cannot attack or block this combat | KW$ HIDDEN CARDNAME can't attack or block. | IsCurse$ True | Duration$ UntilEndOfCombat AI:RemoveDeck:All Oracle:At the beginning of each combat, up to one target creature attacks or blocks this combat if able and up to one target creature can't attack or block this combat. diff --git a/forge-gui/res/cardsfolder/b/bullwhip.txt b/forge-gui/res/cardsfolder/b/bullwhip.txt index 35bb4b8a38b..2e8f35140bb 100644 --- a/forge-gui/res/cardsfolder/b/bullwhip.txt +++ b/forge-gui/res/cardsfolder/b/bullwhip.txt @@ -1,6 +1,7 @@ Name:Bullwhip ManaCost:4 Types:Artifact -A:AB$ DealDamage | Cost$ 2 T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 1 | SubAbility$ DBPump | SpellDescription$ CARDNAME deals 1 damage to target creature. That creature attacks this turn if able. -SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ HIDDEN CARDNAME attacks each combat if able. +A:AB$ DealDamage | Cost$ 2 T | ValidTgts$ Creature | NumDmg$ 1 | SubAbility$ DBPump | SpellDescription$ CARDNAME deals 1 damage to target creature. That creature attacks this turn if able. +SVar:DBPump:DB$ Animate | Defined$ Targeted | staticAbilities$ MustAttack +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. Oracle:{2}, {T}: Bullwhip deals 1 damage to target creature. That creature attacks this turn if able. diff --git a/forge-gui/res/cardsfolder/c/chaos_dragon.txt b/forge-gui/res/cardsfolder/c/chaos_dragon.txt index 3eec0479b10..2e707f36fd5 100644 --- a/forge-gui/res/cardsfolder/c/chaos_dragon.txt +++ b/forge-gui/res/cardsfolder/c/chaos_dragon.txt @@ -4,7 +4,7 @@ Types:Creature Dragon PT:4/4 K:Flying K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigRollDice | TriggerDescription$ At the beginning of combat on your turn, each player rolls a d20. If one or more opponents had the highest result, CARDNAME can't attack those players or planeswalkers they control this combat. SVar:TrigRollDice:DB$ RollDice | Defined$ Player | Sides$ 20 | RememberHighestPlayer$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ STCantAttack | RememberObjects$ Player.Opponent+IsRemembered | Duration$ UntilEndOfCombat | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/c/chemisters_trick.txt b/forge-gui/res/cardsfolder/c/chemisters_trick.txt index 1c4b2541b33..34baf5a8af1 100644 --- a/forge-gui/res/cardsfolder/c/chemisters_trick.txt +++ b/forge-gui/res/cardsfolder/c/chemisters_trick.txt @@ -1,6 +1,9 @@ Name:Chemister's Trick ManaCost:U R Types:Instant -A:SP$ Pump | Cost$ U R | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control. | NumAtt$ -2 | KW$ HIDDEN CARDNAME attacks each combat if able. | SpellDescription$ Target creature you don't control gets -2/-0 until end of turn and attacks this turn if able. -A:SP$ PumpAll | Cost$ 3 U R | ValidCards$ Creature.YouDontCtrl | ValidDescription$ each creature you don't control. | NumAtt$ -2 | KW$ HIDDEN CARDNAME attacks each combat if able. | PrecostDesc$ Overload | CostDesc$ {3}{U}{R} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") | StackDescription$ Each creature you don't control gets -2/-0 until end of turn and attacks this turn if able. +A:SP$ Pump | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control | NumAtt$ -2 | RememberTargets$ True | SubAbility$ DBAnimate | StackDescription$ {c:Targeted} gets -2/-0 until end of turn and attacks this turn if able. | SpellDescription$ Target creature you don't control gets -2/-0 until end of turn and attacks this turn if able. +A:SP$ PumpAll | Cost$ 3 U R | ValidCards$ Creature.YouDontCtrl | ValidDescription$ each creature you don't control. | NumAtt$ -2 | RememberAllPumped$ True | SubAbility$ DBAnimate | PrecostDesc$ Overload | CostDesc$ {3}{U}{R} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") | StackDescription$ Each creature you don't control gets -2/-0 until end of turn and attacks this turn if able. +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | staticAbilities$ MustAttack | SubAbility$ DBCleanup | StackDescription$ None +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Target creature you don't control gets -2/-0 until end of turn and attacks this turn if able.\nOverload {3}{U}{R} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") diff --git a/forge-gui/res/cardsfolder/c/courtly_provocateur.txt b/forge-gui/res/cardsfolder/c/courtly_provocateur.txt index 9b5eb539636..0a7359e70a8 100644 --- a/forge-gui/res/cardsfolder/c/courtly_provocateur.txt +++ b/forge-gui/res/cardsfolder/c/courtly_provocateur.txt @@ -2,7 +2,8 @@ Name:Courtly Provocateur ManaCost:2 U Types:Creature Human Wizard PT:1/1 -A:AB$ Pump | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME attacks each combat if able. | IsCurse$ True | SpellDescription$ Target creature attacks this turn if able. +A:AB$ Animate | Cost$ T | ValidTgts$ Creature | staticAbilities$ MustAttack | IsCurse$ True | SpellDescription$ Target creature attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. A:AB$ Pump | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME blocks each combat if able. | SpellDescription$ Target creature blocks this turn if able. AI:RemoveDeck:All Oracle:{T}: Target creature attacks this turn if able.\n{T}: Target creature blocks this turn if able. diff --git a/forge-gui/res/cardsfolder/c/crazed_goblin.txt b/forge-gui/res/cardsfolder/c/crazed_goblin.txt index 949abe44054..03dc17ac778 100644 --- a/forge-gui/res/cardsfolder/c/crazed_goblin.txt +++ b/forge-gui/res/cardsfolder/c/crazed_goblin.txt @@ -2,5 +2,5 @@ Name:Crazed Goblin ManaCost:R Types:Creature Goblin Warrior PT:1/1 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Crazed Goblin attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/c/curse_of_the_nightly_hunt.txt b/forge-gui/res/cardsfolder/c/curse_of_the_nightly_hunt.txt index 20fa9c19d88..ce17dfd846c 100644 --- a/forge-gui/res/cardsfolder/c/curse_of_the_nightly_hunt.txt +++ b/forge-gui/res/cardsfolder/c/curse_of_the_nightly_hunt.txt @@ -2,6 +2,6 @@ Name:Curse of the Nightly Hunt ManaCost:2 R Types:Enchantment Aura Curse K:Enchant player -A:SP$ Attach | Cost$ 2 R | ValidTgts$ Player | AILogic$ Curse -S:Mode$ Continuous | Affected$ Creature.EnchantedPlayerCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures enchanted player controls attack each combat if able. +A:SP$ Attach | ValidTgts$ Player | AILogic$ Curse +S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedPlayerCtrl | Description$ Creatures enchanted player controls attack each combat if able. Oracle:Enchant player\nCreatures enchanted player controls attack each combat if able. diff --git a/forge-gui/res/cardsfolder/d/daring_fiendbonder.txt b/forge-gui/res/cardsfolder/d/daring_fiendbonder.txt index c39d5fdc782..94e95804686 100644 --- a/forge-gui/res/cardsfolder/d/daring_fiendbonder.txt +++ b/forge-gui/res/cardsfolder/d/daring_fiendbonder.txt @@ -3,7 +3,7 @@ ManaCost:3 B Types:Creature Human Warlock PT:5/1 K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. A:AB$ PutCounter | Cost$ 1 B ExileFromGrave<1/CARDNAME> | ActivationZone$ Graveyard | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ Indestructible | CounterNum$ 1 | SorcerySpeed$ True | SpellDescription$ Put an indestructible counter on target creature. Activate only as a sorcery. DeckHas:Ability$Counters|Graveyard SVar:AIPreference:ExileFromGraveCost$Card.Self diff --git a/forge-gui/res/cardsfolder/d/darksteel_juggernaut.txt b/forge-gui/res/cardsfolder/d/darksteel_juggernaut.txt index 9f01bac342b..e870b671c93 100644 --- a/forge-gui/res/cardsfolder/d/darksteel_juggernaut.txt +++ b/forge-gui/res/cardsfolder/d/darksteel_juggernaut.txt @@ -3,9 +3,9 @@ ManaCost:5 Types:Artifact Creature Juggernaut PT:*/* K:Indestructible -K:CARDNAME attacks each combat if able. S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of artifacts you control. SVar:X:Count$Valid Artifact.YouCtrl +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. SVar:BuffedBy:Artifact SVar:NoZeroToughnessAI:True Oracle:Indestructible\nDarksteel Juggernaut's power and toughness are each equal to the number of artifacts you control.\nDarksteel Juggernaut attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/d/dauthi_slayer.txt b/forge-gui/res/cardsfolder/d/dauthi_slayer.txt index 9dfdc6fb0c2..fea2769efb5 100644 --- a/forge-gui/res/cardsfolder/d/dauthi_slayer.txt +++ b/forge-gui/res/cardsfolder/d/dauthi_slayer.txt @@ -3,5 +3,5 @@ ManaCost:B B Types:Creature Dauthi Soldier PT:2/2 K:Shadow -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Shadow (This creature can block or be blocked by only creatures with shadow.)\nDauthi Slayer attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/d/deathbellow_raider.txt b/forge-gui/res/cardsfolder/d/deathbellow_raider.txt index 270cee7cbbf..cc2d2f82cc5 100644 --- a/forge-gui/res/cardsfolder/d/deathbellow_raider.txt +++ b/forge-gui/res/cardsfolder/d/deathbellow_raider.txt @@ -2,6 +2,6 @@ Name:Deathbellow Raider ManaCost:1 R Types:Creature Minotaur Berserker PT:2/3 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. A:AB$ Regenerate | Cost$ 2 B | SpellDescription$ Regenerate CARDNAME. Oracle:Deathbellow Raider attacks each combat if able.\n{2}{B}: Regenerate Deathbellow Raider. diff --git a/forge-gui/res/cardsfolder/d/dragons_rage_channeler.txt b/forge-gui/res/cardsfolder/d/dragons_rage_channeler.txt index fd9ee7082d3..986190c289c 100644 --- a/forge-gui/res/cardsfolder/d/dragons_rage_channeler.txt +++ b/forge-gui/res/cardsfolder/d/dragons_rage_channeler.txt @@ -4,6 +4,7 @@ Types:Creature Human Shaman PT:1/1 T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ DBSurveil | TriggerDescription$ Whenever you cast a noncreature spell, surveil 1. (Look at the top card of your library. You may put that card into your graveyard.) SVar:DBSurveil:DB$ Surveil | Defined$ You | Amount$ 1 -S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Flying & CARDNAME attacks each combat if able. | Condition$ Delirium | Description$ Delirium — As long as there are four or more card types in your graveyard, CARDNAME gets +2/+2, has flying, and attacks each combat if able. +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Flying | Condition$ Delirium | Description$ Delirium — As long as there are four or more card types in your graveyard, CARDNAME gets +2/+2, has flying, and attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Condition$ Delirium | Secondary$ True DeckHas:Ability$Delirium|Surveil Oracle:Whenever you cast a noncreature spell, surveil 1. (Look at the top card of your library. You may put that card into your graveyard.)\nDelirium — As long as there are four or more card types among cards in your graveyard, Dragon's Rage Channeler gets +2/+2, has flying, and attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/e/emberwilde_caliph.txt b/forge-gui/res/cardsfolder/e/emberwilde_caliph.txt index 63fce0d0251..ca37d548d1f 100644 --- a/forge-gui/res/cardsfolder/e/emberwilde_caliph.txt +++ b/forge-gui/res/cardsfolder/e/emberwilde_caliph.txt @@ -4,7 +4,7 @@ Types:Creature Djinn PT:4/4 K:Flying K:Trample -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ DamageDealtOnce | ValidSource$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ Whenever CARDNAME deals damage, you lose that much life. SVar:TrigLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ X SVar:X:TriggerCount$DamageAmount diff --git a/forge-gui/res/cardsfolder/f/flameborn_hellion.txt b/forge-gui/res/cardsfolder/f/flameborn_hellion.txt index 8b8a397d878..3b0c21385c7 100644 --- a/forge-gui/res/cardsfolder/f/flameborn_hellion.txt +++ b/forge-gui/res/cardsfolder/f/flameborn_hellion.txt @@ -3,5 +3,5 @@ ManaCost:5 R Types:Creature Hellion PT:5/4 K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Haste\nFlameborn Hellion attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/f/flamewake_phoenix.txt b/forge-gui/res/cardsfolder/f/flamewake_phoenix.txt index 77642231c9e..404d384ad91 100644 --- a/forge-gui/res/cardsfolder/f/flamewake_phoenix.txt +++ b/forge-gui/res/cardsfolder/f/flamewake_phoenix.txt @@ -4,7 +4,7 @@ Types:Creature Phoenix PT:2/2 K:Flying K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Graveyard | IsPresent$ Creature.YouCtrl+powerGE4 | Execute$ TrigReturn | TriggerDescription$ Ferocious — At the beginning of combat on your turn, if you control a creature with power 4 or greater, you may pay {R}. If you do, return Flamewake Phoenix from your graveyard to the battlefield. SVar:TrigReturn:AB$ ChangeZone | Cost$ R | Defined$ Self | Origin$ Graveyard | Destination$ Battlefield Oracle:Flying, haste\nFlamewake Phoenix attacks each combat if able.\nFerocious — At the beginning of combat on your turn, if you control a creature with power 4 or greater, you may pay {R}. If you do, return Flamewake Phoenix from your graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/f/frontline_rebel.txt b/forge-gui/res/cardsfolder/f/frontline_rebel.txt index 7e209a38197..a2eb9e23d70 100644 --- a/forge-gui/res/cardsfolder/f/frontline_rebel.txt +++ b/forge-gui/res/cardsfolder/f/frontline_rebel.txt @@ -2,5 +2,5 @@ Name:Frontline Rebel ManaCost:2 R Types:Creature Human Warrior PT:3/3 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Frontline Rebel attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/f/fumiko_the_lowblood.txt b/forge-gui/res/cardsfolder/f/fumiko_the_lowblood.txt index 081689561f1..0c4edf841d0 100644 --- a/forge-gui/res/cardsfolder/f/fumiko_the_lowblood.txt +++ b/forge-gui/res/cardsfolder/f/fumiko_the_lowblood.txt @@ -4,5 +4,5 @@ Types:Legendary Creature Human Samurai PT:3/2 S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Bushido:N | CalcKeywordN$ N | Description$ Fumiko the Lowblood has bushido X, where X is the number of attacking creatures. SVar:N:Count$Valid Creature.attacking -S:Mode$ Continuous | Affected$ Creature.OppCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures your opponents control attack each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.OppCtrl | Description$ Creatures your opponents control attack each combat if able. Oracle:Fumiko the Lowblood has bushido X, where X is the number of attacking creatures. (Whenever this creature blocks or becomes blocked, it gets +X/+X until end of turn.)\nCreatures your opponents control attack each combat if able. diff --git a/forge-gui/res/cardsfolder/f/furor_of_the_bitten.txt b/forge-gui/res/cardsfolder/f/furor_of_the_bitten.txt index 48c2be7ca4d..1158dcc7810 100644 --- a/forge-gui/res/cardsfolder/f/furor_of_the_bitten.txt +++ b/forge-gui/res/cardsfolder/f/furor_of_the_bitten.txt @@ -2,6 +2,7 @@ Name:Furor of the Bitten ManaCost:R Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ R | ValidTgts$ Creature | AILogic$ Pump -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Enchanted creature gets +2/+2 and attacks each combat if able. +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | Description$ Enchanted creature gets +2/+2 and attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedBy | Secondary$ True Oracle:Enchant creature\nEnchanted creature gets +2/+2 and attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/g/galvanic_juggernaut.txt b/forge-gui/res/cardsfolder/g/galvanic_juggernaut.txt index aca18e0b507..d6eb2f52879 100644 --- a/forge-gui/res/cardsfolder/g/galvanic_juggernaut.txt +++ b/forge-gui/res/cardsfolder/g/galvanic_juggernaut.txt @@ -2,7 +2,7 @@ Name:Galvanic Juggernaut ManaCost:4 Types:Artifact Creature Juggernaut PT:5/5 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:CARDNAME doesn't untap during your untap step. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$ Whenever another creature dies, untap CARDNAME SVar:TrigUntap:DB$ Untap | Defined$ Self diff --git a/forge-gui/res/cardsfolder/g/goblin_assault.txt b/forge-gui/res/cardsfolder/g/goblin_assault.txt index 407bf528377..902dbffd55f 100644 --- a/forge-gui/res/cardsfolder/g/goblin_assault.txt +++ b/forge-gui/res/cardsfolder/g/goblin_assault.txt @@ -1,7 +1,8 @@ Name:Goblin Assault ManaCost:2 R Types:Enchantment -S:Mode$ Continuous | Affected$ Creature.Goblin | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Goblin creatures attack each combat if able. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your upkeep, create a 1/1 red Goblin creature token with haste. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_goblin_haste | TokenOwner$ You +SVar:TrigToken:DB$ Token | TokenScript$ r_1_1_goblin_haste +S:Mode$ MustAttack | ValidCreature$ Creature.Goblin | Description$ Goblin creatures attack each combat if able. +DeckHas:Ability$Token & Type$Goblin Oracle:At the beginning of your upkeep, create a 1/1 red Goblin creature token with haste.\nGoblin creatures attack each combat if able. diff --git a/forge-gui/res/cardsfolder/g/goblin_brigand.txt b/forge-gui/res/cardsfolder/g/goblin_brigand.txt index 17f0d012916..8a5f7334780 100644 --- a/forge-gui/res/cardsfolder/g/goblin_brigand.txt +++ b/forge-gui/res/cardsfolder/g/goblin_brigand.txt @@ -2,5 +2,5 @@ Name:Goblin Brigand ManaCost:1 R Types:Creature Goblin Warrior PT:2/2 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Goblin Brigand attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/g/goblin_diplomats.txt b/forge-gui/res/cardsfolder/g/goblin_diplomats.txt index dc28cd8e6ce..acca5462ab4 100644 --- a/forge-gui/res/cardsfolder/g/goblin_diplomats.txt +++ b/forge-gui/res/cardsfolder/g/goblin_diplomats.txt @@ -2,7 +2,7 @@ Name:Goblin Diplomats ManaCost:1 R Types:Creature Goblin PT:2/1 -A:AB$ Effect | Cost$ T | Name$ Goblin Diplomats Effect | StaticAbilities$ KWPump | SpellDescription$ Each creature attacks this turn if able. -SVar:KWPump:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Each creature attacks this turn if able. +A:AB$ Effect | Cost$ T | StaticAbilities$ MustAttack | SpellDescription$ Each creature attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | EffectZone$ Command | ValidCreature$ Creature | Description$ Each creature attacks this turn if able. AI:RemoveDeck:All Oracle:{T}: Each creature attacks this turn if able. diff --git a/forge-gui/res/cardsfolder/g/goblin_rabblemaster.txt b/forge-gui/res/cardsfolder/g/goblin_rabblemaster.txt index 3f362ad0d5e..eba12cbc03c 100644 --- a/forge-gui/res/cardsfolder/g/goblin_rabblemaster.txt +++ b/forge-gui/res/cardsfolder/g/goblin_rabblemaster.txt @@ -2,11 +2,12 @@ Name:Goblin Rabblemaster ManaCost:2 R Types:Creature Goblin Warrior PT:2/2 -S:Mode$ Continuous | Affected$ Creature.Goblin+Other+YouCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Other Goblin creatures you control attack each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.Goblin+Other+YouCtrl | Description$ Other Goblin creatures you control attack each combat if able. T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, create a 1/1 red Goblin creature token with haste. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ r_1_1_goblin_haste +SVar:TrigToken:DB$ Token | TokenScript$ r_1_1_goblin_haste T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +1/+0 until end of turn for each other attacking Goblin. SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ X SVar:X:Count$Valid Goblin.attacking+Other SVar:PlayMain1:TRUE +DeckHas:Ability$Token Oracle:Other Goblin creatures you control attack each combat if able.\nAt the beginning of combat on your turn, create a 1/1 red Goblin creature token with haste.\nWhenever Goblin Rabblemaster attacks, it gets +1/+0 until end of turn for each other attacking Goblin. diff --git a/forge-gui/res/cardsfolder/g/grand_melee.txt b/forge-gui/res/cardsfolder/g/grand_melee.txt index b61ac7c0cf5..5ef2df8d40e 100644 --- a/forge-gui/res/cardsfolder/g/grand_melee.txt +++ b/forge-gui/res/cardsfolder/g/grand_melee.txt @@ -1,6 +1,7 @@ Name:Grand Melee ManaCost:3 R Types:Enchantment -S:Mode$ Continuous | Affected$ Creature | AddHiddenKeyword$ CARDNAME blocks each combat if able. & CARDNAME attacks each combat if able. | Description$ All creatures attack each combat if able. All creatures block each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature | Description$ All creatures attack each combat if able. All creatures block each combat if able. +S:Mode$ Continuous | Affected$ Creature | AddHiddenKeyword$ CARDNAME blocks each combat if able. | Secondary$ True SVar:NonStackingEffect:True Oracle:All creatures attack each combat if able.\nAll creatures block each combat if able. diff --git a/forge-gui/res/cardsfolder/g/grizzled_angler_grisly_anglerfish.txt b/forge-gui/res/cardsfolder/g/grizzled_angler_grisly_anglerfish.txt index 9a1d8a04126..b17d2b3681e 100644 --- a/forge-gui/res/cardsfolder/g/grizzled_angler_grisly_anglerfish.txt +++ b/forge-gui/res/cardsfolder/g/grizzled_angler_grisly_anglerfish.txt @@ -17,5 +17,5 @@ ManaCost:no cost Types:Creature Eldrazi Fish PT:4/5 A:AB$ Effect | Cost$ 6 | StaticAbilities$ MustAttack | SpellDescription$ Creatures your opponents control attack this turn if able. -SVar:MustAttack:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.OppCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures your opponents control attack this turn if able. +SVar:MustAttack:Mode$ MustAttack | EffectZone$ Command | ValidCreature$ Creature.OppCtrl | Description$ Creatures your opponents control attack this turn if able. Oracle:{6}: Creatures your opponents control attack this turn if able. diff --git a/forge-gui/res/cardsfolder/g/guise_of_fire.txt b/forge-gui/res/cardsfolder/g/guise_of_fire.txt index 7bba411f27c..20f954862e8 100644 --- a/forge-gui/res/cardsfolder/g/guise_of_fire.txt +++ b/forge-gui/res/cardsfolder/g/guise_of_fire.txt @@ -2,6 +2,7 @@ Name:Guise of Fire ManaCost:R Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ R | ValidTgts$ Creature | AILogic$ Curse -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ -1 | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Enchanted creature gets +1/-1 and attacks each combat if able. +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Curse +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ -1 | Description$ Enchanted creature gets +1/-1 and attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedBy | Secondary$ True Oracle:Enchant creature\nEnchanted creature gets +1/-1 and attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/h/haktos_the_unscarred.txt b/forge-gui/res/cardsfolder/h/haktos_the_unscarred.txt index 76aec636b4a..04a67d06060 100644 --- a/forge-gui/res/cardsfolder/h/haktos_the_unscarred.txt +++ b/forge-gui/res/cardsfolder/h/haktos_the_unscarred.txt @@ -2,7 +2,7 @@ Name:Haktos the Unscarred ManaCost:R R W W Types:Legendary Creature Human Warrior PT:6/1 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:ETBReplacement:Other:ChooseNum SVar:ChooseNum:DB$ ChooseNumber | Min$ 2 | Max$ 4 | Defined$ You | Random$ True | SpellDescription$ As NICKNAME enters the battlefield, choose 2, 3, or 4 at random. S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Protection:Card.cmcNEChosenNumber,Emblem:Protection from each mana value other than ChosenNumber | Description$ CARDNAME has protection from each mana value other than the chosen number. diff --git a/forge-gui/res/cardsfolder/h/hanweir_watchkeep_bane_of_hanweir.txt b/forge-gui/res/cardsfolder/h/hanweir_watchkeep_bane_of_hanweir.txt index 420dde961d5..4c406c5786c 100644 --- a/forge-gui/res/cardsfolder/h/hanweir_watchkeep_bane_of_hanweir.txt +++ b/forge-gui/res/cardsfolder/h/hanweir_watchkeep_bane_of_hanweir.txt @@ -15,7 +15,7 @@ ManaCost:no cost Colors:red Types:Creature Werewolf PT:5/5 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME. SVar:TrigTransform:DB$ SetState | Defined$ Self | Mode$ Transform Oracle:Bane of Hanweir attacks each combat if able.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Bane of Hanweir. diff --git a/forge-gui/res/cardsfolder/h/heckling_fiends.txt b/forge-gui/res/cardsfolder/h/heckling_fiends.txt index a3f4ad0f272..10b64c83dfe 100644 --- a/forge-gui/res/cardsfolder/h/heckling_fiends.txt +++ b/forge-gui/res/cardsfolder/h/heckling_fiends.txt @@ -2,5 +2,6 @@ Name:Heckling Fiends ManaCost:2 R Types:Creature Devil PT:2/2 -A:AB$ Pump | Cost$ 2 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME attacks each combat if able. | IsCurse$ True | SpellDescription$ Target creature attacks this turn if able. +A:AB$ Animate | Cost$ 2 R | ValidTgts$ Creature | IsCurse$ True | SpellDescription$ Target creature attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. Oracle:{2}{R}: Target creature attacks this turn if able. diff --git a/forge-gui/res/cardsfolder/h/hellraiser_goblin.txt b/forge-gui/res/cardsfolder/h/hellraiser_goblin.txt index 2d2835009ab..5eeb7fe89d9 100644 --- a/forge-gui/res/cardsfolder/h/hellraiser_goblin.txt +++ b/forge-gui/res/cardsfolder/h/hellraiser_goblin.txt @@ -3,7 +3,7 @@ ManaCost:2 R Types:Creature Goblin Berserker PT:2/2 S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddKeyword$ Haste | Description$ Creatures you control have haste and attack each combat if able. -S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.YouCtrl | Secondary$ True SVar:PlayMain1:TRUE SVar:BuffedBy:Creature Oracle:Creatures you control have haste and attack each combat if able. diff --git a/forge-gui/res/cardsfolder/i/illusionists_gambit.txt b/forge-gui/res/cardsfolder/i/illusionists_gambit.txt index 83bf3e05631..0f174e8f87e 100644 --- a/forge-gui/res/cardsfolder/i/illusionists_gambit.txt +++ b/forge-gui/res/cardsfolder/i/illusionists_gambit.txt @@ -1,13 +1,13 @@ Name:Illusionist's Gambit ManaCost:2 U U Types:Instant -A:SP$ RemoveFromCombat | Cost$ 2 U U | Defined$ Valid Creature.attacking | ActivationPhases$ Declare Blockers | OpponentTurn$ True | RememberRemovedFromCombat$ True | SubAbility$ DBUntap | SpellDescription$ Cast CARDNAME only on the declare blockers step on an opponent's turn. Remove all attacking creatures from combat and untap them. After this phase, there is an additional combat phase. Each of those creatures attacks that combat if able. They can't attack you or planeswalkers you control that combat. +A:SP$ RemoveFromCombat | Defined$ Valid Creature.attacking | ActivationPhases$ Declare Blockers | OpponentTurn$ True | RememberRemovedFromCombat$ True | SubAbility$ DBUntap | SpellDescription$ Cast CARDNAME only on the declare blockers step on an opponent's turn. Remove all attacking creatures from combat and untap them. After this phase, there is an additional combat phase. Each of those creatures attacks that combat if able. They can't attack you or planeswalkers you control that combat. SVar:DBUntap:DB$ Untap | Defined$ Remembered | SubAbility$ DBAddPhase SVar:DBAddPhase:DB$ AddPhase | ExtraPhase$ Combat | AfterPhase$ EndCombat | SubAbility$ DBDelayedEffect SVar:DBDelayedEffect:DB$ DelayedTrigger | Mode$ Phase | Phase$ BeginCombat | Execute$ DBEffect | Static$ True SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ STCantAttack,STMustAttack | SubAbility$ DBCleanup | Duration$ UntilEndOfCombat SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:STCantAttack:Mode$ CantAttack | EffectZone$ Command | ValidCard$ Creature.IsRemembered | Target$ You,Planeswalker.YouCtrl | Description$ Each of those creatures attacks that combat if able. -SVar:STMustAttack:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.IsRemembered | AddHiddenKeyword$ CARDNAME attacks each combat if able. +SVar:STCantAttack:Mode$ CantAttack | EffectZone$ Command | ValidCard$ Creature.IsRemembered | Target$ You,Planeswalker.YouCtrl | Description$ Each of those creatures attacks that combat if able. They can't attack you or planeswalkers you control that combat. +SVar:STMustAttack:Mode$ MustAttack | EffectZone$ Command | ValidCreature$ Creature.IsRemembered AI:RemoveDeck:All Oracle:Cast this spell only during the declare blockers step on an opponent's turn.\nRemove all attacking creatures from combat and untap them. After this phase, there is an additional combat phase. Each of those creatures attacks that combat if able. They can't attack you or planeswalkers you control that combat. diff --git a/forge-gui/res/cardsfolder/i/imaginary_threats.txt b/forge-gui/res/cardsfolder/i/imaginary_threats.txt index e4217a1eb85..18a1c6d76a8 100644 --- a/forge-gui/res/cardsfolder/i/imaginary_threats.txt +++ b/forge-gui/res/cardsfolder/i/imaginary_threats.txt @@ -1,8 +1,8 @@ Name:Imaginary Threats ManaCost:2 U U Types:Instant -A:SP$ Effect | Cost$ 2 U U | Name$ Imaginary Threats Effect 1 | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | StaticAbilities$ MustAttack | RememberObjects$ Targeted | SubAbility$ DBEffect | SpellDescription$ Creatures target player controls attack this turn if able. -SVar:MustAttack:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.RememberedPlayerCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures target opponent controls attack this turn if able. +A:SP$ Effect | Name$ Imaginary Threats Effect 1 | ValidTgts$ Opponent | StaticAbilities$ MustAttack | RememberObjects$ Targeted | SubAbility$ DBEffect | SpellDescription$ Creatures target player controls attack this turn if able. +SVar:MustAttack:Mode$ MustAttack | EffectZone$ Command | ValidCreature$ Creature.RememberedPlayerCtrl | Description$ Creatures target opponent controls attack this turn if able. SVar:DBEffect:DB$ Effect | IsCurse$ True | StaticAbilities$ DontUntap | Triggers$ RemoveEffect | Duration$ Permanent | RememberObjects$ Targeted | Name$ Imaginary Threats Effect 2 | SubAbility$ DBCleanup | SpellDescription$ During that player's next untap step, creatures they control don't untap. SVar:DontUntap:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.RememberedPlayerCtrl | AddHiddenKeyword$ This card doesn't untap during your next untap step. | Description$ Creatures target opponent controls don't untap during their next untap step. SVar:RemoveEffect:Mode$ Phase | Phase$ Untap | ValidPlayer$ Player.IsRemembered | TriggerZones$ Command | Static$ True | Execute$ ExileEffect diff --git a/forge-gui/res/cardsfolder/i/impending_doom.txt b/forge-gui/res/cardsfolder/i/impending_doom.txt index e7cf411fe0c..fb0cc35e2e2 100644 --- a/forge-gui/res/cardsfolder/i/impending_doom.txt +++ b/forge-gui/res/cardsfolder/i/impending_doom.txt @@ -2,8 +2,9 @@ Name:Impending Doom ManaCost:2 R Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ 2 R | ValidTgts$ Creature | AILogic$ Pump -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 3 | AddToughness$ 3 | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Enchanted creature gets +3/+3 and attacks each combat if able. +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 3 | AddToughness$ 3 | Description$ Enchanted creature gets +3/+3 and attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedBy | Secondary$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.AttachedBy | Execute$ TrigDamage | TriggerDescription$ When enchanted creature dies, CARDNAME deals 3 damage to that creature's controller. SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredCardController | NumDmg$ 3 Oracle:Enchant creature\nEnchanted creature gets +3/+3 and attacks each combat if able.\nWhen enchanted creature dies, Impending Doom deals 3 damage to that creature's controller. diff --git a/forge-gui/res/cardsfolder/i/impetuous_sunchaser.txt b/forge-gui/res/cardsfolder/i/impetuous_sunchaser.txt index 79aa3674095..ecb3d09c372 100644 --- a/forge-gui/res/cardsfolder/i/impetuous_sunchaser.txt +++ b/forge-gui/res/cardsfolder/i/impetuous_sunchaser.txt @@ -4,5 +4,5 @@ Types:Creature Human Soldier PT:1/1 K:Flying K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Flying, haste\nImpetuous Sunchaser attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/i/imps_taunt.txt b/forge-gui/res/cardsfolder/i/imps_taunt.txt index 6a1c7ff56cf..8f9e54aad18 100644 --- a/forge-gui/res/cardsfolder/i/imps_taunt.txt +++ b/forge-gui/res/cardsfolder/i/imps_taunt.txt @@ -2,6 +2,7 @@ Name:Imps' Taunt ManaCost:1 B Types:Instant K:Buyback:3 -A:SP$ Pump | Cost$ 1 B | ValidTgts$ Creature | KW$ HIDDEN CARDNAME attacks each combat if able. | TgtPrompt$ Select target creature | SpellDescription$ Target creature attacks this turn if able. +A:SP$ Animate | ValidTgts$ Creature | staticAbilities$ MustAttack | SpellDescription$ Target creature attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. AI:RemoveDeck:All Oracle:Buyback {3} (You may pay an additional {3} as you cast this spell. If you do, put this card into your hand as it resolves.)\nTarget creature attacks this turn if able. diff --git a/forge-gui/res/cardsfolder/i/incite.txt b/forge-gui/res/cardsfolder/i/incite.txt index 8ca3e7bbcfe..9ea69f044c3 100644 --- a/forge-gui/res/cardsfolder/i/incite.txt +++ b/forge-gui/res/cardsfolder/i/incite.txt @@ -1,7 +1,7 @@ Name:Incite ManaCost:R Types:Instant -A:SP$ Animate | Cost$ R | ValidTgts$ Creature | TgtPrompt$ Select target creature | Colors$ Red | OverwriteColors$ True | SubAbility$ DBPump | SpellDescription$ Target creature becomes red until end of turn and attacks this turn if able. -SVar:DBPump:DB$ Pump | KW$ HIDDEN CARDNAME attacks each combat if able. | Defined$ Targeted +A:SP$ Animate | ValidTgts$ Creature | Colors$ Red | OverwriteColors$ True | staticAbilities$ MustAttack | SpellDescription$ Target creature becomes red until end of turn and attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. AI:RemoveDeck:All Oracle:Target creature becomes red until end of turn and attacks this turn if able. diff --git a/forge-gui/res/cardsfolder/i/incite_war.txt b/forge-gui/res/cardsfolder/i/incite_war.txt index ceb8a538a14..112d5252fd1 100644 --- a/forge-gui/res/cardsfolder/i/incite_war.txt +++ b/forge-gui/res/cardsfolder/i/incite_war.txt @@ -2,9 +2,9 @@ Name:Incite War ManaCost:2 R Types:Instant K:Entwine:2 -A:SP$ Charm | Cost$ 2 R | Choices$ DBEffect,DBPumpAll | CharmNum$ 1 -SVar:DBEffect:DB$ Effect | Name$ Incite War Effect | ValidTgts$ Player | TgtPrompt$ Select target player | StaticAbilities$ MustAttack | RememberObjects$ Targeted | SpellDescription$ Creatures target player controls attack this turn if able. -SVar:MustAttack:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.RememberedPlayerCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures target player controls attack this turn if able. +A:SP$ Charm | Choices$ DBEffect,DBPumpAll +SVar:DBEffect:DB$ Effect | Name$ Incite War Effect | ValidTgts$ Player | StaticAbilities$ MustAttack | RememberObjects$ Targeted | SpellDescription$ Creatures target player controls attack this turn if able. +SVar:MustAttack:Mode$ MustAttack | EffectZone$ Command | ValidCreature$ Creature.RememberedPlayerCtrl | Description$ Creatures target player controls attack this turn if able. SVar:DBPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ First Strike | SpellDescription$ Creatures you control gain first strike until end of turn. AI:RemoveDeck:All Oracle:Choose one —\n• Creatures target player controls attack this turn if able.\n• Creatures you control gain first strike until end of turn.\nEntwine {2} (Choose both if you pay the entwine cost.) diff --git a/forge-gui/res/cardsfolder/i/infectious_bloodlust.txt b/forge-gui/res/cardsfolder/i/infectious_bloodlust.txt index 97320810ee9..a55646d77ca 100644 --- a/forge-gui/res/cardsfolder/i/infectious_bloodlust.txt +++ b/forge-gui/res/cardsfolder/i/infectious_bloodlust.txt @@ -2,8 +2,9 @@ Name:Infectious Bloodlust ManaCost:1 R Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ 1 R | ValidTgts$ Creature | AILogic$ Pump -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 1 | AddKeyword$ Haste | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Enchanted creature gets +2/+1, has haste, and attacks each combat if able. +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 1 | AddKeyword$ Haste | Description$ Enchanted creature gets +2/+1, has haste, and attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedBy | Secondary$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.AttachedBy | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When enchanted creature dies, you may search your library for a card named Infectious Bloodlust, reveal it, put it into your hand, then shuffle. SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.namedInfectious Bloodlust | ChangeNum$ 1 | ShuffleNonMandatory$ True DeckHints:Name$Infectious Bloodlust diff --git a/forge-gui/res/cardsfolder/i/insatiable_gorgers.txt b/forge-gui/res/cardsfolder/i/insatiable_gorgers.txt index 9402dcb7e61..7b035d80a8a 100644 --- a/forge-gui/res/cardsfolder/i/insatiable_gorgers.txt +++ b/forge-gui/res/cardsfolder/i/insatiable_gorgers.txt @@ -2,7 +2,7 @@ Name:Insatiable Gorgers ManaCost:2 R R Types:Creature Vampire Berserker PT:5/3 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:Madness:3 R DeckHints:Ability$Discard Oracle:Insatiable Gorgers attacks each combat if able.\nMadness {3}{R} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.) diff --git a/forge-gui/res/cardsfolder/i/instigator.txt b/forge-gui/res/cardsfolder/i/instigator.txt index cdb6a5d32d1..35aa5f10341 100644 --- a/forge-gui/res/cardsfolder/i/instigator.txt +++ b/forge-gui/res/cardsfolder/i/instigator.txt @@ -3,6 +3,6 @@ ManaCost:1 B Types:Creature Human Spellshaper PT:1/1 A:AB$ Effect | Cost$ 1 B B T Discard<1/Card> | Name$ Instigator Effect | ValidTgts$ Player | TgtPrompt$ Select target player | StaticAbilities$ AttackThisTurn | RememberObjects$ Targeted | SpellDescription$ Creatures target player controls attack this turn if able. -SVar:AttackThisTurn:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.RememberedPlayerCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures targeted player controls attack this turn if able. +SVar:AttackThisTurn:Mode$ MustAttack | EffectZone$ Command | ValidCreature$ Creature.RememberedPlayerCtrl | Description$ Creatures targeted player controls attack this turn if able. AI:RemoveDeck:All Oracle:{1}{B}{B}, {T}, Discard a card: Creatures target player controls attack this turn if able. diff --git a/forge-gui/res/cardsfolder/i/into_the_fray.txt b/forge-gui/res/cardsfolder/i/into_the_fray.txt index 7ca34dbe6b2..6b668cfff69 100644 --- a/forge-gui/res/cardsfolder/i/into_the_fray.txt +++ b/forge-gui/res/cardsfolder/i/into_the_fray.txt @@ -2,6 +2,7 @@ Name:Into the Fray ManaCost:R Types:Instant Arcane K:Splice:Arcane:R -A:SP$ Pump | Cost$ R | ValidTgts$ Creature | KW$ HIDDEN CARDNAME attacks each combat if able. | TgtPrompt$ Select target creature | SpellDescription$ Target creature attacks this turn if able. +A:SP$ Animate | ValidTgts$ Creature | staticAbilities$ MustAttack | SpellDescription$ Target creature attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. AI:RemoveDeck:All Oracle:Target creature attacks this turn if able.\nSplice onto Arcane {R} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.) diff --git a/forge-gui/res/cardsfolder/i/iron_golem.txt b/forge-gui/res/cardsfolder/i/iron_golem.txt index 868878aa41f..a2acf9462ff 100644 --- a/forge-gui/res/cardsfolder/i/iron_golem.txt +++ b/forge-gui/res/cardsfolder/i/iron_golem.txt @@ -3,6 +3,6 @@ ManaCost:4 Types:Artifact Creature Golem PT:5/3 K:Vigilance -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:CARDNAME blocks each combat if able. Oracle:Vigilance\nIron Golem attacks or blocks each combat if able. diff --git a/forge-gui/res/cardsfolder/j/juggernaut.txt b/forge-gui/res/cardsfolder/j/juggernaut.txt index e472d2be017..60cc3d9dc69 100644 --- a/forge-gui/res/cardsfolder/j/juggernaut.txt +++ b/forge-gui/res/cardsfolder/j/juggernaut.txt @@ -2,6 +2,6 @@ Name:Juggernaut ManaCost:4 Types:Artifact Creature Juggernaut PT:5/3 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.Wall | Description$ CARDNAME can't be blocked by Walls. Oracle:Juggernaut attacks each combat if able.\nJuggernaut can't be blocked by Walls. diff --git a/forge-gui/res/cardsfolder/k/kardur_doomscourge.txt b/forge-gui/res/cardsfolder/k/kardur_doomscourge.txt index 75a79b37f2f..86c1d8d74b5 100644 --- a/forge-gui/res/cardsfolder/k/kardur_doomscourge.txt +++ b/forge-gui/res/cardsfolder/k/kardur_doomscourge.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Demon Berserker PT:4/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerDescription$ When CARDNAME enters the battlefield, until your next turn, creatures your opponents control attack each combat if able and attack a player other than you if able. SVar:TrigEffect:DB$ Effect | StaticAbilities$ AttackEach,AttackOther | Duration$ UntilYourNextTurn -SVar:AttackEach:Mode$ Continuous | Affected$ Creature.OppCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures your opponents control attack each combat if able and attack a player other than you if able. +SVar:AttackEach:Mode$ MustAttack | ValidCreature$ Creature.OppCtrl | Description$ Creatures your opponents control attack each combat if able and attack a player other than you if able. SVar:AttackOther:Mode$ Continuous | Affected$ You | AddKeyword$ Creatures your opponents control attack a player other than you if able. | Secondary$ True | Description$ Creatures your opponents control attack each combat if able and attack a player other than you if able. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.attacking | Execute$ TrigDrain | TriggerZones$ Battlefield | TriggerDescription$ Whenever an attacking creature dies, each opponent loses 1 life and you gain 1 life. SVar:TrigDrain:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 1 | SubAbility$ DBGainOneLife diff --git a/forge-gui/res/cardsfolder/k/kill_suit_cultist.txt b/forge-gui/res/cardsfolder/k/kill_suit_cultist.txt index aa9290b57d7..4e78c3e806a 100644 --- a/forge-gui/res/cardsfolder/k/kill_suit_cultist.txt +++ b/forge-gui/res/cardsfolder/k/kill_suit_cultist.txt @@ -2,7 +2,7 @@ Name:Kill-Suit Cultist ManaCost:R Types:Creature Goblin Berserker PT:1/1 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. A:AB$ Effect | Cost$ B Sac<1/CARDNAME> | ValidTgts$ Creature | ReplacementEffects$ SelfDamage | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | SpellDescription$ The next time damage would be dealt to target creature this turn, destroy that creature instead. SVar:SelfDamage:Event$ DamageDone | ValidTarget$ Creature.IsRemembered | ReplaceWith$ CultistDestroy | Description$ The next time damage would be dealt to target creature this turn, destroy that creature instead. SVar:CultistDestroy:DB$ Destroy | Defined$ ReplacedTarget | SubAbility$ ExileEffect diff --git a/forge-gui/res/cardsfolder/k/kookus.txt b/forge-gui/res/cardsfolder/k/kookus.txt index c4eeda2785d..71fddbaed4f 100644 --- a/forge-gui/res/cardsfolder/k/kookus.txt +++ b/forge-gui/res/cardsfolder/k/kookus.txt @@ -6,7 +6,8 @@ K:Trample A:AB$ Pump | Cost$ R | NumAtt$ +1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Creature.YouCtrl+namedKeeper of Kookus | PresentCompare$ EQ0 | Execute$ TrigNoKeeper | TriggerDescription$ At the beginning of your upkeep, if you don't control a creature named Keeper of Kookus, CARDNAME deals 3 damage to you and attacks this turn if able. SVar:TrigNoKeeper:DB$ DealDamage | NumDmg$ 3 | Defined$ You | SubAbility$ DBMustAttack -SVar:DBMustAttack:DB$ Pump | KW$ HIDDEN CARDNAME attacks each combat if able. | Defined$ Self | SpellDescription$ CARDNAME attacks this turn if able. +SVar:DBMustAttack:DB$ Animate | staticAbilities$ MustAttack | Defined$ Self +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Secondary$ True AI:RemoveDeck:Random DeckNeeds:Name$Keeper of Kookus Oracle:Trample\nAt the beginning of your upkeep, if you don't control a creature named Keeper of Kookus, Kookus deals 3 damage to you and attacks this turn if able.\n{R}: Kookus gets +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/k/kuldotha_ringleader.txt b/forge-gui/res/cardsfolder/k/kuldotha_ringleader.txt index 6921f6cf8c2..38ea4aedc36 100644 --- a/forge-gui/res/cardsfolder/k/kuldotha_ringleader.txt +++ b/forge-gui/res/cardsfolder/k/kuldotha_ringleader.txt @@ -3,5 +3,5 @@ ManaCost:4 R Types:Creature Giant Berserker PT:4/4 K:Battle cry -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Battle cry (Whenever this creature attacks, each other attacking creature gets +1/+0 until end of turn.)\nKuldotha Ringleader attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/l/legion_warboss.txt b/forge-gui/res/cardsfolder/l/legion_warboss.txt index f896a016e03..22ca39888b9 100644 --- a/forge-gui/res/cardsfolder/l/legion_warboss.txt +++ b/forge-gui/res/cardsfolder/l/legion_warboss.txt @@ -4,9 +4,10 @@ Types:Creature Goblin Soldier PT:2/2 K:Mentor T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of combat on your turn, create a 1/1 red Goblin creature token. That token gains haste until end of turn and attacks this combat if able. -SVar:TrigToken:DB$ Token | TokenOwner$ You | TokenAmount$ 1 | TokenScript$ r_1_1_goblin | RememberTokens$ True | SubAbility$ DBPumpTurn +SVar:TrigToken:DB$ Token | TokenScript$ r_1_1_goblin | RememberTokens$ True | SubAbility$ DBPumpTurn SVar:DBPumpTurn:DB$ Pump | Defined$ Remembered | KW$ Haste | SubAbility$ DBPumpCombat -SVar:DBPumpCombat:DB$ Pump | Defined$ Remembered | KW$ HIDDEN CARDNAME attacks each combat if able. | Duration$ UntilEndOfCombat | SubAbility$ DBCleanup +SVar:DBPumpCombat:DB$ Animate | Defined$ Remembered | staticAbilities$ MustAttack | Duration$ UntilEndOfCombat | SubAbility$ DBCleanup +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Counters|Token Oracle:Mentor (Whenever this creature attacks, put a +1/+1 counter on target attacking creature with lesser power.)\nAt the beginning of combat on your turn, create a 1/1 red Goblin creature token. That token gains haste until end of turn and attacks this combat if able. diff --git a/forge-gui/res/cardsfolder/l/lust_for_war.txt b/forge-gui/res/cardsfolder/l/lust_for_war.txt index d58b9446aaf..67bbf80888a 100644 --- a/forge-gui/res/cardsfolder/l/lust_for_war.txt +++ b/forge-gui/res/cardsfolder/l/lust_for_war.txt @@ -1,8 +1,8 @@ Name:Lust for War ManaCost:2 R Types:Enchantment Aura -A:SP$ Attach | Cost$ 2 R | ValidTgts$ Creature | AILogic$ Curse -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Enchanted creature attacks each combat if able. +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Curse +S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedBy | Description$ Enchanted creature attacks each combat if able. T:Mode$ Taps | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever enchanted creature becomes tapped, CARDNAME deals 3 damage to that creature's controller. SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredCardController | NumDmg$ 3 Oracle:Enchant creature\nWhenever enchanted creature becomes tapped, Lust for War deals 3 damage to that creature's controller.\nEnchanted creature attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/m/maddening_imp.txt b/forge-gui/res/cardsfolder/m/maddening_imp.txt index 7606ed6ba7c..41f2233422e 100644 --- a/forge-gui/res/cardsfolder/m/maddening_imp.txt +++ b/forge-gui/res/cardsfolder/m/maddening_imp.txt @@ -3,7 +3,9 @@ ManaCost:2 B Types:Creature Imp PT:1/1 K:Flying -A:AB$ PumpAll | Cost$ T | ValidCards$ Creature.ActivePlayerCtrl+nonWall | KW$ HIDDEN CARDNAME attacks each combat if able. | RememberAllPumped$ True | ActivationPhases$ Upkeep->Main1 | ActivationFirstCombat$ True | OpponentTurn$ True | SubAbility$ DelTrig | StackDescription$ SpellDescription | SpellDescription$ Non-Wall creatures the active player controls attack this turn if able. At the beginning of the next end step, destroy each of those creatures that didn't attack this turn. Activate only during an opponent's turn and only before combat. +A:AB$ PumpAll | Cost$ T | ValidCards$ Creature.ActivePlayerCtrl+nonWall | RememberAllPumped$ True | ActivationPhases$ Upkeep->Main1 | ActivationFirstCombat$ True | OpponentTurn$ True | SubAbility$ DelTrig | StackDescription$ None | SpellDescription$ Non-Wall creatures the active player controls attack this turn if able. At the beginning of the next end step, destroy each of those creatures that didn't attack this turn. Activate only during an opponent's turn and only before combat. +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | DefinedDesc$ Non-Wall creatures the active player controls | staticAbilities$ MustAttack | SubAbility$ DelTrig +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDestroy | RememberObjects$ Remembered | SubAbility$ DBCleanup | TriggerDescription$ At the beginning of the next end step, destroy each of those creatures that didn't attack this turn. SVar:TrigDestroy:DB$ DestroyAll | ValidCards$ Creature.IsTriggerRemembered+notAttackedThisTurn SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/m/mage_ring_bully.txt b/forge-gui/res/cardsfolder/m/mage_ring_bully.txt index 4c6e987710e..0f4f11a483f 100644 --- a/forge-gui/res/cardsfolder/m/mage_ring_bully.txt +++ b/forge-gui/res/cardsfolder/m/mage_ring_bully.txt @@ -3,5 +3,5 @@ ManaCost:1 R Types:Creature Human Warrior PT:2/2 K:Prowess -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)\nMage-Ring Bully attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/m/manticore_eternal.txt b/forge-gui/res/cardsfolder/m/manticore_eternal.txt index aaab130b213..240c1dba2d9 100644 --- a/forge-gui/res/cardsfolder/m/manticore_eternal.txt +++ b/forge-gui/res/cardsfolder/m/manticore_eternal.txt @@ -3,5 +3,5 @@ ManaCost:3 R R Types:Creature Zombie Manticore PT:5/4 K:Afflict:3 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Afflict 3 (Whenever this creature becomes blocked, defending player loses 3 life.)\nManticore Eternal attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/m/marauding_maulhorn.txt b/forge-gui/res/cardsfolder/m/marauding_maulhorn.txt index 75b8682100c..2eb785a40b9 100644 --- a/forge-gui/res/cardsfolder/m/marauding_maulhorn.txt +++ b/forge-gui/res/cardsfolder/m/marauding_maulhorn.txt @@ -2,7 +2,7 @@ Name:Marauding Maulhorn ManaCost:2 R R Types:Creature Beast PT:5/3 -S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME attacks each combat if able. | CheckSVar$ CheckCard | SVarCompare$ EQ0 | Description$ CARDNAME attacks each combat if able unless you control a creature named Advocate of the Beast. +S:Mode$ MustAttack | ValidCreature$ Card.Self | CheckSVar$ CheckCard | SVarCompare$ EQ0 | Description$ CARDNAME attacks each combat if able unless you control a creature named Advocate of the Beast. SVar:CheckCard:Count$Valid Card.namedAdvocate of the Beast+YouCtrl DeckHints:Name$Advocate of the Beast Oracle:Marauding Maulhorn attacks each combat if able unless you control a creature named Advocate of the Beast. diff --git a/forge-gui/res/cardsfolder/m/mogiss_warhound.txt b/forge-gui/res/cardsfolder/m/mogiss_warhound.txt index 057a4396b90..61c798eadc3 100644 --- a/forge-gui/res/cardsfolder/m/mogiss_warhound.txt +++ b/forge-gui/res/cardsfolder/m/mogiss_warhound.txt @@ -3,7 +3,8 @@ ManaCost:1 R Types:Enchantment Creature Dog PT:2/2 K:Bestow:2 R -K:CARDNAME attacks each combat if able. -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Enchanted creature gets +2/+2 and attacks each combat if able. +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddStaticAbility$ MustAttack | Description$ Enchanted creature gets +2/+2 and attacks each combat if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Secondary$ True +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. AI:RemoveDeck:All Oracle:Bestow {2}{R} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.)\nMogis's Warhound attacks each combat if able.\nEnchanted creature gets +2/+2 and attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/m/monstrous_carabid.txt b/forge-gui/res/cardsfolder/m/monstrous_carabid.txt index 9f5601f6c6f..745fcac3527 100644 --- a/forge-gui/res/cardsfolder/m/monstrous_carabid.txt +++ b/forge-gui/res/cardsfolder/m/monstrous_carabid.txt @@ -2,6 +2,7 @@ Name:Monstrous Carabid ManaCost:3 B R Types:Creature Insect PT:4/4 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:Cycling:BR +DeckHas:Ability$Discard Oracle:Monstrous Carabid attacks each combat if able.\nCycling {B/R} ({B/R}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/m/my_crushing_masterstroke.txt b/forge-gui/res/cardsfolder/m/my_crushing_masterstroke.txt index 5f775a61636..a48e3e6f191 100644 --- a/forge-gui/res/cardsfolder/m/my_crushing_masterstroke.txt +++ b/forge-gui/res/cardsfolder/m/my_crushing_masterstroke.txt @@ -2,5 +2,7 @@ Name:My Crushing Masterstroke ManaCost:no cost Types:Scheme T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ TrigControl | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, gain control of all nonland permanents your opponents control until end of turn. Untap those permanents. They gain haste until end of turn. Each of them attacks its owner this turn if able. -SVar:TrigControl:DB$ GainControl | AllValid$ Permanent.OppCtrl+nonLand | Untap$ True | AddKWs$ Haste & HIDDEN CARDNAME attacks specific player each combat if able:CardOwner | LoseControl$ EOT +SVar:TrigControl:DB$ GainControl | AllValid$ Permanent.OppCtrl+nonLand | Untap$ True | AddKWs$ Haste | LoseControl$ EOT | RememberControlled$ True | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | staticAbilities$ AttackOwner | SubAbility$ DBCleanup +SVar:AttackOwner:Mode$ MustAttack | ValidCreature$ Card.Self | MustAttack$ CardOwner | Description$ This permanent attacks its owner this turn if able. Oracle:When you set this scheme in motion, gain control of all nonland permanents your opponents control until end of turn. Untap those permanents. They gain haste until end of turn. Each of them attacks its owner this turn if able. diff --git a/forge-gui/res/cardsfolder/n/nettling_curse.txt b/forge-gui/res/cardsfolder/n/nettling_curse.txt index 58d1e2604c1..17170e57418 100644 --- a/forge-gui/res/cardsfolder/n/nettling_curse.txt +++ b/forge-gui/res/cardsfolder/n/nettling_curse.txt @@ -2,8 +2,9 @@ Name:Nettling Curse ManaCost:2 B Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ 2 B | ValidTgts$ Creature | AILogic$ Curse -A:AB$ Pump | Cost$ 1 R | Defined$ Enchanted | KW$ HIDDEN CARDNAME attacks each combat if able. | IsCurse$ True | SpellDescription$ Enchanted creature attacks this turn if able. +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Curse +A:AB$ Animate | Cost$ 1 R | Defined$ Enchanted | staticAbilities$ MustAttack | IsCurse$ True | SpellDescription$ Enchanted creature attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. T:Mode$ Attacks | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigLoseLifeAttack | TriggerDescription$ Whenever enchanted creature attacks or blocks, its controller loses 3 life. T:Mode$ Blocks | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigLoseLifeBlock | Secondary$ True | TriggerDescription$ Whenever enchanted creature attacks or blocks, its controller loses 3 life. SVar:TrigLoseLifeAttack:DB$ LoseLife | LifeAmount$ 3 | Defined$ TriggeredAttackerController diff --git a/forge-gui/res/cardsfolder/n/nettling_imp.txt b/forge-gui/res/cardsfolder/n/nettling_imp.txt index 28fd615e2f5..6324d8e87ec 100644 --- a/forge-gui/res/cardsfolder/n/nettling_imp.txt +++ b/forge-gui/res/cardsfolder/n/nettling_imp.txt @@ -2,7 +2,8 @@ Name:Nettling Imp ManaCost:2 B Types:Creature Imp PT:1/1 -A:AB$ Pump | Cost$ T | ValidTgts$ Creature.nonWall+ActivePlayerCtrl+notFirstTurnControlled | TgtPrompt$ Select target non-Wall creature the active player has controlled continuously since the beginning of the turn. | ActivationPhases$ Upkeep->BeginCombat | OpponentTurn$ True | KW$ HIDDEN CARDNAME attacks each combat if able. | SubAbility$ DestroyPacifist | SpellDescription$ Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That creature attacks this turn if able. Destroy it at the beginning of the next end step if it didn't attack this turn. Activate only during an opponent's turn, before attackers are declared. +A:AB$ Animate | Cost$ T | ValidTgts$ Creature.nonWall+ActivePlayerCtrl+notFirstTurnControlled | TgtPrompt$ Select target non-Wall creature the active player has controlled continuously since the beginning of the turn | ActivationPhases$ Upkeep->BeginCombat | OpponentTurn$ True | staticAbilities$ MustAttack | SubAbility$ DestroyPacifist | SpellDescription$ Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That creature attacks this turn if able. Destroy it at the beginning of the next end step if it didn't attack this turn. Activate only during an opponent's turn, before attackers are declared. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | RememberObjects$ ParentTarget | Execute$ TrigDestroy | TriggerDescription$ At the beginning of the end step, destroy that creature if it didn't attack this turn. SVar:TrigDestroy:DB$ Destroy | Defined$ DelayTriggerRemembered | ConditionDefined$ DelayTriggerRemembered | ConditionPresent$ Creature.notAttackedThisTurn | ConditionCompare$ GE1 AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/n/norritt.txt b/forge-gui/res/cardsfolder/n/norritt.txt index 07e2ccf6b71..61aec2a86f4 100644 --- a/forge-gui/res/cardsfolder/n/norritt.txt +++ b/forge-gui/res/cardsfolder/n/norritt.txt @@ -3,7 +3,8 @@ ManaCost:3 B Types:Creature Imp PT:1/1 A:AB$ Untap | Cost$ T | ValidTgts$ Creature.Blue | TgtPrompt$ Select target blue creature | SpellDescription$ Untap target blue creature. -A:AB$ Pump | Cost$ T | ValidTgts$ Creature.nonWall+ActivePlayerCtrl+notFirstTurnControlled | TgtPrompt$ Select target non-Wall creature the active player has controlled continuously since the beginning of the turn. | ActivationPhases$ Upkeep->BeginCombat | ActivationFirstCombat$ True | KW$ HIDDEN CARDNAME attacks each combat if able. | SubAbility$ DestroyPacifist | SpellDescription$ Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That creature attacks this turn if able. Destroy it at the beginning of the next end step if it didn't attack this turn. Activate only before attackers are declared. +A:AB$ Pump | Cost$ T | ValidTgts$ Creature.nonWall+ActivePlayerCtrl+notFirstTurnControlled | TgtPrompt$ Select target non-Wall creature the active player has controlled continuously since the beginning of the turn | ActivationPhases$ Upkeep->BeginCombat | ActivationFirstCombat$ True | staticAbilities$ MustAttack | SubAbility$ DestroyPacifist | SpellDescription$ Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That creature attacks this turn if able. Destroy it at the beginning of the next end step if it didn't attack this turn. Activate only before attackers are declared. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDestroy | RememberObjects$ ParentTarget | TriggerDescription$ At the beginning of the end step, destroy that creature if it didn't attack this turn. SVar:TrigDestroy:DB$ Destroy | Defined$ DelayTriggerRemembered | ConditionDefined$ DelayTriggerRemembered | ConditionPresent$ Creature.notAttackedThisTurn | ConditionCompare$ GE1 AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/o/oathsworn_knight.txt b/forge-gui/res/cardsfolder/o/oathsworn_knight.txt index cd9def7b58c..09ae9c45942 100644 --- a/forge-gui/res/cardsfolder/o/oathsworn_knight.txt +++ b/forge-gui/res/cardsfolder/o/oathsworn_knight.txt @@ -3,7 +3,7 @@ ManaCost:1 B B Types:Creature Human Knight PT:0/0 K:etbCounter:P1P1:4 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Card.Self+counters_GE1_P1P1 | ReplaceWith$ DBRemoveCounters | PreventionEffect$ True | AlwaysReplace$ True | Description$ If damage would be dealt to CARDNAME while it has a +1/+1 counter on it, prevent that damage and remove a +1/+1 counter from it. SVar:DBRemoveCounters:DB$ RemoveCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/o/oracle_en_vec.txt b/forge-gui/res/cardsfolder/o/oracle_en_vec.txt index 6fa4418b29d..e3a8d0309f9 100644 --- a/forge-gui/res/cardsfolder/o/oracle_en_vec.txt +++ b/forge-gui/res/cardsfolder/o/oracle_en_vec.txt @@ -5,7 +5,7 @@ PT:1/1 A:AB$ ChooseCard | Cost$ T | ValidTgts$ Player.Opponent | MinAmount$ 0 | Amount$ X | Choices$ Creature | TargetControls$ True | ChoiceTitle$ Choose any number of creatures you control | PlayerTurn$ True | Reveal$ True | AILogic$ NextTurnAttacker | SubAbility$ DBOracleEffect | StackDescription$ SpellDescription | SpellDescription$ Target opponent chooses any number of creatures they control. During that player's next turn, the chosen creatures attack if able, and other creatures can't attack. At the beginning of that turn's end step, destroy each of the chosen creatures that didn't attack this turn. Activate only during your turn. SVar:X:Count$Valid Creature.TargetedPlayerCtrl SVar:DBOracleEffect:DB$ Effect | EffectOwner$ TargetedPlayer | StaticAbilities$ ForceAttack,ForbidAttack | Triggers$ TrigDestroy | Duration$ UntilTheEndOfYourNextTurn | SubAbility$ DBCleanup -SVar:ForceAttack:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.YouCtrl+ChosenCard | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ During that player's next turn, the chosen creatures attack if able, and other creatures can't attack. +SVar:ForceAttack:Mode$ MustAttack | EffectZone$ Command | AffectedZone$ Battlefield | ValidCreature$ Creature.YouCtrl+ChosenCard | Description$ During that player's next turn, the chosen creatures attack if able, and other creatures can't attack. SVar:ForbidAttack:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.YouCtrl+nonChosenCard | AddHiddenKeyword$ CARDNAME can't attack. SVar:TrigDestroy:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | Execute$ DBDestroy | TriggerDescription$ At the beginning of that turn's end step, destroy each of the chosen creatures that didn't attack this turn. SVar:DBDestroy:DB$ DestroyAll | ValidCards$ Creature.ChosenCard+notAttackedThisTurn diff --git a/forge-gui/res/cardsfolder/o/otarian_juggernaut.txt b/forge-gui/res/cardsfolder/o/otarian_juggernaut.txt index f7a73634ae6..835dbfe53c8 100644 --- a/forge-gui/res/cardsfolder/o/otarian_juggernaut.txt +++ b/forge-gui/res/cardsfolder/o/otarian_juggernaut.txt @@ -3,5 +3,6 @@ ManaCost:4 Types:Artifact Creature Juggernaut PT:2/3 S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.Wall | Description$ CARDNAME can't be blocked by Walls. -S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddKeyword$ CARDNAME attacks each combat if able. | Condition$ Threshold | Description$ Threshold — As long as seven or more cards are in your graveyard, CARDNAME gets +3/+0 and attacks each combat if able. +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | Condition$ Threshold | Description$ Threshold — As long as seven or more cards are in your graveyard, CARDNAME gets +3/+0 and attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Condition$ Threshold | Secondary$ True Oracle:Otarian Juggernaut can't be blocked by Walls.\nThreshold — As long as seven or more cards are in your graveyard, Otarian Juggernaut gets +3/+0 and attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_juggernaut.txt b/forge-gui/res/cardsfolder/p/phyrexian_juggernaut.txt index d8fd9a1c882..0183c779425 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_juggernaut.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_juggernaut.txt @@ -3,5 +3,5 @@ ManaCost:6 Types:Artifact Creature Phyrexian Juggernaut PT:5/5 K:Infect -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)\nPhyrexian Juggernaut attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_snowcrusher.txt b/forge-gui/res/cardsfolder/p/phyrexian_snowcrusher.txt index 825e9a60837..9d8ff933a1d 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_snowcrusher.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_snowcrusher.txt @@ -2,6 +2,6 @@ Name:Phyrexian Snowcrusher ManaCost:6 Types:Snow Artifact Creature Phyrexian Juggernaut PT:6/5 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. A:AB$ Pump | Cost$ 1 S | Defined$ Self | NumAtt$ +1 | SpellDescription$ Phyrexian Snowcrusher gets +1/+0 until end of turn. Oracle:Phyrexian Snowcrusher attacks each combat if able.\n{1}{S}: Phyrexian Snowcrusher gets +1/+0 until end of turn. ({S} can be paid with one mana from a snow source.) diff --git a/forge-gui/res/cardsfolder/p/primordial_ooze.txt b/forge-gui/res/cardsfolder/p/primordial_ooze.txt index 7a0139e85c8..8a7b0c5ea59 100644 --- a/forge-gui/res/cardsfolder/p/primordial_ooze.txt +++ b/forge-gui/res/cardsfolder/p/primordial_ooze.txt @@ -2,11 +2,12 @@ Name:Primordial Ooze ManaCost:R Types:Creature Ooze PT:1/1 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, put a +1/+1 counter on CARDNAME. Then you may pay {X}, where X is the number of +1/+1 counters on it. If you don't, tap CARDNAME and it deals X damage to you. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBTap SVar:DBTap:DB$ Tap | Defined$ Self | UnlessCost$ X | UnlessPayer$ You | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DBDmg SVar:DBDmg:DB$ DealDamage | NumDmg$ X | Defined$ You SVar:X:Count$CardCounters.P1P1 AI:RemoveDeck:All +DeckHas:Ability$Counters Oracle:Primordial Ooze attacks each combat if able.\nAt the beginning of your upkeep, put a +1/+1 counter on Primordial Ooze. Then you may pay {X}, where X is the number of +1/+1 counters on it. If you don't, tap Primordial Ooze and it deals X damage to you. diff --git a/forge-gui/res/cardsfolder/r/rage_nimbus.txt b/forge-gui/res/cardsfolder/r/rage_nimbus.txt index ce08eaf6df1..e34f1514cc7 100644 --- a/forge-gui/res/cardsfolder/r/rage_nimbus.txt +++ b/forge-gui/res/cardsfolder/r/rage_nimbus.txt @@ -4,5 +4,6 @@ Types:Creature Elemental PT:5/3 K:Defender K:Flying -A:AB$ Pump | Cost$ 1 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME attacks each combat if able. | IsCurse$ True | SpellDescription$ Target creature attacks this turn if able. +A:AB$ Animate | Cost$ 1 R | ValidTgts$ Creature | staticAbilities$ MustAttack | IsCurse$ True | SpellDescription$ Target creature attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. Oracle:Defender, flying\n{1}{R}: Target creature attacks this turn if able. diff --git a/forge-gui/res/cardsfolder/r/ramroller.txt b/forge-gui/res/cardsfolder/r/ramroller.txt index 3d6a15aead5..c3262b07620 100644 --- a/forge-gui/res/cardsfolder/r/ramroller.txt +++ b/forge-gui/res/cardsfolder/r/ramroller.txt @@ -2,8 +2,7 @@ Name:Ramroller ManaCost:3 Types:Artifact Creature Juggernaut PT:2/3 -K:CARDNAME attacks each combat if able. -S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 2 | CheckSVar$ X | SVarCompare$ GE1 | Description$ CARDNAME gets +2/+0 as long as you control another artifact. -SVar:X:Count$Valid Artifact.YouCtrl+Other +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 2 | IsPresent$ Artifact.YouCtrl+Other | Description$ CARDNAME gets +2/+0 as long as you control another artifact. SVar:BuffedBy:Artifact Oracle:Ramroller attacks each combat if able.\nRamroller gets +2/+0 as long as you control another artifact. diff --git a/forge-gui/res/cardsfolder/r/raving_dead.txt b/forge-gui/res/cardsfolder/r/raving_dead.txt index d4a24455921..83bc3dd535b 100644 --- a/forge-gui/res/cardsfolder/r/raving_dead.txt +++ b/forge-gui/res/cardsfolder/r/raving_dead.txt @@ -5,7 +5,8 @@ PT:2/6 K:Deathtouch T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, choose an opponent at random. CARDNAME attacks that player this combat if able. SVar:TrigChoose:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | Random$ True | SubAbility$ DBPump -SVar:DBPump:DB$ Pump | Defined$ Self | KW$ HIDDEN CARDNAME attacks specific player each combat if able:ChosenPlayer | Duration$ UntilEndOfCombat +SVar:DBPump:DB$ Animate | Defined$ Self | staticAbilities$ AttackChosen | Duration$ UntilEndOfCombat +SVar:AttackChosen:Mode$ MustAttack | ValidCreature$ Card.Self | MustAttack$ ChosenPlayer T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigLoseLifeOpp | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player loses half their life, rounded down. SVar:TrigLoseLifeOpp:DB$ LoseLife | Defined$ TriggeredTarget | LifeAmount$ RavingXOpp SVar:RavingXOpp:TriggeredTarget$LifeTotal/HalfDown diff --git a/forge-gui/res/cardsfolder/r/reckless_brute.txt b/forge-gui/res/cardsfolder/r/reckless_brute.txt index 8a22d82bf97..c09ee5ce49e 100644 --- a/forge-gui/res/cardsfolder/r/reckless_brute.txt +++ b/forge-gui/res/cardsfolder/r/reckless_brute.txt @@ -3,5 +3,5 @@ ManaCost:2 R Types:Creature Ogre Warrior PT:3/1 K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Haste (This creature can attack and {T} as soon as it comes under your control.)\nReckless Brute attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/r/reckless_cohort.txt b/forge-gui/res/cardsfolder/r/reckless_cohort.txt index 3af6c57aea4..2f0aa071869 100644 --- a/forge-gui/res/cardsfolder/r/reckless_cohort.txt +++ b/forge-gui/res/cardsfolder/r/reckless_cohort.txt @@ -2,8 +2,7 @@ Name:Reckless Cohort ManaCost:1 R Types:Creature Human Warrior Ally PT:2/2 -S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME attacks each combat if able. | CheckSVar$ X | SVarCompare$ EQ0 | Description$ CARDNAME attacks each combat if able unless you control another Ally. -SVar:X:Count$Valid Ally.Other+YouCtrl +S:Mode$ MustAttack | ValidCreature$ Card.Self | IsPresent$ Valid Ally.Other+YouCtrl | PresentCompare$ EQ0 | Description$ CARDNAME attacks each combat if able unless you control another Ally. SVar:BuffedBy:Ally DeckHints:Type$Ally Oracle:Reckless Cohort attacks each combat if able unless you control another Ally. diff --git a/forge-gui/res/cardsfolder/r/relentless_raptor.txt b/forge-gui/res/cardsfolder/r/relentless_raptor.txt index cc9c61e9f5f..4881aa0a05e 100644 --- a/forge-gui/res/cardsfolder/r/relentless_raptor.txt +++ b/forge-gui/res/cardsfolder/r/relentless_raptor.txt @@ -3,7 +3,7 @@ ManaCost:R W Types:Creature Dinosaur PT:3/3 K:Vigilance -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:CARDNAME blocks each combat if able. -//According to Release Notes, "attacks or blocks each combat if able" is equivalent to these two together -- if Relentless Raptor attacks and then opponent takes control of it, it still has to block. +#According to Release Notes, "attacks or blocks each combat if able" is equivalent to these two together -- if Relentless Raptor attacks and then opponent takes control of it, it still has to block. Oracle:Vigilance\nRelentless Raptor attacks or blocks each combat if able. diff --git a/forge-gui/res/cardsfolder/r/riot_piker.txt b/forge-gui/res/cardsfolder/r/riot_piker.txt index e78f87d5f65..419da3ce001 100644 --- a/forge-gui/res/cardsfolder/r/riot_piker.txt +++ b/forge-gui/res/cardsfolder/r/riot_piker.txt @@ -3,5 +3,5 @@ ManaCost:1 R Types:Creature Goblin Berserker PT:2/1 K:First Strike -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:First strike\nRiot Piker attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/r/rowan_kenrith.txt b/forge-gui/res/cardsfolder/r/rowan_kenrith.txt index 9137c517a8b..fdfd6ca5f3c 100644 --- a/forge-gui/res/cardsfolder/r/rowan_kenrith.txt +++ b/forge-gui/res/cardsfolder/r/rowan_kenrith.txt @@ -4,8 +4,8 @@ Types:Legendary Planeswalker Rowan Loyalty:4 Text:CARDNAME can be your commander. K:Partner:Will Kenrith:Will -A:AB$ Effect | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | Name$ Rowan Kenrith Taunt Effect | ValidTgts$ Player | TgtPrompt$ Select target player | StaticAbilities$ MustAttack | RememberObjects$ Targeted | IsCurse$ True | Triggers$ RemoveEffect | Duration$ Permanent | SubAbility$ DBCleanup | SpellDescription$ During target player's next turn, each creature that player controls attacks if able. -SVar:MustAttack:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.RememberedPlayerCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures target opponent controls attack this turn if able. +A:AB$ Effect | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | Name$ Rowan Kenrith Taunt Effect | ValidTgts$ Player | StaticAbilities$ MustAttack | RememberObjects$ Targeted | IsCurse$ True | Triggers$ RemoveEffect | Duration$ Permanent | SubAbility$ DBCleanup | SpellDescription$ During target player's next turn, each creature that player controls attacks if able. +SVar:MustAttack:Mode$ MustAttack | EffectZone$ Command | ValidCreature$ Creature.RememberedPlayerCtrl | Description$ Creatures target opponent controls attack this turn if able. SVar:RemoveEffect:Mode$ Phase | Phase$ Cleanup | ValidPlayer$ Player.IsRemembered | TriggerZones$ Command | Static$ True | Execute$ ExileEffect SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/r/rubblebelt_recluse.txt b/forge-gui/res/cardsfolder/r/rubblebelt_recluse.txt index 0862383ae52..28f38855303 100644 --- a/forge-gui/res/cardsfolder/r/rubblebelt_recluse.txt +++ b/forge-gui/res/cardsfolder/r/rubblebelt_recluse.txt @@ -2,5 +2,5 @@ Name:Rubblebelt Recluse ManaCost:4 R Types:Creature Ogre Berserker PT:6/5 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Rubblebelt Recluse attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/r/ruhan_of_the_fomori.txt b/forge-gui/res/cardsfolder/r/ruhan_of_the_fomori.txt index 94971ff4304..e75e9c3b226 100644 --- a/forge-gui/res/cardsfolder/r/ruhan_of_the_fomori.txt +++ b/forge-gui/res/cardsfolder/r/ruhan_of_the_fomori.txt @@ -4,5 +4,6 @@ Types:Legendary Creature Giant Warrior PT:7/7 T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, choose an opponent at random. CARDNAME attacks that player this combat if able. SVar:TrigChoose:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | Random$ True | SubAbility$ DBPump -SVar:DBPump:DB$ Pump | Defined$ Self | KW$ HIDDEN CARDNAME attacks specific player each combat if able:ChosenPlayer | Duration$ UntilEndOfCombat +SVar:DBPump:DB$ Animate | Defined$ Self | staticAbilities$ AttackChosen | Duration$ UntilEndOfCombat +SVar:AttackChosen:Mode$ MustAttack | ValidCreature$ Card.Self | MustAttack$ ChosenPlayer | Secondary$ True Oracle:At the beginning of combat on your turn, choose an opponent at random. Ruhan of the Fomori attacks that player this combat if able. diff --git a/forge-gui/res/cardsfolder/r/ruric_thar_the_unbowed.txt b/forge-gui/res/cardsfolder/r/ruric_thar_the_unbowed.txt index 2d325c618ca..31a2ddfd1d2 100644 --- a/forge-gui/res/cardsfolder/r/ruric_thar_the_unbowed.txt +++ b/forge-gui/res/cardsfolder/r/ruric_thar_the_unbowed.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Ogre Warrior PT:6/6 K:Vigilance K:Reach -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ SpellCast | TriggerZones$ Battlefield | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ Player | Execute$ TrigDmg | TriggerDescription$ Whenever a player casts a noncreature spell, CARDNAME deals 6 damage to that player. SVar:TrigDmg:DB$ DealDamage | Defined$ TriggeredActivator | NumDmg$ 6 AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/s/sabertooth_alley_cat.txt b/forge-gui/res/cardsfolder/s/sabertooth_alley_cat.txt index f2968f086e0..0dac131abc1 100644 --- a/forge-gui/res/cardsfolder/s/sabertooth_alley_cat.txt +++ b/forge-gui/res/cardsfolder/s/sabertooth_alley_cat.txt @@ -2,7 +2,7 @@ Name:Sabertooth Alley Cat ManaCost:1 R R Types:Creature Cat PT:2/1 -K:CARDNAME attacks each combat if able. -A:AB$ Effect | Cost$ 1 R | Name$ Sabertooth Alley Cat's Effect | StaticAbilities$ KWPump | SpellDescription$ Creatures without defender can't block CARDNAME this turn. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. +A:AB$ Effect | Cost$ 1 R | StaticAbilities$ KWPump | SpellDescription$ Creatures without defender can't block CARDNAME this turn. SVar:KWPump:Mode$ CantBlockBy | ValidAttacker$ Creature.EffectSource | ValidBlocker$ Creature.withoutDefender | EffectZone$ Command | Description$ Creatures without defender can't block EFFECTSOURCE this turn. Oracle:Sabertooth Alley Cat attacks each combat if able.\n{1}{R}: Creatures without defender can't block Sabertooth Alley Cat this turn. diff --git a/forge-gui/res/cardsfolder/s/shipwreck_singer.txt b/forge-gui/res/cardsfolder/s/shipwreck_singer.txt index b800d6c2eea..4e2ea07a62d 100644 --- a/forge-gui/res/cardsfolder/s/shipwreck_singer.txt +++ b/forge-gui/res/cardsfolder/s/shipwreck_singer.txt @@ -3,6 +3,7 @@ ManaCost:U B Types:Creature Siren PT:1/2 K:Flying -A:AB$ Pump | Cost$ 1 U | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | KW$ HIDDEN CARDNAME attacks each combat if able. | IsCurse$ True | SpellDescription$ Target creature an opponent controls attacks this turn if able. +A:AB$ Animate | Cost$ 1 U | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | staticAbilities$ MustAttack | IsCurse$ True | SpellDescription$ Target creature an opponent controls attacks this turn if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. A:AB$ PumpAll | Cost$ 1 B T | ValidCards$ Creature.attacking | IsCurse$ True | NumAtt$ -1 | NumDef$ -1 | SpellDescription$ Attacking creatures get -1/-1 until end of turn. Oracle:Flying\n{1}{U}: Target creature an opponent controls attacks this turn if able.\n{1}{B}, {T}: Attacking creatures get -1/-1 until end of turn. diff --git a/forge-gui/res/cardsfolder/s/sirens_call.txt b/forge-gui/res/cardsfolder/s/sirens_call.txt index f6af8b15578..16b0e68cea7 100644 --- a/forge-gui/res/cardsfolder/s/sirens_call.txt +++ b/forge-gui/res/cardsfolder/s/sirens_call.txt @@ -1,8 +1,8 @@ Name:Siren's Call ManaCost:U Types:Instant -A:SP$ Effect | Cost$ U | Name$ Siren's Call Effect | StaticAbilities$ KWPump | ActivationPhases$ Upkeep->BeginCombat | OpponentTurn$ True | SpellDescription$ Cast this spell only during an opponent's turn, before attackers are declared. Creatures the active player controls attack this turn if able. At the beginning of the next end step, destroy all non-Wall creatures that player controls that didn't attack this turn. Ignore this effect for each creature the player didn't control continuously since the beginning of the turn. | SubAbility$ DestroyPacifist -SVar:KWPump:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.ActivePlayerCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures the active player controls attack this turn if able. +A:SP$ Effect | Name$ Siren's Call Effect | StaticAbilities$ MustAttack | ActivationPhases$ Upkeep->BeginCombat | OpponentTurn$ True | SpellDescription$ Cast this spell only during an opponent's turn, before attackers are declared. Creatures the active player controls attack this turn if able. At the beginning of the next end step, destroy all non-Wall creatures that player controls that didn't attack this turn. Ignore this effect for each creature the player didn't control continuously since the beginning of the turn. | SubAbility$ DestroyPacifist +SVar:MustAttack:Mode$ MustAttack | EffectZone$ Command | AffectedZone$ Battlefield | ValidCreature$ Creature.ActivePlayerCtrl | Description$ Creatures the active player controls attack this turn if able. SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDestroy | TriggerDescription$ At the beginning of the next end step, destroy all non-Wall creatures that player controls that didn't attack this turn. SVar:TrigDestroy:DB$ DestroyAll | ValidCards$ Creature.ActivePlayerCtrl+notAttackedThisTurn+nonWall+notFirstTurnControlled | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/s/skeletal_swarming.txt b/forge-gui/res/cardsfolder/s/skeletal_swarming.txt index e0bce7036af..9c123b3ca60 100644 --- a/forge-gui/res/cardsfolder/s/skeletal_swarming.txt +++ b/forge-gui/res/cardsfolder/s/skeletal_swarming.txt @@ -1,11 +1,12 @@ Name:Skeletal Swarming ManaCost:3 B G Types:Enchantment -S:Mode$ Continuous | Affected$ Skeleton.YouCtrl | AddKeyword$ Trample | AddHiddenKeyword$ CARDNAME attacks each combat if able. | AddPower$ AffectedX | Description$ Each Skeleton you control has trample, attacks each combat if able, and gets +X/+0, where X is the number of other Skeletons you control. +S:Mode$ Continuous | Affected$ Skeleton.YouCtrl | AddKeyword$ Trample | AddPower$ AffectedX | Description$ Each Skeleton you control has trample, attacks each combat if able, and gets +X/+0, where X is the number of other Skeletons you control. +S:Mode$ MustAttack | ValidCreature$ Skeleton.YouCtrl | Secondary$ True T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, create a tapped 1/1 black Skeleton creature token. If a creature died this turn, create two of those tokens instead. SVar:TrigToken:DB$ Token | TokenScript$ b_1_1_skeleton | TokenTapped$ True | TokenAmount$ Y SVar:AffectedX:Count$Valid Skeleton.YouCtrl+Other SVar:Y:Count$Morbid.2.1 -DeckHas:Ability$Token +DeckHas:Ability$Token & Type$Skeleton DeckHints:Type$Skeleton Oracle:Each Skeleton you control has trample, attacks each combat if able, and gets +X/+0, where X is the number of other Skeletons you control.\nAt the beginning of your end step, create a tapped 1/1 black Skeleton creature token. If a creature died this turn, create two of those tokens instead. diff --git a/forge-gui/res/cardsfolder/s/skin_invasion_skin_shedder.txt b/forge-gui/res/cardsfolder/s/skin_invasion_skin_shedder.txt index 61138ff80b1..2256a448bb5 100644 --- a/forge-gui/res/cardsfolder/s/skin_invasion_skin_shedder.txt +++ b/forge-gui/res/cardsfolder/s/skin_invasion_skin_shedder.txt @@ -2,8 +2,8 @@ Name:Skin Invasion ManaCost:R Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ R | ValidTgts$ Creature | AILogic$ Curse -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Enchanted creature attacks each combat if able. +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Curse +S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedBy | Description$ Enchanted creature attacks each combat if able. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.AttachedBy | Execute$ TrigChangeZone | TriggerDescription$ When enchanted creature dies, return CARDNAME to the battlefield transformed under your control. SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Transformed$ True | GainControl$ True | Defined$ CorrectedSelf AlternateMode:DoubleFaced diff --git a/forge-gui/res/cardsfolder/s/sprinting_warbrute.txt b/forge-gui/res/cardsfolder/s/sprinting_warbrute.txt index b758bcbd17a..3003a3dc035 100644 --- a/forge-gui/res/cardsfolder/s/sprinting_warbrute.txt +++ b/forge-gui/res/cardsfolder/s/sprinting_warbrute.txt @@ -2,6 +2,6 @@ Name:Sprinting Warbrute ManaCost:4 R Types:Creature Ogre Berserker PT:5/4 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:Dash:3 R Oracle:Sprinting Warbrute attacks each combat if able.\nDash {3}{R} (You may cast this spell for its dash cost. If you do, it gains haste, and it's returned from the battlefield to its owner's hand at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/s/suicidal_charge.txt b/forge-gui/res/cardsfolder/s/suicidal_charge.txt index 9550dd400c8..6274ea0b450 100644 --- a/forge-gui/res/cardsfolder/s/suicidal_charge.txt +++ b/forge-gui/res/cardsfolder/s/suicidal_charge.txt @@ -1,6 +1,9 @@ Name:Suicidal Charge ManaCost:3 B R Types:Enchantment -A:AB$ PumpAll | Cost$ Sac<1/CARDNAME> | ValidCards$ Creature.OppCtrl | NumAtt$ -1 | NumDef$ -1 | KW$ HIDDEN CARDNAME attacks each combat if able. | IsCurse$ True | SpellDescription$ Creatures your opponents control get -1/-1 until end of turn. Those creatures attack this turn if able. +A:AB$ PumpAll | Cost$ Sac<1/CARDNAME> | ValidCards$ Creature.OppCtrl | NumAtt$ -1 | NumDef$ -1 | RememberAllPumped$ True | SubAbility$ DBAnimate | IsCurse$ True | SpellDescription$ Creatures your opponents control get -1/-1 until end of turn. Those creatures attack this turn if able. +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | staticAbilities$ MustAttack | SubAbility$ DBCleanup | StackDescription$ None +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All Oracle:Sacrifice Suicidal Charge: Creatures your opponents control get -1/-1 until end of turn. Those creatures attack this turn if able. diff --git a/forge-gui/res/cardsfolder/t/tattermunge_maniac.txt b/forge-gui/res/cardsfolder/t/tattermunge_maniac.txt index d35dff06a56..25f3cf1446c 100644 --- a/forge-gui/res/cardsfolder/t/tattermunge_maniac.txt +++ b/forge-gui/res/cardsfolder/t/tattermunge_maniac.txt @@ -2,5 +2,5 @@ Name:Tattermunge Maniac ManaCost:RG Types:Creature Goblin Warrior PT:2/1 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Tattermunge Maniac attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/t/tectonic_fiend.txt b/forge-gui/res/cardsfolder/t/tectonic_fiend.txt index 3f9389cfd83..aeb8dc45bb8 100644 --- a/forge-gui/res/cardsfolder/t/tectonic_fiend.txt +++ b/forge-gui/res/cardsfolder/t/tectonic_fiend.txt @@ -2,6 +2,6 @@ Name:Tectonic Fiend ManaCost:4 R R Types:Creature Elemental PT:7/7 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:Echo:4 R R Oracle:Echo {4}{R}{R} (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.)\nTectonic Fiend attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/t/territorial_hellkite.txt b/forge-gui/res/cardsfolder/t/territorial_hellkite.txt index baf8df527e1..ac609664fa1 100644 --- a/forge-gui/res/cardsfolder/t/territorial_hellkite.txt +++ b/forge-gui/res/cardsfolder/t/territorial_hellkite.txt @@ -6,7 +6,8 @@ K:Flying K:Haste T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, choose an opponent at random that Territorial Hellkite didn't attack during your last combat. CARDNAME attacks that player this combat if able. If you can't choose an opponent this way, tap CARDNAME. SVar:TrigChoose:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent+IsNotRemembered | Random$ True | ChooseSubAbility$ DBPump | CantChooseSubAbility$ DBTap -SVar:DBPump:DB$ Pump | Defined$ Self | KW$ HIDDEN CARDNAME attacks specific player each combat if able:ChosenPlayer | Duration$ UntilEndOfCombat +SVar:DBPump:DB$ Animate | Defined$ Self | staticAbilities$ AttackChosen | Duration$ UntilEndOfCombat +SVar:AttackChosen:Mode$ MustAttack | ValidCreature$ Card.Self | MustAttack$ ChosenPlayer | Secondary$ True SVar:DBTap:DB$ Tap | Defined$ Self | SubAbility$ DBCleanup T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigClearRem | Static$ True SVar:TrigClearRem:DB$ Cleanup | ClearRemembered$ True | SubAbility$ TrigRemember diff --git a/forge-gui/res/cardsfolder/t/thantis_the_warweaver.txt b/forge-gui/res/cardsfolder/t/thantis_the_warweaver.txt index 1f9141d2e59..eb7cb071a30 100644 --- a/forge-gui/res/cardsfolder/t/thantis_the_warweaver.txt +++ b/forge-gui/res/cardsfolder/t/thantis_the_warweaver.txt @@ -4,7 +4,8 @@ Types:Legendary Creature Spider PT:5/5 K:Vigilance K:Reach -S:Mode$ Continuous | Affected$ Creature | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ All creatures attack each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature | Description$ All creatures attack each combat if able. T:Mode$ Attacks | ValidCard$ Creature | Attacked$ You,Planeswalker.YouCtrl | TriggerZones$ Battlefield | Execute$ DragonWake | TriggerDescription$ Whenever a creature attacks you or a planeswalker you control, put a +1/+1 counter on CARDNAME. SVar:DragonWake:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +DeckHas:Ability$Counters Oracle:Vigilance, reach\nAll creatures attack each combat if able.\nWhenever a creature attacks you or a planeswalker you control, put a +1/+1 counter on Thantis, the Warweaver. diff --git a/forge-gui/res/cardsfolder/t/the_akroan_war.txt b/forge-gui/res/cardsfolder/t/the_akroan_war.txt index efffc5c30bf..7e93186a43d 100644 --- a/forge-gui/res/cardsfolder/t/the_akroan_war.txt +++ b/forge-gui/res/cardsfolder/t/the_akroan_war.txt @@ -3,9 +3,8 @@ ManaCost:3 R Types:Enchantment Saga K:Saga:3:DBGainControl,DBAllAttack,DBDamageTapped SVar:DBGainControl:DB$ GainControl | ValidTgts$ Creature | TgtPrompt$ Select target creature | LoseControl$ LeavesPlay | SpellDescription$ Gain control of target creature for as long as CARDNAME remains on the battlefield. - -# Refactor as Effect -SVar:DBAllAttack:DB$ PumpAll | ValidCards$ Creature.OppCtrl | Duration$ UntilYourNextTurn | KW$ HIDDEN CARDNAME attacks each combat if able. | SpellDescription$ Until your next turn, creatures your opponents control attack each combat if able. +SVar:DBAllAttack:DB$ Effect | Duration$ UntilYourNextTurn | StaticAbilities$ MustAttack | SpellDescription$ Until your next turn, creatures your opponents control attack each combat if able. +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Creature.OppCtrl | Description$Until your next turn, creatures your opponents control attack each combat if able. SVar:DBDamageTapped:DB$ EachDamage | ValidCards$ Creature.tapped | NumDmg$ X | DamageDesc$ damage equal to its power | DefinedCards$ Self | SpellDescription$ Each tapped creature deals damage to itself equal to its power. SVar:X:Count$CardPower Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Gain control of target creature for as long as The Akroan War remains on the battlefield.\nII — Until your next turn, creatures your opponents control attack each combat if able.\nIII — Each tapped creature deals damage to itself equal to its power. diff --git a/forge-gui/res/cardsfolder/t/the_dead_shall_serve.txt b/forge-gui/res/cardsfolder/t/the_dead_shall_serve.txt index 6da5041e0b9..5afb31504b0 100644 --- a/forge-gui/res/cardsfolder/t/the_dead_shall_serve.txt +++ b/forge-gui/res/cardsfolder/t/the_dead_shall_serve.txt @@ -3,7 +3,9 @@ ManaCost:no cost Types:Scheme T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ TrigControl | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, for each opponent, put up to one target creature card from that player's graveyard onto the battlefield under your control. Each of those creatures attacks its owner each combat if able. SVar:TrigControl:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | ValidTgts$ Creature.OppCtrl | TgtZone$ Graveyard | TgtPrompt$ Choose target creature card in each opponent's graveyard | TargetMin$ 0 | TargetMax$ OneEach | TargetsWithDifferentControllers$ True | RememberChanged$ True | SubAbility$ DBPump -SVar:DBPump:DB$ PumpAll | ValidCards$ Card.IsRemembered | KW$ HIDDEN CARDNAME attacks specific player each combat if able:CardOwner | Duration$ UntilLoseControlOfHost | SubAbility$ DBCleanup +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ AddAttackStatic | ForgetOnMoved$ Battlefield | Duration$ UntilLoseControlOfHost | SubAbility$ DBCleanup +SVar:AddAttackStatic:Continuous | Affected$ Card.IsRemembered | AddStaticAbility$ AttackOwner | Description$ Each of those creatures attacks its owner each combat if able. +SVar:AttackOwner:Mode$ MustAttack | ValidCreature$ Card.Self | MustAttack$ CardOwner | Description$ This permanent attacks its owner each turn if able. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:OneEach:PlayerCountOpponents$Amount Oracle:When you set this scheme in motion, for each opponent, put up to one target creature card from that player's graveyard onto the battlefield under your control. Each of those creatures attacks its owner each combat if able. diff --git a/forge-gui/res/cardsfolder/t/thran_war_machine.txt b/forge-gui/res/cardsfolder/t/thran_war_machine.txt index de03f26f616..11e45defefc 100644 --- a/forge-gui/res/cardsfolder/t/thran_war_machine.txt +++ b/forge-gui/res/cardsfolder/t/thran_war_machine.txt @@ -2,6 +2,6 @@ Name:Thran War Machine ManaCost:4 Types:Artifact Creature Construct PT:4/5 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:Echo:4 Oracle:Echo {4} (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.)\nThran War Machine attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/t/tormentors_trident.txt b/forge-gui/res/cardsfolder/t/tormentors_trident.txt index 0ff0eece56f..56169aa97cf 100644 --- a/forge-gui/res/cardsfolder/t/tormentors_trident.txt +++ b/forge-gui/res/cardsfolder/t/tormentors_trident.txt @@ -2,5 +2,6 @@ Name:Tormentor's Trident ManaCost:2 Types:Artifact Equipment K:Equip:3 -S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ 3 | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Equipped creature gets +3/+0 and attacks each combat if able. +S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ 3 | Description$ Equipped creature gets +3/+0 and attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.EquippedBy | Secondary$ True Oracle:Equipped creature gets +3/+0 and attacks each combat if able.\nEquip {3} diff --git a/forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt b/forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt index 02e6efebe19..e86df1a6a73 100644 --- a/forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt +++ b/forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Squirrel PT:1/1 K:This spell can't be countered. K:Indestructible -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a creature you control deals combat damage to a player, draw a card. SVar:TrigDraw:DB$ Draw | NumCards$ 1 Oracle:This spell can't be countered.\nIndestructible\nToski, Bearer of Secrets attacks each combat if able.\nWhenever a creature you control deals combat damage to a player, draw a card. diff --git a/forge-gui/res/cardsfolder/t/town_gossipmonger_incited_rabble.txt b/forge-gui/res/cardsfolder/t/town_gossipmonger_incited_rabble.txt index 97aefe783de..7864b204d98 100644 --- a/forge-gui/res/cardsfolder/t/town_gossipmonger_incited_rabble.txt +++ b/forge-gui/res/cardsfolder/t/town_gossipmonger_incited_rabble.txt @@ -13,6 +13,6 @@ ManaCost:no cost Colors:red Types:Creature Human PT:2/3 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. A:AB$ Pump | Cost$ 2 | NumAtt$ +1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. Oracle:Incited Rabble attacks each combat if able.\n{2}: Incited Rabble gets +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/t/trench_behemoth.txt b/forge-gui/res/cardsfolder/t/trench_behemoth.txt index 0a1c7cf735a..ec32e8e6384 100644 --- a/forge-gui/res/cardsfolder/t/trench_behemoth.txt +++ b/forge-gui/res/cardsfolder/t/trench_behemoth.txt @@ -7,7 +7,8 @@ SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Hexproof T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigEffect | TriggerDescription$ Whenever a land enters the battlefield under your control, target creature an opponent controls attacks during its controller's next combat phase if able. SVar:TrigEffect:DB$ Effect | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | IsCurse$ True | RememberObjects$ Targeted | Triggers$ MustAttackTrig | Duration$ Permanent | ExileOnMoved$ Battlefield SVar:MustAttackTrig:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ Player.controlsCreature.IsRemembered_GE1 | Execute$ TrigPump | Static$ True | TriggerDescription$ Target creature an opponent controls attacks during its controller's next combat phase if able. -SVar:TrigPump:DB$ Animate | Defined$ Remembered | HiddenKeywords$ CARDNAME attacks each combat if able. | Duration$ UntilEndOfCombat | SubAbility$ ExileSelf +SVar:TrigPump:DB$ Animate | Defined$ Remembered | staticAbilities$ MustAttack | Duration$ UntilEndOfCombat | SubAbility$ ExileSelf +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks during its controller's next combat phase if able. SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self SVar:BuffedBy:Land Oracle:Return a land you control to its owner's hand: Untap Trench Behemoth. It gains hexproof until end of turn.\nWhenever a land enters the battlefield under your control, target creature an opponent controls attacks during its controller's next combat phase if able. diff --git a/forge-gui/res/cardsfolder/u/ulamogs_crusher.txt b/forge-gui/res/cardsfolder/u/ulamogs_crusher.txt index 44fa2eda729..8fb1305ed24 100644 --- a/forge-gui/res/cardsfolder/u/ulamogs_crusher.txt +++ b/forge-gui/res/cardsfolder/u/ulamogs_crusher.txt @@ -3,5 +3,5 @@ ManaCost:8 Types:Creature Eldrazi PT:8/8 K:Annihilator:2 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Annihilator 2 (Whenever this creature attacks, defending player sacrifices two permanents.)\nUlamog's Crusher attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/u/uncontrollable_anger.txt b/forge-gui/res/cardsfolder/u/uncontrollable_anger.txt index 5660fad4b9e..57b357f944b 100644 --- a/forge-gui/res/cardsfolder/u/uncontrollable_anger.txt +++ b/forge-gui/res/cardsfolder/u/uncontrollable_anger.txt @@ -2,7 +2,8 @@ Name:Uncontrollable Anger ManaCost:2 R R Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ 2 R R | ValidTgts$ Creature | AILogic$ Pump -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ CARDNAME attacks each combat if able. | Description$ Enchanted creature gets +2/+2 and attacks each combat if able. +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | Description$ Enchanted creature gets +2/+2 and attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedBy | Secondary$ True K:Flash Oracle:Flash (You may cast this spell any time you could cast an instant.)\nEnchant creature\nEnchanted creature gets +2/+2 and attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/u/underworld_rage_hound.txt b/forge-gui/res/cardsfolder/u/underworld_rage_hound.txt index 199ea8b068f..86e4fa9ac82 100644 --- a/forge-gui/res/cardsfolder/u/underworld_rage_hound.txt +++ b/forge-gui/res/cardsfolder/u/underworld_rage_hound.txt @@ -2,7 +2,7 @@ Name:Underworld Rage-Hound ManaCost:1 R Types:Creature Elemental Dog PT:3/1 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:Escape:3 R ExileFromGrave<3/Card.Other/other> K:etbCounter:P1P1:1:ValidCard$ Card.Self+escaped:CARDNAME escapes with a +1/+1 counter on it. DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/u/urborg_drake.txt b/forge-gui/res/cardsfolder/u/urborg_drake.txt index 74b51d20273..049fe9bf613 100644 --- a/forge-gui/res/cardsfolder/u/urborg_drake.txt +++ b/forge-gui/res/cardsfolder/u/urborg_drake.txt @@ -3,5 +3,5 @@ ManaCost:1 U B Types:Creature Drake PT:2/3 K:Flying -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Flying\nUrborg Drake attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/u/utvara_scalper.txt b/forge-gui/res/cardsfolder/u/utvara_scalper.txt index fbc1255bc7b..45cfdade418 100644 --- a/forge-gui/res/cardsfolder/u/utvara_scalper.txt +++ b/forge-gui/res/cardsfolder/u/utvara_scalper.txt @@ -3,5 +3,5 @@ ManaCost:1 R Types:Creature Goblin Scout PT:1/2 K:Flying -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Flying\nUtvara Scalper attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/upcoming/public_enemy.txt b/forge-gui/res/cardsfolder/upcoming/public_enemy.txt new file mode 100644 index 00000000000..bc11e6205b7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/public_enemy.txt @@ -0,0 +1,9 @@ +Name:Public Enemy +ManaCost:2 U +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Curse +S:Mode$ MustAttack | ValidCreature$ Creature | MustAttack$ EnchantedController | Description$ All creatures attack enchanted creature's controller each combat if able. +T:Mode$ ChangesZone | ValidCard$ Card.AttachedBy | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigDraw | TriggerDescription$ When enchanted creature dies, draw a card. +SVar:TrigDraw:DB$ Draw +Oracle:Enchant creature\nAll creatures attack enchanted creature's controller each combat if able.\nWhen enchanted creature dies, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/sizzling_soloist.txt b/forge-gui/res/cardsfolder/upcoming/sizzling_soloist.txt index 143ac3190d1..b7451c64ec0 100644 --- a/forge-gui/res/cardsfolder/upcoming/sizzling_soloist.txt +++ b/forge-gui/res/cardsfolder/upcoming/sizzling_soloist.txt @@ -6,7 +6,8 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creatu SVar:TrigCantBlock:DB$ Pump | ValidTgts$ Creature.OppCtrl | KW$ HIDDEN CARDNAME can't block. | TgtPrompt$ Select target creature an opponent controls | IsCurse$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ2 | RememberObjects$ Targeted | Triggers$ MustAttackTrig | Duration$ Permanent | ExileOnMoved$ Battlefield SVar:MustAttackTrig:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ Player.controlsCreature.IsRemembered_GE1 | Execute$ TrigAttacks | Static$ True | TriggerDescription$ This creature attacks during its controller's next combat phase if able. -SVar:TrigAttacks:DB$ Pump | Defined$ Remembered | KW$ HIDDEN CARDNAME attacks each combat if able. | Duration$ UntilEndOfCombat | SubAbility$ ExileSelf +SVar:TrigAttacks:DB$ Animate | Defined$ Remembered | staticAbilities$ MustAttack | Duration$ UntilEndOfCombat | SubAbility$ ExileSelf +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks during its controller's next combat phase if able. SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self SVar:X:Count$ResolvedThisTurn SVar:BuffedBy:Creature diff --git a/forge-gui/res/cardsfolder/v/valley_dasher.txt b/forge-gui/res/cardsfolder/v/valley_dasher.txt index 02190a0ef95..b349af47516 100644 --- a/forge-gui/res/cardsfolder/v/valley_dasher.txt +++ b/forge-gui/res/cardsfolder/v/valley_dasher.txt @@ -3,5 +3,5 @@ ManaCost:1 R Types:Creature Human Berserker PT:2/2 K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. Oracle:Haste\nValley Dasher attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/v/volatile_rig.txt b/forge-gui/res/cardsfolder/v/volatile_rig.txt index b44502de8de..b87774b9ee0 100644 --- a/forge-gui/res/cardsfolder/v/volatile_rig.txt +++ b/forge-gui/res/cardsfolder/v/volatile_rig.txt @@ -3,7 +3,7 @@ ManaCost:4 Types:Artifact Creature Construct PT:4/4 K:Trample -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ DamageDoneOnce | Execute$ TrigFlipSac | ValidTarget$ Card.Self | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME is dealt damage, flip a coin. If you lose the flip, sacrifice CARDNAME. SVar:TrigFlipSac:DB$ FlipACoin | LoseSubAbility$ DBSacrifice SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self diff --git a/forge-gui/res/cardsfolder/w/walking_desecration.txt b/forge-gui/res/cardsfolder/w/walking_desecration.txt index cea2809bbce..7e82badec5d 100644 --- a/forge-gui/res/cardsfolder/w/walking_desecration.txt +++ b/forge-gui/res/cardsfolder/w/walking_desecration.txt @@ -3,6 +3,9 @@ ManaCost:2 B Types:Creature Zombie PT:1/1 A:AB$ ChooseType | Cost$ B T | Defined$ You | Type$ Creature | SubAbility$ DBPumpAll | SpellDescription$ Creatures of the creature type of your choice attack this turn if able. -SVar:DBPumpAll:DB$ PumpAll | ValidCards$ Creature.ChosenType | IsCurse$ True | KW$ HIDDEN CARDNAME attacks each combat if able. +SVar:DBPumpAll:DB$ PumpAll | ValidCards$ Creature.ChosenType | IsCurse$ True | RememberAllPumped$ True | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | staticAbilities$ MustAttack | SubAbility$ DBCleanup | StackDescription$ None +SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All Oracle:{B}, {T}: Creatures of the creature type of your choice attack this turn if able. diff --git a/forge-gui/res/cardsfolder/w/warmonger_hellkite.txt b/forge-gui/res/cardsfolder/w/warmonger_hellkite.txt index 95f134d3997..d7eaaba153b 100644 --- a/forge-gui/res/cardsfolder/w/warmonger_hellkite.txt +++ b/forge-gui/res/cardsfolder/w/warmonger_hellkite.txt @@ -3,6 +3,6 @@ ManaCost:4 R R Types:Creature Dragon PT:5/5 K:Flying -S:Mode$ Continuous | Affected$ Creature | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ All creatures attack each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature | Description$ All creatures attack each combat if able. A:AB$ PumpAll | Cost$ 1 R | ValidCards$ Creature.attacking | NumAtt$ +1 | SpellDescription$ Attacking creatures get +1/+0 until end of turn. Oracle:Flying\nAll creatures attack each combat if able.\n{1}{R}: Attacking creatures get +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/w/weary_prisoner_wrathful_jailbreaker.txt b/forge-gui/res/cardsfolder/w/weary_prisoner_wrathful_jailbreaker.txt index 692815aa907..c07bb3a06bc 100644 --- a/forge-gui/res/cardsfolder/w/weary_prisoner_wrathful_jailbreaker.txt +++ b/forge-gui/res/cardsfolder/w/weary_prisoner_wrathful_jailbreaker.txt @@ -14,6 +14,6 @@ ManaCost:no cost Colors:red Types:Creature Werewolf PT:6/6 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:Nightbound Oracle:Wrathful Jailbreaker attacks each combat if able.\nNightbound (If a player casts at least two spells during their own turn, it becomes day next turn.) diff --git a/forge-gui/res/cardsfolder/x/xantcha_sleeper_agent.txt b/forge-gui/res/cardsfolder/x/xantcha_sleeper_agent.txt index e18a4047238..9d00794d925 100644 --- a/forge-gui/res/cardsfolder/x/xantcha_sleeper_agent.txt +++ b/forge-gui/res/cardsfolder/x/xantcha_sleeper_agent.txt @@ -2,7 +2,7 @@ Name:Xantcha, Sleeper Agent ManaCost:1 B R Types:Legendary Creature Phyrexian Minion PT:5/5 -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ DBChooseOpp | Layer$ Control | Description$ CARDNAME enters the battlefield under the control of an opponent of your choice. SVar:DBChooseOpp:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent to give control to: | AILogic$ Curse | SubAbility$ MoveToPlay SVar:MoveToPlay:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Battlefield | Defined$ ReplacedCard | GainControl$ True | NewController$ ChosenPlayer | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/z/zurgo_helmsmasher.txt b/forge-gui/res/cardsfolder/z/zurgo_helmsmasher.txt index 6939eea1402..9df9e6d2bb5 100644 --- a/forge-gui/res/cardsfolder/z/zurgo_helmsmasher.txt +++ b/forge-gui/res/cardsfolder/z/zurgo_helmsmasher.txt @@ -3,7 +3,7 @@ ManaCost:2 R W B Types:Legendary Creature Orc Warrior PT:7/2 K:Haste -K:CARDNAME attacks each combat if able. +S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Indestructible | Condition$ PlayerTurn | Description$ CARDNAME has indestructible as long as it's your turn. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.DamagedBy | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, put a +1/+1 counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | ConditionPresent$ Card.StrictlySelf diff --git a/forge-gui/res/tokenscripts/b_2_2_zombie_designated.txt b/forge-gui/res/tokenscripts/b_2_2_zombie_designated.txt index 0d2be86d6b4..37b67e8ccb2 100644 --- a/forge-gui/res/tokenscripts/b_2_2_zombie_designated.txt +++ b/forge-gui/res/tokenscripts/b_2_2_zombie_designated.txt @@ -3,5 +3,5 @@ ManaCost:no cost Types:Creature Zombie Colors:black PT:2/2 -K:CARDNAME attacks specific player each combat if able:Remembered +S:Mode$ MustAttack | ValidCreature$ Card.Self | MustAttack$ Remembered | Description$ This creature attacks its designated player each combat if able. Oracle:This creature attacks its designated player each combat if able. diff --git a/forge-gui/res/tokenscripts/b_3_3_horror_designated.txt b/forge-gui/res/tokenscripts/b_3_3_horror_designated.txt index b1e991d227d..c8a3efcde66 100644 --- a/forge-gui/res/tokenscripts/b_3_3_horror_designated.txt +++ b/forge-gui/res/tokenscripts/b_3_3_horror_designated.txt @@ -3,5 +3,5 @@ ManaCost:no cost Types:Creature Horror Colors:black PT:3/3 -K:CARDNAME attacks specific player each combat if able:Remembered +S:Mode$ MustAttack | ValidCreature$ Card.Self | MustAttack$ Remembered | Description$ This creature attacks its designated player each combat if able. Oracle:This creature attacks the designated player each combat if able. diff --git a/forge-gui/res/tokenscripts/r_1_1_goblin_all_attack.txt b/forge-gui/res/tokenscripts/r_1_1_goblin_all_attack.txt index 4cd16716254..20a6a38efc7 100644 --- a/forge-gui/res/tokenscripts/r_1_1_goblin_all_attack.txt +++ b/forge-gui/res/tokenscripts/r_1_1_goblin_all_attack.txt @@ -3,5 +3,5 @@ ManaCost:no cost Types:Creature Goblin Colors:red PT:1/1 -S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures you control attack each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.YouCtrl | Description$ Creatures you control attack each combat if able. Oracle:Creatures you control attack each combat if able. diff --git a/forge-gui/res/tokenscripts/r_1_1_pirate_noblock_all_attack.txt b/forge-gui/res/tokenscripts/r_1_1_pirate_noblock_all_attack.txt index 04d32270b12..0c94b4a02d0 100644 --- a/forge-gui/res/tokenscripts/r_1_1_pirate_noblock_all_attack.txt +++ b/forge-gui/res/tokenscripts/r_1_1_pirate_noblock_all_attack.txt @@ -4,5 +4,5 @@ Types:Creature Pirate Colors:red PT:1/1 K:CARDNAME can't block. -S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddHiddenKeyword$ CARDNAME attacks each combat if able. | Description$ Creatures you control attack each combat if able. +S:Mode$ MustAttack | ValidCreature$ Creature.YouCtrl | Description$ Creatures you control attack each combat if able. Oracle:This creature can't block.\nCreatures you control attack each combat if able.