LCI – Discover mechanic implementation (#3992)

* LCI – Discover mechanic implementation

* curator_of_suns_creation.txt

* wiring improvements

* more cards

* last cards/tweaks
This commit is contained in:
Northmoc
2023-11-15 11:20:47 -05:00
committed by GitHub
parent 09e3d56bbf
commit 1a7a135c2b
46 changed files with 499 additions and 8 deletions

View File

@@ -242,7 +242,7 @@ public class PlayerControllerAi extends PlayerController {
}
@Override
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Card cardToShow, Map<String, Object> params) {
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, List<String> options, Card cardToShow, Map<String, Object> params) {
return getAi().confirmAction(sa, mode, message, params);
}

View File

@@ -72,6 +72,7 @@ public enum ApiType {
DigMultiple (DigMultipleEffect.class),
DigUntil (DigUntilEffect.class),
Discard (DiscardEffect.class),
Discover (DiscoverEffect.class),
DrainMana (DrainManaEffect.class),
Draft (DraftEffect.class),
Draw (DrawEffect.class),

View File

@@ -0,0 +1,183 @@
package forge.game.ability.effects;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import forge.game.Game;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils;
import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardLists;
import forge.game.card.CardZoneTable;
import forge.game.cost.CostDiscard;
import forge.game.cost.CostPart;
import forge.game.cost.CostReveal;
import forge.game.player.Player;
import forge.game.player.PlayerCollection;
import forge.game.spellability.LandAbility;
import forge.game.spellability.SpellAbility;
import forge.game.trigger.TriggerType;
import forge.game.zone.PlayerZone;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
import forge.util.CardTranslation;
import forge.util.Lang;
import forge.util.Localizer;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class DiscoverEffect extends SpellAbilityEffect {
@Override
protected String getStackDescription(SpellAbility sa) {
final PlayerCollection players = getDefinedPlayersOrTargeted(sa);
final String verb = players.size() == 1 ? " discovers " : " discover ";
return Lang.joinHomogenous(players) + verb + sa.getParamOrDefault("Num", "1") + ".";
}
@Override
public void resolve(SpellAbility sa) {
final Card host = sa.getHostCard();
final Game game = host.getGame();
final PlayerCollection players = getDefinedPlayersOrTargeted(sa);
// Exile cards from the top of your library until you exile a nonland card with <N> mana value or less.
final int num = AbilityUtils.calculateAmount(host, sa.getParamOrDefault("Num", "1"), sa);
for (final Player p : players) {
if (p == null || !p.isInGame()) return;
Card found = null;
CardCollection exiled = new CardCollection();
CardCollection rest = new CardCollection();
final PlayerZone library = p.getZone(ZoneType.Library);
for (final Card c : library) {
exiled.add(c);
if (!c.isLand() && c.getCMC() <= num) {
found = c;
if (sa.hasParam("RememberDiscovered"))
host.addRemembered(c);
break;
} else {
rest.add(c);
}
}
if (exiled.size() > 0) {
game.getAction().reveal(exiled, p, false);
}
changeZone(exiled, ZoneType.Exile, game, sa);
// Cast it without paying its mana cost or put it into your hand.
if (found != null) {
String prompt = Localizer.getInstance().getMessage("lblDiscoverChoice",
CardTranslation.getTranslatedName(found.getName()));
final Zone origin = found.getZone();
List<String> options =
Arrays.asList(StringUtils.capitalize(Localizer.getInstance().getMessage("lblCast")),
StringUtils.capitalize(Localizer.getInstance().getMessage("lblHandZone")));
final boolean play = p.getController().confirmAction(sa, null, prompt, options, found, null);
boolean cancel = false;
if (play) {
// get basic spells (no flashback, etc.)
List<SpellAbility> sas = AbilityUtils.getBasicSpellsFromPlayEffect(found, p);
// filter out land abilities due to MDFC or similar
Iterables.removeIf(sas, Predicates.instanceOf(LandAbility.class));
// the spell must also have a mana value equal to or less than the discover number
sas.removeIf(sp -> sp.getPayCosts().getTotalMana().getCMC() > num);
if (sas.isEmpty()) { // shouldn't happen!
System.err.println("DiscoverEffect Error: " + host + " found " + found + " but couldn't play sa");
} else {
SpellAbility tgtSA = p.getController().getAbilityToPlay(found, sas);
if (tgtSA == null) { // in case player canceled from choice dialog
cancel = true;
} else {
tgtSA = tgtSA.copyWithNoManaCost();
// 118.8c
boolean optional = false;
for (CostPart cost : tgtSA.getPayCosts().getCostParts()) {
if ((cost instanceof CostDiscard || cost instanceof CostReveal)
&& !cost.getType().equals("Card") && !cost.getType().equals("Random")) {
optional = true;
break;
}
}
if (!optional) {
tgtSA.getPayCosts().setMandatory(true);
}
if (tgtSA.usesTargeting() && !optional) {
tgtSA.getTargetRestrictions().setMandatory(true);
}
tgtSA.setSVar("IsCastFromPlayEffect", "True");
if (p.getController().playSaFromPlayEffect(tgtSA)) {
final Card played = tgtSA.getHostCard();
// add remember successfully played here if ever needed
final Zone zone = game.getCardState(played).getZone();
if (!origin.equals(zone)) {
CardZoneTable trigList = new CardZoneTable();
trigList.put(origin.getZoneType(), zone.getZoneType(), game.getCardState(found));
trigList.triggerChangesZoneAll(game, sa);
}
}
}
}
}
if (!play || cancel) changeZone(new CardCollection(found), ZoneType.Hand, game, sa);
}
// Put the rest on the bottom in a random order.
changeZone(rest, ZoneType.Library, game, sa);
// Run discover triggers
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromPlayer(p);
runParams.put(AbilityKey.Amount, num);
game.getTriggerHandler().runTrigger(TriggerType.Discover, runParams, false);
}
}
private void changeZone(CardCollection cards, ZoneType zone, Game game, SpellAbility sa) {
CardZoneTable table = new CardZoneTable();
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
moveParams.put(AbilityKey.LastStateBattlefield, game.copyLastStateBattlefield());
moveParams.put(AbilityKey.LastStateGraveyard, game.copyLastStateGraveyard());
int pos = 0;
final boolean exileSeq = ZoneType.Exile.equals(zone);
if (ZoneType.Library.equals(zone)) { // bottom of library in a random order
pos = -1;
CardLists.shuffle(cards);
}
for (Card c : cards) {
final ZoneType origin = c.getZone().getZoneType();
Card m = game.getAction().moveTo(zone, c, pos, sa, moveParams);
if (m != null && !origin.equals(m.getZone().getZoneType())) {
table.put(origin, m.getZone().getZoneType(), m);
if (exileSeq) { // exile cards one at a time
table.triggerChangesZoneAll(game, sa);
table.clear();
}
}
}
if (!exileSeq) table.triggerChangesZoneAll(game, sa);
}
}

View File

@@ -57,6 +57,8 @@ public enum CounterEnumType {
BLOODLINE("BLDLN", 224, 44, 44),
BORE("BORE", 98, 47, 34),
BOUNTY("BOUNT", 255, 158, 0),
BRIBERY("BRIBE", 172, 201, 235),

View File

@@ -5,6 +5,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.google.common.collect.Lists;
import forge.game.*;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
@@ -132,9 +133,12 @@ public abstract class PlayerController {
public abstract <T extends GameEntity> List<T> chooseEntitiesForEffect(FCollectionView<T> optionList, int min, int max, DelayedReveal delayedReveal, SpellAbility sa, String title, Player relatedPlayer, Map<String, Object> params);
public final boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return confirmAction(sa, mode, message, null, params);
return confirmAction(sa, mode, message, Lists.newArrayList(), null, params);
}
public abstract boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Card cardToShow, Map<String, Object> params);
public final boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Card cardToShow, Map<String, Object> params) {
return confirmAction(sa, mode, message, Lists.newArrayList(), cardToShow, params);
}
public abstract boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, List<String> options, Card cardToShow, Map<String, Object> params);
public abstract boolean confirmBidAction(SpellAbility sa, PlayerActionConfirmMode bidlife, String string, int bid, Player winner);
public abstract boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, GameEntity affected, String question);
public abstract boolean confirmStaticApplication(Card hostCard, PlayerActionConfirmMode mode, String message, String logic);

