diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 5766f20cc25..74e37ceb437 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1715,6 +1715,12 @@ public class AbilityUtils { return doXMath(root.getXManaCostPaid(), expr, c, ctb); } + // If the chosen creature has X in its mana cost, that X is considered to be 0. + // The value of X in Altered Ego’s last ability will be whatever value was chosen for X while casting Altered Ego. + if (sa.isCopiedTrait() && !sa.getHostCard().equals(c)) { + return doXMath(0, expr, c, ctb); + } + if (root.isTrigger()) { Trigger t = root.getTrigger(); if (t == null) { @@ -1755,16 +1761,8 @@ public class AbilityUtils { } } - // If the chosen creature has X in its mana cost, that X is considered to be 0. - // The value of X in Altered Ego’s last ability will be whatever value was chosen for X while casting Altered Ego. - if (sa.isCopiedTrait() || !sa.getHostCard().equals(c)) { - return doXMath(0, expr, c, ctb); - } - - if (root.isReplacementAbility()) { - if (sa.hasParam("ETB")) { - return doXMath(c.getXManaCostPaid(), expr, c, ctb); - } + if (root.isReplacementAbility() && sa.hasParam("ETB")) { + return doXMath(c.getXManaCostPaid(), expr, c, ctb); } return doXMath(0, expr, c, ctb); 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 3cf97aedde0..8fcc987388a 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -174,8 +174,10 @@ public class CardFactory { if (targetSA.isBestow()) { c.animateBestow(); } + return c; } + /** *
* copySpellAbilityAndPossiblyHost. @@ -306,7 +308,7 @@ public class CardFactory { buildPlaneAbilities(card); } CardFactoryUtil.setupKeywordedAbilities(card); // Should happen AFTER setting left/right split abilities to set Fuse ability to both sides - card.getView().updateState(card); + card.updateStateForView(); } private static void buildPlaneAbilities(Card card) {