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.getTargets().add(tgtCreature != null && dmg < opponent.getLife() ? tgtCreature : opponent);
sa.setXManaCostPaid(dmg);
saTgt.setXManaCostPaid(dmg);
return true;
}

View File

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

View File

@@ -100,7 +100,12 @@ public class ChangeTargetsEffect extends SpellAbilityEffect {
changingTgtSA.resetTargets();
List<GameEntity> candidates = changingTgtSA.getTargetRestrictions().getAllCandidates(changingTgtSA, true);
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);
changingTgtSA.getTargets().add(choice);

View File

@@ -3,6 +3,7 @@ package forge.game.ability.effects;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
@@ -166,7 +167,12 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
if (sa.hasParam("RandomTarget")){
List<GameEntity> candidates = copy.getTargetRestrictions().getAllCandidates(chosenSA, true);
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);
resetFirstTargetOnCopy(copy, choice, chosenSA);

View File

@@ -87,6 +87,20 @@ public class DigEffect extends SpellAbilityEffect {
final boolean mayBeSkipped = sa.hasParam("PromptToSkipOptionalAbility");
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 allButOne = false;
@@ -341,7 +355,7 @@ public class DigEffect extends SpellAbilityEffect {
if (sa.hasParam("ForgetOtherRemembered")) {
host.clearRemembered();
}
if (sa.hasParam("RememberChanged")) {
if (remZone1) {
host.addRemembered(c);
}
rest.remove(c);
@@ -376,6 +390,9 @@ public class DigEffect extends SpellAbilityEffect {
if (m != null && !origin.equals(m.getZone().getZoneType())) {
table.put(origin, m.getZone().getZoneType(), m);
}
if (remZone2) {
host.addRemembered(m);
}
}
}
else {
@@ -395,6 +412,9 @@ public class DigEffect extends SpellAbilityEffect {
}
c.setExiledWith(effectHost);
c.setExiledBy(effectHost.getController());
if (remZone2) {
host.addRemembered(c);
}
}
}
}

View File

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

View File

@@ -1,10 +1,10 @@
Name:Infuse with Vitality
ManaCost:B G
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
SVar:DBAnimate:DB$ Animate | Triggers$ SupernaturalStaminaChangeZone | sVars$ SupernaturalStaminaTrigChangeZone | Defined$ ParentTarget
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:SupernaturalStaminaTrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | Defined$ TriggeredNewCardLKICopy | SubAbility$ DBGainLife
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$ DiesTrigger | Defined$ ParentTarget | SubAbility$ DBGainLife | StackDescription$ None
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:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | Defined$ TriggeredNewCardLKICopy
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2
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.

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:DBCleanup:DB$ Cleanup | ClearRemembered$ True
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
DeckHints:Type$Instant|Sorcery
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.
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$ 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:DBToken:DB$ Token | TokenScript$ ur_4_4_elemental | TokenOwner$ ImprintedController
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
19 R Ayula, Queen Among Bears
20 R Deep Forest Hermit
22 U Llanowar Tribe
23 U Scale Up
26 M The First Sliver
28 U Ingenious Infiltrator
30 U Soulherder
32 M Sword of Truth and Justice

View File

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

View File

@@ -2,6 +2,8 @@ package forge.util;
import forge.gui.FThreads;
import java.awt.event.KeyEvent;
public class OperatingSystem {
private static String os = System.getProperty("os.name").toLowerCase();
@@ -47,7 +49,10 @@ public class OperatingSystem {
try {
//use robot to simulate user action so system standby timer resets
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
}