From 47e2a6d89747154b7b564afecc2a18fb6fe7967b Mon Sep 17 00:00:00 2001 From: Hanmac Date: Wed, 3 Aug 2016 08:07:11 +0000 Subject: [PATCH] CardFactoryUtil: improved Bestow a bit --- .../src/main/java/forge/game/card/Card.java | 7 ++- .../java/forge/game/card/CardFactoryUtil.java | 46 +++++++++++-------- 2 files changed, 30 insertions(+), 23 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 6c7592588a2..07920bbd65a 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1406,7 +1406,8 @@ public class Card extends GameEntity implements Comparable { } else if (keyword.startsWith("Modular") || keyword.startsWith("Soulshift") || 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")) { + } else if (keyword.startsWith("Provoke") || keyword.startsWith("Devour") || keyword.equals("Unleash") + || keyword.startsWith("Soulbond")) { sbLong.append(keyword + " (" + Keyword.getInstance(keyword).getReminderText() + ")"); } else if (keyword.contains("Haunt")) { sb.append("\r\nHaunt ("); @@ -1433,11 +1434,9 @@ public class Card extends GameEntity implements Comparable { sbLong.append("and paying the difference in mana costs between this and the sacrificed "); sbLong.append(offeringType); sbLong.append(". Mana cost includes color.)"); - } else if (keyword.startsWith("Soulbond")) { - sbLong.append(keyword + " (" + Keyword.getInstance(keyword).getReminderText() + ")"); } else if (keyword.startsWith("Equip") || keyword.startsWith("Fortify") || keyword.startsWith("Outlast") || keyword.startsWith("Unearth") || keyword.startsWith("Scavenge") || keyword.startsWith("Ninjutsu") - || keyword.startsWith("Evoke")) { + || keyword.startsWith("Evoke") || keyword.startsWith("Bestow")) { // keyword parsing takes care of adding a proper description } else if (keyword.startsWith("CantBeBlockedBy")) { sbLong.append(getName()).append(" can't be blocked "); 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 7a7f861d962..57f9e3bbe53 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -2703,24 +2703,7 @@ public class CardFactoryUtil { card.getCurrentState().addUnparsedAbility(abilityStr.toString()); } else if (keyword.startsWith("Bestow")) { - final String[] params = keyword.split(":"); - final String cost = params[1]; - card.removeIntrinsicKeyword(keyword); - - final StringBuilder sbAttach = new StringBuilder(); - sbAttach.append("SP$ Attach | Cost$ "); - sbAttach.append(cost); - sbAttach.append(" | AILogic$ ").append(params.length > 2 ? params[2] : "Pump"); - sbAttach.append(" | Bestow$ True | ValidTgts$ Creature"); - final SpellAbility bestow = AbilityFactory.getAbility(sbAttach.toString(), card); - - bestow.setDescription("Bestow " + ManaCostParser.parse(cost) + " (If you cast this" - + " card for its bestow cost, it's an Aura spell with enchant creature. It" - + " becomes a creature again if it's not attached to a creature.)"); - bestow.setStackDescription("Bestow - " + card.getName()); - bestow.setBasicSpell(false); - card.addSpellAbility(bestow); - card.getCurrentState().addUnparsedAbility(sbAttach.toString()); + addSpellAbility(keyword, card, null); } else if (keyword.equals("Hideaway")) { card.getCurrentState().addIntrinsicKeyword("CARDNAME enters the battlefield tapped."); @@ -3190,7 +3173,32 @@ public class CardFactoryUtil { public static void addSpellAbility(final String keyword, final Card card, final KeywordsChange kws) { final boolean intrinsic = kws == null; - if (keyword.startsWith("Evoke")) { + if (keyword.startsWith("Bestow")) { + final String[] params = keyword.split(":"); + final String cost = params[1]; + + final StringBuilder sbAttach = new StringBuilder(); + sbAttach.append("SP$ Attach | Cost$ "); + sbAttach.append(cost); + sbAttach.append(" | AILogic$ ").append(params.length > 2 ? params[2] : "Pump"); + sbAttach.append(" | Bestow$ True | ValidTgts$ Creature"); + + final SpellAbility sa = AbilityFactory.getAbility(sbAttach.toString(), card); + sa.setDescription("Bestow " + ManaCostParser.parse(cost) + + " (" + Keyword.getInstance(keyword).getReminderText() + ")"); + sa.setStackDescription("Bestow - " + card.getName()); + sa.setBasicSpell(false); + if (!intrinsic) { + sa.setTemporary(true); + sa.setIntrinsic(false); + //sa.setOriginalHost(hostCard); + kws.addSpellAbility(sa); + } else { + // add ability to instrinic strings so copies/clones create the ability also + card.getCurrentState().addUnparsedAbility(sbAttach.toString()); + } + card.addSpellAbility(sa); + } else if (keyword.startsWith("Evoke")) { final String[] k = keyword.split(":"); final Cost evokedCost = new Cost(k[1], false);