From 0ff819962bcf29bf290e517503396142c21f5ebe Mon Sep 17 00:00:00 2001 From: Northmoc Date: Thu, 14 Apr 2022 15:15:57 -0400 Subject: [PATCH 1/4] Keyword: Hideaway rem. text use number word parsing --- forge-game/src/main/java/forge/game/keyword/Keyword.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index 66c603526dc..2a348100ff7 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -95,7 +95,7 @@ public enum Keyword { HASTE("Haste", SimpleKeyword.class, true, "This creature can attack and {T} as soon as it comes under your control."), HAUNT("Haunt", SimpleKeyword.class, false, "When this is put into a graveyard, exile it haunting target creature."), HEXPROOF("Hexproof", Hexproof.class, false, "This can't be the target of %s spells or abilities your opponents control."), - HIDEAWAY("Hideaway", KeywordWithAmount.class, false, "When this permanent enters the battlefield, look at the top %d cards of your library, exile one face down, then put the rest on the bottom of your library."), + HIDEAWAY("Hideaway", KeywordWithAmount.class, false, "When this permanent enters the battlefield, look at the top {%d:card} of your library, exile one face down, then put the rest on the bottom of your library."), HORSEMANSHIP("Horsemanship", SimpleKeyword.class, true, "This creature can't be blocked except by creatures with horsemanship."), IMPROVISE("Improvise", SimpleKeyword.class, true, "Your artifacts can help cast this spell. Each artifact you tap after you're done activating mana abilities pays for {1}."), INDESTRUCTIBLE("Indestructible", SimpleKeyword.class, true, "Effects that say \"destroy\" don't destroy this."), From 7b30001da6352fd6ce2ec12384c669637b0b71d5 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Thu, 14 Apr 2022 15:16:26 -0400 Subject: [PATCH 2/4] KeywordInstance use "a/an" instead of "one" --- .../src/main/java/forge/game/keyword/KeywordInstance.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/keyword/KeywordInstance.java b/forge-game/src/main/java/forge/game/keyword/KeywordInstance.java index 1696cb7b20b..8bc119f91f3 100644 --- a/forge-game/src/main/java/forge/game/keyword/KeywordInstance.java +++ b/forge-game/src/main/java/forge/game/keyword/KeywordInstance.java @@ -53,7 +53,7 @@ public abstract class KeywordInstance> implements K StringBuffer sb = new StringBuffer(); while (m.find()) { - m.appendReplacement(sb, Lang.nounWithNumeral(m.group(1), m.group(2))); + m.appendReplacement(sb, Lang.nounWithNumeralExceptOne(m.group(1), m.group(2))); } m.appendTail(sb); return sb.toString(); From b22694751cc66b25eccf3e0e884b736f01ec4ad6 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Thu, 14 Apr 2022 15:16:54 -0400 Subject: [PATCH 3/4] CardFactoryUtil simplify Hideaway TriggerDesc --- .../src/main/java/forge/game/card/CardFactoryUtil.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 5492221dd37..f0a65aa9e94 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1334,10 +1334,8 @@ public class CardFactoryUtil { List triggers = Lists.newArrayList(); StringBuilder sb = new StringBuilder(); - sb.append("Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self"); - sb.append("| TriggerDescription$ Hideaway ").append(n).append(" (When CARDNAME enters the battlefield, "); - sb.append("look at the top ").append(Lang.getNumeral(Integer.valueOf(n))).append(" cards of your library, exile one face down"); - sb.append(", then put the rest on the bottom of your library.)"); + sb.append("Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Secondary$ True | "); + sb.append("TriggerDescription$ Hideaway ").append(n).append(" (").append(inst.getReminderText()).append(")"); final Trigger hideawayTrigger = TriggerHandler.parseTrigger(sb.toString(), card, intrinsic); String hideawayDig = "DB$ Dig | Defined$ You | DigNum$ " + n + " | DestinationZone$ Exile | ExileFaceDown$ True | RememberChanged$ True"; From 3dd234d039536656dbdcdfaa688588d73246bc48 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Thu, 14 Apr 2022 15:17:47 -0400 Subject: [PATCH 4/4] Card.java : move Hideaway to list with other Amount keywords --- .../src/main/java/forge/game/card/Card.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index b138ec0061c..0aa97e76e21 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2054,7 +2054,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { || keyword.equals("Split second") || keyword.equals("Sunburst") || keyword.equals("Suspend") // for the ones without amount || keyword.equals("Foretell") // for the ones without cost - || keyword.equals("Hideaway") || keyword.equals("Ascend") || keyword.equals("Totem armor") + || keyword.equals("Ascend") || keyword.equals("Totem armor") || keyword.equals("Battle cry") || keyword.equals("Devoid") || keyword.equals("Riot") || keyword.equals("Daybound") || keyword.equals("Nightbound") || keyword.equals("Friends forever")) { @@ -2084,7 +2084,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { || keyword.startsWith("Fabricate") || keyword.startsWith("Soulshift") || keyword.startsWith("Bushido") || keyword.startsWith("Crew") || keyword.startsWith("Tribute") || keyword.startsWith("Absorb") || keyword.startsWith("Graft") || keyword.startsWith("Fading") || keyword.startsWith("Vanishing") - || keyword.startsWith("Afterlife") + || keyword.startsWith("Afterlife") || keyword.startsWith("Hideaway") || keyword.startsWith("Afflict") || keyword.startsWith ("Poisonous") || keyword.startsWith("Rampage") || keyword.startsWith("Renown") || keyword.startsWith("Annihilator") || keyword.startsWith("Devour")) { final String[] k = keyword.split(":"); @@ -2144,17 +2144,19 @@ public class Card extends GameEntity implements Comparable, IHasSVars { sbLong.append(keyword); sbLong.append(" (").append(Keyword.getInstance("Offering:" + offeringType).getReminderText()).append(")"); } else if (keyword.startsWith("Equip") || keyword.startsWith("Fortify") || keyword.startsWith("Outlast") - || keyword.startsWith("Unearth") || keyword.startsWith("Scavenge") || keyword.startsWith("Spectacle") - || keyword.startsWith("Evoke") || keyword.startsWith("Bestow") || keyword.startsWith("Dash") - || keyword.startsWith("Surge") || keyword.startsWith("Transmute") || keyword.startsWith("Suspend") - || keyword.equals("Undaunted") || keyword.startsWith("Monstrosity") || keyword.startsWith("Embalm") - || keyword.startsWith("Level up") || keyword.equals("Prowess") || keyword.startsWith("Eternalize") - || keyword.startsWith("Reinforce") || keyword.startsWith("Champion") || keyword.startsWith("Prowl") - || keyword.startsWith("Amplify") || keyword.startsWith("Ninjutsu") || keyword.startsWith("Adapt") + || keyword.startsWith("Unearth") || keyword.startsWith("Scavenge") + || keyword.startsWith("Spectacle") || keyword.startsWith("Evoke") + || keyword.startsWith("Bestow") || keyword.startsWith("Dash") || keyword.startsWith("Surge") + || keyword.startsWith("Transmute") || keyword.startsWith("Suspend") + || keyword.equals("Undaunted") || keyword.startsWith("Monstrosity") + || keyword.startsWith("Embalm") || keyword.startsWith("Level up") || keyword.equals("Prowess") + || keyword.startsWith("Eternalize") || keyword.startsWith("Reinforce") + || keyword.startsWith("Champion") || keyword.startsWith("Prowl") || keyword.startsWith("Adapt") + || keyword.startsWith("Amplify") || keyword.startsWith("Ninjutsu") || keyword.startsWith("Saga") || keyword.startsWith("Transfigure") || keyword.startsWith("Aura swap") || keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling") || keyword.startsWith("Encore") || keyword.startsWith("Mutate") || keyword.startsWith("Dungeon") - || keyword.startsWith("Class") || keyword.startsWith("Saga") || keyword.startsWith("Blitz")) { + || keyword.startsWith("Class") || keyword.startsWith("Blitz")) { // keyword parsing takes care of adding a proper description } else if (keyword.equals("Unblockable")) { sbLong.append(getName()).append(" can't be blocked.\r\n");