diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index 6f98aa7b2e8..f59bb88b56a 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -133,6 +133,10 @@ public class CardFactory { final Card original = targetSA.getHostCard(); final Card c = copyCard(original, true); + // clear remember/imprint for copied spells + c.clearRemembered(); + c.clearImprintedCards(); + if (sourceSA.hasParam("NonLegendary")) { c.removeType(CardType.Supertype.Legendary); } 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 1a359265886..625daa80001 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -2481,16 +2481,14 @@ public class CardFactoryUtil { } else if (keyword.equals("Demonstrate")) { final String trigScript = "Mode$ SpellCast | ValidCard$ Card.Self | TriggerDescription$ Demonstrate (" + inst.getReminderText() + ")"; final String youCopyStr = "DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True | Optional$ True | RememberCopies$ True"; - final String chooseOppStr = "DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ConditionCheckSVar$ DemonstrateSVar | ConditionSVarCompare$ GE1"; - final String oppCopyStr = "DB$ CopySpellAbility | Controller$ ChosenPlayer | Defined$ TriggeredSpellAbility | MayChooseTarget$ True | ConditionCheckSVar$ DemonstrateSVar | ConditionSVarCompare$ GE1"; - final String cleanupStr = "DB$ Cleanup | ClearRemembered$ True"; + final String chooseOppStr = "DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ConditionDefined$ Remembered | ConditionPresent$ Spell"; + final String oppCopyStr = "DB$ CopySpellAbility | Controller$ ChosenPlayer | Defined$ TriggeredSpellAbility | MayChooseTarget$ True | ConditionDefined$ Remembered | ConditionPresent$ Spell"; + final String cleanupStr = "DB$ Cleanup | ClearRemembered$ True | ClearChosenPlayer$ True"; final Trigger trigger = TriggerHandler.parseTrigger(trigScript, card, intrinsic); final SpellAbility youCopy = AbilityFactory.getAbility(youCopyStr, card); final AbilitySub chooseOpp = (AbilitySub) AbilityFactory.getAbility(chooseOppStr, card); - chooseOpp.setSVar("DemonstrateSVar", "Count$RememberedSize"); final AbilitySub oppCopy = (AbilitySub) AbilityFactory.getAbility(oppCopyStr, card); - oppCopy.setSVar("DemonstrateSVar", "Count$RememberedSize"); final AbilitySub cleanup = (AbilitySub) AbilityFactory.getAbility(cleanupStr, card); oppCopy.setSubAbility(cleanup); chooseOpp.setSubAbility(oppCopy); diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java index 8b3a2dce074..c52a7dca849 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java @@ -30,17 +30,17 @@ import com.google.common.collect.Iterables; import forge.card.ColorSet; import forge.game.Game; import forge.game.GameObject; +import forge.game.GameObjectPredicates; import forge.game.GameType; import forge.game.ability.AbilityUtils; import forge.game.card.Card; -import forge.game.card.CardCollectionView; -import forge.game.card.CardLists; import forge.game.card.CardUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.Expressions; +import forge.util.collect.FCollection; /** *
@@ -354,21 +354,19 @@ public class SpellAbilityCondition extends SpellAbilityVariables {
}
}
- if (this.getIsPresent() != null) {
- CardCollectionView list;
- if (this.getPresentDefined() != null) {
- list = AbilityUtils.getDefinedCards(host, this.getPresentDefined(), sa);
+ if (getIsPresent() != null) {
+ FCollection
@@ -426,19 +429,17 @@ public class SpellAbilityRestriction extends SpellAbilityVariables {
}
}
if (this.getIsPresent() != null) {
- CardCollectionView list;
- if (this.getPresentDefined() != null) {
- list = AbilityUtils.getDefinedCards(sa.getHostCard(), this.getPresentDefined(), sa);
+ FCollection