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

This commit is contained in:
leriomaggio
2021-05-28 10:20:16 +01:00
43 changed files with 419 additions and 18 deletions

View File

@@ -1079,7 +1079,7 @@ public class DamageDealAi extends DamageAiBase {
saTgt.resetTargets(); saTgt.resetTargets();
saTgt.getTargets().add(tgtCreature != null && dmg < opponent.getLife() ? tgtCreature : opponent); saTgt.getTargets().add(tgtCreature != null && dmg < opponent.getLife() ? tgtCreature : opponent);
sa.setXManaCostPaid(dmg); saTgt.setXManaCostPaid(dmg);
return true; return true;
} }

View File

@@ -29,6 +29,7 @@ import java.io.OutputStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.Reader; import java.io.Reader;
import java.net.URL; import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -208,7 +209,8 @@ public final class FileUtil {
if ((file == null) || !file.exists()) { if ((file == null) || !file.exists()) {
return new ArrayList<>(); return new ArrayList<>();
} }
return FileUtil.readAllLines(new FileReader(file), false); Charset charset = Charset.forName("UTF-8");
return FileUtil.readAllLines(new FileReader(file, charset), false);
} catch (final Exception ex) { } catch (final Exception ex) {
throw new RuntimeException("FileUtil : readFile() error, " + ex); throw new RuntimeException("FileUtil : readFile() error, " + ex);
} }

View File

@@ -100,7 +100,12 @@ public class ChangeTargetsEffect extends SpellAbilityEffect {
changingTgtSA.resetTargets(); changingTgtSA.resetTargets();
List<GameEntity> candidates = changingTgtSA.getTargetRestrictions().getAllCandidates(changingTgtSA, true); List<GameEntity> candidates = changingTgtSA.getTargetRestrictions().getAllCandidates(changingTgtSA, true);
if (sa.hasParam("RandomTargetRestriction")) { if (sa.hasParam("RandomTargetRestriction")) {
candidates.removeIf(c -> !c.isValid(sa.getParam("RandomTargetRestriction").split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa)); candidates.removeIf(new java.util.function.Predicate<GameEntity>() {
@Override
public boolean test(GameEntity c) {
return !c.isValid(sa.getParam("RandomTargetRestriction").split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa);
}
});
} }
GameEntity choice = Aggregates.random(candidates); GameEntity choice = Aggregates.random(candidates);
changingTgtSA.getTargets().add(choice); changingTgtSA.getTargets().add(choice);

View File

@@ -3,6 +3,7 @@ package forge.game.ability.effects;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Predicate;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
@@ -166,7 +167,12 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
if (sa.hasParam("RandomTarget")){ if (sa.hasParam("RandomTarget")){
List<GameEntity> candidates = copy.getTargetRestrictions().getAllCandidates(chosenSA, true); List<GameEntity> candidates = copy.getTargetRestrictions().getAllCandidates(chosenSA, true);
if (sa.hasParam("RandomTargetRestriction")) { if (sa.hasParam("RandomTargetRestriction")) {
candidates.removeIf(c -> !c.isValid(sa.getParam("RandomTargetRestriction").split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa)); candidates.removeIf(new Predicate<GameEntity>() {
@Override
public boolean test(GameEntity c) {
return !c.isValid(sa.getParam("RandomTargetRestriction").split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa);
}
});
} }
GameEntity choice = Aggregates.random(candidates); GameEntity choice = Aggregates.random(candidates);
resetFirstTargetOnCopy(copy, choice, chosenSA); resetFirstTargetOnCopy(copy, choice, chosenSA);

View File

@@ -87,6 +87,20 @@ public class DigEffect extends SpellAbilityEffect {
final boolean mayBeSkipped = sa.hasParam("PromptToSkipOptionalAbility"); final boolean mayBeSkipped = sa.hasParam("PromptToSkipOptionalAbility");
final String optionalAbilityPrompt = sa.hasParam("OptionalAbilityPrompt") ? sa.getParam("OptionalAbilityPrompt") : ""; final String optionalAbilityPrompt = sa.hasParam("OptionalAbilityPrompt") ? sa.getParam("OptionalAbilityPrompt") : "";
boolean remZone1 = false;
boolean remZone2 = false;
if (sa.hasParam("RememberChanged")) {
remZone1 = true;
}
if (sa.hasParam("RememberMovedToZone")) {
if (sa.getParam("RememberMovedToZone").contains("1")) {
remZone1 = true;
}
if (sa.getParam("RememberMovedToZone").contains("2")) {
remZone2 = true;
}
}
boolean changeAll = false; boolean changeAll = false;
boolean allButOne = false; boolean allButOne = false;
@@ -341,7 +355,7 @@ public class DigEffect extends SpellAbilityEffect {
if (sa.hasParam("ForgetOtherRemembered")) { if (sa.hasParam("ForgetOtherRemembered")) {
host.clearRemembered(); host.clearRemembered();
} }
if (sa.hasParam("RememberChanged")) { if (remZone1) {
host.addRemembered(c); host.addRemembered(c);
} }
rest.remove(c); rest.remove(c);
@@ -376,6 +390,9 @@ public class DigEffect extends SpellAbilityEffect {
if (m != null && !origin.equals(m.getZone().getZoneType())) { if (m != null && !origin.equals(m.getZone().getZoneType())) {
table.put(origin, m.getZone().getZoneType(), m); table.put(origin, m.getZone().getZoneType(), m);
} }
if (remZone2) {
host.addRemembered(m);
}
} }
} }
else { else {
@@ -395,6 +412,9 @@ public class DigEffect extends SpellAbilityEffect {
} }
c.setExiledWith(effectHost); c.setExiledWith(effectHost);
c.setExiledBy(effectHost.getController()); c.setExiledBy(effectHost.getController());
if (remZone2) {
host.addRemembered(c);
}
} }
} }
} }

