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:
Northmoc
2022-07-05 14:23:40 -04:00
committed by GitHub
parent 0fdfe26eff
commit d7eff45cd1
24 changed files with 109 additions and 38 deletions

View File

@@ -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) {

View File

@@ -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;
}

View File

@@ -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)) {

View File

@@ -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)) {

View File

@@ -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() ) {

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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.

View File

@@ -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."

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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."

View File

@@ -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.)

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View 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.

View File

@@ -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.