mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Refactor skip phase/step using replacement effect. Also add Fasting.
This commit is contained in:
@@ -152,6 +152,7 @@ public enum SpellApiToAi {
|
||||
.put(ApiType.SetLife, LifeSetAi.class)
|
||||
.put(ApiType.SetState, SetStateAi.class)
|
||||
.put(ApiType.Shuffle, ShuffleAi.class)
|
||||
.put(ApiType.SkipPhase, SkipPhaseAi.class)
|
||||
.put(ApiType.SkipTurn, SkipTurnAi.class)
|
||||
.put(ApiType.StoreSVar, StoreSVarAi.class)
|
||||
.put(ApiType.Subgame, AlwaysPlayAi.class)
|
||||
|
||||
@@ -159,10 +159,10 @@ public class ChooseGenericEffectAi extends SpellAbilityAi {
|
||||
}
|
||||
}
|
||||
// FatespinnerSkipDraw,FatespinnerSkipMain,FatespinnerSkipCombat
|
||||
if (player.hasKeyword("Skip your draw step.")) {
|
||||
if (game.getReplacementHandler().wouldPhaseBeSkipped(player, "Draw")) {
|
||||
return skipDraw;
|
||||
}
|
||||
if (player.hasKeyword("Skip your next combat phase.")) {
|
||||
if (game.getReplacementHandler().wouldPhaseBeSkipped(player, "BeginCombat")) {
|
||||
return skipCombat;
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ public class PermanentCreatureAi extends PermanentAi {
|
||||
if (sa.isDash()) {
|
||||
//only checks that the dashed creature will attack
|
||||
if (ph.isPlayerTurn(ai) && ph.getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) {
|
||||
if (ai.hasKeyword("Skip your next combat phase."))
|
||||
if (game.getReplacementHandler().wouldPhaseBeSkipped(ai, "BeginCombat"))
|
||||
return false;
|
||||
if (ComputerUtilCost.canPayCost(sa.getHostCard().getSpellPermanent(), ai)) {
|
||||
//do not dash if creature can be played normally
|
||||
@@ -77,7 +77,7 @@ public class PermanentCreatureAi extends PermanentAi {
|
||||
// after attacking
|
||||
if (card.hasSVar("EndOfTurnLeavePlay")
|
||||
&& (!ph.isPlayerTurn(ai) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)
|
||||
|| ai.hasKeyword("Skip your next combat phase."))) {
|
||||
|| game.getReplacementHandler().wouldPhaseBeSkipped(ai, "BeginCombat"))) {
|
||||
// AiPlayDecision.AnotherTime
|
||||
return false;
|
||||
}
|
||||
|
||||
23
forge-ai/src/main/java/forge/ai/ability/SkipPhaseAi.java
Normal file
23
forge-ai/src/main/java/forge/ai/ability/SkipPhaseAi.java
Normal file
@@ -0,0 +1,23 @@
|
||||
package forge.ai.ability;
|
||||
|
||||
import forge.ai.SpellAbilityAi;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerActionConfirmMode;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
public class SkipPhaseAi extends SpellAbilityAi {
|
||||
@Override
|
||||
protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) {
|
||||
return mandatory || canPlayAI(aiPlayer, sa);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -153,6 +153,7 @@ public enum ApiType {
|
||||
SetLife (LifeSetEffect.class),
|
||||
SetState (SetStateEffect.class),
|
||||
Shuffle (ShuffleEffect.class),
|
||||
SkipPhase (SkipPhaseEffect.class),
|
||||
SkipTurn (SkipTurnEffect.class),
|
||||
StoreSVar (StoreSVarEffect.class),
|
||||
Subgame (SubgameEffect.class),
|
||||
|
||||
@@ -57,6 +57,7 @@ public class AddTurnEffect extends SpellAbilityEffect {
|
||||
}
|
||||
if (sa.hasParam("SkipUntap")) {
|
||||
extra.setSkipUntap(true);
|
||||
extra.setSkipUntapSA(sa);
|
||||
}
|
||||
if (sa.hasParam("NoSchemes")) {
|
||||
extra.setCantSetSchemesInMotion(true);
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.replacement.ReplacementEffect;
|
||||
import forge.game.replacement.ReplacementHandler;
|
||||
import forge.game.replacement.ReplacementLayer;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
public class SkipPhaseEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final String duration = sa.getParam("Duration");
|
||||
final String phase = sa.getParam("Phase");
|
||||
final String step = sa.getParam("Step");
|
||||
|
||||
List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
for (final Player player : tgtPlayers) {
|
||||
sb.append(player).append(" ");
|
||||
sb.append("skips their ");
|
||||
if (duration == null) {
|
||||
sb.append("next ");
|
||||
}
|
||||
if (phase != null) {
|
||||
sb.append(phase.toLowerCase()).append(" phase.");
|
||||
} else {
|
||||
sb.append(step.toLowerCase()).append(" step.");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
final String duration = sa.getParam("Duration");
|
||||
final String phase = sa.getParam("Phase");
|
||||
final String step = sa.getParam("Step");
|
||||
|
||||
List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
for (final Player player : tgtPlayers) {
|
||||
createSkipPhaseEffect(sa, player, duration, phase, step);
|
||||
}
|
||||
}
|
||||
|
||||
public static void createSkipPhaseEffect(SpellAbility sa, final Player player,
|
||||
final String duration, final String phase, final String step) {
|
||||
final Card hostCard = sa.getHostCard();
|
||||
final Game game = hostCard.getGame();
|
||||
final String name = hostCard.getName() + "'s Effect";
|
||||
final String image = hostCard.getImageKey();
|
||||
final boolean isNextThisTurn = duration != null && duration.equals("NextThisTurn");
|
||||
|
||||
final Card eff = createEffect(sa, player, name, image);
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append("Event$ BeginPhase | ActiveZones$ Command | ValidPlayer$ You | Phase$ ");
|
||||
sb.append(phase != null ? phase : step);
|
||||
if (duration != null && !isNextThisTurn) {
|
||||
sb.append(" | Skip$ True");
|
||||
}
|
||||
sb.append("| Description$ Skip ");
|
||||
if (duration == null || isNextThisTurn) {
|
||||
sb.append("your next ");
|
||||
} else {
|
||||
sb.append("each ");
|
||||
}
|
||||
if (phase != null) {
|
||||
sb.append(phase.toLowerCase()).append(" phase");
|
||||
} else {
|
||||
sb.append(step.toLowerCase()).append(" step");
|
||||
}
|
||||
if (duration == null) {
|
||||
sb.append(".");
|
||||
} else {
|
||||
if (game.getPhaseHandler().getPlayerTurn().equals(player)) {
|
||||
sb.append(" of this turn.");
|
||||
} else {
|
||||
sb.append(" of your next turn.");
|
||||
}
|
||||
}
|
||||
|
||||
final String repeffstr = sb.toString();
|
||||
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, eff, true);
|
||||
// Set to layer to Control so it will be applied before "would begin your X phase/step" replacement effects
|
||||
// (Any layer before Other is OK, since default layer is Other.)
|
||||
re.setLayer(ReplacementLayer.Control);
|
||||
if (duration == null || isNextThisTurn) {
|
||||
String exilestr = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile";
|
||||
SpellAbility exile = AbilityFactory.getAbility(exilestr, eff);
|
||||
re.setOverridingAbility(exile);
|
||||
}
|
||||
if (duration != null) {
|
||||
final GameCommand endEffect = new GameCommand() {
|
||||
private static final long serialVersionUID = -5861759814760561373L;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
game.getAction().exile(eff, null);
|
||||
}
|
||||
};
|
||||
|
||||
if (duration.equals("EndOfTurn") || isNextThisTurn) {
|
||||
game.getEndOfTurn().addUntil(endEffect);
|
||||
} else if (duration.equals("UntilTheEndOfYourNextTurn")) {
|
||||
game.getEndOfTurn().addUntilEnd(player, endEffect);
|
||||
}
|
||||
}
|
||||
eff.addReplacementEffect(re);
|
||||
eff.updateStateForView();
|
||||
|
||||
game.getTriggerHandler().suppressMode(TriggerType.ChangesZone);
|
||||
game.getAction().moveTo(ZoneType.Command, eff, sa);
|
||||
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
|
||||
}
|
||||
}
|
||||
@@ -54,7 +54,9 @@ public class SkipTurnEffect extends SpellAbilityEffect {
|
||||
calcTurn.setSubAbility((AbilitySub) AbilityFactory.getAbility(exile, eff));
|
||||
|
||||
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, eff, true);
|
||||
re.setLayer(ReplacementLayer.Other);
|
||||
// Set to layer to Control so it will be applied before "would begin your turn" replacement effects
|
||||
// (Any layer before Other is OK, since default layer is Other.)
|
||||
re.setLayer(ReplacementLayer.Control);
|
||||
re.setOverridingAbility(calcTurn);
|
||||
eff.addReplacementEffect(re);
|
||||
eff.updateStateForView();
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.Trigger;
|
||||
|
||||
/**
|
||||
@@ -38,6 +39,7 @@ public class ExtraTurn {
|
||||
private Player player = null;
|
||||
private List<Trigger> delTrig = Collections.synchronizedList(new ArrayList<>());
|
||||
private boolean skipUntap = false;
|
||||
private SpellAbility skipUntapSA;
|
||||
private boolean cantSetSchemesInMotion = false;
|
||||
/**
|
||||
* TODO: Write javadoc for Constructor.
|
||||
@@ -89,6 +91,20 @@ public class ExtraTurn {
|
||||
this.skipUntap = skipUntap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the skipUntapSA;
|
||||
*/
|
||||
public SpellAbility getSkipUntapSA() {
|
||||
return skipUntapSA;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param skipUntapSA the skipUntapSA to set
|
||||
*/
|
||||
public void setSkipUntapSA(SpellAbility skipUntapSA) {
|
||||
this.skipUntapSA = skipUntapSA;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if Schemes can't be played during the extra turn
|
||||
*/
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.google.common.collect.Multimap;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.game.*;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.effects.SkipPhaseEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardLists;
|
||||
@@ -166,6 +167,21 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
turnEnded = PhaseType.isLast(phase, isTopsy);
|
||||
setPhase(PhaseType.getNext(phase, isTopsy));
|
||||
}
|
||||
|
||||
// Replacement effects
|
||||
final Map<AbilityKey, Object> repRunParams = AbilityKey.mapFromAffected(playerTurn);
|
||||
repRunParams.put(AbilityKey.Phase, phase.nameForScripts);
|
||||
ReplacementResult repres = game.getReplacementHandler().run(ReplacementType.BeginPhase, repRunParams);
|
||||
if (repres != ReplacementResult.NotReplaced) {
|
||||
// Currently there is no effect to skip entire beginning phase
|
||||
// If in the future that kind of effect is added, need to handle it too.
|
||||
// Handle skipping of entire combat phase
|
||||
if (phase == PhaseType.COMBAT_BEGIN) {
|
||||
setPhase(PhaseType.COMBAT_END);
|
||||
}
|
||||
advanceToNextPhase();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
game.getStack().clearUndoStack(); //can't undo action from previous phase
|
||||
@@ -197,30 +213,19 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
}
|
||||
|
||||
private boolean isSkippingPhase(final PhaseType phase) {
|
||||
// TODO: Refactor this method to replacement effect
|
||||
switch (phase) {
|
||||
case UNTAP:
|
||||
if (playerTurn.hasKeyword("Skip your next untap step.")) {
|
||||
playerTurn.removeKeyword("Skip your next untap step.", false); // Skipping your "next" untap step is cumulative.
|
||||
return true;
|
||||
}
|
||||
return playerTurn.hasKeyword("Skip the untap step of this turn.") || playerTurn.hasKeyword("Skip your untap step.");
|
||||
|
||||
case UPKEEP:
|
||||
return playerTurn.hasKeyword("Skip your upkeep step.");
|
||||
|
||||
case DRAW:
|
||||
return playerTurn.isSkippingDraw() || turn == 1 && game.getPlayers().size() == 2;
|
||||
|
||||
case MAIN1:
|
||||
case MAIN2:
|
||||
return playerTurn.isSkippingMain();
|
||||
return turn == 1 && game.getPlayers().size() == 2;
|
||||
|
||||
case COMBAT_BEGIN:
|
||||
case COMBAT_DECLARE_ATTACKERS:
|
||||
return playerTurn.isSkippingCombat();
|
||||
|
||||
case COMBAT_DECLARE_BLOCKERS:
|
||||
if (combat != null && combat.getAttackers().isEmpty()) {
|
||||
endCombat();
|
||||
}
|
||||
// Fall through
|
||||
case COMBAT_FIRST_STRIKE_DAMAGE:
|
||||
case COMBAT_DAMAGE:
|
||||
return !inCombat();
|
||||
@@ -237,9 +242,6 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
if (isSkippingPhase(phase)) {
|
||||
skipped = true;
|
||||
givePriorityToPlayer = false;
|
||||
if (phase == PhaseType.COMBAT_DECLARE_ATTACKERS) {
|
||||
playerTurn.removeKeyword("Skip your next combat phase.");
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Perform turn-based actions
|
||||
@@ -289,11 +291,6 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
declareAttackersTurnBasedAction();
|
||||
game.getStack().unfreezeStack();
|
||||
|
||||
if (combat != null && combat.getAttackers().isEmpty()
|
||||
&& !game.getTriggerHandler().hasDelayedTriggers()) {
|
||||
endCombat();
|
||||
}
|
||||
|
||||
if (combat != null) {
|
||||
for (Card c : combat.getAttackers()) {
|
||||
if (combat.getDefenderByAttacker(c) instanceof Player) {
|
||||
@@ -408,7 +405,6 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
player.clearAssignedDamage();
|
||||
}
|
||||
|
||||
playerTurn.removeKeyword("Skip all combat phases of this turn.");
|
||||
nUpkeepsThisTurn = 0;
|
||||
nMain1sThisTurn = 0;
|
||||
game.getStack().resetMaxDistinctSources();
|
||||
@@ -861,7 +857,7 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
game.getTriggerHandler().registerThisTurnDelayedTrigger(deltrig);
|
||||
}
|
||||
if (extraTurn.isSkipUntap()) {
|
||||
nextPlayer.addKeyword("Skip the untap step of this turn.");
|
||||
SkipPhaseEffect.createSkipPhaseEffect(extraTurn.getSkipUntapSA(), nextPlayer, null, null, "Untap");
|
||||
}
|
||||
if (extraTurn.isCantSetSchemesInMotion()) {
|
||||
nextPlayer.addKeyword("Schemes can't be set in motion this turn.");
|
||||
|
||||
@@ -2698,28 +2698,9 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
if (hasLost()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (hasKeyword("Skip your next combat phase.")) {
|
||||
return true;
|
||||
}
|
||||
if (hasKeyword("Skip your combat phase.")) {
|
||||
return true;
|
||||
}
|
||||
if (hasKeyword("Skip all combat phases of your next turn.")) {
|
||||
replaceAllKeywordInstances("Skip all combat phases of your next turn.",
|
||||
"Skip all combat phases of this turn.");
|
||||
return true;
|
||||
}
|
||||
if (hasKeyword("Skip all combat phases of this turn.")) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isSkippingMain() {
|
||||
return hasKeyword("Skip your main phase.");
|
||||
}
|
||||
|
||||
public int getStartingHandSize() {
|
||||
return startingHandSize;
|
||||
}
|
||||
@@ -2829,17 +2810,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isSkippingDraw() {
|
||||
if (hasKeyword("Skip your next draw step.")) {
|
||||
removeKeyword("Skip your next draw step.");
|
||||
return true;
|
||||
}
|
||||
if (hasKeyword("Skip your draw step.")) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public CardCollectionView getInboundTokens() {
|
||||
return inboundTokens;
|
||||
}
|
||||
@@ -3393,7 +3363,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
setLibrarySearched(0);
|
||||
setNumManaConversion(0);
|
||||
|
||||
removeKeyword("Skip the untap step of this turn.");
|
||||
removeKeyword("Schemes can't be set in motion this turn.");
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package forge.game.replacement;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class ReplaceBeginPhase extends ReplacementEffect {
|
||||
|
||||
public ReplaceBeginPhase(final Map<String, String> mapParams, final Card host, final boolean intrinsic) {
|
||||
super(mapParams, host, intrinsic);
|
||||
// set default layer to control
|
||||
if (!mapParams.containsKey("Layer")) {
|
||||
this.setLayer(ReplacementLayer.Control);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canReplace(Map<AbilityKey, Object> runParams) {
|
||||
Player affected = (Player) runParams.get(AbilityKey.Affected);
|
||||
if (!matchesValidParam("ValidPlayer", affected)) {
|
||||
return false;
|
||||
}
|
||||
if (hasParam("Phase")) {
|
||||
final String phase = getParam("Phase");
|
||||
final String currentPhase = (String) runParams.get(AbilityKey.Phase);
|
||||
if (phase.equals("Combat") && currentPhase.equals("BeginCombat")) {
|
||||
return true;
|
||||
}
|
||||
if (phase.equals("Main") && (currentPhase.equals("Main1") || currentPhase.equals("Main2"))) {
|
||||
return true;
|
||||
}
|
||||
if (!phase.equals(currentPhase)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (hasParam("Condition")) {
|
||||
if (getParam("Condition").equals("Hellbent") && !affected.hasHellbent()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setReplacingObjects(Map<AbilityKey, Object> runParams, SpellAbility sa) {
|
||||
sa.setReplacingObject(AbilityKey.Player, runParams.get(AbilityKey.Affected));
|
||||
}
|
||||
}
|
||||
@@ -420,4 +420,17 @@ public class ReplacementHandler {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to check if a phase would be skipped for AI.
|
||||
*/
|
||||
public boolean wouldPhaseBeSkipped(final Player player, final String phase) {
|
||||
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(player);
|
||||
repParams.put(AbilityKey.Phase, phase);
|
||||
List<ReplacementEffect> list = getReplacementList(ReplacementType.BeginPhase, repParams, ReplacementLayer.Control);
|
||||
if (!list.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ public enum ReplacementType {
|
||||
AddCounter(ReplaceAddCounter.class),
|
||||
AssignDealDamage(ReplaceAssignDealDamage.class),
|
||||
Attached(ReplaceAttached.class),
|
||||
BeginPhase(ReplaceBeginPhase.class),
|
||||
BeginTurn(ReplaceBeginTurn.class),
|
||||
Counter(ReplaceCounter.class),
|
||||
CopySpell(ReplaceCopySpell.class),
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:3 U
|
||||
Types:Creature Jellyfish
|
||||
PT:2/2
|
||||
K:Flying
|
||||
A:AB$ Pump | Cost$ 0 | Defined$ Self | NumAtt$ 2 | NumDef$ 2 | ActivationLimit$ 1 | SubAbility$ DBSkipTurn | SpellDescription$ CARDNAME gets +2/+2 until end of turn. You skip your next untap step. Activate this ability only once each turn.
|
||||
SVar:DBSkipTurn:DB$ Pump | Defined$ You | KW$ Skip your next untap step. | Permanent$ True
|
||||
A:AB$ Pump | Cost$ 0 | Defined$ Self | NumAtt$ 2 | NumDef$ 2 | ActivationLimit$ 1 | SubAbility$ DBSkipPhase | SpellDescription$ CARDNAME gets +2/+2 until end of turn. You skip your next untap step. Activate this ability only once each turn.
|
||||
SVar:DBSkipPhase:DB$ SkipPhase | Defined$ You | Step$ Untap
|
||||
AI:RemoveDeck:All
|
||||
Oracle:Flying\n{0}: Avizoa gets +2/+2 until end of turn. You skip your next untap step. Activate this ability only once each turn.
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:3 W W
|
||||
Types:Creature Angel
|
||||
PT:2/4
|
||||
K:Flying
|
||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player skips their next combat phase.
|
||||
SVar:TrigPump:DB$ Pump | Defined$ TriggeredTarget | KW$ Skip your next combat phase. | Permanent$ True
|
||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigSkipCombat | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player skips their next combat phase.
|
||||
SVar:TrigSkipCombat:DB$ SkipPhase | Defined$ TriggeredTarget | Phase$ Combat
|
||||
Oracle:Flying (This creature can't be blocked except by creatures with flying or reach.)\nWhenever Blinding Angel deals combat damage to a player, that player skips their next combat phase.
|
||||
|
||||
@@ -3,7 +3,6 @@ ManaCost:4 U U
|
||||
Types:Creature Elemental
|
||||
PT:5/4
|
||||
K:Morph:5 U U
|
||||
T:Mode$ TurnFaceUp | ValidCard$ Card.Self | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME is turned face up, each opponent skips their next untap step.
|
||||
SVar:TrigPump:DB$ Pump | Defined$ Player.Opponent | KW$ Skip your next untap step. | Permanent$ True
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/brine_elemental.jpg
|
||||
T:Mode$ TurnFaceUp | ValidCard$ Card.Self | Execute$ TrigSkipUntap | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME is turned face up, each opponent skips their next untap step.
|
||||
SVar:TrigSkipUntap:DB$ SkipPhase | Defined$ Player.Opponent | Step$ Untap
|
||||
Oracle:Morph {5}{U}{U} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)\nWhen Brine Elemental is turned face up, each opponent skips their next untap step.
|
||||
|
||||
@@ -4,12 +4,11 @@ Types:Enchantment
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile the top seven cards of your library face down. You may look at the cards exiled with CARDNAME, and you may play lands and cast spells from among those cards.
|
||||
SVar:TrigExile:DB$ Dig | Defined$ You | DigNum$ 7 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | ExileFaceDown$ True | NoReveal$ True
|
||||
S:Mode$ Continuous | Affected$ Card.IsRemembered+ExiledWithSource | AffectedZone$ Exile | MayPlay$ True | MayLookAt$ You | Description$ You may look at the cards exiled with CARDNAME, and you may play lands and cast spells from among those cards.
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
S:Mode$ CantBeCast | ValidCard$ Card | Caster$ You | NumLimitEachTurn$ 1 | Description$ You can't cast more than one spell each turn.
|
||||
T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered+ExiledWithSource | Execute$ DBForget
|
||||
SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
AI:RemoveDeck:All
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/colfenors_plans.jpg
|
||||
Oracle:When Colfenor's Plans enters the battlefield, exile the top seven cards of your library face down.\nYou may look at the cards exiled with Colfenor's Plans, and you may play lands and cast spells from among those cards.\nSkip your draw step.\nYou can't cast more than one spell each turn.
|
||||
|
||||
@@ -3,10 +3,9 @@ ManaCost:4 G U B
|
||||
Types:Legendary Creature Gorgon Wizard
|
||||
PT:4/4
|
||||
K:Deathtouch
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ LT7 | Execute$ TrigDraw | TriggerDescription$ At the beginning of your upkeep, if you have fewer than seven cards in hand, draw cards equal to the difference.
|
||||
SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ Difference
|
||||
SVar:X:Count$InYourHand
|
||||
SVar:Difference:Number$7/Minus.X
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/damia_sage_of_stone.jpg
|
||||
Oracle:Deathtouch\nSkip your draw step.\nAt the beginning of your upkeep, if you have fewer than seven cards in hand, draw cards equal to the difference.
|
||||
|
||||
@@ -7,5 +7,5 @@ SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1
|
||||
A:AB$ Tap | Cost$ SubCounter<1/LOYALTY> | ValidTgts$ Creature | TgtPrompt$ Choose target creature to tap. | Planeswalker$ True | SubAbility$ DovinPump | SpellDescription$ Tap target creature. It doesn't untap during its controller's next untap step.
|
||||
SVar:DovinPump:DB$ Pump | Defined$ Targeted | Permanent$ True | KW$ HIDDEN This card doesn't untap during your next untap step.
|
||||
A:AB$ TapAll | Cost$ SubCounter<9/LOYALTY> | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | ValidCards$ Permanent | Planeswalker$ True | Ultimate$ True | SubAbility$ NoUntap | SpellDescription$ Tap all permanents target opponent controls. That player skips their next untap step.
|
||||
SVar:NoUntap:DB$ Pump | Defined$ TargetedPlayer | IsCurse$ True | KW$ Skip your next untap step. | Permanent$ True
|
||||
SVar:NoUntap:DB$ SkipPhase | Defined$ TargetedPlayer | Step$ Untap | IsCurse$ True
|
||||
Oracle:[+1]: You gain 2 life and draw a card.\n[−1]: Tap target creature. It doesn't untap during its controller's next untap step.\n[−9]: Tap all permanents target opponent controls. That player skips their next untap step.
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
Name:Dragon Appeasement
|
||||
ManaCost:3 B R G
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
T:Mode$ Sacrificed | ValidCard$ Creature.YouCtrl | Execute$ TrigDrawCard | OptionalDecider$ You | TriggerZones$ Battlefield | TriggerDescription$ Whenever you sacrifice a creature, you may draw a card.
|
||||
SVar:TrigDrawCard:DB$Draw | Defined$ You | NumCards$ 1
|
||||
AI:RemoveDeck:Random
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/dragon_appeasement.jpg
|
||||
Oracle:Skip your draw step.\nWhenever you sacrifice a creature, you may draw a card.
|
||||
|
||||
@@ -3,8 +3,6 @@ ManaCost:1 G
|
||||
Types:Enchantment
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigChange | TriggerDescription$ At the beginning of your upkeep, you may search your library for a basic land card, reveal that card, and put it into your hand. If you do, you skip your draw step this turn and shuffle your library.
|
||||
SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBSkipDraw | ShuffleNonMandatory$ True
|
||||
SVar:DBSkipDraw:DB$ Effect | Name$ Elfhame Sanctuary Effect | Defined$ You | StaticAbilities$ SkipDraw
|
||||
SVar:SkipDraw:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | EffectZone$ Command | Description$ Skip your draw step.
|
||||
SVar:DBSkipDraw:DB$ SkipPhase | Defined$ You | Step$ Draw | Duration$ EndOfTurn
|
||||
AI:RemoveDeck:All
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/elfhame_sanctuary.jpg
|
||||
Oracle:At the beginning of your upkeep, you may search your library for a basic land card, reveal that card, and put it into your hand. If you do, you skip your draw step this turn and shuffle your library.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
Name:Empty City Ruse
|
||||
ManaCost:W
|
||||
Types:Sorcery
|
||||
A:SP$ Pump | Cost$ W | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | KW$ Skip all combat phases of your next turn. | Permanent$ True | SpellDescription$ Target opponent skips all combat phases of their next turn.
|
||||
A:SP$ SkipPhase | Cost$ W | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Phase$ Combat | Duration$ UntilTheEndOfYourNextTurn | SpellDescription$ Target opponent skips all combat phases of their next turn.
|
||||
AI:RemoveDeck:All
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/empty_city_ruse.jpg
|
||||
Oracle:Target opponent skips all combat phases of their next turn.
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
Name:Eon Hub
|
||||
ManaCost:5
|
||||
Types:Artifact
|
||||
S:Mode$ Continuous | Affected$ Player | AddKeyword$ Skip your upkeep step. | Description$ Players skip their upkeep steps.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | Phase$ Upkeep | Skip$ True | Description$ Players skip their upkeep steps.
|
||||
SVar:NonStackingEffect:True
|
||||
AI:RemoveDeck:Random
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/eon_hub.jpg
|
||||
Oracle:Players skip their upkeep steps.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
Name:False Peace
|
||||
ManaCost:W
|
||||
Types:Sorcery
|
||||
A:SP$ Pump | Cost$ W | ValidTgts$ Player | TgtPrompt$ Select target player | KW$ Skip all combat phases of your next turn. | Permanent$ True | SpellDescription$ Target player skips all combat phases of their next turn.
|
||||
A:SP$ SkipPhase | Cost$ W | ValidTgts$ Player | TgtPrompt$ Select target player | Phase$ Combat | Duration$ UntilTheEndOfYourNextTurn | SpellDescription$ Target player skips all combat phases of their next turn.
|
||||
AI:RemoveDeck:All
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/false_peace.jpg
|
||||
Oracle:Target player skips all combat phases of their next turn.
|
||||
|
||||
13
forge-gui/res/cardsfolder/f/fasting.txt
Normal file
13
forge-gui/res/cardsfolder/f/fasting.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
Name:Fasting
|
||||
ManaCost:W
|
||||
Types:Enchantment
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutHunger | TriggerDescription$ At the beginning of your upkeep, put a hunger counter on CARDNAME. Then destroy CARDNAME if it has five or more hunger counters on it.
|
||||
SVar:TrigPutHunger:DB$ PutCounter | Defined$ Self | CounterType$ HUNGER | CounterNum$ 1 | SubAbility$ DBDestroyHunger
|
||||
SVar:DBDestroyHunger:DB$ Destroy | Defined$ Self | ConditionDefined$ Self | ConditionPresent$ Card.counters_GE5_HUNGER
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Layer$ Other | Optional$ True | ReplaceWith$ DBGainLife | Description$ If you would begin your draw step, you may skip that step instead. If you do, you gain 2 life.
|
||||
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2
|
||||
T:Mode$ Drawn | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ DBDestroySelf | TriggerDescription$ When you draw a card, destroy CARDNAME.
|
||||
SVar:DBDestroySelf:DB$ Destroy | Defined$ Self
|
||||
AI:RemoveDeck:All
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:At the beginning of your upkeep, put a hunger counter on Fasting. Then destroy Fasting if it has five or more hunger counters on it.\nIf you would begin your draw step, you may skip that step instead. If you do, you gain 2 life.\nWhen you draw a card, destroy Fasting.
|
||||
@@ -3,9 +3,8 @@ ManaCost:1 U U
|
||||
Types:Creature Human Wizard
|
||||
PT:1/2
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Opponent | Execute$ TrigSkipPhase | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each opponent's upkeep, that player chooses draw step, main phase, or combat phase. The player skips each instance of the chosen step or phase this turn.
|
||||
SVar:TrigSkipPhase:DB$ GenericChoice | Defined$ TriggeredPlayer | Choices$ FatespinnerSkipDraw,FatespinnerSkipMain,FatespinnerSkipCombat | ShowChoice$ True | AILogic$ Random
|
||||
SVar:FatespinnerSkipDraw:DB$ Pump | Defined$ TriggeredPlayer | KW$ Skip your draw step. | SpellDescription$ Draw step
|
||||
SVar:FatespinnerSkipMain:DB$ Pump | Defined$ TriggeredPlayer | KW$ Skip your main phase. | SpellDescription$ Main phase
|
||||
SVar:FatespinnerSkipCombat:DB$ Pump | Defined$ TriggeredPlayer | KW$ Skip your combat phase. | SpellDescription$ Combat phase
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/fatespinner.jpg
|
||||
SVar:TrigSkipPhase:DB$ GenericChoice | Defined$ TriggeredPlayer | Choices$ FatespinnerSkipDraw,FatespinnerSkipMain,FatespinnerSkipCombat | ShowChoice$ ExceptSelf | AILogic$ Random
|
||||
SVar:FatespinnerSkipDraw:DB$ SkipPhase | Defined$ TriggeredPlayer | Step$ Draw | Duration$ EndOfTurn | SpellDescription$ Draw step
|
||||
SVar:FatespinnerSkipMain:DB$ SkipPhase | Defined$ TriggeredPlayer | Phase$ Main | Duration$ EndOfTurn | SpellDescription$ Main phase
|
||||
SVar:FatespinnerSkipCombat:DB$ SkipPhase | Defined$ TriggeredPlayer | Phase$ Combat | Duration$ EndOfTurn | SpellDescription$ Combat phase
|
||||
Oracle:At the beginning of each opponent's upkeep, that player chooses draw step, main phase, or combat phase. The player skips each instance of the chosen step or phase this turn.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
Name:Fatigue
|
||||
ManaCost:1 U
|
||||
Types:Sorcery
|
||||
A:SP$ Pump | Cost$ 1 U | ValidTgts$ Player | TgtPrompt$ Select target player | KW$ Skip your next draw step. | Permanent$ True | SpellDescription$ Target player skips their next draw step.
|
||||
A:SP$ SkipPhase | Cost$ 1 U | ValidTgts$ Player | TgtPrompt$ Select target player | Step$ Draw | SpellDescription$ Target player skips their next draw step.
|
||||
AI:RemoveDeck:All
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/fatigue.jpg
|
||||
Oracle:Target player skips their next draw step.
|
||||
|
||||
@@ -2,10 +2,9 @@ Name:Gibbering Descent
|
||||
ManaCost:4 B B
|
||||
Types:Enchantment
|
||||
K:Madness:2 B B
|
||||
S:Mode$ Continuous | Affected$ You | Condition$ Hellbent | AddKeyword$ Skip your upkeep step. | Description$ Hellbent — Skip your upkeep step if you have no cards in hand.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Upkeep | Skip$ True | Condition$ Hellbent | Description$ Hellbent — Skip your upkeep step if you have no cards in hand.
|
||||
T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigLoseLifeDiscard | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player loses 1 life and discards a card.
|
||||
SVar:TrigLoseLifeDiscard:DB$LoseLife | Defined$ TriggeredPlayer | LifeAmount$ 1 | SubAbility$ DBDiscard
|
||||
SVar:DBDiscard:DB$Discard | Defined$ TriggeredPlayer | NumCards$ 1 | Mode$ TgtChoose
|
||||
AI:RemoveDeck:All
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/gibbering_descent.jpg
|
||||
Oracle:At the beginning of each player's upkeep, that player loses 1 life and discards a card.\nHellbent — Skip your upkeep step if you have no cards in hand.\nMadness {2}{B}{B} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.)
|
||||
@@ -4,7 +4,7 @@ Types:Creature Gargoyle
|
||||
PT:2/2
|
||||
K:Flying
|
||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigSkipDraw | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, return it to the battlefield under its owner's control at the beginning of the next end step and you skip your next draw step.
|
||||
SVar:TrigSkipDraw:DB$ Pump | Defined$ TriggeredCardController | KW$ Skip your next draw step. | Permanent$ True | SubAbility$ TrigDelay
|
||||
SVar:TrigSkipDraw:DB$ SkipPhase | Defined$ TriggeredCardController | Step$ Draw | SubAbility$ TrigDelay
|
||||
SVar:TrigDelay:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ TriggeredNewCardLKICopy | TriggerDescription$ Return CARDNAME to the battlefield.
|
||||
SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Graveyard | Destination$ Battlefield
|
||||
A:AB$ ChangeZone | Cost$ 4 W | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile CARDNAME.
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Creature Phoenix
|
||||
PT:2/2
|
||||
K:Flying
|
||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigSkipDraw | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, return it to the battlefield under its owner's control at the beginning of the next end step and you skip your next draw step.
|
||||
SVar:TrigSkipDraw:DB$ Pump | Defined$ TriggeredCardController | KW$ Skip your next draw step. | Permanent$ True | SubAbility$ TrigDelay
|
||||
SVar:TrigSkipDraw:DB$ SkipPhase | Defined$ TriggeredCardController | Step$ Draw | SubAbility$ TrigDelay
|
||||
SVar:TrigDelay:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ TriggeredNewCardLKICopy | TriggerDescription$ Return CARDNAME to the battlefield.
|
||||
SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Graveyard | Destination$ Battlefield
|
||||
A:AB$ ChangeZone | Cost$ 4 R | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile CARDNAME.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
Name:Moment of Silence
|
||||
ManaCost:W
|
||||
Types:Instant
|
||||
A:SP$ Pump | Cost$ W | ValidTgts$ Player | TgtPrompt$ Select target player | KW$ Skip your next combat phase. | SpellDescription$ Target player skips their next combat phase this turn.
|
||||
A:SP$ SkipPhase | Cost$ W | ValidTgts$ Player | TgtPrompt$ Select target player | Phase$ Combat | Duration$ NextThisTurn | SpellDescription$ Target player skips their next combat phase this turn.
|
||||
AI:RemoveDeck:All
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/moment_of_silence.jpg
|
||||
Oracle:Target player skips their next combat phase this turn.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Necropotence
|
||||
ManaCost:B B B
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
T:Mode$ Discarded | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ Whenever you discard a card, exile that card from your graveyard.
|
||||
SVar:TrigChange:DB$ ChangeZone | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Exile
|
||||
A:AB$ ChangeZone | Cost$ PayLife<1> | Defined$ TopOfLibrary | Origin$ Library | Destination$ Exile | ExileFaceDown$ True | RememberChanged$ True | SubAbility$ DelayedReturn | AILogic$ Necropotence | AILifeThreshold$ 1 | SpellDescription$ Exile the top card of your library face down. Put that card into your hand at the beginning of your next end step.
|
||||
|
||||
@@ -2,13 +2,12 @@ Name:Necropotence Avatar
|
||||
ManaCost:no cost
|
||||
Types:Vanguard
|
||||
HandLifeModifier:+0/+4
|
||||
S:Mode$ Continuous | Affected$ You | EffectZone$ Command | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Command | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
T:Mode$ Phase | Phase$ End Of Turn | ValidPlayer$ You | TriggerZones$ Command | CheckSVar$ Turns | SVarCompare$ GT1 | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your end step, if it's not the first turn of the game, put a death counter on Necropotence Avatar. You draw X cards and you lose X life, where X is the number of death counters on Necropotence Avatar.
|
||||
SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ DEATH | CounterNum$ 1 | SubAbility$ TrigDraw
|
||||
SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ X | SubAbility$ DBLoseLife
|
||||
SVar:DBLoseLife:DB$LoseLife | Defined$ You | LifeAmount$ X
|
||||
SVar:X:Count$CardCounters.DEATH
|
||||
SVar:Turns:Count$TotalTurns
|
||||
SVar:Picture:https://downloads.cardforge.org/images/cards/VAN/Necropotence Avatar.full.jpg
|
||||
AI:RemoveDeck:All
|
||||
Oracle:Hand +0, life +4\nSkip your draw step.\nAt the beginning of your end step, if it's not the first turn of the game, put a death counter on Necropotence Avatar. You draw X cards and you lose X life, where X is the number of death counters on Necropotence Avatar.
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
Name:Null Profusion
|
||||
ManaCost:4 B B
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
S:Mode$ Continuous | Affected$ You | SetMaxHandSize$ 2 | Description$ Your maximum hand size is 2.
|
||||
T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever you play a card, draw a card.
|
||||
T:Mode$ LandPlayed | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | Secondary$ True | TriggerDescription$ Whenever you play a card, draw a card.
|
||||
SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1
|
||||
AI:RemoveDeck:Random
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/null_profusion.jpg
|
||||
Oracle:Skip your draw step.\nWhenever you play a card, draw a card.\nYour maximum hand size is two.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:2 U U
|
||||
Types:Enchantment Aura
|
||||
K:Enchant opponent
|
||||
A:SP$ Attach | Cost$ 2 U U | ValidTgts$ Opponent | AILogic$ Curse
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
T:Mode$ Drawn | ValidCard$ Card.OwnedBy Player.EnchantedBy | TriggerZones$ Battlefield | Execute$ TrigDraw | OptionalDecider$ You | TriggerDescription$ Whenever enchanted opponent draws a card, you may draw a card.
|
||||
SVar:TrigDraw:DB$ Draw | NumCards$ 1
|
||||
AI:RemoveDeck:All
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
Name:Recycle
|
||||
ManaCost:4 G G
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
S:Mode$ Continuous | Affected$ You | SetMaxHandSize$ 2 | Description$ Your maximum hand size is 2.
|
||||
T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever you play a card, draw a card.
|
||||
T:Mode$ LandPlayed | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | Secondary$ True | TriggerDescription$ Whenever you play a card, draw a card.
|
||||
SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1
|
||||
AI:RemoveDeck:Random
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/recycle.jpg
|
||||
Oracle:Skip your draw step.\nWhenever you play a card, draw a card.\nYour maximum hand size is two.
|
||||
|
||||
@@ -2,8 +2,8 @@ Name:Revenant Patriarch
|
||||
ManaCost:4 B
|
||||
Types:Creature Spirit
|
||||
PT:4/3
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ RevenantPump | TriggerDescription$ When CARDNAME enters the battlefield, if {W} was spent to cast it, target player skips their next combat phase.
|
||||
SVar:RevenantPump:DB$ Pump | ValidTgts$ Player | KW$ Skip your next combat phase. | Permanent$ True | TgtPrompt$ Select target Player | IsCurse$ True
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ RevenantSkipCombat | TriggerDescription$ When CARDNAME enters the battlefield, if {W} was spent to cast it, target player skips their next combat phase.
|
||||
SVar:RevenantSkipCombat:DB$ SkipPhase | ValidTgts$ Player | ConditionManaSpent$ W | Phase$ Combat | TgtPrompt$ Select target Player | IsCurse$ True
|
||||
K:CARDNAME can't block.
|
||||
SVar:ManaNeededToAvoidNegativeEffect:white
|
||||
AI:RemoveDeck:Random
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
Name:Sands of Time
|
||||
ManaCost:4
|
||||
Types:Artifact
|
||||
S:Mode$ Continuous | Affected$ Player | AddKeyword$ Skip your untap step. | Description$ Each player skips their untap step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | Phase$ Untap | Skip$ True | Description$ Each player skips their untap step.
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigSands | TriggerDescription$ At the beginning of each player's upkeep, that player simultaneously untaps each tapped artifact, creature, and land they control and taps each untapped artifact, creature, and land they control.
|
||||
SVar:TrigSands:DB$ UntapAll | Defined$ TriggeredPlayer | ValidCards$ Artifact.tapped,Creature.tapped,Land.tapped | RememberUntapped$ True | SubAbility$ DBTap
|
||||
SVar:DBTap:DB$ TapAll | Defined$ TriggeredPlayer | ValidCards$ Artifact.untapped+IsNotRemembered,Creature.untapped+IsNotRemembered,Land.untapped+IsNotRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
AI:RemoveDeck:Random
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/sands_of_time.jpg
|
||||
Oracle:Each player skips their untap step.\nAt the beginning of each player's upkeep, that player simultaneously untaps each tapped artifact, creature, and land they control and taps each untapped artifact, creature, and land they control.
|
||||
|
||||
@@ -2,5 +2,4 @@ Name:Savor the Moment
|
||||
ManaCost:1 U U
|
||||
Types:Sorcery
|
||||
A:SP$ AddTurn | Cost$ 1 U U | NumTurns$ 1 | SkipUntap$ True | SpellDescription$ Take an extra turn after this one. Skip the untap step of that turn.
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/savor_the_moment.jpg
|
||||
Oracle:Take an extra turn after this one. Skip the untap step of that turn.
|
||||
|
||||
@@ -4,8 +4,8 @@ Types:Legendary Creature Snake Warrior
|
||||
PT:2/2
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, sacrifice a Snake.
|
||||
SVar:TrigSac:DB$ Sacrifice | Defined$ You | SacValid$ Snake
|
||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player skips their next untap step.
|
||||
SVar:TrigPump:DB$ Pump | Defined$ TriggeredTarget | KW$ Skip your next untap step. | Permanent$ True
|
||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigSkipPhase | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player skips their next untap step.
|
||||
SVar:TrigSkipPhase:DB$ SkipPhase | Defined$ TriggeredTarget | Step$ Untap
|
||||
SVar:NeedsToPlayVar:Z GE2
|
||||
SVar:Z:Count$Valid Creature.Snake+YouCtrl+cmcLE2
|
||||
DeckNeeds:Type$Snake
|
||||
|
||||
@@ -2,9 +2,8 @@ Name:Solitary Confinement
|
||||
ManaCost:2 W
|
||||
Types:Enchantment
|
||||
K:UpkeepCost:Discard<1/Card>
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Shroud | Description$ You have shroud. (You can't be the target of spells or abilities.)
|
||||
R:Event$ DamageDone | ActiveZones$ Battlefield | Prevent$ True | ValidTarget$ You | Description$ Prevent all damage that would be dealt to you.
|
||||
AI:RemoveDeck:All
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/solitary_confinement.jpg
|
||||
Oracle:At the beginning of your upkeep, sacrifice Solitary Confinement unless you discard a card.\nSkip your draw step.\nYou have shroud. (You can't be the target of spells or abilities.)\nPrevent all damage that would be dealt to you.
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
Name:Stasis
|
||||
ManaCost:1 U
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ Player | AddKeyword$ Skip your untap step. | Description$ Players skip their untap steps.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | Phase$ Untap | Skip$ True | Description$ Players skip their untap steps.
|
||||
K:UpkeepCost:U
|
||||
AI:RemoveDeck:Random
|
||||
SVar:NonStackingEffect:True
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/stasis.jpg
|
||||
Oracle:Players skip their untap steps.\nAt the beginning of your upkeep, sacrifice Stasis unless you pay {U}.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Stonehorn Dignitary
|
||||
ManaCost:3 W
|
||||
Types:Creature Rhino Soldier
|
||||
PT:1/4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, target opponent skips their next combat phase.
|
||||
SVar:TrigPump:DB$ Pump | ValidTgts$ Opponent | KW$ Skip your next combat phase. | Permanent$ True | TgtPrompt$ Select target opponent | IsCurse$ True
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSkipCombat | TriggerDescription$ When CARDNAME enters the battlefield, target opponent skips their next combat phase.
|
||||
SVar:TrigSkipCombat:DB$ SkipPhase | ValidTgts$ Opponent | Phase$ Combat | TgtPrompt$ Select target opponent | IsCurse$ True
|
||||
Oracle:When Stonehorn Dignitary enters the battlefield, target opponent skips their next combat phase.
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
Name:Symbiotic Deployment
|
||||
ManaCost:2 G
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
A:AB$ Draw | Cost$ 1 tapXType<2/Creature> | Defined$ You | NumCards$ 1 | SpellDescription$ Draw a card.
|
||||
AI:RemoveDeck:Random
|
||||
SVar:NonStackingEffect:True
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/symbiotic_deployment.jpg
|
||||
Oracle:Skip your draw step.\n{1}, Tap two untapped creatures you control: Draw a card.
|
||||
|
||||
@@ -2,11 +2,10 @@ Name:Taigam, Sidisi's Hand
|
||||
ManaCost:3 U B
|
||||
Types:Legendary Creature Human Wizard
|
||||
PT:3/4
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ At the beginning of your upkeep, look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard.
|
||||
SVar:TrigDig:DB$ Dig | DigNum$ 3 | DestinationZone2$ Graveyard | SpellDescription$ Look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard.
|
||||
A:AB$ Pump | Cost$ B T ExileFromGrave<X/Card> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -X | NumDef$ -X | IsCurse$ True | SpellDescription$ Target creature gets -X/-X until end of turn. | CostDesc$ {B}, {T}, Exile X cards from your graveyard:
|
||||
SVar:X:Count$xPaid
|
||||
AI:RemoveDeck:All
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/taigam_sidisis_hand.jpg
|
||||
Oracle:Skip your draw step.\nAt the beginning of your upkeep, look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard.\n{B}, {T}, Exile X cards from your graveyard: Target creature gets -X/-X until end of turn.
|
||||
@@ -1,9 +1,8 @@
|
||||
Name:The Eon Fog
|
||||
ManaCost:no cost
|
||||
Types:Plane Equilor
|
||||
S:Mode$ Continuous | EffectZone$ Command | Affected$ Player | AddKeyword$ Skip your untap step. | Description$ Players skip their untap steps.
|
||||
R:Event$ BeginPhase | ActiveZones$ Command | Phase$ Untap | Skip$ True | Description$ Players skip their untap steps.
|
||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, untap all permanents you control.
|
||||
SVar:RolledChaos:DB$ UntapAll | ValidCards$ Permanent.YouCtrl
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/the_eon_fog.jpg
|
||||
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9
|
||||
Oracle:Players skip their untap steps.\nWhenever you roll {CHAOS}, untap all permanents you control.
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
Name:Yawgmoth's Bargain
|
||||
ManaCost:4 B B
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ You | AddKeyword$ Skip your draw step. | Description$ Skip your draw step.
|
||||
R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step.
|
||||
A:AB$ Draw | Cost$ PayLife<1> | NumCards$ 1 | AILogic$ YawgmothsBargain | AILifeThreshold$ 1 | SpellDescription$ Draw a card.
|
||||
SVar:AICastPreference:NeverCastIfLifeBelow$ 7
|
||||
AI:RemoveDeck:Random
|
||||
SVar:NonStackingEffect:True
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/yawgmoths_bargain.jpg
|
||||
Oracle:Skip your draw step.\nPay 1 life: Draw a card.
|
||||
|
||||
@@ -3,8 +3,8 @@ ManaCost:4 W W
|
||||
Types:Legendary Creature Dragon Spirit
|
||||
PT:5/5
|
||||
K:Flying
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigPump | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, target player skips their next untap step. Tap up to five target permanents that player controls.
|
||||
SVar:TrigPump:DB$ Pump | ValidTgts$ Player | IsCurse$ True | KW$ Skip your next untap step. | Permanent$ True | IsCurse$ True | SubAbility$ TrigTap
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigSkipPhase | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, target player skips their next untap step. Tap up to five target permanents that player controls.
|
||||
SVar:TrigSkipPhase:DB$ SkipPhase | ValidTgts$ Player | Step$ Untap | IsCurse$ True | SubAbility$ TrigTap
|
||||
SVar:TrigTap:DB$ Tap | TargetMin$ 0 | TargetMax$ 5 | TargetsWithDefinedController$ ParentTarget | ValidTgts$ Permanent
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/yosei_the_morning_star.jpg
|
||||
Oracle:Flying\nWhen Yosei, the Morning Star dies, target player skips their next untap step. Tap up to five target permanents that player controls.
|
||||
|
||||
Reference in New Issue
Block a user