mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
Merge branch 'working' of https://github.com/schnautzr/forge into working
This commit is contained in:
@@ -275,7 +275,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
|
|||||||
tgt = sa.getTargetRestrictions();
|
tgt = sa.getTargetRestrictions();
|
||||||
}
|
}
|
||||||
|
|
||||||
return !((tgt != null) && !isValid(tgt.getValidTgts(), aura.getController(), aura, sa));
|
return tgt != null && isValid(tgt.getValidTgts(), aura.getController(), aura, sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Counters!
|
// Counters!
|
||||||
|
|||||||
@@ -1450,7 +1450,11 @@ public class AbilityUtils {
|
|||||||
|
|
||||||
// Needed - Equip an untapped creature with Sword of the Paruns then cast Deadshot on it. Should deal 2 more damage.
|
// Needed - Equip an untapped creature with Sword of the Paruns then cast Deadshot on it. Should deal 2 more damage.
|
||||||
game.getAction().checkStaticAbilities(); // this will refresh continuous abilities for players and permanents.
|
game.getAction().checkStaticAbilities(); // this will refresh continuous abilities for players and permanents.
|
||||||
game.getTriggerHandler().collectTriggerForWaiting();
|
if (sa.isReplacementAbility()) {
|
||||||
|
game.getTriggerHandler().collectTriggerForWaiting();
|
||||||
|
} else {
|
||||||
|
game.getTriggerHandler().resetActiveTriggers();
|
||||||
|
}
|
||||||
AbilityUtils.resolveApiAbility(abSub, game);
|
AbilityUtils.resolveApiAbility(abSub, game);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6340,7 +6340,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
return isValid(tgt.getValidTgts(), aura.getController(), aura, sa);
|
return isValid(tgt.getValidTgts(), aura.getController(), aura, sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2,11 +2,7 @@ package forge.adventure.scene;
|
|||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
|
import com.badlogic.gdx.scenes.scene2d.ui.*;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Table;
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Window;
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
||||||
import com.badlogic.gdx.utils.Align;
|
import com.badlogic.gdx.utils.Align;
|
||||||
import com.badlogic.gdx.utils.IntMap;
|
import com.badlogic.gdx.utils.IntMap;
|
||||||
@@ -14,6 +10,7 @@ import com.github.tommyettinger.textra.TextraButton;
|
|||||||
import com.github.tommyettinger.textra.TextraLabel;
|
import com.github.tommyettinger.textra.TextraLabel;
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.adventure.player.AdventurePlayer;
|
import forge.adventure.player.AdventurePlayer;
|
||||||
|
import forge.adventure.stage.GameHUD;
|
||||||
import forge.adventure.util.Controls;
|
import forge.adventure.util.Controls;
|
||||||
import forge.adventure.util.Current;
|
import forge.adventure.util.Current;
|
||||||
|
|
||||||
@@ -168,6 +165,8 @@ public class DeckSelectScene extends UIScene {
|
|||||||
buttons.get(i).layout();
|
buttons.get(i).layout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
GameHUD.getInstance().pauseMusic();
|
||||||
|
GameHUD.getInstance().playAudio();
|
||||||
select(Current.player().getSelectedDeckIndex());
|
select(Current.player().getSelectedDeckIndex());
|
||||||
performTouch(scrollPane); //can use mouse wheel if available to scroll after selection
|
performTouch(scrollPane); //can use mouse wheel if available to scroll after selection
|
||||||
super.enter();
|
super.enter();
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package forge.adventure.scene;
|
|||||||
import forge.adventure.data.AdventureEventData;
|
import forge.adventure.data.AdventureEventData;
|
||||||
import forge.adventure.stage.GameHUD;
|
import forge.adventure.stage.GameHUD;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.sound.MusicPlaylist;
|
|
||||||
import forge.sound.SoundSystem;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DraftScene
|
* DraftScene
|
||||||
@@ -34,7 +32,7 @@ public class DraftScene extends ForgeScene {
|
|||||||
public void enter() {
|
public void enter() {
|
||||||
GameHUD.getInstance().getTouchpad().setVisible(false);
|
GameHUD.getInstance().getTouchpad().setVisible(false);
|
||||||
GameHUD.getInstance().pauseMusic();
|
GameHUD.getInstance().pauseMusic();
|
||||||
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS);
|
GameHUD.getInstance().playAudio();
|
||||||
screen = null;
|
screen = null;
|
||||||
getScreen();
|
getScreen();
|
||||||
screen.refresh();
|
screen.refresh();
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package forge.adventure.scene;
|
package forge.adventure.scene;
|
||||||
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.*;
|
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.ui.Table;
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.ui.Window;
|
||||||
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
||||||
import com.badlogic.gdx.utils.Align;
|
import com.badlogic.gdx.utils.Align;
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
@@ -11,17 +14,18 @@ import com.github.tommyettinger.textra.TextraLabel;
|
|||||||
import com.github.tommyettinger.textra.TypingLabel;
|
import com.github.tommyettinger.textra.TypingLabel;
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.adventure.character.EnemySprite;
|
import forge.adventure.character.EnemySprite;
|
||||||
import forge.adventure.data.*;
|
import forge.adventure.data.AdventureEventData;
|
||||||
|
import forge.adventure.data.DialogData;
|
||||||
import forge.adventure.player.AdventurePlayer;
|
import forge.adventure.player.AdventurePlayer;
|
||||||
import forge.adventure.stage.GameHUD;
|
import forge.adventure.stage.GameHUD;
|
||||||
import forge.adventure.stage.IAfterMatch;
|
import forge.adventure.stage.IAfterMatch;
|
||||||
import forge.adventure.stage.WorldStage;
|
import forge.adventure.stage.WorldStage;
|
||||||
import forge.adventure.util.*;
|
import forge.adventure.util.AdventureEventController;
|
||||||
|
import forge.adventure.util.Controls;
|
||||||
|
import forge.adventure.util.Current;
|
||||||
import forge.adventure.world.WorldSave;
|
import forge.adventure.world.WorldSave;
|
||||||
import forge.gui.FThreads;
|
import forge.gui.FThreads;
|
||||||
import forge.screens.TransitionScreen;
|
import forge.screens.TransitionScreen;
|
||||||
import forge.sound.MusicPlaylist;
|
|
||||||
import forge.sound.SoundSystem;
|
|
||||||
import forge.util.Callback;
|
import forge.util.Callback;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
@@ -381,7 +385,7 @@ public class EventScene extends MenuScene implements IAfterMatch {
|
|||||||
public void enter() {
|
public void enter() {
|
||||||
super.enter();
|
super.enter();
|
||||||
GameHUD.getInstance().pauseMusic();
|
GameHUD.getInstance().pauseMusic();
|
||||||
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS);
|
GameHUD.getInstance().playAudio();
|
||||||
scrollContainer.clear();
|
scrollContainer.clear();
|
||||||
|
|
||||||
if (money != null) {
|
if (money != null) {
|
||||||
|
|||||||
@@ -12,8 +12,6 @@ import forge.adventure.util.AdventureEventController;
|
|||||||
import forge.adventure.util.Controls;
|
import forge.adventure.util.Controls;
|
||||||
import forge.adventure.util.Current;
|
import forge.adventure.util.Current;
|
||||||
import forge.adventure.world.WorldSave;
|
import forge.adventure.world.WorldSave;
|
||||||
import forge.sound.MusicPlaylist;
|
|
||||||
import forge.sound.SoundSystem;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scene for the Inn in towns
|
* Scene for the Inn in towns
|
||||||
@@ -101,7 +99,7 @@ public class InnScene extends UIScene {
|
|||||||
super.enter();
|
super.enter();
|
||||||
refreshStatus();
|
refreshStatus();
|
||||||
GameHUD.getInstance().pauseMusic();
|
GameHUD.getInstance().pauseMusic();
|
||||||
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.TOWN);
|
GameHUD.getInstance().playAudio();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshStatus(){
|
private void refreshStatus(){
|
||||||
|
|||||||
@@ -32,8 +32,6 @@ import forge.localinstance.achievements.CardActivationAchievements;
|
|||||||
import forge.localinstance.achievements.PlaneswalkerAchievements;
|
import forge.localinstance.achievements.PlaneswalkerAchievements;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.player.GamePlayerUtil;
|
import forge.player.GamePlayerUtil;
|
||||||
import forge.sound.MusicPlaylist;
|
|
||||||
import forge.sound.SoundSystem;
|
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -191,7 +189,7 @@ public class PlayerStatisticScene extends UIScene {
|
|||||||
super.enter();
|
super.enter();
|
||||||
|
|
||||||
GameHUD.getInstance().pauseMusic();
|
GameHUD.getInstance().pauseMusic();
|
||||||
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS);
|
GameHUD.getInstance().playAudio();
|
||||||
|
|
||||||
achievementContainer.clear();
|
achievementContainer.clear();
|
||||||
updateAchievements(cardActivation, true);
|
updateAchievements(cardActivation, true);
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class RewardScene extends UIScene {
|
|||||||
|
|
||||||
Type type;
|
Type type;
|
||||||
Array<Actor> generated = new Array<>();
|
Array<Actor> generated = new Array<>();
|
||||||
static public final float CARD_WIDTH =550f ;
|
static public final float CARD_WIDTH = 550f ;
|
||||||
static public final float CARD_HEIGHT = 400f;
|
static public final float CARD_HEIGHT = 400f;
|
||||||
static public final float CARD_WIDTH_TO_HEIGHT = CARD_WIDTH / CARD_HEIGHT;
|
static public final float CARD_WIDTH_TO_HEIGHT = CARD_WIDTH / CARD_HEIGHT;
|
||||||
|
|
||||||
|
|||||||
@@ -152,6 +152,11 @@ public class SpellSmithScene extends UIScene {
|
|||||||
if (it.size() == 0)
|
if (it.size() == 0)
|
||||||
return false;
|
return false;
|
||||||
return (!Arrays.asList(Config.instance().getConfigData().restrictedEditions).contains(input.getCode()));
|
return (!Arrays.asList(Config.instance().getConfigData().restrictedEditions).contains(input.getCode()));
|
||||||
|
}).sorted(new Comparator<CardEdition>() {
|
||||||
|
@Override
|
||||||
|
public int compare(CardEdition e1, CardEdition e2) {
|
||||||
|
return e1.getName().compareTo(e2.getName());
|
||||||
|
}
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ PT:12/12
|
|||||||
K:ETBReplacement:Other:LandTapped
|
K:ETBReplacement:Other:LandTapped
|
||||||
SVar:LandTapped:DB$ Tap | Defined$ Self | SubAbility$ DBAddCounter | ETB$ True | SpellDescription$ CARDNAME enters the battlefield tapped with five slumber counters on it.
|
SVar:LandTapped:DB$ Tap | Defined$ Self | SubAbility$ DBAddCounter | ETB$ True | SpellDescription$ CARDNAME enters the battlefield tapped with five slumber counters on it.
|
||||||
SVar:DBAddCounter:DB$ PutCounter | Defined$ Self | ETB$ True | CounterType$ SLUMBER | CounterNum$ 5
|
SVar:DBAddCounter:DB$ PutCounter | Defined$ Self | ETB$ True | CounterType$ SLUMBER | CounterNum$ 5
|
||||||
S:Mode$ Continuous | Affected$ Card.Self+counters_GE1_SLUMBER | AddType$ Land | RemoveCardTypes$ True | Description$ As long as CARDNAME has a slumber counter on it, it's a land. (It's not a creature.)
|
S:Mode$ Continuous | Affected$ Card.Self+counters_GE1_SLUMBER | AddType$ Land | RemoveCardTypes$ True | Description$ As long as NICKNAME has a slumber counter on it, it's a land. (It's not a creature.)
|
||||||
T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ TrigRemoveCounter | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever you cast a spell, you may remove a slumber counter from CARDNAME.
|
T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ TrigRemoveCounter | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever you cast a spell, you may remove a slumber counter from NICKNAME.
|
||||||
SVar:TrigRemoveCounter:DB$ RemoveCounter | Defined$ Self | CounterType$ SLUMBER | CounterNum$ 1 | AILogic$ Always
|
SVar:TrigRemoveCounter:DB$ RemoveCounter | Defined$ Self | CounterType$ SLUMBER | CounterNum$ 1 | AILogic$ Always
|
||||||
A:AB$ Mana | Cost$ T | Produced$ G U | SpellDescription$ Add {G}{U}.
|
A:AB$ Mana | Cost$ T | Produced$ G U | SpellDescription$ Add {G}{U}.
|
||||||
Oracle:Arixmethes, Slumbering Isle enters the battlefield tapped with five slumber counters on it.\nAs long as Arixmethes has a slumber counter on it, it's a land. (It's not a creature.)\nWhenever you cast a spell, you may remove a slumber counter from Arixmethes.\n{T}: Add {G}{U}.
|
Oracle:Arixmethes, Slumbering Isle enters the battlefield tapped with five slumber counters on it.\nAs long as Arixmethes has a slumber counter on it, it's a land. (It's not a creature.)\nWhenever you cast a spell, you may remove a slumber counter from Arixmethes.\n{T}: Add {G}{U}.
|
||||||
|
|||||||
8
forge-gui/res/cardsfolder/upcoming/elven_farsight.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/elven_farsight.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
Name:Elven Farsight
|
||||||
|
ManaCost:G
|
||||||
|
Types:Sorcery
|
||||||
|
A:SP$ Scry | ScryNum$ 3 | SubAbility$ DBPeekAndReveal | SpellDescription$ Scry 3, then you may reveal the top card of your library. If it's a creature card, draw a card.
|
||||||
|
SVar:DBPeekAndReveal:DB$ PeekAndReveal | RevealOptional$ True | NoPeek$ True | RememberRevealed$ True | SubAbility$ DBDraw
|
||||||
|
SVar:DBDraw:DB$ Draw | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature | SubAbility$ DBCleanup
|
||||||
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
|
Oracle:Scry 3, then you may reveal the top card of your library. If it's a creature card, draw a card.
|
||||||
7
forge-gui/res/cardsfolder/upcoming/ent_draught_basin.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/ent_draught_basin.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Name:Ent-Draught Basin
|
||||||
|
ManaCost:2
|
||||||
|
Types:Artifact
|
||||||
|
A:AB$ PutCounter | Cost$ X | CounterType$ P1P1 | ValidTgts$ Creature.powerEQX | TgtPrompt$ Select target creature with power X | CounterNum$ 1 | SorcerySpeed$ True | SpellDescription$ Put a +1/+1 counter on target creature with power X. Activate only as a sorcery.
|
||||||
|
SVar:X:Count$xPaid
|
||||||
|
DeckHas:Ability$Counters
|
||||||
|
Oracle:{X}, {T}: Put a +1/+1 counter on target creature with power X. Activate only as a sorcery.
|
||||||
10
forge-gui/res/cardsfolder/upcoming/entish_restoration.txt
Normal file
10
forge-gui/res/cardsfolder/upcoming/entish_restoration.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Name:Entish Restoration
|
||||||
|
ManaCost:2 G
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ Sacrifice | Defined$ You | SacValid$ Land | SubAbility$ DBChangeZone | SpellDescription$ Sacrifice a land. Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. If you control a creature with power 4 or greater, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle.
|
||||||
|
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ X | Tapped$ True
|
||||||
|
SVar:AIPreference:SacCost$Land.Basic+tapped
|
||||||
|
SVar:X:Count$Compare Y GE1.3.2
|
||||||
|
SVar:Y:Count$Valid Creature.YouCtrl+powerGE4
|
||||||
|
DeckHas:Ability$Sacrifice
|
||||||
|
Oracle:Sacrifice a land. Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. If you control a creature with power 4 or greater, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle.
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
Name:Eomer of the Riddermark
|
||||||
|
ManaCost:4 R
|
||||||
|
Types:Legendary Creature Human Knight
|
||||||
|
PT:5/4
|
||||||
|
K:Haste
|
||||||
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | IsPresent$ Creature.greatestPower+YouCtrl | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, if you control a creature with the greatest power among creatures on the battlefield, create a 1/1 white Human Soldier creature token.
|
||||||
|
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_human_soldier | TokenOwner$ You
|
||||||
|
DeckHas:Ability$Token & Type$Soldier
|
||||||
|
SVar:HasAttackEffect:TRUE
|
||||||
|
Oracle:Haste\nWhenever Eomer of the Riddermark attacks, if you control a creature with the greatest power among creatures on the battlefield, create a 1/1 white Human Soldier creature token.
|
||||||
13
forge-gui/res/cardsfolder/upcoming/eowyn_lady_of_rohan.txt
Normal file
13
forge-gui/res/cardsfolder/upcoming/eowyn_lady_of_rohan.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Name:Eowyn, Lady of Rohan
|
||||||
|
ManaCost:2 W
|
||||||
|
Types:Legendary Creature Human Noble
|
||||||
|
PT:2/4
|
||||||
|
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ At the beginning of combat on your turn, target creature gains your choice of first strike or vigilance until end of turn. If that creature is equipped, it gains first strike and vigilance until end of turn instead.
|
||||||
|
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | SubAbility$ DBBranch
|
||||||
|
SVar:DBBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$ EQ1 | TrueSubAbility$ Equipped | FalseSubAbility$ NotEquipped
|
||||||
|
SVar:Equipped:DB$ Pump | Defined$ Targeted | KW$ First Strike & Vigilance
|
||||||
|
SVar:NotEquipped:DB$ Pump | KWChoice$ First Strike,Vigilance | Defined$ Targeted
|
||||||
|
SVar:X:Targeted$Valid Card.equipped
|
||||||
|
S:Mode$ ReduceCost | ValidCard$ Card | ValidSpell$ Activated.Equip | Activator$ You | Amount$ 1 | Description$ Equip abilities you activate cost {1} less to activate.
|
||||||
|
DeckHints:Type$Equipment
|
||||||
|
Oracle:At the beginning of combat on your turn, target creature gains your choice of first strike or vigilance until end of turn. If that creature is equipped, it gains first strike and vigilance until end of turn instead.\nEquip abilities you activate cost {1} less to activate.
|
||||||
8
forge-gui/res/cardsfolder/upcoming/erebor_flamesmith.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/erebor_flamesmith.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
Name:Erebor Flamesmith
|
||||||
|
ManaCost:1 R
|
||||||
|
Types:Creature Dwarf Artificer
|
||||||
|
PT:2/1
|
||||||
|
T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever you cast an instant or sorcery spell, CARDNAME deals 1 damage to each opponent.
|
||||||
|
SVar:TrigDamage:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 1
|
||||||
|
DeckHints:Type$Instant|Sorcery
|
||||||
|
Oracle:Whenever you cast an instant or sorcery spell, Erebor Flamesmith deals 1 damage to each opponent.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Name:Errand-Rider of Gondor
|
||||||
|
ManaCost:2 W
|
||||||
|
Types:Creature Human Soldier
|
||||||
|
PT:3/2
|
||||||
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. Then if you don't control a legendary creature, put a card from your hand on the bottom of your library.
|
||||||
|
SVar:TrigDraw:DB$ Draw | SubAbility$ DBChangeZone
|
||||||
|
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Library | ChangeNum$ 1 | Mandatory$ True | LibraryPosition$ -1 | ConditionPresent$ Creature.Legendary+YouCtrl | ConditionCompare$ EQ0
|
||||||
|
DeckHints:Type$Legendary & Type$Creature
|
||||||
|
Oracle:When Errand-Rider of Gondor enters the battlefield, draw a card. Then if you don't control a legendary creature, put a card from your hand on the bottom of your library.
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
Name:Escape from Orthanc
|
||||||
|
ManaCost:2 W
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ Pump | ValidTgts$ Creature | NumAtt$ 1 | NumDef$ 3 | KW$ Flying | SubAbility$ DBUntap | SpellDescription$ Target creature gets +1/+3 and gains flying until end of turn. Untap it.
|
||||||
|
SVar:DBUntap:DB$ Untap | Defined$ Targeted
|
||||||
|
Oracle:Target creature gets +1/+3 and gains flying until end of turn. Untap it.
|
||||||
10
forge-gui/res/cardsfolder/upcoming/esquire_of_the_king.txt
Normal file
10
forge-gui/res/cardsfolder/upcoming/esquire_of_the_king.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Name:Esquire of the King
|
||||||
|
ManaCost:W
|
||||||
|
Types:Creature Human Soldier
|
||||||
|
PT:1/1
|
||||||
|
K:Flying
|
||||||
|
A:AB$ PumpAll | NumAtt$ +1 | NumDef$ +1 | Cost$ 4 W T | ValidCards$ Creature.YouCtrl | ReduceCost$ X | SpellDescription$ Creatures you control get +1/+1 until end of turn. This ability costs {2} less to activate if you control a legendary creature.
|
||||||
|
SVar:X:Count$Compare Y GE1.2.0
|
||||||
|
SVar:Y:Count$Valid Creature.Legendary+YouCtrl
|
||||||
|
DeckHints:Type$Legendary & Type$Creature
|
||||||
|
Oracle:{4}{W}, {T}: Creatures you control get +1/+1 until end of turn. This ability costs {2} less to activate if you control a legendary creature.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Name:Fall of Cair Andros
|
||||||
|
ManaCost:2 R
|
||||||
|
Types:Enchantment
|
||||||
|
T:Mode$ ExcessDamage | ValidTarget$ Creature.OppCtrl | CombatDamage$ False | TriggerZones$ Battlefield | Execute$ TrigAmass | TriggerDescription$ Whenever a creature an opponent controls is dealt excess noncombat damage, amass Orcs X, where X is that excess damage. (Put X +1/+1 counters on an Army you control. It's also an Orc. If you don't control an Army, create a 0/0 black Orc Army creature token first.)
|
||||||
|
SVar:TrigAmass:DB$ Amass | Type$ Orc | Num$ X
|
||||||
|
SVar:X:TriggerCount$DamageAmount
|
||||||
|
A:AB$ DealDamage | Cost$ 7 R | ValidTgts$ Creature | NumDmg$ 7 | SpellDescription$ CARDNAME deals 7 damage to target creature.
|
||||||
|
DeckHas:Ability$Token|Counters & Type$Orc|Army
|
||||||
|
Oracle:Whenever a creature an opponent controls is dealt excess noncombat damage, amass Orcs X, where X is that excess damage. (Put X +1/+1 counters on an Army you control. It's also an Orc. If you don't control an Army, create a 0/0 black Orc Army creature token first.)\n{7}{R}: Fall of Cair Andros deals 7 damage to target creature.
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
Name:Grey Havens Navigator
|
||||||
|
ManaCost:2 U
|
||||||
|
Types:Creature Elf Pilot
|
||||||
|
PT:3/2
|
||||||
|
K:Flash
|
||||||
|
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:Flash\nWhen Grey Havens Navigator enters the battlefield, scry 1.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Name:Haradrim Spearmaster
|
||||||
|
ManaCost:2 R
|
||||||
|
Types:Creature Human Warrior
|
||||||
|
PT:2/3
|
||||||
|
K:Reach
|
||||||
|
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, another target creature you control gets +1/+0 until end of turn.
|
||||||
|
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Select another target creature you control | NumAtt$ 1
|
||||||
|
SVar:PlayMain1:TRUE
|
||||||
|
Oracle:Reach\nAt the beginning of combat on your turn, another target creature you control gets +1/+0 until end of turn.
|
||||||
7
forge-gui/res/cardsfolder/upcoming/hithlain_knots.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/hithlain_knots.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Name:Hithlain Knots
|
||||||
|
ManaCost:1 U
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ Tap | ValidTgts$ Creature | SubAbility$ DBScry | SpellDescription$ Tap target creature. Scry 1.
|
||||||
|
SVar:DBScry:DB$ Scry | ScryNum$ 1 | SubAbility$ DBDraw
|
||||||
|
SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card.
|
||||||
|
Oracle:Tap target creature. Scry 1.\nDraw a card.
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
Name:Ioreth of the Healing House
|
||||||
|
ManaCost:2 U
|
||||||
|
Types:Legendary Creature Human Cleric
|
||||||
|
PT:1/4
|
||||||
|
A:AB$ Untap | Cost$ T | ValidTgts$ Permanent.Other | TgtPrompt$ Select another target permanent | SpellDescription$ Untap another target permanent.
|
||||||
|
A:AB$ Untap | Cost$ T | ValidTgts$ Creature.Legendary | TgtPrompt$ Select two other legendary creatures | SpellDescription$ Untap two other target legendary creatures.
|
||||||
|
DeckHints:Type$Legendary & Type$Creature
|
||||||
|
Oracle:{T}: Untap another target permanent.\n{T}: Untap two other target legendary creatures.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
Name:Isolation at Orthanc
|
||||||
|
ManaCost:3 U
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Library | ValidTgts$ Creature | LibraryPosition$ 1 | SpellDescription$ Put target creature into its owner's library second from the top.
|
||||||
|
Oracle:Put target creature into its owner's library second from the top.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Name:Ithilien Kingfisher
|
||||||
|
ManaCost:2 U
|
||||||
|
Types:Creature Bird
|
||||||
|
PT:2/1
|
||||||
|
K:Flying
|
||||||
|
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME dies, draw a card.
|
||||||
|
SVar:TrigDraw:DB$ Draw | Defined$ TriggeredCardController | NumCards$ 1
|
||||||
|
SVar:SacMe:1
|
||||||
|
Oracle:Flying\nWhen Ithilien Kingfisher dies, draw a card.
|
||||||
7
forge-gui/res/cardsfolder/upcoming/lorien_revealed.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/lorien_revealed.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Name:Lorien Revealed
|
||||||
|
ManaCost:3 U U
|
||||||
|
Types:Sorcery
|
||||||
|
A:SP$ Draw | NumCards$ 3 | SpellDescription$ Draw three cards.
|
||||||
|
K:TypeCycling:Island:1
|
||||||
|
DeckHas:Ability$Discard
|
||||||
|
Oracle:Draw three cards.\nIslandcycling {1} ({1}, Discard this card: Search your library for an Island card, reveal it, put it into your hand, then shuffle.)
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
Name:The Balrog, Flame of Udun
|
||||||
|
ManaCost:3 B R
|
||||||
|
Types:Legendary Creature Avatar Demon
|
||||||
|
PT:7/7
|
||||||
|
K:Trample
|
||||||
|
T:Mode$ ChangesZone | Origin$ Battlefield | TriggerZones$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Legendary+OppCtrl | Execute$ TrigChange | TriggerDescription$ When a legendary creature an opponent controls dies, put CARDNAME on the bottom of its owner's library.
|
||||||
|
SVar:TrigChange:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1
|
||||||
|
Oracle:Trample\nWhen a legendary creature an opponent controls dies, put The Balrog, Flame of Udûn on the bottom of its owner's library.
|
||||||
11
forge-gui/res/cardsfolder/upcoming/the_bath_song.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/the_bath_song.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Name:The Bath Song
|
||||||
|
ManaCost:3 U
|
||||||
|
Types:Enchantment Saga
|
||||||
|
K:Saga:3:DBDraw,DBDraw,DBShuffle
|
||||||
|
SVar:DBDraw:DB$ Draw | NumCards$ 2 | SubAbility$ DBDiscard | SpellDescription$ Draw two cards, then discard a card.
|
||||||
|
SVar:DBDiscard:DB$ Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose
|
||||||
|
SVar:DBShuffle:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ X | Origin$ Graveyard | Destination$ Library | Shuffle$ True | SubAbility$ DBAdd | TgtPrompt$ Choose any target cards in your graveyard | ValidTgts$ Card.YouCtrl | SpellDescription$ Shuffle any number of target cards from your graveyard into your library. Add {U}{U}.
|
||||||
|
SVar:DBAdd:DB$ Mana | Produced$ U | Amount$ 2
|
||||||
|
SVar:X:Count$InYourYard
|
||||||
|
DeckHas:Ability$Discard|Graveyard
|
||||||
|
Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI, II — Draw two cards, then discard a card.\nIII — Shuffle any number of target cards from your graveyard into your library. Add {U}{U}.
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
Name:Witch-king, Bringer of Ruin
|
||||||
|
ManaCost:4 B B
|
||||||
|
Types:Legendary Creature Wraith Noble
|
||||||
|
PT:5/3
|
||||||
|
K:Flying
|
||||||
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME attacks, defending player sacrifices a creature with the least power among creatures they control.
|
||||||
|
SVar:TrigSac:DB$ Sacrifice | Defined$ TriggeredDefendingPlayer | SacValid$ Creature.leastPowerControlledBy TriggeredDefendingPlayer
|
||||||
|
SVar:HasAttackEffect:True
|
||||||
|
DeckHas:Ability$Sacrifice
|
||||||
|
Oracle:Flying\nWhenever Witch-king, Bringer of Ruin attacks, defending player sacrifices a creature with the least power among creatures they control.
|
||||||
@@ -18,3 +18,5 @@ ScryfallCode=SCH
|
|||||||
10 R Strangle @Sidharth Chaturvedi
|
10 R Strangle @Sidharth Chaturvedi
|
||||||
11 R Aether Channeler @Olivier Bernard
|
11 R Aether Channeler @Olivier Bernard
|
||||||
12 M Thalia and The Gitrog Monster @PINDURSKI
|
12 M Thalia and The Gitrog Monster @PINDURSKI
|
||||||
|
13 R Gifted Aetherborn @Lie Setiawan
|
||||||
|
14 R Eidolon of the Great Revel @Yigit Koroglu
|
||||||
|
|||||||
19
forge-gui/res/puzzle/MTGP_01.pzl
Normal file
19
forge-gui/res/puzzle/MTGP_01.pzl
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[metadata]
|
||||||
|
Name:MTG Puzzles #01 - Gaining Experience
|
||||||
|
URL:https://mtgpuzzles.com/puzzle/1
|
||||||
|
Goal:Win
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Medium
|
||||||
|
Description:Defeat your opponent before their next turn. You currently have 0 experience counters. Your opponent flashed in a Nebelgast Herald on your upkeep step, tapping your Mizzix of the Izmagnus. Can you find 4 damage to win?
|
||||||
|
[state]
|
||||||
|
turn=1
|
||||||
|
activeplayer=p0
|
||||||
|
activephase=MAIN1
|
||||||
|
p0life=5
|
||||||
|
p0hand=Banners Raised;Electrickery;Temporary Insanity
|
||||||
|
p0graveyard=Opt;Volcanic Spray
|
||||||
|
p0battlefield=Mizzix of the Izmagnus|Tapped;Mountain;Mountain;Sulfur Falls|NoETBTrigs;Sulfur Falls|NoETBTrigs
|
||||||
|
p1life=4
|
||||||
|
p1landsplayed=0
|
||||||
|
p1landsplayedlastturn=0
|
||||||
|
p1battlefield=Nebelgast Herald;Treetop Ambusher
|
||||||
21
forge-gui/res/puzzle/MTGP_02.pzl
Normal file
21
forge-gui/res/puzzle/MTGP_02.pzl
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[metadata]
|
||||||
|
Name:MTG Puzzles #02 - It's a Trap!
|
||||||
|
URL:https://mtgpuzzles.com/puzzle/2
|
||||||
|
Goal:Survive
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Easy
|
||||||
|
Description:Survive until your next turn. It's your opponents turn and they have attacked with 5 Construct tokens! It's their declare blockers step, can you find a way to survive this turn? Don't forget about Throne of the God-Pharaoh!
|
||||||
|
[state]
|
||||||
|
turn=1
|
||||||
|
activeplayer=p1
|
||||||
|
activephase=MAIN1
|
||||||
|
activephaseadvance=COMBAT_DECLARE_BLOCKERS
|
||||||
|
p0life=7
|
||||||
|
p0landsplayed=0
|
||||||
|
p0landsplayedlastturn=0
|
||||||
|
p0hand=Arrow Volley Trap;Pitfall Trap;Inferno Trap
|
||||||
|
p0battlefield=Viashino Fangtail;Rockslide Sorcerer;Mountain;Mountain;Plains;Plains
|
||||||
|
p1life=20
|
||||||
|
p1landsplayed=0
|
||||||
|
p1landsplayedlastturn=0
|
||||||
|
p1battlefield=Throne of the God-Pharaoh;T:c_4_4_a_construct;T:c_4_4_a_construct;T:c_4_4_a_construct;T:c_4_4_a_construct;T:c_4_4_a_construct
|
||||||
20
forge-gui/res/puzzle/MTGP_03.pzl
Normal file
20
forge-gui/res/puzzle/MTGP_03.pzl
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[metadata]
|
||||||
|
Name:MTG Puzzles #03 - Crews Control
|
||||||
|
URL:https://mtgpuzzles.com/puzzle/3
|
||||||
|
Goal:Win
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Medium
|
||||||
|
Description:Win this turn. The Illusions are winning! Saddle up your creatures and become victorious!
|
||||||
|
[state]
|
||||||
|
turn=1
|
||||||
|
activeplayer=p0
|
||||||
|
activephase=MAIN1
|
||||||
|
p0life=3
|
||||||
|
p0landsplayed=0
|
||||||
|
p0landsplayedlastturn=0
|
||||||
|
p0hand=Renegade Wheelsmith;Chaos Charm
|
||||||
|
p0battlefield=Mobile Garrison;Granger Guildmage;Knotvine Paladin;Mountain;Mountain;Mountain;Temple Garden|NoETBTrigs;Temple Garden|NoETBTrigs
|
||||||
|
p1life=8
|
||||||
|
p1landsplayed=0
|
||||||
|
p1landsplayedlastturn=0
|
||||||
|
p1battlefield=T:u_1_1_illusion_flying;T:u_1_1_illusion_flying;T:u_1_1_illusion_flying
|
||||||
20
forge-gui/res/puzzle/MTGP_04.pzl
Normal file
20
forge-gui/res/puzzle/MTGP_04.pzl
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[metadata]
|
||||||
|
Name:MTG Puzzles #04 - Enrage Against the Machine
|
||||||
|
URL:https://mtgpuzzles.com/puzzle/4
|
||||||
|
Goal:Win
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Very Hard
|
||||||
|
Description:Win this turn. Your spirit-engrage tribal deck is not doing as well as you planned. Your opponent played a Jin-Gitaxias on their turn and you must find a way to win before its too late! The solution should not depend on how Jin-Gitaxias, Core Augur blocks.
|
||||||
|
[state]
|
||||||
|
turn=1
|
||||||
|
activeplayer=p0
|
||||||
|
activephase=MAIN1
|
||||||
|
p0life=5
|
||||||
|
p0landsplayed=0
|
||||||
|
p0landsplayedlastturn=0
|
||||||
|
p0hand=Dark Withering;Tahngarth's Rage;Alms of the Vein
|
||||||
|
p0battlefield=Frilled Deathspitter;Niblis of Dusk;Supreme Phantom;Pyrohemia;Mountain;Mountain;Mountain;Mountain;Mountain;Watery Grave|NoETBTrigs;Watery Grave|NoETBTrigs
|
||||||
|
p1life=23
|
||||||
|
p1landsplayed=0
|
||||||
|
p1landsplayedlastturn=0
|
||||||
|
p1battlefield=Jin-Gitaxias, Core Augur
|
||||||
21
forge-gui/res/puzzle/MTGP_05.pzl
Normal file
21
forge-gui/res/puzzle/MTGP_05.pzl
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[metadata]
|
||||||
|
Name:MTG Puzzles #05 - Miracles of Nature
|
||||||
|
URL:https://mtgpuzzles.com/puzzle/5
|
||||||
|
Goal:Win
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Hard
|
||||||
|
Description:Win this turn. After a Gruuling match you're down to the last card in your library - can you get through your opponent's defenses to secure the win? It's the beginning of your Upkeep Step. Your library consists of only Blessings of Nature. Damping Sphere still increases the casting cost for any card's alternative casting cost. Your solution should not depend on how your opponent will block.
|
||||||
|
[state]
|
||||||
|
turn=1
|
||||||
|
activeplayer=p0
|
||||||
|
activephase=UPKEEP
|
||||||
|
p0life=6
|
||||||
|
p0landsplayed=0
|
||||||
|
p0landsplayedlastturn=0
|
||||||
|
p0hand=Electrostatic Bolt;Inner Calm, Outer Strength;Crash
|
||||||
|
p0library=Blessings of Nature
|
||||||
|
p0battlefield=Goblin Spy;Frontline Devastator;Forest;Forest;Forest;Mountain;Mountain;Mountain
|
||||||
|
p1life=6
|
||||||
|
p1landsplayed=0
|
||||||
|
p1landsplayedlastturn=0
|
||||||
|
p1battlefield=Butcher Ghoul;Guardian Automaton;Damping Sphere
|
||||||
21
forge-gui/res/puzzle/MTGP_06.pzl
Normal file
21
forge-gui/res/puzzle/MTGP_06.pzl
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[metadata]
|
||||||
|
Name:MTG Puzzles #06 - Lucky Number 13
|
||||||
|
URL:https://mtgpuzzles.com/puzzle/6
|
||||||
|
Goal:Win
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Hard
|
||||||
|
Description:Win this turn. It is your untap step and you and your opponent are dancing around 13 life. Can you find a way to win this turn? It's the beginning of your Untap Step. Assume the card you draw in your draw step is not necessary to solve this puzzle.
|
||||||
|
[state]
|
||||||
|
turn=1
|
||||||
|
activeplayer=p1
|
||||||
|
activephase=CLEANUP
|
||||||
|
p0life=10
|
||||||
|
p0landsplayed=0
|
||||||
|
p0landsplayedlastturn=0
|
||||||
|
p0hand=Blazing Salvo
|
||||||
|
p0battlefield=Oreskos Sun Guide|Tapped;Nocturnal Feeder;Axis of Mortality;Triskaidekaphobia;Savai Triome|Tapped|NoETBTrigs;Savai Triome|Tapped|NoETBTrigs;Savai Triome|Tapped|NoETBTrigs
|
||||||
|
p0library=Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt
|
||||||
|
p1life=14
|
||||||
|
p1landsplayed=0
|
||||||
|
p1landsplayedlastturn=0
|
||||||
|
p1battlefield=Bogardan Firefiend
|
||||||
21
forge-gui/res/puzzle/MTGP_08.pzl.disabled
Normal file
21
forge-gui/res/puzzle/MTGP_08.pzl.disabled
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Needs AI support for Ashling the Pilgrim to work correctly.
|
||||||
|
[metadata]
|
||||||
|
Name:MTG Puzzles #08 - Counter Intelligence
|
||||||
|
URL:https://mtgpuzzles.com/puzzle/8
|
||||||
|
Goal:Win
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Medium
|
||||||
|
Description:Win this turn. It's the eternal struggle between +1/+1 counters and -1/-1 counters, can you force your opponent's hand to secure the victory? Your opponent could activate Ashling at any point they have priority.
|
||||||
|
[state]
|
||||||
|
turn=1
|
||||||
|
activeplayer=p0
|
||||||
|
activephase=MAIN1
|
||||||
|
p0life=2
|
||||||
|
p0landsplayed=0
|
||||||
|
p0landsplayedlastturn=0
|
||||||
|
p0hand=Scar
|
||||||
|
p0battlefield=Dread Shade;Carnifex Demon|Counters:M1M1=2;Dread Shade;Swamp;Swamp;Swamp
|
||||||
|
p1life=10
|
||||||
|
p1landsplayed=0
|
||||||
|
p1landsplayedlastturn=0
|
||||||
|
p1battlefield=Ashling the Pilgrim;Cascade Bluffs;Cascade Bluffs;Cascade Bluffs;Shivan Reef;Shivan Reef;Shivan Reef
|
||||||
20
forge-gui/res/puzzle/MTGP_09.pzl
Normal file
20
forge-gui/res/puzzle/MTGP_09.pzl
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[metadata]
|
||||||
|
Name:MTG Puzzles #09 - Aqua Regia
|
||||||
|
URL:https://mtgpuzzles.com/puzzle/9
|
||||||
|
Goal:Win
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Easy
|
||||||
|
Description:Win this turn. You've done the hard work of getting your opponent below 0, now to actually win the game! Can you rustle up enough mana for your ultimate weapon and win this turn? Your opponent's life total is -1 (yes it's negative). Fungal Reaches does not have any storage counters.
|
||||||
|
[state]
|
||||||
|
turn=1
|
||||||
|
activeplayer=p0
|
||||||
|
activephase=MAIN1
|
||||||
|
p0life=3
|
||||||
|
p0landsplayed=0
|
||||||
|
p0landsplayedlastturn=0
|
||||||
|
p0hand=Watery Grave;Talisman of Impulse;Mana Crypt
|
||||||
|
p0battlefield=Legacy Weapon;Nimbus Maze;City of Traitors;Fungal Reaches;River of Tears;Caves of Koilos
|
||||||
|
p1life=-1
|
||||||
|
p1landsplayed=0
|
||||||
|
p1landsplayedlastturn=0
|
||||||
|
p1battlefield=Platinum Angel
|
||||||
Reference in New Issue
Block a user