From 84c4725c9d036ffa22bd49405020c4485d0878ef Mon Sep 17 00:00:00 2001 From: Hanmac Date: Tue, 9 Aug 2016 14:39:47 +0000 Subject: [PATCH] CardFactoryUtil: update code for Soulshift, also fixed Kodama of the Center Tree --- .../src/main/java/forge/game/card/Card.java | 7 ++-- .../java/forge/game/card/CardFactoryUtil.java | 36 ++++++++++++------- 2 files changed, 28 insertions(+), 15 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 d05bddb0372..db7e4c68286 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1404,12 +1404,15 @@ public class Card extends GameEntity implements Comparable { && keyword.contains(" unless you pay")) { sbLong.append(keyword).append("\r\n"); } else if (keyword.startsWith("Sunburst") && hasStartOfKeyword("Modular")) { - } else if (keyword.startsWith("Modular") || keyword.startsWith("Soulshift") || keyword.startsWith("Bloodthirst") + } else if (keyword.startsWith("Modular") || keyword.startsWith("Bloodthirst") || keyword.startsWith("Strive") || keyword.startsWith("Escalate") || keyword.startsWith("ETBReplacement") || keyword.startsWith("MayEffectFromOpeningHand")) { } else if (keyword.startsWith("Provoke") || keyword.startsWith("Devour") || keyword.equals("Unleash") || keyword.startsWith("Soulbond")) { sbLong.append(keyword + " (" + Keyword.getInstance(keyword).getReminderText() + ")"); + } else if (keyword.startsWith("Soulshift")) { + final String[] k = keyword.split(":"); + sbLong.append(k[0] + " " + k[1] + " (" + Keyword.getInstance(keyword).getReminderText() + ")"); } else if (keyword.contains("Haunt")) { sb.append("\r\nHaunt ("); if (isCreature()) { @@ -4940,7 +4943,7 @@ public class Card extends GameEntity implements Comparable { try { x = Integer.parseInt(rhs); } catch (final NumberFormatException e) { - x = AbilityUtils.calculateAmount(source, source.getSVar(rhs), spellAbility); + x = AbilityUtils.calculateAmount(source, rhs, spellAbility); // TODO: find a better solution for handling Count$TopOfLibraryCMC for split cards // (currently two CMCs are encoded in one big integer value) 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 62d5899d23c..3dea4f1960f 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -2242,19 +2242,7 @@ public class CardFactoryUtil { card.getCurrentState().addUnparsedAbility(sbTransmute); } else if (keyword.startsWith("Soulshift")) { - final String[] k = keyword.split(" "); - final int manacost = Integer.parseInt(k[1]); - - final String actualTrigger = "Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard" - + "| OptionalDecider$ You | ValidCard$ Card.Self | Execute$ SoulshiftAbility" - + "| TriggerController$ TriggeredCardController | TriggerDescription$ " + keyword - + " (When this creature dies, you may return target Spirit card with converted mana cost " - + manacost + " or less from your graveyard to your hand.)"; - final String abString = "DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand" - + "| ValidTgts$ Spirit.YouOwn+cmcLE" + manacost; - final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, card, true); - card.addTrigger(parsedTrigger); - card.setSVar("SoulshiftAbility", abString); + addTriggerAbility(keyword, card, null); } else if (keyword.startsWith("Champion")) { card.removeIntrinsicKeyword(keyword); @@ -3079,6 +3067,28 @@ public class CardFactoryUtil { card.setSVar("Rampage" + n, "SVar$RampageCount/Times." + n); card.setSVar("RampageCount", "TriggerCount$NumBlockers/Minus.1"); + if (!intrinsic) { + kws.addTrigger(cardTrigger); + } + } else if (keyword.startsWith("Soulshift")) { + final String[] k = keyword.split(":"); + + final String actualTrigger = "Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard" + + "| Secondary$ True | OptionalDecider$ You | ValidCard$ Card.Self" + + "| TriggerController$ TriggeredCardController | TriggerDescription$ " + k[0] + " " + k[1] + + " (" + Keyword.getInstance(keyword).getReminderText() + ")"; + final String effect = "DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand" + + "| ValidTgts$ Spirit.YouOwn+cmcLE" + k[1]; + final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, card, intrinsic); + final SpellAbility sp = AbilityFactory.getAbility(effect, card); + // Soulshift X + if (k[1].equals("X")) { + sp.setSVar("X", "Count$Soulshift " + k[3]); + } + + parsedTrigger.setOverridingAbility(sp); + final Trigger cardTrigger = card.addTrigger(parsedTrigger); + if (!intrinsic) { kws.addTrigger(cardTrigger); }