View File

@@ -595,6 +595,8 @@ public class CombatUtil {
walkTypes.add("Land.Legendary"); walkTypes.add("Land.Legendary");
} else if (keyword.equals("Nonbasic landwalk")) { } else if (keyword.equals("Nonbasic landwalk")) {
walkTypes.add("Land.nonBasic"); walkTypes.add("Land.nonBasic");
} else if (keyword.equals("Artifact landwalk")) {
walkTypes.add("Land.Artifact");
} else if (keyword.equals("Snow landwalk")) { } else if (keyword.equals("Snow landwalk")) {
walkTypes.add("Land.Snow"); walkTypes.add("Land.Snow");
} else if (keyword.endsWith("walk")) { } else if (keyword.endsWith("walk")) {

View File

@@ -1,10 +1,10 @@
Name:Infuse with Vitality Name:Infuse with Vitality
ManaCost:B G ManaCost:B G
Types:Instant Types:Instant
A:SP$ Pump | Cost$ B G | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Deathtouch | SpellDescription$ Until end of turn, target creature gains deathtouch and "When this creature dies, return it to the battlefield tapped under its owner's control." | SubAbility$ DBAnimate A:SP$ Pump | Cost$ B G | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Deathtouch | StackDescription$ Until end of turn, {c:Targeted} gains deathtouch and "When this creature dies, return it to the battlefield tapped under its owner's control." | SpellDescription$ Until end of turn, target creature gains deathtouch and "When this creature dies, return it to the battlefield tapped under its owner's control." | SubAbility$ DBAnimate
SVar:DBAnimate:DB$ Animate | Triggers$ SupernaturalStaminaChangeZone | sVars$ SupernaturalStaminaTrigChangeZone | Defined$ ParentTarget SVar:DBAnimate:DB$ Animate | Triggers$ DiesTrigger | Defined$ ParentTarget | SubAbility$ DBGainLife | StackDescription$ None
SVar:SupernaturalStaminaChangeZone:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ SupernaturalStaminaTrigChangeZone | TriggerController$ TriggeredCardController | TriggerDescription$ When this creature dies, return it to the battlefield tapped under its owner's control. SVar:DiesTrigger:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When this creature dies, return it to the battlefield tapped under its owner's control.
SVar:SupernaturalStaminaTrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | Defined$ TriggeredNewCardLKICopy | SubAbility$ DBGainLife SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | Defined$ TriggeredNewCardLKICopy
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2
DeckHas:Ability$LifeGain DeckHas:Ability$LifeGain
Oracle:Until end of turn, target creature gains deathtouch and "When this creature dies, return it to the battlefield tapped under its owner's control."\nYou gain 2 life. Oracle:Until end of turn, target creature gains deathtouch and "When this creature dies, return it to the battlefield tapped under its owner's control."\nYou gain 2 life.

View File

@@ -8,7 +8,7 @@ A:AB$ Token | Cost$ SubCounter<X/LOYALTY> | Planeswalker$ True | TokenScript$ gu
SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$xPaid SVar:X:Count$xPaid
A:AB$ ChangeZone | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Origin$ Library | Destination$ Exile | ChangeType$ Instant.SharesColorWith Card.Self,Sorcery.SharesColorWith Card.Self | ChangeNum$ 1 | SubAbility$ DBPlay | RememberChanged$ True | SpellDescription$ Search your library for an instant or sorcery card that shares a color with this planeswalker, exile that card, then shuffle. You may cast that card without paying its mana cost. A:AB$ ChangeZone | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | Origin$ Library | Destination$ Exile | ChangeType$ Instant.SharesColorWith Card.Self,Sorcery.SharesColorWith Card.Self | ChangeNum$ 1 | SubAbility$ DBPlay | RememberChanged$ True | SpellDescription$ Search your library for an instant or sorcery card that shares a color with this planeswalker, exile that card, then shuffle. You may cast that card without paying its mana cost.
SVar:DBPlay:DB$ Play | Defined$ Remembered | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup SVar:DBPlay:DB$ Play | Defined$ Remembered | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup
DeckHints:Type$Instant|Sorcery DeckHints:Type$Instant|Sorcery
DeckHas:Ability$Token & Ability$Counters DeckHas:Ability$Token & Ability$Counters

View File

@@ -22,7 +22,7 @@ Loyalty:4
S:Mode$ ReduceCost | ValidCard$ Instant,Sorcery | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Instant and sorcery spells you cast cost {1} less to cast. S:Mode$ ReduceCost | ValidCard$ Instant,Sorcery | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Instant and sorcery spells you cast cost {1} less to cast.
A:AB$ Animate | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select up to one target creature | TargetMin$ 0 | TargetMax$ 1 | Power$ 0 | Toughness$ 2 | Duration$ UntilYourNextTurn | SpellDescription$ Up to one target creature has base power and toughness 0/2 until your next turn. A:AB$ Animate | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select up to one target creature | TargetMin$ 0 | TargetMax$ 1 | Power$ 0 | Toughness$ 2 | Duration$ UntilYourNextTurn | SpellDescription$ Up to one target creature has base power and toughness 0/2 until your next turn.
A:AB$ Draw | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | NumCards$ 3 | SpellDescription$ Draw three cards. A:AB$ Draw | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | NumCards$ 3 | SpellDescription$ Draw three cards.
A:AB$ ChangeZone | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | ValidTgts$ Permanent | TgtPrompt$ Select up to five target permanents | TargetMin$ 0 | TargetMax$ 5 | Origin$ Battlefield | Destination$ Exile | RememberLKI$ True | SubAbility$ DBRepeat | SpellDescription$ Exile up to five target permanents. For each permanent exiled this way, its controller creates a 4/4 blue and red Elemental creature token. A:AB$ ChangeZone | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidTgts$ Permanent | TgtPrompt$ Select up to five target permanents | TargetMin$ 0 | TargetMax$ 5 | Origin$ Battlefield | Destination$ Exile | RememberLKI$ True | SubAbility$ DBRepeat | SpellDescription$ Exile up to five target permanents. For each permanent exiled this way, its controller creates a 4/4 blue and red Elemental creature token.
SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ DirectRemembered | UseImprinted$ True | RepeatSubAbility$ DBToken | SubAbility$ DBCleanup | ChangeZoneTables$ True SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ DirectRemembered | UseImprinted$ True | RepeatSubAbility$ DBToken | SubAbility$ DBCleanup | ChangeZoneTables$ True
SVar:DBToken:DB$ Token | TokenScript$ ur_4_4_elemental | TokenOwner$ ImprintedController SVar:DBToken:DB$ Token | TokenScript$ ur_4_4_elemental | TokenOwner$ ImprintedController
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True

View File

@@ -0,0 +1,8 @@
Name:Arcbound Mouser
ManaCost:W
Types:Artifact Creature Cat
PT:0/0
K:Lifelink
K:Modular:1
DeckHas:Ability$Counters & Ability$LifeGain
Oracle:Lifelink\nModular 1 (This creature enters the battlefield with a +1/+1 counter on it. When it dies, you may put its +1/+1 counters on target artifact creature.)

View File

@@ -0,0 +1,10 @@
Name:Calibrated Blast
ManaCost:2 R
Types:Instant
A:SP$ DigUntil | Valid$ Card.nonLand | ValidDescription$ nonland | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True | RememberFound$ True | SubAbility$ DBImmediateTrigger | StackDescription$ Reveal cards from the top of your library until you reveal a nonland card. Put the revealed cards on the bottom of your library in a random order. | SpellDescription$ Reveal cards from the top of your library until you reveal a nonland card. Put the revealed cards on the bottom of your library in a random order. When you reveal a nonland card this way, CARDNAME deals damage equal to that card's mana value to any target.
SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card.nonLand | Execute$ TrigDamage | TriggerDescription$ When you reveal a nonland card this way, CARDNAME deals damage equal to that card's mana value to any target.
SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$CardManaCost
K:Flashback:3 R R
Oracle:Reveal cards from the top of your library until you reveal a nonland card. Put the revealed cards on the bottom of your library in a random order. When you reveal a nonland card this way, Calibrated Blast deals damage equal to that card's mana value to any target.\nFlashback {3}{R}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.)

View File

@@ -0,0 +1,10 @@
Name:Constable of the Realm
ManaCost:4 W
Types:Creature Giant Soldier
PT:3/3
K:Renown:2
T:Mode$ CounterAddedOnce | ValidCard$ Card.Self | CounterType$ P1P1 | TriggerZones$ Battlefield | Execute$ TrigChangeZone | TriggerDescription$ Whenever one or more +1/+1 counters are put on CARDNAME, exile up to one other target nonland permanent until CARDNAME leaves the battlefield.
SVar:TrigChangeZone:DB$ ChangeZone | ValidTgts$ Permanent.Other+nonLand | TgtPrompt$ Select up to one other target nonland permanent | TargetMin$ 0 | TargetMax$ 1 | Origin$ Battlefield | Destination$ Exile | Duration$ UntilHostLeavesPlay
DeckHas:Ability$Counters
DeckHints:Ability$Counters & Ability$Proliferate
Oracle:Renown 2 (When this creature deals combat damage to a player, if it isn't renowned, put two +1/+1 counters on it and it becomes renowned.)\nWhenever one or more +1/+1 counters are put on Constable of the Realm, exile up to one other target nonland permanent until Constable of the Realm leaves the battlefield.

View File

@@ -0,0 +1,8 @@
Name:Darkmoss Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}.
A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Darkmoss Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {B} or {G}.

View File

@@ -0,0 +1,9 @@
Name:Dermotaxi
ManaCost:2
Types:Artifact Vehicle
PT:0/0
K:ETBReplacement:Other:Imprint
SVar:Imprint:DB$ ChangeZone | Imprint$ True | ChangeType$ Creature | ChangeNum$ 1 | Origin$ Graveyard | Destination$ Exile | Mandatory$ True | Hidden$ True | Chooser$ You | SpellDescription$ Imprint - As CARDNAME enters the battlefield, exile a creature card from a graveyard.
A:AB$ Clone | Cost$ tapXType<2/Creature> | Defined$ Imprinted | Duration$ UntilEndOfTurn | AddTypes$ Vehicle & Artifact | StackDescription$ Until end of turn, CARDNAME becomes a copy of {c:Imprinted}, except its a Vehicle artifact in addition to its other types. | SpellDescription$ Until end of turn, CARDNAME becomes a copy of the imprinted card, except its a Vehicle artifact in addition to its other types.
SVar:NeedsToPlay:Creature.inZoneGraveyard
Oracle:Imprint — As Dermotaxi enters the battlefield, exile a creature card from a graveyard.\nTap two untapped creatures you control: Until end of turn, Dermotaxi becomes a copy of the imprinted card, except its a Vehicle artifact in addition to its other types.

View File

@@ -0,0 +1,10 @@
Name:Discerning Taste
ManaCost:2 B
Types:Sorcery
A:SP$ Dig | DigNum$ 4 | DestinationZone2$ Graveyard | RememberMovedToZone$ 2 | SubAbility$ DBLifeGain | StackDescription$ SpellDescription | SpellDescription$ Look at the top four cards of your library. Put one of them into your hand and the rest into your graveyard. You gain life equal to the greatest power among creature cards put into your graveyard this way.
SVar:DBLifeGain:DB$ GainLife | Defined$ You | LifeAmount$ X | SubAbility$ DBCleanup | StackDescription$ None
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$GreatestPowerGraveyard_Creature.IsRemembered
DeckHints:Ability$Graveyard
DeckHas:Ability$LifeGain
Oracle:Look at the top four cards of your library. Put one of them into your hand and the rest into your graveyard. You gain life equal to the greatest power among creature cards put into your graveyard this way.

View File

@@ -0,0 +1,13 @@
Name:Dress Down
ManaCost:1 U
Types:Enchantment
K:Flash
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card.
SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1
S:Mode$ Continuous | Affected$ Creature | RemoveAllAbilities$ True | Description$ All creatures lose all abilities.
T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of the end step, sacrifice CARDNAME.
SVar:TrigSac:DB$ Sacrifice | SacValid$ Self
SVar:EndOfTurnLeavePlay:True
AI:RemoveDeck:Random
DeckHas:Ability$Sacrifice
Oracle:Flash\nWhen Dress Down enters the battlefield, draw a card.\nAll creatures lose all abilities.\nAt the beginning of the end step, sacrifice Dress Down.

View File

@@ -0,0 +1,8 @@
Name:Drossforge Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}.
A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Drossforge Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {B} or {R}.

