mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Support duplicate objects per effect (#4518)
* Fix Serrated Biskelion * Fix Angel of Destiny * Fix Diviner Spirit
This commit is contained in:
@@ -738,12 +738,11 @@ public class SpecialCardAi {
|
|||||||
// Grothama, All-Devouring
|
// Grothama, All-Devouring
|
||||||
public static class GrothamaAllDevouring {
|
public static class GrothamaAllDevouring {
|
||||||
public static boolean consider(final Player ai, final SpellAbility sa) {
|
public static boolean consider(final Player ai, final SpellAbility sa) {
|
||||||
final Card source = sa.getHostCard();
|
final Card fighter = sa.getHostCard();
|
||||||
final Card devourer = AbilityUtils.getDefinedCards(source, sa.getParam("ExtraDefined"), sa).getFirst(); // maybe just getOriginalHost()?
|
final Card devourer = sa.getOriginalHost();
|
||||||
if (ai.getTeamMates(true).contains(devourer.getController())) {
|
if (ai.getTeamMates(true).contains(devourer.getController())) {
|
||||||
return false; // TODO: Currently, the AI doesn't ever fight its own (or allied) Grothama for card draw. This can be improved.
|
return false; // TODO: Currently, the AI doesn't ever fight its own (or allied) Grothama for card draw. This can be improved.
|
||||||
}
|
}
|
||||||
final Card fighter = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa).getFirst();
|
|
||||||
boolean goodTradeOrNoTrade = devourer.canBeDestroyed() && (devourer.getNetPower() < fighter.getNetToughness() || !fighter.canBeDestroyed()
|
boolean goodTradeOrNoTrade = devourer.canBeDestroyed() && (devourer.getNetPower() < fighter.getNetToughness() || !fighter.canBeDestroyed()
|
||||||
|| ComputerUtilCard.evaluateCreature(devourer) > ComputerUtilCard.evaluateCreature(fighter));
|
|| ComputerUtilCard.evaluateCreature(devourer) > ComputerUtilCard.evaluateCreature(fighter));
|
||||||
return goodTradeOrNoTrade && fighter.getNetPower() >= devourer.getNetToughness();
|
return goodTradeOrNoTrade && fighter.getNetPower() >= devourer.getNetToughness();
|
||||||
|
|||||||
@@ -825,8 +825,8 @@ public class AbilityUtils {
|
|||||||
return objects;
|
return objects;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FCollection<GameEntity> getDefinedEntities(final Card card, final String[] def, final CardTraitBase sa) {
|
public static List<GameEntity> getDefinedEntities(final Card card, final String[] def, final CardTraitBase sa) {
|
||||||
final FCollection<GameEntity> objects = new FCollection<>();
|
final List<GameEntity> objects = new ArrayList<>();
|
||||||
for (String d : def) {
|
for (String d : def) {
|
||||||
objects.addAll(AbilityUtils.getDefinedEntities(card, d, sa));
|
objects.addAll(AbilityUtils.getDefinedEntities(card, d, sa));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,16 +206,44 @@ public abstract class SpellAbilityEffect {
|
|||||||
protected final static CardCollection getDefinedCardsOrTargeted(final SpellAbility sa) { return getCards(true, "Defined", sa); }
|
protected final static CardCollection getDefinedCardsOrTargeted(final SpellAbility sa) { return getCards(true, "Defined", sa); }
|
||||||
protected final static CardCollection getDefinedCardsOrTargeted(final SpellAbility sa, final String definedParam) { return getCards(true, definedParam, sa); }
|
protected final static CardCollection getDefinedCardsOrTargeted(final SpellAbility sa, final String definedParam) { return getCards(true, definedParam, sa); }
|
||||||
|
|
||||||
|
protected static List<Card> getTargetCardsWithDuplicates(final boolean definedFirst, final String definedParam, final SpellAbility sa) {
|
||||||
|
List<Card> result = Lists.newArrayList();
|
||||||
|
getCards(definedFirst, definedParam, sa, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// overloaded variant that returns the unique objects instead of filling a result list
|
||||||
private static CardCollection getCards(final boolean definedFirst, final String definedParam, final SpellAbility sa) {
|
private static CardCollection getCards(final boolean definedFirst, final String definedParam, final SpellAbility sa) {
|
||||||
|
return getCards(definedFirst, definedParam, sa, null);
|
||||||
|
}
|
||||||
|
private static CardCollection getCards(final boolean definedFirst, final String definedParam, final SpellAbility sa, List<Card> resultDuplicate) {
|
||||||
if (sa.hasParam("ThisDefinedAndTgts")) {
|
if (sa.hasParam("ThisDefinedAndTgts")) {
|
||||||
CardCollection cards =
|
CardCollection cards = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("ThisDefinedAndTgts"), sa);
|
||||||
AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("ThisDefinedAndTgts"), sa);
|
|
||||||
cards.addAll(sa.getTargets().getTargetCards());
|
cards.addAll(sa.getTargets().getTargetCards());
|
||||||
return cards;
|
return cards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CardCollection resultUnique = null;
|
||||||
final boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam));
|
final boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam));
|
||||||
return useTargets ? new CardCollection(sa.getTargets().getTargetCards())
|
if (useTargets) {
|
||||||
: AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam(definedParam), sa);
|
if (resultDuplicate == null) {
|
||||||
|
resultUnique = new CardCollection();
|
||||||
|
resultDuplicate = resultUnique;
|
||||||
|
}
|
||||||
|
Iterables.addAll(resultDuplicate, sa.getTargets().getTargetCards());
|
||||||
|
} else {
|
||||||
|
String[] def = sa.getParamOrDefault(definedParam, "Self").split(" & ");
|
||||||
|
for (String d : def) {
|
||||||
|
CardCollection defResult = AbilityUtils.getDefinedCards(sa.getHostCard(), d, sa);
|
||||||
|
if (resultDuplicate == null) {
|
||||||
|
resultUnique = defResult;
|
||||||
|
resultDuplicate = resultUnique;
|
||||||
|
} else {
|
||||||
|
resultDuplicate.addAll(defResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resultUnique;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Players
|
// Players
|
||||||
@@ -224,16 +252,44 @@ public abstract class SpellAbilityEffect {
|
|||||||
protected final static PlayerCollection getDefinedPlayersOrTargeted(final SpellAbility sa) { return getPlayers(true, "Defined", sa); }
|
protected final static PlayerCollection getDefinedPlayersOrTargeted(final SpellAbility sa) { return getPlayers(true, "Defined", sa); }
|
||||||
protected final static PlayerCollection getDefinedPlayersOrTargeted(final SpellAbility sa, final String definedParam) { return getPlayers(true, definedParam, sa); }
|
protected final static PlayerCollection getDefinedPlayersOrTargeted(final SpellAbility sa, final String definedParam) { return getPlayers(true, definedParam, sa); }
|
||||||
|
|
||||||
|
protected static List<Player> getTargetPlayersWithDuplicates(final boolean definedFirst, final String definedParam, final SpellAbility sa) {
|
||||||
|
List<Player> result = Lists.newArrayList();
|
||||||
|
getPlayers(definedFirst, definedParam, sa, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// overloaded variant that returns the unique objects instead of filling a result list
|
||||||
private static PlayerCollection getPlayers(final boolean definedFirst, final String definedParam, final SpellAbility sa) {
|
private static PlayerCollection getPlayers(final boolean definedFirst, final String definedParam, final SpellAbility sa) {
|
||||||
|
return getPlayers(definedFirst, definedParam, sa, null);
|
||||||
|
}
|
||||||
|
private static PlayerCollection getPlayers(final boolean definedFirst, final String definedParam, final SpellAbility sa, List<Player> resultDuplicate) {
|
||||||
|
PlayerCollection resultUnique = null;
|
||||||
final boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam));
|
final boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam));
|
||||||
PlayerCollection players = useTargets ? new PlayerCollection(sa.getTargets().getTargetPlayers())
|
if (useTargets) {
|
||||||
: AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam(definedParam), sa);
|
if (resultDuplicate == null) {
|
||||||
// try sort in APNAP order
|
resultUnique = new PlayerCollection();
|
||||||
int indexAP = players.indexOf(sa.getHostCard().getGame().getPhaseHandler().getPlayerTurn());
|
resultDuplicate = resultUnique;
|
||||||
if (indexAP != -1) {
|
}
|
||||||
Collections.rotate(players, - indexAP);
|
Iterables.addAll(resultDuplicate, sa.getTargets().getTargetPlayers());
|
||||||
|
} else {
|
||||||
|
String[] def = sa.getParamOrDefault(definedParam, "You").split(" & ");
|
||||||
|
for (String d : def) {
|
||||||
|
PlayerCollection defResult = AbilityUtils.getDefinedPlayers(sa.getHostCard(), d, sa);
|
||||||
|
if (resultDuplicate == null) {
|
||||||
|
resultUnique = defResult;
|
||||||
|
resultDuplicate = resultUnique;
|
||||||
|
} else {
|
||||||
|
resultDuplicate.addAll(defResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return players;
|
|
||||||
|
// try sort in APNAP order
|
||||||
|
int indexAP = resultDuplicate.indexOf(sa.getHostCard().getGame().getPhaseHandler().getPlayerTurn());
|
||||||
|
if (indexAP != -1) {
|
||||||
|
Collections.rotate(resultDuplicate, - indexAP);
|
||||||
|
}
|
||||||
|
return resultUnique;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spells
|
// Spells
|
||||||
@@ -624,21 +680,19 @@ public abstract class SpellAbilityEffect {
|
|||||||
String attacking = sa.getParam(attackingParam);
|
String attacking = sa.getParam(attackingParam);
|
||||||
|
|
||||||
GameEntity defender = null;
|
GameEntity defender = null;
|
||||||
FCollection<GameEntity> defs = null;
|
FCollection<GameEntity> defs = new FCollection<>();
|
||||||
// important to update defenders here, maybe some PW got removed
|
// important to update defenders here, maybe some PW got removed
|
||||||
combat.initConstraints();
|
combat.initConstraints();
|
||||||
if ("True".equalsIgnoreCase(attacking)) {
|
if ("True".equalsIgnoreCase(attacking)) {
|
||||||
defs = (FCollection<GameEntity>) combat.getDefenders();
|
defs.addAll(combat.getDefenders());
|
||||||
} else {
|
} else {
|
||||||
defs = AbilityUtils.getDefinedEntities(sa.hasParam("ForEach") ? c : host, attacking.split(","), sa);
|
defs.addAll(AbilityUtils.getDefinedEntities(sa.hasParam("ForEach") ? c : host, attacking.split("&"), sa));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defs != null) {
|
Map<String, Object> params = Maps.newHashMap();
|
||||||
Map<String, Object> params = Maps.newHashMap();
|
params.put("Attacker", c);
|
||||||
params.put("Attacker", c);
|
defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(defs, sa,
|
||||||
defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(defs, sa,
|
Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", CardTranslation.getTranslatedName(c.getName())), false, params);
|
||||||
Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", CardTranslation.getTranslatedName(c.getName())), false, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
final GameEntity originalDefender = combat.getDefenderByAttacker(c);
|
final GameEntity originalDefender = combat.getDefenderByAttacker(c);
|
||||||
if (defender != null &&
|
if (defender != null &&
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package forge.game.ability.effects;
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
import forge.game.ability.AbilityKey;
|
import forge.game.ability.AbilityKey;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.ability.SpellAbilityEffect;
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
@@ -53,7 +56,6 @@ public class DrawEffect extends SpellAbilityEffect {
|
|||||||
@Override
|
@Override
|
||||||
public void resolve(SpellAbility sa) {
|
public void resolve(SpellAbility sa) {
|
||||||
final Card source = sa.getHostCard();
|
final Card source = sa.getHostCard();
|
||||||
final int numCards = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumCards"), sa) : 1;
|
|
||||||
|
|
||||||
final boolean upto = sa.hasParam("Upto");
|
final boolean upto = sa.hasParam("Upto");
|
||||||
final boolean optional = sa.hasParam("OptionalDecider") || upto;
|
final boolean optional = sa.hasParam("OptionalDecider") || upto;
|
||||||
@@ -61,11 +63,16 @@ public class DrawEffect extends SpellAbilityEffect {
|
|||||||
moveParams.put(AbilityKey.LastStateBattlefield, sa.getLastStateBattlefield());
|
moveParams.put(AbilityKey.LastStateBattlefield, sa.getLastStateBattlefield());
|
||||||
moveParams.put(AbilityKey.LastStateGraveyard, sa.getLastStateGraveyard());
|
moveParams.put(AbilityKey.LastStateGraveyard, sa.getLastStateGraveyard());
|
||||||
|
|
||||||
for (final Player p : getDefinedPlayersOrTargeted(sa)) {
|
final List<Player> tgts = getTargetPlayersWithDuplicates(true, "Defined", sa);
|
||||||
|
|
||||||
|
for (final Player p : Sets.newHashSet(tgts)) {
|
||||||
if (!p.isInGame()) {
|
if (!p.isInGame()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int numCards = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumCards"), sa) : 1;
|
||||||
|
numCards *= Collections.frequency(tgts, p);
|
||||||
|
|
||||||
// it is optional, not upto and player can't choose to draw that many cards
|
// it is optional, not upto and player can't choose to draw that many cards
|
||||||
if (optional && !upto && !p.canDrawAmount(numCards)) {
|
if (optional && !upto && !p.canDrawAmount(numCards)) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -98,11 +98,8 @@ public class FightEffect extends DamageBaseEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sa.hasParam("Defined")) {
|
if (sa.hasParam("Defined")) {
|
||||||
List<Card> defined = AbilityUtils.getDefinedCards(host, sa.getParam("Defined"), sa);
|
List<Card> defined = getTargetCardsWithDuplicates(true, "Defined", sa);
|
||||||
// Allow both fighters to come from defined list if first fighter not already found
|
// Allow both fighters to come from defined list if first fighter not already found
|
||||||
if (sa.hasParam("ExtraDefined")) {
|
|
||||||
defined.addAll(AbilityUtils.getDefinedCards(host, sa.getParam("ExtraDefined"), sa));
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Card> newDefined = Lists.newArrayList();
|
List<Card> newDefined = Lists.newArrayList();
|
||||||
for (final Card d : defined) {
|
for (final Card d : defined) {
|
||||||
|
|||||||
@@ -5,8 +5,14 @@ import forge.game.ability.SpellAbilityEffect;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.util.Lang;
|
import forge.util.Lang;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
public class LifeGainEffect extends SpellAbilityEffect {
|
public class LifeGainEffect extends SpellAbilityEffect {
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@@ -44,21 +50,20 @@ public class LifeGainEffect extends SpellAbilityEffect {
|
|||||||
public void resolve(SpellAbility sa) {
|
public void resolve(SpellAbility sa) {
|
||||||
String amount = sa.getParam("LifeAmount");
|
String amount = sa.getParam("LifeAmount");
|
||||||
boolean variableAmount = amount.equals("AFNotDrawnNum");
|
boolean variableAmount = amount.equals("AFNotDrawnNum");
|
||||||
int lifeAmount = 0;
|
|
||||||
if (variableAmount) {
|
if (variableAmount) {
|
||||||
amount = "X";
|
amount = "X";
|
||||||
} else {
|
|
||||||
lifeAmount = AbilityUtils.calculateAmount(sa.getHostCard(), amount, sa);
|
|
||||||
}
|
}
|
||||||
|
final List<Player> tgts = getTargetPlayersWithDuplicates(false, "Defined", sa);
|
||||||
|
|
||||||
for (final Player p : getDefinedPlayersOrTargeted(sa)) {
|
for (final Player p : Sets.newHashSet(tgts)) {
|
||||||
if (!p.isInGame()) {
|
if (!p.isInGame()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (variableAmount) {
|
if (variableAmount) {
|
||||||
sa.setSVar("AFNotDrawnNum", sa.getSVar("AFNotDrawnNum_" + p.getId()));
|
sa.setSVar("AFNotDrawnNum", sa.getSVar("AFNotDrawnNum_" + p.getId()));
|
||||||
lifeAmount = AbilityUtils.calculateAmount(sa.getHostCard(), amount, sa);
|
|
||||||
}
|
}
|
||||||
|
int lifeAmount = AbilityUtils.calculateAmount(sa.getHostCard(), amount, sa);
|
||||||
|
lifeAmount *= Collections.frequency(tgts, p);
|
||||||
p.gainLife(lifeAmount, sa.getHostCard(), sa);
|
p.gainLife(lifeAmount, sa.getHostCard(), sa);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,6 @@ S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$
|
|||||||
SVar:X:Count$Valid Creature.YouCtrl
|
SVar:X:Count$Valid Creature.YouCtrl
|
||||||
T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ DBRepeat | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, for each opponent, create a 1/1 white Human creature token that's tapped and attacking that player or a planeswalker they control.
|
T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ DBRepeat | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, for each opponent, create a 1/1 white Human creature token that's tapped and attacking that player or a planeswalker they control.
|
||||||
SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | ChangeZoneTable$ True | RepeatSubAbility$ DBToken
|
SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | ChangeZoneTable$ True | RepeatSubAbility$ DBToken
|
||||||
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_human | TokenTapped$ True | TokenAttacking$ Player.IsRemembered,Valid Planeswalker.ControlledBy Remembered | TokenOwner$ You
|
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_human | TokenTapped$ True | TokenAttacking$ Player.IsRemembered & Valid Planeswalker.ControlledBy Remembered | TokenOwner$ You
|
||||||
DeckHas:Ability$Token
|
DeckHas:Ability$Token
|
||||||
Oracle:Vigilance\nAdeline, Resplendent Cathar's power is equal to the number of creatures you control.\nWhenever you attack, for each opponent, create a 1/1 white Human creature token that's tapped and attacking that player or a planeswalker they control.
|
Oracle:Vigilance\nAdeline, Resplendent Cathar's power is equal to the number of creatures you control.\nWhenever you attack, for each opponent, create a 1/1 white Human creature token that's tapped and attacking that player or a planeswalker they control.
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ PT:2/6
|
|||||||
K:Flying
|
K:Flying
|
||||||
K:Double Strike
|
K:Double Strike
|
||||||
T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature you control deals combat damage to a player, you and that player each gain that much life.
|
T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature you control deals combat damage to a player, you and that player each gain that much life.
|
||||||
SVar:TrigGain:DB$ GainLife | Defined$ You | LifeAmount$ X | SubAbility$ DBGain
|
SVar:TrigGain:DB$ GainLife | Defined$ You & TriggeredTarget | LifeAmount$ X
|
||||||
SVar:DBGain:DB$ GainLife | Defined$ TriggeredTarget | LifeAmount$ X
|
|
||||||
SVar:X:TriggerCount$DamageAmount
|
SVar:X:TriggerCount$DamageAmount
|
||||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ Z | SVarCompare$ GEY | Execute$ TrigLose | TriggerDescription$ At the beginning of your end step, if you have at least 15 life more than your starting life total, each player CARDNAME attacked this turn loses the game.
|
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ Z | SVarCompare$ GEY | Execute$ TrigLose | TriggerDescription$ At the beginning of your end step, if you have at least 15 life more than your starting life total, each player CARDNAME attacked this turn loses the game.
|
||||||
SVar:TrigLose:DB$ LosesGame | Defined$ Player.attackedBySourceThisTurn
|
SVar:TrigLose:DB$ LosesGame | Defined$ Player.attackedBySourceThisTurn
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ Name:Conjured Currency
|
|||||||
ManaCost:5 U
|
ManaCost:5 U
|
||||||
Types:Enchantment
|
Types:Enchantment
|
||||||
T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | ValidPlayer$ You | Execute$ ExchangeCards | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may exchange control of CARDNAME and target permanent you neither own nor control.
|
T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | ValidPlayer$ You | Execute$ ExchangeCards | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may exchange control of CARDNAME and target permanent you neither own nor control.
|
||||||
SVar:ExchangeCards:DB$ ExchangeControl | Defined$ Self | ValidTgts$ Permanent.YouDontCtrl+YouDontOwn | TgtPrompt$ Select target permanent you neither own nor control | SpellDescription$ Exchange control of CARDNAME and target permanent you neither own nor control.
|
SVar:ExchangeCards:DB$ ExchangeControl | Defined$ Self | ValidTgts$ Permanent.YouDontCtrl+YouDontOwn | TgtPrompt$ Select target permanent you neither own nor control
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:At the beginning of your upkeep, you may exchange control of Conjured Currency and target permanent you neither own nor control.
|
Oracle:At the beginning of your upkeep, you may exchange control of Conjured Currency and target permanent you neither own nor control.
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
Name:Cunning Strike
|
Name:Cunning Strike
|
||||||
ManaCost:3 U R
|
ManaCost:3 U R
|
||||||
Types:Instant
|
Types:Instant
|
||||||
A:SP$ DealDamage | Cost$ 3 U R | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 2 | SubAbility$ DB1 | SpellDescription$ CARDNAME deals 2 damage to target creature and 2 damage to target player or planeswalker. Draw a card.
|
A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 2 | DamageMap$ True | SubAbility$ DB1 | SpellDescription$ CARDNAME deals 2 damage to target creature and 2 damage to target player or planeswalker. Draw a card.
|
||||||
SVar:DB1:DB$ DealDamage | NumDmg$ 2 | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | SubAbility$ DBDraw
|
SVar:DB1:DB$ DealDamage | NumDmg$ 2 | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | SubAbility$ DBDamageResolve
|
||||||
|
SVar:DBDamageResolve:DB$ DamageResolve | SubAbility$ DBDraw
|
||||||
SVar:DBDraw:DB$ Draw | NumCards$ 1
|
SVar:DBDraw:DB$ Draw | NumCards$ 1
|
||||||
Oracle:Cunning Strike deals 2 damage to target creature and 2 damage to target player or planeswalker.\nDraw a card.
|
Oracle:Cunning Strike deals 2 damage to target creature and 2 damage to target player or planeswalker.\nDraw a card.
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ ManaCost:4 U
|
|||||||
Types:Creature Spirit
|
Types:Creature Spirit
|
||||||
PT:2/4
|
PT:2/4
|
||||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you and that player each draw that many cards.
|
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you and that player each draw that many cards.
|
||||||
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X | SubAbility$ DBDraw
|
SVar:TrigDraw:DB$ Draw | Defined$ You & TriggeredTarget | NumCards$ X
|
||||||
SVar:DBDraw:DB$ Draw | Defined$ TriggeredTarget | NumCards$ X
|
|
||||||
SVar:X:TriggerCount$DamageAmount
|
SVar:X:TriggerCount$DamageAmount
|
||||||
Oracle:Whenever Diviner Spirit deals combat damage to a player, you and that player each draw that many cards.
|
Oracle:Whenever Diviner Spirit deals combat damage to a player, you and that player each draw that many cards.
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
Name:Ezuri's Predation
|
Name:Ezuri's Predation
|
||||||
ManaCost:5 G G G
|
ManaCost:5 G G G
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ RepeatEach | Cost$ 5 G G G | RepeatCards$ Creature.OppCtrl | ChooseOrder$ True | UseImprinted$ True | RepeatSubAbility$ DBToken | ChangeZoneTable$ True | SpellDescription$ For each creature your opponents control, create a 4/4 green Phyrexian Beast creature token. Each of those Beasts fights a different one of those creatures.
|
A:SP$ RepeatEach | RepeatCards$ Creature.OppCtrl | ChooseOrder$ True | UseImprinted$ True | RepeatSubAbility$ DBToken | ChangeZoneTable$ True | SpellDescription$ For each creature your opponents control, create a 4/4 green Phyrexian Beast creature token. Each of those Beasts fights a different one of those creatures.
|
||||||
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_4_4_phyrexian_beast | TokenOwner$ You | RememberTokens$ True | SubAbility$ DBFight
|
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_4_4_phyrexian_beast | TokenOwner$ You | RememberTokens$ True | SubAbility$ DBFight
|
||||||
SVar:DBFight:DB$ Fight | Defined$ Imprinted | ExtraDefined$ Remembered | SubAbility$ DBCleanup
|
SVar:DBFight:DB$ Fight | Defined$ Imprinted & Remembered | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:NeedsToPlay:Creature.OppCtrl+powerLE3
|
SVar:NeedsToPlay:Creature.OppCtrl+powerLE3
|
||||||
Oracle:For each creature your opponents control, create a 4/4 green Phyrexian Beast creature token. Each of those Beasts fights a different one of those creatures.
|
Oracle:For each creature your opponents control, create a 4/4 green Phyrexian Beast creature token. Each of those Beasts fights a different one of those creatures.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
Name:First Volley
|
Name:First Volley
|
||||||
ManaCost:1 R
|
ManaCost:1 R
|
||||||
Types:Instant Arcane
|
Types:Instant Arcane
|
||||||
A:SP$ DealDamage | Cost$ 1 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 1 | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 1 damage to target creature and 1 damage to that creature's controller.
|
A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 1 | DamageMap$ True | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 1 damage to target creature and 1 damage to that creature's controller.
|
||||||
SVar:DBDealDamage:DB$ DealDamage | NumDmg$ 1 | Defined$ TargetedController
|
SVar:DBDealDamage:DB$ DealDamage | NumDmg$ 1 | Defined$ TargetedController | SubAbility$ DBDamageResolve
|
||||||
|
SVar:DBDamageResolve:DB$ DamageResolve
|
||||||
Oracle:First Volley deals 1 damage to target creature and 1 damage to that creature's controller.
|
Oracle:First Volley deals 1 damage to target creature and 1 damage to that creature's controller.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Types:Legendary Creature Wurm
|
|||||||
PT:10/8
|
PT:10/8
|
||||||
S:Mode$ Continuous | Affected$ Creature.Other | AddTrigger$ GrothamaAttack | AddSVar$ HasAttackEffect | Description$ Other creatures have "Whenever this creature attacks, you may have it fight CARDNAME."
|
S:Mode$ Continuous | Affected$ Creature.Other | AddTrigger$ GrothamaAttack | AddSVar$ HasAttackEffect | Description$ Other creatures have "Whenever this creature attacks, you may have it fight CARDNAME."
|
||||||
SVar:GrothamaAttack:Mode$ Attacks | ValidCard$ Card.Self | Execute$ GrothamaFight | OptionalDecider$ You | TriggerDescription$ Whenever this creature attacks, ABILITY.
|
SVar:GrothamaAttack:Mode$ Attacks | ValidCard$ Card.Self | Execute$ GrothamaFight | OptionalDecider$ You | TriggerDescription$ Whenever this creature attacks, ABILITY.
|
||||||
SVar:GrothamaFight:DB$ Fight | Defined$ TriggeredAttackerLKICopy | ExtraDefined$ OriginalHost | AILogic$ Grothama | SpellDescription$ You may have it fight ORIGINALHOST
|
SVar:GrothamaFight:DB$ Fight | Defined$ TriggeredAttackerLKICopy & OriginalHost | AILogic$ Grothama | SpellDescription$ You may have it fight ORIGINALHOST
|
||||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigRepeat | TriggerDescription$ When NICKNAME leaves the battlefield, each player draws cards equal to the amount of damage dealt to NICKNAME this turn by sources they controlled.
|
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigRepeat | TriggerDescription$ When NICKNAME leaves the battlefield, each player draws cards equal to the amount of damage dealt to NICKNAME this turn by sources they controlled.
|
||||||
SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ TrigDraw
|
SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ TrigDraw
|
||||||
SVar:TrigDraw:DB$ Draw | Defined$ Remembered | NumCards$ X
|
SVar:TrigDraw:DB$ Draw | Defined$ Remembered | NumCards$ X
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ ManaCost:2 R G
|
|||||||
Types:Legendary Creature Human Scout
|
Types:Legendary Creature Human Scout
|
||||||
PT:1/4
|
PT:1/4
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ Whenever CARDNAME attacks, reveal the top card of your library. If it's a creature card, put it onto the battlefield tapped and attacking defending player or a planeswalker they control. Otherwise, put that card into your hand. When you put a creature card onto the battlefield this way, it fights CARDNAME.
|
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ Whenever CARDNAME attacks, reveal the top card of your library. If it's a creature card, put it onto the battlefield tapped and attacking defending player or a planeswalker they control. Otherwise, put that card into your hand. When you put a creature card onto the battlefield this way, it fights CARDNAME.
|
||||||
SVar:TrigDig:DB$ Dig | DigNum$ 1 | ChangeNum$ All | Optional$ True | Reveal$ True | ChangeValid$ Creature | DestinationZone$ Battlefield | DestinationZone2$ Hand | Tapped$ True | Attacking$ DefendingPlayer,Valid Planeswalker.ControlledBy DefendingPlayer | RememberChanged$ True | SubAbility$ DBImmediateTriggerCheck
|
SVar:TrigDig:DB$ Dig | DigNum$ 1 | ChangeNum$ All | Optional$ True | Reveal$ True | ChangeValid$ Creature | DestinationZone$ Battlefield | DestinationZone2$ Hand | Tapped$ True | Attacking$ DefendingPlayer & Valid Planeswalker.ControlledBy DefendingPlayer | RememberChanged$ True | SubAbility$ DBImmediateTriggerCheck
|
||||||
SVar:DBImmediateTriggerCheck:DB$ ImmediateTrigger | Execute$ DBFight | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ GE1 | TriggerDescription$ When you put a creature card onto the battlefield this way, it fights Hans Eriksson.
|
SVar:DBImmediateTriggerCheck:DB$ ImmediateTrigger | Execute$ DBFight | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ GE1 | TriggerDescription$ When you put a creature card onto the battlefield this way, it fights Hans Eriksson.
|
||||||
SVar:DBFight:DB$ Fight | Defined$ Remembered | ExtraDefined$ Self | SubAbility$ DBCleanup
|
SVar:DBFight:DB$ Fight | Defined$ Remembered & Self | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:HasAttackEffect:TRUE
|
SVar:HasAttackEffect:TRUE
|
||||||
Oracle:Whenever Hans Eriksson attacks, reveal the top card of your library. If it's a creature card, put it onto the battlefield tapped and attacking defending player or a planeswalker they control. Otherwise, put that card into your hand. When you put a creature card onto the battlefield this way, it fights Hans Eriksson.
|
Oracle:Whenever Hans Eriksson attacks, reveal the top card of your library. If it's a creature card, put it onto the battlefield tapped and attacking defending player or a planeswalker they control. Otherwise, put that card into your hand. When you put a creature card onto the battlefield this way, it fights Hans Eriksson.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
Name:Hungry Flames
|
Name:Hungry Flames
|
||||||
ManaCost:2 R
|
ManaCost:2 R
|
||||||
Types:Instant
|
Types:Instant
|
||||||
A:SP$ DealDamage | Cost$ 2 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 3 | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 3 damage to target creature and 2 damage to target player or planeswalker.
|
A:SP$ DealDamage | ValidTgts$ Creature | NumDmg$ 3 | DamageMap$ True | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 3 damage to target creature and 2 damage to target player or planeswalker.
|
||||||
SVar:DBDealDamage:DB$ DealDamage | NumDmg$ 2 | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker
|
SVar:DBDealDamage:DB$ DealDamage | NumDmg$ 2 | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | SubAbility$ DBDamageResolve
|
||||||
|
SVar:DBDamageResolve:DB$ DamageResolve
|
||||||
Oracle:Hungry Flames deals 3 damage to target creature and 2 damage to target player or planeswalker.
|
Oracle:Hungry Flames deals 3 damage to target creature and 2 damage to target player or planeswalker.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
Name:Lunge
|
Name:Lunge
|
||||||
ManaCost:2 R
|
ManaCost:2 R
|
||||||
Types:Instant
|
Types:Instant
|
||||||
A:SP$ DealDamage | Cost$ 2 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 2 | SubAbility$ DB1 | SpellDescription$ CARDNAME deals 2 damage to target creature and 2 damage to target player or planeswalker.
|
A:SP$ DealDamage | ValidTgts$ Creature | NumDmg$ 2 | DamageMap$ True | SubAbility$ DB1 | SpellDescription$ CARDNAME deals 2 damage to target creature and 2 damage to target player or planeswalker.
|
||||||
SVar:DB1:DB$ DealDamage | NumDmg$ 2 | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker
|
SVar:DB1:DB$ DealDamage | NumDmg$ 2 | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | SubAbility$ DBDamageResolve
|
||||||
|
SVar:DBDamageResolve:DB$ DamageResolve
|
||||||
Oracle:Lunge deals 2 damage to target creature and 2 damage to target player or planeswalker.
|
Oracle:Lunge deals 2 damage to target creature and 2 damage to target player or planeswalker.
|
||||||
|
|||||||
@@ -2,8 +2,9 @@ Name:Neonate's Rush
|
|||||||
ManaCost:2 R
|
ManaCost:2 R
|
||||||
Types:Instant
|
Types:Instant
|
||||||
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | IsPresent$ Vampire.YouCtrl | Description$ This spell costs {1} less to cast if you control a Vampire.
|
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | IsPresent$ Vampire.YouCtrl | Description$ This spell costs {1} less to cast if you control a Vampire.
|
||||||
A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 1 | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 1 damage to target creature and 1 damage to its controller. Draw a card.
|
A:SP$ DealDamage | ValidTgts$ Creature | NumDmg$ 1 | DamageMap$ True | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 1 damage to target creature and 1 damage to its controller. Draw a card.
|
||||||
SVar:DBDealDamage:DB$ DealDamage | Defined$ TargetedController | NumDmg$ 1 | SubAbility$ DBDraw
|
SVar:DBDealDamage:DB$ DealDamage | Defined$ TargetedController | NumDmg$ 1 | SubAbility$ DBDamageResolve
|
||||||
|
SVar:DBDamageResolve:DB$ DamageResolve | SubAbility$ DBDraw
|
||||||
SVar:DBDraw:DB$ Draw | NumCards$ 1
|
SVar:DBDraw:DB$ Draw | NumCards$ 1
|
||||||
SVar:BuffedBy:Vampire
|
SVar:BuffedBy:Vampire
|
||||||
DeckHints:Type$Vampire
|
DeckHints:Type$Vampire
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ Name:Psionic Entity
|
|||||||
ManaCost:4 U
|
ManaCost:4 U
|
||||||
Types:Creature Illusion
|
Types:Creature Illusion
|
||||||
PT:2/2
|
PT:2/2
|
||||||
A:AB$ DealDamage | Cost$ T | ValidTgts$ Any | NumDmg$ 2 | SubAbility$ DB1 | SpellDescription$ CARDNAME deals 2 damage to any target and 3 damage to itself.
|
A:AB$ DealDamage | Cost$ T | ValidTgts$ Any | NumDmg$ 2 | DamageMap$ True | SubAbility$ DB1 | SpellDescription$ CARDNAME deals 2 damage to any target and 3 damage to itself.
|
||||||
SVar:DB1:DB$ DealDamage | NumDmg$ 3 | Defined$ Self
|
SVar:DB1:DB$ DealDamage | NumDmg$ 3 | Defined$ Self | SubAbility$ DBDamageResolve
|
||||||
|
SVar:DBDamageResolve:DB$ DamageResolve
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:{T}: Psionic Entity deals 2 damage to any target and 3 damage to itself.
|
Oracle:{T}: Psionic Entity deals 2 damage to any target and 3 damage to itself.
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ PT:2/4
|
|||||||
K:Trample
|
K:Trample
|
||||||
K:Haste
|
K:Haste
|
||||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigDraw | CombatDamage$ True | TriggerDescription$ Share Intelligence — Whenever CARDNAME deals combat damage to a player, you and that player each draw that many cards.
|
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigDraw | CombatDamage$ True | TriggerDescription$ Share Intelligence — Whenever CARDNAME deals combat damage to a player, you and that player each draw that many cards.
|
||||||
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X | SubAbility$ DBDraw
|
SVar:TrigDraw:DB$ Draw | Defined$ You & TriggeredTarget | NumCards$ X
|
||||||
SVar:DBDraw:DB$ Draw | Defined$ TriggeredTarget | NumCards$ X
|
|
||||||
SVar:X:TriggerCount$DamageAmount
|
SVar:X:TriggerCount$DamageAmount
|
||||||
Oracle:Trample, haste\nShare Intelligence — Whenever Sergeant John Benton deals combat damage to a player, you and that player each draw that many cards.
|
Oracle:Trample, haste\nShare Intelligence — Whenever Sergeant John Benton deals combat damage to a player, you and that player each draw that many cards.
|
||||||
@@ -5,7 +5,7 @@ PT:5/5
|
|||||||
K:Flying
|
K:Flying
|
||||||
S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't attack. | IsPresent$ Creature | PresentCompare$ GT1 | Description$ CARDNAME can't attack if another creature is on the battlefield.
|
S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't attack. | IsPresent$ Creature | PresentCompare$ GT1 | Description$ CARDNAME can't attack if another creature is on the battlefield.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your upkeep, you lose 3 life.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your upkeep, you lose 3 life.
|
||||||
A:AB$ ChangeZone | Cost$ T | ValidTgts$ Creature | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Select target creature | SubAbility$ DBCounter | SpellDescription$ Exile target creature and put a +1/+1 counter on CARDNAME.
|
A:AB$ ChangeZone | Cost$ T | ValidTgts$ Creature | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Select target creature | SubAbility$ DBCounter | SpellDescription$ Exile target creature and put a +1/+1 counter on NICKNAME.
|
||||||
SVar:TrigLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 3
|
SVar:TrigLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 3
|
||||||
SVar:DBCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | Defined$ Self
|
SVar:DBCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | Defined$ Self
|
||||||
#TODO: This creature seems almost AI playable, except the AI won't play around it and will cast other creatures, which may not even be a necessarily bad thing. Maybe RemRandomDeck would suffice here.
|
#TODO: This creature seems almost AI playable, except the AI won't play around it and will cast other creatures, which may not even be a necessarily bad thing. Maybe RemRandomDeck would suffice here.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
Name:Shower of Sparks
|
Name:Shower of Sparks
|
||||||
ManaCost:R
|
ManaCost:R
|
||||||
Types:Instant
|
Types:Instant
|
||||||
A:SP$ DealDamage | Cost$ R | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 1 | SubAbility$ DBDamage | SpellDescription$ CARDNAME deals 1 damage to target creature
|
A:SP$ DealDamage | ValidTgts$ Creature | NumDmg$ 1 | DamageMap$ True | SubAbility$ DBDamage | SpellDescription$ CARDNAME deals 1 damage to target creature
|
||||||
SVar:DBDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | NumDmg$ 1 | SpellDescription$ and 1 damage to target player or planeswalker.
|
SVar:DBDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | NumDmg$ 1 | SubAbility$ DBDamageResolve | SpellDescription$ and 1 damage to target player or planeswalker.
|
||||||
|
SVar:DBDamageResolve:DB$ DamageResolve
|
||||||
Oracle:Shower of Sparks deals 1 damage to target creature and 1 damage to target player or planeswalker.
|
Oracle:Shower of Sparks deals 1 damage to target creature and 1 damage to target player or planeswalker.
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ Types:Creature Minotaur Warrior
|
|||||||
PT:3/4
|
PT:3/4
|
||||||
A:AB$ Pump | Cost$ 1 | NumAtt$ +1 | NumDef$ -1 | SpellDescription$ CARDNAME gets +1/-1 until end of turn.
|
A:AB$ Pump | Cost$ 1 | NumAtt$ +1 | NumDef$ -1 | SpellDescription$ CARDNAME gets +1/-1 until end of turn.
|
||||||
T:Mode$ BecomesTarget | ValidSource$ Ability.Land+namedLabyrinth of Skophos+YouCtrl | ValidTarget$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigFight | OptionalDecider$ You | TriggerDescription$ Whenever another creature becomes the target of an ability of a land you control named Labyrinth of Skophos, you may have CARDNAME fight that creature. (Each deals damage equal to its power to the other.)
|
T:Mode$ BecomesTarget | ValidSource$ Ability.Land+namedLabyrinth of Skophos+YouCtrl | ValidTarget$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigFight | OptionalDecider$ You | TriggerDescription$ Whenever another creature becomes the target of an ability of a land you control named Labyrinth of Skophos, you may have CARDNAME fight that creature. (Each deals damage equal to its power to the other.)
|
||||||
SVar:TrigFight:DB$ Fight | Defined$ Self | ExtraDefined$ TriggeredTarget
|
SVar:TrigFight:DB$ Fight | Defined$ Self & TriggeredTarget
|
||||||
DeckNeeds:Name$Labyrinth of Skophos
|
DeckNeeds:Name$Labyrinth of Skophos
|
||||||
Oracle:{1}: Skophos Maze-Warden gets +1/-1 until end of turn.\nWhenever another creature becomes the target of an ability of a land you control named Labyrinth of Skophos, you may have Skophos Maze-Warden fight that creature. (Each deals damage equal to its power to the other.)
|
Oracle:{1}: Skophos Maze-Warden gets +1/-1 until end of turn.\nWhenever another creature becomes the target of an ability of a land you control named Labyrinth of Skophos, you may have Skophos Maze-Warden fight that creature. (Each deals damage equal to its power to the other.)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ PT:5/5
|
|||||||
S:Mode$ MinMaxBlocker | ValidCard$ Card.Self | Max$ 1 | Description$ CARDNAME can't be blocked by more than one creature.
|
S:Mode$ MinMaxBlocker | ValidCard$ Card.Self | Max$ 1 | Description$ CARDNAME can't be blocked by more than one creature.
|
||||||
T:Mode$ AttackersDeclared | AttackingPlayer$ Player.Opponent | Execute$ TrigGainControl | TriggerZones$ Battlefield | OptionalDecider$ You | IsPresent$ Card.Self+tapped | TriggerDescription$ Whenever an opponent attacks with one or more creatures, if NICKNAME is tapped, you may have that opponent gain control of NICKNAME until end of combat. If you do, choose a player or planeswalker that opponent is attacking. NICKNAME is attacking that player or planeswalker.
|
T:Mode$ AttackersDeclared | AttackingPlayer$ Player.Opponent | Execute$ TrigGainControl | TriggerZones$ Battlefield | OptionalDecider$ You | IsPresent$ Card.Self+tapped | TriggerDescription$ Whenever an opponent attacks with one or more creatures, if NICKNAME is tapped, you may have that opponent gain control of NICKNAME until end of combat. If you do, choose a player or planeswalker that opponent is attacking. NICKNAME is attacking that player or planeswalker.
|
||||||
SVar:TrigGainControl:DB$ GainControl | Defined$ Self | NewController$ TriggeredAttackingPlayer | LoseControl$ EndOfCombat | RememberControlled$ True | SubAbility$ DBAttack
|
SVar:TrigGainControl:DB$ GainControl | Defined$ Self | NewController$ TriggeredAttackingPlayer | LoseControl$ EndOfCombat | RememberControlled$ True | SubAbility$ DBAttack
|
||||||
SVar:DBAttack:DB$ ChangeCombatants | Defined$ Remembered | Attacking$ Player.Defending,Valid Planeswalker.Defending | SubAbility$ DBCleanup
|
SVar:DBAttack:DB$ ChangeCombatants | Defined$ Remembered | Attacking$ Player.Defending & Valid Planeswalker.Defending | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:Tahngarth, First Mate can't be blocked by more than one creature.\nWhenever an opponent attacks with one or more creatures, if Tahngarth is tapped, you may have that opponent gain control of Tahngarth until end of combat. If you do, choose a player or planeswalker that opponent is attacking. Tahngarth is attacking that player or planeswalker.
|
Oracle:Tahngarth, First Mate can't be blocked by more than one creature.\nWhenever an opponent attacks with one or more creatures, if Tahngarth is tapped, you may have that opponent gain control of Tahngarth until end of combat. If you do, choose a player or planeswalker that opponent is attacking. Tahngarth is attacking that player or planeswalker.
|
||||||
|
|||||||
@@ -6,8 +6,7 @@ K:Flying
|
|||||||
T:Mode$ Drawn | ValidCard$ Card.OppOwn | FirstCardInDrawStep$ False | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever an opponent draws a card except the first one they draw in each of their draw steps, create a 1/1 green Snake creature token.
|
T:Mode$ Drawn | ValidCard$ Card.OppOwn | FirstCardInDrawStep$ False | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever an opponent draws a card except the first one they draw in each of their draw steps, create a 1/1 green Snake creature token.
|
||||||
SVar:TrigToken:DB$ Token | TokenScript$ g_1_1_snake
|
SVar:TrigToken:DB$ Token | TokenScript$ g_1_1_snake
|
||||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you and that player each draw that many cards.
|
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you and that player each draw that many cards.
|
||||||
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X | SubAbility$ DBDraw
|
SVar:TrigDraw:DB$ Draw | Defined$ You & TriggeredTarget | NumCards$ X
|
||||||
SVar:DBDraw:DB$ Draw | Defined$ TriggeredTarget | NumCards$ X
|
|
||||||
SVar:X:TriggerCount$DamageAmount
|
SVar:X:TriggerCount$DamageAmount
|
||||||
DeckHas:Ability$Token
|
DeckHas:Ability$Token
|
||||||
Oracle:Flying\nWhenever an opponent draws a card except the first one they draw in each of their draw steps, create a 1/1 green Snake creature token.\nWhenever Xyris, the Writhing Storm deals combat damage to a player, you and that player each draw that many cards.
|
Oracle:Flying\nWhenever an opponent draws a card except the first one they draw in each of their draw steps, create a 1/1 green Snake creature token.\nWhenever Xyris, the Writhing Storm deals combat damage to a player, you and that player each draw that many cards.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Types:Legendary Creature Human Pirate
|
|||||||
PT:4/3
|
PT:4/3
|
||||||
K:Flying
|
K:Flying
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigBorrow | TriggerDescription$ Whenever CARDNAME attacks, look at defending player's hand. You may put a creature card from it onto the battlefield under your control tapped and attacking that player or a planeswalker they control. Return that creature to its owner's hand at the beginning of the next end step.
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigBorrow | TriggerDescription$ Whenever CARDNAME attacks, look at defending player's hand. You may put a creature card from it onto the battlefield under your control tapped and attacking that player or a planeswalker they control. Return that creature to its owner's hand at the beginning of the next end step.
|
||||||
SVar:TrigBorrow:DB$ ChangeZone | ChangeNum$ 1 | DefinedPlayer$ TriggeredDefendingPlayer | Chooser$ You | ChangeType$ Creature | Origin$ Hand | Destination$ Battlefield | GainControl$ True | Tapped$ True | Attacking$ DefendingPlayer,Valid Planeswalker.ControlledBy DefendingPlayer | RememberChanged$ True | SubAbility$ DBDelayTrig
|
SVar:TrigBorrow:DB$ ChangeZone | ChangeNum$ 1 | DefinedPlayer$ TriggeredDefendingPlayer | Chooser$ You | ChangeType$ Creature | Origin$ Hand | Destination$ Battlefield | GainControl$ True | Tapped$ True | Attacking$ DefendingPlayer & Valid Planeswalker.ControlledBy DefendingPlayer | RememberChanged$ True | SubAbility$ DBDelayTrig
|
||||||
SVar:DBDelayTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | RememberObjects$ RememberedLKI | Execute$ DBChange | StackDescription$ None | SubAbility$ DBCleanup | TriggerDescription$ Return that creature to its owner's hand at the beginning of the next end step.
|
SVar:DBDelayTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | RememberObjects$ RememberedLKI | Execute$ DBChange | StackDescription$ None | SubAbility$ DBCleanup | TriggerDescription$ Return that creature to its owner's hand at the beginning of the next end step.
|
||||||
SVar:DBChange:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Battlefield | Destination$ Hand
|
SVar:DBChange:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Battlefield | Destination$ Hand
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
|
|||||||
Reference in New Issue
Block a user