Merge remote-tracking branch 'upstream/master' into collector-number-in-card-list-and-card-db-refactoring

This commit is contained in:
leriomaggio
2021-07-08 07:57:52 +01:00
90 changed files with 980 additions and 79 deletions

View File

@@ -63,7 +63,6 @@ public class ChooseCardNameAi extends SpellAbilityAi {
*/
@Override
public Card chooseSingleCard(final Player ai, SpellAbility sa, Iterable<Card> options, boolean isOptional, Player targetedPlayer, Map<String, Object> params) {
return ComputerUtilCard.getBestAI(options);
}

View File

@@ -276,7 +276,7 @@ public final class GameActionUtil {
continue;
}
// set the cost to this directly to buypass non mana cost
// set the cost to this directly to bypass non mana cost
final SpellAbility newSA = sa.copyWithDefinedCost("Discard<1/CARDNAME>");
newSA.setActivatingPlayer(activator);
newSA.putParam("CostDesc", ManaCostParser.parse("0"));
@@ -295,6 +295,32 @@ public final class GameActionUtil {
alternatives.add(newSA);
}
}
if (sa.hasParam("Equip") && activator.hasKeyword("You may pay 0 rather than pay equip costs.")) {
for (final KeywordInterface inst : source.getKeywords()) {
// need to find the correct Keyword from which this Ability is from
if (!inst.getAbilities().contains(sa)) {
continue;
}
// set the cost to this directly to bypass non mana cost
SpellAbility newSA = sa.copyWithDefinedCost("0");
newSA.setActivatingPlayer(activator);
newSA.putParam("CostDesc", ManaCostParser.parse("0"));
// need to build a new Keyword to get better Reminder Text
String data[] = inst.getOriginal().split(":");
data[1] = "0";
KeywordInterface newKi = Keyword.getInstance(StringUtils.join(data, ":"));
// makes new SpellDescription
final StringBuilder sb = new StringBuilder();
sb.append(newSA.getCostDescription());
sb.append("(").append(newKi.getReminderText()).append(")");
newSA.setDescription(sb.toString());
alternatives.add(newSA);
}
}
return alternatives;
}

View File

