mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Merge pull request #3561 from tool4ever/digUntil
DigUntil is sequential
This commit is contained in:
@@ -1767,18 +1767,11 @@ public class ComputerUtil {
|
||||
// Lethal Damage => prevent damage/regeneration/bounce/shroud
|
||||
if (threatApi == ApiType.DealDamage || threatApi == ApiType.DamageAll) {
|
||||
// If PredictDamage is >= Lethal Damage
|
||||
final int dmg = AbilityUtils.calculateAmount(source,
|
||||
topStack.getParam("NumDmg"), topStack);
|
||||
final int dmg = AbilityUtils.calculateAmount(source, topStack.getParam("NumDmg"), topStack);
|
||||
final SpellAbility sub = topStack.getSubAbility();
|
||||
boolean noRegen = false;
|
||||
if (sub != null && sub.getApi() == ApiType.Pump) {
|
||||
final List<String> keywords = sub.hasParam("KW") ? Arrays.asList(sub.getParam("KW").split(" & ")) : new ArrayList<>();
|
||||
for (String kw : keywords) {
|
||||
if (kw.contains("can't be regenerated")) {
|
||||
if (sub != null && sub.getApi() == ApiType.Effect && sub.hasParam("AILogic") && sub.getParam("AILogic").equals("CantRegenerate")) {
|
||||
noRegen = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (final Object o : objects) {
|
||||
if (o instanceof Card) {
|
||||
|
||||
@@ -128,6 +128,7 @@ public class DigUntilEffect extends SpellAbilityEffect {
|
||||
boolean shuffle = sa.hasParam("Shuffle");
|
||||
final boolean optional = sa.hasParam("Optional");
|
||||
final boolean optionalFound = sa.hasParam("OptionalFoundMove");
|
||||
boolean sequential = digSite == ZoneType.Library && revealedDest.equals(foundDest);
|
||||
|
||||
CardZoneTable table = new CardZoneTable();
|
||||
boolean combatChanged = false;
|
||||
@@ -179,19 +180,24 @@ public class DigUntilEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (foundDest != null) {
|
||||
// Allow ordering of found cards
|
||||
if (foundDest.isKnown() && found.size() >= 2 && !foundDest.equals(ZoneType.Exile)) {
|
||||
found = (CardCollection)p.getController().orderMoveToZoneList(found, foundDest, sa);
|
||||
// is it "change zone until" or "reveal until"?
|
||||
final Iterator<Card> itr;
|
||||
if (sequential) {
|
||||
itr = revealed.iterator();
|
||||
} else {
|
||||
itr = found.iterator();
|
||||
}
|
||||
|
||||
final Iterator<Card> itr = found.iterator();
|
||||
while (itr.hasNext()) {
|
||||
final Card c = itr.next();
|
||||
|
||||
final ZoneType origin = c.getZone().getZoneType();
|
||||
if (optionalFound && !p.getController().confirmAction(sa, null,
|
||||
Localizer.getInstance().getMessage("lblDoYouWantPutCardToZone", foundDest.getTranslatedName()), null)) {
|
||||
itr.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
moveParams.put(AbilityKey.LastStateBattlefield, lastStateBattlefield);
|
||||
moveParams.put(AbilityKey.LastStateGraveyard, lastStateGraveyard);
|
||||
@@ -207,16 +213,19 @@ public class DigUntilEffect extends SpellAbilityEffect {
|
||||
if (addToCombat(c, c.getController(), sa, "Attacking", "Blocking")) {
|
||||
combatChanged = true;
|
||||
}
|
||||
} else if (sa.hasParam("NoMoveFound") && foundDest.equals(ZoneType.Library)) {
|
||||
} else if (sa.hasParam("NoMoveFound")) {
|
||||
//Don't do anything
|
||||
} else {
|
||||
m = game.getAction().moveTo(foundDest, c, foundLibPos, sa, moveParams);
|
||||
}
|
||||
revealed.remove(c);
|
||||
|
||||
if (m != null && !origin.equals(m.getZone().getZoneType())) {
|
||||
table.put(origin, m.getZone().getZoneType(), m);
|
||||
CardZoneTable trigList = new CardZoneTable();
|
||||
trigList.put(origin, m.getZone().getZoneType(), m);
|
||||
trigList.triggerChangesZoneAll(game, sa);
|
||||
}
|
||||
}
|
||||
revealed.removeAll(found);
|
||||
}
|
||||
|
||||
if (sa.hasParam("RememberRevealed")) {
|
||||
@@ -225,46 +234,35 @@ public class DigUntilEffect extends SpellAbilityEffect {
|
||||
if (sa.hasParam("ImprintRevealed")) {
|
||||
host.addImprintedCards(revealed);
|
||||
}
|
||||
|
||||
if (sa.hasParam("RevealRandomOrder")) {
|
||||
Collections.shuffle(revealed, MyRandom.getRandom());
|
||||
}
|
||||
|
||||
if (sa.hasParam("NoMoveRevealed")) {
|
||||
if (sa.hasParam("NoMoveRevealed") || sequential) {
|
||||
//don't do anything
|
||||
} else if (sa.hasParam("NoneFoundDestination") && found.size() < untilAmount) {
|
||||
// Allow ordering the revealed cards
|
||||
if (noneFoundDest.isKnown() && revealed.size() >= 2) {
|
||||
revealed = (CardCollection)p.getController().orderMoveToZoneList(revealed, noneFoundDest, sa);
|
||||
}
|
||||
if (noneFoundDest == ZoneType.Library && !shuffle
|
||||
&& !sa.hasParam("RevealRandomOrder") && revealed.size() >= 2) {
|
||||
revealed = (CardCollection)p.getController().orderMoveToZoneList(revealed, noneFoundDest, sa);
|
||||
}
|
||||
|
||||
final Iterator<Card> itr = revealed.iterator();
|
||||
while (itr.hasNext()) {
|
||||
final Card c = itr.next();
|
||||
final ZoneType origin = c.getZone().getZoneType();
|
||||
final Card m = game.getAction().moveTo(noneFoundDest, c, noneFoundLibPos, sa);
|
||||
if (m != null && !origin.equals(m.getZone().getZoneType())) {
|
||||
table.put(origin, m.getZone().getZoneType(), m);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Allow ordering the rest of the revealed cards
|
||||
if (revealedDest.isKnown() && revealed.size() >= 2 && !sa.hasParam("SkipReorder")) {
|
||||
revealed = (CardCollection)p.getController().orderMoveToZoneList(revealed, revealedDest, sa);
|
||||
ZoneType finalDest = revealedDest;
|
||||
int finalPos = revealedLibPos;
|
||||
if (sa.hasParam("NoneFoundDestination") && found.size() < untilAmount) {
|
||||
finalDest = noneFoundDest;
|
||||
finalPos = noneFoundLibPos;
|
||||
}
|
||||
if (revealedDest == ZoneType.Library && !shuffle
|
||||
|
||||
// Allow ordering the rest of the revealed cards
|
||||
if (finalDest.isKnown() && revealed.size() >= 2) {
|
||||
revealed = (CardCollection)p.getController().orderMoveToZoneList(revealed, finalDest, sa);
|
||||
}
|
||||
if (finalDest == ZoneType.Library && !shuffle
|
||||
&& !sa.hasParam("RevealRandomOrder") && revealed.size() >= 2) {
|
||||
revealed = (CardCollection)p.getController().orderMoveToZoneList(revealed, revealedDest, sa);
|
||||
revealed = (CardCollection)p.getController().orderMoveToZoneList(revealed, finalDest, sa);
|
||||
}
|
||||
|
||||
final Iterator<Card> itr = revealed.iterator();
|
||||
while (itr.hasNext()) {
|
||||
final Card c = itr.next();
|
||||
final ZoneType origin = c.getZone().getZoneType();
|
||||
final Card m = game.getAction().moveTo(revealedDest, c, revealedLibPos, sa);
|
||||
final Card m = game.getAction().moveTo(finalDest, c, finalPos, sa);
|
||||
if (m != null && !origin.equals(m.getZone().getZoneType())) {
|
||||
table.put(origin, m.getZone().getZoneType(), m);
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@ import java.util.SortedSet;
|
||||
|
||||
import forge.game.event.*;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.LandAbility;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
@@ -1700,6 +1702,9 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
land.setController(this, 0);
|
||||
if (land.isFaceDown()) {
|
||||
land.turnFaceUp(null);
|
||||
if (cause instanceof LandAbility) {
|
||||
land.changeToState(cause.getCardStateName());
|
||||
}
|
||||
}
|
||||
|
||||
Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(land);
|
||||
|
||||
@@ -5,5 +5,5 @@ PT:2/3
|
||||
T:Mode$ SpellCast | ValidCard$ Card.White | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever a player casts a white spell, you may pay {1}. If you do, gain 1 life.
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigGrave | TriggerDescription$ When CARDNAME dies, you gain 3 life.
|
||||
SVar:TrigGrave:DB$ GainLife | Defined$ TriggeredCardController | LifeAmount$ 3
|
||||
SVar:TrigGainLife:AB$GainLife | Cost$ 1 | LifeAmount$ 1
|
||||
SVar:TrigGainLife:AB$ GainLife | Cost$ 1 | LifeAmount$ 1
|
||||
Oracle:When Auspicious Ancestor dies, you gain 3 life.\nWhenever a player casts a white spell, you may pay {1}. If you do, you gain 1 life.
|
||||
|
||||
@@ -4,6 +4,8 @@ Types:Creature Elk Beast
|
||||
PT:6/6
|
||||
K:Mutate:5 G
|
||||
T:Mode$ Mutates | ValidCard$ Card.Self | Execute$ TrigDigUntil | TriggerDescription$ Whenever this creature mutates, exile cards from the top of your library until you exile X permanent cards, where X is the number of times this creature has mutated. Put those permanent cards onto the battlefield.
|
||||
SVar:TrigDigUntil:DB$ DigUntil | Amount$ X | Defined$ You | Valid$ Permanent | ValidDescription$ permanent | RevealedDestination$ Exile | FoundDestination$ Battlefield
|
||||
SVar:TrigDigUntil:DB$ DigUntil | Amount$ X | Defined$ You | Valid$ Permanent | ValidDescription$ permanent | RevealedDestination$ Exile | FoundDestination$ Exile | RememberFound$ True | SubAbility$ DBToPlay
|
||||
SVar:DBToPlay:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:Count$TimesMutated
|
||||
Oracle:Mutate {5}{G} (If you cast this spell for its mutate cost, put it over or under target non-Human creature you own. They mutate into the creature on top plus all abilities from under it.)\nWhenever this creature mutates, exile cards from the top of your library until you exile X permanent cards, where X is the number of times this creature has mutated. Put those permanent cards onto the battlefield.
|
||||
|
||||
@@ -5,7 +5,7 @@ PT:1/4
|
||||
S:Mode$ CantBeCast | ValidCard$ Permanent | Caster$ You | Description$ You can't cast permanent spells.
|
||||
A:AB$ Mana | Cost$ 4 T | Produced$ W U B R G | SubAbility$ DBTrigger | SpellDescription$ Add {W}{U}{B}{R}{G}. When you cast your next spell this turn, exile cards from the top of your library until you exile an instant or sorcery card with lesser mana value. Until end of turn, you may cast that card without paying its mana cost. Put each other card exiled this way on the bottom of your library in a random order.
|
||||
SVar:DBTrigger:DB$ DelayedTrigger | Mode$ SpellCast | ValidActivatingPlayer$ You | ThisTurn$ True | Execute$ DBDig | TriggerDescription$ When you cast your next spell this turn, exile cards from the top of your library until you exile an instant or sorcery card with lesser mana value. Until end of turn, you may cast that card without paying its mana cost. Put each other card exiled this way on the bottom of your library in a random order.
|
||||
SVar:DBDig:DB$ DigUntil | Defined$ You | Valid$ Instant.cmcLTX,Sorcery.cmcLTX | FoundDestination$ Exile | RevealedDestination$ Exile | RememberRevealed$ True | ImprintFound$ True | SkipReorder$ True | SubAbility$ DBEffect
|
||||
SVar:DBDig:DB$ DigUntil | Defined$ You | Valid$ Instant.cmcLTX,Sorcery.cmcLTX | FoundDestination$ Exile | RevealedDestination$ Exile | RememberRevealed$ True | ImprintFound$ True | SubAbility$ DBEffect
|
||||
SVar:DBEffect:DB$ Effect | StaticAbilities$ MayPlay | RememberObjects$ Imprinted | ForgetOnMoved$ Exile | SubAbility$ DBRestRandomOrder
|
||||
SVar:MayPlay:Mode$ Continuous | Affected$ Card.IsRemembered | MayPlay$ True | MayPlayWithoutManaCost$ True | EffectZone$ Command | AffectedZone$ Exile | Description$ Until end of turn, you may cast that card without paying its mana cost.
|
||||
SVar:DBRestRandomOrder:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Library | LibraryPosition$ -1 | RandomOrder$ True | SubAbility$ DBCleanup
|
||||
|
||||
@@ -2,9 +2,9 @@ Name:Dance, Pathetic Marionette
|
||||
ManaCost:no cost
|
||||
Types:Scheme
|
||||
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ LibraryDance | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, each opponent reveals cards from the top of their library until they reveal a creature card. Choose one of the revealed creature cards and put it onto the battlefield under your control. Put all other cards revealed this way into their owners' graveyards.
|
||||
SVar:LibraryDance:DB$ DigUntil | Defined$ Player.Opponent | Valid$ Creature | ValidDescription$ creature | RememberFound$ True | NoMoveFound$ True | FoundDestination$ Library | FoundLibraryPosition$ 0 | RevealedDestination$ Graveyard | SubAbility$ MakeItChoose
|
||||
SVar:MakeItChoose:DB$ ChooseCard | Choices$ Card.IsRemembered | ChoiceZone$ Library | Mandatory$ True | Amount$ 1 | SubAbility$ MakeItDance
|
||||
SVar:LibraryDance:DB$ DigUntil | Defined$ Player.Opponent | Valid$ Creature | ValidDescription$ creature | RememberRevealed$ True | ImprintFound$ True | NoMoveRevealed$ True | SubAbility$ MakeItChoose
|
||||
SVar:MakeItChoose:DB$ ChooseCard | Choices$ Card.IsImprinted | ChoiceZone$ Library | Mandatory$ True | Amount$ 1 | SubAbility$ MakeItDance
|
||||
SVar:MakeItDance:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Library | Destination$ Battlefield | Mandatory$ True | GainControl$ True | ForgetChanged$ True | SubAbility$ TakeOutTheTrash
|
||||
SVar:TakeOutTheTrash:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Graveyard | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||
Oracle:When you set this scheme in motion, each opponent reveals cards from the top of their library until they reveal a creature card. Choose one of the revealed creature cards and put it onto the battlefield under your control. Put all other cards revealed this way into their owners' graveyards.
|
||||
|
||||
@@ -5,8 +5,10 @@ PT:6/6
|
||||
K:Flying
|
||||
K:Trample
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigRepeat | TriggerDescription$ When CARDNAME enters the battlefield, exile cards from the top of your library until you exile a nonland card, then put that card into your hand. If the card's mana value is 4 or greater, repeat this process. CARDNAME deals 1 damage to you for each card put into your hand this way.
|
||||
SVar:TrigRepeat:DB$ Repeat | RepeatSubAbility$ DBCleanup | RepeatDefined$ Remembered | RepeatPresent$ Card.cmcGE4 | RepeatCompare$ EQ1
|
||||
SVar:TrigRepeat:DB$ Repeat | RepeatSubAbility$ DBCleanup | RepeatDefined$ Remembered | RepeatPresent$ Card.cmcGE4 | RepeatCompare$ EQ1 | SubAbility$ DBDealDamage
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBDigUntil
|
||||
SVar:DBDigUntil:DB$ DigUntil | Valid$ Card.nonLand | ValidDescription$ nonland | FoundDestination$ Hand | RevealedDestination$ Exile | RememberFound$ True | SubAbility$ DBDealDamage
|
||||
SVar:DBDealDamage:DB$ DealDamage | NumDmg$ 1 | Defined$ You
|
||||
SVar:DBDigUntil:DB$ DigUntil | Valid$ Card.nonLand | ValidDescription$ nonland | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | ImprintFound$ True | SubAbility$ DBToHand
|
||||
SVar:DBToHand:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Hand
|
||||
SVar:DBDealDamage:DB$ DealDamage | NumDmg$ Imprinted$Amount | Defined$ You | SubAbility$ DBCleanup2
|
||||
SVar:DBCleanup2:DB$ Cleanup | ClearImprinted$ True | ClearRemembered$ True
|
||||
Oracle:Flying, trample\nWhen Demonlord Belzenlok enters the battlefield, exile cards from the top of your library until you exile a nonland card, then put that card into your hand. If the card's mana value is 4 or greater, repeat this process. Demonlord Belzenlok deals 1 damage to you for each card put into your hand this way.
|
||||
|
||||
@@ -2,9 +2,8 @@ Name:Empty the Laboratory
|
||||
ManaCost:X U U
|
||||
Types:Sorcery
|
||||
A:SP$ Sacrifice | Defined$ You | Amount$ X | SacValid$ Zombie | RememberSacrificed$ True | SubAbility$ DBDigUntil | StackDescription$ SpellDescription | SpellDescription$ Sacrifice X Zombies, then reveal cards from the top of your library until you reveal a number of Zombie creature cards equal to the number of Zombies sacrificed this way. Put those cards onto the battlefield and the rest on the bottom of your library in a random order.
|
||||
SVar:DBDigUntil:DB$ DigUntil | Amount$ Y | Valid$ Creature.Zombie | FoundDestination$ Library | NoMoveFound$ True | ImprintFound$ True | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True | SubAbility$ DBChangeZone
|
||||
SVar:DBChangeZone:DB$ ChangeZone | Defined$ Imprinted | Origin$ Library | Destination$ Battlefield | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||
SVar:DBDigUntil:DB$ DigUntil | Amount$ Y | Valid$ Creature.Zombie | FoundDestination$ Battlefield | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:Count$xPaid
|
||||
SVar:Y:Remembered$Amount
|
||||
DeckHas:Ability$Sacrifice
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Foster
|
||||
ManaCost:2 G G
|
||||
Types:Enchantment
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ Whenever a creature you control dies, you may pay {1}. If you do, reveal cards from the top of your library until you reveal a creature card. Put that card into your hand and the rest into your graveyard.
|
||||
SVar:TrigDig:AB$DigUntil | Cost$ 1 | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Hand | RevealedDestination$ Graveyard
|
||||
SVar:TrigDig:AB$ DigUntil | Cost$ 1 | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Hand | RevealedDestination$ Graveyard
|
||||
Oracle:Whenever a creature you control dies, you may pay {1}. If you do, reveal cards from the top of your library until you reveal a creature card. Put that card into your hand and the rest into your graveyard.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Goblin Machinist
|
||||
ManaCost:4 R
|
||||
Types:Creature Goblin
|
||||
PT:0/5
|
||||
A:AB$ DigUntil | Cost$ 2 R | Valid$ Card.nonLand | ValidDescription$ nonland | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | FoundDestination$ Library | FoundLibraryPosition$ -1 | RememberFound$ True | SubAbility$ DBPump | SpellDescription$ Reveal cards from the top of your library until you reveal a nonland card. CARDNAME gets +X/+0 until end of turn, where X is that card's mana value. Put the revealed cards on the bottom of your library in any order.
|
||||
A:AB$ DigUntil | Cost$ 2 R | Valid$ Card.nonLand | ValidDescription$ nonland | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RememberFound$ True | SubAbility$ DBPump | SpellDescription$ Reveal cards from the top of your library until you reveal a nonland card. CARDNAME gets +X/+0 until end of turn, where X is that card's mana value. Put the revealed cards on the bottom of your library in any order.
|
||||
SVar:DBPump:DB$ Pump | Defined$ Self | NumAtt$ RCX | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:RCX:Remembered$CardManaCost
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:W U B R G
|
||||
Types:Battle Siege
|
||||
Defense:7
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters the battlefield, exile cards from the top of your library until you exile two nonland cards with mana value 4 or less. You may cast one of those two cards without paying its mana cost. Put one of them into your hand. Then put the other cards exiled this way on the bottom of your library in a random order.
|
||||
SVar:TrigDig:DB$ DigUntil | Defined$ You | Valid$ Card.nonLand+cmcLE4 | Amount$ 2 | FoundDestination$ Exile | RevealedDestination$ Exile | RememberRevealed$ True | ImprintFound$ True | SkipReorder$ True | SubAbility$ DBPlay
|
||||
SVar:TrigDig:DB$ DigUntil | Defined$ You | Valid$ Card.nonLand+cmcLE4 | Amount$ 2 | FoundDestination$ Exile | RevealedDestination$ Exile | RememberRevealed$ True | ImprintFound$ True | SubAbility$ DBPlay
|
||||
SVar:DBPlay:DB$ Play | Valid$ Card.IsImprinted | ValidSA$ Spell | ValidZone$ Exile | WithoutManaCost$ True | Controller$ You | Optional$ True | Amount$ 1 | SubAbility$ DBPutHand
|
||||
SVar:DBPutHand:DB$ ChangeZone | ChangeType$ Card.IsImprinted | Mandatory$ True | Hidden$ True | Chooser$ You | ChangeNum$ 1 | Origin$ Exile | Destination$ Hand | SubAbility$ DBRestRandomOrder
|
||||
SVar:DBRestRandomOrder:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Library | LibraryPosition$ -1 | RandomOrder$ True | SubAbility$ DBCleanup
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Legendary Creature Human Elf Shaman
|
||||
PT:2/7
|
||||
T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ TrigPutBottom | TriggerZones$ Battlefield | ActivationLimit$ 1 | OptionalDecider$ You | TriggerDescription$ Whenever you cast a spell, you may put it on the bottom of its owner's library. If you do, reveal cards from the top of your library until you reveal a nonland card. You may cast that card without paying its mana cost. Then put all revealed cards not cast this way on the bottom of your library in a random order. This ability triggers only once each turn.
|
||||
SVar:TrigPutBottom:DB$ ChangeZone | Origin$ Stack | Destination$ Library | LibraryPosition$ -1 | Defined$ TriggeredCard | Fizzle$ True | RememberChanged$ True | SubAbility$ DBDig
|
||||
SVar:DBDig:DB$ DigUntil | Valid$ Card.nonLand | ForgetOtherRemembered$ True | ImprintFound$ True | RememberFound$ True | RememberRevealed$ True | NoMoveFound$ True | NoMoveRevealed$ True | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBPlay
|
||||
SVar:DBDig:DB$ DigUntil | Valid$ Card.nonLand | ForgetOtherRemembered$ True | ImprintFound$ True | RememberFound$ True | RememberRevealed$ True | NoMoveRevealed$ True | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBPlay
|
||||
SVar:DBPlay:DB$ Play | Defined$ Imprinted | ValidZone$ Library | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | ForgetPlayed$ True | SubAbility$ DBBottom
|
||||
SVar:DBBottom:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Library | LibraryPosition$ -1 | RandomOrder$ True | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||
|
||||
@@ -11,7 +11,7 @@ SVar:X:ReplaceCount$DamageAmount
|
||||
SVar:Y:Count$RememberedSize
|
||||
SVar:Z:Count$CardCounters.EYESTALK
|
||||
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ Whenever CARDNAME attacks, reveal cards from the top of your library until you reveal an instant, sorcery, or enchantment card with converted mana cost less than the number of eyestalk counters on CARDNAME. You may cast it without paying its mana cost. Shuffle your library.
|
||||
SVar:TrigDig:DB$ DigUntil | Defined$ You | Amount$ 1 | Valid$ Card.Instant+cmcLEZ,Card.Sorcery+cmcLEZ,Card.Enchantment+cmcLEZ | NoMoveFound$ True | NoMoveRevealed$ True | RememberFound$ True | SubAbility$ CascadeCast
|
||||
SVar:TrigDig:DB$ DigUntil | Defined$ You | Amount$ 1 | Valid$ Card.Instant+cmcLEZ,Card.Sorcery+cmcLEZ,Card.Enchantment+cmcLEZ | NoMoveRevealed$ True | RememberFound$ True | SubAbility$ CascadeCast
|
||||
SVar:CascadeCast:DB$ Play | ValidSA$ Spell | Defined$ Remembered | WithoutManaCost$ True | Optional$ True | SubAbility$ Shuffle
|
||||
SVar:Shuffle:DB$ Shuffle | SubAbility$ DBCleanup
|
||||
SVar:HasAttackEffect:TRUE
|
||||
|
||||
@@ -2,8 +2,9 @@ Name:Venture Forth
|
||||
ManaCost:3 G
|
||||
Types:Sorcery
|
||||
K:Suspend:3:1 G
|
||||
A:SP$ DigUntil | Defined$ You | Valid$ Permanent.Land | ValidDescription$ land | FoundDestination$ Battlefield | RevealedDestination$ Exile | RememberRevealed$ True | SubAbility$ DBRestRandomOrder | SpellDescription$ Exile cards from the top of your library until you exile a land card. Put that card onto the battlefield and the rest on the bottom of your library in a random order.
|
||||
A:SP$ DigUntil | Defined$ You | Valid$ Permanent.Land | ValidDescription$ land | FoundDestination$ Exile | RevealedDestination$ Exile | ImprintFound$ True | RememberRevealed$ True | SubAbility$ DBToPlay | SpellDescription$ Exile cards from the top of your library until you exile a land card. Put that card onto the battlefield and the rest on the bottom of your library in a random order.
|
||||
SVar:DBToPlay:DB$ ChangeZone | Defined$ Imprinted | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBRestRandomOrder
|
||||
SVar:DBRestRandomOrder:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Library | LibraryPosition$ -1 | RandomOrder$ True | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBExileSelf
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | SubAbility$ DBExileSelf
|
||||
SVar:DBExileSelf:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | WithCountersType$ TIME | WithCountersAmount$ 3 | SpellDescription$ Exile CARDNAME with three time counters on it.
|
||||
Oracle:Exile cards from the top of your library until you exile a land card. Put that card onto the battlefield and the rest on the bottom of your library in a random order. Exile Venture Forth with three time counters on it.\nSuspend 3—{1}{G} (Rather than cast this card from your hand, you may pay {1}{G} and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)
|
||||
|
||||
@@ -378,7 +378,7 @@ public final class CardScriptParser {
|
||||
"RememberedController", "RememberedOwner", "ImprintedController",
|
||||
"ImprintedOwner", "EnchantedController", "EnchantedOwner",
|
||||
"EnchantedPlayer", "AttackingPlayer", "DefendingPlayer",
|
||||
"ChosenPlayer", "ChosenAndYou", "SourceController", "CardOwner",
|
||||
"ChosenPlayer", "SourceController", "CardOwner",
|
||||
"ActivePlayer", "You", "Opponent");
|
||||
/**
|
||||
* Defined starting strings for players.
|
||||
|
||||
Reference in New Issue
Block a user