mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
CardFactoryUtil: update code for Soulshift,
also fixed Kodama of the Center Tree
This commit is contained in:
@@ -1404,12 +1404,15 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
&& 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<Card> {
|
||||
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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user