mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
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:
@@ -1336,7 +1336,9 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
final String[] p = keyword.split(":");
|
final String[] p = keyword.split(":");
|
||||||
final StringBuilder s = new StringBuilder();
|
final StringBuilder s = new StringBuilder();
|
||||||
if (p.length > 4) {
|
if (p.length > 4) {
|
||||||
s.append(p[4]);
|
if (!"no desc".equals(p[4])) {
|
||||||
|
s.append(p[4]);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
s.append(getName());
|
s.append(getName());
|
||||||
s.append(" enters the battlefield with ");
|
s.append(" enters the battlefield with ");
|
||||||
@@ -1356,7 +1358,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
String k = keyword;
|
String k = keyword;
|
||||||
k = k.replace("Curse", "");
|
k = k.replace("Curse", "");
|
||||||
sbLong.append(k).append("\r\n");
|
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");
|
sbLong.append(keyword.replace(":", " ")).append("\r\n");
|
||||||
} else if (keyword.startsWith("Madness")) {
|
} else if (keyword.startsWith("Madness")) {
|
||||||
String[] parts = keyword.split(":");
|
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, ")
|
} else if (keyword.contains("At the beginning of your upkeep, ")
|
||||||
&& 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("Modular") || keyword.startsWith("Bloodthirst")
|
} else if (keyword.startsWith("Strive") || keyword.startsWith("Escalate")
|
||||||
|| keyword.startsWith("Strive") || keyword.startsWith("Escalate")
|
|
||||||
|| keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling")
|
|
||||||
|| keyword.startsWith("ETBReplacement") || keyword.startsWith("MayEffectFromOpeningHand")
|
|| keyword.startsWith("ETBReplacement") || keyword.startsWith("MayEffectFromOpeningHand")
|
||||||
|| keyword.equals("Undaunted") || keyword.startsWith("Monstrosity")
|
|| keyword.startsWith("UpkeepCost")) {
|
||||||
|| keyword.startsWith("Graft") || keyword.startsWith("UpkeepCost")) {
|
|
||||||
} 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.equals("Partner") || keyword.equals("Retrace")
|
|| keyword.startsWith("Soulbond") || keyword.equals("Partner") || keyword.equals("Retrace")
|
||||||
|| keyword.equals("Living Weapon") || keyword.equals("Myriad") || keyword.equals("Exploit")
|
|| keyword.equals("Living Weapon") || keyword.equals("Myriad") || keyword.equals("Exploit")
|
||||||
|| keyword.equals("Ingest") || keyword.equals("Changeling")) {
|
|| keyword.equals("Ingest") || keyword.equals("Changeling")) {
|
||||||
sbLong.append(keyword + " (" + Keyword.getInstance(keyword).getReminderText() + ")");
|
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("Crew") || keyword.startsWith("Tribute")
|
||||||
|
|| keyword.startsWith("Graft") || keyword.startsWith("Fading") || keyword.startsWith("Vanishing")
|
||||||
|| keyword.startsWith("Renown") || keyword.startsWith("Annihilator")) {
|
|| keyword.startsWith("Renown") || keyword.startsWith("Annihilator")) {
|
||||||
final String[] k = keyword.split(":");
|
final String[] k = keyword.split(":");
|
||||||
sbLong.append(k[0] + " " + k[1] + " (" + Keyword.getInstance(keyword).getReminderText() + ")");
|
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")
|
} else if (keyword.startsWith("Equip") || keyword.startsWith("Fortify") || keyword.startsWith("Outlast")
|
||||||
|| keyword.startsWith("Unearth") || keyword.startsWith("Scavenge") || keyword.startsWith("Ninjutsu")
|
|| keyword.startsWith("Unearth") || keyword.startsWith("Scavenge") || keyword.startsWith("Ninjutsu")
|
||||||
|| keyword.startsWith("Evoke") || keyword.startsWith("Bestow") || keyword.startsWith("Dash")
|
|| 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
|
// keyword parsing takes care of adding a proper description
|
||||||
} else if (keyword.startsWith("CantBeBlockedBy")) {
|
} else if (keyword.startsWith("CantBeBlockedBy")) {
|
||||||
sbLong.append(getName()).append(" can't be blocked ");
|
sbLong.append(getName()).append(" can't be blocked ");
|
||||||
|
|||||||
@@ -2131,31 +2131,15 @@ public class CardFactoryUtil {
|
|||||||
addTriggerAbility(keyword, card, null);
|
addTriggerAbility(keyword, card, null);
|
||||||
}
|
}
|
||||||
else if (keyword.startsWith("Fading")) {
|
else if (keyword.startsWith("Fading")) {
|
||||||
final String[] k = keyword.split(":");
|
addTriggerAbility(keyword, card, null);
|
||||||
|
addReplacementEffect(keyword, card, null);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
else if (keyword.startsWith("Renown")) {
|
else if (keyword.startsWith("Renown")) {
|
||||||
addTriggerAbility(keyword, card, null);
|
addTriggerAbility(keyword, card, null);
|
||||||
}
|
}
|
||||||
else if (keyword.startsWith("Vanishing")) {
|
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);
|
addTriggerAbility(keyword, card, null);
|
||||||
|
addReplacementEffect(keyword, card, null);
|
||||||
}
|
}
|
||||||
else if (keyword.equals("Delve")) {
|
else if (keyword.equals("Delve")) {
|
||||||
card.getSpellAbilities().getFirst().setDelve(true);
|
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)
|
private static ReplacementEffect makeEtbCounter(final String kw, final Card card, final boolean intrinsic)
|
||||||
{
|
{
|
||||||
String parse = kw;
|
String parse = kw;
|
||||||
card.removeIntrinsicKeyword(parse);
|
|
||||||
|
|
||||||
String[] splitkw = parse.split(":");
|
String[] splitkw = parse.split(":");
|
||||||
|
|
||||||
@@ -2510,7 +2493,7 @@ public class CardFactoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield "
|
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);
|
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card, intrinsic);
|
||||||
re.setLayer(ReplacementLayer.Other);
|
re.setLayer(ReplacementLayer.Other);
|
||||||
@@ -2755,6 +2738,23 @@ public class CardFactoryUtil {
|
|||||||
card.setSVar("DB" + name + "Token", token);
|
card.setSVar("DB" + name + "Token", token);
|
||||||
card.setSVar("DB" + name + "Token2", token + " | ConditionPresent$ Card.StrictlySelf | ConditionCompare$ EQ0");
|
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) {
|
if (!intrinsic) {
|
||||||
kws.addTrigger(cardTrigger);
|
kws.addTrigger(cardTrigger);
|
||||||
}
|
}
|
||||||
@@ -3330,10 +3330,10 @@ public class CardFactoryUtil {
|
|||||||
|
|
||||||
final String etbCounter = "etbCounter:P1P1:" + numCounters + ":Bloodthirst$ True:" + desc;
|
final String etbCounter = "etbCounter:P1P1:" + numCounters + ":Bloodthirst$ True:" + desc;
|
||||||
|
|
||||||
if (intrinsic) {
|
final ReplacementEffect re = makeEtbCounter(etbCounter, card, intrinsic);
|
||||||
card.addIntrinsicKeyword(etbCounter);
|
|
||||||
} else {
|
if (!intrinsic) {
|
||||||
kws.addReplacement(makeEtbCounter(etbCounter, card, intrinsic));
|
kws.addReplacement(re);
|
||||||
}
|
}
|
||||||
} else if (keyword.startsWith("Devour")) {
|
} else if (keyword.startsWith("Devour")) {
|
||||||
|
|
||||||
@@ -3367,6 +3367,21 @@ public class CardFactoryUtil {
|
|||||||
if (!intrinsic) {
|
if (!intrinsic) {
|
||||||
kws.addReplacement(cardre);
|
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")) {
|
} else if (keyword.startsWith("Graft")) {
|
||||||
final String[] k = keyword.split(":");
|
final String[] k = keyword.split(":");
|
||||||
final String m = k[1];
|
final String m = k[1];
|
||||||
@@ -3377,10 +3392,10 @@ public class CardFactoryUtil {
|
|||||||
sb.append(m);
|
sb.append(m);
|
||||||
sb.append(" (").append(Keyword.getInstance(keyword).getReminderText()).append(")");
|
sb.append(" (").append(Keyword.getInstance(keyword).getReminderText()).append(")");
|
||||||
|
|
||||||
if (intrinsic) {
|
final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic);
|
||||||
card.addIntrinsicKeyword(sb.toString());
|
|
||||||
} else {
|
if (!intrinsic) {
|
||||||
kws.addReplacement(makeEtbCounter(sb.toString(), card, intrinsic));
|
kws.addReplacement(re);
|
||||||
}
|
}
|
||||||
} else if (keyword.startsWith("Madness")) {
|
} else if (keyword.startsWith("Madness")) {
|
||||||
// Set Madness Replacement effects
|
// Set Madness Replacement effects
|
||||||
@@ -3413,10 +3428,10 @@ public class CardFactoryUtil {
|
|||||||
card.setSVar(m, "Count$Converge");
|
card.setSVar(m, "Count$Converge");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intrinsic) {
|
final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic);
|
||||||
card.addIntrinsicKeyword(sb.toString());
|
|
||||||
} else {
|
if (!intrinsic) {
|
||||||
kws.addReplacement(makeEtbCounter(sb.toString(), card, intrinsic));
|
kws.addReplacement(re);
|
||||||
}
|
}
|
||||||
} else if (keyword.equals("Unleash")) {
|
} else if (keyword.equals("Unleash")) {
|
||||||
String effect = "DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Unleash (" + Keyword.getInstance(keyword).getReminderText() + ")";
|
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) {
|
if (!intrinsic) {
|
||||||
kws.addReplacement(cardre);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user