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 4298b73bf16..d64b0a5b3af 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1258,14 +1258,8 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } public final int getXManaCostPaid() { - SpellAbility castSA; - if (getCopiedPermanent() != null) { - castSA = getCopiedPermanent().getCastSA(); - } else { - castSA = getCastSA(); - } - if (castSA != null) { - Integer paid = castSA.getXManaCostPaid(); + if (getCastSAFallBack() != null) { + Integer paid = getCastSAFallBack().getXManaCostPaid(); return paid == null ? 0 : paid; } return 0; @@ -6092,6 +6086,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public SpellAbility getCastSA() { return castSA; } + public SpellAbility getCastSAFallBack() { + return getCopiedPermanent() != null ? getCopiedPermanent().getCastSA() : castSA; + } public void setCastSA(SpellAbility castSA) { this.castSA = castSA; 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 2a9b6e232bf..829a0196eb7 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -124,6 +124,8 @@ public class CardFactory { final Game game = source.getGame(); final Card c = new Card(game.nextCardId(), original.getPaperCard(), game); copyCopiableCharacteristics(original, c); + // fix old cardstates + buildAbilities(c); if (sourceSA.hasParam("NonLegendary")) { c.removeType(CardType.Supertype.Legendary); 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 0e5c27ffb0e..76ffee1567e 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1680,40 +1680,40 @@ public class CardProperty { if (!card.isOptionalCostPaid(OptionalCost.Generic)) return false; } } else if (property.equals("surged")) { - if (card.getCastSA() == null) { + if (card.getCastSAFallBack() == null) { return false; } - return card.getCastSA().isSurged(); + return card.getCastSAFallBack().isSurged(); } else if (property.equals("blitzed")) { - if (card.getCastSA() == null) { + if (card.getCastSAFallBack() == null) { return false; } return card.getCastSA().isBlitz(); } else if (property.equals("dashed")) { - if (card.getCastSA() == null) { + if (card.getCastSAFallBack() == null) { return false; } - return card.getCastSA().isDash(); + return card.getCastSAFallBack().isDash(); } else if (property.equals("escaped")) { - if (card.getCastSA() == null) { + if (card.getCastSAFallBack() == null) { return false; } - return card.getCastSA().isEscape(); + return card.getCastSAFallBack().isEscape(); } else if (property.equals("evoked")) { - if (card.getCastSA() == null) { + if (card.getCastSAFallBack() == null) { return false; } - return card.getCastSA().isEvoke(); + return card.getCastSAFallBack().isEvoke(); } else if (property.equals("prowled")) { - if (card.getCastSA() == null) { + if (card.getCastSAFallBack() == null) { return false; } - return card.getCastSA().isProwl(); + return card.getCastSAFallBack().isProwl(); } else if (property.equals("spectacle")) { - if (card.getCastSA() == null) { + if (card.getCastSAFallBack() == null) { return false; } - return card.getCastSA().isSpectacle(); + return card.getCastSAFallBack().isSpectacle(); } else if (property.equals("foretold")) { if (!card.isForetold()) { return false;