From b3d6f8a2af2c0bf1689fb81c593b2ed51c501cd5 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Wed, 22 Jun 2022 08:19:47 +0200 Subject: [PATCH] Fix Feather, the Redeemed and some others --- forge-game/src/main/java/forge/game/card/Card.java | 2 +- .../main/java/forge/game/card/CardFactoryUtil.java | 11 +++++------ forge-gui/res/cardsfolder/d/darigaaz_reincarnated.txt | 3 +-- forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt | 3 +-- forge-gui/res/cardsfolder/d/dodecapod.txt | 3 +-- forge-gui/res/cardsfolder/d/draugr_necromancer.txt | 3 +-- forge-gui/res/cardsfolder/f/feather_the_redeemed.txt | 7 +++---- forge-gui/res/cardsfolder/k/kor_haven.txt | 2 +- forge-gui/res/cardsfolder/s/spell_queller.txt | 2 +- .../res/cardsfolder/upcoming/ravenloft_adventurer.txt | 5 +++-- 10 files changed, 18 insertions(+), 23 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 7c1975016e1..7b2390b7a00 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -503,7 +503,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { if (game != null) { // update Type, color and keywords again if they have changed if (!changedCardTypes.isEmpty()) { - updateTypesForView();; + updateTypesForView(); } updateColorForView(); diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 6ab7afbd927..673af59f78f 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1680,7 +1680,7 @@ public class CardFactoryUtil { final String abString = "DB$ PeekAndReveal | PeekAmount$ " + num + " | RememberRevealed$ True"; - final String dbCast = "DB$ Play | Valid$ Card.IsRemembered+sameName | " + + final String dbCast = "DB$ Play | Valid$ Card.IsRemembered+sameName | ValidSA$ Spell | " + "ValidZone$ Library | WithoutManaCost$ True | Optional$ True | " + "Amount$ All"; @@ -1893,7 +1893,7 @@ public class CardFactoryUtil { String upkeepTrig = "Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | " + "TriggerDescription$ " + sb.toString(); - String effect = "DB$ Sacrifice | SacValid$ Self | UnlessPayer$ You | UnlessCost$ " + k[1]; + String effect = "DB$ SacrificeAll | Defined$ Self | Controller$ You | UnlessPayer$ You | UnlessCost$ " + k[1]; final Trigger parsedTrigger = TriggerHandler.parseTrigger(upkeepTrig, card, intrinsic); parsedTrigger.setOverridingAbility(AbilityFactory.getAbility(effect, card)); @@ -2323,12 +2323,11 @@ public class CardFactoryUtil { + " | Origin$ Stack | Destination$ Graveyard | Fizzle$ False " + " | Description$ Rebound (" + inst.getReminderText() + ")"; - String abExile = "DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Stack | Destination$ Exile"; + String abExile = "DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Stack | Destination$ Exile | RememberChanged$ True"; String delTrig = "DB$ DelayedTrigger | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You " + - " | OptionalDecider$ You | RememberObjects$ ReplacedCard | TriggerDescription$" + " | OptionalDecider$ You | RememberObjects$ Remembered | TriggerDescription$" + " At the beginning of your next upkeep, you may cast " + card.toString() + " without paying its mana cost."; - // TODO add check for still in exile - String abPlay = "DB$ Play | Defined$ DelayTriggerRemembered | WithoutManaCost$ True | Optional$ True"; + String abPlay = "DB$ Play | Defined$ DelayTriggerRememberedLKI | WithoutManaCost$ True | Optional$ True"; SpellAbility saExile = AbilityFactory.getAbility(abExile, card); diff --git a/forge-gui/res/cardsfolder/d/darigaaz_reincarnated.txt b/forge-gui/res/cardsfolder/d/darigaaz_reincarnated.txt index 6f84b323efa..acf6cf582fc 100644 --- a/forge-gui/res/cardsfolder/d/darigaaz_reincarnated.txt +++ b/forge-gui/res/cardsfolder/d/darigaaz_reincarnated.txt @@ -6,8 +6,7 @@ K:Flying K:Trample K:Haste R:Event$ Moved | ActiveZones$ Battlefield | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | ReplaceWith$ Exile | Description$ If CARDNAME would die, instead exile it with three egg counters on it. -SVar:Exile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBAddCounter | Defined$ ReplacedCard -SVar:DBAddCounter:DB$ PutCounter | Defined$ ReplacedCard | CounterType$ EGG | CounterNum$ 3 +SVar:Exile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Defined$ ReplacedCard | WithCountersType$ EGG | WithCountersAmount$ 3 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Exile | IsPresent$ Card.Self+counters_GE1_EGG | PresentZone$ Exile | Execute$ DBRemoveCounter | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is exiled with an egg counter on it, remove an egg counter from it. Then if CARDNAME has no egg counters on it, return it to the battlefield. SVar:DBRemoveCounter:DB$ RemoveCounter | Defined$ Self | CounterType$ EGG | CounterNum$ 1 | SubAbility$ DBReturn SVar:DBReturn:DB$ ChangeZone | Defined$ Self | Origin$ Exile | Destination$ Battlefield | ConditionDefined$ Self | ConditionPresent$ Card.counters_EQ0_EGG diff --git a/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt b/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt index 6f5433e98ea..df68f87791e 100644 --- a/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt +++ b/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt @@ -4,8 +4,7 @@ Types:Creature Dauthi Rogue PT:3/2 K:Shadow R:Event$ Moved | ActiveZones$ Battlefield | Destination$ Graveyard | ValidCard$ Card.nonToken+OppOwn | ReplaceWith$ Exile | Description$ If a card would be put into an opponent's graveyard from anywhere, instead exile it with a void counter on it. -SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard | SubAbility$ DBPutCounter -SVar:DBPutCounter:DB$ PutCounter | Defined$ ReplacedCard | CounterType$ VOID | CounterNum$ 1 +SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard | WithCountersType$ VOID A:AB$ ChooseCard | Cost$ T Sac<1/CARDNAME> | Defined$ You | AILogic$ AtLeast1 | Amount$ 1 | Mandatory$ True | ChoiceTitle$ Choose an exiled card an opponent owns with a void counter on it | Choices$ Card.OppOwn+counters_GE1_VOID | ChoiceZone$ Exile | RememberChosen$ True | SubAbility$ DBEffect | SpellDescription$ Choose an exiled card an opponent owns with a void counter on it. You may play it this turn without paying its mana cost. SVar:DBEffect:DB$ Effect | StaticAbilities$ MayPlay | RememberObjects$ Remembered | ForgetOnMoved$ Exile | SubAbility$ DBCleanup SVar:MayPlay:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until end of turn, you may play this card without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/d/dodecapod.txt b/forge-gui/res/cardsfolder/d/dodecapod.txt index a217e5bf007..a594fb330e7 100644 --- a/forge-gui/res/cardsfolder/d/dodecapod.txt +++ b/forge-gui/res/cardsfolder/d/dodecapod.txt @@ -3,7 +3,6 @@ ManaCost:4 Types:Artifact Creature Golem PT:3/3 R:Event$ Discard | ActiveZones$ Hand | ValidCard$ Card.Self | ValidSource$ Card.OppCtrl | ReplaceWith$ SurpriseETB | DiscardFromEffect$ True | Description$ If a spell or ability an opponent controls causes you to discard CARDNAME, put it onto the battlefield with two +1/+1 counters on it instead of putting it into your graveyard. -SVar:SurpriseETB:DB$ ChangeZone | DefinedPlayer$ ReplacedPlayer | Defined$ ReplacedCard | Origin$ Hand | Destination$ Battlefield | SubAbility$ TwiceTheSurprise -SVar:TwiceTheSurprise:DB$ PutCounter | Defined$ ReplacedCard | CounterType$ P1P1 | CounterNum$ 2 +SVar:SurpriseETB:DB$ ChangeZone | DefinedPlayer$ ReplacedPlayer | Defined$ ReplacedCard | Origin$ Hand | Destination$ Battlefield | WithCountersType$ P1P1 | WithCountersAmount$ 2 SVar:DiscardMeByOpp:3 Oracle:If a spell or ability an opponent controls causes you to discard Dodecapod, put it onto the battlefield with two +1/+1 counters on it instead of putting it into your graveyard. diff --git a/forge-gui/res/cardsfolder/d/draugr_necromancer.txt b/forge-gui/res/cardsfolder/d/draugr_necromancer.txt index 391a6384db8..61ebdb00a72 100644 --- a/forge-gui/res/cardsfolder/d/draugr_necromancer.txt +++ b/forge-gui/res/cardsfolder/d/draugr_necromancer.txt @@ -3,8 +3,7 @@ ManaCost:3 B Types:Snow Creature Zombie Cleric PT:4/4 R:Event$ Moved | ActiveZones$ Battlefield | Origin$ Battlefield | Destination$ Graveyard | ValidLKI$ Creature.nonToken+OppCtrl | ReplaceWith$ Exile | CheckSelfLKIZone$ True | Description$ If a nontoken creature an opponent controls would die, exile that card with an ice counter on it instead. -SVar:Exile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Defined$ ReplacedCard | SubAbility$ DBPutCounter -SVar:DBPutCounter:DB$ PutCounter | Defined$ ReplacedCard | CounterType$ ICE | CounterNum$ 1 +SVar:Exile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Defined$ ReplacedCard | WithCountersType$ ICE S:Mode$ Continuous | Affected$ Card.OppOwn+counters_GE1_ICE+nonLand | AffectedZone$ Exile | MayPlay$ True | MayPlaySnowIgnoreColor$ True | Description$ You may cast spells from among cards in exile your opponents own with ice counters on them, and you may spend mana from snow sources as though it were mana of any color to cast those spells. DeckNeeds:Type$Snow DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/f/feather_the_redeemed.txt b/forge-gui/res/cardsfolder/f/feather_the_redeemed.txt index b0c2a966373..66c955809d7 100644 --- a/forge-gui/res/cardsfolder/f/feather_the_redeemed.txt +++ b/forge-gui/res/cardsfolder/f/feather_the_redeemed.txt @@ -4,10 +4,9 @@ Types:Legendary Creature Angel PT:3/4 K:Flying T:Mode$ SpellCast | ValidCard$ Instant.YouCtrl,Sorcery.YouCtrl | ValidActivatingPlayer$ You | TargetsValid$ Creature.YouCtrl+inZoneBattlefield | Execute$ DelayedBuyback | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast an instant or sorcery spell that targets a creature you control, exile that card instead of putting it into your graveyard as it resolves. If you do, return it to your hand at the beginning of the next end step. -SVar:DelayedBuyback:DB$ Effect | ReplacementEffects$ MoveToExileReplace | RememberObjects$ TriggeredCard | SpellDescription$ Put that card into your hand instead of into your graveyard as it resolves. +SVar:DelayedBuyback:DB$ Effect | ReplacementEffects$ MoveToExileReplace | RememberObjects$ TriggeredCard | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.inZoneStack | ExileOnMoved$ Stack | SpellDescription$ Put that card into your hand instead of into your graveyard as it resolves. SVar:MoveToExileReplace:Event$ Moved | ValidCard$ Card.IsRemembered+YouOwn | Origin$ Stack | Destination$ Graveyard | Fizzle$ False | ReplaceWith$ ReplaceExile | Description$ Exile that card instead of putting it into your graveyard as it resolves. If you do, return it to your hand at the beginning of the next end step. -SVar:ReplaceExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Stack | Destination$ Exile | SubAbility$ DelTrig -SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ ReplacedCard | SubAbility$ ExileSelf | TriggerDescription$ If you do, return it to your hand at the beginning of the next end step. +SVar:ReplaceExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Stack | Destination$ Exile | RememberChanged$ True | SubAbility$ DelTrig +SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ Remembered | TriggerDescription$ If you do, return it to your hand at the beginning of the next end step. SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Exile | Destination$ Hand -SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self Oracle:Flying\nWhenever you cast an instant or sorcery spell that targets a creature you control, exile that card instead of putting it into your graveyard as it resolves. If you do, return it to your hand at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/k/kor_haven.txt b/forge-gui/res/cardsfolder/k/kor_haven.txt index 2e489712663..4dd8e250ff1 100644 --- a/forge-gui/res/cardsfolder/k/kor_haven.txt +++ b/forge-gui/res/cardsfolder/k/kor_haven.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Legendary Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Effect | Cost$ 1 W T | ReplacementEffects$ RPrevent | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | SpellDescription$ Prevent all combat damage that would be dealt by target attacking creature this turn. -SVar:RPrevent1:Event$ DamageDone | Prevent$ True | IsCombat$ True | ValidSource$ Card.IsRemembered | Description$ Prevent all combat damage that would be dealt by target attacking creature this turn. +SVar:RPrevent:Event$ DamageDone | Prevent$ True | IsCombat$ True | ValidSource$ Card.IsRemembered | Description$ Prevent all combat damage that would be dealt by target attacking creature this turn. DeckNeeds:Color$White Oracle:{T}: Add {C}.\n{1}{W}, {T}: Prevent all combat damage that would be dealt by target attacking creature this turn. diff --git a/forge-gui/res/cardsfolder/s/spell_queller.txt b/forge-gui/res/cardsfolder/s/spell_queller.txt index d03c0fb7c49..b688e5a5475 100644 --- a/forge-gui/res/cardsfolder/s/spell_queller.txt +++ b/forge-gui/res/cardsfolder/s/spell_queller.txt @@ -8,7 +8,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigPlay | TriggerDescription$ When Spell Queller leaves the battlefield, the exiled card's owner may cast that card without paying its mana cost. SVar:TrigExile:DB$ ChangeZone | TargetType$ Spell | ValidTgts$ Card.cmcLE4 | TgtZone$ Stack | Origin$ Stack | Fizzle$ True | Mandatory$ True | Destination$ Exile | IsCurse$ True | TgtPrompt$ Choose target spell with mana value 4 or less | RememberChanged$ True SVar:TrigPlay:DB$ Play | Defined$ Remembered.ExiledWithSource | Controller$ RememberedOwner | WithoutManaCost$ True | Optional$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ1 | SubAbility$ DBCleanup -T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered+ExiledWithSource | Execute$ DBForget +T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered+ExiledWithSource | ValidSA$ Spell | Execute$ DBForget SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount diff --git a/forge-gui/res/cardsfolder/upcoming/ravenloft_adventurer.txt b/forge-gui/res/cardsfolder/upcoming/ravenloft_adventurer.txt index 2a3eab07c11..2b91d8efd86 100644 --- a/forge-gui/res/cardsfolder/upcoming/ravenloft_adventurer.txt +++ b/forge-gui/res/cardsfolder/upcoming/ravenloft_adventurer.txt @@ -5,8 +5,9 @@ PT:3/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigInitiative | TriggerDescription$ When CARDNAME enters the battlefield, you take the initiative. SVar:TrigInitiative:DB$ TakeInitiative R:Event$ Moved | ActiveZones$ Battlefield | Origin$ Battlefield | Destination$ Graveyard | ValidLKI$ Creature.OppCtrl | ReplaceWith$ Exile | Description$ If a creature an opponent controls would die, instead exile it and put a hit counter on it. -SVar:Exile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBPutCounter -SVar:DBPutCounter:DB$ PutCounter | Defined$ ReplacedCard | CounterType$ HIT +SVar:Exile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBPutCounter +SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ HIT | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigLoseLife | CheckSVar$ X | TriggerDescription$ Whenever CARDNAME attacks, if you've completed a dungeon, defending player loses 1 life for each card they own in exile with a hit counter on it. SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredDefendingPlayer | LifeAmount$ Y SVar:X:PlayerCountPropertyYou$DungeonsCompleted