diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java index f820fe99b8a..20a2200c4f0 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java @@ -278,7 +278,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi { } if (destination.equals(ZoneType.Battlefield)) { - if (sa.getParam("GainControl") != null) { + if (sa.hasParam("GainControl")) { // Check if the cards are valuable enough if (CardLists.getNotType(oppType, "Creature").size() == 0 && CardLists.getNotType(computerType, "Creature").size() == 0) { diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index ab55b14d254..cdeeeda85cf 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -25,6 +25,7 @@ import forge.ai.SpecialCardAi; import forge.ai.SpellAbilityAi; import forge.card.mana.ManaCost; import forge.game.Game; +import forge.game.GameEntity; import forge.game.GameObject; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; @@ -805,11 +806,11 @@ public class DamageDealAi extends DamageAiBase { */ private boolean damageChooseNontargeted(Player ai, final SpellAbility saMe, final int dmg) { // TODO: Improve circumstances where the Defined Damage is unwanted - final List objects = AbilityUtils.getDefinedObjects(saMe.getHostCard(), saMe.getParam("Defined"), saMe); + final List objects = AbilityUtils.getDefinedEntities(saMe.getHostCard(), saMe.getParam("Defined"), saMe); boolean urgent = false; // can it wait? boolean positive = false; - for (final Object o : objects) { + for (final GameEntity o : objects) { if (o instanceof Card) { Card c = (Card) o; final int restDamage = ComputerUtilCombat.predictDamageTo(c, dmg, saMe.getHostCard(), false); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeTargetsEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeTargetsEffect.java index 56e5b0c5387..57a4910a6db 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeTargetsEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeTargetsEffect.java @@ -132,9 +132,7 @@ public class ChangeTargetsEffect extends SpellAbilityEffect { Predicate filter = sa.hasParam("TargetRestriction") ? GameObjectPredicates.restriction(sa.getParam("TargetRestriction").split(","), activator, sa.getHostCard(), sa) : null; // TODO Creature.Other might not work yet as it should TargetChoices newTarget = chooser.getController().chooseNewTargetsFor(changingTgtSA, filter, false); - if (null != newTarget) { - changingTgtSI.updateTarget(newTarget, sa.getHostCard()); - } + changingTgtSI.updateTarget(newTarget, sa.getHostCard()); } } changingTgtSI = changingTgtSI.getSubInstance(); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 696afa1caf0..cce8d42f237 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -1093,7 +1093,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect { String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardFromPlayerZone", "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase()), decider, player); final String totalcmc = sa.getParam("WithTotalCMC"); + final String totalpower = sa.getParam("WithTotalPower"); int totcmc = AbilityUtils.calculateAmount(source, totalcmc, sa); + int totpower = AbilityUtils.calculateAmount(source, totalpower, sa); fetchList.sort(); @@ -1163,6 +1165,11 @@ public class ChangeZoneEffect extends SpellAbilityEffect { fetchList = CardLists.getValidCards(fetchList, "Card.cmcLE" + totcmc, source.getController(), source, sa); } } + if (totalpower != null) { + if (totpower >= 0) { + fetchList = CardLists.getValidCards(fetchList, "Card.powerLE" + totpower, source.getController(), source, sa); + } + } // If we're choosing multiple cards, only need to show the reveal dialog the first time through. boolean shouldReveal = (i == 0); @@ -1203,6 +1210,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (totalcmc != null) { totcmc -= c.getCMC(); } + if (totalpower != null) { + totpower -= c.getCurrentPower(); + } } } @@ -1501,7 +1511,8 @@ public class ChangeZoneEffect extends SpellAbilityEffect { && !sa.hasParam("DifferentCMC") && !sa.hasParam("AtRandom") && (!sa.hasParam("Defined") || sa.hasParam("ChooseFromDefined")) - && sa.getParam("WithTotalCMC") == null; + && !sa.hasParam("WithTotalCMC") + && !sa.hasParam("WithTotalPower"); } /** 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 9a703130bc8..b99f31def2e 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -395,14 +395,8 @@ public class CardProperty { } if (!card.getEntityAttachedTo().isValid(restriction, sourceController, source, spellAbility)) { - boolean found = false; - for (final GameObject o : AbilityUtils.getDefinedObjects(source, restriction, spellAbility)) { - if (o.equals(card.getEntityAttachedTo())) { - found = true; - break; - } - } - if (!found) { + // only few cases need players + if (!(restriction.contains("Player") ? AbilityUtils.getDefinedPlayers(source, restriction, spellAbility) : AbilityUtils.getDefinedCards(source, restriction, spellAbility)).contains(card.getEntityAttachedTo())) { return false; } } diff --git a/forge-game/src/main/java/forge/game/combat/Combat.java b/forge-game/src/main/java/forge/game/combat/Combat.java index 119396cab27..a980aac9cd8 100644 --- a/forge-game/src/main/java/forge/game/combat/Combat.java +++ b/forge-game/src/main/java/forge/game/combat/Combat.java @@ -203,7 +203,7 @@ public class Combat { //gets attacked player opponents (ignores planeswalkers) public final FCollection getAttackedOpponents(Player atk) { - FCollection attackedOpps = new FCollection(); + FCollection attackedOpps = new FCollection<>(); if (atk == playerWhoAttacks) { for (Player defender : getDefendingPlayers()) { if (!getAttackersOf(defender).isEmpty()) { diff --git a/forge-game/src/main/java/forge/game/trigger/Trigger.java b/forge-game/src/main/java/forge/game/trigger/Trigger.java index 83b717b98d4..1b9dd19dd57 100644 --- a/forge-game/src/main/java/forge/game/trigger/Trigger.java +++ b/forge-game/src/main/java/forge/game/trigger/Trigger.java @@ -348,7 +348,7 @@ public abstract class Trigger extends TriggerReplacementBase { return true; } - public boolean meetsRequirementsOnTriggeredObjects(Game game, final Map runParams) { + public boolean meetsRequirementsOnTriggeredObjects(Game game, final Map runParams) { if ("True".equals(getParam("EvolveCondition"))) { final Card moved = (Card) runParams.get(AbilityKey.Card); if (moved == null) { diff --git a/forge-gui/res/cardsfolder/g/gorex_the_tombshell.txt b/forge-gui/res/cardsfolder/g/gorex_the_tombshell.txt index 02b1e348f8b..56c9dfc6305 100644 --- a/forge-gui/res/cardsfolder/g/gorex_the_tombshell.txt +++ b/forge-gui/res/cardsfolder/g/gorex_the_tombshell.txt @@ -2,7 +2,7 @@ Name:Gorex, the Tombshell ManaCost:6 B B Types:Legendary Creature Zombie Turtle PT:4/4 -A:SP$ PermanentCreature | Cost$ 6 B B ExileFromGrave | AdditionalDesc$ This spell costs {2} less to cast for each card exiled this way. +A:SP$ PermanentCreature | Cost$ 6 B B ExileFromGrave | AdditionalDesc$ This spell costs {2} less to cast for each card exiled this way. S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way. SVar:X:Count$xPaid SVar:Y:SVar$X/Times.2 diff --git a/forge-gui/res/cardsfolder/g/grenzo_havoc_raiser.txt b/forge-gui/res/cardsfolder/g/grenzo_havoc_raiser.txt index 01bd23a44f2..02bb92196bb 100644 --- a/forge-gui/res/cardsfolder/g/grenzo_havoc_raiser.txt +++ b/forge-gui/res/cardsfolder/g/grenzo_havoc_raiser.txt @@ -6,9 +6,7 @@ T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | Comba SVar:TrigCharm:DB$ Charm | Choices$ DBGoad,DBExile SVar:DBGoad:DB$ Goad | ValidTgts$ Creature | TargetsWithDefinedController$ TriggeredTarget | TgtPrompt$ Select target creature damaged player controls | SpellDescription$ Goad target creature that player controls. SVar:DBExile:DB$ Dig | Defined$ TriggeredDefendingPlayer | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top card of that player's library. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it. -SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | Triggers$ TriggerCastDoM | RememberObjects$ Remembered | SubAbility$ DBCleanup +SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | ExileOnMoved$ Exile | RememberObjects$ Remembered | SubAbility$ DBCleanup SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | Description$ Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it. -SVar:TriggerCastDoM:Mode$ SpellCast | ValidCard$ Card.IsRemembered | TriggerZones$ Command | Execute$ TrigRemoveSelf | Static$ True -SVar:TrigRemoveSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Whenever a creature you control deals combat damage to a player, choose one —\n• Goad target creature that player controls.\n• Exile the top card of that player's library. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast that spell. diff --git a/forge-gui/res/cardsfolder/h/heart_wolf.txt b/forge-gui/res/cardsfolder/h/heart_wolf.txt index 0e2227ffa8c..69e1aecf97b 100644 --- a/forge-gui/res/cardsfolder/h/heart_wolf.txt +++ b/forge-gui/res/cardsfolder/h/heart_wolf.txt @@ -4,8 +4,7 @@ Types:Creature Wolf PT:2/2 K:First Strike A:AB$ Pump | Cost$ T | NumAtt$ +2 | KW$ First Strike | ValidTgts$ Creature.Dwarf | TgtPrompt$ Select target dwarf creature | ActivationPhases$ BeginCombat->EndCombat | SubAbility$ EliteGuardEffect | SpellDescription$ Target Dwarf creature gets +2/+0 and gains first strike until end of turn. When that creature leaves the battlefield this turn, sacrifice CARDNAME. Activate only during combat. -SVar:EliteGuardEffect:DB$ Effect | Triggers$ LostTheGuarded | RememberObjects$ Targeted +SVar:EliteGuardEffect:DB$ Effect | Triggers$ LostTheGuarded | RememberObjects$ Targeted | ExileOnMoved$ Battlefield SVar:LostTheGuarded:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ Battlefield | Destination$ Any | Execute$ EliteDefence | TriggerDescription$ When the targeted creature leaves the battlefield this turn, sacrifice EFFECTSOURCE. -SVar:EliteDefence:DB$ SacrificeAll | Defined$ EffectSource | SubAbility$ ExileEffect -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:EliteDefence:DB$ SacrificeAll | Defined$ EffectSource Oracle:First strike\n{T}: Target Dwarf creature gets +2/+0 and gains first strike until end of turn. When that creature leaves the battlefield this turn, sacrifice Heart Wolf. Activate only during combat. diff --git a/forge-gui/res/cardsfolder/h/hubris.txt b/forge-gui/res/cardsfolder/h/hubris.txt index 88fc92b7051..ff6985f09be 100644 --- a/forge-gui/res/cardsfolder/h/hubris.txt +++ b/forge-gui/res/cardsfolder/h/hubris.txt @@ -1,7 +1,6 @@ Name:Hubris ManaCost:1 U Types:Instant -A:SP$ Pump | Cost$ 1 U | ValidTgts$ Creature | IsCurse$ True | RememberTargets$ True | SubAbility$ DBBounce | StackDescription$ Return {c:Targeted} and all Auras attached to it to their owners' hands. | SpellDescription$ Return target creature and all Auras attached to it to their owners' hands. -SVar:DBBounce:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered,Aura.AttachedTo Targeted | Origin$ Battlefield | Destination$ Hand | UseAllOriginZones$ True | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +A:SP$ ChangeZoneAll | Cost$ 1 U | ValidTgts$ Creature | ChangeType$ TargetedCard.Self,Aura.AttachedTo Targeted | Origin$ Battlefield | Destination$ Hand | UseAllOriginZones$ True | StackDescription$ Return {c:Targeted} and all Auras attached to it to their owners' hands. | SpellDescription$ Return target creature and all Auras attached to it to their owners' hands. +AI:RemoveDeck:All Oracle:Return target creature and all Auras attached to it to their owners' hands. diff --git a/forge-gui/res/cardsfolder/j/jace_architect_of_thought.txt b/forge-gui/res/cardsfolder/j/jace_architect_of_thought.txt index a47ae8e4a43..89a2af6be99 100644 --- a/forge-gui/res/cardsfolder/j/jace_architect_of_thought.txt +++ b/forge-gui/res/cardsfolder/j/jace_architect_of_thought.txt @@ -11,6 +11,6 @@ SVar:DBHand:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination SVar:DBLibraryBottom:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Library | LibraryPosition$ -1 A:AB$ RepeatEach | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBJaceExile | SubAbility$ DBPlayIt | SpellDescription$ For each player, search that player's library for a nonland card and exile it, then that player shuffles. You may cast those cards without paying their mana costs. SVar:DBJaceExile:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Remembered | Chooser$ You | ChangeType$ Card.nonLand | ChangeNum$ 1 | Imprint$ True | Shuffle$ True -SVar:DBPlayIt:DB$ Play | Defined$ Imprinted | Amount$ All | Controller$ You | WithoutManaCost$ True | ValidSA$ Spell | Optional$ True | RememberPlayed$ True | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True +SVar:DBPlayIt:DB$ Play | Defined$ Imprinted | Amount$ All | Controller$ You | WithoutManaCost$ True | ValidSA$ Spell | Optional$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True Oracle:[+1]: Until your next turn, whenever a creature an opponent controls attacks, it gets -1/-0 until end of turn.\n[-2]: Reveal the top three cards of your library. An opponent separates those cards into two piles. Put one pile into your hand and the other on the bottom of your library in any order.\n[-8]: For each player, search that player's library for a nonland card and exile it, then that player shuffles. You may cast those cards without paying their mana costs. diff --git a/forge-gui/res/cardsfolder/k/kjeldoran_elite_guard.txt b/forge-gui/res/cardsfolder/k/kjeldoran_elite_guard.txt index 63ecc26674d..91fd0b0b2c7 100644 --- a/forge-gui/res/cardsfolder/k/kjeldoran_elite_guard.txt +++ b/forge-gui/res/cardsfolder/k/kjeldoran_elite_guard.txt @@ -3,8 +3,7 @@ ManaCost:3 W Types:Creature Human Soldier PT:2/2 A:AB$ Pump | Cost$ T | NumAtt$ +2 | NumDef$ +2 | ValidTgts$ Creature | TgtPrompt$ Select target creature | ActivationPhases$ BeginCombat->EndCombat | SubAbility$ EliteGuardEffect | SpellDescription$ Target creature gets +2/+2 until end of turn. When that creature leaves the battlefield this turn, sacrifice CARDNAME. Activate only during combat. -SVar:EliteGuardEffect:DB$ Effect | Name$ Elite Guard Escort | Triggers$ LostTheGuarded | RememberObjects$ Targeted +SVar:EliteGuardEffect:DB$ Effect | Name$ Elite Guard Escort | Triggers$ LostTheGuarded | RememberObjects$ Targeted | ExileOnMoved$ Battlefield SVar:LostTheGuarded:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ Battlefield | Destination$ Any | Execute$ EliteDefence | TriggerDescription$ When the targeted creature leaves the battlefield this turn, sacrifice EFFECTSOURCE. -SVar:EliteDefence:DB$ SacrificeAll | Defined$ EffectSource | SubAbility$ ExileEffect -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:EliteDefence:DB$ SacrificeAll | Defined$ EffectSource Oracle:{T}: Target creature gets +2/+2 until end of turn. When that creature leaves the battlefield this turn, sacrifice Kjeldoran Elite Guard. Activate only during combat. diff --git a/forge-gui/res/cardsfolder/k/kjeldoran_guard.txt b/forge-gui/res/cardsfolder/k/kjeldoran_guard.txt index fe5daa50944..3a6b7e0ab51 100644 --- a/forge-gui/res/cardsfolder/k/kjeldoran_guard.txt +++ b/forge-gui/res/cardsfolder/k/kjeldoran_guard.txt @@ -3,8 +3,7 @@ ManaCost:1 W Types:Creature Human Soldier PT:1/1 A:AB$ Pump | Cost$ T | NumAtt$ +1 | NumDef$ +1 | ValidTgts$ Creature | TgtPrompt$ Select target creature | ActivationPhases$ BeginCombat->EndCombat | IsPresent$ Land.Snow+DefenderCtrl | PresentCompare$ EQ0 | SubAbility$ KjeldoranGuardEffect | SpellDescription$ Target creature gets +1/+1 until end of turn. When that creature leaves the battlefield this turn, sacrifice CARDNAME. Activate only during combat and only if defending player controls no snow lands. -SVar:KjeldoranGuardEffect:DB$ Effect | Triggers$ TrigSacGuard | RememberObjects$ Targeted +SVar:KjeldoranGuardEffect:DB$ Effect | Triggers$ TrigSacGuard | RememberObjects$ Targeted | ExileOnMoved$ Battlefield SVar:TrigSacGuard:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ Battlefield | Destination$ Any | Execute$ EliteDefence | TriggerDescription$ When the targeted creature leaves the battlefield this turn, sacrifice EFFECTSOURCE. -SVar:EliteDefence:DB$ SacrificeAll | Defined$ EffectSource | SubAbility$ ExileEffect -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:EliteDefence:DB$ SacrificeAll | Defined$ EffectSource Oracle:{T}: Target creature gets +1/+1 until end of turn. When that creature leaves the battlefield this turn, sacrifice Kjeldoran Guard. Activate only during combat and only if defending player controls no snow lands. diff --git a/forge-gui/res/cardsfolder/m/moorland_rescuer.txt b/forge-gui/res/cardsfolder/m/moorland_rescuer.txt index 850f351f035..d5e3e9cc52e 100644 --- a/forge-gui/res/cardsfolder/m/moorland_rescuer.txt +++ b/forge-gui/res/cardsfolder/m/moorland_rescuer.txt @@ -3,7 +3,7 @@ ManaCost:5 W Types:Creature Human Knight PT:4/4 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME dies, return any number of other creature cards with total power X or less from the graveyard to the battlefield, where X is CARDNAME's power. Exile CARDNAME. -SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TargetMin$ 0 | TargetMax$ X | ValidTgts$ Creature.YouOwn+Other | MaxTotalTargetPower$ Y | SubAbility$ DBExile | TgtPrompt$ Select any number of other creature cards with total power X or less +SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.YouOwn+Other | WithTotalPower$ Y | ChangeNum$ X | Hidden$ True | AnyNumber$ True | SelectPrompt$ Choose any number of creature cards with total power up to this creature's power | SubAbility$ DBExile SVar:DBExile:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Exile SVar:X:Count$ValidGraveyard Creature.YouOwn+Other SVar:Y:TriggeredCard$CardPower diff --git a/forge-gui/res/cardsfolder/p/portal_of_sanctuary.txt b/forge-gui/res/cardsfolder/p/portal_of_sanctuary.txt index 60c0d2afbe1..000e5dec590 100644 --- a/forge-gui/res/cardsfolder/p/portal_of_sanctuary.txt +++ b/forge-gui/res/cardsfolder/p/portal_of_sanctuary.txt @@ -1,8 +1,6 @@ Name:Portal of Sanctuary ManaCost:2 U Types:Artifact -A:AB$ Pump | Cost$ 1 T | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | RememberTargets$ True | SubAbility$ DBBounce | StackDescription$ Return {c:Targeted} and all Auras attached to it to their owners' hands. | PlayerTurn$ True | SpellDescription$ Return target creature you control and all Auras attached to it to their owners' hands. Activate only during your turn. -SVar:DBBounce:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered,Aura.AttachedTo Targeted | Origin$ Battlefield | Destination$ Hand | UseAllOriginZones$ True | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +A:AB$ ChangeZoneAll | Cost$ 1 T | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | ChangeType$ TargetedCard.Self,Aura.AttachedTo Targeted | Origin$ Battlefield | Destination$ Hand | UseAllOriginZones$ True | PlayerTurn$ True | SpellDescription$ Return target creature you control and all Auras attached to it to their owners' hands. Activate only during your turn. | StackDescription$ Return {c:Targeted} and all Auras attached to it to their owners' hands. AI:RemoveDeck:All Oracle:{1}, {T}: Return target creature you control and each Aura attached to it to their owners' hands. Activate only during your turn. diff --git a/forge-gui/res/cardsfolder/s/scarab_of_the_unseen.txt b/forge-gui/res/cardsfolder/s/scarab_of_the_unseen.txt index 456277c509b..e7fb0d8b0d4 100644 --- a/forge-gui/res/cardsfolder/s/scarab_of_the_unseen.txt +++ b/forge-gui/res/cardsfolder/s/scarab_of_the_unseen.txt @@ -1,7 +1,7 @@ Name:Scarab of the Unseen ManaCost:2 Types:Artifact -A:AB$ ChangeZoneAll | Cost$ T Sac<1/CARDNAME> | Origin$ Battlefield | Destination$ Hand | ValidTgts$ Permanent.YouOwn | TgtPrompt$ Select target permanent you own | ChangeType$ Aura.AttachedTo Targeted | SubAbility$ DelTrigSlowtrip | SpellDescription$ Return all Auras attached to target permanent you own to their owners' hands. Draw a card at the beginning of the next turn's upkeep. +A:AB$ ChangeZoneAll | Cost$ T Sac<1/CARDNAME> | Origin$ Battlefield | Destination$ Hand | ValidTgts$ Permanent.YouOwn | TgtPrompt$ Select target permanent you own | ChangeType$ Aura.AttachedTo Targeted | UseAllOriginZones$ True | SubAbility$ DelTrigSlowtrip | SpellDescription$ Return all Auras attached to target permanent you own to their owners' hands. Draw a card at the beginning of the next turn's upkeep. SVar:DelTrigSlowtrip:DB$ DelayedTrigger | NextTurn$ True | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ DrawSlowtrip | TriggerDescription$ Draw a card. SVar:DrawSlowtrip:DB$ Draw | NumCards$ 1 | Defined$ You AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/s/stolen_strategy.txt b/forge-gui/res/cardsfolder/s/stolen_strategy.txt index fb9e6a146ee..58466a4e5b4 100644 --- a/forge-gui/res/cardsfolder/s/stolen_strategy.txt +++ b/forge-gui/res/cardsfolder/s/stolen_strategy.txt @@ -3,9 +3,7 @@ ManaCost:4 R Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ At the beginning of your upkeep, exile the top card of each opponent's library. Until end of turn, you may cast spells from among those exiled cards, and you may spend mana as though it were mana of any color to cast those spells. SVar:TrigExile:DB$ Dig | Defined$ Player.Opponent | DigNum$ 1 | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top card of each opponent's library. Until end of turn, you may cast nonland cards from among those exiled cards, and you may spend mana as though it were mana of any color to cast those spells. -SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | Triggers$ TriggerCastDoM | RememberObjects$ Remembered | SubAbility$ DBCleanup +SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | ExileOnMoved$ Exile | RememberObjects$ Remembered | SubAbility$ DBCleanup SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | Description$ Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it. -SVar:TriggerCastDoM:Mode$ SpellCast | ValidCard$ Card.IsRemembered | TriggerZones$ Command | Execute$ TrigRemoveSelf | Static$ True -SVar:TrigRemoveSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:At the beginning of your upkeep, exile the top card of each opponent's library. Until end of turn, you may cast spells from among those exiled cards, and you may spend mana as though it were mana of any color to cast those spells. diff --git a/forge-gui/res/cardsfolder/t/thada_adel_acquisitor.txt b/forge-gui/res/cardsfolder/t/thada_adel_acquisitor.txt index 5d2ac147c0c..b14f6e5062e 100644 --- a/forge-gui/res/cardsfolder/t/thada_adel_acquisitor.txt +++ b/forge-gui/res/cardsfolder/t/thada_adel_acquisitor.txt @@ -5,9 +5,7 @@ PT:2/2 K:Islandwalk T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigChangeZone | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, search that player's library for an artifact card and exile it. Then that player shuffles. Until end of turn, you may play that card. SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TriggeredTarget | Chooser$ You | ChangeType$ Artifact | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | Triggers$ TriggerCastDoM | RememberObjects$ Remembered | SubAbility$ DBCleanup +SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | ExileOnMoved$ Exile | RememberObjects$ Remembered | SubAbility$ DBCleanup SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until end of turn, you may play that card. -SVar:TriggerCastDoM:Mode$ SpellCast | ValidCard$ Card.IsRemembered | TriggerZones$ Command | Execute$ TrigRemoveSelf | Static$ True -SVar:TrigRemoveSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)\nWhenever Thada Adel, Acquisitor deals combat damage to a player, search that player's library for an artifact card and exile it. Then that player shuffles. Until end of turn, you may play that card. diff --git a/forge-gui/res/cardsfolder/upcoming/cryptek.txt b/forge-gui/res/cardsfolder/upcoming/cryptek.txt index f49e37adbe2..05715ec2e48 100644 --- a/forge-gui/res/cardsfolder/upcoming/cryptek.txt +++ b/forge-gui/res/cardsfolder/upcoming/cryptek.txt @@ -4,6 +4,6 @@ Types:Artifact Creature Necron Wizard PT:3/3 A:AB$ ChooseCard | Cost$ 1 B T | ValidTgts$ Artifact.Creature+YouCtrl+Other | TgtPrompt$ Choose another target artifact creature you control | SubAbility$ DBDelayedTrigger | StackDescription$ When {c:Targeted} dies this turn, return that card to the battlefield tapped. | SpellDescription$ Choose another target artifact creature you control. When that creature dies this turn, return it to the battlefield tapped under your control. SVar:DBDelayedTrigger:DB$ DelayedTrigger | Mode$ ChangesZone | RememberObjects$ Targeted | ValidCard$ Card.IsTriggerRemembered | Origin$ Battlefield | Destination$ Graveyard | ThisTurn$ True | Execute$ TrigReturn | StackDescription$ None | TriggerDescription$ When that creature dies this turn, return it to the battlefield tapped under your control. -SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredCard | Tapped$ True +SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredCard | Tapped$ True | GainControl$ True DeckHints:Ability$Graveyard Oracle:{1}{B}, {T}: Choose another target artifact creature you control. When that creature dies this turn, return it to the battlefield tapped under your control. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/dark_apostle.txt b/forge-gui/res/cardsfolder/upcoming/dark_apostle.txt index f2a503fed70..1a62fb9c887 100644 --- a/forge-gui/res/cardsfolder/upcoming/dark_apostle.txt +++ b/forge-gui/res/cardsfolder/upcoming/dark_apostle.txt @@ -3,7 +3,7 @@ ManaCost:3 R Types:Creature Astartes Warlock PT:3/3 A:AB$ Effect | PrecostDesc$ Gift of Chaos — | Cost$ 3 T | StaticAbilities$ GrantCascade | Triggers$ ExileEffect | SpellDescription$ The next noncreature spell you cast this turn has cascade. (When you cast that spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom of your library in a random order.) -SVar:GrantCascade:Mode$ Continuous | EffectZone$ Command | Affected$ Card.nonCreature+YouOwn | AffectedZone$ Stack | Execute$ ExileEff | AddKeyword$ Cascade | Description$ The next noncreature spell you cast this turn has cascade. +SVar:GrantCascade:Mode$ Continuous | EffectZone$ Command | Affected$ Card.nonCreature+YouOwn | AffectedZone$ Stack | AddKeyword$ Cascade | Description$ The next noncreature spell you cast this turn has cascade. SVar:ExileEffect:Mode$ SpellCast | EffectZone$ Command | Valid$ Card.nonCreature+YouOwn | AffectedZone$ Stack | Execute$ RemoveEffect | Static$ True SVar:RemoveEffect:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self DeckHas:Keyword$Cascade diff --git a/forge-gui/res/cardsfolder/upcoming/redemptor_dreadnought.txt b/forge-gui/res/cardsfolder/upcoming/redemptor_dreadnought.txt new file mode 100644 index 00000000000..978079fa562 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/redemptor_dreadnought.txt @@ -0,0 +1,12 @@ +Name:Redemptor Dreadnought +ManaCost:5 +Types:Artifact Creature Astartes Dreadnought +PT:4/4 +K:Trample +A:SP$ PermanentCreature | Cost$ 5 ExileFromGrave | XMaxLimit$ 1 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | IsPresent$ Card.ExiledWithSource | PresentZone$ Exile | TriggerDescription$ Plasma Incinerator — Whenever CARDNAME attacks, if a card is exiled with it, it gets +X/+X until end of turn, where X is the power of the exiled card. +SVar:TrigPump:DB$ Pump | Defined$ Self | NumDef$ Y | NumAtt$ Y +SVar:X:Count$xPaid +SVar:Y:Count$ValidExile Card.ExiledWithSource$CardPower +SVar:HasAttackEffect:TRUE +Oracle:Fallen Warrior — As an additional cost to cast this spell, you may exile a creature card from your graveyard.\nTrample\nPlasma Incinerator — Whenever Redemptor Dreadnought attacks, if a card is exiled with it, it gets +X/+X until end of turn, where X is the power of the exiled card.