View File

@@ -0,0 +1,9 @@
Name:Ghost-Lit Drifter
ManaCost:2 U
Types:Creature Spirit
PT:2/2
K:Flying
A:AB$ Pump | Cost$ 2 U | ValidTgts$ Creature.Other | KW$ Flying | TgtPrompt$ Select another target creature | SpellDescription$ Another target creature gains flying until end of turn.
A:AB$ Pump | Cost$ X U Discard<1/CARDNAME> | TargetMin$ X | TargetMax$ X | KW$ Flying | ValidTgts$ Creature | TgtPrompt$ Select X target creatures | ActivationZone$ Hand | PrecostDesc$ Channel — | SpellDescription$ X target creatures gain flying until end of turn.
SVar:X:Count$xPaid
Oracle:Flying\n{2}{U}: Another target creature gains flying until end of turn.\nChannel — {X}{U}, discard Ghost-Lit Drifter: X target creatures gain flying until end of turn.

View File

@@ -0,0 +1,11 @@
Name:Glorious Enforcer
ManaCost:5 W W
Types:Creature Angel
PT:5/5
K:Flying
K:Lifelink
T:Mode$ Phase | Phase$ BeginCombat | TriggerZones$ Battlefield | Execute$ TrigPump | CheckSVar$ Y | SVarCompare$ GTX | TriggerDescription$ At the beginning of each combat, if you have more life than an opponent, CARDNAME gains double strike until end of turn.
SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ Double Strike
SVar:X:PlayerCountOpponents$LowestLifeTotal
SVar:Y:Count$YourLifeTotal
Oracle:Flying, lifelink\nAt the beginning of each combat, if you have more life than an opponent, Glorious Enforcer gains double strike until end of turn.

