CardFactoryUtil: update code for Soulshift,

also fixed Kodama of the Center Tree
This commit is contained in:
Hanmac
2016-08-09 14:39:47 +00:00
parent a7ddddb817
commit 84c4725c9d
2 changed files with 28 additions and 15 deletions

View File

@@ -1404,12 +1404,15 @@ public class Card extends GameEntity implements Comparable<Card> {
&& keyword.contains(" unless you pay")) { && keyword.contains(" unless you pay")) {
sbLong.append(keyword).append("\r\n"); sbLong.append(keyword).append("\r\n");
} else if (keyword.startsWith("Sunburst") && hasStartOfKeyword("Modular")) { } 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("Strive") || keyword.startsWith("Escalate")
|| keyword.startsWith("ETBReplacement") || keyword.startsWith("MayEffectFromOpeningHand")) { || 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")) { || keyword.startsWith("Soulbond")) {
sbLong.append(keyword + " (" + Keyword.getInstance(keyword).getReminderText() + ")"); 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")) { } else if (keyword.contains("Haunt")) {
sb.append("\r\nHaunt ("); sb.append("\r\nHaunt (");
if (isCreature()) { if (isCreature()) {
@@ -4940,7 +4943,7 @@ public class Card extends GameEntity implements Comparable<Card> {
try { try {
x = Integer.parseInt(rhs); x = Integer.parseInt(rhs);
} catch (final NumberFormatException e) { } 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 // TODO: find a better solution for handling Count$TopOfLibraryCMC for split cards
// (currently two CMCs are encoded in one big integer value) // (currently two CMCs are encoded in one big integer value)

View File

@@ -2242,19 +2242,7 @@ public class CardFactoryUtil {
card.getCurrentState().addUnparsedAbility(sbTransmute); card.getCurrentState().addUnparsedAbility(sbTransmute);
} }
else if (keyword.startsWith("Soulshift")) { else if (keyword.startsWith("Soulshift")) {
final String[] k = keyword.split(" "); addTriggerAbility(keyword, card, null);
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);
} }
else if (keyword.startsWith("Champion")) { else if (keyword.startsWith("Champion")) {
card.removeIntrinsicKeyword(keyword); card.removeIntrinsicKeyword(keyword);
@@ -3079,6 +3067,28 @@ public class CardFactoryUtil {
card.setSVar("Rampage" + n, "SVar$RampageCount/Times." + n); card.setSVar("Rampage" + n, "SVar$RampageCount/Times." + n);
card.setSVar("RampageCount", "TriggerCount$NumBlockers/Minus.1"); 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) { if (!intrinsic) {
kws.addTrigger(cardTrigger); kws.addTrigger(cardTrigger);
} }