This commit is contained in:
tehdiplomat
2019-02-05 16:20:07 -05:00
96 changed files with 1042 additions and 248 deletions

View File

@@ -68,6 +68,12 @@ Discord channel [here](https://discordapp.com/channels/267367946135928833/267742
TBD
# Card Scripting
Visit [this page](https://www.slightlymagic.net/wiki/Forge_API) for information on scripting.
Card scripting resources are found in the forge-gui/res/ path.
# General Notes
## Project Hierarchy
@@ -95,6 +101,8 @@ The platform-specific projects are:
### forge-gui
The forge-gui project includes the scripting resource definitions in the res/ path.
### forge-gui-android
Libgdx-based backend targeting Android. Requires Android SDK and relies on forge-gui-mobile for GUI logic.

View File

@@ -6,7 +6,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
</parent>
<artifactId>forge-ai</artifactId>

View File

@@ -6,7 +6,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
</parent>
<artifactId>forge-core</artifactId>

View File

@@ -6,7 +6,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
</parent>
<artifactId>forge-game</artifactId>

View File

@@ -606,6 +606,13 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (remember != null) {
hostCard.addRemembered(movedCard);
// addRememberedFromCardState ?
if (tgtC.getMeldedWith() != null) {
Card meld = game.getCardState(tgtC.getMeldedWith(), null);
if (meld != null) {
hostCard.addRemembered(meld);
}
}
}
if (forget != null) {
hostCard.removeRemembered(movedCard);
@@ -1121,6 +1128,13 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (remember) {
source.addRemembered(movedCard);
// addRememberedFromCardState ?
if (c.getMeldedWith() != null) {
Card meld = game.getCardState(c.getMeldedWith(), null);
if (meld != null) {
source.addRemembered(meld);
}
}
}
if (forget) {
source.removeRemembered(movedCard);

View File

@@ -54,9 +54,9 @@ public class MeldEffect extends SpellAbilityEffect {
}
primary.changeToState(CardStateName.Meld);
primary.setMeldedWith(secondary);
PlayerZoneBattlefield bf = (PlayerZoneBattlefield)controller.getZone(ZoneType.Battlefield);
Card melded = game.getAction().changeZone(primary.getZone(), bf, primary, 0, sa);
game.getAction().changeZone(primary.getZone(), bf, primary, 0, sa);
bf.addToMelded(secondary);
melded.setMeldedWith(secondary);
}
}

View File

@@ -1650,6 +1650,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|| keyword.startsWith("Level up") || keyword.equals("Prowess") || keyword.startsWith("Eternalize")
|| keyword.startsWith("Reinforce") || keyword.startsWith("Champion") || keyword.startsWith("Prowl")
|| keyword.startsWith("Amplify") || keyword.startsWith("Ninjutsu") || keyword.startsWith("Adapt")
|| keyword.startsWith("Transfigure")
|| keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling")) {
// keyword parsing takes care of adding a proper description
} else if (keyword.startsWith("CantBeBlockedByAmount")) {

View File

@@ -4286,17 +4286,33 @@ public class CardFactoryUtil {
suspend.setTemporary(!intrinsic);
inst.addSpellAbility(suspend);
} else if (keyword.startsWith("Transfigure")) {
final String[] k = keyword.split(":");
final String manacost = k[1];
final String effect = "AB$ ChangeZone | Cost$ " + manacost + " Sac<1/CARDNAME>"
+ " | PrecostDesc$ Transfigure | CostDesc$ " + ManaCostParser.parse(manacost)
+ " | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.cmcEQTransfigureX"
+ " | ChangeNum$ 1 | SorcerySpeed$ True | StackDescription$ SpellDescription | SpellDescription$ ("
+ inst.getReminderText() + ")";
final SpellAbility sa = AbilityFactory.getAbility(effect, card);
sa.setSVar("TransfigureX", "Count$CardManaCost");
sa.setIntrinsic(intrinsic);
sa.setTemporary(!intrinsic);
inst.addSpellAbility(sa);
} else if (keyword.startsWith("Transmute")) {
final String[] k = keyword.split(":");
final String manacost = k[1];
final String effect = "AB$ ChangeZone | Cost$ " + manacost + " Discard<1/CARDNAME>"
+ " | PrecostDesc$ Transmute | CostDesc$ " + ManaCostParser.parse(manacost) + " | ActivationZone$ Hand"
+ " | Origin$ Library | Destination$ Hand | ChangeType$ Card.cmcEQ" + card.getManaCost().getCMC()
+ " | Origin$ Library | Destination$ Hand | ChangeType$ Card.cmcEQTransmuteX"
+ " | ChangeNum$ 1 | SorcerySpeed$ True | StackDescription$ SpellDescription | SpellDescription$ ("
+ inst.getReminderText() + ")";
final SpellAbility sa = AbilityFactory.getAbility(effect, card);
sa.setSVar("TransmuteX", "Count$CardManaCost");
sa.setIntrinsic(intrinsic);
sa.setTemporary(!intrinsic);

View File

@@ -43,7 +43,6 @@ import forge.util.TextUtil;
import forge.util.collect.FCollection;
import forge.util.collect.FCollectionView;
import forge.util.maps.MapToAmount;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import java.util.List;
@@ -534,6 +533,7 @@ public class CombatUtil {
List<String> walkTypes = Lists.newArrayList();
// handle basic landwalk and snow basic landwalk
for (int i = 0; i < LANDWALK_KEYWORDS.length; i++) {
final String basic = MagicColor.Constant.BASIC_LANDS.get(i);
final String landwalk = LANDWALK_KEYWORDS[i];
@@ -553,19 +553,24 @@ public class CombatUtil {
String keyword = inst.getOriginal();
if (keyword.equals("Legendary landwalk")) {
walkTypes.add("Land.Legendary");
} else if (keyword.equals("Desertwalk")) {
walkTypes.add("Desert");
} else if (keyword.equals("Nonbasic landwalk")) {
walkTypes.add("Land.nonBasic");
} else if (keyword.equals("Snow landwalk")) {
walkTypes.add("Land.Snow");
} else if (keyword.endsWith("walk")) {
final String landtype = TextUtil.fastReplace(keyword, "walk", "");
String landtype = TextUtil.fastReplace(keyword, "walk", "");
String valid = landtype;
// substract Snow type
if (landtype.startsWith("Snow ")) {
walkTypes.add(landtype.substring(5) + ".Snow");
} else if (CardType.isALandType(landtype)) {
landtype = landtype.substring(5);
valid = landtype + ".Snow";
}
// basic land types are handled before
if (CardType.isALandType(landtype) && !CardType.isABasicLandType(landtype)) {
if (!walkTypes.contains(landtype)) {
walkTypes.add(landtype);
walkTypes.add(valid);
}
}
}
@@ -575,10 +580,10 @@ public class CombatUtil {
return false;
}
final String valid = StringUtils.join(walkTypes, ",");
final String[] valid = walkTypes.toArray(new String[0]);
final CardCollectionView defendingLands = defendingPlayer.getCardsIn(ZoneType.Battlefield);
for (final Card c : defendingLands) {
if (c.isValid(valid.split(","), defendingPlayer, attacker, null)) {
if (c.isValid(valid, defendingPlayer, attacker, null)) {
return true;
}
}

View File

@@ -1115,7 +1115,13 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
}
public final boolean isSurged() {
return surge;
if (surge)
return true;
SpellAbility parent = getParent();
if (parent != null) {
return parent.isSurged();
}
return false;
}
public final void setSurged(final boolean isSurge) {

View File

@@ -6,7 +6,7 @@
<packaging.type>jar</packaging.type>
<build.min.memory>-Xms1024m</build.min.memory>
<build.max.memory>-Xmx1536m</build.max.memory>
<alpha-version>1.6.19.004</alpha-version>
<alpha-version>1.6.20.001</alpha-version>
<sign.keystore>keystore</sign.keystore>
<sign.alias>alias</sign.alias>
<sign.storepass>storepass</sign.storepass>
@@ -19,7 +19,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-android</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-desktop</artifactId>

View File

@@ -457,6 +457,7 @@ public final class CMatchUI
@Override
public void hideZones(final PlayerView controller, final Iterable<PlayerZoneUpdate> zonesToUpdate) {
if ( zonesToUpdate != null ) {
for (final PlayerZoneUpdate update : zonesToUpdate) {
final PlayerView player = update.getPlayer();
for (final ZoneType zone : update.getZones()) {
@@ -477,6 +478,7 @@ public final class CMatchUI
}
}
}
}
// Player's mana pool changes
@Override

View File

@@ -291,6 +291,10 @@ public abstract class CardPanelContainer extends SkinnedPanel {
}
public final void removeCardPanel(final CardPanel fromPanel) {
removeCardPanel(fromPanel,true);
}
public final void removeCardPanel(final CardPanel fromPanel, final boolean repaint) {
FThreads.assertExecutedByEdt(true);
if (getMouseDragPanel() != null) {
CardPanel.getDragAnimationPanel().setVisible(false);
@@ -303,10 +307,12 @@ public abstract class CardPanelContainer extends SkinnedPanel {
fromPanel.dispose();
getCardPanels().remove(fromPanel);
remove(fromPanel);
if ( repaint ) {
invalidate();
repaint();
doingLayout();
}
}
public final void setCardPanels(final List<CardPanel> cardPanels) {
if (cardPanels.size() == 0) {
@@ -325,24 +331,29 @@ public abstract class CardPanelContainer extends SkinnedPanel {
for (final CardPanel cardPanel : cardPanels) {
this.add(cardPanel);
}
this.doLayout();
//pfps the validate just below will do the layout, so don't do it here this.doLayout();
this.invalidate();
this.getParent().validate();
this.repaint();
}
public final void clear() {
clear(true);
}
public final void clear(final boolean repaint) {
FThreads.assertExecutedByEdt(true);
for (final CardPanel p : getCardPanels()) {
p.dispose();
}
getCardPanels().clear();
removeAll();
if ( repaint ) {
setPreferredSize(new Dimension(0, 0));
invalidate();
getParent().validate();
repaint();
}
}
public final FScrollPane getScrollPane() {
return this.scrollPane;

View File

@@ -19,6 +19,7 @@ package forge.view.arcane;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
@@ -52,7 +53,6 @@ public abstract class FloatingCardArea extends CardArea {
protected FPref locPref;
protected boolean hasBeenShown, locLoaded;
protected abstract FDialog getWindow();
protected abstract Iterable<CardView> getCards();
protected FloatingCardArea(final CMatchUI matchUI) {
@@ -71,11 +71,14 @@ public abstract class FloatingCardArea extends CardArea {
onShow();
getWindow().setFocusableWindowState(false); // should probably do this earlier
getWindow().setVisible(false);
getWindow().dispose(); //pfps so that old content does not show up
}
protected void showOrHideWindow() {
onShow();
getWindow().setFocusableWindowState(false); // should probably do this earlier
getWindow().setVisible(!getWindow().isVisible());
if (getWindow().isVisible()) {
hideWindow();
} else {
showWindow();
}
}
protected void onShow() {
if (!hasBeenShown) {
@@ -88,6 +91,35 @@ public abstract class FloatingCardArea extends CardArea {
}
}
@SuppressWarnings("serial")
protected final FDialog window = new FDialog(false, true, "0") {
@Override
public void setLocationRelativeTo(Component c) {
if (hasBeenShown || locLoaded) { return; }
super.setLocationRelativeTo(c);
}
@Override
public void setVisible(boolean b0) {
if (isVisible() == b0) { return; }
if (!b0 && hasBeenShown && locPref != null) {
//update preference before hiding window, as otherwise its location will be 0,0
prefs.setPref(locPref,
getX() + COORD_DELIM + getY() + COORD_DELIM +
getWidth() + COORD_DELIM + getHeight());
//don't call prefs.save(), instead allowing them to be saved when match ends
}
if (b0) {
doRefresh(); // force a refresh before showing to pick up any changes when hidden
hasBeenShown = true;
}
super.setVisible(b0);
}
};
protected FDialog getWindow() {
return window;
}
protected void loadLocation() {
if (locPref != null) {
String value = prefs.getPref(locPref);
@@ -165,11 +197,12 @@ public abstract class FloatingCardArea extends CardArea {
setCardPanels(cardPanels);
getWindow().setTitle(String.format(title, cardPanels.size()));
//if window had cards and now doesn't, hide window
//(e.g. cast final card from Flashback zone)
if (hadCardPanels && cardPanels.size() == 0) {
getWindow().setVisible(false);
}
//pfps - rather suspect, so commented out for now
// //if window had cards and now doesn't, hide window
// //(e.g. cast final card from Flashback zone)
// if (hadCardPanels && cardPanels.size() == 0) {
// getWindow().setVisible(false);
// }
}
@Override

View File

@@ -17,11 +17,11 @@
*/
package forge.view.arcane;
import java.awt.Component;
import java.util.HashMap;
import java.util.Map;
import javax.swing.ScrollPaneConstants;
import javax.swing.WindowConstants;
import forge.assets.FSkinProp;
import forge.game.card.CardView;
@@ -31,9 +31,7 @@ import forge.properties.ForgePreferences.FPref;
import forge.screens.match.CMatchUI;
import forge.toolbox.FScrollPane;
import forge.toolbox.FSkin;
//import forge.util.collect.FCollectionView;
import forge.util.Lang;
import forge.view.FDialog;
public class FloatingZone extends FloatingCardArea {
private static final long serialVersionUID = 1927906492186378596L;
@@ -103,36 +101,6 @@ public class FloatingZone extends FloatingCardArea {
private final ZoneType zone;
private PlayerView player;
@SuppressWarnings("serial")
private final FDialog window = new FDialog(false, true, "0") {
@Override
public void setLocationRelativeTo(Component c) {
//don't change location this way if dialog has already been shown or location was loaded from preferences
if (hasBeenShown || locLoaded) { return; }
super.setLocationRelativeTo(c);
}
@Override
public void setVisible(boolean b0) {
if (isVisible() == b0) { return; }
if (!b0 && hasBeenShown && locPref != null) {
//update preference before hiding window, as otherwise its location will be 0,0
prefs.setPref(locPref,
getX() + COORD_DELIM + getY() + COORD_DELIM +
getWidth() + COORD_DELIM + getHeight());
//don't call prefs.save(), instead allowing them to be saved when match ends
}
super.setVisible(b0);
if (b0) {
refresh();
hasBeenShown = true;
}
}
};
protected FDialog getWindow() {
return window;
}
protected Iterable<CardView> getCards() {
return player.getCards(zone);
}
@@ -140,6 +108,7 @@ public class FloatingZone extends FloatingCardArea {
private FloatingZone(final CMatchUI matchUI, final PlayerView player0, final ZoneType zone0) {
super(matchUI, new FScrollPane(false, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));
window.add(getScrollPane(), "grow, push");
window.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); //pfps so that old content does not reappear?
getScrollPane().setViewportView(this);
setOpaque(false);
switch (zone0) {

View File

@@ -17,7 +17,6 @@
package forge.view.arcane;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
@@ -29,7 +28,6 @@ import java.util.List;
import forge.game.card.CardView;
import forge.screens.match.CMatchUI;
import forge.view.arcane.util.CardPanelMouseAdapter;
import forge.view.FDialog;
import forge.toolbox.FButton;
@@ -50,6 +48,7 @@ public class ListCardArea extends FloatingCardArea {
private ListCardArea(final CMatchUI matchUI) {
super(matchUI);
window.add(getScrollPane(),"grow, push");
window.setModal(true);
getScrollPane().setViewportView(this);
doneButton = new FButton("Done");
doneButton.addActionListener(new ActionListener() {
@@ -77,7 +76,6 @@ public class ListCardArea extends FloatingCardArea {
storedArea.toAnywhere = toAnywhere0;
storedArea.setDragEnabled(true);
storedArea.setVertical(true);
storedArea.doRefresh();
storedArea.showWindow();
return storedArea;
}
@@ -107,36 +105,6 @@ public class ListCardArea extends FloatingCardArea {
return cardList;
}
@SuppressWarnings("serial")
protected final FDialog window = new FDialog(true, true, "0") {
@Override
public void setLocationRelativeTo(Component c) {
if (hasBeenShown || locLoaded) { return; }
super.setLocationRelativeTo(c);
}
@Override
public void setVisible(boolean b0) {
if (isVisible() == b0) { return; }
if (!b0 && hasBeenShown && locPref != null) {
//update preference before hiding window, as otherwise its location will be 0,0
prefs.setPref(locPref,
getX() + COORD_DELIM + getY() + COORD_DELIM +
getWidth() + COORD_DELIM + getHeight());
//don't call prefs.save(), instead allowing them to be saved when match ends
}
super.setVisible(b0);
if (b0) {
refresh();
hasBeenShown = true;
}
}
};
@Override
protected FDialog getWindow() {
return window;
}
@Override
protected void showWindow() {
onShow();
@@ -146,8 +114,8 @@ public class ListCardArea extends FloatingCardArea {
@Override
protected void onShow() {
super.onShow();
if (!hasBeenShown) {
loadLocation();
this.addCardPanelMouseListener(new CardPanelMouseAdapter() {
@Override
public void mouseDragEnd(final CardPanel dragPanel, final MouseEvent evt) {
@@ -208,22 +176,6 @@ public class ListCardArea extends FloatingCardArea {
refresh();
}
// @Override
// protected void refresh() {
// doRefresh();
// }
@Override
public void doLayout() {
// if (window.isResizing()) {
// //delay layout slightly to reduce flicker during window resize
// layoutTimer.restart();
// }
//else {
finishDoLayout();
//}
}
// move to beginning of list if allowable else to beginning of bottom if allowable
@Override
public final void mouseLeftClicked(final CardPanel panel, final MouseEvent evt) {

View File

@@ -620,11 +620,11 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
toDelete.removeAll(notToDelete);
if (toDelete.size() == getCardPanels().size()) {
clear();
clear(false);
}
else {
for (final CardView card : toDelete) {
removeCardPanel(getCardPanel(card.getId()));
removeCardPanel(getCardPanel(card.getId()),false);
}
}
@@ -650,14 +650,16 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
doLayout();
}
invalidate(); //pfps do the extra invalidate before any scrolling
if (!newPanels.isEmpty()) {
int i = newPanels.size();
for (final CardPanel toPanel : newPanels) {
if ( --i == 0 ) { // only scroll to last panel to be added
scrollRectToVisible(new Rectangle(toPanel.getCardX(), toPanel.getCardY(), toPanel.getCardWidth(), toPanel.getCardHeight()));
}
Animation.moveCard(toPanel);
}
}
invalidate();
repaint();
}

View File

@@ -6,13 +6,13 @@
<packaging.type>jar</packaging.type>
<build.min.memory>-Xms128m</build.min.memory>
<build.max.memory>-Xmx2048m</build.max.memory>
<alpha-version>1.6.19.004</alpha-version>
<alpha-version>1.6.20.001</alpha-version>
</properties>
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-ios</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-mobile-dev</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-mobile</artifactId>

View File

@@ -34,7 +34,7 @@ import java.util.List;
import java.util.Stack;
public class Forge implements ApplicationListener {
public static final String CURRENT_VERSION = "1.6.19.004";
public static final String CURRENT_VERSION = "1.6.20.001";
private static final ApplicationListener app = new Forge();
private static Clipboard clipboard;

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
</parent>
<artifactId>forge-gui</artifactId>

View File

@@ -1,15 +1,2 @@
- Desktop GUI -
The Desktop GUI can pop up zones (Library, Graveyard, etc.) allow players to select cards from them when the option UI_SELECT_FROM_CARD_DISPLAYS is set.
The Desktop GUI outlines the selectable cards in many situations. This is not done when playing mana costs.
- Digging -
Multi-card digging (e.g., for Genesis Wave) is done as a single multiple-card selection instead of a sequence of single-card selections.
- Game Night -
Support was added for the Game Night box set, including all 10 exclusive cards.
- AI improvements -
More AI improvements were implemented, hopefully making the game a little more interesting and challenging to play.
- Bug fixes -
As always, this release of Forge features an assortment of bug fixes and improvements based on user feedback during the previous release run.

View File

@@ -0,0 +1,7 @@
Name:Angelic Reward
ManaCost:3 W W
Types:Enchantment Aura
K:Enchant creature
A:SP$ Attach | Cost$ 3 W W | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 3 | AddToughness$ 3 | AddKeyword$ Flying | Description$ Enchanted creature gets +3/+3 and has flying.
Oracle:Enchant creature\nEnchanted creature gets +3/+3 and has flying.

View File

@@ -2,7 +2,11 @@ Name:Awaken the Erstwhile
ManaCost:3 B B
Types:Sorcery
A:SP$ RepeatEach | Cost$ 3 B B | RepeatPlayers$ Player | RepeatSubAbility$ DBDiscard | SpellDescription$ Each player discards all the cards in their hand, then creates that many 2/2 black Zombie creature tokens.
SVar:DBToken:DB$ Token | TokenAmount$ X | TokenScript$ b_2_2_zombie | TokenOwner$ You | LegacyImage$ b 2 2 zombie rna | References$ X
SVar:DBDiscard:DB$ Discard | Defined$ Player.IsRemembered | Mode$ Hand | RememberDiscarded$ True | SubAbility$ DBToken
SVar:DBToken:DB$ Token | TokenAmount$ X | TokenScript$ b_2_2_zombie | TokenOwner$ Player.IsRemembered | LegacyImage$ b 2 2 zombie rna | References$ X | SubAbility$ DBCleanup
SVar:X:Remembered$Amount
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
DeckHas:Ability$Discard
DeckHas:Ability$Token
DeckHints:Keyword$Madness & Ability$Delirium
Oracle:Each player discards all the cards in their hand, then creates that many 2/2 black Zombie creature tokens.

View File

@@ -0,0 +1,6 @@
Name:Blinding Radiance
ManaCost:2 W
Types:Sorcery
A:SP$ TapAll | Cost$ 2 W | ValidCards$ Creature.OppCtrl+toughnessLE2 | SpellDescription$ Tap all creatures your opponents control with toughness 2 or less.
Oracle:Tap all creatures your opponents control with toughness 2 or less.

View File

@@ -1,26 +1,18 @@
# TODO: -- THIS SCRIPT NEEDS REWRITING (non-functional) --
Name:Captive Audience
ManaCost:5 B R
Types:Enchantment
K:CARDNAME enters the battlefield under the control of your choice.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of your upkeep, choose one that hasn't been chosen -PB/-greater for each opponent of your choice.
SVar:TrigChoose:DB$ ChooseCard | Defined$ You | Choices$ Player.Opponent | Mandatory$ True | SubAbility$ DBChangeZone
SVar:DBChangeZone:DB$ ChangeZone | Defined$ Self | Origin$ All | Destination$ Battlefield | GainControl$ True
SVar:RemRandomDeck:True
K:CARDNAME enters the battlefield under the control of your choice.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of your upkeep, choose one that hasn't been chosen -PB/-greater for each opponent of your choice.
SVar:TrigChoose:DB$ ChooseCard | Defined$ You | Choices$ Player.Opponent | Mandatory$ True | SubAbility$ DBChangeZone
SVar:DBChangeZone:DB$ ChangeZone | Defined$ Self | Origin$ All | Destination$ Battlefield | GainControl$ True
SVar:RemRandomDeck:True
K:CARDNAME enters the battlefield under the control of your choice.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of your upkeep, choose one that hasn't been chosen -PB/-greater for each opponent of your choice.
SVar:TrigChoose:DB$ ChooseCard | Defined$ You | Choices$ Player.Opponent | Mandatory$ True | SubAbility$ DBChangeZone
SVar:DBChangeZone:DB$ ChangeZone | Defined$ Self | Origin$ All | Destination$ Battlefield | GainControl$ True
SVar:RemRandomDeck:True
K:CARDNAME enters the battlefield under the control of your choice.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of your upkeep, choose one that hasn't been chosen -PB/-greater for each opponent of your choice.
SVar:TrigChoose:DB$ ChooseCard | Defined$ You | Choices$ Player.Opponent | Mandatory$ True | SubAbility$ DBChangeZone
SVar:DBChangeZone:DB$ ChangeZone | Defined$ Self | Origin$ All | Destination$ Battlefield | GainControl$ True
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoose | Static$ True | TriggerDescription$ CARDNAME enters the battlefield under the control of an opponent of your choice.
SVar:TrigChoose:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent to give control to: | AILogic$ Curse | SubAbility$ DBDonate | SpellDescription$ CARDNAME enters the battlefield under the control of an opponent of your choice.
SVar:DBDonate:DB$ GainControl | Defined$ Self | NewController$ Player.Chosen | SubAbility$ ClearRemembered
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigCharm | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, choose one that hasn't been chosen
SVar:TrigCharm:DB$ Charm | Choices$ LifePact,DiscardPact,ZombiesPact | ChoiceRestriction$ NotRemembered | RememberChoice$ True | CharmNum$ 1
SVar:LifePact:DB$ SetLife | Defined$ You | LifeAmount$ 4 | ChoiceName$ LifePact | SpellDescription$ Your life total becomes 4.
SVar:DiscardPact:DB$ Discard | Defined$ You | Mode$ Hand | ChoiceName$ DiscardPact | SpellDescription$ Discard your hand.
SVar:ZombiesPact:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ MakeZombies | ChoiceName$ ZombiesPact | SpellDescription$ Each opponent creates five 2/2 black Zombie creature tokens.
SVar:MakeZombies:DB$ Token | TokenImage$ b 2 2 zombie rna | TokenAmount$ 5 | TokenName$ Zombie | TokenTypes$ Creature,Zombie | TokenOwner$ Remembered | TokenColors$ black | TokenPower$ 2 | TokenToughness$ 2 | SpellDescription$ Each opponent creates five 2/2 black Zombie creature tokens.
# Clear RememberChoice just in case it's not getting cleared by Zone changes
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ClearRemembered | Static$ True
SVar:ClearRemembered:DB$ Cleanup | ClearRemembered$ True
SVar:RemRandomDeck:True
DeckHas:Ability$Token
Oracle:Captive Audience enters the battlefield under the control of an opponent of your choice.\nAt the beginning of your upkeep, choose one that hasn't been chosen —\n• Your life total becomes 4.\n• Discard your hand.\n• Each opponent creates five 2/2 black Zombie creature tokens.

View File

@@ -2,7 +2,7 @@ Name:Carnival
ManaCost:BR
AlternateMode: Split
Types:Instant
A:SP$ DealDamage | Cost$ BR BR | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ 1 | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 1 damage to target creature or planeswalker and 1 damage to that permanents controller.
A:SP$ DealDamage | Cost$ BR | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ 1 | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 1 damage to target creature or planeswalker and 1 damage to that permanents controller.
SVar:DBDealDamage:DB$ DealDamage | Defined$ TargetedController | NumDmg$ 1
Oracle:Carnival deals 1 damage to target creature or planeswalker and 1 damage to that permanents controller.

View File

@@ -2,5 +2,5 @@ Name:Clear the Stage
ManaCost:4 B
Types:Instant
A:SP$ Pump | Cost$ 4 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -3 | NumDef$ -3 | IsCurse$ True | SubAbility$ DBChangeZone | SpellDescription$ Target creature gets -3/-3 until end of turn. If you control a creature with power 4 or greater, you may return up to one target creature card from your graveyard to your hand.
SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.YouCtrl | TargetMin$ 0 | TargetMax$ 1 | TargetsWithDefinedController$ ParentTarget | ConditionPresent$ Creature.YouCtrl+powerGE4
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.YouCtrl | TargetMin$ 0 | TargetMax$ 1 | TargetsWithDefinedController$ ParentTarget | ConditionPresent$ Creature.YouCtrl+powerGE4
Oracle:Target creature gets -3/-3 until end of turn. If you control a creature with power 4 or greater, you may return up to one target creature card from your graveyard to your hand.

View File

@@ -0,0 +1,5 @@
Name:Confront the Assault
ManaCost:4 W
Types:Instant
A:SP$ Token | Cost$ 4 W | IsPresent$ Creature.attackingYou | TokenImage$ w 1 1 spirit ISD | TokenAmount$ 3 | TokenName$ Spirit | TokenTypes$ Creature,Spirit | TokenOwner$ You | TokenColors$ White | TokenPower$ 1 | TokenToughness$ 1 | TokenKeywords$ Flying | SpellDescription$ Cast this spell only if a creature is attacking you. Create three 1/1 white Spirit creature tokens with flying.
Oracle:Cast this spell only if a creature is attacking you.\n\nCreate three 1/1 white Spirit creature tokens with flying.

View File

@@ -11,10 +11,11 @@ ALTERNATE
Name:Consume
ManaCost:2 W B
Types:Sorcery
A:SP$ Pump | Cost$ 2 W B | ValidTgts$ Player | RememberTargets$ True | SubAbility$ DBChooseCard | SpellDescription$ Target player sacrifices a creature with the greatest power among creatures they control. You gain life equal to its power.
A:SP$ Pump | Cost$ 2 W B | ValidTgts$ Player | IsCurse$ True | RememberTargets$ True | SubAbility$ DBChooseCard | SpellDescription$ Target player sacrifices a creature with the greatest power among creatures they control. You gain life equal to its power.
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | Mandatory$ True | SubAbility$ DBSac
SVar:DBSac:DB$ Sacrifice | Defined$ Player.IsRemembered | SacValid$ Card.ChosenCard | RememberSacrificed$ True | SubAbility$ DBGainLife | SacMessage$ the creature with the highest power
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ X | References$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:RememberedLKI$CardPower
SVar:NeedsToPlay:Creature.OppCtrl
Oracle:Target player sacrifices a creature with the greatest power among creatures they control. You gain life equal to its power.

View File

@@ -0,0 +1,5 @@
Name:Cruel Cut
ManaCost:1 B
Types:Instant
A:SP$ Destroy | Cost$ 1 B | ValidTgts$ Creature.powerLE2 | TgtPrompt$ Select target creature | SpellDescription$ Destroy target creature with power 2 or less.
Oracle:Destroy target creature with power 2 or less.

View File

@@ -1,6 +1,6 @@
Name:Cry of the Carnarium
ManaCost:1 B B
Types:Sorcery
A:SP$ PumpAll | Cost$ 1 B B | ValidCards$ Creature | NumAtt$ -2 | NumDef$ -2 | IsCurse$ True | SubAbility$ DBCopy | SpellDescription$ All creatures get -2/-2 until end of turn. Exile all creature cards in all graveyards that were put there from the battlefield this turn. If a creature would die this turn, exile it instead.
SVar:Exile:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | ChangeType$ Creature | Mandatory$ True
A:SP$ PumpAll | Cost$ 1 B B | ValidCards$ Creature | NumAtt$ -2 | NumDef$ -2 | IsCurse$ True | ReplaceDyingValid$ Creature | SubAbility$ ExileSomeCreatures | SpellDescription$ All creatures get -2/-2 until end of turn. Exile all creature cards in all graveyards that were put there from the battlefield this turn. If a creature would die this turn, exile it instead.
SVar:ExileSomeCreatures:DB$ ChangeZone | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Creature.nonToken | Origin$ Graveyard | Destination$ Exile | SpellDescription$ Exile all creature cards in all graveyards that were put there from the battlefield this turn.
Oracle:All creatures get -2/-2 until end of turn. Exile all creature cards in all graveyards that were put there from the battlefield this turn. If a creature would die this turn, exile it instead.

View File

@@ -4,7 +4,7 @@ Types:Creature Vedalken Wizard
PT:1/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target nonland permanent an opponent controls and all other nonland permanents that player controls with the same name as that permanent until CARDNAME leaves the battlefield.
SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent.nonLand+OppCtrl | TgtPrompt$ Select target nonland permanent an opponent controls | RememberTargets$ True | SubAbility$ DBChangeZoneAll
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Remembered.sameName+OppCtrl | RememberChanged$ True | SubAbility$ DBEffect
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Remembered.sameName+ControlledBy TargetedOrController | RememberChanged$ True | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | Triggers$ ComeBack | RememberObjects$ Remembered | ImprintCards$ Self | SVars$ TrigReturn,ExileSelf | ConditionPresent$ Card.Self | Duration$ Permanent | ForgetOnMoved$ Exile | SubAbility$ DBCleanup
SVar:ComeBack:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ TrigReturn | TriggerZones$ Command | TriggerController$ TriggeredCardController | Static$ True | TriggerDescription$ Those permanents are exiled until EFFECTSOURCE leaves the battlefield
SVar:TrigReturn:DB$ ChangeZoneAll | Origin$ Exile | Destination$ Battlefield | ChangeType$ Card.IsRemembered | SubAbility$ ExileSelf

View File

@@ -6,5 +6,5 @@ A:AB$ Mana | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Produced$ Combo
A:AB$ Dig | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ForceRevealToController$ True | DigNum$ 4 | ChangeNum$ 2 | Optional$ True | ChangeValid$ Creature | RestRandomOrder$ True | SpellDescription$ Look at the top four cards of your library. You may reveal up to two creature cards from among them and put them into your hand. Put the rest on the bottom of your library in a random order.
A:AB$ Effect | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem - Domri, Chaos Bringer | Image$ emblem_domri_chaos_bringer | Triggers$ EffPhase | SVars$ EmblemTrigToken | Duration$ Permanent | SpellDescription$ You get an emblem with “At the beginning of each end step, create a 4/4 red and green Beast creature token with trample.”
SVar:EffPhase:Mode$ Phase | Phase$ End of Turn | Execute$ EmblemTrigToken | TriggerDescription$ At the beginning of each end step, create a 4/4 red and green Beast creature token with trample.
SVar:EmblemTrigToken:DB$ Token | TokenOwner$ You | TokenAmount$ 1 | TokenPower$ 4 | TokenToughness$ 4 | TokenColors$ Red,Green | TokenTypes$ Creature,Beast | TokenKeywords$ Trample | TokenImage$ rg 4 4 beast rna
SVar:EmblemTrigToken:DB$ Token | TokenOwner$ You | TokenAmount$ 1 | TokenPower$ 4 | TokenToughness$ 4 | TokenColors$ Red,Green | TokenTypes$ Creature,Beast | TokenKeywords$ Trample | TokenImage$ rg 4 4 beast trample rna
Oracle:+1: Add {R} or {G}. If that mana is spent on a creature spell, it gains riot. (It enters the battlefield with your choice of a +1/+1 counter or haste.)\n3: Look at the top four cards of your library. You may reveal up to two creature cards from among them and put them into your hand. Put the rest on the bottom of your library in a random order.\n8: You get an emblem with “At the beginning of each end step, create a 4/4 red and green Beast creature token with trample.”

View File

@@ -8,5 +8,5 @@ SVar:TrigPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ LOYALTY
A:AB$ Token | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | TokenAmount$ 1 | TokenScript$ c_1_1_a_thopter_flying | TokenOwner$ You | LegacyImage$ c 1 1 a thopter flying rna | SubAbility$ DBGainLife | SpellDescription$ Create a 1/1 colorless Thopter artifact creature token with flying.
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 | SpellDescription$ You gain 1 life.
DeckHas:Ability$Token
A:AB$ Dig | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | DigNum$ 10 | ChangeNum$ 3 | DestinationZone$ Hand | DestinationZone2$ Library | LibraryPosition$ -1 | RestRandomOrder$ True | SpellDescription$ Look at the top ten cards of your library. Put three of them into your hand and the rest on the bottom of your library in a random order.
A:AB$ Dig | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | DigNum$ 10 | ChangeNum$ 3 | DestinationZone$ Hand | DestinationZone2$ Library | LibraryPosition$ -1 | RestRandomOrder$ True | SpellDescription$ Look at the top ten cards of your library. Put three of them into your hand and the rest on the bottom of your library in a random order.
Oracle:[+1]: Until end of turn, whenever a creature you control deals combat damage to a player, put a loyalty counter on Dovin, Grand Arbiter.\n[-1]: Create a 1/1 colorless Thopter artifact creature token with flying. You gain 1 life.\n[-7]: Look at the top ten cards of your library. Put three of them into your hand and the rest on the bottom of your library in a random order.

View File

@@ -1,7 +1,7 @@
Name:Druid of Horns
ManaCost:3 G
Types:Creature Human Druid
T:Mode$ SpellCast | ValidCard$ Aura | ValidActivatingPlayer$ You | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast an Aura spell that targets CARDNAME, create a 3/3 green Beast creature token.
T:Mode$ SpellCast | ValidCard$ Aura | ValidActivatingPlayer$ You | TargetsValid$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast an Aura spell that targets CARDNAME, create a 3/3 green Beast creature token.
SVar:TrigToken:DB$ Token | TokenOwner$ You | TokenAmount$ 1 | TokenPower$ 3 | TokenToughness$ 3 | TokenColors$ Green | TokenName$ Beast | TokenTypes$ Beast,Creature | TokenImage$ g 3 3 beast m19
DeckHas:Ability$Token
Oracle:Whenever you cast an Aura spell that targets Druid of Horns, create a 3/3 green Beast creature token.

View File

@@ -3,5 +3,5 @@ ManaCost:2 U
Types:Enchantment
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigScry | TriggerDescription$ At the beginning of your upkeep, scry 1.
SVar:TrigScry:DB$ Scry | ScryNum$ 1
A:AB$ ExchangeControl | Cost$ 2 U | Defined$ Self | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | SorcerySpeed$ True | SpellDescription$ Exchange control of CARDNAME and target nonland permanent. Activate this ability only any time you could cast a sorcery.
A:AB$ ExchangeControl | Cost$ 5 U | Defined$ Self | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | SorcerySpeed$ True | SpellDescription$ Exchange control of CARDNAME and target nonland permanent. Activate this ability only any time you could cast a sorcery.
Oracle:At the beginning of your upkeep, scry 1.\n{5}{U}: Exchange control of Eyes Everywhere and target nonland permanent. Activate this ability only any time you could cast a sorcery.

View File

@@ -0,0 +1,5 @@
Name:Feral Roar
ManaCost:1 G
Types:Sorcery
A:SP$ Pump | Cost$ 1 G | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +4 | NumDef$ +4 | SpellDescription$ Target creature gets +4/+4 until end of turn.
Oracle:Target creature gets +4/+4 until end of turn.

View File

@@ -8,4 +8,5 @@ SVar:TrigSacrifice:DB$ Sacrifice | Optional$ True | SacValid$ Creature | Amount$
SVar:TrigImmediate:DB$ ImmediateTrigger | Execute$ TrigDealDamage | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ GE1 | TriggerDescription$ When you do, CARDNAME deals 2 damage to target opponent or planeswalker.
SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Opponent,Planeswalker | TgtPrompt$ Select target opponent or planeswalker | NumDmg$ 2 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
AI:RemoveDeck:All
Oracle:Haste\nAt the beginning of your upkeep, you may sacrifice a creature. When you do, Fireblade Artist deals 2 damage to target opponent or planeswalker.

View File

@@ -2,6 +2,7 @@ Name:Flames of the Raze-Boar
ManaCost:5 R
Types:Instant
A:SP$ DealDamage | Cost$ 5 R | NumDmg$ 4 | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 4 damage to target creature an opponent controls. Then CARDNAME deals 2 damage to each other creature that player controls if you control a creature with power 4 or greater.
SVar:DBDealDamage:DB$ DamageAll | NumDmg$ 2 | ValidCards$ Creature.attacking+YouCtrl+powerGE4 | SubAbility$ DBCleanup
SVar:DBDealDamage:DB$ DamageAll | NumDmg$ 2 | ValidCards$ Creature.ControlledBy TargetedOrController | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | References$ X| SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$Valid Creature.powerGE4+YouCtrl
Oracle:Flames of the Raze-Boar deals 4 damage to target creature an opponent controls. Then Flames of the Raze-Boar deals 2 damage to each other creature that player controls if you control a creature with power 4 or greater.

View File

@@ -2,6 +2,6 @@ Name:Fleshwrither
ManaCost:2 B B
Types:Creature Horror
PT:3/3
A:AB$ ChangeZone | Cost$ 1 B B Sac<1/CARDNAME> | CostDesc$ Transfigure {1}{B}{B} | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.cmcEQ4 | ChangeNum$ 1 | SorcerySpeed$ True | SpellDescription$ ({1}{B}{B} , Sacrifice this creature: Search your library for a creature card with the same converted mana cost as this creature and put that card onto the battlefield. Then shuffle your library. Transfigure only as a sorcery.)
K:Transfigure:1 B B
SVar:Picture:http://www.wizards.com/global/images/magic/general/fleshwrither.jpg
Oracle:Transfigure {1}{B}{B} ({1}{B}{B}, Sacrifice this creature: Search your library for a creature card with the same converted mana cost as this creature and put that card onto the battlefield. Then shuffle your library. Transfigure only as a sorcery.)

View File

@@ -1,7 +1,7 @@
Name:Giantbaiting
ManaCost:2 RG
Types:Sorcery
A:SP$ Token | Cost$ 2 RG | TokenScript$ rb_4_4_giant_warrior_haste | AtEOT$ Exile | SpellDescription$ Create a 4/4 red and green Giant Warrior creature token with haste. Exile it at the beginning of the next end step.
A:SP$ Token | Cost$ 2 RG | TokenScript$ rg_4_4_giant_warrior_haste | AtEOT$ Exile | SpellDescription$ Create a 4/4 red and green Giant Warrior creature token with haste. Exile it at the beginning of the next end step.
K:Conspire
DeckHas:Ability$Token
SVar:Picture:http://www.wizards.com/global/images/magic/general/giantbaiting.jpg

View File

@@ -0,0 +1,4 @@
Name:Goblin Bruiser
ManaCost:1 R R
Types:Creature Goblin Warrior
PT:3/3

View File

@@ -0,0 +1,7 @@
Name:Goblin Gang Leader
ManaCost:2 R R
Types:Creature Goblin Warrior
PT:2/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create two 1/1 red Goblin creature tokens.
SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenName$ Goblin | TokenTypes$ Creature,Goblin | TokenOwner$ You | TokenColors$ Red | TokenPower$ 1 | TokenToughness$ 1
Oracle:When Goblin Gang Leader enters the battlefield, create two 1/1 red Goblin creature tokens.

View File

@@ -0,0 +1,8 @@
Name:Inspiring Commander
ManaCost:4 W W
Types:Creature Human Soldier
PT:1/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.powerLE2+YouCtrl+Other | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever another creature with power 2 or less enters the battlefield under your control, you gain 1 life and draw a card.
SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 1 | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1
Oracle:Whenever another creature with power 2 or less enters the battlefield under your control, you gain 1 life and draw a card.

View File

@@ -6,8 +6,8 @@ A:AB$ ChangeZone | Cost$ AddCounter<1/LOYALTY> | Origin$ Graveyard | Destination
SVar:DBGainLife:DB$GainLife | Defined$ You | LifeAmount$ 2 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | References$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$ValidExile
A:AB$ ChangeZone | Cost$ -1/-1/Card.nonLand/nonland permanent with converted mana cost 1 or less> | Planeswalker$ True | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Choose target nonland permanent with converted mana cost 1 or less | ValidTgts$ Permanent.nonLand+cmcLE1 | SpellDescription$ Exile target nonland permanent with converted mana cost 1 or less.
A:AB$ DealDamage | Cost$ PayLife<5/-5/Card> | Planeswalker$ True | Ultimate$ True | ValidTgts$ Player | NumDmg$ X | References$ X | SubAbility$ DBYouGainLife | SpellDescription$ CARDNAME deals damage to target player equal to the number of cards that player owns in exile and you gain that much life.
A:AB$ ChangeZone | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Choose target nonland permanent with converted mana cost 1 or less | ValidTgts$ Permanent.nonLand+cmcLE1 | SpellDescription$ Exile target nonland permanent with converted mana cost 1 or less.
A:AB$ DealDamage | Cost$ SubCounter<5/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidTgts$ Player | NumDmg$ X | References$ X | SubAbility$ DBYouGainLife | SpellDescription$ CARDNAME deals damage to target player equal to the number of cards that player owns in exile and you gain that much life.
SVar:DBYouGainLife:DB$ GainLife | Defined$ You | LifeAmount$ X | References$ X
SVar:X:TargetedPlayer$CardsInExile
DeckHas:Ability$LifeGain

View File

@@ -3,6 +3,6 @@ ManaCost:W W B B
Types:Sorcery
A:SP$ DestroyAll | Cost$ W W B B | ValidCards$ Creature | RememberDestroyed$ True | SubAbility$ DBGainLife | SpellDescription$ Destroy all creatures. You gain life equal to the number of creatures you controlled that were destroyed this way.
SVar:DBGainLife:DB$ GainLife | LifeAmount$ X | References$ X
SVar:X:RememberedLKI$FilterControlledByRemembered_Number$1
SVar:X:RememberedLKI$FilterControlledByYou_Number$1
DeckHas:Ability$LifeGain
Oracle:Destroy all creatures. You gain life equal to the number of creatures you controlled that were destroyed this way.

View File

@@ -2,8 +2,8 @@ Name:Light Up the Stage
ManaCost:2 R
Types:Sorcery
K:Spectacle:R
A:SP$ Mill | Cost$ 2 R | Defined$ You | NumCards$ 2 | Destination$ Exile | RememberMilled$ True | SubAbility$ DBStoreTurn | SpellDescription$ Exile the top two cards of your library. Until the end of your next turn, you may play those cards.
SVar:DBStoreTurn:DB$ StoreSVar | SVar$ CurrentTurn | Type$ Count | Expression$ YourTurns | SubAbility$ DBMayBePlay
SVar:DBMayBePlay:DB$ Effect | StaticAbilities$ STCommuned | Duration$ Permanent | RememberObjects$ Remembered | Triggers$ TrigDuration | SVars$ DBDuration,EndDuration,CurrentTurn | SubAbility$ DBCleanup | ExileOnMoved$ Exile
A:SP$ Mill | Cost$ 2 R | Defined$ You | NumCards$ 2 | Destination$ Exile | RememberMilled$ True | SubAbility$ DBMayBePlay | SpellDescription$ Exile the top two cards of your library. Until the end of your next turn, you may play those cards.
SVar:DBMayBePlay:DB$ Effect | StaticAbilities$ STCommuned | Duration$ UntilTheEndOfYourNextTurn | RememberObjects$ Remembered | ForgetOnMoved$ Exile
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:STCommuned:Mode$ Continuous | Affected$ Card.IsRemembered | EffectZone$ Command | AffectedZone$ Exile | MayPlay$ True | Description$ Until the end of your next turn, you may play those cards.
Oracle:Spectacle {R} (You may cast this spell for its spectacle cost rather than its mana cost if an opponent lost life this turn.)\nExile the top two cards of your library. Until the end of your next turn, you may play those cards.

View File

@@ -0,0 +1,6 @@
Name:Nimble Pilferer
ManaCost:1 B
Types:Creature Human Rogue
PT:2/1
K:Flash
Oracle:Flash

View File

@@ -0,0 +1,7 @@
Name:Ogre Painbringer
ManaCost:3 R R
Types:Creature Ogre
PT:7/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDmg | TriggerDescription$ When CARDNAME enters the battlefield, it deals 3 damage to each player.
SVar:TrigDmg:DB$ DamageAll | Cost$ 3 R R | NumDmg$ 3 | ValidPlayers$ Player | ValidDescription$ each player. | SpellDescription$ CARDNAME deals 3 damage to each player.
Oracle:When Ogre Painbringer enters the battlefield, it deals 3 damage to each player.

View File

@@ -1,5 +1,5 @@
Name:Plaza of Harmony
ManaCost:
ManaCost:no cost
Types:Land
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Gate.YouCtrl | PresentCompare$ GE2 | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME enters the battlefield, if you control two or more Gates, gain 3 life.
SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 3

View File

@@ -4,8 +4,10 @@ Types:Legendary Creature Demon
PT:6/6
K:Flying
K:Trample
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ EachCr | TriggerDescription$ When CARDNAME enters the battlefield, flip a coin for each creature that isn't a Demon, Devil, or Imp. Destroy each creature whose coin comes up tails.
SVar:EachCr:DB$ RepeatEach | RepeatCards$ Creature.nonDemon+nonDevil+nonImp | Zone$ Battlefield | RepeatSubAbility$ TrigFlip
SVar:TrigFlip:DB$ FlipACoin | NoCall$ True | TailsSubAbility$ DBDestroy
SVar:DBDestroy:DB$ Destroy | Defined$ Remembered
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigFlip | TriggerDescription$ When CARDNAME enters the battlefield, flip a coin for each creature that isn't a Demon, Devil, or Imp. Destroy each creature whose coin comes up tails.
SVar:TrigFlip:DB$ RepeatEach | RepeatCards$ Creature.nonDemon+nonDevil+nonImp | Zone$ Battlefield | UseImprinted$ True | RepeatSubAbility$ DBFlip | SubAbility$ DBDestroy
SVar:DBFlip:DB$ FlipACoin | NoCall$ True | TailsSubAbility$ DBRememberCreature
SVar:DBRememberCreature:DB$ Pump | Defined$ Imprinted | RememberObjects$ Imprinted
SVar:DBDestroy:DB$ DestroyAll | ValidCards$ Creature.IsRemembered | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
Oracle:Flying, trample\nWhen Rakdos, the Showstopper enters the battlefield, flip a coin for each creature that isn't a Demon, Devil, or Imp. Destroy each creature whose coin comes up tails.

View File

@@ -2,7 +2,7 @@ Name:Revival
ManaCost:WB WB
AlternateMode: Split
Types:Sorcery
A:SP$ ChangeZone | Cost$ WB WB | Origin$ Graveyard | Destination$ Battlefield | TgtPrompt$ Choose target creature in your graveyard | ValidTgts$ Creature.YouCtrl+cmcLE3 | SpellDescription$ Return target creature card with converted mana cost 3 or less from your graveyard to the battlefield.
A:SP$ ChangeZone | Cost$ WB WB | Origin$ Graveyard | Destination$ Battlefield | TgtPrompt$ Choose target creature in your graveyard | ValidTgts$ Creature.YouOwn+cmcLE3 | SpellDescription$ Return target creature card with converted mana cost 3 or less from your graveyard to the battlefield.
Oracle:Return target creature card with converted mana cost 3 or less from your graveyard to the battlefield.
ALTERNATE
@@ -11,7 +11,7 @@ Name:Revenge
ManaCost:4 W B
Types:Sorcery
A:SP$ GainLife | Cost$ 4 W B | LifeAmount$ X | References$ X | SubAbility$ DBLoseHalf | SpellDescription$ Double your life total. Target opponent loses half their life, rounded up.
SVar:DBLoseHalf:DB$ LoseLife | Cost$ 4 B B | ValidTgts$ Opponent | LifeAmount$ Y | References$ Y
SVar:DBLoseHalf:DB$ LoseLife | ValidTgts$ Opponent | LifeAmount$ Y | References$ Y
SVar:X:Count$YourLifeTotal
SVar:Y:Count$TargetedLifeTotal/HalfUp
Oracle:Double your life total. Target opponent loses half their life, rounded up.

View File

@@ -0,0 +1,7 @@
Name:River's Favor
ManaCost:U
Types:Enchantment Aura
K:Enchant creature
A:SP$ Attach | Cost$ U | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | Description$ Enchanted creature gets +1/+1.
Oracle:Enchant creature\nEnchanted creature gets +1/+1.

View File

@@ -2,8 +2,10 @@ Name:Rumbling Ruin
ManaCost:5 R
Types:Creature Elemental
PT:6/6
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerDescription$ When CARDNAME enters the battlefield, your number of +1/+1 counters on creatures you control. Creatures your opponents control with power less than or equal to that number can't block this turn.
SVar:TrigEffect:DB$Effect | Name$ CARDNAME Effect | StaticAbilities$ KWPump
SVar:KWPump:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl+powerLTY | AddHiddenKeyword$ CARDNAME can't block. | Description$ Creatures your opponents control with power less than or equal to that number can't block this turn.
# TODO: -- THIS SCRIPT NEEDS FIXING (doesn't have the count var) --
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigStore | TriggerDescription$ When CARDNAME enters the battlefield, count the number of +1/+1 counters on creatures you control. Creatures your opponents control with power less than or equal to that number can't block this turn.
SVar:TrigStore:DB$ StoreSVar | SVar$ X | Type$ CountSVar | Expression$ Y | References$ Y | SubAbility$ TrigEffect
SVar:TrigEffect:DB$Effect | Name$ Rumbling Ruin Effect | StaticAbilities$ KWPump | SVars$ X | SpellDescription$ Creatures your opponents control with power less than or equal to that number can't block this turn.
SVar:KWPump:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.OppCtrl+powerLEX | References$ X | AddHiddenKeyword$ CARDNAME can't block. | Description$ Creatures your opponents control with power less than or equal to that number can't block this turn.
SVar:X:Number$0
SVar:Y:Count$TotalCounters_P1P1_Creature.YouCtrl
Oracle:When Rumbling Ruin enters the battlefield, count the number of +1/+1 counters on creatures you control. Creatures your opponents control with power less than or equal to that number can't block this turn.

View File

@@ -4,6 +4,7 @@ Types:Legendary Planeswalker Sarkhan
A:AB$ DamageAll | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | ValidPlayers$ Player.Opponent | ValidCards$ Creature.OppCtrl | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to each opponent and each creature your opponents control.
A:AB$ DealDamage | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | AILogic$ ChoiceBurn | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to target player or planeswalker.
A:AB$ ChangeZone | Cost$ SubCounter<9/LOYALTY> | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.Dragon | ChangeNum$ XFetch | Planeswalker$ True | Ultimate$ True | StackDescription$ SpellDescription | References$ XFetch | SpellDescription$ Search your library for any number of Dragon creature cards, put them onto the battlefield, then shuffle your library.
SVar:XFetch:Count$InYourLibrary.Creature.Dragon
DeckHints:Type$Dragon
Oracle:[+2]: Sarkhan, Dragonsoul deals 1 damage to each opponent and each creature your opponents control.\n[3]: Sarkhan, Dragonsoul deals 4 damage to target player or planeswalker.\n[9]: Search your library for any number of Dragon creature cards, put them onto the battlefield, then shuffle your library.
Loyalty:5

View File

@@ -0,0 +1,4 @@
Name:Shorecomber Crab
ManaCost:U
Types:Creature Crab
PT:0/4

View File

@@ -0,0 +1,4 @@
Name:Shrine Keeper
ManaCost:1 W
Types:Creature Human Cleric
PT:2/2

View File

@@ -3,6 +3,7 @@ ManaCost:3 R R
Types:Creature Dragon
PT:4/4
K:Riot
K:Flying
A:AB$ DealDamage | Cost$ 3 R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target to distribute damage to | NumDmg$ 2 | TargetMin$ 1 | TargetMax$ 2 | DividedAsYouChoose$ 2 | IsPresent$ Card.Self+counters_GE1_P1P1 | SpellDescription$ CARDNAME deals 2 damage divided as you choose among one or two targets. Activate this ability only if CARDNAME has a +1/+1 counter on it.
DeckHints:Ability$Counters
Oracle:Riot (This creature enters the battlefield with your choice of a +1/+1 counter or haste.)\nFlying\n{3}{R}: Skarrgan Hellkite deals 2 damage divided as you choose among one or two targets. Activate this ability only if Skarrgan Hellkite has a +1/+1 counter on it.

View File

@@ -0,0 +1,8 @@
Name:Soulhunter Rakshasa
ManaCost:3 B B
Types:Creature Cat Demon
PT:5/5
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDmg | TriggerDescription$ When CARDNAME enters the battlefield, it deals 5 damage to target opponent.
SVar:TrigDmg:DB$ DealDamage | Cost$ 3 B B | NumDmg$ 5 | ValidTgts$ Opponent | TgtPrompt$ Choose target opponent. | SpellDescription$ CARDNAME deals 5 damage to target opponent.
K:CARDNAME can't block.
Oracle:Soulhunter Rakshasa can't block.\nWhen Soulhunter Rakshasa enters the battlefied, it deals 5 damage to target opponent.

View File

@@ -0,0 +1,5 @@
Name:Tactical Advantage
ManaCost:W
Types:Instant
A:SP$ Pump | Cost$ W | ValidTgts$ Creature.blocking+YouCtrl,Creature.blocked+YouCtrl | TgtPrompt$ Select target blocking or blocked creature you control | NumAtt$ +2 | NumDef$ +2 | SpellDescription$ Target blocking or blocked creature you control gets +2/+2 until end of turn.
Oracle:Target blocking or blocked creature you control gets +2/+2 until end of turn.

View File

@@ -8,7 +8,7 @@ SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenName$ Insect | TokenTypes$ Crea
A:AB$ Draw | Cost$ 2 U R | NumCards$ 1 | SpellDescription$ Draw a card, then discard a card. | SubAbility$ DBDiscard
SVar:DBDiscard:DB$Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | TriggerController$ TriggeredCardController | Execute$ TrigDelay | TriggerDescription$ When CARDNAME dies, return it to its owner's hand at the beginning of the next end step.
SVar:TrigDelay:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | RememberObjects$ Self | Execute$ TrigReturn | SpellDescription$ Return that creature to its owner's hand at the beginning of the next end step.
SVar:TrigDelay:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | RememberObjects$ TriggeredCard | Execute$ TrigReturn | SpellDescription$ Return that creature to its owner's hand at the beginning of the next end step.
SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRemembered | Origin$ Graveyard | Destination$ Hand
DeckHas:Ability$Token
SVar:Picture:http://www.wizards.com/global/images/magic/general/the_locust_god.jpg

View File

@@ -1,10 +1,13 @@
Name:Theater of Horrors
ManaCost:1 B R
Types:Enchantment
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigKyrenExile | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, exile the top card of your library.
SVar:TrigMill:DB$ Mill | Defined$ You | Destination$ Exile | NumCards$ 1
S:Mode$ Continuous | Affected$ Card.IsRemembered | MayPlay$ True | Condition$ PlayerTurn | EffectZone$ Battlefield | CheckSVar$ Play | Description$ During your turn, if an opponent lost life this turn, you may play cards exiled with CARDNAME.
SVar:TrigCleanup:Mode$ SpellCast | ValidCard$ Card.IsRemembered | Execute$ DBDuration | Static$ True
SVar:DBDuration
A:AB$ DealDamage | Cost$ 1 B R | ValidTgts$ Opponent,Planeswalker | TgtPrompt$ Select target opponent or planeswalker | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to target opponent or planeswalker.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigMill | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, exile the top card of your library.
SVar:TrigMill:DB$ Mill | Defined$ You | Destination$ Exile | NumCards$ 1 | RememberMilled$ True
S:Mode$ Continuous | Affected$ Card.IsRemembered | AffectedZone$ Exile | MayPlay$ True | Condition$ PlayerTurn | CheckSVar$ X | References$ X | Description$ During your turn, if an opponent lost life this turn, you may play cards exiled with CARDNAME.
SVar:X:Count$LifeOppsLostThisTurn
T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBForget
SVar:DBForget:DB$ Pump | Defined$ TriggeredCard | ForgetObjects$ TriggeredCard
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
A:AB$ DealDamage | Cost$ 3 R | ValidTgts$ Opponent,Planeswalker | TgtPrompt$ Select target opponent or planeswalker | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to target opponent or planeswalker.
Oracle:At the beginning of your upkeep, exile the top card of your library.\nDuring your turn, if an opponent lost life this turn, you may play cards exiled with Theater of Horrors.\n{3}{R}: Theater of Horrors deals 1 damage to target opponent or planeswalker.

View File

@@ -0,0 +1,4 @@
Name:Titanic Pelagosaur
ManaCost:3 U U
Types:Creature Dinosaur
PT:4/6

View File

@@ -0,0 +1,4 @@
Name:Treetop Warden
ManaCost:1 G
Types:Creature Elf Warrior
PT:2/2

View File

@@ -1,7 +1,7 @@
Name:Unbreakable Formation
ManaCost:2 W
Types:Instant
A:SP$ PumpAll | Cost$ 2 W | ValidCards$ Creature.YouCtrl | KW$ Indestructible | SpellDescription$ Creatures you control gain indestructible until end of turn.
K:Defender
K:If you cast this spell during your main phase, put a +1/+1 counter on each of those creatures, and they also gain vigilance until end of turn.
A:SP$ PumpAll | Cost$ 2 W | ValidCards$ Creature.YouCtrl | KW$ Indestructible | SubAbility$ DBAddendum | SpellDescription$ Creatures you control gain indestructible until end of turn.
SVar:DBAddendum:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Vigilance | ConditionPlayerTurn$ True | ConditionPhases$ Main1,Main2 | SubAbility$ DBPutCounters | SpellDescription$ Addendum — If you cast this spell during your main phase, put a +1/+1 counter on each of those creatures, and they also gain vigilance until end of turn.
SVar:DBPutCounters:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | ConditionPlayerTurn$ True | ConditionPhases$ Main1,Main2 | CounterType$ P1P1 | CounterNum$ 1
Oracle:Creatures you control gain indestructible until end of turn.\nAddendum — If you cast this spell during your main phase, put a +1/+1 counter on each of those creatures, and they also gain vigilance until end of turn.

View File

@@ -0,0 +1,6 @@
Name:Zephyr Gull
ManaCost:U
Types:Creature Bird
PT:1/1
K:Flying
Oracle:Flying

View File

@@ -7,3 +7,4 @@ DGM
C15
GRN
GK1
RNA

View File

@@ -9,7 +9,7 @@ Name:Lorwyn-Shadowmoor|RegionSize:9|Desc:A sunny utopia with a thriving storyboo
Name:Mercadia|RegionSize:6|Unreachable:True|Desc:
Name:Mirrodin|RegionSize:9|Desc:A dark contagion is taking over this metal planet, breeding wave after wave of Phyrexian horrors.\nConsists of 63 events. Contains cards from MRD, DST, 5DN, SOM, MBS, NPH, and more.
Name:Rath|RegionSize:6|Unreachable:True|Desc:
Name:Ravnica|RegionSize:9|Desc:A worldwide cityscape of grand halls, decrepit slums, and ancient ruins.\nConsists of 88 events. Contains cards from RAV, GPT, DIS, RTR, GTC, DGM, GRN, GK1, and C15.
Name:Ravnica|RegionSize:9|Desc:A worldwide cityscape of grand halls, decrepit slums, and ancient ruins.\nConsists of 88 events. Contains cards from RAV, GPT, DIS, RTR, GTC, DGM, GRN, GK1, RNA, and C15.
Name:Regatha|RegionSize:6|Unreachable:True|Desc:
Name:Shandalar|RegionSize:9|Unreachable:True|Desc:
Name:Tarkir|RegionSize:9|Desc:A plane dominated by five powerful clans... or five powerful dragon lords.\nConsists of 45 events. Contains cards from KTK, FRF, DTK, CMD, CNS/CN2, some C17.

View File

@@ -0,0 +1,46 @@
[metadata]
Code=ANA
Date=2018-07-12
Name=Arena New Player Experience
Type=Other
[cards]
C Altar's Reap
U Ambition's Cost
U Angelic Reward
U Blinding Radiance
R Chaos Maw
U Confront the Assault
C Cruel Cut
C Divination
U Doublecast
C Feral Roar
U Goblin Bruiser
U Goblin Gang Leader
U Goblin Grenade
R Inspiring Commander
C Knight's Pledge
C Loxodon Line Breaker
C Miasmic Mummy
C Nimble Pilferer
R Ogre Painbringer
M Overflowing Insight
C Raging Goblin
C Renegade Demon
U Rise from the Grave
C River's Favor
C Rumbling Baloth
C Sanctuary Cat
U Seismic Rupture
U Serra Angel
C Shorecomber Crab
C Shrine Keeper
R Soulhunter Rakshasa
C Spiritual Guardian
C Tactical Advantage
C Take Vengeance
U Titanic Pelagosaur
C Treetop Warden
U Volcanic Dragon
C Waterknot
C Zephyr Gull

View File

@@ -0,0 +1,74 @@
[metadata]
Code=CST
Date=2006-07-21
Name=Coldsnap Theme Decks
MciCode=cst
Type=Other
[cards]
8 U Kjeldoran Home Guard
9 C Kjeldoran Pride
12 C Reinforcements
16 U Scars of the Veteran
20 C Disenchant
25 U Browse
30 C Lat-Nam's Legacy
34 C Kjeldoran Elite Guard
37 U Storm Elemental
42 U Viscerid Drone
43 U Balduvian Dead
44 C Casting of Bones
51 C Insidious Bookworms
54 C Swords to Plowshares
57 C Phantasmal Fiend
60 U Binding Grasp
61 C Brainstorm
69 C Essence Flare
70 U Death Spark
72 C Gorilla Shaman
73 U Iceberg
84 C Mistfolk
85 U Bounty of the Hunt
86 C Deadly Insect
90 C Portent
100 C Snow Devil
112 C Zuran Spellcaster
114 U Ashen Ghoul
119 C Dark Banishing
120 C Dark Ritual
123 U Drift of the Dead
127 C Gangrenous Zombies
137 C Kjeldoran Dead
142 C Legions of Lim-Dul
161 C Soul Burn
194 C Incinerate
208 U Orcish Healer
210 C Orcish Lumberjack
225 C Aurochs
270 C Tinder Wall
278 C Woolly Mammoths
293 U Giant Trap Door Spider
305 U Wings of Aesthir
310 U Arcum's Weathervane
312 C Barbed Sextant
336 U Skull Catapult
349 U Whalebone Glider
369 L Plains
370 L Plains
371 L Plains
372 L Island
373 L Island
374 L Island
375 L Swamp
376 L Swamp
377 L Swamp
378 L Mountain
379 L Mountain
380 L Mountain
381 L Forest
382 L Forest
383 L Forest
[tokens]
w_0_1_deserter
br_3_1_graveborn_haste

View File

@@ -0,0 +1,16 @@
[metadata]
Name:Possibility Storm - Ravnica Allegiance #01
URL:http://www.possibilitystorm.com/wp-content/uploads/2019/01/098.-RNA1.jpg
Goal:Win
Turns:1
Difficulty:Mythic
Description:Win this turn. Your solution must satisfy all possible blocking scenarios.
[state]
humanlife=20
ailife=9
turn=1
activeplayer=human
activephase=MAIN1
humanhand=Ghalta, Primal Hunger;Electrodominance;Metamorphic Alteration;Slaughter the Strong;Lawmage's Binding
humanbattlefield=Atzocan Seer;Draconic Disciple;Arboretum Elemental;Incubation Druid;Sacred Foundry|NoETBTrigs;Sacred Foundry|NoETBTrigs;Breeding Pool|NoETBTrigs;Breeding Pool|NoETBTrigs;Breeding Pool|NoETBTrigs;Breeding Pool|NoETBTrigs
aibattlefield=Garna, the Bloodflame;Belligerent Brontodon;Lyra Dawnbringer;Demanding Dragon

View File

@@ -0,0 +1,16 @@
[metadata]
Name:Possibility Storm - Ravnica Allegiance #02
URL:http://www.possibilitystorm.com/wp-content/uploads/2019/01/099.-RNA2.jpg
Goal:Win
Turns:1
Difficulty:Uncommon
Description:Win this turn. Your solution must satisfy all possible blocking scenarios.
[state]
humanlife=20
ailife=20
turn=1
activeplayer=human
activephase=MAIN1
humanhand=Wild Onslaught;Nikya of the Old Ways;Rally to Battle;Unbreakable Formation;Hadana's Climb
humanbattlefield=Shield Mare;Incubation Druid;Incubation Druid;Bolrac-Clan Crusher|Counters:P1P1=1;Tetsuko Umezawa, Fugitive;Stomping Ground|NoETBTrigs;Temple Garden|NoETBTrigs;Hallowed Fountain|NoETBTrigs
aibattlefield=Thief of Sanity;Fireblade Artist;Wee Dragonauts

View File

@@ -0,0 +1,31 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Arcane Inventions
Description=As a blue mage, you control the battlefield through illusions. Always think three steps ahead of your foe.
Deck Type=constructed
Set=ANA
[Main]
3 Air Elemental|M19
1 Arcane Encyclopedia|M19
2 Aven Wind Mage|M19
3 Aviation Pioneer|M19
1 Befuddle|M19
1 Diamond Mare|M19
2 Disperse|M19
1 Divination|M19
4 Field Creeper|M19
2 Gearsmith Guardian|M19
3 Gearsmith Prodigy|M19
2 Gilded Sentinel|XLN
25 Island|GRN
1 Meteor Golem|M19
1 Riddlemaster Sphinx|M19
1 Sai, Master Thopterist|M19
2 Scholar of Stars|M19
1 Tempest Djinn|DOM
3 Waterknot|M19
1 Zahid, Djinn of the Lamp|DOM

View File

@@ -0,0 +1,33 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Auras of Majesty
Description=Enchant your creatures to new levels of power and use binding spells to restrain your foes.
Deck Type=constructed
Set=ANA
[Main]
1 Ajani's Last Stand|M19
1 Danitha Capashen, Paragon|DOM
2 Daybreak Chaplain|M19
3 Druid of Horns|M19
9 Forest|GRN
2 Greenwood Sentinel|M19
3 Hieromancer's Cage|M19
1 History of Benalia|DOM
3 Knight's Pledge|M19
2 Knightly Valor|M19
3 Luminous Bonds|GRN
3 Novice Knight|M19
3 Oakenform|M19
1 On Serra's Wings|DOM
11 Plains|GRN
1 Prodigious Growth|M19
3 Satyr Enchanter|M19
1 Shalai, Voice of Plenty|DOM
1 Siegehorn Ceratops|RIX
1 Sunpetal Grove|XLN
1 Thorn Lieutenant|M19
4 Tranquil Expanse|M19

View File

@@ -0,0 +1,32 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Chaos and Mayhem
Description=Death is not the end. Strike terror from beyond with powerful graveyard combos.
Deck Type=constructed
Set=ANA
[Main]
4 Act of Treason|M19
2 Blood Divination|M19
3 Brawl-Bash Ogre|M19
4 Cinder Barrens|M19
1 Demon of Catastrophes|M19
3 Doomed Dissenter|M19
1 Dragonskull Summit|XLN
3 Goblin Instigator|M19
1 Goblin Trashmaster|M19
1 Gravedigger|M19
1 Gravewaker|M19
10 Mountain|GRN
3 Murder|M19
1 Open the Graves|M19
3 Ravenous Harpy|M19
2 Reassembling Skeleton|M19
1 Rekindling Phoenix|RIX
3 Shock|M19
1 Siege-Gang Commander|DOM
2 Swab Goblin|RIX
10 Swamp|GRN

View File

@@ -0,0 +1,31 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Dragon's Fire
Description=As a red mage, you revel in the chaos of battle. Fire is your weapon and your inspiration.
Deck Type=constructed
Set=ANA
[Main]
1 Burning Sun's Avatar|XLN
2 Charging Monstrosaur|XLN
1 Demanding Dragon|M19
2 Fiery Finish|M19
3 Goblin Instigator|M19
3 Havoc Devils|M19
3 Kargan Dragonrider|M19
1 Lathliss, Dragon Queen|M19
1 Meteor Golem|M19
25 Mountain|GRN
2 Onakke Ogre|M19
3 Pyromantic Pilgrim|DOM
3 Shock|M19
2 Sparktongue Dragon|M19
1 Spit Flame|M19
3 Sure Strike|GRN
2 Viashino Pyromancer|M19
2 Volcanic Dragon|M19

View File

@@ -0,0 +1,36 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Eternal Thirst
Description=Outlive your opponent by using their lifeforce to heal your wounds. Your life means their death.
Deck Type=constructed
Set=ANA
[Main]
3 Ajani's Pridemate|M19
2 Ajani's Welcome|M19
3 Bishop's Soldier|XLN
3 Call to the Feast|XLN
1 Champion of Dusk|RIX
2 Epicure of Blood|M19
4 Forsaken Sanctuary|M19
1 Herald of Faith|M19
2 Inspiring Cleric|XLN
1 Isolated Chapel|DOM
2 Legion Lieutenant|RIX
1 Leonin Warleader|M19
2 Moment of Triumph|RIX
3 Murder|M19
2 Nightmare's Thirst|M19
1 Paladin of Atonement|RIX
10 Plains|GRN
1 Resplendent Angel|M19
1 Sanctum Seeker|XLN
3 Skymarch Bloodletter|M19
10 Swamp|GRN
1 Vampire Sovereign|M19
1 Vraska's Contempt|XLN

View File

@@ -0,0 +1,32 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Forest's Might
Description=As a green mage, the natural world is at your command. The power of life itself fuels your magic.
Deck Type=constructed
Set=ANA
[Main]
1 Aggressive Mammoth|M19
2 Blanchwood Armor|M19
3 Bristling Boar|M19
3 Centaur Courser|M19
2 Druid of the Cowl|M19
2 Elvish Rejuvenator|M19
25 Forest|GRN
1 Ghalta, Primal Hunger|RIX
1 Gigantosaurus|M19
2 Greenwood Sentinel|M19
3 Highland Game|M19
2 Llanowar Elves|M19
1 Meteor Golem|M19
2 Plummet|M19
1 Prodigious Growth|M19
3 Rabid Bite|M19
3 Titanic Growth|M19
1 Verdant Rebirth|XLN
2 Vigilant Baloth|M19

View File

@@ -0,0 +1,35 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Graveyard Bash
Description=As a black mage, every advantage comes at a cost. Sacrifice whatever is necessary to control the forces of death and darkness.
Deck Type=constructed
Set=ANA
[Main]
2 Death Baron|ALA
3 Deathbloom Thallid|DOM
2 Diregraf Ghoul|ISD
3 Doomed Dissenter|M19
2 Gravedigger|M15
1 Gravewaker|M19
2 Hired Blade|M19
2 Infectious Horror|M19
1 Meteor Golem|M19
3 Murder|M19
1 Open the Graves|M19
1 Rise from the Grave|M10
2 Skulduggery|XLN
2 Skymarch Bloodletter|XLN
2 Strangling Spores|M19
9 Swamp|8ED|1
7 Swamp|8ED|2
4 Swamp|8ED|3
5 Swamp|8ED|4
2 Vampire Sovereign|M19
3 Walking Corpse|ISD
1 Yargle, Glutton of Urborg|DOM

View File

@@ -0,0 +1,34 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Jungle Secrets
Description=Sneak past your foe's defenses and manipulate the battlefield to your benefit with the slick Merfolk of Ixalan.
Deck Type=constructed
Set=ANA
[Main]
1 Deeproot Champion|XLN
1 Deeproot Elite|RIX
3 Disperse|M19
11 Forest|GRN
1 Herald of Secret Streams|XLN
1 Hinterland Harbor|DOM
9 Island|GRN
3 Jade Bearer|RIX
1 Jadelight Ranger|RIX
2 Jungleborn Pioneer|RIX
3 Kumena's Speaker|XLN
1 Kumena, Tyrant of Orazca|RIX
3 Merfolk Mistbinder|RIX
3 River Heralds' Boon|XLN
2 River Sneak|XLN
1 Seafloor Oracle|RIX
3 Silvergill Adept|RIX
2 Sleep|M19
2 Tempest Caller|XLN
3 Watertrap Weaver|XLN
4 Woodland Stream|M19

View File

@@ -0,0 +1,36 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Primal Fury
Description=Create additional mana to summon massive monsters to crush your enemies.
Deck Type=constructed
Set=ANA
[Main]
1 Banefire|M19
1 Carnage Tyrant|XLN
2 Charging Monstrosaur|XLN
2 Charging Tuskodon|RIX
2 Colossal Majesty|M19
3 Draconic Disciple|M19
2 Druid of the Cowl|M19
3 Elvish Rejuvenator|M19
1 Etali, Primal Storm|RIX
10 Forest|GRN
2 Frenzied Raptor|XLN
1 Goreclaw, Terror of Qal Sisma|M19
2 Knight of the Stampede|RIX
3 Lightning Strike|M19
3 Llanowar Elves|M19
9 Mountain|GRN
1 Needletooth Raptor|RIX
1 Pelakka Wurm|M19
2 Raptor Hatchling|XLN
1 Rootbound Crag|XLN
3 Shock|M19
1 Silverclad Ferocidons|RIX
4 Timber Gorge|M19

View File

@@ -0,0 +1,35 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Saproling Swarm
Description=Overrun anyone in your way with a Swarm of Saprolings.
Deck Type=constructed
Set=ANA
[Main]
2 Costly Plunder|XLN
3 Deathbloom Thallid|DOM
3 Doomed Dissenter|M19
10 Forest|GRN
4 Foul Orchard|M19
3 Fungal Infection|DOM
1 Path of Discovery|RIX
3 Poison-Tip Archer|M19
1 Rite of Belzenlok|DOM
3 Saproling Migration|DOM
1 Slimefoot, the Stowaway|DOM
2 Spore Swarm|DOM
10 Swamp|GRN
1 Tendershoot Dryad|RIX
2 Thallid Omnivore|DOM
1 Torgaar, Famine Incarnate|DOM
1 Twilight Prophet|RIX
1 Verdant Force|DOM
3 Vicious Offering|DOM
1 Whisper, Blood Liturgist|DOM
1 Woodland Cemetery|DOM
3 Yavimaya Sapherd|DOM

View File

@@ -0,0 +1,37 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Strength in Numbers
Description=Build up a powerful army and overrun the battlefield. Find glory and strength in numbers.
Deck Type=constructed
Set=ANA
[Main]
1 Act of Treason|M19
2 Boggart Brute|M19
1 Burning Sun's Avatar|XLN
1 Captivating Crew|XLN
2 Cavalry Drillmaster|M19
1 Clifftop Retreat|DOM
3 Goblin Instigator|M19
3 Heroic Reinforcements|M19
2 Hieromancer's Cage|M19
1 Inspired Charge|M19
1 Kinjalli's Sunwing|XLN
3 Leonin Vanguard|M19
1 Leonin Warleader|M19
3 Lightning Strike|M19
1 Make a Stand|M19
2 Martyr of Dusk|RIX
1 Mentor of the Meek|M19
3 Militia Bugler|M19
9 Mountain|GRN
2 Paladin of the Bloodstained|XLN
10 Plains|GRN
1 Siege-Gang Commander|DOM
4 Stone Quarry|M19
2 Trumpet Blast|M19

View File

@@ -0,0 +1,34 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Tactical Assault
Description=As a white mage, you command disciplined armies. Enforce order to overwhelm your enemies.
Deck Type=constructed
Set=ANA
[Main]
2 Daybreak Chaplain|M19
1 Herald of Faith|M19
2 Knight's Pledge|M19
1 Leonin Warleader|M19
2 Loxodon Line Breaker|M19
3 Luminous Bonds|GRN
1 Meteor Golem|M19
3 Oreskos Swiftclaw|M19
2 Pegasus Courser|M19
25 Plains|GRN
3 Tactical Advantage|ANA
1 Confront the Assault|ANA
1 Angelic Reward|ANA
1 Inspiring Commander|ANA
1 Spiritual Guardian|ANA
2 Serra Angel|DOM
1 Serra's Guardian|M19
2 Silverbeak Griffin|M19
3 Star-Crowned Stag|M19
2 Take Vengeance|M19
1 Zetalpa, Primal Dawn|RIX

View File

@@ -0,0 +1,35 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Walk the Plank
Description=Manipulate the battlefield to your advantage with these crafty spells.
Deck Type=constructed
Set=ANA
[Main]
2 Chart a Course|XLN
2 Deadeye Rig-Hauler|RIX
1 Demonlord Belzenlok|DOM
3 Departed Deckhand|M19
1 Dire Fleet Poisoner|RIX
1 Dreamcaller Siren|XLN
1 Drowned Catacomb|XLN
2 Exclusion Mage|M19
2 Fathom Fleet Boarder|RIX
3 Grasping Scoundrel|M19
1 Hostage Taker|XLN
10 Island|GRN
3 Kitesail Corsair|RIX
2 Kitesail Freebooter|XLN
3 Murder|M19
2 Ravenous Chupacabra|RIX
1 Riddlemaster Sphinx|M19
1 Ruin Raider|XLN
2 Siren Reaver|RIX
3 Siren Stormtamer|XLN
4 Submerged Boneyard|M19
10 Swamp|GRN

View File

@@ -0,0 +1,35 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Wing and Claw
Description=Soar over your opponent's defense while protecting your front-line with tactical spells.
Deck Type=constructed
Set=ANA
[Main]
1 Azor, the Lawbringer|RIX
2 Blade Instructor|GRN
3 Disperse|M19
3 Favorable Winds|XLN
1 Glacial Fortress|XLN
1 Goring Ceratops|XLN
2 Healer's Hawk|GRN
2 Imperial Aerosaur|XLN
10 Island|GRN
3 Kitesail Corsair|RIX
1 Light of the Legion|GRN
4 Meandering River|M19
1 Nezahal, Primal Tide|RIX
2 One With the Wind|XLN
2 Pegasus Courser|M19
10 Plains|GRN
3 Seal Away|DOM
2 Serra Angel|DOM
1 Settle the Wreckage|XLN
3 Sunhome Stalwart|GRN
2 Territorial Hammerskull|XLN
1 Warkite Marauder|RIX

View File

@@ -0,0 +1,35 @@
[shop]
WinsToUnlock=0
Credits=999
MinDifficulty=0
MaxDifficulty=5
[metadata]
Name=MTGA Wrath of Mages
Description=Cast powerful spells to wreak havoc on your enemies.
Deck Type=constructed
Set=ANA
[Main]
2 Aven Wind Mage|M19
1 Banefire|M19
2 Blink of an Eye|DOM
3 Disperse|M19
3 Enigma Drake|M19
1 Entrancing Melody|XLN
2 Fight with Fire|DOM
3 Ghitu Lavarunner|DOM
2 Guttersnipe|M19
4 Highland Lake|M19
10 Island|GRN
2 Lightning Strike|M19
10 Mountain|GRN
1 Mystic Archaeologist|M19
1 Repeating Barrage|XLN
1 River's Rebuke|XLN
1 Rowdy Crew|XLN
1 Salvager of Secrets|M19
3 Shivan Fire|DOM
3 Sift|M19
1 Sulfur Falls|DOM
3 Vodalian Arcanist|DOM

View File

@@ -1,5 +1,5 @@
Name:Treasure
ManaCost:no cost
Types:Artifact Treasure
A:AB$ Mana | Cost$ T Sac<1/CARDNAME|this artifact> | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color.
A:AB$ Mana | Cost$ T Sac<1/CARDNAME> | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color.
Oracle:{T}, Sacrifice this artifact: Add one mana of any color.

View File

@@ -332,8 +332,12 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
@Override
public Void visit(final GameEventCardChangeZone event) {
updateZone(event.from);
return updateZone(event.to);
//pfps the change to the zones have already been performed with add and remove calls
// this is only for playing a sound
// updateZone(event.from);
//return updateZone(event.to);
return processEvent();
}
@Override
@@ -355,7 +359,10 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
@Override
public Void visit(final GameEventShuffle event) {
return updateZone(event.player.getZone(ZoneType.Library));
//pfps the change to the library has already been performed by a setCards call
// this is only for playing a sound
// return updateZone(event.player.getZone(ZoneType.Library));
return processEvent();
}
@Override

View File

@@ -351,19 +351,26 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
}
private boolean useSelectCardsInput(final FCollectionView<? extends GameEntity> sourceList) {
if ( FThreads.isGuiThread() ) { return false; } // can't use InputSelect from GUI thread (e.g., DevMode Tutor)
// can't use InputSelect from GUI thread (e.g., DevMode Tutor)
if ( FThreads.isGuiThread() ) { return false; }
// if UI_SELECT_FROM_CARD_DISPLAYS not set use InputSelect only for battlefield and player hand
// if UI_SELECT_FROM_CARD_DISPLAYS set and using desktop GUI use InputSelect for any zone that can be shown
for (final GameEntity c : sourceList) {
if (c instanceof Player) {
continue;
}
if (!(c instanceof Card)) {
return false;
}
final Zone cz = ((Card) c).getZone();
// Don't try to draw the UI point of a card if it doesn't exist in any zone.
if (cz == null) {
return false;
}
final boolean useUiPointAtCard =
cz != null &&
(FModel.getPreferences().getPrefBoolean(FPref.UI_SELECT_FROM_CARD_DISPLAYS) && (!GuiBase.getInterface().isLibgdxPort())) ?
(cz.is(ZoneType.Battlefield) || cz.is(ZoneType.Hand) || cz.is(ZoneType.Library) ||
cz.is(ZoneType.Graveyard) || cz.is(ZoneType.Exile) || cz.is(ZoneType.Flashback) || cz.is(ZoneType.Command)) :

View File

@@ -5,7 +5,7 @@
<artifactId>forge</artifactId>
<packaging>pom</packaging>
<name>Forge Parent</name>
<version>1.6.20-SNAPSHOT</version>
<version>1.6.21-SNAPSHOT</version>
<description>
Forge lets you play the card game Magic: The Gathering against a computer opponent using all of the rules.