View File

@@ -0,0 +1,8 @@
Name:Goldmire Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ W | SpellDescription$ Add {W}.
A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Goldmire Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {W} or {B}.

View File

@@ -0,0 +1,8 @@
Name:Harmonic Prodigy
ManaCost:1 R
Types:Creature Human Wizard
PT:1/3
K:Prowess
S:Mode$ Panharmonicon | ValidCard$ Shaman.YouCtrl,Wizard.Other+YouCtrl | Description$ If an ability of a Shaman or another Wizard you control triggers, that ability triggers an additional time.
DeckHints:Type$Shaman|Wizard
Oracle:Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)\nIf an ability of a Shaman or another Wizard you control triggers, that ability triggers an additional time.

View File

@@ -0,0 +1,10 @@
Name:Junk Winder
ManaCost:5 U U
Types:Creature Serpent
PT:5/6
K:Affinity:Permanent.token
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Permanent.token+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ Whenever a token enters the battlefield under your control, tap target nonland permanent an opponent controls. It doesn't untap during its controller's next untap step.
SVar:TrigTap:DB$ Tap | ValidTgts$ Permanent.nonLand+OppCtrl | TgtPrompt$ Choose target nonland permanent an opponent controls | SubAbility$ DBPump
SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ HIDDEN This card doesn't untap during your next untap step. | Permanent$ True
DeckNeeds:Ability$Token
Oracle:Affinity for tokens (This spell costs {1} less to cast for each token you control.)\nWhenever a token enters the battlefield under your control, tap target nonland permanent an opponent controls. It doesn't untap during its controller's next untap step.

View File

