initial Friends forever

This commit is contained in:
Northmoc
2021-10-15 15:17:41 -04:00
parent e499d9bed8
commit 80171918dd
5 changed files with 9 additions and 3 deletions

View File

@@ -228,7 +228,8 @@ public final class CardRules implements ICardCharacteristics {
} }
public boolean canBePartnerCommander() { public boolean canBePartnerCommander() {
return canBeCommander() && (hasKeyword("Partner") || !this.partnerWith.isEmpty()); return canBeCommander() && (hasKeyword("Partner") || !this.partnerWith.isEmpty() ||
hasKeyword("Friends forever"));
} }
public boolean canBeOathbreaker() { public boolean canBeOathbreaker() {

View File

@@ -259,6 +259,9 @@ public enum DeckFormat {
} else if (a.getName().equals(b.getRules().getPartnerWith()) } else if (a.getName().equals(b.getRules().getPartnerWith())
&& b.getName().equals(a.getRules().getPartnerWith())) { && b.getName().equals(a.getRules().getPartnerWith())) {
// paired partner commander // paired partner commander
} else if (a.getRules().hasKeyword("Friends forever") &&
b.getRules().hasKeyword("Friends forever")) {
// Stranger Things Secret Lair gimmick partner commander
} else { } else {
return "has an illegal commander partnership"; return "has an illegal commander partnership";
} }

View File

@@ -2086,7 +2086,8 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|| keyword.equals("Foretell") // for the ones without cost || keyword.equals("Foretell") // for the ones without cost
|| keyword.equals("Hideaway") || keyword.equals("Ascend") || keyword.equals("Totem armor") || keyword.equals("Hideaway") || keyword.equals("Ascend") || keyword.equals("Totem armor")
|| keyword.equals("Battle cry") || keyword.equals("Devoid") || keyword.equals("Riot") || keyword.equals("Battle cry") || keyword.equals("Devoid") || keyword.equals("Riot")
|| keyword.equals("Daybound") || keyword.equals("Nightbound")) { || keyword.equals("Daybound") || keyword.equals("Nightbound")
|| keyword.equals("Friends forever")) {
sbLong.append(keyword).append(" (").append(inst.getReminderText()).append(")"); sbLong.append(keyword).append(" (").append(inst.getReminderText()).append(")");
} else if (keyword.startsWith("Partner:")) { } else if (keyword.startsWith("Partner:")) {
final String[] k = keyword.split(":"); final String[] k = keyword.split(":");

View File

@@ -85,6 +85,7 @@ public enum Keyword {
FORETELL("Foretell", KeywordWithCost.class, false, "During your turn, you may pay {2} and exile this card from your hand face down. Cast it on a later turn for its foretell cost."), FORETELL("Foretell", KeywordWithCost.class, false, "During your turn, you may pay {2} and exile this card from your hand face down. Cast it on a later turn for its foretell cost."),
FORTIFY("Fortify", KeywordWithCost.class, false, "%s: Attach to target land you control. Fortify only as a sorcery."), FORTIFY("Fortify", KeywordWithCost.class, false, "%s: Attach to target land you control. Fortify only as a sorcery."),
FRENZY("Frenzy", KeywordWithAmount.class, false, "Whenever this creature attacks and isn't blocked, it gets +%d/+0 until end of turn."), FRENZY("Frenzy", KeywordWithAmount.class, false, "Whenever this creature attacks and isn't blocked, it gets +%d/+0 until end of turn."),
FRIENDS_FOREVER("Friends forever", Partner.class, true, "You can have two commanders if both have friends forever."),
FUSE("Fuse", SimpleKeyword.class, true, "You may cast one or both halves of this card from your hand."), FUSE("Fuse", SimpleKeyword.class, true, "You may cast one or both halves of this card from your hand."),
GRAFT("Graft", KeywordWithAmount.class, false, "This permanent enters the battlefield with {%d:+1/+1 counter} on it. Whenever another creature enters the battlefield, you may move a +1/+1 counter from this permanent onto it."), GRAFT("Graft", KeywordWithAmount.class, false, "This permanent enters the battlefield with {%d:+1/+1 counter} on it. Whenever another creature enters the battlefield, you may move a +1/+1 counter from this permanent onto it."),
GRAVESTORM("Gravestorm", SimpleKeyword.class, false, "When you cast this spell, copy it for each permanent that was put into a graveyard from the battlefield this turn. If the spell has any targets, you may choose new targets for any of the copies."), GRAVESTORM("Gravestorm", SimpleKeyword.class, false, "When you cast this spell, copy it for each permanent that was put into a graveyard from the battlefield this turn. If the spell has any targets, you may choose new targets for any of the copies."),

View File

@@ -411,7 +411,7 @@ public final class CardScriptParser {
"CanBeEquippedBy", "Equipped", "Fortified", "HauntedBy", "CanBeEquippedBy", "Equipped", "Fortified", "HauntedBy",
"notTributed", "madness", "Paired", "NotPaired", "PairedWith", "notTributed", "madness", "Paired", "NotPaired", "PairedWith",
"Above", "DirectlyAbove", "TopGraveyardCreature", "Above", "DirectlyAbove", "TopGraveyardCreature",
"BottomGraveyard", "TopLibrary", "Cloned", "DamagedBy", "Damaged", "BottomGraveyard", "TopLibrary", "BottomLibrary", "Cloned", "DamagedBy", "Damaged",
"sharesPermanentTypeWith", "canProduceSameManaTypeWith", "SecondSpellCastThisTurn", "sharesPermanentTypeWith", "canProduceSameManaTypeWith", "SecondSpellCastThisTurn",
"ThisTurnCast", "withFlashback", "tapped", "untapped", "faceDown", "ThisTurnCast", "withFlashback", "tapped", "untapped", "faceDown",
"faceUp", "hasLevelUp", "DrawnThisTurn", "notDrawnThisTurn", "faceUp", "hasLevelUp", "DrawnThisTurn", "notDrawnThisTurn",