@@ -120,7 +120,7 @@ public class GameFormat implements Comparable<GameFormat> {
this.name = fName;
this.effectiveDate = effectiveDate;
if(sets != null) {
if (sets != null) {
StaticData data = StaticData.instance();
Set<String> parsedSets = new HashSet<>();
for (String set : sets) {
@@ -129,10 +129,9 @@ public class GameFormat implements Comparable<GameFormat> {
continue;
}
parsedSets.add(set);
}
allowedSetCodes = Lists.newArrayList(parsedSets);
}else{
} else {
allowedSetCodes = new ArrayList<>();
}
@@ -183,7 +182,7 @@ public class GameFormat implements Comparable<GameFormat> {
}
private static Date parseDate(String date) {
if( date.length() <= 7 )
if (date.length() <= 7)
date = date + "-01";
try {
return formatter.parse(date);
@@ -192,7 +191,7 @@ public class GameFormat implements Comparable<GameFormat> {
}
}
public Date getEffectiveDate() { return effectiveDate; }
public Date getEffectiveDate() { return effectiveDate; }
public FormatType getFormatType() {
return this.formatType;
@@ -299,10 +298,9 @@ public class GameFormat implements Comparable<GameFormat> {
if (other.formatType != formatType){
return formatType.compareTo(other.formatType);
}else{
if (other.formatSubType != formatSubType){
return formatSubType.compareTo(other.formatSubType);
}
}
if (other.formatSubType != formatSubType){
return formatSubType.compareTo(other.formatSubType);
}
if (formatType.equals(FormatType.HISTORIC)){
int compareDates = this.effectiveDate.compareTo(other.effectiveDate);
@@ -342,7 +340,7 @@ public class GameFormat implements Comparable<GameFormat> {
@Override
protected GameFormat read(File file) {
if(!includeHistoric && !coreFormats.contains(file.getName())){
if (!includeHistoric && !coreFormats.contains(file.getName())) {
return null;
}
final Map<String, List<String>> contents = FileSection.parseSections(FileUtil.readFile(file));
@@ -391,17 +389,17 @@ public class GameFormat implements Comparable<GameFormat> {
}
Boolean strRestrictedLegendary = section.getBoolean("restrictedlegendary");
if ( strRestrictedLegendary != null ) {
if (strRestrictedLegendary != null) {
restrictedLegendary = strRestrictedLegendary;
}
strCars = section.get("additional");
if ( strCars != null ) {
if (strCars != null) {
additionalCards = Arrays.asList(strCars.split("; "));
}
strCars = section.get("rarities");
if ( strCars != null ) {
if (strCars != null) {
CardRarity cr;
rarities = Lists.newArrayList();
for (String s: strCars.split(", ")) {
@@ -453,8 +451,8 @@ public class GameFormat implements Comparable<GameFormat> {
public Iterable<GameFormat> getSanctionedList() {
List<GameFormat> coreList = new ArrayList<>();
for(GameFormat format: naturallyOrdered){
if(format.getFormatType().equals(FormatType.SANCTIONED)){
for (GameFormat format: naturallyOrdered) {
if (format.getFormatType().equals(FormatType.SANCTIONED)){
coreList.add(format);
}
}
@@ -463,8 +461,8 @@ public class GameFormat implements Comparable<GameFormat> {
public Iterable<GameFormat> getFilterList() {
List<GameFormat> coreList = new ArrayList<>();
for(GameFormat format: naturallyOrdered){
if(!format.getFormatType().equals(FormatType.HISTORIC)
for (GameFormat format: naturallyOrdered) {
if (!format.getFormatType().equals(FormatType.HISTORIC)
&&!format.getFormatType().equals(FormatType.DIGITAL)){
coreList.add(format);
}
@@ -474,8 +472,8 @@ public class GameFormat implements Comparable<GameFormat> {
public Iterable<GameFormat> getHistoricList() {
List<GameFormat> coreList = new ArrayList<>();
for(GameFormat format: naturallyOrdered){
if(format.getFormatType().equals(FormatType.HISTORIC)){
for (GameFormat format: naturallyOrdered) {
if (format.getFormatType().equals(FormatType.HISTORIC)){
coreList.add(format);
}
}
@@ -484,10 +482,10 @@ public class GameFormat implements Comparable<GameFormat> {
public Map<String, List<GameFormat>> getHistoricMap() {
Map<String, List<GameFormat>> coreList = new HashMap<>();
for(GameFormat format: naturallyOrdered){
if(format.getFormatType().equals(FormatType.HISTORIC)){
for (GameFormat format: naturallyOrdered){
if (format.getFormatType().equals(FormatType.HISTORIC)){
String alpha = format.getName().substring(0,1);
if(!coreList.containsKey(alpha)){
if (!coreList.containsKey(alpha)) {
coreList.put(alpha,new ArrayList<>());
}
coreList.get(alpha).add(format);
@@ -549,7 +547,7 @@ public class GameFormat implements Comparable<GameFormat> {
SortedSet<GameFormat> result = new TreeSet<>();
Set<FormatSubType> coveredTypes = new HashSet<>();
CardPool allCards = deck.getAllCardsInASinglePool();
for(GameFormat gf : reverseDateOrdered) {
for (GameFormat gf : reverseDateOrdered) {
if (gf.getFormatType().equals(FormatType.DIGITAL) && !exhaustive){
//exclude Digital formats from lists for now
continue;
@@ -587,13 +585,12 @@ public class GameFormat implements Comparable<GameFormat> {
}
if (gf2.formatType != gf1.formatType){
return gf1.formatType.compareTo(gf2.formatType);
}else{
if (gf2.formatSubType != gf1.formatSubType){
return gf1.formatSubType.compareTo(gf2.formatSubType);
}
}
if (gf2.formatSubType != gf1.formatSubType){
return gf1.formatSubType.compareTo(gf2.formatSubType);
}
if (gf1.formatType.equals(FormatType.HISTORIC)){
if(gf1.effectiveDate!=gf2.effectiveDate) {//for matching dates or default dates default to name sorting
if (gf1.effectiveDate!=gf2.effectiveDate) {//for matching dates or default dates default to name sorting
return gf1.effectiveDate.compareTo(gf2.effectiveDate);
}
}

View File

@@ -2200,6 +2200,10 @@ public class AbilityUtils {
return doXMath(player.getCycledThisTurn(), expr, c, ctb);
}
if (sq[0].equals("YouEquippedThisTurn")) {
return doXMath(player.getEquippedThisTurn(), expr, c, ctb);
}
if (sq[0].equals("YouDrewThisTurn")) {
return doXMath(player.getNumDrawnThisTurn(), expr, c, ctb);
}
@@ -3372,6 +3376,18 @@ public class AbilityUtils {
if (value.equals("DungeonsCompleted")) {
return doXMath(player.getCompletedDungeons().size(), m, source, ctb);
}
if (value.startsWith("DungeonCompletedNamed")) {
String [] full = value.split("_");
String name = full[1];
int completed = 0;
List<Card> dungeons = player.getCompletedDungeons();
for (Card c : dungeons) {
if (c.getName().equals(name)) {
++completed;
}
}
return doXMath(completed, m, source, ctb);
}
if (value.equals("DifferentlyNamedDungeonsCompleted")) {
int amount = 0;
List<Card> dungeons = player.getCompletedDungeons();

View File

@@ -164,6 +164,14 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
final Trigger parsedTrigger = TriggerHandler.parseTrigger(AbilityUtils.getSVar(sa, s), c, false, sa);
addedTriggers.add(parsedTrigger);
}
if (sa.hasParam("GainsTriggeredAbilitiesOf")) {
final List<Card> cards = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("GainsTriggeredAbilitiesOf"), sa);
for (final Card card : cards) {
for (Trigger t : card.getTriggers()) {
addedTriggers.add(t.copy(c, false));
}
}
}
// give replacement effects
final List<ReplacementEffect> addedReplacements = Lists.newArrayList();

View File

@@ -148,6 +148,7 @@ public class Player extends GameEntity implements Comparable<Player> {
private int investigatedThisTurn = 0;
private int surveilThisTurn = 0;
private int cycledThisTurn = 0;
private int equippedThisTurn = 0;
private int lifeLostThisTurn = 0;
private int lifeLostLastTurn = 0;
private int lifeGainedThisTurn = 0;
@@ -2498,6 +2499,7 @@ public class Player extends GameEntity implements Comparable<Player> {
resetInvestigatedThisTurn();
resetSurveilThisTurn();
resetCycledThisTurn();
resetEquippedThisTurn();
resetSacrificedThisTurn();
clearAssignedDamage();
resetAttackersDeclaredThisTurn();
@@ -3455,6 +3457,17 @@ public class Player extends GameEntity implements Comparable<Player> {
cycledThisTurn = 0;
}
public void addEquipped() { equippedThisTurn++; }
public int getEquippedThisTurn() {
return equippedThisTurn;
}
public void resetEquippedThisTurn() {
equippedThisTurn = 0;
}
public boolean hasUrzaLands() {
final CardCollectionView landsControlled = getCardsIn(ZoneType.Battlefield);
return Iterables.any(landsControlled, Predicates.and(CardPredicates.isType("Urza's"), CardPredicates.isType("Mine")))

View File

@@ -436,6 +436,13 @@ public class PlayerView extends GameEntityView {
return getZoneSize(TrackableProperty.Library);
}
public FCollectionView<CardView> getSideboard() {
return get(TrackableProperty.Sideboard);
}
public int getSideboardSize() {
return getZoneSize(TrackableProperty.Sideboard);
}
public FCollectionView<CardView> getCards(final ZoneType zone) {
TrackableProperty prop = getZoneProp(zone);
if (prop != null) {

View File

@@ -326,6 +326,11 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
activator.addCycled(sp);
}
// Log number of Equips
if (sp.hasParam("Equip")) {
activator.addEquipped();
}
if (sp.hasParam("Crew")) {
// Trigger crews!
runParams.put(AbilityKey.Vehicle, sp.getHostCard());

View File

@@ -2,7 +2,6 @@ package forge.itemmanager.filters;
import forge.deck.DeckProxy;
import forge.game.GameFormat;
import forge.item.PaperCard;
import forge.itemmanager.ItemManager;
import forge.model.FModel;

View File

@@ -481,7 +481,6 @@ public class DialogChooseSets {
private int getMainDialogWidth() {
int winWidth = Singletons.getView().getFrame().getSize().width;
System.out.println("Win Width " + winWidth);
int[] sizeBoundaries = new int[] {800, 1024, 1280, 2048};
return calculateRelativePanelDimension(winWidth, 90, sizeBoundaries);
}
@@ -489,7 +488,6 @@ public class DialogChooseSets {
// So far, not yet used, but left here just in case
private int getMainDialogHeight() {
int winHeight = Singletons.getView().getFrame().getSize().height;
System.out.println("Win Height " + winHeight);
int[] sizeBoundaries = new int[] {600, 720, 780, 1024};
return calculateRelativePanelDimension(winHeight, 40, sizeBoundaries);
}

View File

@@ -485,6 +485,7 @@ public final class CMatchUI
case Exile:
case Flashback:
case Command:
case Ante:
case Sideboard:
if (FloatingZone.show(this,player,zone)) {
updatedPlayerZones.add(update);
@@ -513,6 +514,8 @@ public final class CMatchUI
case Exile:
case Flashback:
case Command:
case Ante:
case Sideboard:
FloatingZone.hide(this,player,zone);
break;
default:

View File

@@ -69,6 +69,8 @@ public class CField implements ICDoc {
final ZoneAction graveAction = new ZoneAction(matchUI, player, ZoneType.Graveyard);
final ZoneAction flashBackAction = new ZoneAction(matchUI, player, ZoneType.Flashback);
final ZoneAction commandAction = new ZoneAction(matchUI, player, ZoneType.Command);
final ZoneAction anteAction = new ZoneAction(matchUI, player, ZoneType.Ante);
final ZoneAction sideboardAction = new ZoneAction(matchUI, player, ZoneType.Sideboard);
final Function<Byte, Boolean> manaAction = new Function<Byte, Boolean>() {
@Override public final Boolean apply(final Byte colorCode) {
@@ -85,7 +87,8 @@ public class CField implements ICDoc {
}
};
view.getDetailsPanel().setupMouseActions(handAction, libraryAction, exileAction, graveAction, flashBackAction, commandAction, manaAction);
view.getDetailsPanel().setupMouseActions(handAction, libraryAction, exileAction, graveAction, flashBackAction,
commandAction, anteAction, sideboardAction, manaAction);
}
public final CMatchUI getMatchUI() {

View File

@@ -39,6 +39,8 @@ public class PlayerDetailsPanel extends JPanel {
private final DetailLabel lblExile = new DetailLabel(FSkinProp.IMG_ZONE_EXILE, Localizer.getInstance().getMessage("lblExileNCards", "%s"));
private final DetailLabel lblFlashback = new DetailLabel(FSkinProp.IMG_ZONE_FLASHBACK, Localizer.getInstance().getMessage("lblFlashbackNCards", "%s"));
private final DetailLabel lblCommand = new DetailLabel(FSkinProp.IMG_PLANESWALKER, Localizer.getInstance().getMessage("lblCommandZoneNCards", "%s"));
private final DetailLabel lblAnte = new DetailLabel(FSkinProp.IMG_ZONE_ANTE, Localizer.getInstance().getMessage("lblAnteZoneNCards", "%s"));
private final DetailLabel lblSideboard = new DetailLabel(FSkinProp.IMG_ZONE_SIDEBOARD, Localizer.getInstance().getMessage("lblSideboardNCards", "%s"));
private final List<Pair<DetailLabel, Byte>> manaLabels = new ArrayList<>();
public PlayerDetailsPanel(final PlayerView player0) {
@@ -67,6 +69,7 @@ public class PlayerDetailsPanel extends JPanel {
final SkinnedPanel row4 = new SkinnedPanel(new MigLayout("insets 0, gap 0"));
final SkinnedPanel row5 = new SkinnedPanel(new MigLayout("insets 0, gap 0"));
final SkinnedPanel row6 = new SkinnedPanel(new MigLayout("insets 0, gap 0"));
final SkinnedPanel row7 = new SkinnedPanel(new MigLayout("insets 0, gap 0"));
row1.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA));
row2.setOpaque(false);
@@ -74,6 +77,7 @@ public class PlayerDetailsPanel extends JPanel {
row4.setOpaque(false);
row5.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA));
row6.setOpaque(false);
row7.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA));
// Hand, library, graveyard, exile, flashback, command
final String constraintsCell = "w 50%-4px!, h 100%!, gapleft 2px, gapright 2px";
@@ -87,22 +91,26 @@ public class PlayerDetailsPanel extends JPanel {
row3.add(lblFlashback, constraintsCell);
row3.add(lblCommand, constraintsCell);
row4.add(manaLabels.get(0).getLeft(), constraintsCell);
row4.add(manaLabels.get(1).getLeft(), constraintsCell);
row4.add(lblAnte, constraintsCell);
row4.add(lblSideboard, constraintsCell);
row5.add(manaLabels.get(2).getLeft(), constraintsCell);
row5.add(manaLabels.get(3).getLeft(), constraintsCell);
row5.add(manaLabels.get(0).getLeft(), constraintsCell);
row5.add(manaLabels.get(1).getLeft(), constraintsCell);
row6.add(manaLabels.get(4).getLeft(), constraintsCell);
row6.add(manaLabels.get(5).getLeft(), constraintsCell);
row6.add(manaLabels.get(2).getLeft(), constraintsCell);
row6.add(manaLabels.get(3).getLeft(), constraintsCell);
final String constraintsRow = "w 100%!, h 16%!";
row7.add(manaLabels.get(4).getLeft(), constraintsCell);
row7.add(manaLabels.get(5).getLeft(), constraintsCell);
final String constraintsRow = "w 100%!, h 14%!";
add(row1, constraintsRow + ", gap 0 0 2% 0");
add(row2, constraintsRow);
add(row3, constraintsRow);
add(row4, constraintsRow);
add(row5, constraintsRow);
add(row6, constraintsRow);
add(row7, constraintsRow);
}
public Component getLblLibrary() {
@@ -119,7 +127,9 @@ public class PlayerDetailsPanel extends JPanel {
librarySize = String.valueOf(player.getLibrarySize()),
flashbackSize = String.valueOf(player.getFlashbackSize()),
exileSize = String.valueOf(player.getExileSize()),
commandSize = String.valueOf(player.getCommandSize());
commandSize = String.valueOf(player.getCommandSize()),
anteSize = String.valueOf(player.getAnteSize()),
sideboardSize = String.valueOf(player.getSideboardSize());
lblHand.setText(handSize);
lblHand.setToolTip(handSize, player.getMaxHandString());
@@ -133,6 +143,10 @@ public class PlayerDetailsPanel extends JPanel {
lblExile.setToolTip(exileSize);
lblCommand.setText(commandSize);
lblCommand.setToolTip(commandSize);
lblAnte.setText(anteSize);
lblAnte.setToolTip(anteSize);
lblSideboard.setText(sideboardSize);
lblSideboard.setToolTip(sideboardSize);
}
/**
@@ -147,7 +161,7 @@ public class PlayerDetailsPanel extends JPanel {
}
public void setupMouseActions(final Runnable handAction, final Runnable libraryAction, final Runnable exileAction,
final Runnable graveAction, final Runnable flashBackAction, final Runnable commandAction,
final Runnable graveAction, final Runnable flashBackAction, final Runnable commandAction, final Runnable anteAction, final Runnable sideboardAction,
final Function<Byte, Boolean> manaAction) {
// Detail label listeners
lblGraveyard.addMouseListener(new FMouseAdapter() {
@@ -180,6 +194,16 @@ public class PlayerDetailsPanel extends JPanel {
commandAction.run();
}
});
lblAnte.addMouseListener(new FMouseAdapter() {
@Override public void onLeftClick(final MouseEvent e) {
anteAction.run();
}
});
lblSideboard.addMouseListener(new FMouseAdapter() {
@Override public void onLeftClick(final MouseEvent e) {
sideboardAction.run();
}
});
for (final Pair<DetailLabel, Byte> labelPair : manaLabels) {
labelPair.getLeft().addMouseListener(new FMouseAdapter() {

View File

@@ -188,6 +188,15 @@ public class FloatingZone extends FloatingCardArea {
case Flashback:
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_FLASHBACK));
break;
case Command:
window.setIconImage(FSkin.getImage(FSkinProp.IMG_PLANESWALKER));
break;
case Ante:
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_ANTE));
break;
case Sideboard:
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_SIDEBOARD));
break;
default:
locPref = null;
break;
@@ -247,6 +256,15 @@ public class FloatingZone extends FloatingCardArea {
case Flashback:
locPref = isAi ? FPref.ZONE_LOC_AI_FLASHBACK : FPref.ZONE_LOC_HUMAN_FLASHBACK;
break;
case Command:
locPref = isAi ? FPref.ZONE_LOC_AI_COMMAND : FPref.ZONE_LOC_HUMAN_COMMAND;
break;
case Ante:
locPref = isAi ? FPref.ZONE_LOC_AI_ANTE : FPref.ZONE_LOC_HUMAN_ANTE;
break;
case Sideboard:
locPref = isAi ? FPref.ZONE_LOC_AI_SIDEBOARD : FPref.ZONE_LOC_HUMAN_SIDEBOARD;
break;
default:
locPref = null;
break;

View File

@@ -34,6 +34,8 @@ public enum FSkinImage implements FImage {
GRAVEYARD (FSkinProp.IMG_ZONE_GRAVEYARD, SourceFile.ICONS),
HDGRAVEYARD (FSkinProp.IMG_HDZONE_GRAVEYARD, SourceFile.BUTTONS),
SIDEBOARD (FSkinProp.IMG_ZONE_SIDEBOARD, SourceFile.ICONS),
HDMANAPOOL (FSkinProp.IMG_HDZONE_MANAPOOL, SourceFile.BUTTONS),
POISON (FSkinProp.IMG_ZONE_POISON, SourceFile.ICONS),
@@ -482,7 +484,7 @@ public enum FSkinImage implements FImage {
// If any return true, image exists.
int x0 = 0, y0 = 0;
Color c;
// Center
x0 = (x + w / 2);
y0 = (y + h / 2);
@@ -491,7 +493,7 @@ public enum FSkinImage implements FImage {
textureRegion = new TextureRegion(texture, x, y, w, h);
return;
}
x0 += 2;
y0 += 2;
c = new Color(preferredIcons.getPixel(x0, y0));
@@ -499,21 +501,21 @@ public enum FSkinImage implements FImage {
textureRegion = new TextureRegion(texture, x, y, w, h);
return;
}
x0 -= 4;
c = new Color(preferredIcons.getPixel(x0, y0));
if (c.a != 0) {
textureRegion = new TextureRegion(texture, x, y, w, h);
return;
}
y0 -= 4;
c = new Color(preferredIcons.getPixel(x0, y0));
if (c.a != 0) {
textureRegion = new TextureRegion(texture, x, y, w, h);
return;
}
x0 += 4;
c = new Color(preferredIcons.getPixel(x0, y0));
if (c.a != 0) {

View File

@@ -76,6 +76,7 @@ public class VPlayerPanel extends FContainer {
tabs.add(tabManaPool);
addZoneDisplay(ZoneType.Exile, Forge.hdbuttons ? FSkinImage.HDEXILE : FSkinImage.EXILE);
addZoneDisplay(ZoneType.Sideboard, Forge.hdbuttons ? FSkinImage.HDSIDEBOARD :FSkinImage.SIDEBOARD);
commandZone = add(new CommandZoneDisplay(player));
@@ -441,7 +442,7 @@ public class VPlayerPanel extends FContainer {
if (vibrateDuration > 0 && MatchController.instance.isLocalPlayer(player) &&
FModel.getPreferences().getPrefBoolean(FPref.UI_VIBRATE_ON_LIFE_LOSS)) {
//never vibrate more than two seconds regardless of life lost or poison counters gained
Gdx.input.vibrate(Math.min(vibrateDuration, 2000));
Gdx.input.vibrate(Math.min(vibrateDuration, 2000));
}
}

View File

@@ -2,7 +2,6 @@ Name:Frontier Explorer
ManaCost:W
Types:Creature Cat Scout
PT:2/1
A:AB$ Effect | Cost$ 3 T | Name$ Play a Plains | Abilities$ PlayLand | EffectOwner$ You | SpellDescription$ Until end of turn, you may play one basic Plains card from outside the game.
SVar:PlayLand:ST$ Play | Cost$ 0 | ActivationZone$ Command | SorcerySpeed$ True | ValidZone$ Sideboard | Valid$ Land.Plains+Basic | SubAbility$ ExileEffect | SpellDescription$ Play a basic Plains card from outside the game.
SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
A:AB$ Effect | Cost$ 3 T | StaticAbilities$ PlaySideboard | EffectOwner$ You | SpellDescription$ Until end of turn, you may play one basic Plains card from outside the game.
SVar:PlaySideboard:Mode$ Continuous | Affected$ Land.Plains+Basic | MayPlay$ True | MayPlayLimit$ 1 | EffectZone$ Command | AffectedZone$ Sideboard | Description$ Until end of turn, you may play one basic Plains card from outside the game.
Oracle:{3}, {T}: Until end of turn, you may play one basic Plains card from outside the game.

View File

@@ -0,0 +1,13 @@
Name:The Cinematic Phoenix
ManaCost:3 B R
Types:Legendary Creature Phoenix
PT:4/4
K:Flying
K:Haste
K:Protection from red
A:AB$ ChangeZone | Cost$ 1 T | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.Legendary+YouCtrl | TgtPrompt$ Select target legendary creature in your graveyard | GainControl$ True | SpellDescription$ Return target legendary creature card from your graveyard to the battlefield.
A:AB$ ChangeZone | Cost$ tapXType<6/Creature> | RememberCostCards$ True | Origin$ Graveyard | Destination$ Battlefield | ActivationZone$ Graveyard | SubAbility$ CheckWin | SpellDescription$ Return CARDNAME from your graveyard to the battlefield. If you tapped six legendary creatures this way, you win the game.
SVar:CheckWin:DB$ WinsGame | Defined$ You | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ6 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Valid Creature.Legendary
Oracle:Flying, haste, protection from red\n{1}, {T}: Return target legendary creature card from your graveyard to the battlefield.\nTap six untapped creatures you control: Return The Cinematic Phoenix from your graveyard to the battlefield. If you tapped six legendary creatures this way, you win the game.

View File

@@ -0,0 +1,15 @@
Name:Acererak the Archlich
ManaCost:2 B
Types:Legendary Creature Zombie Wizard
PT:5/5
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ LT1 | Execute$ TrigBounce | TriggerDescription$ When CARDNAME enters the battlefield, if you haven't completed Tomb of Annihilation, return CARDNAME to its owner's hand and venture into the dungeon.
SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBVenture
SVar:DBVenture:DB$ Venture
SVar:X:PlayerCountPropertyYou$DungeonCompletedNamed_Tomb of Annihilation
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigRepeat | TriggerDescription$ Whenever CARDNAME attacks, for each opponent, you create a 2/2 black Zombie creature token unless that player sacrifices a creature.
SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBToken
SVar:DBToken:DB$ Token | TokenScript$ b_2_2_zombie | UnlessCost$ Sac<1/Creature> | UnlessPayer$ Player.IsRemembered
SVar:HasAttackEffect:TRUE
DeckHas:Ability$Token
DeckHints:Type$Zombie
Oracle:When Acererak the Archlich enters the battlefield, if you haven't completed Tomb of Annihilation, return Acererak the Archlich to its owner's hand and venture into the dungeon.\nWhenever Acererak the Archlich attacks, for each opponent, you create a 2/2 black Zombie creature token unless that player sacrifices a creature.

View File

@@ -0,0 +1,8 @@
Name:Arcane Investigator
ManaCost:1 U
Types:Creature Elf Wizard
PT:2/1
A:AB$ RollDice | Cost$ 5 U | Sides$ 20 | ResultSubAbilities$ 1-9:DBDraw,10-20:DBDig | PrecostDesc$ Search the Room — | SpellDescription$ Roll a d20.
SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ 1-9 VERT Draw a card.
SVar:DBDig:DB$ Dig | DigNum$ 3 | ChangeNum$ 1 | SpellDescription$ 10-20 VERT Look at the top three cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order.
Oracle:Search the Room — {5}{U}: Roll a d20.\n1-9 | Draw a card.\n10-20 | Look at the top three cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order.

View File

@@ -0,0 +1,12 @@
Name:Asmodeus the Archfiend
ManaCost:4 B B
Types:Legendary Creature Devil God
PT:6/6
R:Event$ Draw | ActiveZones$ Battlefield | ValidPlayer$ You | ReplaceWith$ ExileTop | Description$ Binding Contract — If you would draw a card, exile the top card of your library face down instead.
SVar:ExileTop:DB$ ChangeZone | Defined$ TopOfLibrary | Origin$ Library | Destination$ Exile | ExileFaceDown$ True
A:AB$ Draw | Cost$ B B B | NumCards$ 3 | SpellDescription$ Draw three cards.
A:AB$ ChangeZoneAll | Cost$ B | ChangeType$ Card.ExiledWithSource | Origin$ Exile | Destination$ Hand | RememberChanged$ True | SubAbility$ DBLoseLife | SpellDescription$ Return all cards exiled with CARDNAME to their owners hand and you lose that much life.
SVar:DBLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Amount
Oracle:Binding Contract — If you would draw a card, exile the top card of your library face down instead.\n{B}{B}{B}: Draw seven cards.\n{B}: Return all cards exiled with Asmodeus the Archfiend to their owner's hand and you lose that much life.

View File

@@ -0,0 +1,10 @@
Name:Battle Cry Goblin
ManaCost:1 R
Types:Creature Goblin
PT:2/2
A:AB$ PumpAll | Cost$ 1 R | ValidCards$ Creature.Goblin+YouCtrl | NumAtt$ +1 | KW$ Haste | SpellDescription$ Goblins you control get +1/+0 and gain haste until end of turn.
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, create a 1/1 red Goblin creature token that's tapped and attacking.
SVar:TrigToken:DB$Token | TokenAmount$ 1 | TokenScript$ r_1_1_goblin | TokenOwner$ You | TokenTapped$ True | TokenAttacking$ True
SVar:PackTactics:Count$SumPower_Creature.attacking
DeckHas:Ability$Token
Oracle:{1}{R}: Goblins you control get +1/+0 and gain haste until end of turn.\nPack tactics — Whenever Battle Cry Goblin attacks, if you attacked with creatures with total power 6 or greater this combat, create a 1/1 red Goblin creature token thats tapped and attacking.

View File

@@ -0,0 +1,7 @@
Name:Blink Dog
ManaCost:2 W
Types:Creature Dog
PT:1/1
K:Double Strike
A:AB$ Phases | Cost$ 3 W | Defined$ Self | SpellDescription$ Teleport — CARDNAME phases out.
Oracle:Double strike\nTeleport — {3}{W}: Blink Dog phases out. (Treat it and anything attached to it as though they don't exist until your next turn.)

View File

@@ -0,0 +1,12 @@
Name:Blue Dragon
ManaCost:5 U U
Types:Creature Dragon
PT:5/5
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Lightning Breath — When CARDNAME enters the battlefield, until your next turn, target creature an opponent controls gets -3/-0, up to one other target creature gets -2/-0, and up to one other target creature gets -1/-0.
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Choose target creature an opponent controls (-3/-0) | NumAtt$ -3 | Duration$ UntilYourNextTurn | SubAbility$ DBPump
SVar:DBPump:DB$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Choose up to one other target creature an opponent controls (-2/-0) | TargetMin$ 0 | TargetMax$ 1 | NumAtt$ -2 | TargetUnique$ True | Duration$ UntilYourNextTurn | SubAbility$ DBPump2
SVar:DBPump2:DB$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Choose up to one other target creature an opponent controls (-1/-0) | TargetMin$ 0 | TargetMax$ 1 | NumAtt$ -1 | TargetUnique$ True | Duration$ UntilYourNextTurn
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:PlayMain1:TRUE
Oracle:Flying\nLightning Breath — When Blue Dragon enters the battlefield, until your next turn, target creature an opponent controls gets -3/-0, up to one other target creature gets -2/-0, and up to one other target creature gets -1/-0.

View File

@@ -0,0 +1,9 @@
Name:Bruenor Battlehammer
ManaCost:2 R W
Types:Legendary Creature Dwarf Warrior
PT:5/3
S:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Battlefield | AddPower$ AffectedX | Description$ Each creature you control gets +2/+0 for each Equipment attached to it.
SVar:AffectedX:Count$Valid Equipment.Attached/Times.2
S:Mode$ Continuous | Affected$ You | AddKeyword$ You may pay 0 rather than pay equip costs. | CheckSVar$ X | SVarCompare$ LT1 | Description$ You may pay {0} rather than pay the equip cost of the first equip ability you activate each turn.
SVar:X:Count$YouEquippedThisTurn
Oracle:Each creature you control gets +2/+0 for each Equipment attached to it.\nYou may pay {0} rather than pay the equip cost of the first equip ability you activate each turn.

View File

@@ -0,0 +1,9 @@
Name:Check for Traps
ManaCost:1 B
Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | DefinedPlayer$ Targeted | Chooser$ You | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | Mandatory$ True | RememberChanged$ True | SubAbility$ TheyLose | SpellDescription$ Target opponent reveals their hand. You choose a nonland card from it. Exile that card. If an instant card or a card with flash is exiled this way, they lose 1 life. Otherwise, you lose 1 life.
SVar:TheyLose:DB$ LoseLife | Defined$ RememberedOwner | LifeAmount$ 1 | ConditionCheckSVar$ X | SubAbility$ YouLose
SVar:YouLose:DB$ LoseLife | LifeAmount$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Valid Instant,Card.withFlash
Oracle:Target opponent reveals their hand. You choose a nonland card from it. Exile that card. If an instant card or a card with flash is exiled this way, they lose 1 life. Otherwise, you lose 1 life.

View File

@@ -0,0 +1,11 @@
Name:Djinni Windseer
ManaCost:3 U
Types:Creature Djinn
PT:3/3
K:Flying
T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigRollDice | TriggerDescription$ When CARDNAME enters the battlefield, ABILITY
SVar:TrigRollDice:DB$ RollDice | Sides$ 20 | ResultSubAbilities$ 1-9:Scry1,10-19:Scry2,20:Scry3 | SpellDescription$ roll a d20.
SVar:Scry1:DB$ Scry | ScryNum$ 1 | SpellDescription$ 1-9 VERT Scry 1.
SVar:Scry2:DB$ Scry | ScryNum$ 2 | SpellDescription$ 10-19 VERT Scry 2.
SVar:Scry3:DB$ Scry | ScryNum$ 3 | SpellDescription$ 20 VERT Scry 3.
Oracle:Flying\nWhen Djinni Windseer enters the battlefield, roll a d20.\n1-9 | Scry 1.\n10-19 | Scry 2.\n20 | Scry 3.

View File

@@ -0,0 +1,10 @@
Name:Eye of Vecna
ManaCost:2
Types:Legendary Artifact
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, you draw a card and you lose 2 life.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | OptionalDecider$ You | Execute$ TrigDrawUpkeep | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, you may pay {2}. If you do, you draw a card and you lose 2 life.
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ DBLoseLife
SVar:TrigDrawUpkeep:AB$ Draw | Cost$ 2 | Defined$ You | NumCards$ 1 | SubAbility$ DBLoseLife
SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 2
DeckHints:Name$Hand of Vecna|The Book of Vile Darkness
Oracle:When Eye of Vecna enters the battlefield, you draw a card and you lose 2 life.\nAt the beginning of your upkeep, you may pay {2}. If you do, you draw a card and you lose 2 life.

View File

@@ -0,0 +1,5 @@
Name:Eyes of the Beholder
ManaCost:4 B B
Types:Instant
A:SP$ Pump | Cost$ 4 B B | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -11 | NumDef$ -11 | IsCurse$ True | SpellDescription$ Target creature gets -11/-11 until end of turn.
Oracle:Target creature gets -11/-11 until end of turn.

View File

@@ -0,0 +1,14 @@
Name:Flameskull
ManaCost:1 R R
Types:Creature Skeleton
PT:3/1
K:Flying
K:CARDNAME can't block.
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigExile | TriggerDescription$ Rejuvenation When CARDNAME dies, exile it. If you do, exile the top card of your library. Until the end of your next turn, you may play one of those cards. (If you cast CARDNAME this way, you can't play the other card, and vice versa.)
SVar:TrigExile:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | SubAbility$ DBExile
SVar:DBExile:DB$ Dig | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ MayPlay | Duration$ UntilTheEndOfYourNextTurn | ForgetOnMoved$ Exile | SubAbility$ DBCleanup
SVar:MayPlay:Mode$ Continuous | Affected$ Card.IsRemembered | MayPlay$ True | MayPlayLimit$ 1 | EffectZone$ Command | AffectedZone$ Exile | Description$ Until the end of your next turn, you may play one of these cards. (If you cast EFFECTSOURCE this way, you can't play the other card, and vice versa.)
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:SacMe:3
Oracle:Flying\nFlameskull cant block.\nRejuvenation — When Flameskull dies, exile it. If you do, exile the top card of your library. Until the end of your next turn, you may play one of those cards. (If you cast Flameskull this way, you can't play the other card, and vice versa.)

View File

@@ -0,0 +1,16 @@
Name:Froghemoth
ManaCost:3 G G
Types:Creature Frog Horror
PT:4/4
K:Trample
K:Haste
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigExile | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, exile up to that many target cards from their graveyard. Put a +1/+1 counter on CARDNAME for each creature exiled this way. You gain 1 life for each noncreature card exiled this way.
SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card.DefenderCtrl | ChangeNum$ X | Hidden$ True | RememberChanged$ True | SubAbility$ DBPutCounter
SVar:DBPutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ Y | SubAbility$ DBGainLife
SVar:DBGainLife:DB$ GainLife | LifeAmount$ Z | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:TriggerCount$DamageAmount
SVar:Y:Remembered$Valid Creature
SVar:Z:Remembered$Valid Card.nonCreature
DeckHas:Ability$LifeGain & Ability$Counters
Oracle:Trample, haste\nWhenever Froghemoth deals combat damage to a player, exile up to that many target cards from their graveyard. Put a +1/+1 counter on Froghemoth for each creature exiled this way. You gain 1 life for each noncreature card exiled this way.

View File

@@ -0,0 +1,9 @@
Name:Gnoll Hunter
ManaCost:1 G
Types:Creature Gnoll
PT:2/2
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, put a +1/+1 counter on CARDNAME.
SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
SVar:PackTactics:Count$SumPower_Creature.attacking
DeckHas:Ability$Counters
Oracle:Pack tactics — Whenever Gnoll Hunter attacks, if you attacked with creatures with total power 6 or greater this combat, put a +1/+1 counter on Gnoll Hunter.

View File

@@ -0,0 +1,8 @@
Name:Goblin Javelineer
ManaCost:R
Types:Creature Goblin Warrior
PT:1/1
K:Haste
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigDealDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME becomes blocked, it deals 1 damage to target creature blocking it.
SVar:TrigDealDamage:DB$ DealDamage | DamageSource$ TriggeredAttacker | NumDmg$ 1 | Defined$ TriggeredBlockers
Oracle:Haste\nWhenever Goblin Javelineer becomes blocked, it deals 1 damage to target creature blocking it.

View File

@@ -0,0 +1,9 @@
Name:Grand Master of Flowers
ManaCost:2 W W
Types:Legendary Planeswalker Bahamut
Loyalty:3
S:Mode$ Continuous | Affected$ Card.Self | CheckSVar$ X | SVarCompare$ GE7 | AddKeyword$ Flying & Indestructible | AddType$ Creature & Dragon & God | SetPower$ 7 | SetToughness$ 7 | RemoveCardTypes$ True | CharacteristicDefining$ True | Description$ As long as CARDNAME has seven or more loyalty counters on him, he's a 7/7 Dragon God creature with flying and indestructible.
SVar:X:Count$CardCounters.LOYALTY
A:AB$ Pump | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature.withoutFirst Strike+withoutDouble Strike+withoutVigilance | KW$ HIDDEN CARDNAME can't attack or block. | IsCurse$ True | Duration$ UntilYourNextTurn | AILogic$ DetainNonLand | SpellDescription$ Target creature without first strike, double strike, or vigilance can't attack or block until your next turn.
A:AB$ ChangeZone | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedMonk of the Open Hand | ChangeNum$ 1 | Optional$ True | SpellDescription$ Search your library and/or graveyard for a card named Monk of the Open Hand, reveal it, and put it into your hand. If you search your library this way, shuffle.
Oracle:As long as Grand Master of Flowers has seven or more loyalty counters on him, hes a 7/7 Dragon God creature with flying and indestructible.\n[+1]: Target creature without first strike, double strike, or vigilance can't attack or block until your next turn.\n[+1]: Search your library and/or graveyard for a card named Monk of the Open Hand, reveal it, and put it into your hand. If you search your library this way, shuffle.

View File

@@ -0,0 +1,7 @@
Name:Gretchen Titchwillow
ManaCost:G U
Types:Legendary Creature Halfling Druid
PT:0/4
A:AB$ Draw | Cost$ 2 G U | Defined$ You | NumCards$ 1 | SubAbility$ DBChangeZone | SpellDescription$ Draw a card.
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | Optional$ You | ChangeType$ Land | ChangeNum$ 1 | SpellDescription$ You may put a land card from your hand onto the battlefield.
Oracle:{2}{G}{U}: Draw a card. You may put a land card from your hand onto the battlefield.

View File

@@ -0,0 +1,12 @@
Name:Hand of Vecna
ManaCost:3
Types:Legendary Artifact Equipment
T:Mode$Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, equipped creature or a creature you control named Vecna gets +X/+X until end of turn, where X is the number of cards in your hand.
SVar:TrigChoose:DB$ ChooseCard | Choices$ Creature.EquippedBy,Creature.YouCtrl+namedVecna | SubAbility$ DBPump
SVar:DBPump:DB$ Pump | Defined$ ChosenCard | NumAtt$ +X | NumDef$ +X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
K:Equip:PayLife<X>
K:Equip:2
SVar:X:Count$CardsInYourHand
DeckHints:Name$Eye of Vecna|The Book of Vile Darkness
Oracle:At the beginning of combat on your turn, equipped creature or a creature you control named Vecna gets +X/+X until end of turn, where X is the number of cards in your hand.\nEquip—Pay 1 life for each card in your hand.\nEquip {2}

View File

@@ -0,0 +1,9 @@
Name:Hobgoblin Bandit Lord
ManaCost:1 R R
Types:Creature Goblin Rogue
PT:2/3
S:Mode$ Continuous | AffectedZone$ Battlefield | Affected$ Goblin.Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Goblins you control get +1/+1.
A:AB$ DealDamage | Cost$ R T | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X | SpellDescription$ CARDNAME deals damage equal to the number of Goblins that entered the battlefield under your control this turn to any target.
SVar:X:Count$Valid Goblin.ThisTurnEntered+EnteredUnder You
DeckNeeds:Type$Goblin
Oracle:Other Goblins you control get +1/+1.\n{R}, {T}: Hobgoblin Bandit Lord deals damage equal to the number of Goblins that entered the battlefield under your control this turn to any target.

View File

@@ -0,0 +1,8 @@
Name:Hobgoblin Captain
ManaCost:1 R
Types:Creature Goblin Barbarian
PT:3/1
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, CARDNAME gains first strike until end of turn.
SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ First Strike
SVar:PackTactics:Count$SumPower_Creature.attacking
Oracle:Pack tactics — Whenever Hobgoblin Captain attacks, if you attacked with creatures with total power 6 or greater this combat, Hobgoblin Captain gains first strike until end of turn.

View File

@@ -0,0 +1,6 @@
Name:Hulking Bugbear
ManaCost:1 R R
Types:Creature Goblin
PT:3/3
K:Haste
Oracle:Haste

View File

@@ -0,0 +1,11 @@
Name:Ingenious Smith
ManaCost:1 W
Types:Creature Human Artificer
PT:1/1
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters the battlefield, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.
SVar:TrigDig:DB$ Dig | DigNum$ 4 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Artifact | RestRandomOrder$ True
T:Mode$ ChangesZoneAll | ValidCards$ Artifact.YouCtrl | Destination$ Battlefield | TriggerZones$ Battlefield | ActivationLimit$ 1 | Execute$ TrigPutCounter | TriggerDescription$ Whenever one or more artifacts enter the battlefield under your control, put a +1/+1 counter on CARDNAME. This ability triggers only once each turn.
SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
DeckHints:Type$Artifact
DeckHas:Ability$Counters
Oracle:When Ingenious Smith enters the battlefield, look at the top four cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.\nWhenever one or more artifacts enter the battlefield under your control, put a +1/+1 counter on Ingenious Smith. This ability triggers only once each turn.

View File

@@ -0,0 +1,9 @@
Name:Intrepid Outlander
ManaCost:1 G
Types:Creature Orc Ranger
PT:2/3
K:Reach
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigVenture | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, venture into the dungeon. (Enter the first room or advance to the next room.)
SVar:TrigVenture:DB$ Venture
SVar:PackTactics:Count$SumPower_Creature.attacking
Oracle:Reach\nPack tactics — Whenever Intrepid Outlander attacks, if you attacked with creatures with total power 6 or greater this combat, venture into the dungeon. (Enter the first room or advance to the next room.)

View File

@@ -0,0 +1,13 @@
Name:Krydle of Baldur's Gate
ManaCost:U B
Types:Legendary Creature Human Elf Rogue
PT:1/3
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigLoseLife | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player loses 1 life and mills a card, then you gain 1 life and scry 1.
SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredTarget | LifeAmount$ 1 | SubAbility$ DBMill
SVar:DBMill:DB$ Mill | Defined$ TriggeredTarget | NumCards$ 1 | SubAbility$ DBGainLife
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 | SubAbility$ DBScry
SVar:DBScry:DB$ Scry | Defined$ You | ScryNum$ 1
T:Mode$ AttackersDeclared | AttackingPlayer$ You | OptionalDecider$ You | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, you may pay {2}. If you do, target creature cant be blocked this turn.
SVar:TrigPump:AB$ Pump | Cost$ 2 | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN Unblockable
DeckHas:Ability$LifeGain
Oracle:Whenever Krydle of Baldur's Gate deals combat damage to a player, that player loses 1 life and mills a card, then you gain 1 life and scry 1.\nWhenever you attack, you may pay {2}. If you do, target creature can't be blocked this turn.

View File

@@ -0,0 +1,10 @@
Name:Lair of the Hydra
ManaCost:no cost
Types:Land
K:ETBReplacement:Other:LandTapped
SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionCheckSVar$ ETBCheckSVar2 | ConditionSVarCompare$ GT1 | SpellDescription$ If you control two or more other lands, CARDNAME enters the battlefield tapped.
SVar:ETBCheckSVar2:Count$LastStateBattlefield Land.YouCtrl
A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}.
A:AB$ Animate | Cost$ X G XCantBe0 | Defined$ Self | Power$ X | Toughness$ X | Types$ Creature,Hydra | Colors$ Green | SpellDescription$ Until end of turn, CARDNAME becomes an X/X green Hydra creature. It's still a land. X can't be 0.
SVar:X:Count$xPaid
Oracle:If you control two or more other lands, Lair of the Hydra enters the battlefield tapped.\n{T}: Add {G}.\n{X}{G}: Until end of turn, Lair of the Hydra becomes an X/X green Hydra creature. It's still a land. X can't be 0.

View File

@@ -0,0 +1,10 @@
Name:Loyal Warhound
ManaCost:1 W
Types:Creature Dog
PT:3/1
K:Vigilance
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | CheckSVar$ Y | SVarCompare$ GTX | TriggerDescription$ When CARDNAME enters the battlefield, if an opponent controls more lands than you, search your library for a basic Plains card, put it onto the battlefield tapped, then shuffle.
SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Plains.Basic | ChangeNum$ 1 | Mandatory$ True
SVar:X:Count$Valid Land.YouCtrl
SVar:Y:PlayerCountOpponents$HighestValid Land.YouCtrl
Oracle:Vigilance\nWhen Loyal Warhound enters the battlefield, if an opponent controls more lands than you, search your library for a basic Plains card, put it onto the battlefield tapped, then shuffle.

View File

@@ -0,0 +1,8 @@
Name:Mind Flayer
ManaCost:3 U U
Types:Creature Horror
PT:3/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ Dominate Monster When CARDNAME enters the battlefield, gain control of target creature for as long as you control CARDNAME.
SVar:TrigChange:DB$ GainControl | TgtPrompt$ Choose target creature | ValidTgts$ Creature | LoseControl$ LeavesPlay,LoseControl
SVar:PlayMain1:TRUE
Oracle:Dominate Monster — When Mind Flayer enters the battlefield, gain control of target creature for as long as you control Mind Flayer.

View File

@@ -0,0 +1,8 @@
Name:Minimus Containment
ManaCost:2 W
Types:Enchantment Aura
K:Enchant nonland permanent
A:SP$ Attach | Cost$ 2 W | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | AILogic$ Curse
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddType$ Artifact & Treasure | RemoveCardTypes$ True | AddAbility$ TreasureSac | RemoveAllAbilities$ True | Description$ Enchanted permanent is a Treasure artifact with "{T}, Sacrifice this artifact: Add one mana of any color," and it loses all other abilities. (If it was a creature, it's no longer a creature.)
SVar:TreasureSac:AB$ Mana | Cost$ T Sac<1/CARDNAME> | Produced$ Any | SpellDescription$ Add one mana of any color.
Oracle:Enchant nonland permanent\nEnchanted permanent is a Treasure artifact with "{T}, Sacrifice this artifact: Add one mana of any color," and it loses all other abilities. (If it was a creature, it's no longer a creature.)

View File

@@ -0,0 +1,10 @@
Name:Minion of the Mighty
ManaCost:R
Types:Creature Kobold
PT:0/1
K:Menace
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChange | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures wih total power 6 or greater this combat, you may put a Dragon creature card from your hand onto the battlefield tapped and attacking.
SVar:TrigChange:DB$ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.Dragon+YouCtrl | Tapped$ True | Attacking$ True
SVar:PackTactics:Count$SumPower_Creature.attacking
DeckHints:Type$Dragon
Oracle:Menace\nPack tactics — Whenever Minion of the Mighty attacks, if you attacked with creatures wih total power 6 or greater this combat, you may put a Dragon creature card from your hand onto the battlefield tapped and attacking.

View File

@@ -0,0 +1,10 @@
Name:Minsc, Beloved Ranger
ManaCost:R G W
Types:Legendary Creature Human Ranger
PT:3/3
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigMinsc | TriggerDescription$ When CARDNAME enters the battlefield, create Boo, a legendary 1/1 red Hamster creature token with trample and haste.
SVar:TrigMinsc:DB$ Token | TokenAmount$ 1 | TokenScript$ boo | TokenOwner$ You
A:AB$ Animate | Cost$ X | Power$ X | Toughness$ X | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | Types$ Giant | SorcerySpeed$ True | SpellDescription$ Until end of turn, target creature you control has base power and toughness X/X and becomes a Giant in addition to its other types. Activate only a sorcery.
SVar:X:Count$xPaid
DeckHas:Ability$Token
Oracle:When Minsc, Beloved Ranger enters the battlefield, create Boo, a legendary 1/1 red Hamster creature token with trample and haste.\n{X}: Until end of turn, target creature you control has base power and toughness X/X and becomes a Giant in addition to its other types. Activate only a sorcery.

View File

@@ -0,0 +1,10 @@
Name:Monk of the Open Hand
ManaCost:W
Types:Creature Elf Monk
PT:1/1
T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | CheckSVar$ YouCastThisTurn | SVarCompare$ EQ2 | NoResolvingCheck$ True | TriggerDescription$ Whenever you cast your second spell each turn, put a +1/+1 counter on CARDNAME.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
SVar:YouCastThisTurn:Count$ThisTurnCast_Card.YouCtrl
SVar:BuffedBy:Card
DeckHas:Ability$Counters
Oracle:Whenever you cast your second spell each turn, put a +1/+1 counter on Monk of the Open Hand.

View File

@@ -0,0 +1,15 @@
Name:Mordenkainen
ManaCost:4 U U
Types:Legendary Planeswalker Mordenkainen
Loyalty:5
A:AB$ Draw | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | NumCards$ 2 | SubAbility$ DBBottom | SpellDescription$ Draw two cards, then put a card from your hand on the bottom of your library.
SVar:DBBottom:DB$ ChangeZone | Origin$ Hand | Destination$ Library | Hand$ Library | LibraryPosition$ -1 | ChangeNum$ 1
A:AB$ Token | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | TokenOwner$ You | TokenScript$ u_x_x_dog_illusion_cardsinhand | TokenAmount$ 1 | SpellDescription$ Create a blue Dog Illusion creature token with "This creature's power and toughness are each equal to twice the number of cards in your hand."
A:AB$ ChangeZoneAll | Cost$ SubCounter<10/LOYALTY> | Planeswalker$ True | Ultimate$ True | ChangeType$ Card.YouCtrl | Origin$ Hand | Destination$ Library | RememberChanged$ True | SubAbility$ DBChangeZoneAll | SpellDescription$ Exchange your hand and library, then shuffle. You get an emblem with "You have no maximum hand size."
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ChangeType$ Card.YouCtrl+IsNotRemembered | Origin$ Library | Destination$ Hand | SubAbility$ DBShuffle
SVar:DBShuffle:DB$ Shuffle | Defined$ You | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBEmblem
SVar:DBEmblem:DB$ Effect | Name$ Emblem - Mordenkainen | Image$ emblem_mordenkainen | StaticAbilities$ UnlimitedHand | Stackable$ False | Duration$ Permanent | AILogic$ Always
SVar:UnlimitedHand:Mode$ Continuous | EffectZone$ Command | Affected$ You | SetMaxHandSize$ Unlimited | Description$ You have no maximum hand size.
DeckHas:Ability$Token
Oracle:[+2]: Draw two cards, then put a card from your hand on the bottom of your library.\n[-2]: Create a blue Dog Illusion creature token with "This creature's power and toughness are each equal to twice the number of cards in your hand."\n[-10]: Exchange your hand and library, then shuffle. You get an emblem with "You have no maximum hand size."

View File

@@ -0,0 +1,8 @@
Name:Orb of Dragonkind
ManaCost:1 R
Types:Artifact
A:AB$ Mana | Cost$ 1 T | Produced$ Combo W U B R G | Amount$ 2 | RestrictValid$ Card.Dragon,Activated.Dragon | SpellDescription$ Add two mana in any combination of colors. Spend this mana only to cast Dragon spells or to activate abilities of Dragons.
A:AB$ Dig | Cost$ R T Sac<1/CARDNAME> | DigNum$ 7 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Dragon | RestRandomOrder$ True | SpellDescription$ Look at the top seven cards of your library. You may reveal a Dragon card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.
SVar:BuffedBy:Dragon
DeckHints:Type$Dragon
Oracle:{1}, {T}: Add two mana in any combination of colors. Spend this mana only to cast Dragon spells or to activate abilities of Dragons.\n{R}, {T}, Sacrifice Orb of Dragonkind: Look at the top seven cards of your library. You may reveal a Dragon card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.

View File

@@ -0,0 +1,10 @@
Name:Oswald Fiddlebender
ManaCost:1 W
Types:Legendary Creature Gnome Artificer
PT:2/2
A:AB$ ChangeZone | Cost$ W T Sac<1/Artifact> | Origin$ Library | Destination$ Battlefield | ChangeType$ Artifact.cmcEQX | ChangeNum$ 1 | SorcerySpeed$ True | AILogic$ SacAndUpgrade | SpellDescription$ Search your library for an artifact card with mana value equal to 1 plus the sacrificed artifact's mana value, put that card onto the battlefield, then shuffle. Activate only as a sorcery.
SVar:X:Sacrificed$CardManaCost/Plus.1
SVar:AIPreference:SacCost$Artifact
DeckHas:Ability$Sacrifice
DeckHints:Type$Artifact
Oracle:{T}, Sacrifice an artifact: Search your library for an artifact card with mana value equal to 1 plus the sacrificed artifact's mana value, put that card onto the battlefield, then shuffle. Activate only as a sorcery.

View File

@@ -0,0 +1,9 @@
Name:Priest of Ancient Lore
ManaCost:2 W
Types:Creature Dwarf Cleric
PT:2/1
T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigLife | TriggerDescription$ When CARDNAME enters the battlefield, you gain 1 life and draw a card.
SVar:TrigLife:DB$ GainLife | LifeAmount$ 1 | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw
DeckHas:Ability$LifeGain
Oracle:When Priest of Ancient Lore enters the battlefield, you gain 1 life and draw a card.

View File

@@ -0,0 +1,15 @@
Name:Prosper, Tome-Bound
ManaCost:2 B R
Types:Legendary Creature Tiefling Warlock
PT:1/4
K:Deathtouch
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ Mystic Arcanum — At the beginning of your end step, exile the top card of your library. Until the end of your next turn, you may play that card.
SVar:TrigExile:DB$ Dig | Defined$ You | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top card of your library. Until the end of your next turn, you may play that card.
SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered | Duration$ UntilTheEndOfYourNextTurn | SubAbility$ DBCleanup | ForgetOnMoved$ Exile
SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until the end of your next turn, you may play that card.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
T:Mode$ SpellCast | ValidCard$ Card.wasCastFromExile | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Pact Boon — Whenever you play a card from exile, create a Treasure token.
T:Mode$ ChangesZone | Origin$ Exile | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Pact Boon — Whenever you play a card from exile, create a Treasure token.
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You | LegacyImage$ c a treasure sac afr
DeckHas:Ability$Token
Oracle:Deathtouch\nMystic Arcanum — At the beginning of your end step, exile the top card of your library. Until the end of your next turn, you may play that card.\nPact Boon — Whenever you play a card from exile, create a Treasure token.

View File

@@ -0,0 +1,7 @@
Name:Ray of Enfeeblement
ManaCost:B
Types:Instant
A:SP$ Pump | Cost$ B | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | NumAtt$ -4 | NumDef$ -X | SpellDescription$ Target creature gets -4/-1 until end of turn. If that creature is white, it gets -4/-4 until end of turn instead.
SVar:X:Count$Compare Y GE1.4.1
SVar:Y:Targeted$Valid Creature.White
Oracle:Target creature gets -4/-1 until end of turn. If that creature is white, it gets -4/-4 until end of turn instead.

View File

@@ -0,0 +1,8 @@
Name:Red Dragon
ManaCost:4 R R
Types:Creature Dragon
PT:4/4
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDealDamage | TriggerDescription$ Fire Breath — When CARDNAME enters the battlefield, it deals 4 damage to each opponent.
SVar:TrigDealDamage:DB$ DealDamage | NumDmg$ 4 | Defined$ Player.Opponent
Oracle:Flying\nFire Breath — When Red Dragon enters the battlefield, it deals 4 damage to each opponent.

View File

@@ -0,0 +1,6 @@
Name:Rimeshield Frost Giant
ManaCost:3 U U
Types:Creature Giant Warrior
PT:4/5
K:Ward:3
Oracle:Ward {3} (Whenever this creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {3}.)

View File

@@ -0,0 +1,10 @@
Name:Shessra, Death's Whisper
ManaCost:2 B G
Types:Legendary Creature Human Elf Warlock
PT:1/3
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigProvoke | TriggerDescription$ Bewitching Whispers — When CARDNAME enters the battlefield, target creature blocks this turn if able.
SVar:TrigProvoke:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME blocks each combat if able.
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE1 | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whispers of the Grave — At the beginning of your end step, if a creature died this turn, you may pay 2 life. If you do, draw a card.
SVar:TrigDraw:AB$ Draw | Cost$ PayLife<2> | NumCards$ 1
SVar:X:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
Oracle:Bewitching Whispers — When Shessra, Deaths Whisper enters the battlefield, target creature blocks this turn if able.\nWhispers of the Grave — At the beginning of your end step, if a creature died this turn, you may pay 2 life. If you do, draw a card.

View File

@@ -0,0 +1,8 @@
Name:Silver Raven
ManaCost:U
Types:Artifact Creature Bird
PT:1/1
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When CARDNAME enters the battlefield, scry 1.
SVar:TrigScry:DB$ Scry | ScryNum$ 1
Oracle:Flying\nWhen Silver Raven enters the battlefield, scry 1.

View File

@@ -0,0 +1,11 @@
Name:Targ Nar, Demon-Fang Gnoll
ManaCost:R G
Types:Legendary Creature Gnoll
PT:2/2
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, attacking creatures get +1/+0 until end of turn.
A:AB$ Pump | Cost$ 2 R G | NumAtt$ +X | NumDef$ +Y | SpellDescription$ Double CARDNAMEs power and toughness until end of turn.
SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.attacking | NumAtt$ 1
SVar:X:Count$CardPower
SVar:Y:Count$CardToughness
SVar:PackTactics:Count$SumPower_Creature.attacking
Oracle:Pack tactics — Whenever Targ Nar, Demon-Fang Gnoll attacks, if you attacked with creatures with total power 6 or greater this combat, attacking creatures get +1/+0 until end of turn.\n{2}{R}{G}: Double Targ Nars power and toughness until end of turn.

View File

@@ -0,0 +1,8 @@
Name:Teleportation Circle
ManaCost:3 W
Types:Enchantment
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ At the beginning of your end step, exile up to one target artifact or creature you control, then return that card to the battlefield under its owner's control.
SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | ValidTgts$ Artifact.YouCtrl,Creature.YouCtrl | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target artifact or creature | SubAbility$ DBReturn
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ All | Destination$ Battlefield | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
Oracle:At the beginning of your end step, exile up to one target artifact or creature you control, then return that card to the battlefield under its owner's control.

View File

@@ -0,0 +1,12 @@
Name:The Book of Vile Darkness
ManaCost:B B B
Types:Legendary Artifact
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | CheckSVar$ X | SVarCompare$ GE2 | TriggerDescription$ At the beginning of your end step, if you lost 2 or more life this turn, create a 2/2 black Zombie creature token.
SVar:TrigToken:DB$ Token | TokenScript$ b_2_2_zombie
SVar:X:PlayerCountPropertyYou$LifeLostThisTurn
A:AB$ Token | Cost$ T Exile<1/CARDNAME> Exile<1/Artifact.YouCtrl+namedEye of Vecna> Exile<1/Artifact.YouCtrl+namedHand of Vecna> | RememberCostCards$ True | ImprintTokens$ True | CostDesc$ {T}, Exile CARDNAME and artifacts you control named Eye of Vecna and Hand of Vecna: | TokenScript$ vecna | SubAbility$ DBAnimate | SpellDescription$ Create Vecna, a legendary 8/8 black Zombie God creature token with indestructible. It gains all triggered abilities of the exiled cards.
SVar:DBAnimate:DB$ Animate | Defined$ Imprinted | Duration$ Permanent | GainsTriggeredAbilitiesOf$ Remembered
DeckHas:Ability$Token
DeckHints:Type$Zombie
DeckHints:Name$Eye of Vecna|Hand of Vecna
Oracle:At the beginning of your end step, if you lost 2 or more life this turn, create a 2/2 black Zombie creature token.\n{T}, Exile The Book of Vile Darkness and artifacts you control named Eye of Vecna and Hand of Vecna: Create Vecna, a legendary 8/8 black Zombie God creature token with indestructible. It gains all triggered abilities of the exiled cards.

View File

@@ -0,0 +1,12 @@
Name:Tiger-Tribe Hunter
ManaCost:3 R R
Types:Creature Human Barbarian
PT:4/4
K:Trample
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigImmediate | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, you may sacrifice another creature. If you do, CARDNAME deals damage equal to the sacrificed creature's power to target creature.
SVar:TrigImmediate:AB$ ImmediateTrigger | Cost$ Sac<1/Creature.Other/another creature> | RememberObjects$ Sacrificed | Execute$ TrigDamage | TriggerDescription$ If you do, CARDNAME deals damage equal to the sacrificed creature's power to target creature.
SVar:TrigDamage:DB$ DealDamage | ConditionDefined$ DelayTriggerRememberedLKI | ValidTgts$ Creature | TgtPrompt$ Select any target | NumDmg$ X
SVar:X:TriggerRemembered$CardPower
SVar:PackTactics:Count$SumPower_Creature.attacking
DeckHas:Ability$Sacrifice
Oracle:Trample\nPack tactics — Whenever Tiger-Tribe Hunter attacks, if you attacked with creatures with total power 6 or greater this combat, you may sacrifice another creature. If you do, Tiger-Tribe Hunter deals damage equal to the sacrificed creature's power to target creature.

View File

@@ -0,0 +1,15 @@
Name:Treasure Chest
ManaCost:3
Types:Artifact
A:AB$ RollDice | Cost$ Sac<1/CARDNAME> | Sides$ 20 | ResultSubAbilities$ 1:Trapped,2-9:DBToken,10-19:DBGainLife,20:DBChangeZone | SpellDescription$ Roll a d20.
SVar:Trapped:DB$ LoseLife | Defined$ You | LifeAmount$ 3 | SpellDescription$ 1 VERT Trapped! — You lose 3 life.
SVar:DBToken:DB$ Token | TokenAmount$ 5 | TokenScript$ c_a_treasure_sac | SpellDescription$ 2-9 VERT Create five Treasure tokens.
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 3 | SubAbility$ DBDraw | SpellDescription$ 10-19 VERT You gain 3 life and draw three cards.
SVar:DBDraw:DB$ Draw | NumCards$ 3
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 1 | Shuffle$ False | RememberChanged$ True | SubAbility$ DBChangeZone1 | SpellDescription$ 20 VERT Search your library for a card. If its an artifact card, you may put it onto the battlefield. Otherwise, put that card into your hand. Then shuffle.
SVar:DBChangeZone1:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Battlefield | ConditionDefined$ Remembered | ConditionPresent$ Artifact | Optional$ True | ForgetChanged$ True | SubAbility$ DBChangeZone2
SVar:DBChangeZone2:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Hand | SubAbility$ DBShuffle
SVar:DBShuffle:DB$ Shuffle | Defined$ You | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
DeckHas:Ability$Token & Ability$Sacrifice & Ability$LifeGain
Oracle:{4}, Sacrifice Treasure Chest: Roll a d20.\n1 | Trapped! — You lose 3 life.\n2-9 | Create five Treasure tokens.\n10-19 | You gain 3 life and draw three cards.\n20 | Search your library for a card. If its an artifact card, you may put it onto the battlefield. Otherwise, put that card into your hand. Then shuffle.

View File

@@ -0,0 +1,8 @@
Name:Treasure Vault
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
A:AB$ Token | Cost$ X X T Sac<1/CARDNAME> | TokenAmount$ X | TokenScript$ c_a_treasure_sac | SpellDescription$ Create X Treasure tokens.
SVar:X:Count$xPaid
DeckHas:Ability$Token & Ability$Sacrifice
Oracle:{T}: Add {C}.\n{X}{X}, {T}, Sacrifice Treasure Vault: Create X Treasure tokens.

View File

@@ -0,0 +1,10 @@
Name:Trelasarra, Moon Dancer
ManaCost:G W
Types:Legendary Creature Elf Cleric
PT:2/2
T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you gain life, put a +1/+1 counter on CARDNAME and scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.)
SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBScry
SVar:DBScry:DB$ Scry | ScryNum$ 1
DeckHints:Ability$LifeGain
DeckHas:Ability$Counters
Oracle:Whenever you gain life, put a +1/+1 counter on Trelasarra, Moon Dancer and scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.)

View File

@@ -0,0 +1,7 @@
Name:True Polymorph
ManaCost:4 U U
Types:Instant
A:SP$ Pump | ValidTgts$ Artifact,Creature | TgtPrompt$ Select target artifact or creature to polymorph | SubAbility$ DBClone | StackDescription$ {c:ThisTargetedCard} | SpellDescription$ Target artifact or creature becomes a copy of another target artifact or creature.
SVar:DBClone:DB$ Clone | CloneTarget$ ParentTarget | ValidTgts$ Artifact,Creature | TgtPrompt$ Select another target artifact or creature to copy | TargetUnique$ True | StackDescription$ becomes a copy of {c:ThisTargetedCard}.
AI:RemoveDeck:Random
Oracle:Target artifact or creature becomes a copy of another target artifact or creature.

View File

@@ -0,0 +1,9 @@
Name:Unexpected Windfall
ManaCost:2 R R
Types:Sorcery
A:SP$ Draw | Cost$ 3 R Discard<1/Card/card> | CostDesc$ As an additional cost to cast this spell, discard a card. | NumCards$ 2 | Defined$ You | SubAbility$ DBToken | SpellDescription$ Draw two cards and create two Treasure tokens. (They're artifacts with "{T}, Sacrifice this artifact: Add one mana of any color.")
SVar:DBToken:DB$ Token | TokenAmount$ 2 | TokenScript$ c_a_treasure_sac | TokenOwner$ You
DeckHas:Ability$Discard
DeckHints:Keyword$Madness & Ability$Delirium
DeckHas:Ability$Token
Oracle:As an additional cost to cast this spell, discard a card.\nDraw two cards and create two Treasure tokens. (They're artifacts with "{T}, Sacrifice this artifact: Add one mana of any color.")

View File

@@ -0,0 +1,9 @@
Name:Werewolf Pack Leader
ManaCost:G G
Types:Creature Human Werewolf
PT:3/3
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerZones$ Battlefield | CheckSVar$ PackTactics | SVarCompare$ GE6 | NoResolvingCheck$ True | TriggerDescription$ Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, draw a card.
A:AB$ Animate | Cost$ 3 G | ValidCard$ Card.Self | Power$ 5 | Toughness$ 3 | Keywords$ Trample | RemoveTypes$ Human | SpellDescription$ Until end of turn, CARDNAME has base power and toughness 5/3, gains trample, and isn't a Human.
SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1
SVar:PackTactics:Count$SumPower_Creature.attacking
Oracle:Pack tactics — Whenever Werewolf Pack Leader attacks, if you attacked with creatures with total power 6 or greater this combat, draw a card.\n{3}{G}: Until end of turn, Werewolf Pack Leader has base power and toughness 5/3, gains trample, and isn't a Human.

View File

@@ -0,0 +1,11 @@
Name:Westgate Regent
ManaCost:3 B B
Types:Creature Vampire
PT:4/4
K:Flying
K:Ward:Discard<1/Card>
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigPutCounter | CombatDamage$ True | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, put that many +1/+1 counters on it.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ X
SVar:X:TriggerCount$DamageAmount
DeckHas:Ability$Counters
Oracle:Flying\nWard — Discard a card. (Whenever this creature becomes the target of a spell or ability an opponent controls, counter it unless that player discards a card.)\nWhenever Westgate Regent deals combat damage to a player, put that many +1/+1 counters on it.

View File

@@ -0,0 +1,10 @@
Name:White Dragon
ManaCost:4 W W
Types:Creature Dragon
PT:4/4
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigTap | TriggerDescription$ Cold Breath — When CARDNAME enters the battlefield, tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step.
SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Choose target creature an opponent controls. | SubAbility$ DBPump
SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ HIDDEN This card doesn't untap during your next untap step. | Duration$ Permanent
SVar:PlayMain1:TRUE
Oracle:Flying\nCold Breath — When White Dragon enters the battlefield, tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step.

View File

@@ -0,0 +1,6 @@
Name:Wish
ManaCost:2 R
Types:Sorcery
A:SP$ Effect | StaticAbilities$ PlaySideboard | SpellDescription$ You may play a card you own from outside the game this turn.
SVar:PlaySideboard:Mode$ Continuous | Affected$ Card.YouOwn | MayPlay$ True | MayPlayLimit$ 1 | EffectZone$ Command | AffectedZone$ Sideboard | Description$ You may play a card you own from outside the game this turn.
Oracle:You may play a card you own from outside the game this turn.

View File

@@ -0,0 +1,10 @@
Name:Xorn
ManaCost:2 R
Types:Creature Elemental
PT:3/2
R:Event$ CreateToken | ValidPlayer$ You | ValidToken$ Treasure | ReplaceWith$ AdditionalToken | Description$ If you would create one or more Treasure tokens, instead create those tokens plus an additional Treasure token.
SVar:AdditionalToken:DB$ ReplaceEffect | VarName$ TokenNum | VarValue$ X
SVar:X:ReplaceCount$TokenNum/Plus.1
DeckNeeds:Type$Token
AI:RemoveDeck:Random
Oracle:If you would create one or more Treasure tokens, instead create those tokens plus an additional Treasure token.

View File

@@ -0,0 +1,15 @@
Name:War of the Spark
ManaCost:3 B
Types:Enchantment Saga
K:Saga:3:TrigChangeZone,TrigSac,TrigExile
SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Hand,Graveyard | Destination$ Battlefield | ChangeType$ Creature.Zombie+setWAR,Planeswalker.setWAR | DefinedPlayer$ Player | ChangeNum$ 1 | SpellDescription$ Each player may put a planeswalker or Zombie card from War of the Spark from their hand or graveyard onto the battlefield.
SVar:TrigSac:DB$ Sacrifice | Defined$ You | Amount$ SacX | SacValid$ Creature,Planeswalker | RememberSacrificed$ True | Optional$ True | SubAbility$ DBEdict | SpellDescription$ Sacrifice any number of creatures and/or planeswalkers. Each opponent sacrifices that many creatures and/or planeswalkers.
SVar:DBEdict:DB$ Sacrifice | Defined$ Player.Opponent | SacValid$ Creature,Planeswalker | SacMessage$ Creature,Planeswalker | Amount$ EdictX
SVar:TrigExile:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature.Bolas,Planeswalker.Bolas | TgtPrompt$ Select up to one target Bolas | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBProliferate | SpellDescription$ Exile up to one target Bolas. Proliferate three times.
SVar:DBProliferate:DB$ Proliferate | SubAbility$ DBProliferate2 | SpellDescription$ Proliferate three times.
SVar:DBProliferate2:DB$ Proliferate | SubAbility$ DBProliferate3
SVar:DBProliferate3:DB$ Proliferate
SVar:SacX:Count$Valid Creature.YouCtrl/Plus.SacPlanes
SVar:SacPlanes:Count$Valid Planeswalker.YouCtrl
SVar:EdictX:Remembered$Amount
Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Each player may put a planeswalker or Zombie card from War of the Spark from their hand or graveyard onto the battlefield.\nII — Sacrifice any number of creatures and/or planeswalkers. Each opponent sacrifices that many creatures and/or planeswalkers.\nIII — Exile up to one target Bolas. Proliferate three times.

View File

@@ -0,0 +1,17 @@
[metadata]
Code=HTR19
Date=2020-08-01
Name=2019 Heroes of the Realm
Code2=HTR19
MciCode=htr19
Type=Funny
ScryfallCode=HTR19
[cards]
1 M Collectigull
2 M Keeper of the Secret Lair
3 M War of the Spark
4 M Champions of Archery
5 M Myntasha, Honored One
6 M The Cinematic Phoenix
7 M Fabled Path of Searo Point

View File

@@ -0,0 +1,16 @@
[metadata]
Code=AFC
Date=2021-07-23
Name=Dungeons & Dragons: Adventures in the Forgotten Realms Commander
Type=Commander
ScryfallCode=AFC
[cards]
1 M Galea, Kindler of Hope
2 M Prosper, Tome-Bound
3 M Sefris of the Hidden Ways
4 M Vrondiss, Rage of Ancients
317 M Galea, Kindler of Hope
324 M Prosper, Tome-Bound
326 M Sefris of the Hidden Ways
328 M Vrondiss, Rage of Ancients

View File

@@ -9,34 +9,54 @@ ScryfallCode=AFR
[cards]
1 C +2 Mace
2 C Arborea Pegasus
3 U Blink Dog
4 M The Book of Exalted Deeds
5 C Celestial Unicorn
6 U Cleric Class
7 U Cloister Gargoyle
8 R Dancing Sword
9 C Dawnbringer Cleric
10 C Delver's Torch
11 C Devoted Paladin
12 U Divine Smite
13 U Dragon's Disciple
14 C Dwarfhold Champion
15 R Flumph
16 C Gloom Stalker
17 M Grand Master of Flowers
18 R Guardian of Faith
19 C Half-Elf Monk
20 M Icingdeath, Frost Tyrant
21 U Ingenious Smith
22 U Keen-Eared Sentry
23 R Loyal Warhound
24 C Minimus Containment
25 U Monk of the Open Hand
26 U Moon-Blessed Cleric
27 R Nadaar, Selfless Paladin
28 R Oswald Fiddlebender
29 R Paladin Class
30 C Paladin's Shield
31 C Planar Ally
32 U Plate Armor
33 U Portable Hole
34 C Potion of Healing
35 C Priest of Ancient Lore
36 U Rally Maneuver
37 C Ranger's Hawk
38 C Steadfast Paladin
39 R Teleportation Circle
40 C Veteran Dungeoneer
41 U White Dragon
42 C You Hear Something on Watch
43 C You're Ambushed on the Road
44 U Aberrant Mind Sorcerer
45 C Air-Cult Elemental
46 C Arcane Investigator
47 C Bar the Gate
48 R The Blackstaff of Waterdeep
49 U Blue Dragon
50 C Charmed Sleep
51 C Clever Conjurer
52 C Contact Other Plane
@@ -49,6 +69,9 @@ ScryfallCode=AFR
59 U Fly
60 R Grazilaxx, Illithid Scholar
61 U Guild Thief
62 M Iymrith, Desert Doom
63 R Mind Flayer
64 M Mordenkainen
65 C Mordenkainen's Polymorph
66 C Pixie Guide
67 U Power of Persuasion
@@ -58,45 +81,72 @@ ScryfallCode=AFR
71 C Secret Door
72 C Shocking Grasp
73 C Shortcut Seeker
74 C Silver Raven
75 C Soulknife Spy
76 U Split the Party
77 U Sudden Insight
78 R Tasha's Hideous Laughter
79 U Trickster's Talisman
80 R True Polymorph
81 U Wizard Class
82 R Wizard's Spellbook
83 C You Come to a River
84 C You Find the Villains' Lair
85 C You See a Guard Approach
86 R Yuan-Ti Malison
87 M Acererak the Archlich
88 R Asmodeus the Archfiend
89 C Baleful Beholder
90 U Black Dragon
91 M The Book of Vile Darkness
92 U Check for Traps
93 C Clattering Skeletons
94 C Deadly Dispute
95 U Death-Priest of Myrkul
96 U Demogorgon's Clutches
97 C Devour Intellect
98 U Drider
99 U Dungeon Crawler
100 M Ebondeath, Dracolich
101 C Eyes of the Beholder
102 C Fates' Reversal
103 C Feign Death
104 R Forsworn Paladin
105 R Gelatinous Cube
106 C Grim Bounty
107 U Grim Wanderer
108 C Herald of Hadar
109 C Hired Hexblade
110 C Hoard Robber
111 U Lightfoot Rogue
112 M Lolth, Spider Queen
113 C Manticore
114 U Power Word Kill
115 C Precipitous Drop
116 U Ray of Enfeeblement
117 U Reaper's Talisman
118 C Sepulcher Ghoul
119 C Shambling Ghast
120 U Skullport Merchant
121 R Sphere of Annihilation
122 C Thieves' Tools
123 C Vampire Spawn
124 R Vorpal Sword
125 U Warlock Class
126 R Westgate Regent
127 R Wight
128 C Yuan-Ti Fang-Blade
129 C Zombie Ogre
130 C Armory Veteran
131 U Barbarian Class
132 U Battle Cry Goblin
133 C Boots of Speed
134 C Brazen Dwarf
135 U Burning Hands
136 U Chaos Channeler
137 U Critical Hit
138 R Delina, Wild Mage
139 C Dragon's Fire
140 C Dueling Rapier
141 C Earth-Cult Elemental
142 C Farideh's Fireball
@@ -104,20 +154,27 @@ ScryfallCode=AFR
144 C Goblin Javelineer
145 U Goblin Morningstar
146 C Hoarding Ogre
147 R Hobgoblin Bandit Lord
148 C Hobgoblin Captain
149 U Hulking Bugbear
150 C Improvised Weaponry
151 M Inferno of the Star Mounts
152 C Jaded Sell-Sword
153 C Kick in the Door
154 U Magic Missile
155 R Meteor Swarm
156 R Minion of the Mighty
157 R Orb of Dragonkind
158 C Plundering Barbarian
159 C Price of Loyalty
160 U Red Dragon
161 U Rust Monster
162 C Swarming Goblins
163 U Tiger-Tribe Hunter
164 C Unexpected Windfall
165 C Valor Singer
166 R Wish
167 R Xorn
168 C You Come to the Gnoll Camp
169 U You Find Some Prisoners
170 U You See a Pair of Goblins
@@ -127,28 +184,42 @@ ScryfallCode=AFR
174 C Bull's Strength
175 U Choose Your Weapon
176 R Circle of Dreams Druid
177 C Circle of the Moon Druid
178 C Compelled Duel
179 C Dire Wolf Prowler
180 U Druid Class
181 M Ellywick Tumblestrum
182 C Elturgard Ranger
183 C Find the Path
184 R Froghemoth
185 C Gnoll Hunter
186 U Green Dragon
186 U Hunter's Mark
187 C Hill Giant Herdgorger
188 U Hunter's Mark
189 C Inspiring Bard
190 R Instrument of the Bards
191 U Intrepid Outlander
192 U Loathsome Troll
193 R Long Rest
194 U Lurking Roper
195 C Neverwinter Dryad
196 R Ochre Jelly
197 M Old Gnawbone
198 C Owlbear
199 C Plummet
200 U Prosperous Innkeeper
201 U Purple Worm
202 R Ranger Class
203 C Ranger's Longbow
204 C Scaled Herbalist
205 C Spoils of the Hunt
206 C Sylvan Shepherd
207 M The Tarrasque
208 C Underdark Basilisk
209 R Varis, Silverymoon Ranger
210 U Wandering Troubadour
211 R Werewolf Pack Leader
212 U Wild Shape
213 C You Find a Cursed Idol
214 U You Happen On a Glade
215 U You Meet in a Tavern
@@ -158,12 +229,18 @@ ScryfallCode=AFR
219 U Bruenor Battlehammer
220 R Drizzt Do'Urden
221 U Farideh, Devil's Chosen
222 R Fighter Class
223 U Gretchen Titchwillow
224 U Hama Pashar, Ruin Seeker
225 U Kalain, Reclusive Painter
226 U Krydle of Baldur's Gate
227 M Minsc, Beloved Ranger
228 R Monk Class
229 R Orcus, Prince of Undeath
230 R Rogue Class
231 U Shessra, Death's Whisper
232 R Skeletal Swarming
233 R Sorcerer Class
234 U Targ Nar, Demon-Fang Gnoll
235 M Tiamat
236 U Trelasarra, Moon Dancer
@@ -173,8 +250,14 @@ ScryfallCode=AFR
240 U Bag of Holding
241 M The Deck of Many Things
242 U Dungeon Map
243 R Eye of Vecna
244 U Fifty Feet of Rope
245 C Greataxe
246 R Hand of Vecna
247 U Iron Golem
248 C Leather Armor
249 C Mimic
250 C Spare Dagger
251 C Spiked Pit Trap
252 R Treasure Chest
253 R Cave of the Frost Dragon
@@ -183,36 +266,52 @@ ScryfallCode=AFR
256 C Evolving Wilds
257 R Hall of Storm Giants
258 R Hive of the Eye Tyrant
262 L Plains
263 L Plains
264 L Plains
265 L Plains
266 L Island
267 L Island
268 L Island
269 L Island
270 L Swamp
271 L Swamp
272 L Swamp
273 L Swamp
274 L Mountain
275 L Mountain
276 L Mountain
277 L Mountain
278 L Forest
279 L Forest
280 L Forest
281 L Forest
259 R Lair of the Hydra
260 U Temple of the Dragon Queen
261 R Treasure Vault
262 C Plains
263 C Plains
264 C Plains
265 C Plains
266 C Island
267 C Island
268 C Island
269 C Island
270 C Swamp
271 C Swamp
272 C Swamp
273 C Swamp
274 C Mountain
275 C Mountain
276 C Mountain
277 C Mountain
278 C Forest
279 C Forest
280 C Forest
281 C Forest
[borderless]
282 M Grand Master of Flowers
283 M Mordenkainen
284 M Lolth, Spider Queen
285 M Zariel, Archduke of Avernus
286 M Ellywick Tumblestrum
287 M Icingdeath, Frost Tyrant
288 U White Dragon
289 U Blue Dragon
290 M Iymrith, Desert Doom
291 U Black Dragon
292 M Ebondeath, Dracolich
293 M Inferno of the Star Mounts
294 U Red Dragon
295 U Green Dragon
296 M Old Gnawbone
297 R Adult Gold Dragon
298 M Tiamat
[showcase]
299 C Arborea Pegasus
300 U Blink Dog
301 C Celestial Unicorn
302 U Cloister Gargoyle
303 R Nadaar, Selfless Paladin
@@ -220,26 +319,33 @@ ScryfallCode=AFR
305 U Displacer Beast
306 C Djinni Windseer
307 R Dragon Turtle
308 R Mind Flayer
309 C Pixie Guide
310 C Rimeshield Frost Giant
311 C Baleful Beholder
312 C Clattering Skeletons
313 R Gelatinous Cube
314 C Manticore
315 R Westgate Regent
316 R Wight
317 R Delina, Wild Mage
318 C Goblin Javelineer
319 U Hulking Bugbear
320 R Minion of the Mighty
321 U Rust Monster
322 R Xorn
323 R Zalto, Fire Giant Duke
324 C Bulette
325 C Dire Wolf Prowler
326 C Gnoll Hunter
327 U Loathsome Troll
328 U Lurking Roper
329 C Neverwinter Dryad
330 R Ochre Jelly
331 C Owlbear
332 U Purple Worm
333 M The Tarrasque
334 C Underdark Basilisk
335 R Varis, Silverymoon Ranger
336 U Barrowin of Clan Undurr
337 U Bruenor Battlehammer
@@ -249,9 +355,11 @@ ScryfallCode=AFR
341 U Hama Pashar, Ruin Seeker
342 U Kalain, Reclusive Painter
343 U Krydle of Baldur's Gate
344 M Minsc, Beloved Ranger
345 U Shessra, Death's Whisper
346 U Trelasarra, Moon Dancer
347 R Volo, Guide to Monsters
348 U Iron Golem
349 C Mimic
350 R Cave of the Frost Dragon
351 R Den of the Bugbear
@@ -259,35 +367,58 @@ ScryfallCode=AFR
353 C Evolving Wilds
354 R Hall of Storm Giants
355 R Hive of the Eye Tyrant
356 R Lair of the Hydra
357 U Temple of the Dragon Queen
358 R Treasure Vault
[extended art]
359 M The Book of Exalted Deeds
360 R Dancing Sword
361 R Flumph
362 R Guardian of Faith
363 R Loyal Warhound
364 R Teleportation Circle
365 R The Blackstaff of Waterdeep
366 M Demilich
367 R Grazilaxx, Illithid Scholar
368 R Tasha's Hideous Laughter
369 R True Polymorph
370 R Wizard's Spellbook
371 R Yuan-Ti Malison
372 M Acererak the Archlich
373 R Asmodeus the Archfiend
374 M The Book of Vile Darkness
375 R Forsworn Paladin
376 R Sphere of Annihilation
377 R Vorpal Sword
378 M Flameskull
379 R Hobgoblin Bandit Lord
380 R Meteor Swarm
381 R Orb of Dragonkind
382 R Wish
383 R Circle of Dreams Druid
384 R Froghemoth
385 R Instrument of the Bards
386 R Long Rest
387 R Werewolf Pack Leader
388 R Orcus, Prince of Undeath
389 R Skeletal Swarming
390 R Triumphant Adventurer
391 M Xanathar, Guild Kingpin
392 M The Deck of Many Things
393 R Eye of Vecna
394 R Hand of Vecna
395 R Treasure Chest
[buy a box]
396 R Vorpal Sword
[promo]
397 R Treasure Chest
398 U Portable Hole
399 C You Find the Villains' Lair
400 U Power Word Kill
401 U Magic Missile
402 U Prosperous Innkeeper
[dungeons]

View File

@@ -887,7 +887,7 @@ lblSet=Auflage
#Set word has different meanings in other languages
lblDefault=Standard
lblType=Typ
lblPlaneswalkerDeckSort=Planeswalker Deck
lblPlaneswalkerDeckSort=Planeswalker-Deck
lblRarity=Seltenheit
lblConvertToFoil=Foil
lblMulticolor=Mehrfarbig
@@ -904,6 +904,7 @@ lblCard=Karte
lblFormat=Format
lblFormats=Formate
lblQuestWorld=Quest-Welt
lblBlock=Block
lblSets=Sets
lblTypes=Typen
lblConvertedManaCosts=umgewandelte Manakosten
@@ -2558,6 +2559,8 @@ lblLibraryNCards=Bibliothek ({0})
lblExileNCards=Exil ({0})
lblFlashbackNCards=Rückblende-Karten ({0})
lblCommandZoneNCards=Komandozone ({0})
lblAnteZoneNCards=Ante zone ({0})
lblSideboardNCards=Sideboard ({0})
lblWhiteManaOfN=Weißes Mana ({0})
lblBlueManaOfN=Blaues Mana ({0})
lblBlackManaOfN=Schwarzes Mana ({0})

View File

@@ -2558,6 +2558,8 @@ lblLibraryNCards=Library ({0})
lblExileNCards=Exile ({0})
lblFlashbackNCards=Flashback cards ({0})
lblCommandZoneNCards=Command zone ({0})
lblAnteZoneNCards=Ante zone ({0})
lblSideboardNCards=Sideboard ({0})
lblWhiteManaOfN=White mana ({0})
lblBlueManaOfN=Blue mana ({0})
lblBlackManaOfN=Black mana ({0})

View File

@@ -2557,6 +2557,8 @@ lblLibraryNCards=Biblioteca ({0})
lblExileNCards=Exilio ({0})
lblFlashbackNCards=Cartas con retrospectiva ({0})
lblCommandZoneNCards=Zona de comando ({0})
lblAnteZoneNCards=Ante zone ({0})
lblSideboardNCards=Sideboard ({0})
lblWhiteManaOfN=Maná blanco ({0})
lblBlueManaOfN=Maná azul ({0})
lblBlackManaOfN=Maná negro ({0})

View File

@@ -2557,6 +2557,8 @@ lblLibraryNCards=Grimorio ({0})
lblExileNCards=Esilio ({0})
lblFlashbackNCards=Carte Flashback ({0})
lblCommandZoneNCards=Zona di Comando ({0})
lblAnteZoneNCards=Ante zone ({0})
lblSideboardNCards=Sideboard ({0})
lblWhiteManaOfN=Mana Bianco ({0})
lblBlueManaOfN=Mana Blu ({0})
lblBlackManaOfN=Mana Nero ({0})

View File

@@ -2558,6 +2558,8 @@ lblLibraryNCards=ライブラリー ({0})
lblExileNCards=追放 ({0})
lblFlashbackNCards=フラッシュバックカード ({0})
lblCommandZoneNCards=統率領域 ({0})
lblAnteZoneNCards=アンティ領域 ({0})
lblSideboardNCards=サイドボード ({0})
lblWhiteManaOfN=白マナ ({0})
lblBlueManaOfN=青マナ ({0})
lblBlackManaOfN=黒マナ ({0})

View File

@@ -2558,6 +2558,8 @@ lblLibraryNCards=牌库 ({0})
lblExileNCards=放逐区 ({0})
lblFlashbackNCards=可返照 ({0})
lblCommandZoneNCards=指挥官区 ({0})
lblAnteZoneNCards=Ante zone ({0})
lblSideboardNCards=Sideboard ({0})
lblWhiteManaOfN=白色法术力 ({0})
lblBlueManaOfN=蓝色法术力 ({0})
lblBlackManaOfN=黑色法术力 ({0})

View File

@@ -102,6 +102,7 @@ Gamer:Gamers
Gargoyle:Gargoyles
Germ:Germs
Giant:Giants
Gnoll:Gnolls
Gnome:Gnomes
Goat:Goats
Goblin:Goblins
@@ -113,6 +114,7 @@ Gremlin:Gremlins
Griffin:Griffins
Hag:Hags
Halfling:Halflings
Hamster:Hamsters
Harpy:Harpies
Hellion:Hellions
Hippo:Hippos
@@ -314,6 +316,7 @@ Angrath
Arlinn
Ashiok
B.O.B.
Bahamut
Basri
Bolas
Calix
@@ -347,6 +350,7 @@ Koth
Liliana
Lolth
Lukka
Mordenkainen
Nahiri
Narset
Niko
@@ -378,3 +382,4 @@ Wrenn
Xenagos
Yanggu
Yanling
Zariel

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 KiB

After

Width:  |  Height:  |  Size: 306 KiB

View File

@@ -0,0 +1,8 @@
Name:Boo
ManaCost:no cost
Types:Legendary Creature Hamster
Colors:red
PT:1/1
K:Trample
K:Haste
Oracle:Trample, haste

View File

@@ -0,0 +1,8 @@
Name:Dog Illusion
ManaCost:no cost
Types:Creature Dog Illusion
Colors:blue
PT:*/*
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ This creature's power and toughness are each equal to twice the number of cards in your hand.
SVar:X:Count$InYourHand/Times.2
Oracle:This creature's power and toughness are each equal to twice the number of cards in your hand.

View File

@@ -0,0 +1,7 @@
Name:Vecna
ManaCost:no cost
Types:Legendary Creature Zombie God
Colors:black
PT:8/8
K:Indestructible
Oracle:Indestructible

View File

@@ -86,7 +86,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
UI_IMAGE_CACHE_MAXIMUM("400"),
UI_OVERLAY_FOIL_EFFECT ("true"),
UI_HIDE_REMINDER_TEXT ("false"),
UI_SR_OPTIMIZE ("false"),
UI_SR_OPTIMIZE ("false"),
UI_OPEN_PACKS_INDIV ("false"),
UI_STACK_CREATURES ("false"),
UI_UPLOAD_DRAFT ("false"),
@@ -238,12 +238,18 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
ZONE_LOC_HUMAN_GRAVEYARD(""),
ZONE_LOC_HUMAN_EXILE(""),
ZONE_LOC_HUMAN_FLASHBACK(""),
ZONE_LOC_HUMAN_COMMAND(""),
ZONE_LOC_HUMAN_ANTE(""),
ZONE_LOC_HUMAN_SIDEBOARD(""),
ZONE_LOC_AI_HAND(""),
ZONE_LOC_AI_LIBRARY(""),
ZONE_LOC_AI_GRAVEYARD(""),
ZONE_LOC_AI_EXILE(""),
ZONE_LOC_AI_FLASHBACK(""),
ZONE_LOC_AI_COMMAND(""),
ZONE_LOC_AI_ANTE(""),
ZONE_LOC_AI_SIDEBOARD(""),
CHAT_WINDOW_LOC(""),

View File

@@ -20,7 +20,7 @@ package forge.localinstance.skin;
/**
* Assembles settings from selected or default theme as appropriate. Saves in a
* hashtable, access using .get(settingName) method.
*
*
*/
public enum FSkinProp {
//backgrounds
@@ -62,6 +62,11 @@ public enum FSkinProp {
IMG_ZONE_GRAVEYARD (new int[] {320, 0, 40, 40}, PropType.IMAGE),
IMG_HDZONE_GRAVEYARD (new int[] {132, 6, 128, 128}, PropType.BUTTONS),
IMG_ZONE_ANTE (new int[] {360, 0, 40, 40}, PropType.IMAGE),
IMG_ZONE_SIDEBOARD (new int[] {360, 40, 40, 40}, PropType.IMAGE),
IMG_HDZONE_SIDEBOARD (new int[] {132, 1792, 128, 128}, PropType.BUTTONS),
IMG_HDZONE_MANAPOOL (new int[] {2, 6, 128, 128}, PropType.BUTTONS),
IMG_ZONE_POISON (new int[] {320, 80, 40, 40}, PropType.IMAGE),
@@ -143,7 +148,7 @@ public enum FSkinProp {
IMG_COUNTERS_MULTI (new int[] {80, 400, 80, 80}, PropType.IMAGE),
IMG_ENERGY (new int[] {320, 120, 40, 40}, PropType.IMAGE),
IMG_EXPERIENCE (new int[] {280, 120, 40, 30}, PropType.IMAGE),
//foils
FOIL_01 (new int[] {0, 0, 400, 570}, PropType.FOIL),
FOIL_02 (new int[] {400, 0, 400, 570}, PropType.FOIL),
@@ -395,7 +400,7 @@ public enum FSkinProp {
IMG_FAV4 (new int[] {300, 0, 100, 100}, PropType.FAVICON),
IMG_FAV5 (new int[] {400, 0, 100, 100}, PropType.FAVICON),
IMG_FAVNONE (new int[] {500, 0, 100, 100}, PropType.FAVICON),
IMG_QUEST_DRAFT_DECK (new int[] {0, 0, 680, 475}, PropType.IMAGE),
//COMMANDER
IMG_ABILITY_COMMANDER (new int[] {330, 576, 80, 80}, PropType.ABILITY),
@@ -452,7 +457,7 @@ public enum FSkinProp {
IMG_ABILITY_PROTECT_U (new int[] {2, 330, 80, 80}, PropType.ABILITY),
IMG_ABILITY_PROTECT_UW (new int[] {84, 330, 80, 80}, PropType.ABILITY),
IMG_ABILITY_PROTECT_W (new int[] {166, 330, 80, 80}, PropType.ABILITY);
private int[] coords;
private PropType type;