@@ -0,0 +1,8 @@
Name:Landscaper Colos
ManaCost:5 W
Types:Creature Goat Beast
PT:4/6
T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, put target card from an opponent's graveyard on the bottom of their library.
SVar:TrigChange:DB$ ChangeZone | ValidTgts$ Card.OppOwn | TgtPrompt$ Select target card in an opponent's graveyard | Origin$ Graveyard | Destination$ Library | LibraryPosition$ -1
K:TypeCycling:Basic:1 W
Oracle:When Landscaper Colos enters the battlefield, put target card from an opponent's graveyard on the bottom of their library.\nBasic landcycling {1}{W} ({1}{W}, Discard this card: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.)

View File

@@ -0,0 +1,6 @@
Name:Mental Journey
ManaCost:4 U U
Types:Instant
A:SP$ Draw | Cost$ 4 U U | NumCards$ 3 | SpellDescription$ Draw three cards.
K:TypeCycling:Basic:1 U
Oracle:Draw three cards.\nBasic landcycling {1}{U} ({1}{U}, Discard this card: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.)

View File

@@ -0,0 +1,8 @@
Name:Mistvault Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ U | SpellDescription$ Add {U}.
A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Mistvault Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {U} or {B}.

View File

@@ -0,0 +1,8 @@
Name:Mystic Redaction
ManaCost:2 U
Types:Enchantment
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigScry | TriggerDescription$ At the beginning of your upkeep, scry 1.
SVar:TrigScry:DB$ Scry | ScryNum$ 1
T:Mode$ Discarded | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigMill | TriggerDescription$ Whenever you discard a card, each opponent mills two cards.
SVar:TrigMill:DB$ Mill | Defined$ Player.Opponent | NumCards$ 2
Oracle:At the beginning of your upkeep, scry 1.\nWhenever you discard a card, each opponent mills two cards.

View File

@@ -0,0 +1,15 @@
Name:Out of Time
ManaCost:1 W W
Types:Enchantment
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigUntap | TriggerDescription$ When CARDNAME enters the battlefield, untap all creatures, then phase them out until CARDNAME leaves the battlefield. Put a time counter on CARDNAME for each creature phased out this way.
SVar:TrigUntap:DB$ UntapAll | ValidCards$ Creature | RememberUntapped$ True | SubAbility$ DBPhase
SVar:DBPhase:DB$ Phases | Defined$ Remembered | WontPhaseInNormal$ True | ConditionPresent$ Card.Self | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | Triggers$ TrigComeBack | RememberObjects$ Remembered | ImprintCards$ Self | ConditionPresent$ Card.Self | Duration$ Permanent | ForgetOnPhasedIn$ True | SubAbility$ DBPutCounter
SVar:TrigComeBack:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ DBPhaseIn | TriggerZones$ Command | TriggerController$ TriggeredCardController | Static$ True | TriggerDescription$ These creatures phase out until CARDNAME leaves the battlefield.
SVar:DBPhaseIn:DB$ Phases | Defined$ Remembered | PhaseInOrOut$ True | SubAbility$ DBExileSelf
SVar:DBExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self
SVar:DBPutCounter:DB$ PutCounter | CounterType$ TIME | CounterNum$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$RememberedSize
K:Vanishing:0
Oracle:When Out of Time enters the battlefield, untap all creatures, then phase them out until Out of Time leaves the battlefield. Put a time counter on Out of Time for each creature phased out this way.\nVanishing (At the beginning of your upkeep, remove a time counter from this enchantment. When the last is removed, sacrifice it.)

View File

@@ -0,0 +1,9 @@
Name:Phantasmal Dreadmaw
ManaCost:2 U U
Types:Creature Dinosaur Illusion
PT:6/6
K:Trample
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it.
SVar:TrigSac:DB$Sacrifice | Defined$ Self
SVar:Targeting:Dies
Oracle:Flying\nWhen Phantasmal Dreadmaw becomes the target of a spell or ability, sacrifice it.

View File

@@ -0,0 +1,8 @@
Name:Razortide Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ W | SpellDescription$ Add {W}.
A:AB$ Mana | Cost$ T | Produced$ U | SpellDescription$ Add {U}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Razortide Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {W} or {U}.

View File

@@ -0,0 +1,8 @@
Name:Rustvale Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}.
A:AB$ Mana | Cost$ T | Produced$ W | SpellDescription$ Add {W}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Rustvale Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {R} or {W}.

View File

@@ -0,0 +1,10 @@
Name:Serra's Emissary
ManaCost:4 W W W
Types:Creature Angel
PT:7/7
K:Flying
K:ETBReplacement:Other:ChooseCT
SVar:ChooseCT:DB$ ChooseType | Defined$ You | Type$ Card | AILogic$ MostProminentOppControls | SpellDescription$ As CARDNAME enters the battlefield, choose a card type.
S:Mode$ Continuous | Affected$ You,Creature.YouCtrl | AddKeyword$ Protection from ChosenType | Description$ You and creatures you control have protection from the chosen type.
SVar:PlayMain1:TRUE
Oracle:As Serra's Emissary enters the battlefield, choose a card type. \nYou and creatures you control have protection from the chosen type.

View File

@@ -0,0 +1,8 @@
Name:Silverbluff Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ U | SpellDescription$ Add {U}.
A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Silverbluff Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {U} or {R}.

View File

@@ -0,0 +1,8 @@
Name:Slagwoods Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}.
A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Slagwoods Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {R} or {G}.

View File

