CardFactoryUtil & Card: make etbCounter abilities different. they do not add a keyword anymore for the ability to remove it

the Replacement Effect is now Secondary and Card itself does do the Description of the Keywords
This commit is contained in:
Hanmac
2017-01-31 05:44:43 +00:00
parent ccfbc7acce
commit 5d55a66a6c
2 changed files with 75 additions and 42 deletions

View File

@@ -1336,7 +1336,9 @@ public class Card extends GameEntity implements Comparable<Card> {
final String[] p = keyword.split(":");
final StringBuilder s = new StringBuilder();
if (p.length > 4) {
s.append(p[4]);
if (!"no desc".equals(p[4])) {
s.append(p[4]);
}
} else {
s.append(getName());
s.append(" enters the battlefield with ");
@@ -1356,7 +1358,7 @@ public class Card extends GameEntity implements Comparable<Card> {
String k = keyword;
k = k.replace("Curse", "");
sbLong.append(k).append("\r\n");
} else if (keyword.startsWith("Fading") || keyword.startsWith("Ripple") || keyword.startsWith("Vanishing")) {
} else if (keyword.startsWith("Ripple")) {
sbLong.append(keyword.replace(":", " ")).append("\r\n");
} else if (keyword.startsWith("Madness")) {
String[] parts = keyword.split(":");
@@ -1447,19 +1449,18 @@ public class Card extends GameEntity implements Comparable<Card> {
} else if (keyword.contains("At the beginning of your upkeep, ")
&& keyword.contains(" unless you pay")) {
sbLong.append(keyword).append("\r\n");
} else if (keyword.startsWith("Modular") || keyword.startsWith("Bloodthirst")
|| keyword.startsWith("Strive") || keyword.startsWith("Escalate")
|| keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling")
} else if (keyword.startsWith("Strive") || keyword.startsWith("Escalate")
|| keyword.startsWith("ETBReplacement") || keyword.startsWith("MayEffectFromOpeningHand")
|| keyword.equals("Undaunted") || keyword.startsWith("Monstrosity")
|| keyword.startsWith("Graft") || keyword.startsWith("UpkeepCost")) {
|| keyword.startsWith("UpkeepCost")) {
} else if (keyword.startsWith("Provoke") || keyword.startsWith("Devour") || keyword.equals("Unleash")
|| keyword.startsWith("Soulbond") || keyword.equals("Partner") || keyword.equals("Retrace")
|| keyword.equals("Living Weapon") || keyword.equals("Myriad") || keyword.equals("Exploit")
|| keyword.equals("Ingest") || keyword.equals("Changeling")) {
sbLong.append(keyword + " (" + Keyword.getInstance(keyword).getReminderText() + ")");
} else if (keyword.startsWith("Fabricate") || keyword.startsWith("Soulshift")
} else if (keyword.startsWith("Modular") || keyword.startsWith("Bloodthirst")
|| keyword.startsWith("Fabricate") || keyword.startsWith("Soulshift")
|| keyword.startsWith("Crew") || keyword.startsWith("Tribute")
|| keyword.startsWith("Graft") || keyword.startsWith("Fading") || keyword.startsWith("Vanishing")
|| keyword.startsWith("Renown") || keyword.startsWith("Annihilator")) {
final String[] k = keyword.split(":");
sbLong.append(k[0] + " " + k[1] + " (" + Keyword.getInstance(keyword).getReminderText() + ")");
@@ -1488,7 +1489,9 @@ public class Card extends GameEntity implements Comparable<Card> {
} 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("Bestow") || keyword.startsWith("Dash")
|| keyword.startsWith("Surge") || keyword.startsWith("Transmute") || keyword.startsWith("Suspend")) {
|| keyword.startsWith("Surge") || keyword.startsWith("Transmute") || keyword.startsWith("Suspend")
|| keyword.equals("Undaunted") || keyword.startsWith("Monstrosity")
|| keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling")) {
// keyword parsing takes care of adding a proper description
} else if (keyword.startsWith("CantBeBlockedBy")) {
sbLong.append(getName()).append(" can't be blocked ");

View File

@@ -2131,31 +2131,15 @@ public class CardFactoryUtil {
addTriggerAbility(keyword, card, null);
}
else if (keyword.startsWith("Fading")) {
final String[] k = keyword.split(":");
card.addIntrinsicKeyword("etbCounter:FADE:" + k[1] + ":no Condition:no desc");
String upkeepTrig = "Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield " +
" | Execute$ TrigUpkeepFading | Secondary$ True | TriggerDescription$ At the beginning of " +
"your upkeep, remove a fade counter from CARDNAME. If you can't, sacrifice CARDNAME.";
card.setSVar("TrigUpkeepFading", "AB$ RemoveCounter | Cost$ 0 | Defined$ Self | CounterType$ FADE" +
" | CounterNum$ 1 | RememberRemoved$ True | SubAbility$ DBUpkeepFadingSac");
card.setSVar("DBUpkeepFadingSac","DB$ Sacrifice | SacValid$ Self | ConditionCheckSVar$ FadingCheckSVar" +
" | ConditionSVarCompare$ EQ0 | References$ FadingCheckSVar | SubAbility$ FadingCleanup");
card.setSVar("FadingCleanup","DB$ Cleanup | ClearRemembered$ True");
card.setSVar("FadingCheckSVar","Count$RememberedSize");
final Trigger parsedUpkeepTrig = TriggerHandler.parseTrigger(upkeepTrig, card, true);
card.addTrigger(parsedUpkeepTrig);
addTriggerAbility(keyword, card, null);
addReplacementEffect(keyword, card, null);
}
else if (keyword.startsWith("Renown")) {
addTriggerAbility(keyword, card, null);
}
else if (keyword.startsWith("Vanishing")) {
final String[] k = keyword.split(":");
// etbcounter only for intrinsic
card.addIntrinsicKeyword("etbCounter:TIME:" + k[1] + ":no Condition:no desc");
addTriggerAbility(keyword, card, null);
addReplacementEffect(keyword, card, null);
}
else if (keyword.equals("Delve")) {
card.getSpellAbilities().getFirst().setDelve(true);
@@ -2478,7 +2462,6 @@ public class CardFactoryUtil {
private static ReplacementEffect makeEtbCounter(final String kw, final Card card, final boolean intrinsic)
{
String parse = kw;
card.removeIntrinsicKeyword(parse);
String[] splitkw = parse.split(":");
@@ -2510,7 +2493,7 @@ public class CardFactoryUtil {
}
String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield "
+ "| Description$ " + desc + (!extraparams.equals("") ? " | " + extraparams : "");
+ "| Secondary$ True | Description$ " + desc + (!extraparams.equals("") ? " | " + extraparams : "");
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card, intrinsic);
re.setLayer(ReplacementLayer.Other);
@@ -2755,6 +2738,23 @@ public class CardFactoryUtil {
card.setSVar("DB" + name + "Token", token);
card.setSVar("DB" + name + "Token2", token + " | ConditionPresent$ Card.StrictlySelf | ConditionCompare$ EQ0");
if (!intrinsic) {
kws.addTrigger(cardTrigger);
}
} else if (keyword.startsWith("Fading")) {
String upkeepTrig = "Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield " +
" | Execute$ TrigUpkeepFading | Secondary$ True | TriggerDescription$ At the beginning of " +
"your upkeep, remove a fade counter from CARDNAME. If you can't, sacrifice CARDNAME.";
card.setSVar("TrigUpkeepFading", "AB$ RemoveCounter | Cost$ 0 | Defined$ Self | CounterType$ FADE" +
" | CounterNum$ 1 | RememberRemoved$ True | SubAbility$ DBUpkeepFadingSac");
card.setSVar("DBUpkeepFadingSac","DB$ Sacrifice | SacValid$ Self | ConditionCheckSVar$ FadingCheckSVar" +
" | ConditionSVarCompare$ EQ0 | References$ FadingCheckSVar | SubAbility$ FadingCleanup");
card.setSVar("FadingCleanup","DB$ Cleanup | ClearRemembered$ True");
card.setSVar("FadingCheckSVar","Count$RememberedSize");
final Trigger trigger = TriggerHandler.parseTrigger(upkeepTrig, card, intrinsic);
final Trigger cardTrigger = card.addTrigger(trigger);
if (!intrinsic) {
kws.addTrigger(cardTrigger);
}
@@ -3330,10 +3330,10 @@ public class CardFactoryUtil {
final String etbCounter = "etbCounter:P1P1:" + numCounters + ":Bloodthirst$ True:" + desc;
if (intrinsic) {
card.addIntrinsicKeyword(etbCounter);
} else {
kws.addReplacement(makeEtbCounter(etbCounter, card, intrinsic));
final ReplacementEffect re = makeEtbCounter(etbCounter, card, intrinsic);
if (!intrinsic) {
kws.addReplacement(re);
}
} else if (keyword.startsWith("Devour")) {
@@ -3367,6 +3367,21 @@ public class CardFactoryUtil {
if (!intrinsic) {
kws.addReplacement(cardre);
}
} else if (keyword.startsWith("Fading")) {
final String[] k = keyword.split(":");
final String m = k[1];
StringBuilder sb = new StringBuilder("etbCounter:FADE:");
sb.append(m).append(":no Condition:");
sb.append("Fading ");
sb.append(m);
sb.append(" (").append(Keyword.getInstance(keyword).getReminderText()).append(")");
final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic);
if (!intrinsic) {
kws.addReplacement(re);
}
} else if (keyword.startsWith("Graft")) {
final String[] k = keyword.split(":");
final String m = k[1];
@@ -3377,10 +3392,10 @@ public class CardFactoryUtil {
sb.append(m);
sb.append(" (").append(Keyword.getInstance(keyword).getReminderText()).append(")");
if (intrinsic) {
card.addIntrinsicKeyword(sb.toString());
} else {
kws.addReplacement(makeEtbCounter(sb.toString(), card, intrinsic));
final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic);
if (!intrinsic) {
kws.addReplacement(re);
}
} else if (keyword.startsWith("Madness")) {
// Set Madness Replacement effects
@@ -3413,10 +3428,10 @@ public class CardFactoryUtil {
card.setSVar(m, "Count$Converge");
}
if (intrinsic) {
card.addIntrinsicKeyword(sb.toString());
} else {
kws.addReplacement(makeEtbCounter(sb.toString(), card, intrinsic));
final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic);
if (!intrinsic) {
kws.addReplacement(re);
}
} else if (keyword.equals("Unleash")) {
String effect = "DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Unleash (" + Keyword.getInstance(keyword).getReminderText() + ")";
@@ -3440,6 +3455,21 @@ public class CardFactoryUtil {
if (!intrinsic) {
kws.addReplacement(cardre);
}
} else if (keyword.startsWith("Vanishing")) {
final String[] k = keyword.split(":");
final String m = k[1];
StringBuilder sb = new StringBuilder("etbCounter:TIME:");
sb.append(m).append(":no Condition:");
sb.append("Vanishing ");
sb.append(m);
sb.append(" (").append(Keyword.getInstance(keyword).getReminderText()).append(")");
final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic);
if (!intrinsic) {
kws.addReplacement(re);
}
}
}