YSNC: Bank Job and support (#1228)

* bank_job.txt

* CardProperty.cardHasProperty support for "BottomLibrary_Creature"

* psychic_theft.txt clean up

* bank_job.txt v 2.0

* planeswalkers_mischief.txt refactor

* psychic_theft.txt refactor

* desc tweak

* bank_job.txt use RememberedLKI

* planeswalkers_mischief.txt use RememberedLKI, remove OppOwn

* psychic_theft.txt use RememberedLKI, remove OppOwn and unneeded line

* bank_job.txt improve DelayedTrigger
This commit is contained in:
Northmoc
2022-08-11 11:18:09 -04:00
committed by GitHub
parent 7e52459ed4
commit 1ddb5e98cb
7 changed files with 31 additions and 26 deletions

View File

@@ -597,7 +597,10 @@ public class CardProperty {
return false;
}
} else if (property.startsWith("BottomLibrary")) {
final CardCollection cards = new CardCollection(card.getOwner().getCardsIn(ZoneType.Library));
CardCollection cards = new CardCollection(card.getOwner().getCardsIn(ZoneType.Library));
if (property.startsWith("BottomLibrary_")) {
cards = CardLists.getValidCards(cards, property.substring(14), sourceController, source, spellAbility);
}
Collections.reverse(cards);
if (cards.isEmpty() || !card.equals(cards.get(0))) {
return false;

View File

@@ -3,7 +3,7 @@ ManaCost:3
Types:Artifact
A:AB$ Animate | Cost$ 3 T | ActivationPhases$ Upkeep->BeginCombat | ActivationFirstCombat$ True | ValidTgts$ Creature.nonWall+ActivePlayerCtrl+notFirstTurnControlled | TgtPrompt$ Select target non-Wall creature the active player has controlled continuously since the beginning of the turn | IsCurse$ True | staticAbilities$ MustAttack | UnlessCost$ X | UnlessPayer$ TargetedController | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DestroyPacifist | SpellDescription$ Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That player may pay {X}, where X is that creature's mana value. If they don't pay, the creature attacks this turn if able, and at the beginning of the next end step, destroy it if it didn't attack this turn. Activate only before attackers are declared.
SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able.
SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDestroy | RememberObjects$ ParentTarget | TriggerDescription$ At the beginning of the end step, destroy that creature if it didn't attack this turn.
SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDestroy | RememberObjects$ ParentTarget | TriggerDescription$ At the beginning of the next end step, destroy that creature if it didn't attack this turn.
SVar:TrigDestroy:DB$ Destroy | Defined$ DelayTriggerRemembered | ConditionDefined$ DelayTriggerRemembered | ConditionPresent$ Creature.notAttackedThisTurn | ConditionCompare$ GE1
SVar:X:Targeted$CardManaCost
AI:RemoveDeck:All

View File

@@ -4,7 +4,7 @@ Types:Creature Imp
PT:1/1
A:AB$ Animate | Cost$ T | ValidTgts$ Creature.nonWall+ActivePlayerCtrl+notFirstTurnControlled | TgtPrompt$ Select target non-Wall creature the active player has controlled continuously since the beginning of the turn | ActivationPhases$ Upkeep->BeginCombat | ActivationFirstCombat$ True | OpponentTurn$ True | staticAbilities$ MustAttack | SubAbility$ DestroyPacifist | SpellDescription$ Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That creature attacks this turn if able. Destroy it at the beginning of the next end step if it didn't attack this turn. Activate only during an opponent's turn, before attackers are declared.
SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able.
SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | RememberObjects$ ParentTarget | Execute$ TrigDestroy | TriggerDescription$ At the beginning of the end step, destroy that creature if it didn't attack this turn.
SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | RememberObjects$ ParentTarget | Execute$ TrigDestroy | TriggerDescription$ At the beginning of the next end step, destroy that creature if it didn't attack this turn.
SVar:TrigDestroy:DB$ Destroy | Defined$ DelayTriggerRemembered | ConditionDefined$ DelayTriggerRemembered | ConditionPresent$ Creature.notAttackedThisTurn | ConditionCompare$ GE1
AI:RemoveDeck:All
Oracle:{T}: Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That creature attacks this turn if able. Destroy it at the beginning of the next end step if it didn't attack this turn. Activate only during an opponent's turn, before attackers are declared.

View File

@@ -5,7 +5,7 @@ PT:1/1
A:AB$ Untap | Cost$ T | ValidTgts$ Creature.Blue | TgtPrompt$ Select target blue creature | SpellDescription$ Untap target blue creature.
A:AB$ Pump | Cost$ T | ValidTgts$ Creature.nonWall+ActivePlayerCtrl+notFirstTurnControlled | TgtPrompt$ Select target non-Wall creature the active player has controlled continuously since the beginning of the turn | ActivationPhases$ Upkeep->BeginCombat | ActivationFirstCombat$ True | staticAbilities$ MustAttack | SubAbility$ DestroyPacifist | SpellDescription$ Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That creature attacks this turn if able. Destroy it at the beginning of the next end step if it didn't attack this turn. Activate only before attackers are declared.
SVar:MustAttack:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ This creature attacks this turn if able.
SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDestroy | RememberObjects$ ParentTarget | TriggerDescription$ At the beginning of the end step, destroy that creature if it didn't attack this turn.
SVar:DestroyPacifist:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDestroy | RememberObjects$ ParentTarget | TriggerDescription$ At the beginning of the next end step, destroy that creature if it didn't attack this turn.
SVar:TrigDestroy:DB$ Destroy | Defined$ DelayTriggerRemembered | ConditionDefined$ DelayTriggerRemembered | ConditionPresent$ Creature.notAttackedThisTurn | ConditionCompare$ GE1
AI:RemoveDeck:All
DeckHints:Color$Blue

View File

@@ -1,16 +1,12 @@
Name:Planeswalker's Mischief
ManaCost:2 U
Types:Enchantment
A:AB$ Reveal | Cost$ 3 U | Random$ True | RememberRevealed$ True | ValidTgts$ Opponent | TgtPrompt$ Select target opponent to reveal a card | SorcerySpeed$ True | SubAbility$ DBChangeZone | SpellDescription$ Target opponent reveals a card at random from their hand. If it's an instant or sorcery card, exile it. You may cast it without paying its mana cost for as long as it remains exiled. At the beginning of the next end step, if you haven't cast it, return it to its owner's hand. Activate only as a sorcery.
SVar:DBChangeZone:DB$ ChangeZoneAll | ChangeType$ Instant.IsRemembered,Sorcery.IsRemembered | Origin$ Hand | Destination$ Exile | SubAbility$ DBForgetOther
SVar:DBForgetOther:DB$ Cleanup | ClearRemembered$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | StaticAbilities$ MischiefPlay | Triggers$ TrigEOT,TrigChangesZone | RememberObjects$ Remembered | Duration$ Permanent | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup
A:AB$ Reveal | Cost$ 3 U | Random$ True | RememberRevealed$ True | ValidTgts$ Opponent | SorcerySpeed$ True | SubAbility$ DBChangeZone | SpellDescription$ Target opponent reveals a card at random from their hand. If it's an instant or sorcery card, exile it. You may cast it without paying its mana cost for as long as it remains exiled. At the beginning of the next end step, if you haven't cast it, return it to its owner's hand. Activate only as a sorcery.
SVar:DBChangeZone:DB$ ChangeZoneAll | ChangeType$ Instant.IsRemembered,Sorcery.IsRemembered | Origin$ Hand | Destination$ Exile | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | StaticAbilities$ MischiefPlay | ExileOnMoved$ Exile | RememberObjects$ Remembered | Duration$ Permanent | SubAbility$ DBDelayedTrigger
SVar:DBDelayedTrigger:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ MischiefReturn | IsPresent$ Card.IsRemembered | PresentZone$ Exile | RememberObjects$ Remembered | SubAbility$ DBCleanup | TriggerDescription$ At the beginning of the next end step, if that card is still exiled, put it into your graveyard and create a Treasure token.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:MischiefPlay:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | EffectZone$ Command | Affected$ Card.IsRemembered+OppOwn | AffectedZone$ Exile | Description$ You may cast a card without paying its mana cost as long as it remains exiled.
SVar:TrigEOT:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | Execute$ MischiefReturn | TriggerDescription$ At the beginning of the next end step, if you haven't cast it, return it to its owner's hand.
SVar:MischiefReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Hand
SVar:TrigChangesZone:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ MischiefCleanup
SVar:MischiefCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
SVar:X:Count$ValidExile Instant.IsRemembered,Sorcery.IsRemembered
SVar:MischiefPlay:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | Description$ You may cast the exiled instant or sorcery card without paying its mana cost for as long as it remains exiled.
SVar:MischiefReturn:DB$ ChangeZone | Defined$ RememberedLKI | Origin$ Exile | Destination$ Hand
SVar:NonStackingEffect:True
Oracle:{3}{U}: Target opponent reveals a card at random from their hand. If it's an instant or sorcery card, exile it. You may cast it without paying its mana cost for as long as it remains exiled. At the beginning of the next end step, if you haven't cast it, return it to its owner's hand. Activate only as a sorcery.

View File

@@ -1,18 +1,11 @@
Name:Psychic Theft
ManaCost:1 U
Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 U | ValidTgts$ Player | Origin$ Hand | Destination$ Exile | ChangeType$ Instant,Sorcery | IsCurse$ True | Chooser$ You | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ TheftEffect | SpellDescription$ Target player reveals their hand. You choose an instant or sorcery card from it and exile that card. You may cast that card for as long as it remains exiled. At the beginning of the next end step, if you haven't cast the card, return it to its owner's hand. | StackDescription$ SpellDescription
SVar:TheftEffect:DB$ Effect | StaticAbilities$ STThieving | Duration$ Permanent | RememberObjects$ Remembered | Triggers$ TrigReturn,TrigCast | SubAbility$ DBResetSVar
# Even though the Effect is "Permanent", it's not really permanent
SVar:DBResetSVar:DB$ StoreSVar | SVar$ ActivePsychic | Type$ Number | Expression$ 1 | SubAbility$ DBCleanup
A:SP$ ChangeZone | ValidTgts$ Player | Origin$ Hand | Destination$ Exile | ChangeType$ Instant,Sorcery | Mandatory$ True | IsCurse$ True | Chooser$ You | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ TheftEffect | SpellDescription$ Target player reveals their hand. You choose an instant or sorcery card from it and exile that card. | StackDescription$ SpellDescription
SVar:TheftEffect:DB$ Effect | StaticAbilities$ STThieving | Duration$ Permanent | RememberObjects$ Remembered | ExileOnMoved$ Exile | SubAbility$ DBDelayedTrigger | SpellDescription$ You may cast that card for as long as it remains exiled. At the beginning of the next end step, if you haven't cast the card, return it to its owner's hand.
SVar:DBDelayedTrigger:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | IsPresent$ Card.IsRemembered | PresentZone$ Exile | RememberObjects$ Remembered | SubAbility$ DBCleanup | TriggerDescription$ At the beginning of the next end step, if you haven't cast the card, return it to its owner's hand.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:ActivePsychic:Number$1
SVar:STThieving:Mode$ Continuous | Affected$ Card.IsRemembered+OppOwn | MayPlay$ True | EffectZone$ Command | AffectedZone$ Exile | CheckSVar$ ActivePsychic | Description$ You may cast that card for as long as it remains exiled.
# Return the card as a normal trigger
SVar:TrigReturn:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | TriggerZones$ Command | Execute$ DBReturn | TriggerDescription$ At the beginning of the next end step, if you haven't cast the card, return it to its owner's hand.
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Hand | SubAbility$ RemoveEffect
SVar:RemoveEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
# Remove Effect when the card is played
SVar:TrigCast:Mode$ SpellCast | ValidCard$ Card.IsRemembered | Static$ True | TriggerZones$ Command | Execute$ RemoveEffect
SVar:STThieving:Mode$ Continuous | Affected$ Card.IsRemembered+nonLand | MayPlay$ True | EffectZone$ Command | AffectedZone$ Exile | Description$ You may cast that card for as long as it remains exiled.
SVar:TrigReturn:DB$ ChangeZone | Defined$ RememberedLKI | Origin$ Exile | Destination$ Hand
AI:RemoveDeck:All
Oracle:Target player reveals their hand. You choose an instant or sorcery card from it and exile that card. You may cast that card for as long as it remains exiled. At the beginning of the next end step, if you haven't cast the card, return it to its owner's hand.

View File

@@ -0,0 +1,13 @@
Name:Bank Job
ManaCost:1 B R
Types:Enchantment
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigExile | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, exile the bottom creature card of your library. You may cast that card this turn. At the beginning of the next end step, if that card is still exiled, put it into your graveyard and create a Treasure token.
SVar:TrigExile:DB$ ChangeZoneAll | ChangeType$ Card.YouOwn+BottomLibrary_Creature | Origin$ Library | Destination$ Exile | RememberChanged$ True | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | StaticAbilities$ MayCast | RememberObjects$ Remembered | ExileOnMoved$ Exile | SubAbility$ DBDelayedTrigger
SVar:MayCast:Mode$ Continuous | Affected$ Card.IsRemembered+nonLand | MayPlay$ True | EffectZone$ Command | AffectedZone$ Exile | Description$ You may cast that card this turn.
SVar:DBDelayedTrigger:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigGrave | IsPresent$ Card.IsTriggerRemembered | PresentZone$ Exile | RememberObjects$ Remembered | SubAbility$ DBCleanup | TriggerDescription$ At the beginning of the next end step, if that card is still exiled, put it into your graveyard and create a Treasure token.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:TrigGrave:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Exile | Destination$ Graveyard | SubAbility$ DBTreasure
SVar:DBTreasure:DB$ Token | TokenScript$ c_a_treasure_sac
DeckHas:Ability$Sacrifice|Token & Type$Treasure|Artifact
Oracle:At the beginning of your upkeep, exile the bottom creature card of your library. You may cast that card this turn. At the beginning of the next end step, if that card is still exiled, put it into your graveyard and create a Treasure token.