mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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),
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
7
forge-gui/res/cardsfolder/upcoming/buried_treasure.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/buried_treasure.txt
Normal 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.)
|
||||
8
forge-gui/res/cardsfolder/upcoming/caparocti_sunborn.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/caparocti_sunborn.txt
Normal 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.)
|
||||
@@ -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.)
|
||||
8
forge-gui/res/cardsfolder/upcoming/contest_of_claws.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/contest_of_claws.txt
Normal 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.)
|
||||
@@ -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.
|
||||
6
forge-gui/res/cardsfolder/upcoming/daring_discovery.txt
Normal file
6
forge-gui/res/cardsfolder/upcoming/daring_discovery.txt
Normal 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.)
|
||||
@@ -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.)
|
||||
10
forge-gui/res/cardsfolder/upcoming/dinosaur_egg.txt
Normal file
10
forge-gui/res/cardsfolder/upcoming/dinosaur_egg.txt
Normal 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.
|
||||
@@ -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.)
|
||||
9
forge-gui/res/cardsfolder/upcoming/etalis_favor.txt
Normal file
9
forge-gui/res/cardsfolder/upcoming/etalis_favor.txt
Normal 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.
|
||||
@@ -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.)
|
||||
8
forge-gui/res/cardsfolder/upcoming/hidden_cataract.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/hidden_cataract.txt
Normal 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.)
|
||||
8
forge-gui/res/cardsfolder/upcoming/hidden_courtyard.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/hidden_courtyard.txt
Normal 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.)
|
||||
8
forge-gui/res/cardsfolder/upcoming/hidden_necropolis.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/hidden_necropolis.txt
Normal 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.)
|
||||
8
forge-gui/res/cardsfolder/upcoming/hidden_nursery.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/hidden_nursery.txt
Normal 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.)
|
||||
8
forge-gui/res/cardsfolder/upcoming/hidden_volcano.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/hidden_volcano.txt
Normal 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.)
|
||||
@@ -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.)
|
||||
8
forge-gui/res/cardsfolder/upcoming/hurl_into_history.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/hurl_into_history.txt
Normal 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.)
|
||||
@@ -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.)
|
||||
7
forge-gui/res/cardsfolder/upcoming/primordial_gnawer.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/primordial_gnawer.txt
Normal 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.)
|
||||
18
forge-gui/res/cardsfolder/upcoming/quintorius_kand.txt
Normal file
18
forge-gui/res/cardsfolder/upcoming/quintorius_kand.txt
Normal 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.
|
||||
@@ -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}
|
||||
10
forge-gui/res/cardsfolder/upcoming/trumpeting_carnosaur.txt
Normal file
10
forge-gui/res/cardsfolder/upcoming/trumpeting_carnosaur.txt
Normal 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.
|
||||
@@ -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.)
|
||||
11
forge-gui/res/cardsfolder/upcoming/zoetic_glyph.txt
Normal file
11
forge-gui/res/cardsfolder/upcoming/zoetic_glyph.txt
Normal 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.
|
||||
8
forge-gui/res/cardsfolder/upcoming/zoyowas_justice.txt
Normal file
8
forge-gui/res/cardsfolder/upcoming/zoyowas_justice.txt
Normal 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.)
|
||||
@@ -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?
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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 ?
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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=何枚のカードを引きますか?
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -1990,6 +1990,8 @@ lblMustChoose=你必须至少选择一张牌。
|
||||
#DiscardEffect.java
|
||||
lblWouldYouLikeRandomDiscardTargetCard=你想随机弃掉%d张牌吗?
|
||||
lblPlayerHasChosenCardsFrom={0}选择了牌自
|
||||
#DiscoverEffect.java
|
||||
lblDiscoverChoice=你想在不支付魔法消耗的情况下施放{0}还是把它放在你的手里?
|
||||
#DrawEffect.java
|
||||
lblDoYouWantDrawCards=你想抓{0}张牌吗?
|
||||
lblHowManyCardDoYouWantDraw=你想怎么抓牌?
|
||||
|
||||
@@ -390,6 +390,7 @@ Niko
|
||||
Nissa
|
||||
Nixilis
|
||||
Oko
|
||||
Quintorius
|
||||
Ral
|
||||
Rowan
|
||||
Saheeli
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user