@@ -0,0 +1,13 @@
Name:So Shiny
ManaCost:2 U
Types:Enchantment Aura
K:Enchant creature
A:SP$ Attach | Cost$ 2 U | ValidTgts$ Creature | AILogic$ KeepTapped
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | IsPresent$ Card.YouCtrl+token | PresentCompare$ GE1 | Execute$ TrigTap | TriggerDescription$ When CARDNAME enters the battlefield, if you control a token, tap enchanted creature, then scry 2.
SVar:TrigTap:DB$ Tap | Defined$ Enchanted | SubAbility$ DBScry
SVar:DBScry:DB$ Scry | ScryNum$ 2
S:Mode$ Continuous | Affected$ Creature.AttachedBy | AddHiddenKeyword$ CARDNAME doesn't untap during your untap step. | Description$ Enchanted creature doesn't untap during its controller's untap step.
DeckNeeds:Ability$Token
SVar:NeedsToPlayVar:Y GE1
SVar:Y:Count$Valid Permanent.token+YouCtrl
Oracle:Enchant creature\nWhen So Shiny enters the battlefield, if you control a token, tap enchanted creature, then scry 2.\nEnchanted creature doesn't untap during its controller's untap step.

View File

@@ -0,0 +1,6 @@
Name:Step Through
ManaCost:3 U U
Types:Sorcery
K:TypeCycling:Wizard:2
A:SP$ ChangeZone | Cost$ 3 U U | TargetMin$ 2 | TargetMax$ 2 | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return two target creatures to their owners' hands.
Oracle:Return two target creatures to their owners' hands.\nWizardcycling {2} ({2}, Discard this card: Search your library for a Wizard card, reveal it, put it into your hand, then shuffle.)

View File

@@ -0,0 +1,10 @@
Name:Subtlety
ManaCost:2 U U
Types:Creature Elemental Incarnation
PT:3/3
K:Flash
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigTuck | TriggerDescription$ When CARDNAME enters the battlefield, choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library.
SVar:TrigTuck:DB$ ChangeZone | ValidTgts$ Card.inZoneStack+Creature,Card.inZoneStack+Planeswalker | TgtZone$ Stack | TgtPrompt$ Select up to one target creature spell or planeswalker spell | AlternativeDecider$ TargetedController | Origin$ Stack | Fizzle$ True | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ Choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library.
K:Evoke:ExileFromHand<1/Card.Blue+Other>
Oracle:Flash\nFlying\nWhen Subtlety enters the battlefield, choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library.\nEvoke — Exile a blue card from your hand.

View File

@@ -0,0 +1,7 @@
Name:Suspend
ManaCost:U
Types:Instant
A:SP$ ChangeZone | A:SP$ ChangeZone | Cost$ U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBPutCounter | SpellDescription$ Exile target creature and put two time counters on it. If it doesn't have suspend, it gains suspend.
SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterNum$ 2 | CounterType$ TIME | SubAbility$ DBPump
SVar:DBPump:DB$ PumpAll | ValidCards$ Card.IsRemembered+withoutSuspend | PumpZone$ Exile | KW$ Suspend | Permanent$ True | SubAbility$ DBCleanup | StackDescription$ If it doesn't have suspend, it gains suspend.
Oracle:Exile target creature and put two time counters on it. If it doesn't have suspend, it gains suspend. (At the beginning of its owner's upkeep, remove a time counter from that card. When the last is removed, the player plays it without paying its mana cost. If it's a creature, it has haste.)

View File

@@ -0,0 +1,8 @@
Name:Tanglepool Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}.
A:AB$ Mana | Cost$ T | Produced$ U | SpellDescription$ Add {U}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Tanglepool Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {G} or {U}.

View File

@@ -0,0 +1,8 @@
Name:Thornglint Bridge
ManaCost:no cost
Types:Artifact Land
A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}.
A:AB$ Mana | Cost$ T | Produced$ W | SpellDescription$ Add {W}.
K:CARDNAME enters the battlefield tapped.
K:Indestructible
Oracle:Thornglint Bridge enters the battlefield tapped.\nIndestructible\n{T}: Add {G} or {W}.

View File

@@ -0,0 +1,6 @@
Name:Vectis Gloves
ManaCost:2
Types:Artifact Equipment
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddKeyword$ Artifact landwalk | Description$ Equipped creature gets +2/+0 and has artifact landwalk. (It cant be blocked as long as defending player controls an artifact land.)
K:Equip:2
Oracle:Equipped creature gets +2/+0 and has artifact landwalk. (It cant be blocked as long as defending player controls an artifact land.)\nEquip {2}

View File

@@ -13,6 +13,9 @@ Type=Other
18 U Shenanigans 18 U Shenanigans
19 R Ayula, Queen Among Bears 19 R Ayula, Queen Among Bears
20 R Deep Forest Hermit 20 R Deep Forest Hermit
22 U Llanowar Tribe
23 U Scale Up
26 M The First Sliver
28 U Ingenious Infiltrator 28 U Ingenious Infiltrator
30 U Soulherder 30 U Soulherder
32 M Sword of Truth and Justice 32 M Sword of Truth and Justice

View File

