Fix refund timing (#2618)

This commit is contained in:
tool4ever
2023-03-05 14:26:17 +01:00
committed by GitHub
parent 516dca316c
commit c0d729cdda
20 changed files with 25 additions and 38 deletions

View File

@@ -686,7 +686,7 @@ public class ComputerUtilMana {
}
boolean hasConverge = sa.getHostCard().hasConverge();
ListMultimap<ManaCostShard, SpellAbility> sourcesForShards = getSourcesForShards(cost, sa, ai, test,
checkPlayable, manaSpentToPay, hasConverge, ignoreColor, ignoreType);
checkPlayable, hasConverge, ignoreColor, ignoreType);
int testEnergyPool = ai.getCounters(CounterEnumType.ENERGY);
final ManaPool manapool = ai.getManaPool();
@@ -722,7 +722,7 @@ public class ComputerUtilMana {
}
if (sourcesForShards == null && !purePhyrexian) {
return false; // no mana abilities to use for paying
break; // no mana abilities to use for paying
}
toPay = getNextShardToPay(cost);
@@ -916,13 +916,11 @@ public class ComputerUtilMana {
*/
private static ListMultimap<ManaCostShard, SpellAbility> getSourcesForShards(final ManaCostBeingPaid cost,
final SpellAbility sa, final Player ai, final boolean test, final boolean checkPlayable,
List<Mana> manaSpentToPay, final boolean hasConverge, final boolean ignoreColor, final boolean ignoreType) {
final boolean hasConverge, final boolean ignoreColor, final boolean ignoreType) {
// arrange all mana abilities by color produced.
final ListMultimap<Integer, SpellAbility> manaAbilityMap = groupSourcesByManaColor(ai, checkPlayable);
if (manaAbilityMap.isEmpty()) {
// no mana abilities, bailing out
ManaPool.refundMana(manaSpentToPay, ai, sa);
CostPayment.handleOfferings(sa, test, cost.isPaid());
return null;
}
if (DEBUG_MANA_PAYMENT) {

View File

@@ -1683,8 +1683,7 @@ public class CardFactoryUtil {
final String recoverCost = keyword.split(":")[1];
final String changeStr = "DB$ ChangeZone | Defined$ Self"
+ " | Origin$ Graveyard | Destination$ Hand | UnlessCost$ "
+ recoverCost + " | UnlessPayer$ You | UnlessSwitched$ True"
+ " | UnlessResolveSubs$ WhenNotPaid";
+ recoverCost + " | UnlessPayer$ You | UnlessSwitched$ True | UnlessResolveSubs$ WhenNotPaid";
final String exileStr = "DB$ ChangeZone | Defined$ Self | Origin$ Graveyard | Destination$ Exile";
SpellAbility changeSA = AbilityFactory.getAbility(changeStr, card);
@@ -1700,13 +1699,11 @@ public class CardFactoryUtil {
String trigObject = card.isCreature() ? "Creature.Other+YouOwn" : "Creature.YouOwn";
String trigArticle = card.isCreature() ? "another" : "a";
String trigStr = "Mode$ ChangesZone | ValidCard$ " + trigObject
+ " | Origin$ Battlefield | Destination$ Graveyard | "
+ "TriggerZones$ Graveyard | Secondary$ True | "
+ " | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Graveyard | Secondary$ True | "
+ "TriggerDescription$ Recover " + costDesc + " (When " + trigArticle + " creature is "
+ "put into your graveyard from the battlefield, you "
+ "may pay " + costDesc + ". If you do, return "
+ "CARDNAME from your graveyard to your hand. Otherwise,"
+ " exile CARDNAME.)";
+ "CARDNAME from your graveyard to your hand. Otherwise, exile CARDNAME.)";
final Trigger myTrigger = TriggerHandler.parseTrigger(trigStr, card, intrinsic);
changeSA.setIntrinsic(intrinsic);
myTrigger.setOverridingAbility(changeSA);
@@ -1732,8 +1729,7 @@ public class CardFactoryUtil {
final String abString = "DB$ PeekAndReveal | PeekAmount$ " + num + " | RememberRevealed$ True";
final String dbCast = "DB$ Play | Valid$ Card.IsRemembered+sameName | ValidSA$ Spell | " +
"ValidZone$ Library | WithoutManaCost$ True | Optional$ True | " +
"Amount$ All";
"ValidZone$ Library | WithoutManaCost$ True | Optional$ True | Amount$ All";
final String toBottom = "DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered "
+ "| Origin$ Library | Destination$ Library | LibraryPosition$ -1";
@@ -1974,8 +1970,7 @@ public class CardFactoryUtil {
upkeepTrig.append(" | TriggerDescription$ At the beginning of your upkeep, " +
"if CARDNAME has a time counter on it, remove a time counter from it.");
final String remove = "DB$ RemoveCounter | Defined$ Self" +
" | CounterType$ TIME | CounterNum$ 1";
final String remove = "DB$ RemoveCounter | Defined$ Self | CounterType$ TIME | CounterNum$ 1";
final Trigger parsedUpkeepTrig = TriggerHandler.parseTrigger(upkeepTrig.toString(), card, intrinsic);
parsedUpkeepTrig.setOverridingAbility(AbilityFactory.getAbility(remove, card));

View File

@@ -4,5 +4,5 @@ Types:Artifact Creature Gargoyle
PT:2/1
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, put up to one target instant or sorcery card from your graveyard on top of your library.
SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | ValidTgts$ Instant.YouCtrl,Sorcery.YouCtrl | TgtPrompt$ Select target instant or sorcery card from your graveyard | TargetMin$ 0 | TargetMax$ 1 | SpellDescription$ When CARDNAME enters the battlefield, put up to one target instant or sorcery card from your graveyard on top of your library.
SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | ValidTgts$ Instant.YouCtrl,Sorcery.YouCtrl | TgtPrompt$ Select target instant or sorcery card from your graveyard | TargetMin$ 0 | TargetMax$ 1
Oracle:Flying\nWhen Biblioplex Assistant enters the battlefield, put up to one target instant or sorcery card from your graveyard on top of your library.

View File

@@ -3,7 +3,7 @@ ManaCost:4
Types:Artifact Creature Insect
PT:4/3
K:Vigilance
T:Mode$ ChangesZone | Origin$ Graveyard | Destination$ Battlefield | TriggerZones$ Battlefield | ValidCard$ Card.Self | Execute$ DBChangeZone | SpellDescription$ Exile Cannon — When CARDNAME enters the battlefield from a graveyard, exile up to one target nonland permanent.
T:Mode$ ChangesZone | Origin$ Graveyard | Destination$ Battlefield | TriggerZones$ Battlefield | ValidCard$ Card.Self | Execute$ DBChangeZone | TriggerDescription$ Exile Cannon — When CARDNAME enters the battlefield from a graveyard, exile up to one target nonland permanent.
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent.nonLand | TargetMin$ 0 | TargetMax$ 1
K:Unearth:7
DeckHas:Ability$Graveyard

View File

@@ -1,7 +1,7 @@
Name:Citizen's Arrest
ManaCost:1 W W
Types:Enchantment
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | SpellDescription$ When CARDNAME enters the battlefield, exile target creature or planeswalker an opponent controls until CARDNAME leaves the battlefield.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target creature or planeswalker an opponent controls until CARDNAME leaves the battlefield.
SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.OppCtrl,Planeswalker.OppCtrl | Duration$ UntilHostLeavesPlay
SVar:PlayMain1:TRUE
Oracle:When Citizen's Arrest enters the battlefield, exile target creature or planeswalker an opponent controls until Citizen's Arrest leaves the battlefield.

View File

@@ -4,7 +4,7 @@ Types:Creature Sphinx
PT:4/5
K:Flying
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDigUntil | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player exiles cards from the top of their library until they exile an instant or sorcery card. You may cast that card without paying its mana cost. Then that player puts the exiled cards that weren't cast this way on the bottom of their library in a random order.
SVar:TrigDigUntil:DB$ DigUntil | Defined$ TriggeredTarget | Valid$ Instant,Sorcery | ValidDescription$ instant or sorcery | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | RememberRevealed$ True | IsCurse$ True | SubAbility$ DBPlay | SpellDescription$ Whenever CARDNAME deals combat damage to a player, that player exiles cards from the top of their library until they exile an instant or sorcery card. You may cast that card without paying its mana cost. Then that player puts the exiled cards that weren't cast this way on the bottom of their library in a random order.
SVar:TrigDigUntil:DB$ DigUntil | Defined$ TriggeredTarget | Valid$ Instant,Sorcery | ValidDescription$ instant or sorcery | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | RememberRevealed$ True | IsCurse$ True | SubAbility$ DBPlay
SVar:DBPlay:DB$ Play | Defined$ Remembered | ValidZone$ Exile | Valid$ Instant.IsRemembered,Sorcery.IsRemembered | ValidSA$ Spell | WithoutManaCost$ True | RememberObjects$ Remembered | Optional$ True | ForgetPlayed$ True | 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

View File

@@ -5,5 +5,5 @@ PT:3/6
K:Vanishing:3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME enters or leaves the battlefield, return another target creature card from your graveyard to your hand.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | Secondary$ True | TriggerDescription$ When CARDNAME enters or leaves the battlefield, return another target creature card from your graveyard to your hand.
SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.Other | TargetsWithDefinedController$ TriggeredCardController | SpellDescription$ When CARDNAME enters or leaves the battlefield, return another target creature card from your graveyard to your hand.
SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.Other | TargetsWithDefinedController$ TriggeredCardController
Oracle:Vanishing 3 (This creature enters the battlefield with three time counters on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it.)\nWhen Deadwood Treefolk enters or leaves the battlefield, return another target creature card from your graveyard to your hand.

View File

@@ -4,7 +4,7 @@ Types:Creature Ooze
PT:2/2
K:Flash
K:Foretell: G
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCounterAbility | SpellDescription$ When CARDNAME enters the battlefield, counter target activated or triggered ability from an artifact or enchantment source. If a permanent's ability is countered this way, destroy that permanent.
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCounterAbility | TriggerDescription$ When CARDNAME enters the battlefield, counter target activated or triggered ability from an artifact or enchantment source. If a permanent's ability is countered this way, destroy that permanent.
SVar:TrigCounterAbility:DB$ Counter | TargetType$ Activated,Triggered | TgtPrompt$ Select target activated or triggered ability from an artifact or enchantment source | ValidTgts$ Artifact,Enchantment | DestroyPermanent$ True
AI:RemoveDeck:Random
Oracle:Flash\nWhen Green Slime enters the battlefield, counter target activated or triggered ability from an artifact or enchantment source. If a permanent's ability is countered this way, destroy that permanent.\nFortell {G}

View File

@@ -2,5 +2,5 @@ Name:Hissing Miasma
ManaCost:1 B B
Types:Enchantment
T:Mode$ Attacks | ValidCard$ Creature | Attacked$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ Whenever a creature attacks you, its controller loses 1 life.
SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredAttackerController | LifeAmount$ 1 | SpellDescription$ Whenever a creature attacks you, its controller loses 1 life.
SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredAttackerController | LifeAmount$ 1
Oracle:Whenever a creature attacks you, its controller loses 1 life.

View File

@@ -3,6 +3,6 @@ ManaCost:3 B B
Types:Creature Elf Assassin
PT:3/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounterOpp | TriggerDescription$ When CARDNAME enters the battlefield, put a +1/+1 counter on target creature you don't control.
SVar:TrigPutCounterOpp:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control | SpellDescription$ When CARDNAME enters the battlefield, put a +1/+1 counter on target creature you don't control.
SVar:TrigPutCounterOpp:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control
A:AB$ Destroy | Cost$ 2 B T | ValidTgts$ Creature.HasCounters | TgtPrompt$ Select target creature with a counter on it | SpellDescription$ Destroy target creature with a counter on it.
Oracle:When Hunter of Eyeblights enters the battlefield, put a +1/+1 counter on target creature you don't control.\n{2}{B}, {T}: Destroy target creature with a counter on it.

View File

@@ -5,7 +5,7 @@ PT:2/5
K:Flying
K:Vigilance
K:Toxic:2
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDesciption$ Corrupted — At the beginning of your end step, each opponent who has three or more poison counters exiles the top card of their library face down. You may look at and play those cards for as long as they remain exiled, and you may spend many as though it were mana of any color to cast those spells.
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ Corrupted — At the beginning of your end step, each opponent who has three or more poison counters exiles the top card of their library face down. You may look at and play those cards for as long as they remain exiled, and you may spend many as though it were mana of any color to cast those spells.
SVar:TrigExile:DB$ Dig | DigNum$ 1 | ChangeNum$ All | Defined$ Opponent.IsCorrupted | DestinationZone$ Exile | ExileFaceDown$ True | RememberChanged$ True | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ STLookPlay | Duration$ Permanent | ForgetOnMoved$ Exile | SubAbility$ DBCleanup
SVar:STLookPlay:Mode$ Continuous | MayLookAt$ You | MayPlay$ True | MayPlayIgnoreColor$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may look at and play that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell.

View File

@@ -3,7 +3,7 @@ ManaCost:W B
Types:Creature Human Artificer
PT:2/2
K:Vigilance
T:Mode$ ChangesZone | Affected$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDiscard | SpellDescription$ When CARDNAME enters the battlefield, target player reveals all nonland cards in their hand. You may choose one of those cards. If you do, that player exiles it and conjures a card named Juggernaut into their hand.
T:Mode$ ChangesZone | Affected$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters the battlefield, target player reveals all nonland cards in their hand. You may choose one of those cards. If you do, that player exiles it and conjures a card named Juggernaut into their hand.
SVar:TrigDiscard:DB$ Reveal | ValidTgts$ Player | TgtPrompt$ Select target player | RevealAllValid$ Card.nonLand+TargetedPlayerCtrl | SubAbility$ DBExile
SVar:DBExile:DB$ ChangeZone | DefinedPlayer$ Targeted | Chooser$ You | Origin$ Hand | Destination$ Exile | ChangeNum$ 1 | ChangeType$ Card.nonLand+TargetedPlayerCtrl | AlreadyRevealed$ True | AILogic$ BestCard | RememberChanged$ True | SubAbility$ DBConjure
SVar:DBConjure:DB$ MakeCard | ConditionDefined$ Remembered | ConditionPresent$ Card | Conjure$ True | Defined$ TargetedPlayer | Name$ Juggernaut | Zone$ Hand | SubAbility$ DBCleanup

View File

@@ -1,7 +1,7 @@
Name:Prison Realm
ManaCost:2 W
Types:Enchantment
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target creature or planeswalker an opponent controls until CARDNAME leaves the battlefield. | SpellDescription$ When CARDNAME enters the battlefield, exile target creature or planeswalker an opponent controls until CARDNAME leaves the battlefield.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target creature or planeswalker an opponent controls until CARDNAME leaves the battlefield.
SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.OppCtrl,Planeswalker.OppCtrl | TgtPrompt$ Select target creature an opponent controls | Duration$ UntilHostLeavesPlay
SVar:PlayMain1:TRUE
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When CARDNAME enters the battlefield, scry 1.

View File

@@ -2,7 +2,7 @@ Name:Radiant Epicure
ManaCost:4 B
Types:Creature Vampire Wizard
PT:5/5
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDrain | SpellDescription$ Converge — When CARDNAME enters the battlefield, each opponent loses X life and you gain X life, where X is the number of colors of mana spent to cast this spell.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDrain | TriggerDescription$ Converge — When CARDNAME enters the battlefield, each opponent loses X life and you gain X life, where X is the number of colors of mana spent to cast this spell.
SVar:TrigDrain:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ X | SubAbility$ DBGainLife
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ X
SVar:X:Count$Converge

View File

@@ -6,7 +6,7 @@ K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Cleric.Other+YouCtrl,Angel.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever another Angel or Cleric enters the battlefield under your control, you gain life equal to that creature's toughness.
SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ X
SVar:X:TriggeredCard$CardToughness
S:Mode$ Continuous | CheckSVar$ Z | SVarCompare$ GEY | Affected$ Creature.YouCtrl | AddPower$ 2 | AddToughness$ 2 | SpellDescription$ As long as you have at least 7 life more than your starting life total, creatures you control get +2/+2.
S:Mode$ Continuous | CheckSVar$ Z | SVarCompare$ GEY | Affected$ Creature.YouCtrl | AddPower$ 2 | AddToughness$ 2 | Description$ As long as you have at least 7 life more than your starting life total, creatures you control get +2/+2.
SVar:Z:Count$YourLifeTotal
SVar:Y:Count$YourStartingLife/Plus.7
DeckHas:Ability$LifeGain

View File

@@ -4,7 +4,7 @@ Types:Legendary Creature Viashino Warlock
PT:3/3
K:Menace
A:AB$ Mana | Cost$ T | Produced$ Combo Any | Amount$ 2 | RestrictValid$ Spell.Creature+Dragon | SpellDescription$ Add two mana in any combination of colors. Spend this mana only to cast Dragon creature spells.
S:Mode$ Continuous | Affected$ Creature.Dragon+YouOwn | Condition$ PlayerTurn | MayPlay$ True | MayPlayLimit$ 1 | EffectZone$ Battlefield | AffectedZone$ Graveyard | SpellDescription$ Once during each of your turns, you may cast a Dragon creature spell from your graveyard.
S:Mode$ Continuous | Affected$ Creature.Dragon+YouOwn | Condition$ PlayerTurn | MayPlay$ True | MayPlayLimit$ 1 | EffectZone$ Battlefield | AffectedZone$ Graveyard | Description$ Once during each of your turns, you may cast a Dragon creature spell from your graveyard.
T:Mode$ SpellCast | ValidCard$ Dragon.wasCastFromYourGraveyard | ValidActivatingPlayer$ You | Execute$ DBAnimate | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a Dragon creature spell from your graveyard, it gains "When this creature dies, exile it."
SVar:DBAnimate:DB$ Animate | Defined$ TriggeredCard | Duration$ Permanent | Triggers$ TrigDieExile
SVar:TrigDieExile:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When this creature dies, exile it.

View File

@@ -2,7 +2,7 @@ Name:Stone Retrieval Unit
ManaCost:4
Types:Artifact Creature Construct
PT:2/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | SpellDescription$ When CARDNAME enters the battlefield, create a tapped Powerstone token. (It's an artifact with "{T}: Add {C}. This mana can't be spent to cast a nonartifact spell.)
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a tapped Powerstone token. (It's an artifact with "{T}: Add {C}. This mana can't be spent to cast a nonartifact spell.)
SVar:TrigToken:DB$ Token | TokenTapped$ True | TokenScript$ c_a_powerstone
DeckHas:Ability$Token & Type$Artifact
Oracle:When Stone Retrieval Unit enters the battlefield, create a tapped Powerstone token. (It's an artifact with "{T}: Add {C}. This mana can't be spent to cast a nonartifact spell.)

View File

@@ -6,7 +6,7 @@ K:Flying
K:Trample
K:ETBReplacement:Other:DBChoose
SVar:DBChoose:DB$ ChooseCard | Choices$ Creature.Other+YouCtrl | Mandatory$ True | SpellDescription$ As CARDNAME enters the battlefield, choose another creature you control.
S:Mode$ Continuous | Affected$ Card.ChosenCardStrict | AddKeyword$ Flying | AddToughness$ 3 | AddPower$ 3 | SpellDescription$ The chosen creature gets +3/+3 and has flying.
S:Mode$ Continuous | Affected$ Card.ChosenCardStrict | AddKeyword$ Flying | AddToughness$ 3 | AddPower$ 3 | Description$ The chosen creature gets +3/+3 and has flying.
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Any | Execute$ TrigSacrifice | SubAbility$ TrigSacrifice | TriggerDescription$ When CARDNAME leaves the battlefield, sacrifice the chosen creature.
SVar:TrigSacrifice:DB$ SacrificeAll | ValidCards$ Card.ChosenCardStrict
DeckHas:Ability$Sacrifice

View File

@@ -4,7 +4,7 @@ Types:Creature Phyrexian Insect
PT:1/1
K:Toxic:1
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigEffect | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, Insects you control and Insect cards in your graveyard, hand, and library perpetually gain toxic 1.
SVar:TrigEffect:DB$ Effect | Name$ Phyresis Roach's Perpetual Effect | RememberObjects$ Valid Insect.YouCtrl,ValidGraveyard,Hand,Library Insect.YouOwn | StaticAbilities$ PerpetualToxic | Duration$ Permanent | Triggers$ Update
SVar:TrigEffect:DB$ Effect | Name$ Phyresis Roach's Perpetual Effect | RememberObjects$ Valid Insect.YouCtrl,ValidGraveyard Insect.YouOwn,ValidHand Insect.YouOwn,ValidLibrary Insect.YouOwn | StaticAbilities$ PerpetualToxic | Duration$ Permanent | Triggers$ Update
SVar:PerpetualToxic:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ Toxic:1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ These cards perpetually gain toxic 1.
SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate
SVar:DBUpdate:DB$ UpdateRemember

View File

@@ -292,12 +292,6 @@ public class HumanCostDecision extends CostDecisionMakerBase {
// Inputs
// Exile<Num/Type{/TypeDescription}>
// ExileFromHand<Num/Type{/TypeDescription}>
// ExileFromGrave<Num/Type{/TypeDescription}>
// ExileFromTop<Num/Type{/TypeDescription}> (of library)
// ExileSameGrave<Num/Type{/TypeDescription}>
private PaymentDecision exileFromSame(final CostExile cost, final CardCollectionView list, final int nNeeded, final List<Player> payableZone) {
if (nNeeded == 0) {
return PaymentDecision.number(0);