CardFactoryUtil: reworked ETB Replacement Keywords

This commit is contained in:
Hanmac
2017-10-18 07:16:07 +00:00
parent 0e666f07e9
commit 440d7fe2b8
2 changed files with 33 additions and 29 deletions

View File

@@ -1516,6 +1516,7 @@ public class Card extends GameEntity implements Comparable<Card> {
sbLong.append(keyword).append("\r\n");
} else if (keyword.startsWith("Strive") || keyword.startsWith("Escalate")
|| keyword.startsWith("ETBReplacement")
|| keyword.equals("CARDNAME enters the battlefield tapped.")
|| keyword.startsWith("UpkeepCost")) {
} else if (keyword.startsWith("Provoke") || keyword.startsWith("Ingest") || keyword.equals("Unleash")
|| keyword.startsWith("Soulbond") || keyword.equals("Partner") || keyword.equals("Retrace")

View File

@@ -2201,7 +2201,7 @@ public class CardFactoryUtil {
addSpellAbility(keyword, card, null);
}
else if (keyword.equals("Hideaway")) {
card.getCurrentState().addIntrinsicKeyword("CARDNAME enters the battlefield tapped.");
addReplacementEffect(keyword, card, null);
final Trigger hideawayTrigger = TriggerHandler.parseTrigger("Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigHideawayDig | TriggerDescription$ When CARDNAME enters the battlefield, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.", card, true);
card.addTrigger(hideawayTrigger);
@@ -2216,6 +2216,14 @@ public class CardFactoryUtil {
card.addTrigger(changeZoneTrigger);
card.setSVar("DBHideawayRemember", "DB$ Animate | Defined$ Imprinted | RememberObjects$ Remembered | Permanent$ True");
card.setSVar("DBHideawayCleanup", "DB$ Cleanup | ClearRemembered$ True");
} else if (keyword.equals("CARDNAME enters the battlefield tapped.")) {
addReplacementEffect(keyword, card, null);
}
if (keyword.startsWith("ETBReplacement")) {
addReplacementEffect(keyword, card, null);
} else if (keyword.startsWith("etbCounter")) {
addReplacementEffect(keyword, card, null);
}
}
@@ -2240,7 +2248,6 @@ public class CardFactoryUtil {
}
}
setupEtbKeywords(card);
}
private static ReplacementEffect createETBReplacement(final Card card, ReplacementLayer layer,
@@ -2273,33 +2280,6 @@ public class CardFactoryUtil {
return card.addReplacementEffect(re);
}
/**
* TODO: Write javadoc for this method.
* @param card
*/
public static void setupEtbKeywords(final Card card) {
for (String kw : card.getKeywords()) {
if (kw.startsWith("ETBReplacement")) {
String[] splitkw = kw.split(":");
ReplacementLayer layer = ReplacementLayer.smartValueOf(splitkw[1]);
final boolean optional = splitkw.length >= 4 && splitkw[3].contains("Optional");
final String valid = splitkw.length >= 6 ? splitkw[5] : "Card.Self";
final String zone = splitkw.length >= 5 ? splitkw[4] : "";
createETBReplacement(card, layer, card.getSVar(splitkw[2]), optional, false, true, valid, zone);
} else if (kw.startsWith("etbCounter")) {
makeEtbCounter(kw, card, true);
} else if (kw.equals("CARDNAME enters the battlefield tapped.")) {
card.removeIntrinsicKeyword(kw);
String effect = "DB$ Tap | Defined$ Self | ETB$ True | SpellDescription$ CARDNAME enters the battlefield tapped.";
createETBReplacement(card, ReplacementLayer.Other, effect, false, false, true, "Card.Self", "");
}
}
}
private static ReplacementEffect makeEtbCounter(final String kw, final Card card, final boolean intrinsic)
@@ -3718,6 +3698,29 @@ public class CardFactoryUtil {
}
}
if (keyword.equals("CARDNAME enters the battlefield tapped.") || keyword.equals("Hideway")) {
String effect = "DB$ Tap | Defined$ Self | ETB$ True "
+ " | SpellDescription$ CARDNAME enters the battlefield tapped.";
createETBReplacement(
card, ReplacementLayer.Other, effect, false, keyword.equals("Hideway"), intrinsic, "Card.Self", ""
);
}
if (keyword.startsWith("ETBReplacement")) {
String[] splitkw = keyword.split(":");
ReplacementLayer layer = ReplacementLayer.smartValueOf(splitkw[1]);
final boolean optional = splitkw.length >= 4 && splitkw[3].contains("Optional");
final String valid = splitkw.length >= 6 ? splitkw[5] : "Card.Self";
final String zone = splitkw.length >= 5 ? splitkw[4] : "";
createETBReplacement(card, layer, card.getSVar(splitkw[2]), optional, false, intrinsic, valid, zone);
} else if (keyword.startsWith("etbCounter")) {
makeEtbCounter(keyword, card, intrinsic);
}
// No finish yet, need card updates
if (keyword.startsWith("PreventAllDamageBy") && keyword.contains(":")) {
final String[] k = keyword.split(":");