From f940a24805c4460dc2ca7a54c4fb7101f3f69d8a Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 17 Jul 2022 21:38:48 +0200 Subject: [PATCH 1/2] Cleanup cards --- forge-game/src/main/java/forge/game/card/Card.java | 1 - .../src/main/java/forge/game/card/CardProperty.java | 12 ++++++++++-- .../game/spellability/SpellAbilityStackInstance.java | 2 -- .../main/java/forge/game/trigger/TriggerHandler.java | 8 -------- .../src/main/java/forge/gui/GuiChoose.java | 3 +-- .../res/cardsfolder/c/colfenor_the_last_yew.txt | 5 ++--- forge-gui/res/cardsfolder/m/mausoleum_turnkey.txt | 5 ++--- .../res/cardsfolder/t/timothar_baron_of_bats.txt | 7 +++---- .../res/cardsfolder/upcoming/neera_wild_mage.txt | 4 ++-- 9 files changed, 20 insertions(+), 27 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 627d0d2a116..4c6e602f870 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3017,7 +3017,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public final FCollectionView getBasicSpells() { return getBasicSpells(currentState); } - public final FCollectionView getBasicSpells(CardState state) { final FCollection res = new FCollection<>(); for (final SpellAbility sa : state.getNonManaAbilities()) { diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index e3351576672..05740a79848 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1941,8 +1941,16 @@ public class CardProperty { } else if (property.startsWith("Triggered")) { if (spellAbility instanceof SpellAbility) { final String key = property.substring(9); - CardCollection cc = (CardCollection) ((SpellAbility)spellAbility).getTriggeringObject(AbilityKey.fromString(key)); - if (cc == null || !cc.contains(card)) { + Object o = ((SpellAbility)spellAbility).getTriggeringObject(AbilityKey.fromString(key)); + boolean found = false; + if (o != null) { + if (o instanceof CardCollection) { + found = ((CardCollection) o).contains(card); + } else { + found = card.equals(o); + } + } + if (!found) { return false; } } else { diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java index a566c4afc31..c3920199e4c 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java @@ -214,7 +214,6 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView { public final int getXManaPaid() { return xManaPaid; } - public final void setXManaPaid(int x) { xManaPaid = x; } @@ -341,7 +340,6 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView { public Player getActivatingPlayer() { return activatingPlayer; } - public void setActivatingPlayer(Player activatingPlayer0) { if (activatingPlayer == activatingPlayer0) { return; } activatingPlayer = activatingPlayer0; diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index b3abf325181..4ae8797484f 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -559,19 +559,11 @@ public class TriggerHandler { sa.setActivatingPlayer(p); } - if (regtrig.hasParam("RememberController")) { - host.addRemembered(sa.getActivatingPlayer()); - } - if (regtrig.hasParam("RememberTriggeringCard")) { Card triggeredCard = ((Card) sa.getTriggeringObject(AbilityKey.Card)); host.addRemembered(triggeredCard); } - if (regtrig.hasParam("RememberKey")) { - host.addRemembered(runParams.get(AbilityKey.fromString(regtrig.getParam("RememberKey")))); - } - sa.setStackDescription(sa.toString()); Player decider = null; diff --git a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java index 1cda95ad6b7..d7b3519e83c 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java +++ b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java @@ -212,8 +212,7 @@ public class GuiChoose { if (selected != null) { c.show(selected); - } - else { + } else { c.show(); } diff --git a/forge-gui/res/cardsfolder/c/colfenor_the_last_yew.txt b/forge-gui/res/cardsfolder/c/colfenor_the_last_yew.txt index 23a359c0211..9f187d653db 100644 --- a/forge-gui/res/cardsfolder/c/colfenor_the_last_yew.txt +++ b/forge-gui/res/cardsfolder/c/colfenor_the_last_yew.txt @@ -4,10 +4,9 @@ Types:Legendary Creature Treefolk Shaman PT:3/7 K:Vigilance K:Reach -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other+YouCtrl | RememberTriggeringCard$ True | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ Whenever CARDNAME or another creature you control dies, return up to one other target creature card with lesser toughness from your graveyard to your hand. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ Whenever CARDNAME or another creature you control dies, return up to one other target creature card with lesser toughness from your graveyard to your hand. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChange | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature you control dies, return up to one other target creature card with lesser toughness from your graveyard to your hand. -SVar:TrigChange:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.Other+IsNotRemembered+toughnessLTX+YouOwn | TgtPrompt$ Select up to one other target creature card with lesser toughness from your graveyard to return to your hand | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:TrigChange:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.Other+NotTriggeredNewCard+toughnessLTX+YouOwn | TgtPrompt$ Select up to one other target creature card with lesser toughness from your graveyard to return to your hand SVar:X:TriggeredCard$CardToughness DeckHas:Ability$Graveyard Oracle:Vigilance, reach\nWhenever Colfenor, the Last Yew or another creature you control dies, return up to one other target creature card with lesser toughness from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/m/mausoleum_turnkey.txt b/forge-gui/res/cardsfolder/m/mausoleum_turnkey.txt index f24a6631db6..337bcf834fa 100644 --- a/forge-gui/res/cardsfolder/m/mausoleum_turnkey.txt +++ b/forge-gui/res/cardsfolder/m/mausoleum_turnkey.txt @@ -2,7 +2,6 @@ Name:Mausoleum Turnkey ManaCost:3 B Types:Creature Ogre Rogue PT:3/2 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | RememberController$ True | TriggerDescription$ When CARDNAME enters the battlefield, return target creature card of an opponent's choice from your graveyard to your hand. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.RememberedPlayerCtrl | TargetingPlayer$ Opponent | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, return target creature card of an opponent's choice from your graveyard to your hand. +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.YouOwn | TargetingPlayer$ Opponent Oracle:When Mausoleum Turnkey enters the battlefield, return target creature card of an opponent's choice from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/t/timothar_baron_of_bats.txt b/forge-gui/res/cardsfolder/t/timothar_baron_of_bats.txt index ef1782bc389..01b4860e327 100644 --- a/forge-gui/res/cardsfolder/t/timothar_baron_of_bats.txt +++ b/forge-gui/res/cardsfolder/t/timothar_baron_of_bats.txt @@ -3,10 +3,9 @@ ManaCost:4 B B Types:Legendary Creature Vampire Noble PT:4/4 K:Ward:Discard<1/Card> -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Vampire.Other+nonToken+YouCtrl | RememberTriggeringCard$ True | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever another nontoken Vampire you control dies, you may pay {1} and exile it. If you do, create a 1/1 black Bat creature token with flying. It gains "When this creature deals combat damage to a player, sacrifice it and return the exiled card to the battlefield tapped." -SVar:TrigToken:AB$ Token | Cost$ 1 ExileFromGrave<1/Card.IsRemembered/the Vampire card> | TokenRemembered$ ExiledCards | TokenScript$ b_1_1_bat_flying | ImprintTokens$ True | SubAbility$ DBAnimate -SVar:DBAnimate:DB$ Animate | Defined$ Imprinted | Duration$ Permanent | Triggers$ CDTrigger | Duration$ Permanent | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True | ClearRemembered$ True +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Vampire.Other+nonToken+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever another nontoken Vampire you control dies, you may pay {1} and exile it. If you do, create a 1/1 black Bat creature token with flying. It gains "When this creature deals combat damage to a player, sacrifice it and return the exiled card to the battlefield tapped." +SVar:TrigToken:AB$ Token | Cost$ 1 ExileFromGrave<1/Card.TriggeredNewCard/the Vampire card> | TokenRemembered$ ExiledCards | TokenScript$ b_1_1_bat_flying | ImprintTokens$ True | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Defined$ Imprinted | Duration$ Permanent | Triggers$ CDTrigger SVar:CDTrigger:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ When this creature deals combat damage to a player, sacrifice it and return the exiled card to the battlefield tapped. SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBReturn SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Tapped$ True diff --git a/forge-gui/res/cardsfolder/upcoming/neera_wild_mage.txt b/forge-gui/res/cardsfolder/upcoming/neera_wild_mage.txt index e0f43ddb16d..d7023157b93 100644 --- a/forge-gui/res/cardsfolder/upcoming/neera_wild_mage.txt +++ b/forge-gui/res/cardsfolder/upcoming/neera_wild_mage.txt @@ -3,8 +3,8 @@ ManaCost:4 U R 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 | SubAbility$ DBDig -SVar:DBDig:DB$ DigUntil | Valid$ Card.nonLand | ImprintFound$ True | RememberFound$ True | RememberRevealed$ True | NoMoveFound$ True | NoMoveRevealed$ True | SubAbility$ DBPlay +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: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 From c307cab78959c715249a36d5d3ffaa67be93ca56 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 17 Jul 2022 22:10:06 +0200 Subject: [PATCH 2/2] Elminster fix --- forge-gui/res/cardsfolder/upcoming/elminster.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/elminster.txt b/forge-gui/res/cardsfolder/upcoming/elminster.txt index 0b1fd9ef44b..dbc18744723 100644 --- a/forge-gui/res/cardsfolder/upcoming/elminster.txt +++ b/forge-gui/res/cardsfolder/upcoming/elminster.txt @@ -13,7 +13,8 @@ SVar:Y:TriggerCount$ScryNum A:AB$ Draw | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | SubAbility$ DBScry | SpellDescription$ Draw a card, then scry 2. SVar:DBScry:DB$ Scry | ScryNum$ 2 A:AB$ Dig | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | Reveal$ True | SubAbility$ DBToken | SpellDescription$ Exile the top card of your library. -SVar:DBToken:DB$ Token | TokenAmount$ Z | TokenScript$ u_1_1_faerie_dragon_flying | SpellDescription$ Create a number of 1/1 blue Faerie Dragon creature tokens with flying equal to that card's mana value. +SVar:DBToken:DB$ Token | TokenAmount$ Z | TokenScript$ u_1_1_faerie_dragon_flying | SubAbility$ DBCleanup | SpellDescription$ Create a number of 1/1 blue Faerie Dragon creature tokens with flying equal to that card's mana value. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:Z:Count$RememberedCardManaCost Text:CARDNAME can be your commander. DeckHas:Ability$Token & Type$Faerie|Dragon