@@ -7,34 +7,64 @@ MciCode=mh2
Type=Other Type=Other
[cards] [cards]
3 C Arcbound Mouser
8 C Break Ties 8 C Break Ties
10 U Constable of the Realm
18 C Landscaper Colos
19 C Late to Dinner 19 C Late to Dinner
25 U Prismatic Ending 25 U Prismatic Ending
30 M Serra's Emissary 30 M Serra's Emissary
35 R Timeless Dragon 35 R Timeless Dragon
39 R Disapprove
44 R Fractured Sanity 44 R Fractured Sanity
48 U Junk Winder
50 U Lucid Dreams 50 U Lucid Dreams
51 C Mental Journey
53 U Mystic Redaction
55 C Phantasmal Dreadmaw
58 R Rise and Shine 58 R Rise and Shine
59 R Rishadan Dockhand 59 R Rishadan Dockhand
63 C So Shiny 63 C So Shiny
66 C Step Through
67 M Subtlety 67 M Subtlety
68 C Suspend
70 U Sweep the Skies
73 U Vedalken Rogue
76 C Bone Shards
82 C Discerning Taste
85 U Flay Essence
87 M Grief 87 M Grief
89 C Kitchen Imp 89 C Kitchen Imp
94 U Necromancer's Familiar 94 U Necromancer's Familiar
96 R Persist
97 R Profane Tutor 97 R Profane Tutor
102 M Tourach, Dread Chanter 102 M Tourach, Dread Chanter
103 C Tourach's Canticle 103 C Tourach's Canticle
105 U Underworld Hermit 105 U Underworld Hermit
106 R Unmarked Grave 106 R Unmarked Grave
109 C World-Weary
110 U Young Necromancer 110 U Young Necromancer
113 U Arcbound Whelp
114 C Battle Plan
118 R Calibrated Blast
120 R Chef's Kiss 120 R Chef's Kiss
121 U Dragon's Rage Channeler
125 U Flametongue Yearling 125 U Flametongue Yearling
127 C Glavanic Relay
129 R Glimpse of Tomorrow
132 R Harmonic Prodigy
137 R Obsidian Charmaw
140 C Skophos Reaver
142 U Spreading Insurrection 142 U Spreading Insurrection
147 C Abundant Harvest 147 C Abundant Harvest
148 R Aeve, Progenitor Ooze 148 R Aeve, Progenitor Ooze
151 M Chatterfang, Squirrel General 151 M Chatterfang, Squirrel General
152 C Chatterstorm 152 C Chatterstorm
167 C "Bushitoad" 158 U Gifts of the Fae
162 R Gaea's Will
166 R Ignoble Hierarch
169 C Orchard Strider
170 C Rift Sower
172 U Scurry Oak 172 U Scurry Oak
174 U Squirrel Sanctuary 174 U Squirrel Sanctuary
175 U Squirrel Sovereign 175 U Squirrel Sovereign
@@ -43,96 +73,148 @@ Type=Other
178 M Thrasta, Tempest's Roar 178 M Thrasta, Tempest's Roar
182 R Verdant Command 182 R Verdant Command
184 U Arcbound Shikari 184 U Arcbound Shikari
186 R Asmoranomardicadaistinaculdacar
189 R Carth the Lion 189 R Carth the Lion
192 M Dakkon, Shadow Slayer 192 M Dakkon, Shadow Slayer
194 C Drey Keeper 194 C Drey Keeper
197 M Garth One-Eye 197 M Garth One-Eye
198 R General Ferrous Rokiric
202 M Grist, the Hunger Tide 202 M Grist, the Hunger Tide
201 U Graceful Restoration
204 R Lonis, Cryptozoologist
208 R Priest of Fell Rites 208 R Priest of Fell Rites
211 U Ravenous Squirrel 211 U Ravenous Squirrel
212 U Road // Ruin
218 R Yusri, Fortune's Flame 218 R Yusri, Fortune's Flame
219 R Academy Manufacturer
222 C Bottle Golems 222 C Bottle Golems
223 U Brainstone 223 U Brainstone
225 R Diamond Lion 225 R Diamond Lion
228 U Liquimetal Torque 228 U Liquimetal Torque
229 U Monoskelion 229 U Monoskelion
234 M Scion of Draco 234 M Scion of Draco
237 U Steel Camel 237 U Steel Dromedary
238 M Sword of Hearth and Home 238 M Sword of Hearth and Home
239 C Tormod's Cryptkeeper
240 U The Underworld Cookbook
241 U Vectis Gloves
242 R Void Mirror 242 R Void Mirror
243 R Zabaz, the Glimmerwasp 243 R Zabaz, the Glimmerwasp
244 R Arid Mesa 244 R Arid Mesa
245 C Darkmoss Bridge
246 C Drossforge Bridge
247 C Goldmire Bridge
248 R Marsh Flats 248 R Marsh Flats
249 C Mistvault Bridge
250 R Misty Rainforest 250 R Misty Rainforest
252 C Razortide Bridge
253 C Rustvale Bridge
254 R Scalding Tarn 254 R Scalding Tarn
255 C Silverbluff Bridge
256 C Slagwoods Bridge
257 C Tanglepool Bridge
258 C Thornglint Bridge
259 R Urza's Saga 259 R Urza's Saga
260 R Verdant Catacombs 260 R Verdant Catacombs
264 U Seal of Cleansing
266 U Soul Snare
267 U Counterspell 267 U Counterspell
269 U Seal of Removal 269 U Seal of Removal
271 R Wonder 271 R Wonder
274 U Greed
275 R Patriarch's Bidding 275 R Patriarch's Bidding
276 U Skirge Familiar 276 U Skirge Familiar
277 R Chance Encounter 277 R Chance Encounter
278 U Flame Rift
279 R Goblin Bombardment 279 R Goblin Bombardment
281 M Imperial Recruiter
282 U Mogg Salvage 282 U Mogg Salvage
285 U Quirion Ranger
286 R Squirrel Mob 286 R Squirrel Mob
296 U Extruder 296 U Extruder
300 U Zuran Orb 300 U Zuran Orb
301 M Cabal Coffers 301 M Cabal Coffers
302 U Mishra's Factory
304 M Dakkon, Shadow Slayer 304 M Dakkon, Shadow Slayer
308 U Counterspell 306 M Grist, the Hunger Tide
308 R Counterspell
309 M Subtlety 309 M Subtlety
311 M Grief 311 M Grief
312 M Tourach, Dread Chanter 312 M Tourach, Dread Chanter
314 M Imperial Recruiter
316 M Chatterfang, Squirrel General 316 M Chatterfang, Squirrel General
318 M Thrasta, Tempest's Roar 318 M Thrasta, Tempest's Roar
323 M Scion of Draco 323 M Scion of Draco
324 M Sword of Hearth and Home 324 M Sword of Hearth and Home
325 M Cabal Coffers 325 M Cabal Coffers
326 R Mishra's Factory
329 C Late to Dinner 329 C Late to Dinner
333 M Serra's Emissary 333 M Serra's Emissary
334 R Disapprove
336 R Fractured Sanity 336 R Fractured Sanity
338 U Mystic Redaction
340 R Rise and Shine 340 R Rise and Shine
343 C Kitchen Imp
345 R Persist
347 U Underworld Hermit 347 U Underworld Hermit
350 U Flametongue Yearling 350 U Flametongue Yearling
352 R Harmonic Prodigy
354 C Abundant Harvest 354 C Abundant Harvest
357 R Sylvan Anthem 357 R Sylvan Anthem
359 R Verdant Command 359 R Verdant Command
360 U Arcbound Shikari 360 U Arcbound Shikari
363 M Dakkon, Shadow Slayer 363 M Dakkon, Shadow Slayer
364 U Prismatic Ending
365 M Garth One-Eye 365 M Garth One-Eye
366 R General Ferrous Rokiric
368 M Grist, the Hunger Tide
372 R Priest of Fell Rites 372 R Priest of Fell Rites
375 U Ravenous Squirrel 375 U Ravenous Squirrel
376 U Road // Ruin
380 R Urza's Saga 380 R Urza's Saga
385 R Timeless Dragon 384 U Prismatic Ending
388 R Timeless Dragon
391 R Rishadan Dockhand 391 R Rishadan Dockhand
392 C Step Through
395 C Bone Shards
400 R Persist
401 R Profane Tutor 401 R Profane Tutor
402 M Tourach, Dread Chanter
407 R Glimpse of Tomorrow
409 R Aeve, Progenitor Ooze 409 R Aeve, Progenitor Ooze
410 M Chatterfang, Squirrel General 410 M Chatterfang, Squirrel General
411 C Chatterstorm 411 C Chatterstorm
415 U Squirrel Sovereign 415 U Squirrel Sovereign
417 R Asmoranomardicadaistinaculdacar
418 R Carth the Lion 418 R Carth the Lion
420 M Garth One-Eye 420 M Garth One-Eye
426 U Brainstone 426 U Brainstone
427 R Diamond Lion 427 R Diamond Lion
428 U Liquimetal Torque
429 U Monoskelion
431 M Scion of Draco
433 M Sword of Hearth and Home 433 M Sword of Hearth and Home
434 U The Underworld Cookbook
435 R Void Mirror 435 R Void Mirror
436 R Arid Mesa 436 R Arid Mesa
437 R Marsh Flats 437 R Marsh Flats
438 R Misty Rainforest 438 R Misty Rainforest
439 R Scalding Tarn 439 R Scalding Tarn
440 R Verdant Catacombs 440 R Verdant Catacombs
443 R Timeless Dragon 442 R Out of Time
445 R Timeless Dragon
447 R Rishadan Dockhand 447 R Rishadan Dockhand
448 R Suspend
452 R Profane Tutor 452 R Profane Tutor
453 R Unmarked Grave 453 R Unmarked Grave
457 R Chef's Kiss 457 R Chef's Kiss
458 R Glimpse of Tomorrow
459 R Aeve, Progenitor Ooze 459 R Aeve, Progenitor Ooze
463 R Asmoranomardicadaistinaculdacar
464 R Carth the Lion 464 R Carth the Lion
468 R Yusri, Fortune's Flame 468 R Yusri, Fortune's Flame
470 R Diamond Lion 470 R Diamond Lion
473 R Void Mirror 473 R Void Mirror
474 R Zabaz, the Glimmerwasp
475 R Arid Mesa 475 R Arid Mesa
476 R Marsh Flats 476 R Marsh Flats
477 R Misty Rainforest 477 R Misty Rainforest

View File

@@ -2,6 +2,8 @@ package forge.util;
import forge.gui.FThreads; import forge.gui.FThreads;
import java.awt.event.KeyEvent;
public class OperatingSystem { public class OperatingSystem {
private static String os = System.getProperty("os.name").toLowerCase(); private static String os = System.getProperty("os.name").toLowerCase();
@@ -47,7 +49,10 @@ public class OperatingSystem {
try { try {
//use robot to simulate user action so system standby timer resets //use robot to simulate user action so system standby timer resets
java.awt.Robot robot = new java.awt.Robot(); java.awt.Robot robot = new java.awt.Robot();
robot.keyPress(0xF002); //simulate F15 key press since that won't do anything noticable if (isMac())
robot.keyPress(KeyEvent.VK_F1); // F15 increases Display Brightness by default. Switch to F1
else
robot.keyPress(KeyEvent.VK_F15); //simulate F15 key press since that won't do anything noticeable
delayedKeepAwakeTask = ThreadUtil.delay(30000, keepSystemAwake); //repeat every 30 seconds until flag cleared delayedKeepAwakeTask = ThreadUtil.delay(30000, keepSystemAwake); //repeat every 30 seconds until flag cleared
} }