mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
@@ -2430,7 +2430,7 @@ public class GameAction {
|
||||
}
|
||||
if (c.isPlaneswalker()) {
|
||||
int lethalPW = c.getCurrentLoyalty();
|
||||
// 120.10
|
||||
// CR 120.10
|
||||
lethal = c.isCreature() ? Math.min(lethal, lethalPW) : lethalPW;
|
||||
}
|
||||
lethalDamage.put(c, lethal);
|
||||
@@ -2442,6 +2442,7 @@ public class GameAction {
|
||||
sourceLKI.getDamageHistory().registerDamage(e.getValue(), isCombat, sourceLKI, e.getKey(), lkiCache);
|
||||
}
|
||||
|
||||
// CR 702.15e
|
||||
if (sum > 0 && sourceLKI.hasKeyword(Keyword.LIFELINK)) {
|
||||
sourceLKI.getController().gainLife(sum, sourceLKI, cause);
|
||||
}
|
||||
|
||||
@@ -302,8 +302,7 @@ public final class AbilityFactory {
|
||||
}
|
||||
|
||||
if (spellAbility instanceof SpellApiBased && hostCard.isPermanent()) {
|
||||
String desc = mapParams.containsKey("SpellDescription") ? mapParams.get("SpellDescription")
|
||||
: spellAbility.getHostCard().getName();
|
||||
String desc = mapParams.getOrDefault("SpellDescription", spellAbility.getHostCard().getName());
|
||||
spellAbility.setDescription(desc);
|
||||
} else if (mapParams.containsKey("SpellDescription")) {
|
||||
spellAbility.rebuiltDescription();
|
||||
|
||||
@@ -65,6 +65,10 @@ public class CharmEffect extends SpellAbilityEffect {
|
||||
// using getCardForUi game is not set, so can't guess max charm
|
||||
num = Integer.MAX_VALUE;
|
||||
} else {
|
||||
// fallback needed while ability building
|
||||
if (sa.getActivatingPlayer() == null) {
|
||||
sa.setActivatingPlayer(source.getController());
|
||||
}
|
||||
num = Math.min(AbilityUtils.calculateAmount(source, sa.getParamOrDefault("CharmNum", "1"), sa), list.size());
|
||||
}
|
||||
final int min = sa.hasParam("MinCharmNum") ? AbilityUtils.calculateAmount(source, sa.getParam("MinCharmNum"), sa) : num;
|
||||
|
||||
@@ -320,12 +320,9 @@ public class DamageDealEffect extends DamageBaseEffect {
|
||||
} else {
|
||||
if (sa.hasParam("ExcessDamage") && (!sa.hasParam("ExcessDamageCondition") ||
|
||||
sourceLKI.isValid(sa.getParam("ExcessDamageCondition").split(","), activationPlayer, hostCard, sa))) {
|
||||
|
||||
damageMap.put(sourceLKI, c, dmgToTarget);
|
||||
|
||||
List<GameEntity> list = Lists.newArrayList();
|
||||
list.addAll(AbilityUtils.getDefinedCards(hostCard, sa.getParam("ExcessDamage"), sa));
|
||||
list.addAll(AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("ExcessDamage"), sa));
|
||||
List<GameEntity> list = AbilityUtils.getDefinedEntities(hostCard, sa.getParam("ExcessDamage"), sa);
|
||||
|
||||
if (!list.isEmpty()) {
|
||||
damageMap.put(sourceLKI, list.get(0), excess);
|
||||
|
||||
@@ -17,6 +17,7 @@ import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
public abstract class DamagePreventEffectBase extends SpellAbilityEffect {
|
||||
@@ -24,7 +25,7 @@ public abstract class DamagePreventEffectBase extends SpellAbilityEffect {
|
||||
final Card hostCard = sa.getHostCard();
|
||||
final Game game = hostCard.getGame();
|
||||
final Player player = hostCard.getController();
|
||||
final String name = hostCard.getName() + "'s Effect";
|
||||
final String name = CardTranslation.getTranslatedName(hostCard.getName()) + "'s Effect";
|
||||
final String image = hostCard.getImageKey();
|
||||
StringBuilder sb = new StringBuilder("Event$ DamageDone | ActiveZones$ Command | ValidTarget$ ");
|
||||
sb.append((o instanceof Card ? "Card.IsRemembered" : "Player.IsRemembered"));
|
||||
|
||||
@@ -38,6 +38,7 @@ public class DelayedTriggerEffect extends SpellAbilityEffect {
|
||||
final Card host = sa.getHostCard();
|
||||
final Game game = host.getGame();
|
||||
Map<String, String> mapParams = Maps.newHashMap(sa.getMapParams());
|
||||
|
||||
mapParams.remove("Cost");
|
||||
|
||||
if (mapParams.containsKey("SpellDescription")) {
|
||||
|
||||
@@ -27,6 +27,7 @@ import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
@@ -113,7 +114,7 @@ public class EffectEffect extends SpellAbilityEffect {
|
||||
|
||||
String name = sa.getParam("Name");
|
||||
if (name == null) {
|
||||
name = hostCard.getName() + (sa.hasParam("Boon") ? "'s Boon" : "'s Effect");
|
||||
name = CardTranslation.getTranslatedName(hostCard.getName()) + (sa.hasParam("Boon") ? "'s Boon" : "'s Effect");
|
||||
}
|
||||
|
||||
// Unique Effects shouldn't be duplicated
|
||||
|
||||
@@ -10,6 +10,7 @@ import forge.game.replacement.ReplacementHandler;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
public class FogEffect extends SpellAbilityEffect {
|
||||
|
||||
@@ -22,7 +23,7 @@ public class FogEffect extends SpellAbilityEffect {
|
||||
public void resolve(SpellAbility sa) {
|
||||
final Card hostCard = sa.getHostCard();
|
||||
final Game game = hostCard.getGame();
|
||||
final String name = hostCard.getName() + "'s Effect";
|
||||
final String name = CardTranslation.getTranslatedName(hostCard.getName()) + "'s Effect";
|
||||
final String image = hostCard.getImageKey();
|
||||
StringBuilder sb = new StringBuilder("Event$ DamageDone | ActiveZones$ Command | IsCombat$ True");
|
||||
sb.append(" | Prevent$ True | Description$ Prevent all combat damage this turn.");
|
||||
|
||||
@@ -15,6 +15,7 @@ import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
public abstract class RegenerateBaseEffect extends SpellAbilityEffect {
|
||||
|
||||
@@ -24,44 +25,44 @@ public abstract class RegenerateBaseEffect extends SpellAbilityEffect {
|
||||
|
||||
// create Effect for Regeneration
|
||||
final Card eff = createEffect(
|
||||
sa, sa.getActivatingPlayer(), hostCard.getName() + "'s Regeneration", hostCard.getImageKey());
|
||||
|
||||
sa, sa.getActivatingPlayer(), CardTranslation.getTranslatedName(hostCard.getName()) + "'s Regeneration", hostCard.getImageKey());
|
||||
|
||||
eff.addRemembered(list);
|
||||
addForgetOnMovedTrigger(eff, "Battlefield");
|
||||
|
||||
|
||||
// build ReplacementEffect
|
||||
String repeffstr = "Event$ Destroy | ActiveZones$ Command | ValidCard$ Card.IsRemembered | Regeneration$ True"
|
||||
+ " | Description$ Regeneration (if creature would be destroyed, regenerate it instead)";
|
||||
|
||||
|
||||
String effect = "DB$ Regeneration | Defined$ ReplacedCard";
|
||||
String exileEff = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile"
|
||||
+ " | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0";
|
||||
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, eff, true);
|
||||
|
||||
|
||||
SpellAbility saReg = AbilityFactory.getAbility(effect, eff);
|
||||
AbilitySub saExile = (AbilitySub)AbilityFactory.getAbility(exileEff, eff);
|
||||
AbilitySub saExile = (AbilitySub)AbilityFactory.getAbility(exileEff, eff);
|
||||
|
||||
saReg.setSubAbility(saExile);
|
||||
re.setOverridingAbility(saReg);
|
||||
eff.addReplacementEffect(re);
|
||||
|
||||
|
||||
// add extra Remembered
|
||||
if (sa.hasParam("RememberObjects")) {
|
||||
eff.addRemembered(AbilityUtils.getDefinedObjects(hostCard, sa.getParam("RememberObjects"), sa));
|
||||
}
|
||||
|
||||
|
||||
if (sa.hasParam("RegenerationTrigger")) {
|
||||
final String str = sa.getSVar(sa.getParam("RegenerationTrigger"));
|
||||
|
||||
|
||||
SpellAbility trigSA = AbilityFactory.getAbility(str, eff);
|
||||
|
||||
|
||||
final String trigStr = "Mode$ Regenerated | ValidCause$ Effect.Self | TriggerZones$ Command "
|
||||
+ " | TriggerDescription$ " + trigSA.getDescription();
|
||||
final Trigger trigger = TriggerHandler.parseTrigger(trigStr, eff, true);
|
||||
trigger.setOverridingAbility(trigSA);
|
||||
eff.addTrigger(trigger);
|
||||
}
|
||||
|
||||
|
||||
// Copy text changes
|
||||
if (sa.isIntrinsic()) {
|
||||
eff.copyChangedTextFrom(hostCard);
|
||||
@@ -75,7 +76,7 @@ public abstract class RegenerateBaseEffect extends SpellAbilityEffect {
|
||||
game.getAction().moveTo(ZoneType.Command, eff, sa, AbilityKey.newMap());
|
||||
eff.updateStateForView();
|
||||
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
|
||||
|
||||
|
||||
final GameCommand untilEOT = new GameCommand() {
|
||||
private static final long serialVersionUID = 259368227093961103L;
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import forge.game.replacement.ReplacementLayer;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
public class SkipPhaseEffect extends SpellAbilityEffect {
|
||||
|
||||
@@ -58,7 +59,7 @@ public class SkipPhaseEffect extends SpellAbilityEffect {
|
||||
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 name = CardTranslation.getTranslatedName(hostCard.getName()) + "'s Effect";
|
||||
final String image = hostCard.getImageKey();
|
||||
final boolean isNextThisTurn = duration != null && duration.equals("NextThisTurn");
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.Lang;
|
||||
|
||||
public class SkipTurnEffect extends SpellAbilityEffect {
|
||||
@@ -38,7 +39,7 @@ public class SkipTurnEffect extends SpellAbilityEffect {
|
||||
public void resolve(SpellAbility sa) {
|
||||
final Card hostCard = sa.getHostCard();
|
||||
final Game game = hostCard.getGame();
|
||||
final String name = hostCard.getName() + "'s Effect";
|
||||
final String name = CardTranslation.getTranslatedName(hostCard.getName()) + "'s Effect";
|
||||
final String image = hostCard.getImageKey();
|
||||
final int numTurns = AbilityUtils.calculateAmount(hostCard, sa.getParam("NumTurns"), sa);
|
||||
String repeffstr = "Event$ BeginTurn | ActiveZones$ Command | ValidPlayer$ You " +
|
||||
|
||||
@@ -299,7 +299,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
private Map<Long, Player> goad = Maps.newTreeMap();
|
||||
|
||||
private final List<GameCommand> leavePlayCommandList = Lists.newArrayList();
|
||||
private final List<GameCommand> etbCommandList = Lists.newArrayList();
|
||||
private final List<GameCommand> untapCommandList = Lists.newArrayList();
|
||||
private final List<GameCommand> changeControllerCommandList = Lists.newArrayList();
|
||||
private final List<GameCommand> unattachCommandList = Lists.newArrayList();
|
||||
@@ -3265,20 +3264,24 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
return canCounter;
|
||||
}
|
||||
|
||||
public final void addComesIntoPlayCommand(final GameCommand c) {
|
||||
etbCommandList.add(c);
|
||||
}
|
||||
|
||||
public final void runComesIntoPlayCommands() {
|
||||
for (final GameCommand c : etbCommandList) {
|
||||
c.run();
|
||||
}
|
||||
etbCommandList.clear();
|
||||
}
|
||||
|
||||
public final void addLeavesPlayCommand(final GameCommand c) {
|
||||
leavePlayCommandList.add(c);
|
||||
}
|
||||
public final void addUntapCommand(final GameCommand c) {
|
||||
untapCommandList.add(c);
|
||||
}
|
||||
public final void addUnattachCommand(final GameCommand c) {
|
||||
unattachCommandList.add(c);
|
||||
}
|
||||
public final void addFaceupCommand(final GameCommand c) {
|
||||
faceupCommandList.add(c);
|
||||
}
|
||||
public final void addFacedownCommand(final GameCommand c) {
|
||||
facedownCommandList.add(c);
|
||||
}
|
||||
public final void addChangeControllerCommand(final GameCommand c) {
|
||||
changeControllerCommandList.add(c);
|
||||
}
|
||||
|
||||
public final void runLeavesPlayCommands() {
|
||||
for (final GameCommand c : leavePlayCommandList) {
|
||||
@@ -3286,22 +3289,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
}
|
||||
leavePlayCommandList.clear();
|
||||
}
|
||||
|
||||
public final void addUntapCommand(final GameCommand c) {
|
||||
untapCommandList.add(c);
|
||||
}
|
||||
|
||||
public final void addUnattachCommand(final GameCommand c) {
|
||||
unattachCommandList.add(c);
|
||||
}
|
||||
|
||||
public final void addFaceupCommand(final GameCommand c) {
|
||||
faceupCommandList.add(c);
|
||||
}
|
||||
|
||||
public final void addFacedownCommand(final GameCommand c) {
|
||||
facedownCommandList.add(c);
|
||||
}
|
||||
public final void runUntapCommands() {
|
||||
for (final GameCommand c : untapCommandList) {
|
||||
c.run();
|
||||
@@ -3314,25 +3301,18 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
}
|
||||
unattachCommandList.clear();
|
||||
}
|
||||
|
||||
public final void runFaceupCommands() {
|
||||
for (final GameCommand c : faceupCommandList) {
|
||||
c.run();
|
||||
}
|
||||
faceupCommandList.clear();
|
||||
}
|
||||
|
||||
public final void runFacedownCommands() {
|
||||
for (final GameCommand c : facedownCommandList) {
|
||||
c.run();
|
||||
}
|
||||
facedownCommandList.clear();
|
||||
}
|
||||
|
||||
public final void addChangeControllerCommand(final GameCommand c) {
|
||||
changeControllerCommandList.add(c);
|
||||
}
|
||||
|
||||
public final void runChangeControllerCommands() {
|
||||
for (final GameCommand c : changeControllerCommandList) {
|
||||
c.run();
|
||||
@@ -3346,16 +3326,16 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
view.updateSickness(this);
|
||||
}
|
||||
|
||||
public final boolean isFirstTurnControlled() {
|
||||
return sickness;
|
||||
}
|
||||
|
||||
public final boolean hasSickness() {
|
||||
return sickness && !hasKeyword(Keyword.HASTE);
|
||||
}
|
||||
|
||||
public final boolean isSick() {
|
||||
return sickness && isCreature() && !hasKeyword(Keyword.HASTE);
|
||||
return hasSickness() && isCreature();
|
||||
}
|
||||
|
||||
public final boolean isFirstTurnControlled() {
|
||||
return sickness;
|
||||
}
|
||||
|
||||
public boolean hasBecomeTargetThisTurn() {
|
||||
@@ -5070,7 +5050,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
getGame().getTriggerHandler().runTrigger(TriggerType.PhaseOut, runParams, false);
|
||||
// when it doesn't exist the game will no longer see it as tapped
|
||||
runUntapCommands();
|
||||
// TODO need to run UntilHostLeavesPlay commands but only when worded "for as long as"
|
||||
// TODO CR 702.26f need to run LeavesPlay + changeController commands but only when worded "for as long as"
|
||||
}
|
||||
|
||||
setPhasedOut(!phasedOut);
|
||||
@@ -5636,7 +5616,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
@Override
|
||||
public final int addDamageAfterPrevention(final int damageIn, final Card source, final boolean isCombat, GameEntityCounterTable counterTable) {
|
||||
if (damageIn <= 0) {
|
||||
return 0; // Rule 119.8
|
||||
return 0; // 120.8
|
||||
}
|
||||
|
||||
// 120.1a Damage can’t be dealt to an object that’s neither a creature nor a planeswalker.
|
||||
|
||||
@@ -160,7 +160,7 @@ public class PlayerProperty {
|
||||
return false;
|
||||
}
|
||||
} else if (property.equals("Defending")) {
|
||||
if (!game.getCombat().getAttackersAndDefenders().values().contains(player)) {
|
||||
if (game.getCombat() == null || !game.getCombat().getAttackersAndDefenders().values().contains(player)) {
|
||||
return false;
|
||||
}
|
||||
} else if (property.equals("LostLifeThisTurn")) {
|
||||
|
||||
@@ -29,7 +29,6 @@ public class StaticAbilityNumLoyaltyAct {
|
||||
}
|
||||
|
||||
public static boolean applyLimitIncrease(final StaticAbility stAb, final Card card) {
|
||||
|
||||
if (!stAb.matchesValidParam("ValidCard", card)) {
|
||||
return false;
|
||||
}
|
||||
@@ -58,7 +57,7 @@ public class StaticAbilityNumLoyaltyAct {
|
||||
}
|
||||
}
|
||||
int more = AbilityUtils.calculateAmount(card, stAb.getParam("Additional"), stAb);
|
||||
addl = addl + more;
|
||||
addl += more;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -305,7 +305,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
||||
return;
|
||||
}
|
||||
|
||||
if (sp instanceof AbilityStatic) {
|
||||
if (sp instanceof AbilityStatic || (sp.isTrigger() && sp.getTrigger().getOverridingAbility() instanceof AbilityStatic)) {
|
||||
AbilityUtils.resolve(sp);
|
||||
// AbilityStatic should do nothing below
|
||||
return;
|
||||
|
||||
@@ -36,7 +36,6 @@ public class PlayerZoneBattlefield extends PlayerZone {
|
||||
private static final long serialVersionUID = 5750837078903423978L;
|
||||
|
||||
private boolean trigger = true;
|
||||
private boolean leavesTrigger = true;
|
||||
private CardCollection meldedCards = new CardCollection();
|
||||
|
||||
public PlayerZoneBattlefield(final ZoneType zone, final Player player) {
|
||||
@@ -63,7 +62,6 @@ public class PlayerZoneBattlefield extends PlayerZone {
|
||||
|
||||
if (trigger) {
|
||||
c.setSickness(true); // summoning sickness
|
||||
c.runComesIntoPlayCommands();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,14 +70,13 @@ public class PlayerZoneBattlefield extends PlayerZone {
|
||||
public final void remove(final Card c) {
|
||||
super.remove(c);
|
||||
|
||||
if (leavesTrigger) {
|
||||
if (trigger) {
|
||||
c.runLeavesPlayCommands();
|
||||
}
|
||||
}
|
||||
|
||||
public final void setTriggers(final boolean b) {
|
||||
trigger = b;
|
||||
leavesTrigger = b;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,9 +2,9 @@ Name:Academy Loremaster
|
||||
ManaCost:U U
|
||||
Types:Creature Human Wizard
|
||||
PT:2/3
|
||||
T:Mode$ Phase | Phase$ Draw | ValidPlayer$ Player | TriggerZones$ Battlefield | OptionalDecider$ TriggeredPlayer | Execute$ TrigDraw | TriggerDescription$ At the beginning of each player's draw step, that player may draw an additional card. If they do, spells they cast this turn cost {2} more to cast
|
||||
T:Mode$ Phase | Phase$ Draw | ValidPlayer$ Player | TriggerZones$ Battlefield | OptionalDecider$ TriggeredPlayer | Execute$ TrigDraw | TriggerDescription$ At the beginning of each player's draw step, that player may draw an additional card. If they do, spells they cast this turn cost {2} more to cast.
|
||||
SVar:TrigDraw:DB$ Draw | NumCards$ 1 | Defined$ TriggeredPlayer | RememberDrawn$ True | SubAbility$ DBEffect
|
||||
SVar:DBEffect:DB$ Effect | ConditionDefined$ Remembered | ConditionPresent$ Card | Duration$ EndOfTurn | StaticAbilities$ RaiseCost | SubAbility$ DBCleanup | SpellDescription$ Spells they cast this turn cost {2} more to cast
|
||||
SVar:RaiseCost:Mode$ RaiseCost | ValidCard$ Card.ActivePlayerCtrl | Type$ Spell | Amount$ 2 | Description$ Spells they cast this turn cost {2} more to cast
|
||||
SVar:DBEffect:DB$ Effect | ConditionDefined$ Remembered | ConditionPresent$ Card | Duration$ EndOfTurn | StaticAbilities$ RaiseCost | SubAbility$ DBCleanup
|
||||
SVar:RaiseCost:Mode$ RaiseCost | ValidCard$ Card.ActivePlayerCtrl | Type$ Spell | Amount$ 2 | Description$ Spells they cast this turn cost {2} more to cast.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
Oracle:At the beginning of each player's draw step, that player may draw an additional card. If they do, spells they cast this turn cost {2} more to cast
|
||||
Oracle:At the beginning of each player's draw step, that player may draw an additional card. If they do, spells they cast this turn cost {2} more to cast.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Awakening
|
||||
ManaCost:2 G G
|
||||
Types:Enchantment
|
||||
T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigUntapAll | TriggerDescription$ At the beginning of each upkeep, untap all creatures and lands.
|
||||
SVar:TrigUntapAll:DB$ UntapAll | ValidCards$ Creature,Land | SpellDescription$ untap all creatures and lands.
|
||||
SVar:TrigUntapAll:DB$ UntapAll | ValidCards$ Creature,Land
|
||||
SVar:UntapsEachTurn:Creature,Land
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:At the beginning of each upkeep, untap all creatures and lands.
|
||||
|
||||
@@ -5,8 +5,8 @@ PT:2/2
|
||||
K:Trample
|
||||
K:Haste
|
||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigDiscard | TriggerDescription$ Whenever CARDNAME deals damage to a player, that player discards all the cards in their hand, then draws that many cards.
|
||||
SVar:TrigDiscard:DB$ Discard | Defined$ TriggeredTarget | Mode$ Hand | RememberDiscarded$ True | SubAbility$ DBDraw | SpellDescription$ Discard hand
|
||||
SVar:DBDraw:DB$ Draw | NumCards$ X | Defined$ TriggeredTarget | SubAbility$ DBCleanup | SpellDescription$ Draw that many cards
|
||||
SVar:TrigDiscard:DB$ Discard | Defined$ TriggeredTarget | Mode$ Hand | RememberDiscarded$ True | SubAbility$ DBDraw
|
||||
SVar:DBDraw:DB$ Draw | NumCards$ X | Defined$ TriggeredTarget | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:Remembered$Amount
|
||||
Oracle:Trample, haste\nWhenever Barbed Shocker deals damage to a player, that player discards all the cards in their hand, then draws that many cards.
|
||||
|
||||
@@ -2,8 +2,8 @@ Name:Bartered Cow
|
||||
ManaCost:3 W
|
||||
Types:Creature Ox
|
||||
PT:3/3
|
||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | TriggerController$ TriggeredCardController | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies or blocks you discard it, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")
|
||||
T:Mode$ Discarded | ValidCard$ Card.Self | Execute$ TrigToken | Secondary$ True | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies or blocks you discard it, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")
|
||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | TriggerController$ TriggeredCardController | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies or when you discard it, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")
|
||||
T:Mode$ Discarded | ValidCard$ Card.Self | Execute$ TrigToken | Secondary$ True | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies or when you discard it, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You
|
||||
SVar:SacMe:1
|
||||
SVar:DiscardMe:3
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:6 U
|
||||
Types:Creature Elemental
|
||||
PT:5/5
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create two 1/1 blue Merfolk Wizard creature tokens.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ u_1_1_merfolk_wizard | TokenOwner$ You | SpellDescription$ Create two 1/1 blue Merfolk Wizard creature tokens.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ u_1_1_merfolk_wizard | TokenOwner$ You
|
||||
A:AB$ Untap | Cost$ tapXType<2/Merfolk> | SubAbility$ GainShroud | SpellDescription$ Untap CARDNAME.
|
||||
SVar:GainShroud:DB$ Pump | Defined$ Self | KW$ Shroud | SpellDescription$ CARDNAME gains shroud until end of turn.
|
||||
Oracle:When Benthicore enters the battlefield, create two 1/1 blue Merfolk Wizard creature tokens.\nTap two untapped Merfolk you control: Untap Benthicore. It gains shroud until end of turn. (It can't be the target of spells or abilities.)
|
||||
|
||||
@@ -4,6 +4,6 @@ Types:Legendary Creature Cyclops
|
||||
PT:7/6
|
||||
K:Trample
|
||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDig | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, reveal the top three cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard.
|
||||
SVar:TrigDig:DB$ Dig | DigNum$ 3 | Defined$ You | Reveal$ True | ChangeNum$ All | ChangeValid$ Land | DestinationZone2$ Graveyard | SpellDescription$ Reveal the top three cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard.
|
||||
SVar:TrigDig:DB$ Dig | DigNum$ 3 | Defined$ You | Reveal$ True | ChangeNum$ All | ChangeValid$ Land | DestinationZone2$ Graveyard
|
||||
A:AB$ DealDamage | Cost$ Discard<1/Land> | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 3 | SpellDescription$ CARDNAME deals 3 damage to any target.
|
||||
Oracle:Trample\nWhenever Borborygmos Enraged deals combat damage to a player, reveal the top three cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard.\nDiscard a land card: Borborygmos Enraged deals 3 damage to any target.
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Creature Human Pirate
|
||||
PT:2/2
|
||||
K:Flash
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerDescription$ When CARDNAME enters the battlefield, each token that would be created under an opponent's control this turn is created under your control instead.
|
||||
SVar:TrigEffect:DB$ Effect | Name$ Crafty Cutpurse Effect | ReplacementEffects$ OppCreatEnters | SpellDescription$ Each token that would be created under an opponent's control this turn is created under your control instead.
|
||||
SVar:TrigEffect:DB$ Effect | Name$ Crafty Cutpurse Effect | ReplacementEffects$ OppCreatEnters
|
||||
SVar:OppCreatEnters:Event$ CreateToken | ActiveZones$ Command | ValidToken$ Card.OppCtrl | ReplaceWith$ ETBYourCtrl | Layer$ Control | Description$ Each token that would be created under an opponent's control this turn is created under your control instead.
|
||||
SVar:ETBYourCtrl:DB$ ReplaceToken | Type$ ReplaceController | ValidCard$ Card.OppCtrl | NewController$ You
|
||||
Oracle:Flash\nWhen Crafty Cutpurse enters the battlefield, each token that would be created under an opponent's control this turn is created under your control instead.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Debt of Loyalty
|
||||
ManaCost:1 W W
|
||||
Types:Instant
|
||||
A:SP$ Regenerate | Cost$ 1 W W | ValidTgts$ Creature | TgtPrompt$ Select target creature | RegenerationTrigger$ TrigGainControl | SpellDescription$ Regenerate target creature. You gain control of that creature if it regenerates this way.
|
||||
SVar:TrigGainControl:ST$ GainControl | Cost$ 0 | Defined$ TriggeredCard | NewController$ You | SpellDescription$ Source controller gains control of CARDNAME if it regenerates this way.
|
||||
SVar:TrigGainControl:ST$ GainControl | Cost$ 0 | Defined$ TriggeredCard | NewController$ You
|
||||
AI:RemoveDeck:All
|
||||
Oracle:Regenerate target creature. You gain control of that creature if it regenerates this way.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Deserter's Quarters
|
||||
ManaCost:2
|
||||
Types:Artifact
|
||||
K:You may choose not to untap CARDNAME during your untap step.
|
||||
A:AB$ Tap | Cost$ 6 T | ValidTgts$ Creature | RememberTapped$ True | AlwaysRemember$ True | SpellDescription$ Tap target creature. It doesn't untap during its controller's untap step for as long as Deserter's Quarters remains tapped. | StackDescription$ SpellDescription
|
||||
A:AB$ Tap | Cost$ 6 T | ValidTgts$ Creature | RememberTapped$ True | AlwaysRemember$ True | SpellDescription$ Tap target creature. It doesn't untap during its controller's untap step for as long as CARDNAME remains tapped. | StackDescription$ SpellDescription
|
||||
S:Mode$ Continuous | Affected$ Card.IsRemembered | AddHiddenKeyword$ CARDNAME doesn't untap during your untap step.
|
||||
T:Mode$ Untaps | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ ClearRemembered | Static$ True
|
||||
SVar:ClearRemembered:DB$ Cleanup | ClearRemembered$ True
|
||||
|
||||
@@ -4,5 +4,5 @@ Types:Creature Dragon Warrior
|
||||
PT:5/3
|
||||
K:Trample
|
||||
T:Mode$ DamageDone | ValidSource$ Card.YouCtrl,Emblem.YouCtrl | ValidTarget$ Player | TriggerZones$ Battlefield | DamageAmount$ GE5 | Execute$ TrigDraw | TriggerDescription$ Whenever a source you control deals 5 or more damage to a player, draw a card.
|
||||
SVar:TrigDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card.
|
||||
SVar:TrigDraw:DB$ Draw | NumCards$ 1
|
||||
Oracle:Trample\nWhenever a source you control deals 5 or more damage to a player, draw a card.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:4 G G
|
||||
Types:Legendary Creature Treefolk Wizard
|
||||
PT:6/6
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a number of 1/1 blue Human Wizard creature tokens equal to the number of differently named lands you control.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ u_1_1_human_wizard | SpellDescription$ Create a number of 1/1 blue Human Wizard creature tokens equal to the number of differently named lands you control.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ u_1_1_human_wizard
|
||||
SVar:X:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield
|
||||
A:AB$ Draw | Cost$ 4 G U | NumCards$ Y | SubAbility$ PumpAll | SpellDescription$ Draw a card for each Wizard you control. They each get +1/+1 until end of turn for each card in your hand.
|
||||
SVar:Y:Count$Valid Wizard.YouCtrl
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Gate to the Aether
|
||||
ManaCost:6
|
||||
Types:Artifact
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ TrigAetherDig | TriggerController$ TriggeredPlayer | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player reveals the top card of their library. If it's an artifact, creature, enchantment, or land card, the player may put it onto the battlefield.
|
||||
SVar:TrigAetherDig:DB$ Dig | Defined$ TriggeredPlayer | DigNum$ 1 | Reveal$ True | DestinationZone$ Battlefield | DestinationZone2$ Library | LibraryPosition2$ 0 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Artifact,Creature,Enchantment,Land
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ TrigAetherDig | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player reveals the top card of their library. If it's an artifact, creature, enchantment, or land card, the player may put it onto the battlefield.
|
||||
SVar:TrigAetherDig:DB$ Dig | Defined$ TriggeredPlayer | Choser$ TriggeredPlayer | DigNum$ 1 | Reveal$ True | DestinationZone$ Battlefield | DestinationZone2$ Library | LibraryPosition2$ 0 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Artifact,Creature,Enchantment,Land
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:At the beginning of each player's upkeep, that player reveals the top card of their library. If it's an artifact, creature, enchantment, or land card, the player may put it onto the battlefield.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Genesis Chamber
|
||||
ManaCost:2
|
||||
Types:Artifact
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonToken | TriggerZones$ Battlefield | Execute$ TrigToken | IsPresent$ Card.Self+untapped | TriggerDescription$ Whenever a nontoken creature enters the battlefield, if CARDNAME is untapped, that creature's controller creates a 1/1 colorless Myr artifact creature token.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ TriggeredCardController | TokenScript$ c_1_1_a_myr | SpellDescription$ Create a 1/1 Myr artifact creature token.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ TriggeredCardController | TokenScript$ c_1_1_a_myr
|
||||
AI:RemoveDeck:Random
|
||||
DeckHas:Ability$Token
|
||||
Oracle:Whenever a nontoken creature enters the battlefield, if Genesis Chamber is untapped, that creature's controller creates a 1/1 colorless Myr artifact creature token.
|
||||
|
||||
@@ -4,6 +4,6 @@ Types:Creature Shapeshifter
|
||||
PT:2/2
|
||||
K:Changeling
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a colorless Shapeshifter creature token with changeling.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_2_2_shapeshifter_changeling | TokenOwner$ You | SpellDescription$ Create a 2/2 colorless Shapeshifter creature token with changeling. (It has every creature type.)
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_2_2_shapeshifter_changeling | TokenOwner$ You
|
||||
DeckHas:Ability$Token
|
||||
Oracle:Changeling (This card is every creature type.)\nWhen Irregular Cohort enters the battlefield, create a 2/2 colorless Shapeshifter creature token with changeling.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:1 G
|
||||
Types:Legendary Creature Human Druid
|
||||
PT:1/2
|
||||
T:Mode$ Drawn | ValidCard$ Card.YouCtrl | Number$ 2 | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you draw your second card each turn, create a 2/2 green Cat creature token.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ g_2_2_cat | SpellDescription$ Create a 2/2 green Cat creature token.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ g_2_2_cat
|
||||
DeckHas:Ability$Token
|
||||
A:AB$ AnimateAll | Cost$ 4 G G | ValidCards$ Creature.YouCtrl | Power$ X | Toughness$ X | SpellDescription$ Until end of turn, creatures you control have base power and toughness X/X, where X is the number of cards in your hand.
|
||||
SVar:X:Count$InYourHand
|
||||
|
||||
@@ -5,6 +5,6 @@ PT:4/5
|
||||
K:Kicker:5 B
|
||||
K:Menace
|
||||
T:Mode$ ChangesZone | ValidCard$ Card.Self+kicked | Origin$ Any | Destination$ Battlefield | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, if it was kicked, create eight 2/2 black Zombie Knight creature tokens with menace.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 8 | TokenScript$ b_2_2_zombie_knight_menace | TokenOwner$ You | SpellDescription$ When CARDNAME enters the battlefield, if it was kicked, create eight 2/2 black Zombie Knight creature tokens with menace.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 8 | TokenScript$ b_2_2_zombie_knight_menace | TokenOwner$ You
|
||||
DeckHas:Ability$Token
|
||||
Oracle:Kicker {5}{B} (You may pay an additional {5}{B} as you cast this spell.)\nMenace\nWhen Josu Vess, Lich Knight enters the battlefield, if it was kicked, create eight 2/2 black Zombie Knight creature tokens with menace.
|
||||
|
||||
@@ -5,6 +5,6 @@ PT:3/4
|
||||
K:Flying
|
||||
K:Lifelink
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a number of 2/2 white Knight creature tokens with vigilance equal to the number of opponents you attacked this turn.
|
||||
SVar:TrigToken:DB$ Token | TokenOwner$ You | TokenAmount$ X | TokenScript$ w_2_2_knight_vigilance | SpellDescription$ Create a number of 2/2 white Knight creature tokens with vigilance equal to the number of opponents you attacked this turn.
|
||||
SVar:TrigToken:DB$ Token | TokenOwner$ You | TokenAmount$ X | TokenScript$ w_2_2_knight_vigilance
|
||||
SVar:X:TriggeredCardController$OpponentsAttackedThisTurn
|
||||
Oracle:Flying, lifelink\nWhen Militant Angel enters the battlefield, create a number of 2/2 white Knight creature tokens with vigilance equal to the number of opponents you attacked this turn.
|
||||
|
||||
@@ -6,9 +6,8 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S
|
||||
SVar:TrigDrain:DB$ LoseLife | ValidTgts$ Opponent | LifeAmount$ 2 | SubAbility$ DBGainLife
|
||||
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2
|
||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigExile | OptionalDecider$ You | TriggerDescription$ At the beginning of your end step you may exile NICKNAME. If you do, return it to the battlefield under it's owner's control at the beginning of your next upkeep. It gains haste.
|
||||
SVar:TrigExile:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBDelaytrig
|
||||
SVar:DBDelaytrig:DB$ Effect | Name$ Obzedat Effect | Triggers$ TrigEOT | RememberObjects$ Self | Duration$ Permanent
|
||||
SVar:TrigEOT:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ ObzedatReturn | OneOff$ True | TriggerDescription$ Return CARDNAME to the battlefield under it's owner's control. It gains haste.
|
||||
SVar:ObzedatReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ ObzedatPump
|
||||
SVar:TrigExile:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DelTrig
|
||||
SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ ObzedatReturn | ConditionDefined$ Remembered | ConditionPresent$ Card | RememberObjects$ Remembered | TriggerDescription$ Return CARDNAME to the battlefield under its owner's control at the beginning of the next end step.
|
||||
SVar:ObzedatReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Exile,Command | Destination$ Battlefield | SubAbility$ ObzedatPump
|
||||
SVar:ObzedatPump:DB$ Pump | Defined$ Remembered | KW$ Haste | Duration$ Permanent
|
||||
Oracle:When Obzedat, Ghost Council enters the battlefield, target opponent loses 2 life and you gain 2 life.\nAt the beginning of your end step, you may exile Obzedat. If you do, return it to the battlefield under its owner's control at the beginning of your next upkeep. It gains haste.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:1 U U
|
||||
Types:Creature Djinn
|
||||
PT:2/3
|
||||
K:You may choose not to untap CARDNAME during your untap step.
|
||||
A:AB$ GainControl | Cost$ T | ValidTgts$ Creature.powerLEX | TgtPrompt$ Select target creature with power less than or equal to Old Man's. | LoseControl$ Untap,LeavesPlay,LoseControl,StaticCommandCheck | StaticCommandCheckSVar$ Y | StaticCommandSVarCompare$ GTX | SpellDescription$ Gain control of target creature with power less than or equal to Old Man of the Sea's power for as long as Old Man of the Sea remains tapped and that creature's power remains less than or equal to Old Man of the Sea's power.
|
||||
A:AB$ GainControl | Cost$ T | ValidTgts$ Creature.powerLEX | TgtPrompt$ Select target creature with power less than or equal to Old Man's. | LoseControl$ Untap,LeavesPlay,LoseControl,StaticCommandCheck | StaticCommandCheckSVar$ Y | StaticCommandSVarCompare$ GTX | SpellDescription$ Gain control of target creature with power less than or equal to CARDNAME's power for as long as CARDNAME remains tapped and that creature's power remains less than or equal to CARDNAME's power.
|
||||
SVar:X:Count$CardPower
|
||||
# the hostcard of SVar Y is the controlled card
|
||||
SVar:Y:Count$CardPower
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Prophetic Titan
|
||||
ManaCost:4 U R
|
||||
Types:Creature Giant Wizard
|
||||
PT:4/4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ Delirium — When CARDNAME enters the battlefield, choose one. If there are four or more card types among cards in your graveyard, choose both instead.
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ Delirium — When CARDNAME enters the battlefield, ABILITY
|
||||
SVar:TrigCharm:DB$ Charm | CharmNum$ X | Choices$ DBDealDamage,DBDig | AdditionalDescription$ If there are four or more card types in your graveyard, choose both.
|
||||
SVar:DBDealDamage:DB$ DealDamage | ValidTgts$ Creature,Planeswalker,Player | TgtPrompt$ Select any target | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to any target.
|
||||
SVar:DBDig:DB$ Dig | DigNum$ 4 | RestRandomOrder$ True | SpellDescription$ Look at the top four cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Pure Reflection
|
||||
ManaCost:2 W
|
||||
Types:Enchantment
|
||||
T:Mode$ SpellCast | ValidCard$ Creature | Execute$ TrigDestroy | ValidActivatingPlayer$ Player | TriggerZones$ Battlefield | TriggerDescription$ Whenever a player casts a creature spell, destroy all Reflections. Then that player creates an X/X white Reflection creature token, where X is the mana value of that spell.
|
||||
SVar:TrigDestroy:DB$ DestroyAll | ValidCards$ Reflection | SubAbility$ DBToken | SpellDescription$ Destroy all Reflections
|
||||
SVar:TrigDestroy:DB$ DestroyAll | ValidCards$ Reflection | SubAbility$ DBToken
|
||||
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenPower$ X | TokenToughness$ X | TokenScript$ w_x_x_reflection | TokenOwner$ TriggeredActivator
|
||||
SVar:X:TriggeredStackInstance$CardManaCostLKI
|
||||
Oracle:Whenever a player casts a creature spell, destroy all Reflections. Then that player creates an X/X white Reflection creature token, where X is the mana value of that spell.
|
||||
|
||||
@@ -5,7 +5,7 @@ PT:4/4
|
||||
K:Partner:Krav, the Unredeemed:Krav
|
||||
K:Flying
|
||||
T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | CheckSVar$ YouTeamLifeGained | SVarCompare$ GE1 | Execute$ TrigWarrior | TriggerDescription$ At the beginning of each end step, if your team gained life this turn, create two 1/1 white Warrior creature tokens.
|
||||
SVar:TrigWarrior:DB$ Token | TokenAmount$ 2 | TokenScript$ w_1_1_warrior | TokenOwner$ You | SpellDescription$ Create two 1/1 white Warrior creature tokens.
|
||||
SVar:TrigWarrior:DB$ Token | TokenAmount$ 2 | TokenScript$ w_1_1_warrior | TokenOwner$ You
|
||||
SVar:YouTeamLifeGained:Count$LifeYourTeamGainedThisTurn
|
||||
DeckHints:Name$Krav, the Unredeemed
|
||||
Oracle:Partner with Krav, the Unredeemed (When this creature enters the battlefield, target player may put Krav into their hand from their library, then shuffle.)\nFlying\nAt the beginning of each end step, if your team gained life this turn, create two 1/1 white Warrior creature tokens.
|
||||
|
||||
@@ -5,7 +5,7 @@ PT:1/1
|
||||
K:Morph:3 G G
|
||||
S:Mode$ Continuous | Affected$ Creature.Saproling | AddPower$ 1 | AddToughness$ 1 | IsPresent$ Card.Self+faceUp | Description$ All Saprolings get +1/+1.
|
||||
T:Mode$ TurnFaceUp | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME is turned face up, create four 1/1 green Saproling creature tokens.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 4 | TokenScript$ g_1_1_saproling | TokenOwner$ You | SpellDescription$ Create four 1/1 green Saproling creature tokens.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 4 | TokenScript$ g_1_1_saproling | TokenOwner$ You
|
||||
SVar:PlayMain1:TRUE
|
||||
DeckHints:Type$Fungus
|
||||
DeckHas:Ability$Token
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:5 W
|
||||
Types:Creature Giant Soldier
|
||||
PT:3/6
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 1/1 white Human creature token.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_human | TokenOwner$ You | SpellDescription$ Create a 1/1 white Human creature token.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_human | TokenOwner$ You
|
||||
DeckHints:Type$Human
|
||||
DeckHas:Ability$Token
|
||||
Oracle:When Watchful Giant enters the battlefield, create a 1/1 white Human creature token.
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Enchantment
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ TrigEvoke | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player reveals a card at random from their hand. If it's a land card, the player puts it onto the battlefield. Otherwise, the player casts it without paying its mana cost if able.
|
||||
SVar:TrigEvoke:DB$ Reveal | Random$ True | RememberRevealed$ True | Defined$ TriggeredPlayer | SubAbility$ DBEvokeLand
|
||||
SVar:DBEvokeLand:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | Defined$ ValidHand Land.IsRemembered | ForgetChanged$ True | SubAbility$ DBEvokePlay
|
||||
SVar:DBEvokePlay:DB$ Play | ValidZone$ Hand | Controller$ TriggeredPlayer | Defined$ Remembered | WithoutManaCost$ True | SubAbility$ DBCleanup
|
||||
SVar:DBEvokePlay:DB$ Play | ValidZone$ Hand | Controller$ TriggeredPlayer | Defined$ Remembered | ValidSA$ Spell | WithoutManaCost$ True | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:At the beginning of each player's upkeep, that player reveals a card at random from their hand. If it's a land card, the player puts it onto the battlefield. Otherwise, the player casts it without paying its mana cost if able.
|
||||
|
||||
@@ -64,8 +64,8 @@ public abstract class InputSelectManyBase<T extends GameEntity> extends InputSyn
|
||||
|
||||
@Override
|
||||
public final void showMessage() {
|
||||
if ( FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) &&
|
||||
(card!=null) ) {
|
||||
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) &&
|
||||
card != null) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append(card.toString());
|
||||
if ( (sa != null) && (!sa.toString().isEmpty()) ) { // some spell abilities have no useful string value
|
||||
|
||||
@@ -743,13 +743,13 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
|
||||
switch (sa.getParam("ShowCardInPrompt")) {
|
||||
case "FirstRemembered":
|
||||
o = sa.getHostCard().getFirstRemembered();
|
||||
if (o != null && o instanceof Card) {
|
||||
if (o instanceof Card) {
|
||||
show = (Card)o;
|
||||
}
|
||||
break;
|
||||
case "LastRemembered":
|
||||
o = sa.getHostCard().getFirstRemembered();
|
||||
if (o != null && o instanceof Card) {
|
||||
if (o instanceof Card) {
|
||||
show = (Card)o;
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user