diff --git a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java index 5bb1698bb5d..c1d680117fe 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java @@ -1154,7 +1154,6 @@ private static Card attachAIPumpPreference(final Player ai, final SpellAbility s totPower += AbilityUtils.calculateAmount(attachSource, stAbility.getParam("AddPower"), stAbility); grantingAbilities |= stAbility.hasParam("AddAbility"); - grantingExtraBlock |= stAbility.hasParam("CanBlockAmount") || stAbility.hasParam("CanBlockAny"); String kws = stAbility.getParam("AddKeyword"); if (kws != null) { diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java index 979a70524b2..6c22c98fc72 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java @@ -330,8 +330,6 @@ protected AiAbilityDecision checkApiLogic(Player ai, SpellAbility sa) { return new AiAbilityDecision(0, AiPlayDecision.DoesntImpactCombat); } - return new AiAbilityDecision(100, AiPlayDecision.WillPlay); - } else if (grantsUsefulExtraBlockOpts(ai, sa, card, keywords)) { return new AiAbilityDecision(100, AiPlayDecision.WillPlay); } } diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAiBase.java b/forge-ai/src/main/java/forge/ai/ability/PumpAiBase.java index 2d5fa7f447c..57911b073ab 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAiBase.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAiBase.java @@ -3,7 +3,6 @@ import forge.ai.*; import forge.card.MagicColor; import forge.game.Game; -import forge.game.ability.AbilityUtils; import forge.game.card.*; import forge.game.combat.Combat; import forge.game.combat.CombatUtil; @@ -31,48 +30,6 @@ public boolean containsUsefulKeyword(final Player ai, final List keyword return false; } - public boolean grantsUsefulExtraBlockOpts(final Player ai, final SpellAbility sa, final Card card, List keywords) { - PhaseHandler ph = ai.getGame().getPhaseHandler(); - Card pumped = ComputerUtilCard.getPumpedCreature(ai, sa, card, 0, 0, keywords); - - if (ph.isPlayerTurn(ai) || !ph.getPhase().equals(PhaseType.COMBAT_DECLARE_ATTACKERS)) { - return false; - } - - int canBlockNum = 1 + card.canBlockAdditional(); - int canBlockNumPumped = canBlockNum; // PumpedCreature doesn't return a meaningful value of canBlockAdditional, so we'll use sa params below - - if (sa.hasParam("CanBlockAny")) { - canBlockNumPumped = Integer.MAX_VALUE; - } else if (sa.hasParam("CanBlockAmount")) { - canBlockNumPumped += AbilityUtils.calculateAmount(pumped, sa.getParam("CanBlockAmount"), sa); - } - - int possibleBlockNum = 0; - int possibleBlockNumPumped = 0; - - for (Card attacker : ai.getGame().getCombat().getAttackers()) { - if (CombatUtil.canBlock(attacker, card)) { - possibleBlockNum++; - if (possibleBlockNum > canBlockNum) { - possibleBlockNum = canBlockNum; - break; - } - } - } - for (Card attacker : ai.getGame().getCombat().getAttackers()) { - if (CombatUtil.canBlock(attacker, pumped)) { - possibleBlockNumPumped++; - if (possibleBlockNumPumped > canBlockNumPumped) { - possibleBlockNumPumped = canBlockNumPumped; - break; - } - } - } - - return possibleBlockNumPumped > possibleBlockNum; - } - /** * Checks if is useful keyword. * diff --git a/forge-game/src/main/java/forge/game/StaticEffect.java b/forge-game/src/main/java/forge/game/StaticEffect.java index 36ba767d615..7214032d4ef 100644 --- a/forge-game/src/main/java/forge/game/StaticEffect.java +++ b/forge-game/src/main/java/forge/game/StaticEffect.java @@ -307,13 +307,6 @@ final CardCollectionView remove(List layers) { if (hasParam("Goad")) { affectedCard.removeGoad(getTimestamp()); } - - if (hasParam("CanBlockAny")) { - affectedCard.removeCanBlockAny(getTimestamp()); - } - if (hasParam("CanBlockAmount")) { - affectedCard.removeCanBlockAdditional(getTimestamp()); - } } } return affectedCards; diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java index 81d29736ab9..2db41230ea9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java @@ -77,14 +77,6 @@ private static void applyPump(final SpellAbility sa, final Card applyTo, gameCard.updatePTforView(); } - if (sa.hasParam("CanBlockAny")) { - gameCard.addCanBlockAny(timestamp); - } - if (sa.hasParam("CanBlockAmount")) { - int v = AbilityUtils.calculateAmount(host, sa.getParam("CanBlockAmount"), sa, true); - gameCard.addCanBlockAdditional(v, timestamp); - } - if (sa.hasParam("LeaveBattlefield")) { addLeaveBattlefieldReplacement(gameCard, sa, sa.getParam("LeaveBattlefield")); } @@ -103,17 +95,12 @@ public void run() { host.removeGainControlTargets(gameCard); gameCard.removePTBoost(timestamp, 0); - boolean updateText = gameCard.removeCanBlockAny(timestamp); - updateText |= gameCard.removeCanBlockAdditional(timestamp); if (keywords.size() > 0) { gameCard.removeHiddenExtrinsicKeywords(timestamp, 0); gameCard.removeChangedCardKeywords(timestamp, 0); } gameCard.updatePTforView(); - if (updateText) { - gameCard.updateAbilityTextForView(); - } game.fireEvent(new GameEventCardStatsChanged(gameCard)); } @@ -238,21 +225,6 @@ protected String getStackDescription(final SpellAbility sa) { sb.append(i+2 == keywords.size() ? "and " : ""); } - if (sa.hasParam("CanBlockAny")) { - if (gets || gains) { - sb.append(" and "); - } - sb.append("can block any number of creatures"); - } else if (sa.hasParam("CanBlockAmount")) { - if (gets || gains) { - sb.append(" and "); - } - String n = sa.getParam("CanBlockAmount"); - sb.append("can block an additional "); - sb.append("1".equals(n) ? "creature" : Lang.nounWithNumeral(n, "creature")); - sb.append(" each combat"); - } - String duration = sa.getParam("Duration"); if (!"Permanent".equals(duration)) { if ("UntilUntaps".equals(duration)) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 64feac21e85..5bb74be370f 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -175,9 +175,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr private final Map counterTypeKeywordStatic = Maps.newHashMap(); - private final Map canBlockAdditional = Maps.newTreeMap(); - private final Set canBlockAny = Sets.newHashSet(); - // changes that say "replace each instance of one [color,type] by another - timestamp is the key of maps private final CardChangedWords changedTextColors = new CardChangedWords(); private final CardChangedWords changedTextTypes = new CardChangedWords(); @@ -8129,41 +8126,12 @@ public void resetActivationsPerTurn() { numberTurnActivations.clear(); } - public void addCanBlockAdditional(int n, long timestamp) { - if (n <= 0) { - return; - } - canBlockAdditional.put(timestamp, n); - getView().updateBlockAdditional(this); - } - public boolean removeCanBlockAdditional(long timestamp) { - boolean result = canBlockAdditional.remove(timestamp) != null; - if (result) { - getView().updateBlockAdditional(this); - } - return result; - } public int canBlockAdditional() { - int result = 0; - for (Integer v : canBlockAdditional.values()) { - result += v; - } - return result; + return StaticAbilityCanBlockAmount.canBlockAmount(this); } - public void addCanBlockAny(long timestamp) { - canBlockAny.add(timestamp); - getView().updateBlockAdditional(this); - } - public boolean removeCanBlockAny(long timestamp) { - boolean result = canBlockAny.remove(timestamp); - if (result) { - getView().updateBlockAdditional(this); - } - return result; - } public boolean canBlockAny() { - return !canBlockAny.isEmpty(); + return StaticAbilityCanBlockAmount.canBlockAny(this); } public boolean removeChangedState() { diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 02cb4019aeb..7e7d1dc2eeb 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -917,21 +917,6 @@ public String getText(CardStateView state, HashMap translationsT sb.append("\r\n"); } - if (getCanBlockAny()) { - sb.append("\r\n\r\n"); - sb.append("CARDNAME can block any number of creatures.".replaceAll("CARDNAME", getName())); - sb.append("\r\n"); - } else { - int i = getBlockAdditional(); - if (i > 0) { - sb.append("\r\n\r\n"); - sb.append("CARDNAME can block an additional ".replaceAll("CARDNAME", getName())); - sb.append(i == 1 ? "creature" : Lang.nounWithNumeral(i, "creature")); - sb.append(" each combat."); - sb.append("\r\n"); - } - } - Set cantHaveKeyword = this.getCantHaveKeyword(); if (cantHaveKeyword != null && !cantHaveKeyword.isEmpty()) { sb.append("\r\n\r\n"); @@ -1168,19 +1153,6 @@ void updateHiddenId(final int hiddenId) { set(TrackableProperty.HiddenId, hiddenId); } - int getBlockAdditional() { - return get(TrackableProperty.BlockAdditional); - } - - boolean getCanBlockAny() { - return get(TrackableProperty.BlockAny); - } - - void updateBlockAdditional(Card c) { - set(TrackableProperty.BlockAdditional, c.canBlockAdditional()); - set(TrackableProperty.BlockAny, c.canBlockAny()); - } - public boolean isRingBearer() { return get(TrackableProperty.IsRingBearer); } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index 2cebfac57c8..5cfbfcab76f 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -177,7 +177,7 @@ private Set generateLayer() { } if (hasParam("AddHiddenKeyword") || hasParam("MayPlay") - || hasParam("IgnoreEffectCost") || hasParam("Goad") || hasParam("CanBlockAny") || hasParam("CanBlockAmount") + || hasParam("IgnoreEffectCost") || hasParam("Goad") || hasParam("AdjustLandPlays") || hasParam("ControlVote") || hasParam("AdditionalVote") || hasParam("AdditionalOptionalVote") || hasParam("DeclaresAttackers") || hasParam("DeclaresBlockers")) { layers.add(StaticAbilityLayer.RULES); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCanBlockAmount.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCanBlockAmount.java new file mode 100644 index 00000000000..79ffc4485f2 --- /dev/null +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCanBlockAmount.java @@ -0,0 +1,50 @@ +package forge.game.staticability; + +import forge.game.Game; +import forge.game.ability.AbilityUtils; +import forge.game.card.Card; +import forge.game.zone.ZoneType; + +public class StaticAbilityCanBlockAmount { + static public boolean canBlockAny(final Card blocker) { + final Game game = blocker.getGame(); + + for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { + for (final StaticAbility stAb : ca.getStaticAbilities()) { + if (!stAb.checkConditions(StaticAbilityMode.CanBlockAmount)) { + continue; + } + if (isValid(stAb, blocker) && "Any".equals(stAb.getParam("Amount"))) { + return true; + } + } + } + return false; + } + + static public int canBlockAmount(final Card blocker) { + final Game game = blocker.getGame(); + + int i = 0; + for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { + for (final StaticAbility stAb : ca.getStaticAbilities()) { + if (!stAb.checkConditions(StaticAbilityMode.CanBlockAmount)) { + continue; + } + if (isValid(stAb, blocker) && !"Any".equals(stAb.getParam("Amount"))) { + i += AbilityUtils.calculateAmount(stAb.getHostCard(), stAb.getParamOrDefault("Amount", "1"), stAb); + } + } + } + return i; + + } + + static public boolean isValid(StaticAbility stAb, Card blocker) { + if (!stAb.matchesValidParam("ValidCard", blocker)) { + return false; + } + return true; + } + +} diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java index ece9be9c4a1..ec34daa2157 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java @@ -875,13 +875,6 @@ public static CardCollectionView applyContinuousAbility(final StaticAbility stAb if (params.containsKey("Goad")) { affectedCard.addGoad(se.getTimestamp(), hostCard.getController()); } - if (params.containsKey("CanBlockAny")) { - affectedCard.addCanBlockAny(se.getTimestamp()); - } - if (params.containsKey("CanBlockAmount")) { - int v = AbilityUtils.calculateAmount(hostCard, params.get("CanBlockAmount"), stAb, true); - affectedCard.addCanBlockAdditional(v, se.getTimestamp()); - } } if (controllerMayPlay && (mayPlayLimit == null || stAb.getMayPlayTurn() < mayPlayLimit)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMode.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMode.java index f175dded79a..08afa7d6deb 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMode.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMode.java @@ -30,6 +30,9 @@ public enum StaticAbilityMode { // StaticAbilityMustTarget MustTarget, + // StaticAbilityCanBlockAmount + CanBlockAmount, + // StaticAbilityCantAttackBlock CantAttack, CanAttackDefender, diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index 12ef4f8e4d9..d5c7254ab03 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -187,8 +187,6 @@ public enum TrackableProperty { HasStorm(TrackableTypes.BooleanType), HasWard(TrackableTypes.BooleanType), HasWither(TrackableTypes.BooleanType), - BlockAdditional(TrackableTypes.IntegerType), - BlockAny(TrackableTypes.BooleanType), AbilityText(TrackableTypes.StringType), NonAbilityText(TrackableTypes.StringType), FoilIndex(TrackableTypes.IntegerType), diff --git a/forge-gui/res/cardsfolder/a/act_of_heroism.txt b/forge-gui/res/cardsfolder/a/act_of_heroism.txt index 4544731e2bb..1765b379d14 100644 --- a/forge-gui/res/cardsfolder/a/act_of_heroism.txt +++ b/forge-gui/res/cardsfolder/a/act_of_heroism.txt @@ -2,5 +2,7 @@ Name:Act of Heroism ManaCost:1 W Types:Instant A:SP$ Untap | ValidTgts$ Creature | SubAbility$ DBPump | SpellDescription$ Untap target creature. It gets +2/+2 until end of turn and can block an additional creature this turn. -SVar:DBPump:DB$ Pump | Defined$ Targeted | NumAtt$ +2 | NumDef$ +2 | CanBlockAmount$ 1 +SVar:DBPump:DB$ Pump | Defined$ Targeted | NumAtt$ +2 | NumDef$ +2 | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | ValidTgts$ Creature | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ DBBlock | AILogic$ Pump | StackDescription$ {c:Targeted} can block any number of creatures this turn. | SpellDescription$ Target creature can block any number of creatures this turn. +SVar:DBBlock:Mode$ CanBlockAmount | ValidCard$ Card.IsRemembered | Amount$ 1 | Description$ Creature can block an additional creature this turn. Oracle:Untap target creature. It gets +2/+2 until end of turn and can block an additional creature this turn. diff --git a/forge-gui/res/cardsfolder/a/anurid_swarmsnapper.txt b/forge-gui/res/cardsfolder/a/anurid_swarmsnapper.txt index b9eb22f7b23..595bf9e8fe8 100644 --- a/forge-gui/res/cardsfolder/a/anurid_swarmsnapper.txt +++ b/forge-gui/res/cardsfolder/a/anurid_swarmsnapper.txt @@ -3,5 +3,6 @@ ManaCost:2 G Types:Creature Frog Beast PT:1/4 K:Reach -A:AB$ Pump | Cost$ 1 G | Defined$ Self | CanBlockAmount$ 1 | SpellDescription$ CARDNAME can block an additional creature this turn. +A:AB$ Effect | Cost$ 1 G | Duration$ UntilHostLeavesPlayOrEOT | StaticAbilities$ DBBlock | AILogic$ Pump | StackDescription$ SpellDescription | SpellDescription$ CARDNAME can block an additional creature this turn. +SVar:DBBlock:Mode$ CanBlockAmount | ValidCard$ Card.EffectSource | Amount$ 1 | Description$ EFFECTSOURCE can block an additional creature this turn. Oracle:Reach (This creature can block creatures with flying.)\n{1}{G}: Anurid Swarmsnapper can block an additional creature this turn. diff --git a/forge-gui/res/cardsfolder/a/avatar_of_hope.txt b/forge-gui/res/cardsfolder/a/avatar_of_hope.txt index 7d6dff1b57f..4f2df8ef2a8 100644 --- a/forge-gui/res/cardsfolder/a/avatar_of_hope.txt +++ b/forge-gui/res/cardsfolder/a/avatar_of_hope.txt @@ -4,6 +4,6 @@ Types:Creature Avatar PT:4/9 S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 6 | EffectZone$ All | CheckSVar$ NeedHope | SVarCompare$ LE3 | Description$ If you have 3 or less life, CARDNAME costs {6} less to cast. K:Flying -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAny$ True | Description$ CARDNAME can block any number of creatures. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ Any | Description$ CARDNAME can block any number of creatures. SVar:NeedHope:Count$YourLifeTotal Oracle:If you have 3 or less life, this spell costs {6} less to cast.\nFlying\nAvatar of Hope can block any number of creatures. diff --git a/forge-gui/res/cardsfolder/b/blaze_of_glory.txt b/forge-gui/res/cardsfolder/b/blaze_of_glory.txt index df1d2e81308..7fba099fca4 100644 --- a/forge-gui/res/cardsfolder/b/blaze_of_glory.txt +++ b/forge-gui/res/cardsfolder/b/blaze_of_glory.txt @@ -1,7 +1,8 @@ Name:Blaze of Glory ManaCost:W Types:Instant -A:SP$ Pump | ValidTgts$ Creature.DefendingPlayerCtrl | TgtPrompt$ Select target creature defending player controls | CanBlockAny$ True | SubAbility$ GoingDownInStyle | ActivationPhases$ BeginCombat->Declare Attackers | StackDescription$ {c:Targeted} can block any number of creatures this turn. It blocks each attacking creature this turn if able. | SpellDescription$ Cast CARDNAME only during combat before blockers are declared. Target creature defending player controls can block any number of creatures this turn. It blocks each attacking creature this turn if able. +A:SP$ Effect | ValidTgts$ Creature.DefendingPlayerCtrl | TgtPrompt$ Select target creature defending player controls | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ DBBlock | AILogic$ Pump | SubAbility$ GoingDownInStyle | ActivationPhases$ BeginCombat->Declare Attackers | StackDescription$ {c:Targeted} can block any number of creatures this turn. It blocks each attacking creature this turn if able. | SpellDescription$ Cast CARDNAME only during combat before blockers are declared. Target creature defending player controls can block any number of creatures this turn. It blocks each attacking creature this turn if able. +SVar:DBBlock:Mode$ CanBlockAmount | ValidCard$ Card.IsRemembered | Amount$ Any | Description$ This creature can block any number of creatures. SVar:GoingDownInStyle:DB$ MustBlock | Defined$ ParentTarget | DefinedAttacker$ Valid Card.attacking | BlockAllDefined$ True | StackDescription$ None AI:RemoveDeck:All Oracle:Cast this spell only during combat before blockers are declared.\nTarget creature defending player controls can block any number of creatures this turn. It blocks each attacking creature this turn if able. diff --git a/forge-gui/res/cardsfolder/b/brave_the_sands.txt b/forge-gui/res/cardsfolder/b/brave_the_sands.txt index 4ba6f869536..bd8a149126c 100644 --- a/forge-gui/res/cardsfolder/b/brave_the_sands.txt +++ b/forge-gui/res/cardsfolder/b/brave_the_sands.txt @@ -2,7 +2,7 @@ Name:Brave the Sands ManaCost:1 W Types:Enchantment S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddKeyword$ Vigilance | Description$ Creatures you control have vigilance. -S:Mode$ Continuous | Affected$ Creature.YouCtrl | CanBlockAmount$ 1 | Description$ Each creature you control can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Creature.Self | Amount$ 1 | Description$ Each creature you control can block an additional creature each combat. SVar:NonStackingEffect:True SVar:PlayMain1:TRUE Oracle:Creatures you control have vigilance.\nEach creature you control can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/c/cenns_tactician.txt b/forge-gui/res/cardsfolder/c/cenns_tactician.txt index 7721d4c22b3..941591600ca 100644 --- a/forge-gui/res/cardsfolder/c/cenns_tactician.txt +++ b/forge-gui/res/cardsfolder/c/cenns_tactician.txt @@ -3,5 +3,5 @@ ManaCost:W Types:Creature Kithkin Soldier PT:1/1 A:AB$ PutCounter | Cost$ W T | ValidTgts$ Creature.Soldier | TgtPrompt$ Select target soldier creature | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on target Soldier creature. -S:Mode$ Continuous | Affected$ Creature.YouCtrl+counters_GE1_P1P1 | CanBlockAmount$ 1 | Description$ Each creature you control with a +1/+1 counter on it can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Creature.YouCtrl+counters_GE1_P1P1 | Amount$ 1 | Description$ Each creature you control with a +1/+1 counter on it can block an additional creature each combat. Oracle:{W}, {T}: Put a +1/+1 counter on target Soldier creature.\nEach creature you control with a +1/+1 counter on it can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/c/coastline_chimera.txt b/forge-gui/res/cardsfolder/c/coastline_chimera.txt index be35b1dae8e..19f3a241137 100644 --- a/forge-gui/res/cardsfolder/c/coastline_chimera.txt +++ b/forge-gui/res/cardsfolder/c/coastline_chimera.txt @@ -3,5 +3,6 @@ ManaCost:3 U Types:Creature Chimera PT:1/5 K:Flying -A:AB$ Pump | Cost$ 1 W | Defined$ Self | CanBlockAmount$ 1 | SpellDescription$ CARDNAME can block an additional creature this turn. +A:AB$ Effect | Cost$ 1 W | Duration$ UntilHostLeavesPlayOrEOT | StaticAbilities$ DBBlock | AILogic$ Pump | StackDescription$ SpellDescription | SpellDescription$ CARDNAME can block an additional creature this turn. +SVar:DBBlock:Mode$ CanBlockAmount | ValidCard$ Card.EffectSource | Amount$ 1 | Description$ EFFECTSOURCE can block an additional creature this turn. Oracle:Flying\n{1}{W}: Coastline Chimera can block an additional creature this turn. diff --git a/forge-gui/res/cardsfolder/e/echo_circlet.txt b/forge-gui/res/cardsfolder/e/echo_circlet.txt index d9a12251fa2..35ae4dd01bd 100644 --- a/forge-gui/res/cardsfolder/e/echo_circlet.txt +++ b/forge-gui/res/cardsfolder/e/echo_circlet.txt @@ -2,5 +2,5 @@ Name:Echo Circlet ManaCost:2 Types:Artifact Equipment K:Equip:1 -S:Mode$ Continuous | Affected$ Creature.EquippedBy | CanBlockAmount$ 1 | Description$ Equipped creature can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Creature.EquippedBy | Amount$ 1 | Description$ Equipped creature can block an additional creature each combat. Oracle:Equipped creature can block an additional creature each combat.\nEquip {1} diff --git a/forge-gui/res/cardsfolder/e/entangler.txt b/forge-gui/res/cardsfolder/e/entangler.txt index 6988b9737f5..5b13257557e 100644 --- a/forge-gui/res/cardsfolder/e/entangler.txt +++ b/forge-gui/res/cardsfolder/e/entangler.txt @@ -3,5 +3,5 @@ ManaCost:2 W W Types:Enchantment Aura K:Enchant:Creature SVar:AttachAILogic:Pump -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | CanBlockAny$ True | Description$ Enchanted creature can block any number of creatures. +S:Mode$ CanBlockAmount | ValidCard$ Creature.EnchantedBy | Amount$ Any | Description$ Enchanted creature can block any number of creatures. Oracle:Enchant creature\nEnchanted creature can block any number of creatures. diff --git a/forge-gui/res/cardsfolder/e/entourage_of_trest.txt b/forge-gui/res/cardsfolder/e/entourage_of_trest.txt index 68caed1d2a3..b57de3d3ad5 100644 --- a/forge-gui/res/cardsfolder/e/entourage_of_trest.txt +++ b/forge-gui/res/cardsfolder/e/entourage_of_trest.txt @@ -4,5 +4,5 @@ Types:Creature Elf Soldier PT:4/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMonarch | TriggerDescription$ When CARDNAME enters, you become the monarch. SVar:TrigMonarch:DB$ BecomeMonarch | Defined$ You -S:Mode$ Continuous | Affected$ Card.Self | Condition$ Monarch | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat as long as you're the monarch. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Condition$ Monarch | Description$ CARDNAME can block an additional creature each combat as long as you're the monarch. Oracle:When Entourage of Trest enters, you become the monarch.\nEntourage of Trest can block an additional creature each combat as long as you're the monarch. diff --git a/forge-gui/res/cardsfolder/f/foriysian_brigade.txt b/forge-gui/res/cardsfolder/f/foriysian_brigade.txt index 8508d40f6db..4f178eaf256 100644 --- a/forge-gui/res/cardsfolder/f/foriysian_brigade.txt +++ b/forge-gui/res/cardsfolder/f/foriysian_brigade.txt @@ -2,5 +2,5 @@ Name:Foriysian Brigade ManaCost:3 W Types:Creature Human Soldier PT:2/4 -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. Oracle:Foriysian Brigade can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/f/foriysian_interceptor.txt b/forge-gui/res/cardsfolder/f/foriysian_interceptor.txt index 138ea87c1f6..b1d4d97fe7a 100644 --- a/forge-gui/res/cardsfolder/f/foriysian_interceptor.txt +++ b/forge-gui/res/cardsfolder/f/foriysian_interceptor.txt @@ -4,5 +4,5 @@ Types:Creature Human Soldier PT:0/5 K:Flash K:Defender -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. Oracle:Flash (You may cast this spell any time you could cast an instant.)\nDefender\nForiysian Interceptor can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/f/foriysian_totem.txt b/forge-gui/res/cardsfolder/f/foriysian_totem.txt index c6429d5ef27..c68d978e7e6 100644 --- a/forge-gui/res/cardsfolder/f/foriysian_totem.txt +++ b/forge-gui/res/cardsfolder/f/foriysian_totem.txt @@ -3,7 +3,7 @@ ManaCost:3 Types:Artifact A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}. A:AB$ Animate | Cost$ 4 R | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Artifact,Creature,Giant | RemoveCreatureTypes$ True | Colors$ Red | OverwriteColors$ True | Keywords$ Trample | SpellDescription$ CARDNAME becomes a 4/4 red Giant artifact creature with trample until end of turn. -S:Mode$ Continuous | Affected$ Creature.Self | CanBlockAmount$ 1 | Description$ As long as CARDNAME is a creature, it can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Creature.Self | Amount$ 1 | Description$ As long as CARDNAME is a creature, it can block an additional creature each combat. DeckNeeds:Color$Red # TODO: The AI won't block multiple creatures yet, it seems. Can be improved. Oracle:{T}: Add {R}.\n{4}{R}: Foriysian Totem becomes a 4/4 red Giant artifact creature with trample until end of turn.\nAs long as Foriysian Totem is a creature, it can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/g/ghastbark_twins.txt b/forge-gui/res/cardsfolder/g/ghastbark_twins.txt index cd8f7c7cceb..5f5c6ba313a 100644 --- a/forge-gui/res/cardsfolder/g/ghastbark_twins.txt +++ b/forge-gui/res/cardsfolder/g/ghastbark_twins.txt @@ -3,5 +3,5 @@ ManaCost:5 G G Types:Creature Treefolk PT:7/7 K:Trample -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. Oracle:Trample (This creature can deal excess combat damage to the player or planeswalker it's attacking.)\nGhastbark Twins can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/g/give_no_ground.txt b/forge-gui/res/cardsfolder/g/give_no_ground.txt index 1e30e7bc6ba..b3275611c12 100644 --- a/forge-gui/res/cardsfolder/g/give_no_ground.txt +++ b/forge-gui/res/cardsfolder/g/give_no_ground.txt @@ -1,5 +1,7 @@ Name:Give No Ground ManaCost:3 W Types:Instant -A:SP$ Pump | ValidTgts$ Creature | NumAtt$ +2 | NumDef$ +6 | CanBlockAny$ True | SpellDescription$ Target creature gets +2/+6 until end of turn and can block any number of creatures this turn. +A:SP$ Pump | ValidTgts$ Creature | NumAtt$ +2 | NumDef$ +6 | SubAbility$ DBEffect | SpellDescription$ Target creature gets +2/+6 until end of turn and can block any number of creatures this turn. +SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ DBBlock | AILogic$ Pump | StackDescription$ {c:Targeted} can block any number of creatures this turn. +SVar:DBBlock:Mode$ CanBlockAmount | ValidCard$ Card.IsRemembered | Amount$ Any | Description$ This creature can block any number of creatures. Oracle:Target creature gets +2/+6 until end of turn and can block any number of creatures this turn. diff --git a/forge-gui/res/cardsfolder/g/guardian_of_the_gateless.txt b/forge-gui/res/cardsfolder/g/guardian_of_the_gateless.txt index 6aadc998edb..21d15cfc48e 100644 --- a/forge-gui/res/cardsfolder/g/guardian_of_the_gateless.txt +++ b/forge-gui/res/cardsfolder/g/guardian_of_the_gateless.txt @@ -3,7 +3,7 @@ ManaCost:4 W Types:Creature Angel PT:3/3 K:Flying -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAny$ True | Description$ CARDNAME can block any number of creatures. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ Any | Description$ CARDNAME can block any number of creatures. T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME blocks, it gets +1/+1 until end of turn for each creature it's blocking. SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ +X | NumDef$ +X SVar:X:Count$Valid Creature.blockedBySource diff --git a/forge-gui/res/cardsfolder/h/high_ground.txt b/forge-gui/res/cardsfolder/h/high_ground.txt index 10ff19200c9..4f605e3b55d 100644 --- a/forge-gui/res/cardsfolder/h/high_ground.txt +++ b/forge-gui/res/cardsfolder/h/high_ground.txt @@ -1,5 +1,5 @@ Name:High Ground ManaCost:W Types:Enchantment -S:Mode$ Continuous | Affected$ Creature.YouCtrl | CanBlockAmount$ 1 | Description$ Each creature you control can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Creature.YouCtrl | Amount$ 1 | Description$ Each creature you control can block an additional creature each combat. Oracle:Each creature you control can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/h/hundred_handed_one.txt b/forge-gui/res/cardsfolder/h/hundred_handed_one.txt index 0abe5ff5967..aa2b3578780 100644 --- a/forge-gui/res/cardsfolder/h/hundred_handed_one.txt +++ b/forge-gui/res/cardsfolder/h/hundred_handed_one.txt @@ -4,6 +4,7 @@ Types:Creature Giant PT:3/5 K:Vigilance K:Monstrosity:3:3 W W W -S:Mode$ Continuous | Affected$ Card.Self+IsMonstrous | AddKeyword$ Reach | CanBlockAmount$ 99 | Description$ As long as CARDNAME is monstrous, it has reach and can block an additional ninety-nine creatures each combat. +S:Mode$ Continuous | Affected$ Card.Self+IsMonstrous | AddKeyword$ Reach | Description$ As long as CARDNAME is monstrous, it has reach and can block an additional ninety-nine creatures each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self+IsMonstrous | Amount$ 99 | Secondary$ True | Description$ As long as CARDNAME is monstrous, it can block an additional ninety-nine creatures each combat. DeckHas:Ability$Counters Oracle:Vigilance\n{3}{W}{W}{W}: Monstrosity 3. (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.)\nAs long as Hundred-Handed One is monstrous, it has reach and can block an additional ninety-nine creatures each combat. diff --git a/forge-gui/res/cardsfolder/i/ionas_blessing.txt b/forge-gui/res/cardsfolder/i/ionas_blessing.txt index a62878f0f2b..2cb296147f2 100644 --- a/forge-gui/res/cardsfolder/i/ionas_blessing.txt +++ b/forge-gui/res/cardsfolder/i/ionas_blessing.txt @@ -3,5 +3,6 @@ ManaCost:3 W Types:Enchantment Aura K:Enchant:Creature SVar:AttachAILogic:Pump -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Vigilance | CanBlockAmount$ 1 | Description$ Enchanted creature gets +2/+2, has vigilance, and can block an additional creature each combat. +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Vigilance | Description$ Enchanted creature gets +2/+2, has vigilance, and can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.EnchantedBy | Amount$ 1 | Secondary$ True | Description$ Enchanted creature can block an additional creature each combat. Oracle:Enchant creature\nEnchanted creature gets +2/+2, has vigilance, and can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/i/ironfist_crusher.txt b/forge-gui/res/cardsfolder/i/ironfist_crusher.txt index 5d47485ba99..ccaf83b61a4 100644 --- a/forge-gui/res/cardsfolder/i/ironfist_crusher.txt +++ b/forge-gui/res/cardsfolder/i/ironfist_crusher.txt @@ -2,6 +2,6 @@ Name:Ironfist Crusher ManaCost:4 W Types:Creature Human Soldier PT:2/4 -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAny$ True | Description$ CARDNAME can block any number of creatures. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ Any | Description$ CARDNAME can block any number of creatures. K:Morph:3 W Oracle:Ironfist Crusher can block any number of creatures.\nMorph {3}{W} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) diff --git a/forge-gui/res/cardsfolder/k/kembas_legion.txt b/forge-gui/res/cardsfolder/k/kembas_legion.txt index 1681e2cdf65..e170025578f 100644 --- a/forge-gui/res/cardsfolder/k/kembas_legion.txt +++ b/forge-gui/res/cardsfolder/k/kembas_legion.txt @@ -3,7 +3,7 @@ ManaCost:5 W W Types:Creature Cat Soldier PT:4/6 K:Vigilance -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ X | Description$ CARDNAME can block an additional creature each combat for each Equipment attached to CARDNAME. +S:Mode$ CanBlockAmount | ValidCard$ Creature.Self | Amount$ X | Description$ CARDNAME can block an additional creature each combat for each Equipment attached to CARDNAME. SVar:X:Count$Valid Equipment.Attached SVar:EquipMe:Multiple Oracle:Vigilance\nKemba's Legion can block an additional creature each combat for each Equipment attached to Kemba's Legion. diff --git a/forge-gui/res/cardsfolder/k/knight_of_sorrows.txt b/forge-gui/res/cardsfolder/k/knight_of_sorrows.txt index 0c6f7e3af07..66024822935 100644 --- a/forge-gui/res/cardsfolder/k/knight_of_sorrows.txt +++ b/forge-gui/res/cardsfolder/k/knight_of_sorrows.txt @@ -2,7 +2,7 @@ Name:Knight of Sorrows ManaCost:4 W Types:Creature Human Knight PT:3/3 -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. K:Afterlife:1 DeckHas:Ability$Token Oracle:Knight of Sorrows can block an additional creature each combat.\nAfterlife 1 (When this creature dies, create a 1/1 white and black Spirit creature token with flying.) diff --git a/forge-gui/res/cardsfolder/l/lairwatch_giant.txt b/forge-gui/res/cardsfolder/l/lairwatch_giant.txt index 2bfa251b0eb..2937ff36ec5 100644 --- a/forge-gui/res/cardsfolder/l/lairwatch_giant.txt +++ b/forge-gui/res/cardsfolder/l/lairwatch_giant.txt @@ -2,7 +2,7 @@ Name:Lairwatch Giant ManaCost:5 W Types:Creature Giant Warrior PT:5/3 -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. T:Mode$ Blocks | ValidCard$ Card.Self | IsPresent$ Creature.blockedBySource | NoResolvingCheck$ True | PresentCompare$ GE2 | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME blocks two or more creatures, it gains first strike until end of turn. SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ First Strike | SpellDescription$ CARDNAME gains first strike until end of turn. Oracle:Lairwatch Giant can block an additional creature each combat.\nWhenever Lairwatch Giant blocks two or more creatures, it gains first strike until end of turn. diff --git a/forge-gui/res/cardsfolder/l/luminous_guardian.txt b/forge-gui/res/cardsfolder/l/luminous_guardian.txt index cdfc36631a1..0643d5b128c 100644 --- a/forge-gui/res/cardsfolder/l/luminous_guardian.txt +++ b/forge-gui/res/cardsfolder/l/luminous_guardian.txt @@ -3,5 +3,6 @@ ManaCost:3 W Types:Creature Human Nomad PT:1/4 A:AB$ Pump | Cost$ W | Defined$ Self | NumDef$ +1 | SpellDescription$ CARDNAME gets +0/+1 until end of turn. -A:AB$ Pump | Cost$ 2 | Defined$ Self | CanBlockAmount$ 1 | SpellDescription$ CARDNAME can block an additional creature this turn. +A:AB$ Effect | Cost$ 2 | Duration$ UntilHostLeavesPlayOrEOT | StaticAbilities$ DBBlock | AILogic$ Pump | StackDescription$ SpellDescription | SpellDescription$ CARDNAME can block an additional creature this turn. +SVar:DBBlock:Mode$ CanBlockAmount | ValidCard$ Card.EffectSource | Amount$ 1 | Description$ EFFECTSOURCE can block an additional creature this turn. Oracle:{W}: Luminous Guardian gets +0/+1 until end of turn.\n{2}: Luminous Guardian can block an additional creature this turn. diff --git a/forge-gui/res/cardsfolder/m/mounted_archers.txt b/forge-gui/res/cardsfolder/m/mounted_archers.txt index d527d2366fb..11c51ec3d45 100644 --- a/forge-gui/res/cardsfolder/m/mounted_archers.txt +++ b/forge-gui/res/cardsfolder/m/mounted_archers.txt @@ -3,5 +3,6 @@ ManaCost:3 W Types:Creature Human Soldier Archer PT:2/3 K:Reach -A:AB$ Pump | Cost$ W | Defined$ Self | CanBlockAmount$ 1 | SpellDescription$ CARDNAME can block an additional creature this turn. +A:AB$ Effect | Cost$ W | Duration$ UntilHostLeavesPlayOrEOT | StaticAbilities$ DBBlock | AILogic$ Pump | StackDescription$ SpellDescription | SpellDescription$ CARDNAME can block an additional creature this turn. +SVar:DBBlock:Mode$ CanBlockAmount | ValidCard$ Card.EffectSource | Amount$ 1 | Description$ EFFECTSOURCE can block an additional creature this turn. Oracle:Reach (This creature can block creatures with flying.)\n{W}: Mounted Archers can block an additional creature this turn. diff --git a/forge-gui/res/cardsfolder/n/night_market_guard.txt b/forge-gui/res/cardsfolder/n/night_market_guard.txt index b9b2c195973..47661216961 100644 --- a/forge-gui/res/cardsfolder/n/night_market_guard.txt +++ b/forge-gui/res/cardsfolder/n/night_market_guard.txt @@ -2,5 +2,5 @@ Name:Night Market Guard ManaCost:3 Types:Artifact Creature Construct PT:3/1 -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. Oracle:Night Market Guard can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/p/palace_guard.txt b/forge-gui/res/cardsfolder/p/palace_guard.txt index 410a6ea5227..97db885b016 100644 --- a/forge-gui/res/cardsfolder/p/palace_guard.txt +++ b/forge-gui/res/cardsfolder/p/palace_guard.txt @@ -2,5 +2,5 @@ Name:Palace Guard ManaCost:2 W Types:Creature Human Soldier PT:1/4 -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAny$ True | Description$ CARDNAME can block any number of creatures. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ Any | Description$ CARDNAME can block any number of creatures. Oracle:Palace Guard can block any number of creatures. diff --git a/forge-gui/res/cardsfolder/s/selesnya_sagittars.txt b/forge-gui/res/cardsfolder/s/selesnya_sagittars.txt index d1577df8f4d..61531a597fe 100644 --- a/forge-gui/res/cardsfolder/s/selesnya_sagittars.txt +++ b/forge-gui/res/cardsfolder/s/selesnya_sagittars.txt @@ -3,5 +3,5 @@ ManaCost:3 G W Types:Creature Elf Archer PT:2/5 K:Reach -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. Oracle:Reach (This creature can block creatures with flying.)\nSelesnya Sagittars can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/s/spike_tailed_ceratops.txt b/forge-gui/res/cardsfolder/s/spike_tailed_ceratops.txt index 1fc060c6679..9a1e317fe30 100644 --- a/forge-gui/res/cardsfolder/s/spike_tailed_ceratops.txt +++ b/forge-gui/res/cardsfolder/s/spike_tailed_ceratops.txt @@ -2,5 +2,5 @@ Name:Spike-Tailed Ceratops ManaCost:4 G Types:Creature Dinosaur PT:4/4 -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. Oracle:Spike-Tailed Ceratops can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/t/tangleclaw_werewolf_fibrous_entangler.txt b/forge-gui/res/cardsfolder/t/tangleclaw_werewolf_fibrous_entangler.txt index fb05693f83e..df89afe9cb9 100644 --- a/forge-gui/res/cardsfolder/t/tangleclaw_werewolf_fibrous_entangler.txt +++ b/forge-gui/res/cardsfolder/t/tangleclaw_werewolf_fibrous_entangler.txt @@ -2,7 +2,7 @@ Name:Tangleclaw Werewolf ManaCost:2 G G Types:Creature Werewolf Horror PT:2/4 -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. A:AB$ SetState | Cost$ 6 G | Defined$ Self | Mode$ Transform | SpellDescription$ Transform CARDNAME. AlternateMode:DoubleFaced Oracle:Tangleclaw Werewolf can block an additional creature each combat.\n{6}{G}: Transform Tangleclaw Werewolf. @@ -15,5 +15,5 @@ Types:Creature Eldrazi Werewolf PT:4/6 K:Vigilance K:CARDNAME must be blocked if able. -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. Oracle:Vigilance\nFibrous Entangler must be blocked if able.\nFibrous Entangler can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/t/thoughtweft_trio.txt b/forge-gui/res/cardsfolder/t/thoughtweft_trio.txt index 4f764901a75..ab20910c766 100644 --- a/forge-gui/res/cardsfolder/t/thoughtweft_trio.txt +++ b/forge-gui/res/cardsfolder/t/thoughtweft_trio.txt @@ -5,5 +5,5 @@ PT:5/5 K:First Strike K:Vigilance K:Champion:Kithkin -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAny$ True | Description$ CARDNAME can block any number of creatures. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ Any | Description$ CARDNAME can block any number of creatures. Oracle:First strike, vigilance\nChampion a Kithkin (When this enters, sacrifice it unless you exile another Kithkin you control. When this leaves the battlefield, that card returns to the battlefield.)\nThoughtweft Trio can block any number of creatures. diff --git a/forge-gui/res/cardsfolder/t/trueheart_duelist.txt b/forge-gui/res/cardsfolder/t/trueheart_duelist.txt index 3b2e124dab6..833a14e0dfc 100644 --- a/forge-gui/res/cardsfolder/t/trueheart_duelist.txt +++ b/forge-gui/res/cardsfolder/t/trueheart_duelist.txt @@ -2,7 +2,7 @@ Name:Trueheart Duelist ManaCost:1 W Types:Creature Human Warrior PT:2/2 -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. K:Embalm:2 W DeckHas:Ability$Token Oracle:Trueheart Duelist can block an additional creature each combat.\nEmbalm {2}{W} ({2}{W}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a white Zombie Human Warrior with no mana cost. Embalm only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/t/two_headed_dragon.txt b/forge-gui/res/cardsfolder/t/two_headed_dragon.txt index 916322b9312..a87d8644e00 100644 --- a/forge-gui/res/cardsfolder/t/two_headed_dragon.txt +++ b/forge-gui/res/cardsfolder/t/two_headed_dragon.txt @@ -4,6 +4,6 @@ Types:Creature Dragon PT:4/4 K:Flying K:Menace -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. A:AB$ Pump | Cost$ 1 R | NumAtt$ +2 | SpellDescription$ CARDNAME gets +2/+0 until end of turn. Oracle:Flying\nMenace (This creature can't be blocked except by two or more creatures.)\nTwo-Headed Dragon can block an additional creature each combat.\n{1}{R}: Two-Headed Dragon gets +2/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/t/two_headed_giant_of_foriys.txt b/forge-gui/res/cardsfolder/t/two_headed_giant_of_foriys.txt index 958fa55c1b8..3d629d4c410 100644 --- a/forge-gui/res/cardsfolder/t/two_headed_giant_of_foriys.txt +++ b/forge-gui/res/cardsfolder/t/two_headed_giant_of_foriys.txt @@ -3,5 +3,5 @@ ManaCost:4 R Types:Creature Giant PT:4/4 K:Trample -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 1 | Description$ CARDNAME can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 1 | Description$ CARDNAME can block an additional creature each combat. Oracle:Trample\nTwo-Headed Giant of Foriys can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/t/two_headed_giant_of_foriys_avatar.txt b/forge-gui/res/cardsfolder/t/two_headed_giant_of_foriys_avatar.txt index c65fc67dafa..f77f30bb903 100644 --- a/forge-gui/res/cardsfolder/t/two_headed_giant_of_foriys_avatar.txt +++ b/forge-gui/res/cardsfolder/t/two_headed_giant_of_foriys_avatar.txt @@ -3,5 +3,6 @@ ManaCost:no cost Types:Vanguard HandLifeModifier:+1/-4 S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddKeyword$ Menace | Description$ Creatures you control have menace. (They can't be blocked except by two or more creatures.) -S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | CanBlockAmount$ 1 | Description$ Each creature you control can block an additional creature each combat. + +S:Mode$ CanBlockAmount | EffectZone$ Command | ValidCard$ Creature.YouCtrl | Amount$ 1 | Description$ Each creature you control can block an additional creature each combat. Oracle:Hand +1, life -4\nCreatures you control have menace. (They can't be blocked except by two or more creatures.)\nEach creature you control can block an additional creature each combat. diff --git a/forge-gui/res/cardsfolder/v/valor_made_real.txt b/forge-gui/res/cardsfolder/v/valor_made_real.txt index b976c6a43bd..17d0f938c7d 100644 --- a/forge-gui/res/cardsfolder/v/valor_made_real.txt +++ b/forge-gui/res/cardsfolder/v/valor_made_real.txt @@ -1,6 +1,7 @@ Name:Valor Made Real ManaCost:W Types:Instant -A:SP$ Pump | ValidTgts$ Creature | CanBlockAny$ True | SpellDescription$ Target creature can block any number of creatures this turn. +A:SP$ Effect | ValidTgts$ Creature | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ DBBlock | AILogic$ Pump | StackDescription$ {c:Targeted} can block any number of creatures this turn. | SpellDescription$ Target creature can block any number of creatures this turn. +SVar:DBBlock:Mode$ CanBlockAmount | ValidCard$ Card.IsRemembered | Amount$ Any | Description$ This creature can block any number of creatures. AI:RemoveDeck:All Oracle:Target creature can block any number of creatures this turn. diff --git a/forge-gui/res/cardsfolder/v/vanguards_shield.txt b/forge-gui/res/cardsfolder/v/vanguards_shield.txt index 04970567974..0bdc96eaba6 100644 --- a/forge-gui/res/cardsfolder/v/vanguards_shield.txt +++ b/forge-gui/res/cardsfolder/v/vanguards_shield.txt @@ -2,5 +2,6 @@ Name:Vanguard's Shield ManaCost:2 Types:Artifact Equipment K:Equip:3 -S:Mode$ Continuous | Affected$ Creature.EquippedBy | CanBlockAmount$ 1 | AddToughness$ 3 | Description$ Equipped creature gets +0/+3 and can block an additional creature each combat. +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddToughness$ 3 | Description$ Equipped creature gets +0/+3 and can block an additional creature each combat. +S:Mode$ CanBlockAmount | ValidCard$ Creature.EquippedBy | Amount$ 1 | Secondary$ True | Description$ Equipped creature can block an additional creature each combat. Oracle:Equipped creature gets +0/+3 and can block an additional creature each combat.\nEquip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/w/wall_of_glare.txt b/forge-gui/res/cardsfolder/w/wall_of_glare.txt index 36291ebcfd4..5c09ea2d018 100644 --- a/forge-gui/res/cardsfolder/w/wall_of_glare.txt +++ b/forge-gui/res/cardsfolder/w/wall_of_glare.txt @@ -3,5 +3,5 @@ ManaCost:1 W Types:Creature Wall PT:0/5 K:Defender -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAny$ True | Description$ CARDNAME can block any number of creatures. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ Any | Description$ CARDNAME can block any number of creatures. Oracle:Defender (This creature can't attack.)\nWall of Glare can block any number of creatures. diff --git a/forge-gui/res/cardsfolder/w/watcher_in_the_web.txt b/forge-gui/res/cardsfolder/w/watcher_in_the_web.txt index a83ed2e9075..783ad5fc7df 100644 --- a/forge-gui/res/cardsfolder/w/watcher_in_the_web.txt +++ b/forge-gui/res/cardsfolder/w/watcher_in_the_web.txt @@ -3,5 +3,5 @@ ManaCost:4 G Types:Creature Spider PT:2/5 K:Reach -S:Mode$ Continuous | Affected$ Card.Self | CanBlockAmount$ 7 | Description$ CARDNAME can block an additional seven creatures each combat. +S:Mode$ CanBlockAmount | ValidCard$ Card.Self | Amount$ 7 | Description$ CARDNAME can block an additional seven creatures each combat. Oracle:Reach (This creature can block creatures with flying.)\nWatcher in the Web can block an additional seven creatures each combat. diff --git a/forge-gui/res/cardsfolder/y/yare.txt b/forge-gui/res/cardsfolder/y/yare.txt index bf52bc77226..7436ce89be6 100644 --- a/forge-gui/res/cardsfolder/y/yare.txt +++ b/forge-gui/res/cardsfolder/y/yare.txt @@ -1,6 +1,8 @@ Name:Yare ManaCost:2 W Types:Instant -A:SP$ Pump | ValidTgts$ Creature.DefendingPlayerCtrl | TgtPrompt$ Select target creature defending player controls | NumAtt$ +3 | CanBlockAmount$ 2 | SpellDescription$ Target creature defending player controls gets +3/+0 until end of turn. That creature can block up to two additional creatures this turn. +A:SP$ Pump | ValidTgts$ Creature.DefendingPlayerCtrl | TgtPrompt$ Select target creature defending player controls | NumAtt$ +3 | SubAbility$ DBEffect | SpellDescription$ Target creature defending player controls gets +3/+0 until end of turn. +SVar:DBEffect:DB$ Effect | ValidTgts$ Creature.DefendingPlayerCtrl | TgtPrompt$ Select target creature defending player controls | ExileOnMoved$ Battlefield | StaticAbilities$ DBBlock | AILogic$ Pump | StackDescription$ {c:Targeted} can block up to two additional creatures this turn | SpellDescription$ That creature can block up to two additional creatures this turn. +SVar:DBBlock:Mode$ CanBlockAmount | ValidCard$ Card.IsRemembered | Amount$ 2 | Description$ That creature can block up to two additional creatures this turn. AI:RemoveDeck:All Oracle:Target creature defending player controls gets +3/+0 until end of turn. That creature can block up to two additional creatures this turn.