mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
GN3: Imaryll, Elfhame Elite (+ refactor another quasi-keyword -> static) (#1033)
* AI stuff refactor keyword to check StaticAbilityAssignCombatDamageAsUnblocked * ComputerUtilCombat refactor keyword to check StaticAbilityAssignCombatDamageAsUnblocked * CreatureEvaluator refactor keyword to check StaticAbilityAssignCombatDamageAsUnblocked * Combat.java refactor keyword to check StaticAbilityAssignCombatDamageAsUnblocked * AnimateAllEffect.resolve support "staticAbilities" for garruk_savage_herald.txt * imaryll_elfhame_elite.txt * StaticAbilityAssignCombatDamageAsUnblocked.java * refactor old cards * AnimateAllEffect remove no longer needed * AiBlockController.makeGoodBlocks restore lost '!'
This commit is contained in:
@@ -20,6 +20,7 @@ package forge.ai;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
@@ -540,7 +541,7 @@ public class AiAttackController {
|
||||
|
||||
for (Card attacker : categorizedAttackers) {
|
||||
if (!CombatUtil.canBeBlocked(attacker, accountedBlockers, null)
|
||||
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")) {
|
||||
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) {
|
||||
unblockedAttackers.add(attacker);
|
||||
} else {
|
||||
if (predictEvasion) {
|
||||
|
||||
@@ -42,6 +42,7 @@ import forge.game.cost.Cost;
|
||||
import forge.game.keyword.Keyword;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
|
||||
import forge.game.staticability.StaticAbilityCantAttackBlock;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerType;
|
||||
@@ -204,7 +205,7 @@ public class AiBlockController {
|
||||
}
|
||||
blocker = ComputerUtilCard.getWorstCreatureAI(killingBlockers);
|
||||
// 2.Blockers that won't get destroyed
|
||||
} else if (!attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
|
||||
} else if (!StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)
|
||||
&& !ComputerUtilCombat.attackerHasThreateningAfflict(attacker, ai)) {
|
||||
blocker = ComputerUtilCard.getWorstCreatureAI(safeBlockers);
|
||||
// check whether it's better to block a creature without trample to absorb more damage
|
||||
@@ -215,7 +216,7 @@ public class AiBlockController {
|
||||
|| other.hasKeyword(Keyword.TRAMPLE)
|
||||
|| ComputerUtilCombat.attackerHasThreateningAfflict(other, ai)
|
||||
|| ComputerUtilCombat.canDestroyBlocker(ai, blocker, other, combat, false)
|
||||
|| other.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")) {
|
||||
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(other)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -668,7 +669,7 @@ public class AiBlockController {
|
||||
Card attacker = attackers.get(0);
|
||||
|
||||
if (CombatUtil.getMinNumBlockersForAttacker(attacker, combat.getDefenderPlayerByAttacker(attacker)) > 1
|
||||
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
|
||||
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)
|
||||
|| ComputerUtilCombat.attackerHasThreateningAfflict(attacker, ai)) {
|
||||
attackers.remove(0);
|
||||
makeChumpBlocks(combat, attackers);
|
||||
@@ -689,7 +690,7 @@ public class AiBlockController {
|
||||
}
|
||||
if (other.getNetCombatDamage() >= damageAbsorbed
|
||||
&& !other.hasKeyword(Keyword.TRAMPLE)
|
||||
&& !other.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
|
||||
&& !StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(other)
|
||||
&& !ComputerUtilCombat.attackerHasThreateningAfflict(other, ai)
|
||||
&& CombatUtil.canBlock(other, blocker, combat)) {
|
||||
combat.addBlocker(other, blocker);
|
||||
@@ -756,7 +757,7 @@ public class AiBlockController {
|
||||
|
||||
for (final Card attacker : tramplingAttackers) {
|
||||
if (CombatUtil.getMinNumBlockersForAttacker(attacker, combat.getDefenderPlayerByAttacker(attacker)) > combat.getBlockers(attacker).size()
|
||||
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
|
||||
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)
|
||||
|| attacker.hasKeyword("CARDNAME can't be blocked unless all creatures defending player controls block it.")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -48,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.StaticAbilityAssignCombatDamageAsUnblocked;
|
||||
import forge.game.staticability.StaticAbilityMustAttack;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerType;
|
||||
@@ -325,8 +326,7 @@ public class ComputerUtilCombat {
|
||||
final List<Card> blockers = combat.getBlockers(attacker);
|
||||
|
||||
if (blockers.size() == 0
|
||||
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage "
|
||||
+ "as though it weren't blocked.")) {
|
||||
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) {
|
||||
unblocked.add(attacker);
|
||||
} else if (attacker.hasKeyword(Keyword.TRAMPLE)
|
||||
&& getAttack(attacker) > totalShieldDamage(attacker, blockers)) {
|
||||
@@ -367,8 +367,7 @@ public class ComputerUtilCombat {
|
||||
final List<Card> blockers = combat.getBlockers(attacker);
|
||||
|
||||
if (blockers.size() == 0
|
||||
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage"
|
||||
+ " as though it weren't blocked.")) {
|
||||
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) {
|
||||
unblocked.add(attacker);
|
||||
} else if (attacker.hasKeyword(Keyword.TRAMPLE)
|
||||
&& getAttack(attacker) > totalShieldDamage(attacker, blockers)) {
|
||||
|
||||
@@ -10,6 +10,7 @@ import forge.game.card.CounterEnumType;
|
||||
import forge.game.cost.CostPayEnergy;
|
||||
import forge.game.keyword.Keyword;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
|
||||
import forge.game.staticability.StaticAbilityMustAttack;
|
||||
|
||||
import java.util.List;
|
||||
@@ -62,7 +63,8 @@ public class CreatureEvaluator implements Function<Card, Integer> {
|
||||
if (c.hasKeyword("Unblockable")) {
|
||||
value += addValue(power * 10, "unblockable");
|
||||
} else {
|
||||
if (c.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")) {
|
||||
if (StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(c)
|
||||
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(c, false)) {
|
||||
value += addValue(power * 6, "thorns");
|
||||
}
|
||||
if (c.hasKeyword(Keyword.FEAR)) {
|
||||
|
||||
@@ -4,7 +4,6 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
@@ -122,6 +121,12 @@ public class AnimateAllEffect extends AnimateEffectBase {
|
||||
sVars.addAll(Arrays.asList(sa.getParam("sVars").split(",")));
|
||||
}
|
||||
|
||||
// static abilities to add to the animated being
|
||||
final List<String> stAbs = Lists.newArrayList();
|
||||
if (sa.hasParam("staticAbilities")) {
|
||||
stAbs.addAll(Arrays.asList(sa.getParam("staticAbilities").split(",")));
|
||||
}
|
||||
|
||||
Map<String, String> sVarsMap = Maps.newHashMap();
|
||||
for (final String s : sVars) {
|
||||
sVarsMap.put(s, AbilityUtils.getSVar(sa, s));
|
||||
@@ -140,10 +145,8 @@ public class AnimateAllEffect extends AnimateEffectBase {
|
||||
list = CardLists.getValidCards(list, valid, host.getController(), host, sa);
|
||||
|
||||
for (final Card c : list) {
|
||||
doAnimate(c, sa, power, toughness, types, removeTypes, finalColors,
|
||||
keywords, removeKeywords, hiddenKeywords,
|
||||
abilities, triggers, replacements, ImmutableList.of(),
|
||||
timestamp);
|
||||
doAnimate(c, sa, power, toughness, types, removeTypes, finalColors, keywords, removeKeywords,
|
||||
hiddenKeywords, abilities, triggers, replacements, stAbs, timestamp);
|
||||
|
||||
// give sVars
|
||||
if (!sVarsMap.isEmpty() ) {
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
@@ -797,10 +798,11 @@ public class Combat {
|
||||
final SpellAbility emptySA = new SpellAbility.EmptySa(attacker);
|
||||
|
||||
boolean assignToPlayer = false;
|
||||
if (attacker.hasKeyword("CARDNAME assigns its combat damage as though it weren't blocked.")) {
|
||||
if (StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker, false)) {
|
||||
assignToPlayer = true;
|
||||
}
|
||||
if (!assignToPlayer && attacker.getGame().getCombat().isBlocked(attacker) && attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")) {
|
||||
if (!assignToPlayer && attacker.getGame().getCombat().isBlocked(attacker)
|
||||
&& StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) {
|
||||
assignToPlayer = assigningPlayer.getController().confirmAction(emptySA, PlayerActionConfirmMode.AlternativeDamageAssignment,
|
||||
Localizer.getInstance().getMessage("lblAssignCombatDamageWerentBlocked",
|
||||
CardTranslation.getTranslatedName(attacker.getName())), null);
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package forge.game.staticability;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
public class StaticAbilityAssignCombatDamageAsUnblocked {
|
||||
|
||||
static String MODE = "AssignCombatDamageAsUnblocked";
|
||||
|
||||
public static boolean assignCombatDamageAsUnblocked(final Card card) {
|
||||
return assignCombatDamageAsUnblocked(card, true);
|
||||
}
|
||||
|
||||
public static boolean assignCombatDamageAsUnblocked(final Card card, final boolean optional) {
|
||||
final Game game = card.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.hasParam("Optional")) {
|
||||
if (!optional) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
if (optional) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (applyAssignCombatDamageAsUnblocked(stAb, card)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean applyAssignCombatDamageAsUnblocked(final StaticAbility stAb, final Card card) {
|
||||
if (!stAb.matchesValidParam("ValidCard", card)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -2,5 +2,5 @@ Name:Deathcoil Wurm
|
||||
ManaCost:6 G G
|
||||
Types:Creature Wurm
|
||||
PT:7/6
|
||||
K:You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
Oracle:You may have Deathcoil Wurm assign its combat damage as though it weren't blocked.
|
||||
|
||||
@@ -6,5 +6,6 @@ A:AB$ Dig | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | DigNum$ 1 | Revea
|
||||
A:AB$ Pump | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SubAbility$ DBDamage | AILogic$ PowerDmg | SpellDescription$ Target creature you control deals damage equal to its power to another target creature.
|
||||
SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature to damage | TargetUnique$ True | AILogic$ PowerDmg | NumDmg$ X | DamageSource$ ParentTarget
|
||||
SVar:X:ParentTargeted$CardPower
|
||||
A:AB$ PumpAll | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidCards$ Creature.YouCtrl | KW$ HIDDEN You may have CARDNAME assign its combat damage as though it weren't blocked. | SpellDescription$ Until end of turn, creatures you control gain "You may have this creature assign its combat damage as though it weren't blocked."
|
||||
A:AB$ AnimateAll | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidCards$ Creature.YouCtrl | staticAbilities$ Static | SpellDescription$ Until end of turn, creatures you control gain "You may have this creature assign its combat damage as though it weren't blocked."
|
||||
SVar:Static:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have this creature assign its combat damage as though it weren't blocked.
|
||||
Oracle:[+1]: Reveal the top card of your library. If it's a creature card, put it into your hand. Otherwise, put it on the bottom of your library.\n[-2]: Target creature you control deals damage equal to its power to another target creature.\n[-7]: Until end of turn, creatures you control gain "You may have this creature assign its combat damage as though it weren't blocked."
|
||||
|
||||
@@ -3,7 +3,8 @@ ManaCost:3 G G
|
||||
Types:Creature Beast
|
||||
PT:6/8
|
||||
K:UpkeepCost:PutCardToLibFromGrave<2/-1/Card>
|
||||
A:AB$ Pump | Cost$ G G Discard<1/Card> | Defined$ Self | KW$ HIDDEN You may have CARDNAME assign its combat damage as though it weren't blocked. | SpellDescription$ You may have CARDNAME assign its combat damage this turn as though it weren't blocked.
|
||||
A:AB$ Effect | Cost$ G G Discard<1/Card> | StaticAbilities$ Static | SpellDescription$ You may have CARDNAME assign its combat damage this turn as though it weren't blocked.
|
||||
SVar:Static:Mode$ AssignCombatDamageAsUnblocked | EffectZone$ Command | ValidCard$ Card.EffectSource | Optional$ True | Description$ You may have EFFECTSOURCE assign its combat damage this turn as though it weren't blocked.
|
||||
AI:RemoveDeck:All
|
||||
DeckHas:Ability$Discard
|
||||
Oracle:At the beginning of your upkeep, sacrifice Gurzigost unless you put two cards from your graveyard on the bottom of your library.\n{G}{G}, Discard a card: You may have Gurzigost assign its combat damage this turn as though it weren't blocked.
|
||||
|
||||
@@ -3,6 +3,7 @@ ManaCost:3 G
|
||||
Types:Enchantment Aura
|
||||
K:Flash
|
||||
K:Enchant creature
|
||||
A:SP$ Attach | Cost$ 3 G | ValidTgts$ Creature | TgtPrompt$ Select creature | AILogic$ Pump
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 3 | AddToughness$ 3 | AddHiddenKeyword$ You may have CARDNAME assign its combat damage as though it weren't blocked. | Description$ Enchanted creature gets +3/+3. Enchanted creature's controller may have it assign its combat damage as though it weren't blocked.
|
||||
A:SP$ Attach | ValidTgts$ Creature | AILogic$ Pump
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 3 | AddToughness$ 3 | Description$ Enchanted creature gets +3/+3.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Creature.EnchantedBy | Optional$ True | Description$ Enchanted creature's controller may have it assign its combat damage as though it weren't blocked.
|
||||
Oracle:Flash\nEnchant creature\nEnchanted creature gets +3/+3.\nEnchanted creature's controller may have it assign its combat damage as though it weren't blocked.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Lone Wolf
|
||||
ManaCost:2 G
|
||||
Types:Creature Wolf
|
||||
PT:2/2
|
||||
K:You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
Oracle:You may have Lone Wolf assign its combat damage as though it weren't blocked.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
Name:Outmaneuver
|
||||
ManaCost:X R
|
||||
Types:Instant
|
||||
A:SP$ Pump | Cost$ X R | KW$ HIDDEN CARDNAME assigns its combat damage as though it weren't blocked. | TargetMin$ X | TargetMax$ X | ValidTgts$ Creature.blocked | TgtPrompt$ Select X target blocked creatures | StackDescription$ X target blocked creatures [{c:Targeted}] assign their combat damage this turn as though they weren't blocked. | SpellDescription$ X target blocked creatures assign their combat damage this turn as though they weren't blocked.
|
||||
A:SP$ Effect | StaticAbilities$ Static | TargetMin$ X | TargetMax$ X | ValidTgts$ Creature.blocked | TgtPrompt$ Select X target blocked creatures | RememberObjects$ Targeted | SpellDescription$ X target blocked creatures assign their combat damage this turn as though they weren't blocked.
|
||||
SVar:Static:Mode$ AssignCombatDamageAsUnblocked | EffectZone$ Command | ValidCard$ Card.IsRemembered | Description$ These creatures assign their combat damage this turn as though they weren't blocked.
|
||||
SVar:X:Count$xPaid
|
||||
AI:RemoveDeck:All
|
||||
Oracle:X target blocked creatures assign their combat damage this turn as though they weren't blocked.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Name:Predatory Focus
|
||||
ManaCost:3 G G
|
||||
Types:Sorcery
|
||||
A:SP$ Effect | Cost$ 3 G G | Name$ Predatory Focus Effect | StaticAbilities$ KWPump | AILogic$ Evasion | SpellDescription$ You may have creatures you control assign their combat damage this turn as though they weren't blocked.
|
||||
SVar:KWPump:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.YouCtrl | AddHiddenKeyword$ You may have CARDNAME assign its combat damage as though it weren't blocked. | Description$ You may have creatures you control assign their combat damage this turn as though they weren't blocked.
|
||||
A:SP$ Effect | AILogic$ Evasion | StaticAbilities$ Static | SpellDescription$ You may have creatures you control assign their combat damage this turn as though they weren't blocked.
|
||||
SVar:Static:Mode$ AssignCombatDamageAsUnblocked | EffectZone$ Command | ValidCard$ Creature.YouCtrl | Optional$ True | Description$ You may have creatures you control assign their combat damage this turn as though they weren't blocked.
|
||||
Oracle:You may have creatures you control assign their combat damage this turn as though they weren't blocked.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Pride of Lions
|
||||
ManaCost:3 G G
|
||||
Types:Creature Cat
|
||||
PT:4/4
|
||||
K:You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
Oracle:You may have Pride of Lions assign its combat damage as though it weren't blocked.
|
||||
|
||||
@@ -3,5 +3,7 @@ ManaCost:2 R/G R/G
|
||||
Types:Creature Human Warrior
|
||||
PT:4/3
|
||||
K:Trample
|
||||
S:Mode$ Continuous | Affected$ Creature.YouCtrl+withTrample | AddKeyword$ You may have CARDNAME assign its combat damage as though it weren't blocked. | Description$ Creatures you control with trample have "You may have this creature assign its combat damage as though it weren't blocked."
|
||||
S:Mode$ Continuous | Affected$ Creature.YouCtrl+withTrample | AddStaticAbility$ Static | Description$ Creatures you control with trample have "You may have this creature assign its combat damage as though it weren't blocked."
|
||||
SVar:Static:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have this creature assign its combat damage as though it weren't blocked.
|
||||
DeckHints:Keyword$Trample
|
||||
Oracle:Trample\nCreatures you control with trample have "You may have this creature assign its combat damage as though it weren't blocked."
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Rhox
|
||||
ManaCost:4 G G
|
||||
Types:Creature Rhino Beast
|
||||
PT:5/5
|
||||
K:You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
A:AB$ Regenerate | Cost$ 2 G | SpellDescription$ Regenerate CARDNAME.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
A:AB$ Regenerate | Cost$ 2 G | SpellDescription$ Regenerate CARDNAME. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)
|
||||
Oracle:You may have Rhox assign its combat damage as though it weren't blocked.\n{2}{G}: Regenerate Rhox. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)
|
||||
|
||||
@@ -6,6 +6,6 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S
|
||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChange | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, return target creature card with no abilities from your graveyard to your hand.
|
||||
SVar:TrigChange:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.NoAbilities+YouOwn
|
||||
S:Mode$ Continuous | Affected$ Creature.NoAbilities+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Creatures you control with no abilities get +1/+1.
|
||||
S:Mode$ Continuous | Affected$ Creature.NoAbilities+YouCtrl | AddHiddenKeyword$ You may have CARDNAME assign its combat damage as though it weren't blocked. | Description$ You may have creatures you control with no abilities assign their combat damage as though they weren't blocked.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Creature.NoAbilities+YouCtrl | Optional$ True | Description$ You may have creatures you control with no abilities assign their combat damage as though they weren't blocked.
|
||||
SVar:HasAttackEffect:TRUE
|
||||
Oracle:Whenever Ruxa, Patient Professor enters the battlefield or attacks, return target creature card with no abilities from your graveyard to your hand.\nCreatures you control with no abilities get +1/+1.\nYou may have creatures you control with no abilities assign their combat damage as though they weren't blocked.
|
||||
|
||||
@@ -3,6 +3,5 @@ ManaCost:5 G G
|
||||
Types:Creature Beast
|
||||
PT:7/4
|
||||
K:Hexproof
|
||||
S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddHiddenKeyword$ You may have CARDNAME assign its combat damage as though it weren't blocked. | CheckSVar$ X | SVarCompare$ EQ1 | Description$ As long as CARDNAME is attacking, for each creature you control, you may have that creature assign its combat damage as though it weren't blocked.
|
||||
SVar:X:Count$Valid Card.Self+attacking
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | IsPresent$ Card.Self+attacking | ValidCard$ Creature.YouCtrl | Optional$ True | Description$ As long as CARDNAME is attacking, for each creature you control, you may have that creature assign its combat damage as though it weren't blocked.
|
||||
Oracle:Hexproof\nAs long as Siege Behemoth is attacking, for each creature you control, you may have that creature assign its combat damage as though it weren't blocked.
|
||||
|
||||
@@ -3,5 +3,5 @@ ManaCost:4 G G
|
||||
Types:Creature Phyrexian Beast
|
||||
PT:3/4
|
||||
K:Infect
|
||||
K:You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
Oracle:Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)\nYou may have Spinebiter assign its combat damage as though it weren't blocked.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Thorn Elemental
|
||||
ManaCost:5 G G
|
||||
Types:Creature Elemental
|
||||
PT:7/7
|
||||
K:You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
Oracle:You may have Thorn Elemental assign its combat damage as though it weren't blocked.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Tornado Elemental
|
||||
ManaCost:5 G G
|
||||
Types:Creature Elemental
|
||||
PT:6/6
|
||||
K:You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDamageAllFlyers | TriggerDescription$ When CARDNAME enters the battlefield, it deals 6 damage to each creature with flying.
|
||||
SVar:TrigDamageAllFlyers:DB$ DamageAll | ValidCards$ Creature.withFlying | NumDmg$ 6 | ValidDescription$ each creature with flying.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
Oracle:When Tornado Elemental enters the battlefield, it deals 6 damage to each creature with flying.\nYou may have Tornado Elemental assign its combat damage as though it weren't blocked.
|
||||
|
||||
11
forge-gui/res/cardsfolder/upcoming/imaryll_elfhame_elite.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/imaryll_elfhame_elite.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
Name:Imaryll, Elfhame Elite
|
||||
ManaCost:2 G G
|
||||
Types:Legendary Creature Elf Warrior
|
||||
PT:3/3
|
||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +X/+X until end of turn, where X is the number of other Elves you control.
|
||||
SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ X | NumDef$ X
|
||||
SVar:X:Count$Valid Elf.YouCtrl+Other
|
||||
SVar:HasAttackEffect:TRUE
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have NICKNAME assign its combat damage as though it weren't blocked.
|
||||
DeckNeeds:Type$Elf
|
||||
Oracle:Whenever Imaryll, Elfhame Elite attacks, it gets +X/+X until end of turn, where X is the number of other Elves you control.\nYou may have Imaryll assign its combat damage as though it weren't blocked.
|
||||
@@ -2,5 +2,5 @@ Name:Wolf Pack
|
||||
ManaCost:6 G G
|
||||
Types:Creature Wolf
|
||||
PT:7/6
|
||||
K:You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
S:Mode$ AssignCombatDamageAsUnblocked | ValidCard$ Card.Self | Optional$ True | Description$ You may have CARDNAME assign its combat damage as though it weren't blocked.
|
||||
Oracle:You may have Wolf Pack assign its combat damage as though it weren't blocked.
|
||||
|
||||
Reference in New Issue
Block a user