mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 09:48:02 +00:00
Merge branch 'master' of https://git.cardforge.org/core-developers/forge
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1649,7 +1649,8 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
|| keyword.equals("Undaunted") || keyword.startsWith("Monstrosity") || keyword.startsWith("Embalm")
|
||||
|| 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("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")) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
@@ -525,7 +524,7 @@ public class CombatUtil {
|
||||
IGNORE_LANDWALK_KEYWORDS[i] = "May be blocked as though it doesn't have " + landwalk + ".";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static boolean isUnblockableFromLandwalk(final Card attacker, final Player defendingPlayer) {
|
||||
//May be blocked as though it doesn't have landwalk. (Staff of the Ages)
|
||||
if (attacker.hasKeyword("May be blocked as though it doesn't have landwalk.")) {
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -457,22 +457,24 @@ public final class CMatchUI
|
||||
|
||||
@Override
|
||||
public void hideZones(final PlayerView controller, final Iterable<PlayerZoneUpdate> zonesToUpdate) {
|
||||
for (final PlayerZoneUpdate update : zonesToUpdate) {
|
||||
final PlayerView player = update.getPlayer();
|
||||
for (final ZoneType zone : update.getZones()) {
|
||||
switch (zone) {
|
||||
case Battlefield: // always shown
|
||||
break;
|
||||
case Hand: // the controller's hand should never be temporarily shown, but ...
|
||||
case Library:
|
||||
case Graveyard:
|
||||
case Exile:
|
||||
case Flashback:
|
||||
case Command:
|
||||
FloatingZone.hide(this,player,zone);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
if ( zonesToUpdate != null ) {
|
||||
for (final PlayerZoneUpdate update : zonesToUpdate) {
|
||||
final PlayerView player = update.getPlayer();
|
||||
for (final ZoneType zone : update.getZones()) {
|
||||
switch (zone) {
|
||||
case Battlefield: // always shown
|
||||
break;
|
||||
case Hand: // the controller's hand should never be temporarily shown, but ...
|
||||
case Library:
|
||||
case Graveyard:
|
||||
case Exile:
|
||||
case Flashback:
|
||||
case Command:
|
||||
FloatingZone.hide(this,player,zone);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,9 +307,11 @@ public abstract class CardPanelContainer extends SkinnedPanel {
|
||||
fromPanel.dispose();
|
||||
getCardPanels().remove(fromPanel);
|
||||
remove(fromPanel);
|
||||
invalidate();
|
||||
repaint();
|
||||
doingLayout();
|
||||
if ( repaint ) {
|
||||
invalidate();
|
||||
repaint();
|
||||
doingLayout();
|
||||
}
|
||||
}
|
||||
|
||||
public final void setCardPanels(final List<CardPanel> cardPanels) {
|
||||
@@ -325,23 +331,28 @@ 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();
|
||||
setPreferredSize(new Dimension(0, 0));
|
||||
invalidate();
|
||||
getParent().validate();
|
||||
repaint();
|
||||
if ( repaint ) {
|
||||
setPreferredSize(new Dimension(0, 0));
|
||||
invalidate();
|
||||
getParent().validate();
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
public final FScrollPane getScrollPane() {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -646,19 +646,21 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
|
||||
needLayoutRefresh = true;
|
||||
}
|
||||
}
|
||||
if (needLayoutRefresh) {
|
||||
doLayout();
|
||||
}
|
||||
if (needLayoutRefresh) {
|
||||
doLayout();
|
||||
}
|
||||
|
||||
invalidate(); //pfps do the extra invalidate before any scrolling
|
||||
if (!newPanels.isEmpty()) {
|
||||
int i = newPanels.size();
|
||||
for (final CardPanel toPanel : newPanels) {
|
||||
scrollRectToVisible(new Rectangle(toPanel.getCardX(), toPanel.getCardY(), toPanel.getCardWidth(), toPanel.getCardHeight()));
|
||||
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();
|
||||
}
|
||||
repaint();
|
||||
}
|
||||
|
||||
public boolean updateCard(final CardView card, boolean fromRefresh) {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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.
|
||||
|
||||
7
forge-gui/res/cardsfolder/a/angelic_reward.txt
Normal file
7
forge-gui/res/cardsfolder/a/angelic_reward.txt
Normal 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.
|
||||
@@ -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.
|
||||
|
||||
6
forge-gui/res/cardsfolder/b/blinding_radiance.txt
Normal file
6
forge-gui/res/cardsfolder/b/blinding_radiance.txt
Normal 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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 permanent’s 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 permanent’s controller.
|
||||
SVar:DBDealDamage:DB$ DealDamage | Defined$ TargetedController | NumDmg$ 1
|
||||
Oracle:Carnival deals 1 damage to target creature or planeswalker and 1 damage to that permanent’s controller.
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
5
forge-gui/res/cardsfolder/c/confront_the_assault.txt
Normal file
5
forge-gui/res/cardsfolder/c/confront_the_assault.txt
Normal 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.
|
||||
@@ -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.
|
||||
5
forge-gui/res/cardsfolder/c/cruel_cut.txt
Normal file
5
forge-gui/res/cardsfolder/c/cruel_cut.txt
Normal 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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.)\n−3: 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.\n−8: You get an emblem with “At the beginning of each end step, create a 4/4 red and green Beast creature token with trample.”
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
5
forge-gui/res/cardsfolder/f/feral_roar.txt
Normal file
5
forge-gui/res/cardsfolder/f/feral_roar.txt
Normal 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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.)
|
||||
|
||||
@@ -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
|
||||
|
||||
4
forge-gui/res/cardsfolder/g/goblin_bruiser.txt
Normal file
4
forge-gui/res/cardsfolder/g/goblin_bruiser.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
Name:Goblin Bruiser
|
||||
ManaCost:1 R R
|
||||
Types:Creature Goblin Warrior
|
||||
PT:3/3
|
||||
7
forge-gui/res/cardsfolder/g/goblin_gang_leader.txt
Normal file
7
forge-gui/res/cardsfolder/g/goblin_gang_leader.txt
Normal 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.
|
||||
8
forge-gui/res/cardsfolder/i/inspiring_commander.txt
Normal file
8
forge-gui/res/cardsfolder/i/inspiring_commander.txt
Normal 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.
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
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.
|
||||
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.
|
||||
6
forge-gui/res/cardsfolder/n/nimble_pilferer.txt
Normal file
6
forge-gui/res/cardsfolder/n/nimble_pilferer.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Name:Nimble Pilferer
|
||||
ManaCost:1 B
|
||||
Types:Creature Human Rogue
|
||||
PT:2/1
|
||||
K:Flash
|
||||
Oracle:Flash
|
||||
7
forge-gui/res/cardsfolder/o/ogre_painbringer.txt
Normal file
7
forge-gui/res/cardsfolder/o/ogre_painbringer.txt
Normal 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.
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
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.
|
||||
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.
|
||||
@@ -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.
|
||||
|
||||
7
forge-gui/res/cardsfolder/r/rivers_favor.txt
Normal file
7
forge-gui/res/cardsfolder/r/rivers_favor.txt
Normal 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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
4
forge-gui/res/cardsfolder/s/shorecomber_crab.txt
Normal file
4
forge-gui/res/cardsfolder/s/shorecomber_crab.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
Name:Shorecomber Crab
|
||||
ManaCost:U
|
||||
Types:Creature Crab
|
||||
PT:0/4
|
||||
4
forge-gui/res/cardsfolder/s/shrine_keeper.txt
Normal file
4
forge-gui/res/cardsfolder/s/shrine_keeper.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
Name:Shrine Keeper
|
||||
ManaCost:1 W
|
||||
Types:Creature Human Cleric
|
||||
PT:2/2
|
||||
@@ -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.
|
||||
|
||||
8
forge-gui/res/cardsfolder/s/soulhunter_rakshasa.txt
Normal file
8
forge-gui/res/cardsfolder/s/soulhunter_rakshasa.txt
Normal 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.
|
||||
5
forge-gui/res/cardsfolder/t/tactical_advantage.txt
Normal file
5
forge-gui/res/cardsfolder/t/tactical_advantage.txt
Normal 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.
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
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.
|
||||
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.
|
||||
4
forge-gui/res/cardsfolder/t/titanic_pelagosaur.txt
Normal file
4
forge-gui/res/cardsfolder/t/titanic_pelagosaur.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
Name:Titanic Pelagosaur
|
||||
ManaCost:3 U U
|
||||
Types:Creature Dinosaur
|
||||
PT:4/6
|
||||
4
forge-gui/res/cardsfolder/t/treetop_warden.txt
Normal file
4
forge-gui/res/cardsfolder/t/treetop_warden.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
Name:Treetop Warden
|
||||
ManaCost:1 G
|
||||
Types:Creature Elf Warrior
|
||||
PT:2/2
|
||||
@@ -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.
|
||||
|
||||
6
forge-gui/res/cardsfolder/z/zephyr_gull.txt
Normal file
6
forge-gui/res/cardsfolder/z/zephyr_gull.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Name:Zephyr Gull
|
||||
ManaCost:U
|
||||
Types:Creature Bird
|
||||
PT:1/1
|
||||
K:Flying
|
||||
Oracle:Flying
|
||||
@@ -7,3 +7,4 @@ DGM
|
||||
C15
|
||||
GRN
|
||||
GK1
|
||||
RNA
|
||||
|
||||
@@ -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.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
46
forge-gui/res/editions/Arena New Player Experience.txt
Normal file
46
forge-gui/res/editions/Arena New Player Experience.txt
Normal 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
|
||||
74
forge-gui/res/editions/Coldsnap Theme Decks.txt
Normal file
74
forge-gui/res/editions/Coldsnap Theme Decks.txt
Normal 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
|
||||
16
forge-gui/res/puzzle/PS_RNA1.pzl
Normal file
16
forge-gui/res/puzzle/PS_RNA1.pzl
Normal 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
|
||||
16
forge-gui/res/puzzle/PS_RNA2.pzl
Normal file
16
forge-gui/res/puzzle/PS_RNA2.pzl
Normal 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
|
||||
31
forge-gui/res/quest/precons/MTGA Arcane Inventions.dck
Normal file
31
forge-gui/res/quest/precons/MTGA Arcane Inventions.dck
Normal 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
|
||||
33
forge-gui/res/quest/precons/MTGA Auras of Majesty.dck
Normal file
33
forge-gui/res/quest/precons/MTGA Auras of Majesty.dck
Normal 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
|
||||
32
forge-gui/res/quest/precons/MTGA Chaos and Mayhem.dck
Normal file
32
forge-gui/res/quest/precons/MTGA Chaos and Mayhem.dck
Normal 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
|
||||
31
forge-gui/res/quest/precons/MTGA Dragons Fire.dck
Normal file
31
forge-gui/res/quest/precons/MTGA Dragons Fire.dck
Normal 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
|
||||
|
||||
|
||||
36
forge-gui/res/quest/precons/MTGA Eternal Thirst.dck
Normal file
36
forge-gui/res/quest/precons/MTGA Eternal Thirst.dck
Normal 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
|
||||
|
||||
|
||||
32
forge-gui/res/quest/precons/MTGA Forests Might.dck
Normal file
32
forge-gui/res/quest/precons/MTGA Forests Might.dck
Normal 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
|
||||
|
||||
|
||||
35
forge-gui/res/quest/precons/MTGA Graveyard Bash.dck
Normal file
35
forge-gui/res/quest/precons/MTGA Graveyard Bash.dck
Normal 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
|
||||
|
||||
|
||||
34
forge-gui/res/quest/precons/MTGA Jungle Secrets.dck
Normal file
34
forge-gui/res/quest/precons/MTGA Jungle Secrets.dck
Normal 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
|
||||
|
||||
|
||||
36
forge-gui/res/quest/precons/MTGA Primal Fury.dck
Normal file
36
forge-gui/res/quest/precons/MTGA Primal Fury.dck
Normal 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
|
||||
|
||||
|
||||
35
forge-gui/res/quest/precons/MTGA Saproling Swarm.dck
Normal file
35
forge-gui/res/quest/precons/MTGA Saproling Swarm.dck
Normal 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
|
||||
|
||||
|
||||
37
forge-gui/res/quest/precons/MTGA Strength in Numbers.dck
Normal file
37
forge-gui/res/quest/precons/MTGA Strength in Numbers.dck
Normal 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
|
||||
|
||||
|
||||
34
forge-gui/res/quest/precons/MTGA Tactical Assault.dck
Normal file
34
forge-gui/res/quest/precons/MTGA Tactical Assault.dck
Normal 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
|
||||
|
||||
|
||||
35
forge-gui/res/quest/precons/MTGA Walk the Plank.dck
Normal file
35
forge-gui/res/quest/precons/MTGA Walk the Plank.dck
Normal 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
|
||||
|
||||
|
||||
35
forge-gui/res/quest/precons/MTGA Wing and Claw.dck
Normal file
35
forge-gui/res/quest/precons/MTGA Wing and Claw.dck
Normal 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
|
||||
|
||||
|
||||
35
forge-gui/res/quest/precons/MTGA Wrath of Mages.dck
Normal file
35
forge-gui/res/quest/precons/MTGA Wrath of Mages.dck
Normal 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
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -377,4 +384,4 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
|
||||
public Void visit(final GameEventPlayerCounters event) {
|
||||
return processPlayer(event.receiver, livesUpdate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -351,28 +351,35 @@ 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)
|
||||
// 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
|
||||
// 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;
|
||||
}
|
||||
|
||||
if (!(c instanceof Card)) {
|
||||
return false;
|
||||
}
|
||||
final Zone cz = ((Card) c).getZone();
|
||||
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) ||
|
||||
// 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 =
|
||||
(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)) :
|
||||
(cz.is(ZoneType.Hand) && cz.getPlayer() == player || cz.is(ZoneType.Battlefield));
|
||||
if (!useUiPointAtCard) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user