View File

@@ -0,0 +1,38 @@
package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card;
import forge.game.spellability.SpellAbility;
import forge.util.Localizer;
import java.util.Map;
public class TriggerDiscover extends Trigger {
public TriggerDiscover(final Map<String, String> params, final Card host, final boolean intrinsic) {
super(params, host, intrinsic);
}
@Override
public boolean performTest(Map<AbilityKey, Object> runParams) {
if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) {
return false;
}
return true;
}
@Override
public void setTriggeringObjects(SpellAbility sa, Map<AbilityKey, Object> runParams) {
sa.setTriggeringObjectsFrom(runParams, AbilityKey.Player, AbilityKey.Amount);
}
@Override
public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder();
sb.append(Localizer.getInstance().getMessage("lblPlayer")).append(": ");
sb.append(sa.getTriggeringObject(AbilityKey.Player)).append(", ");
sb.append(Localizer.getInstance().getMessage("lblAmount")).append(": ");
sb.append(sa.getTriggeringObject(AbilityKey.Amount));
return sb.toString();
}
}

View File

@@ -64,6 +64,7 @@ public enum TriggerType {
Devoured(TriggerDevoured.class),
Discarded(TriggerDiscarded.class),
DiscardedAll(TriggerDiscardedAll.class),
Discover(TriggerDiscover.class),
Drawn(TriggerDrawn.class),
DungeonCompleted(TriggerCompletedDungeon.class),
Evolved(TriggerEvolved.class),

View File

@@ -187,7 +187,7 @@ public class PlayerControllerForTests extends PlayerController {
}
@Override
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Card cardToShow, Map<String, Object> params) {
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, List<String> options, Card cardToShow, Map<String, Object> params) {
return true;
}

