mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
CardFactoryUtil: add Fabricate Keyword
This commit is contained in:
@@ -1415,7 +1415,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
} 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")) {
|
} else if (keyword.startsWith("Fabricate") || keyword.startsWith("Soulshift")) {
|
||||||
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() + ")");
|
||||||
} else if (keyword.contains("Haunt")) {
|
} else if (keyword.contains("Haunt")) {
|
||||||
|
|||||||
@@ -2525,6 +2525,9 @@ public class CardFactoryUtil {
|
|||||||
else if (keyword.startsWith("Escalate")) {
|
else if (keyword.startsWith("Escalate")) {
|
||||||
addStaticAbility(keyword, card, null);
|
addStaticAbility(keyword, card, null);
|
||||||
}
|
}
|
||||||
|
else if (keyword.startsWith("Fabricate")) {
|
||||||
|
addTriggerAbility(keyword, card, null);
|
||||||
|
}
|
||||||
else if (keyword.startsWith("Rampage")) {
|
else if (keyword.startsWith("Rampage")) {
|
||||||
addTriggerAbility(keyword, card, null);
|
addTriggerAbility(keyword, card, null);
|
||||||
}
|
}
|
||||||
@@ -3019,6 +3022,34 @@ public class CardFactoryUtil {
|
|||||||
card.setSVar("ExtortOpps", abString);
|
card.setSVar("ExtortOpps", abString);
|
||||||
card.setSVar("ExtortGainLife", dbString);
|
card.setSVar("ExtortGainLife", dbString);
|
||||||
card.setSVar("AFLifeLost", "Number$0");
|
card.setSVar("AFLifeLost", "Number$0");
|
||||||
|
if (!intrinsic) {
|
||||||
|
kws.addTrigger(cardTrigger);
|
||||||
|
}
|
||||||
|
} else if (keyword.startsWith("Fabricate")) {
|
||||||
|
final String[] k = keyword.split(":");
|
||||||
|
final String n = k[1];
|
||||||
|
|
||||||
|
final String name = StringUtils.join(k);
|
||||||
|
|
||||||
|
final String trigStr = "Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield "
|
||||||
|
+ " | Execute$ " + name + "Choose | ValidCard$ Card.Self | Secondary$ True"
|
||||||
|
+ " | TriggerDescription$ Fabricate " + n + " (" + Keyword.getInstance(keyword).getReminderText() + ")";
|
||||||
|
|
||||||
|
final String choose = "DB$ GenericChoice | Choices$ DB" + name + "Counter,DB" + name + "Token | ConditionPresent$ Card.StrictlySelf | SubAbility$ DB" + name + "Token2 | AILogic$ " + name;
|
||||||
|
final String counter = "DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ " + n + " | SpellDescription$ put "
|
||||||
|
+ Lang.nounWithNumeral(n, "+1/+1 counter") + " on it";
|
||||||
|
final String token = "DB$ Token | TokenAmount$ " + n + " | TokenName$ Servo | TokenTypes$ Artifact,Creature,Servo "
|
||||||
|
+ " | TokenOwner$ You | TokenColors$ Colorless | TokenPower$ 1 | TokenToughness$ 1 | TokenImage$ c 1 1 servo KLD | SpellDescription$ Create "
|
||||||
|
+ Lang.nounWithNumeral(n, "1/1 colorless Servo artifact creature token") + ".";
|
||||||
|
|
||||||
|
final Trigger trigger = TriggerHandler.parseTrigger(trigStr, card, intrinsic);
|
||||||
|
final Trigger cardTrigger = card.addTrigger(trigger);
|
||||||
|
|
||||||
|
card.setSVar(name + "Choose", choose);
|
||||||
|
card.setSVar("DB" + name + "Counter", counter);
|
||||||
|
card.setSVar("DB" + name + "Token", token);
|
||||||
|
card.setSVar("DB" + name + "Token2", token + " | ConditionPresent$ Card.StrictlySelf | ConditionCompare$ EQ0");
|
||||||
|
|
||||||
if (!intrinsic) {
|
if (!intrinsic) {
|
||||||
kws.addTrigger(cardTrigger);
|
kws.addTrigger(cardTrigger);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ public enum Keyword {
|
|||||||
EXALTED(SimpleKeyword.class, false, "Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn."),
|
EXALTED(SimpleKeyword.class, false, "Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn."),
|
||||||
EXTORT(SimpleKeyword.class, false, "Whenever you cast a spell, you may pay {W/B}. If you do, each opponent loses 1 life and you gain that much life."),
|
EXTORT(SimpleKeyword.class, false, "Whenever you cast a spell, you may pay {W/B}. If you do, each opponent loses 1 life and you gain that much life."),
|
||||||
EXPLOIT(SimpleKeyword.class, false, "When this creature enters the battlefield, you may sacrifice a creature."),
|
EXPLOIT(SimpleKeyword.class, false, "When this creature enters the battlefield, you may sacrifice a creature."),
|
||||||
|
FABRICATE(KeywordWithAmount.class, false, "When this creature enters the battlefield, put {%1$d:+1/+1 counter} on it, or create {%1$d:1/1 colorless Servo artifact creature token}."),
|
||||||
FADING(KeywordWithAmount.class, false, "This permanent enters the battlefield with %d fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it."),
|
FADING(KeywordWithAmount.class, false, "This permanent enters the battlefield with %d fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it."),
|
||||||
FATESEAL(KeywordWithAmount.class, false, "Look at the top %d cards of an opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order."),
|
FATESEAL(KeywordWithAmount.class, false, "Look at the top %d cards of an opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order."),
|
||||||
FEAR(SimpleKeyword.class, true, "This creature can't be blocked except by artifact creatures and/or black creatures."),
|
FEAR(SimpleKeyword.class, true, "This creature can't be blocked except by artifact creatures and/or black creatures."),
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public abstract class KeywordInstance<T extends KeywordInstance<?>> {
|
|||||||
}
|
}
|
||||||
public String getReminderText() {
|
public String getReminderText() {
|
||||||
String result = formatReminderText(keyword.reminderText);
|
String result = formatReminderText(keyword.reminderText);
|
||||||
Matcher m = Pattern.compile("\\{(\\w):(.+)\\}").matcher(result);
|
Matcher m = Pattern.compile("\\{(\\w):(.+?)\\}").matcher(result);
|
||||||
|
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
while (m.find()) {
|
while (m.find()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user