View File

@@ -1,7 +1,7 @@
Name:Blow Your House Down
ManaCost:2 R
Types:Sorcery
A:SP$ Pump | Cost$ 2 R | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 3 | RememberTargets$ True | KW$ HIDDEN CARDNAME can't block. | IsCurse$ True | TgtPrompt$ Select target creature | SubAbility$ DBDestroy | SpellDescription$ Up to three target creatures can't block this turn. Destroy any of them that are Walls.
SVar:DBDestroy:DB$ DestroyAll | ValidCards$ Wall.IsRemembered | SubAbility$ DBCleanup
A:SP$ Pump | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 3 | RememberTargets$ True | KW$ HIDDEN CARDNAME can't block. | IsCurse$ True | TgtPrompt$ Select up to three target creatures | SubAbility$ DBDestroy | StackDescription$ REP Up to three target creatures_{c:Targeted} | SpellDescription$ Up to three target creatures can't block this turn.
SVar:DBDestroy:DB$ DestroyAll | ValidCards$ Wall.IsRemembered | SubAbility$ DBCleanup | StackDescription$ SpellDescription | SpellDescription$ Destroy any of them that are Walls.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
Oracle:Up to three target creatures can't block this turn. Destroy any of them that are Walls.

View File

@@ -0,0 +1,24 @@
Name:Brass's Tunnel-Grinder
ManaCost:2 R
Types:Legendary Artifact
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters the battlefield, discard any number of cards, then draw that many cards plus one.
SVar:TrigDiscard:DB$ Discard | AnyNumber$ True | Optional$ True | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ Remembered$Amount/Plus.1 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You.descended | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your end step, if you descended this turn, put a bore counter on CARDNAME. Then if there are three or more bore counters on it, remove those counters and transform it. (You descended if a permanent card was put into your graveyard from anywhere.)
SVar:TrigPutCounter:DB$ PutCounter | CounterType$ BORE | SubAbility$ DBBranch
SVar:DBBranch:DB$ Branch | BranchConditionSVar$ Count$CardCounters.BORE | BranchConditionSVarCompare$ GE3 | TrueSubAbility$ DBRemoveCounter
SVar:DBRemoveCounter:DB$ RemoveCounter | CounterType$ BORE | CounterNum$ All | SubAbility$ DBTransform
SVar:DBTransform:DB$ SetState | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
Oracle:When Brass's Tunnel-Grinder enters the battlefield, discard any number of cards, then draw that many cards plus one.\nAt the beginning of your end step, if you descended this turn, put a bore counter on Brass's Tunnel-Grinder. Then if there are three or more bore counters on it, remove those counters and transform it. (You descended if a permanent card was put into your graveyard from anywhere.)
ALTERNATE
Name:Tecutlan, the Searing Rift
ManaCost:no cost
Types:Legendary Land Cave
A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}.
T:Mode$ SpellCast | ValidCard$ Permanent | ValidSA$ Spell.ManaFromCard.StrictlySelf | ValidActivatingPlayer$ You | Execute$ TrigDiscover | TriggerDescription$ Whenever you cast a permanent spell using mana produced by CARDNAME, discover X, where X is that spell's mana value.
SVar:TrigDiscover:DB$ Discover | Num$ TriggeredStackInstance$CardManaCostLKI
Oracle:(Transforms from Brass's Tunnel-Grinder.)\n{T}: Add {R}.\nWhenever you cast a permanent spell using mana produced by Tecutlan, the Searing Rift, discover X, where X is that spell's mana value.

View File

@@ -0,0 +1,7 @@
Name:Buried Treasure
ManaCost:2
Types:Artifact Treasure
A:AB$ Mana | Cost$ T Sac<1/CARDNAME> | Produced$ Any | SpellDescription$ Add one mana of any color.
A:AB$ Discover | Cost$ 5 ExileFromGrave<1/CARDNAME> | Num$ 5 | ActivationZone$ Graveyard | SorcerySpeed$ True | SpellDescription$ Discover 5. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 5 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
DeckHas:Ability$Sacrifice
Oracle:{T}, Sacrifice Buried Treasure: Add one mana of any color.\n{5}, Exile Buried Treasure from your graveyard: Discover 5. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 5 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Caparocti Sunborn
ManaCost:2 R W
Types:Legendary Creature Human Soldier
PT:4/4
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDiscover | TriggerDescription$ Whenever CARDNAME attacks, you may tap two untapped artifacts and/or creatures you control. If you do, discover 3. (Exile cards from the top of your library until you exile a nonland card with mana value 3 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:TrigDiscover:AB$ Discover | Cost$ tapXType<2/Artifact;Creature/artifacts and/or creatures> | Num$ 3
DeckHints:Type$Artifact|Token
Oracle:Whenever Caparocti Sunborn attacks, you may tap two untapped artifacts and/or creatures you control. If you do, discover 3. (Exile cards from the top of your library until you exile a nonland card with mana value 3 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,7 @@
Name:Chimil, the Inner Sun
ManaCost:6
Types:Legendary Artifact
S:Mode$ Continuous | Affected$ Card.YouCtrl | AffectedZone$ Stack | AddHiddenKeyword$ This spell can't be countered. | Description$ Spells you control can't be countered.
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDiscover | TriggerDescription$ At the beginning of your end step, discover 5. (Exile cards from the top of your library until you exile a nonland card with mana value 5 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:TrigDiscover:DB$ Discover | Num$ 5
Oracle:Spells you control can't be countered.\nAt the beginning of your end step, discover 5. (Exile cards from the top of your library until you exile a nonland card with mana value 5 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Contest of Claws
ManaCost:1 G
Types:Sorcery
A:SP$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SubAbility$ DBDamage | AILogic$ PowerDmg | StackDescription$ {c:ThisTargetedCard} | SpellDescription$ Target creature you control
SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select another target creature | TargetUnique$ True | AILogic$ PowerDmg | NumDmg$ X | DamageSource$ ParentTarget | ExcessSVar$ Excess | SubAbility$ DBDiscover | StackDescription$ REP another target creature_{c:ThisTargetedCard} | SpellDescription$ deals damage equal to its power to another target creature.
SVar:DBDiscover:DB$ Discover | Num$ Excess | StackDescription$ SpellDescription | SpellDescription$ If excess damage was dealt this way, discover X, where X is that excess damage. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:X:ParentTargeted$CardPower
Oracle:Target creature you control deals damage equal to its power to another target creature. If excess damage was dealt this way, discover X, where X is that excess damage. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Curator of Sun's Creation
ManaCost:3 R
Types:Creature Human Artificer
PT:3/3
T:Mode$ Discover | ValidPlayer$ You | TriggerZone$ Battlefield | Execute$ TrigDiscover | ActivationLimit$ 1 | TriggerDescription$ Whenever you discover, discover again for the same value. This ability triggers only once each turn.
SVar:TrigDiscover:DB$ Discover | Num$ X
SVar:X:TriggerCount$Amount
Oracle:Whenever you discover, discover again for the same value. This ability triggers only once each turn.

View File

@@ -0,0 +1,6 @@
Name:Daring Discovery
ManaCost:4 R
Types:Sorcery
A:SP$ Pump | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 3 | KW$ HIDDEN CARDNAME can't block. | IsCurse$ True | TgtPrompt$ Select up to three target creatures | SubAbility$ DBDiscover | StackDescription$ REP Up to three target creatures_{c:Targeted} | SpellDescription$ Up to three target creatures can't block this turn.
SVar:DBDiscover:DB$ Discover | Num$ 4 | SpellDescription$ Discover 4. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
Oracle:Up to three target creatures can't block this turn.\nDiscover 4. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,9 @@
Name:Digsite Conservator
ManaCost:2
Types:Artifact Creature Gnome
PT:2/1
A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | TargetMin$ 0 | TargetMax$ 4 | TargetsFromSingleZone$ True | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Select up to four target cards from a single graveyard | ValidTgts$ Card | SorcerySpeed$ True | SpellDescription$ Exile up to four target cards from a single graveyard. Activate only as a sorcery.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDiscover | TriggerDescription$ When CARDNAME dies, you may pay {4}. If you do, discover 4. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:TrigDiscover:AB$ Discover | Cost$ 4 | Num$ 4
DeckHas:Ability$Sacrifice
Oracle:Sacrifice Digsite Conservator: Exile up to four target cards from a single graveyard. Activate only as a sorcery.\nWhen Digsite Conservator dies, you may pay {4}. If you do, discover 4. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,10 @@
Name:Dinosaur Egg
ManaCost:1 G
Types:Creature Dinosaur Egg
PT:0/3
K:Evolve
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDiscover | OptionalDecider$ You | TriggerDescription$ When CARDNAME dies, you may discover X, where X is its toughness.
SVar:TrigDiscover:DB$ Discover | Num$ X
SVar:X:TriggeredCard$CardToughness
DeckHas:Ability$Counters
Oracle:Evolve (Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness than this creature, put a +1/+1 counter on this creature.)\nWhen Dinosaur Egg dies, you may discover X, where X is its toughness.

View File

@@ -0,0 +1,7 @@
Name:Ellie and Alan, Paleontologists
ManaCost:2 G W U
Types:Legendary Creature Human Scientist
PT:2/5
A:AB$ Discover | Cost$ T ExileFromGrave<1/Creature> | Num$ X | SorcerySpeed$ True | StackDescription$ {p:You} discovers X, where X is the mana value of the exiled card. | SpellDescription$ Discover X, where X is the mana value of the exiled card. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:X:Exiled$CardManaCost
Oracle:{T}, Exile a creature card from your graveyard: Discover X, where X is the mana value of the exiled card. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,9 @@
Name:Etali's Favor
ManaCost:2 R
Types:Enchantment Aura
K:Enchant creature you control
A:SP$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | AILogic$ Pump
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDiscover | TriggerDescription$ When CARDNAME enters the battlefield, discover 3. (Exile cards from the top of your library until you exile a nonland card with mana value 3 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:TrigDiscover:DB$ Discover | Num$ 3
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Trample | Description$ Enchanted creature gets +1/+1 and has trample.
Oracle:Enchant creature you control\nWhen Etali's Favor enters the battlefield, discover 3. (Exile cards from the top of your library until you exile a nonland card with mana value 3 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)\nEnchanted creature gets +1/+1 and has trample.

View File

@@ -0,0 +1,7 @@
Name:Geological Appraiser
ManaCost:2 R R
Types:Creature Human Artificer
PT:3/2
T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self+wasCastByYou | Execute$ TrigDiscover | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield, if you cast it, discover 3. (Exile cards from the top of your library until you exile a nonland card with mana value 3 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:TrigDiscover:AB$ Discover | Num$ 3
Oracle:When Geological Appraiser enters the battlefield, if you cast it, discover 3. (Exile cards from the top of your library until you exile a nonland card with mana value 3 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Hidden Cataract
ManaCost:no cost
Types:Land Cave
K:CARDNAME enters the battlefield tapped.
A:AB$ Mana | Cost$ T | Produced$ U | SpellDescription$ Add {U}.
A:AB$ Discover | Cost$ 4 U T Sac<1/CARDNAME> | Num$ 4 | SorcerySpeed$ True | SpellDescription$ Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
DeckHas:Ability$Sacrifice
Oracle:Hidden Cataract enters the battlefield tapped.\n{T}: Add {U}.\n{4}{U}, {T}, Sacrifice Hidden Cataract: Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Hidden Courtyard
ManaCost:no cost
Types:Land Cave
K:CARDNAME enters the battlefield tapped.
A:AB$ Mana | Cost$ T | Produced$ W | SpellDescription$ Add {W}.
A:AB$ Discover | Cost$ 4 W T Sac<1/CARDNAME> | Num$ 4 | SorcerySpeed$ True | SpellDescription$ Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
DeckHas:Ability$Sacrifice
Oracle:Hidden Courtyard enters the battlefield tapped.\n{T}: Add {W}.\n{4}{W}, {T}, Sacrifice Hidden Courtyard: Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Hidden Necropolis
ManaCost:no cost
Types:Land Cave
K:CARDNAME enters the battlefield tapped.
A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}.
A:AB$ Discover | Cost$ 4 B T Sac<1/CARDNAME> | Num$ 4 | SorcerySpeed$ True | SpellDescription$ Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
DeckHas:Ability$Sacrifice
Oracle:Hidden Necropolis enters the battlefield tapped.\n{T}: Add {B}.\n{4}{B}, {T}, Sacrifice Hidden Necropolis: Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Hidden Nursery
ManaCost:no cost
Types:Land Cave
K:CARDNAME enters the battlefield tapped.
A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}.
A:AB$ Discover | Cost$ 4 G T Sac<1/CARDNAME> | Num$ 4 | SorcerySpeed$ True | SpellDescription$ Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
DeckHas:Ability$Sacrifice
Oracle:Hidden Nursery enters the battlefield tapped.\n{T}: Add {G}.\n{4}{G}, {T}, Sacrifice Hidden Nursery: Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Hidden Volcano
ManaCost:no cost
Types:Land Cave
K:CARDNAME enters the battlefield tapped.
A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}.
A:AB$ Discover | Cost$ 4 R T Sac<1/CARDNAME> | Num$ 4 | SorcerySpeed$ True | SpellDescription$ Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
DeckHas:Ability$Sacrifice
Oracle:Hidden Volcano enters the battlefield tapped.\n{T}: Add {R}.\n{4}{R}, {T}, Sacrifice Hidden Volcano: Discover 4. Activate only as a sorcery. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Hit the Mother Lode
ManaCost:4 R R R
Types:Sorcery
A:SP$ Discover | Num$ 10 | SubAbility$ DBTreasure | RememberDiscovered$ True | SpellDescription$ Discover 10.
SVar:DBTreasure:DB$ Token | ConditionDefined$ Remembered | ConditionPresent$ Card.cmcLT10 | TokenScript$ c_a_treasure_sac | TokenAmount$ Remembered$CardManaCost/NMinus.10 | TokenTapped$ True | SubAbility$ DBCleanup | SpellDescription$ If the discovered card's mana value is less than 10, create a number of tapped Treasure tokens equal to the difference.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | StackDescription$ None | SpellDescription$ (To discover 10, exile cards from the top of your library until you exile a nonland card with mana value 10 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
DeckHas:Type$Artifact|Treasure & Ability$Sacrifice|Token
Oracle:Discover 10. If the discovered card's mana value is less than 10, create a number of tapped Treasure tokens equal to the difference. (To discover 10, exile cards from the top of your library until you exile a nonland card with mana value 10 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,8 @@
Name:Hurl into History
ManaCost:3 U U
Types:Instant
A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target artifact or creature spell | ValidTgts$ Artifact,Creature | RememberCounteredCMC$ True | SubAbility$ DBDiscover | SpellDescription$ Counter target artifact or creature spell.
SVar:DBDiscover:DB$ Discover | Num$ X | SubAbility$ DBCleanup | StackDescription$ REP Discover_{p:You} discovers | SpellDescription$ Discover X, where X is that spell's mana value. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$RememberedNumber
Oracle:Counter target artifact or creature spell. Discover X, where X is that spell's mana value. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,9 @@
Name:Pantlaza, Sun-Favored
ManaCost:2 R G W
Types:Legendary Creature Dinosaur
PT:4/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self,Dinosaur.YouCtrl+Other | OptionalDecider$ You | ResolvedLimit$ 1 | Execute$ TrigDiscover | TriggerDescription$ Whenever CARDNAME or another Dinosaur enters the battlefield under your control, you may discover X, where X is that creature's toughness. Do this only once each turn. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:TrigDiscover:DB$ Discover | Num$ X
SVar:X:TriggeredCard$CardToughness
DeckHints:Type$Dinosaur
Oracle:Whenever Pantlaza, Sun-Favored or another Dinosaur enters the battlefield under your control, you may discover X, where X is that creature's toughness. Do this only once each turn. (Exile cards from the top of your library until you exile a nonland card with that mana value or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,7 @@
Name:Primordial Gnawer
ManaCost:4 B
Types:Creature Insect Horror
PT:5/2
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDiscover | TriggerDescription$ When CARDNAME dies, discover 3. (Exile cards from the top of your library until you exile a nonland card with mana value 3 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:TrigDiscover:DB$ Discover | Num$ 3
Oracle:When Primordial Gnawer dies, discover 3. (Exile cards from the top of your library until you exile a nonland card with mana value 3 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,18 @@
Name:Quintorius Kand
ManaCost:3 R W
Types:Legendary Planeswalker Quintorius
Loyalty:4
T:Mode$ SpellCast | ValidCard$ Card.wasCastFromExile | ValidActivatingPlayer$ You | Execute$ TrigDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell from exile, CARDNAME deals 2 damage to each opponent and you gain 2 life.
SVar:TrigDamage:DB$ DealDamage | Defined$ Opponent | NumDmg$ 2 | SubAbility$ DBGainLife
SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2
A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TokenScript$ rw_3_2_spirit | SpellDescription$ Create a 3/2 red and white Spirit creature token.
A:AB$ Discover | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | Num$ 4 | SpellDescription$ Discover 4.
A:AB$ ChangeZone | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ Yard | TgtPrompt$ Select any number of target cards in your graveyard | ValidTgts$ Card.YouOwn | RememberChanged$ True | StackDescription$ SpellDescription | SpellDescription$ Exile any number of target cards from your graveyard. Add {R} for each card exiled this way. You may play those cards this turn.
SVar:DBMana:DB$ Mana | Produced$ R | Amount$ X | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ STMayPlay | SubAbility$ DBCleanup | ForgetOnMoved$ Exile
SVar:STMayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play those cards.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Yard:Count$InYourYard
SVar:X:Remembered$Amount
DeckHas:Ability$LifeGain|Token & Type$Spirit
Oracle:Whenever you cast a spell from exile, Quintorius Kand deals 2 damage to each opponent and you gain 2 life.\n[+1]: Create a 3/2 red and white Spirit creature token.\n[3]: Discover 4.\n[6]: Exile any number of target cards from your graveyard. Add {R} for each card exiled this way. You may play those cards this turn.

View File

@@ -0,0 +1,8 @@
Name:Swashbuckler's Whip
ManaCost:1
Types:Artifact Equipment
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Reach | AddAbility$ ABTap & ABDiscover | Description$ Equipped creature has reach, "{2}, {T}: Tap target artifact or creature," and "{8}, {T}: Discover 10." (Exile cards from the top of your library until you exile a nonland card with mana value 10 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
SVar:ABTap:AB$ Tap | Cost$ 2 T | ValidTgts$ Artifact,Creature | TgtPrompt$ Select target artifact or creature | SpellDescription$ Tap target artifact or creature.
SVar:ABDiscover:AB$ Discover | Cost$ 8 T | Num$ 10 | SpellDescription$ Discover 10.
K:Equip:1
Oracle:Equipped creature has reach, "{2}, {T}: Tap target artifact or creature," and "{8}, {T}: Discover 10." (Exile cards from the top of your library until you exile a nonland card with mana value 10 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)\nEquip {1}

View File

@@ -0,0 +1,10 @@
Name:Trumpeting Carnosaur
ManaCost:4 R R
Types:Creature Dinosaur
PT:7/6
K:Trample
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDiscover | TriggerDescription$ When CARDNAME enters the battlefield, discover 5.
SVar:TrigDiscover:DB$ Discover | Num$ 5
A:AB$ DealDamage | Cost$ 2 R Discard<1/CARDNAME> | ActivationZone$ Hand | NumDmg$ 3 | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | SpellDescription$ It deals 3 damage to target creature or planeswalker.
DeckHas:Ability$Discard
Oracle:Trample\nWhen Trumpeting Carnosaur enters the battlefield, discover 5.\n{2}{R}, Discard Trumpeting Carnosaur: It deals 3 damage to target creature or planeswalker.

View File

@@ -0,0 +1,7 @@
Name:Walk with the Ancestors
ManaCost:4 G
Types:Sorcery
A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Permanent.YouOwn | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target up to one target permanent from your graveyard | SubAbility$ DBDiscover | SpellDescription$ Return up to one target permanent card from your graveyard to your hand.
SVar:DBDiscover:DB$ Discover | Num$ 4 | SpellDescription$ Discover 4. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)
DeckHas:Ability$Graveyard
Oracle:Return up to one target permanent card from your graveyard to your hand. Discover 4. (Exile cards from the top of your library until you exile a nonland card with mana value 4 or less. Cast it without paying its mana cost or put it into your hand. Put the rest on the bottom in a random order.)

View File

@@ -0,0 +1,11 @@
Name:Zoetic Glyph
ManaCost:2 U
Types:Enchantment Aura
K:Enchant artifact
A:SP$ Attach | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | AILogic$ Animate
S:Mode$ Continuous | Affected$ Artifact.EnchantedBy | AddType$ Creature & Golem | SetPower$ 5 | SetToughness$ 4 | Description$ Enchanted artifact is a Golem creature with base power and toughness 5/4 in addition to its other types.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDiscover | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, discover 3.
SVar:TrigDiscover:DB$ Discover | Num$ 3
DeckHas:Type$Golem
DeckNeeds:Type$Artifact
Oracle:Enchant artifact\nEnchanted artifact is a Golem creature with base power and toughness 5/4 in addition to its other types.\nWhen Zoetic Glyph is put into a graveyard from the battlefield, discover 3.

View File

@@ -0,0 +1,8 @@
Name:Zoyowa's Justice
ManaCost:1 R
Types:Instant
A:SP$ ChangeZone | ValidTgts$ Artifact.cmcGE1,Creature.cmcGE1 | TgtPrompt$ Select target artifact or creature with mana value 1 or greater | Origin$ Battlefield | Destination$ Library | Shuffle$ True | RememberLKI$ True | SubAbility$ DBDiscover | StackDescription$ {p:TargetedOwner} shuffles {c:Targeted} into their library. | SpellDescription$ The owner of target artifact or creature with mana value 1 or greater shuffles it into their library.
SVar:DBDiscover:DB$ Discover | Defined$ TargetedOwner | Num$ X | SubAbility$ DBCleanup | StackDescription$ REP that player_{p:TargetedOwner} | SpellDescription$ Then that player discovers X, where X is its mana value. (They exile cards from the top of their library until they exile a nonland card with that mana value or less. They cast it without paying its mana cost or put it into their hand. They put the rest on the bottom in a random order.)
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:RememberedLKI$CardManaCost
Oracle:The owner of target artifact or creature with mana value 1 or greater shuffles it into their library. Then that player discovers X, where X is its mana value. (They exile cards from the top of their library until they exile a nonland card with that mana value or less. They cast it without paying its mana cost or put it into their hand. They put the rest on the bottom in a random order.)

View File

@@ -1985,6 +1985,8 @@ lblMustChoose=Wähle mindestens eine Karte.
#DiscardEffect.java
lblWouldYouLikeRandomDiscardTargetCard=Möchtest du {0} zufällige Karte(n) abwerfen?
lblPlayerHasChosenCardsFrom={0} hat Karte(n) gewählt von
#DiscoverEffect.java
lblDiscoverChoice=Willst du {0} wirken, ohne seine Manakosten zu bezahlen, oder willst du ihn auf die Hand nehmen?
#DrawEffect.java
lblDoYouWantDrawCards=Möchtest du {0} ziehen?
lblHowManyCardDoYouWantDraw=Wie viele Karten möchtest du ziehen?

View File

@@ -1990,6 +1990,8 @@ lblMustChoose=You must choose at least one card.
#DiscardEffect.java
lblWouldYouLikeRandomDiscardTargetCard=Would you like to discard {0} random card(s)?
lblPlayerHasChosenCardsFrom={0} has chosen card(s) from
#DiscoverEffect.java
lblDiscoverChoice=Do you want to cast {0} without paying its mana cost or put it into your hand?
#DrawEffect.java
lblDoYouWantDrawCards=Do you want to draw {0}?
lblHowManyCardDoYouWantDraw=How many cards do you want to draw?

View File

@@ -1986,6 +1986,8 @@ lblMustChoose=You must choose at least one card.
#DiscardEffect.java
lblWouldYouLikeRandomDiscardTargetCard=¿Te gustaría descartar {0} carta(s) aleatoria(s)?
lblPlayerHasChosenCardsFrom={0} ha elegido una o varias cartas de
#DiscoverEffect.java
lblDiscoverChoice=¿Quieres lanzar {0} sin pagar su coste de maná o ponerlo en tu mano?
#DrawEffect.java
lblDoYouWantDrawCards=¿Quieres robar {0}?
lblHowManyCardDoYouWantDraw=¿Cuántas cartas quieres robar?

View File

@@ -1989,6 +1989,8 @@ lblMustChoose=You must choose at least one card.
#DiscardEffect.java
lblWouldYouLikeRandomDiscardTargetCard=Voulez-vous défausser {0} carte(s) aléatoire(s) ?
lblPlayerHasChosenCardsFrom={0} a choisi une ou plusieurs cartes parmi
#DiscoverEffect.java
lblDiscoverChoice=Voulez-vous lancer {0} sans payer son coût de mana ou le mettre dans votre main?
#DrawEffect.java
lblDoYouWantDrawCards=Voulez-vous tirer {0} ?
lblHowManyCardDoYouWantDraw=Combien de cartes voulez-vous piocher ?

View File

@@ -1986,6 +1986,8 @@ lblMustChoose=You must choose at least one card.
#DiscardEffect.java
lblWouldYouLikeRandomDiscardTargetCard=Vuoi scartare {0} carta/e a caso?
lblPlayerHasChosenCardsFrom={0}ha scelto delle carte da
#DiscoverEffect.java
lblDiscoverChoice=Vuoi lanciare {0} senza pagare il suo costo in mana o metterlo nella tua mano?
#DrawEffect.java
lblDoYouWantDrawCards=Vuoi pescare {0}?
lblHowManyCardDoYouWantDraw=Quante carte vuoi pescare?

View File

@@ -1985,6 +1985,8 @@ lblMustChoose=You must choose at least one card.
#DiscardEffect.java
lblWouldYouLikeRandomDiscardTargetCard=不作為に {0}枚のカードを捨てますか?
lblPlayerHasChosenCardsFrom={0}がカードを選択した:
#DiscoverEffect.java
lblDiscoverChoice=あなたは {0}をマナ・コストを払わずに唱えたいのか、それともあなたの手札に置きたいのか?
#DrawEffect.java
lblDoYouWantDrawCards={0}を引きますか?
lblHowMayCardDoYouWantDraw=何枚のカードを引きますか?

View File

@@ -2047,6 +2047,8 @@ lblMustChoose=You must choose at least one card.
#DiscardEffect.java
lblWouldYouLikeRandomDiscardTargetCard=Descartar {0} carta(s) aleatoriamente?
lblPlayerHasChosenCardsFrom={0} escolheu carta(s) de
#DiscoverEffect.java
lblDiscoverChoice=Você quer lançar {0} sem pagar seu custo de mana ou colocá-lo em sua mão?
#DrawEffect.java
lblDoYouWantDrawCards=Quer comprar {0}?
lblHowManyCardDoYouWantDraw=Quantas cartas você quer comprar?

View File

@@ -1990,6 +1990,8 @@ lblMustChoose=你必须至少选择一张牌。
#DiscardEffect.java
lblWouldYouLikeRandomDiscardTargetCard=你想随机弃掉%d张牌吗
lblPlayerHasChosenCardsFrom={0}选择了牌自
#DiscoverEffect.java
lblDiscoverChoice=你想在不支付魔法消耗的情况下施放{0}还是把它放在你的手里?
#DrawEffect.java
lblDoYouWantDrawCards=你想抓{0}张牌吗?
lblHowManyCardDoYouWantDraw=你想怎么抓牌?

View File

@@ -390,6 +390,7 @@ Niko
Nissa
Nixilis
Oko
Quintorius
Ral
Rowan
Saheeli

View File

@@ -773,11 +773,12 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
*/
@Override
public boolean confirmAction(final SpellAbility sa, final PlayerActionConfirmMode mode, final String message,
Card cardToShow, Map<String, Object> params) {
List<String> options, Card cardToShow, Map<String, Object> params) {
// Another card should be displayed in the prompt on mouse over rather than the SA source
if (cardToShow != null) {
tempShowCard(cardToShow);
boolean result = InputConfirm.confirm(this, cardToShow.getView(), sa, message);
boolean result = options.isEmpty() ? InputConfirm.confirm(this, cardToShow.getView(), sa, message)
: InputConfirm.confirm(this, cardToShow.getView(), message, true, options);
endTempShowCards();
return result;
}