From a8db6f9370c3deb81cc0abaca95060737bf24c6c Mon Sep 17 00:00:00 2001 From: Northmoc Date: Fri, 24 Sep 2021 17:56:47 -0400 Subject: [PATCH 1/3] Card ability stringbuilder updates + support AdditionalDesc --- .../src/main/java/forge/game/card/Card.java | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 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 013fba6baa1..6a21658d256 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2257,6 +2257,23 @@ public class Card extends GameEntity implements Comparable, IHasSVars { sb.append("(As this Saga enters and after your draw step, add a lore counter. Sacrifice after "); sb.append(TextUtil.toRoman(getFinalChapterNr())).append(".)").append(linebreak); } + + // add As an additional cost to Permanent spells + if (state.getFirstAbility() != null && type.isPermanent()) { + SpellAbility first = state.getFirstAbility(); + if (first.isSpell()) { + Cost cost = first.getPayCosts(); + if (cost != null && !cost.isOnlyManaCost()) { + String additionalDesc = ""; + if (state.getFirstAbility().hasParam("AdditionalDesc")) { + additionalDesc = state.getFirstAbility().getParam("AdditionalDesc"); + } + sb.append(cost.toString().replace("\n", "")).append(" ").append(additionalDesc); + sb.append(linebreak); + } + } + } + if (monstrous) { sb.append("Monstrous\r\n"); } @@ -2267,6 +2284,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars { sb.append("Manifested\r\n"); } sb.append(keywordsToText(getUnhiddenKeywords(state))); + if ((keywordsToText(getUnhiddenKeywords(state))).length() > 0) { + sb.append(linebreak); + } // Process replacement effects first so that "enters the battlefield tapped" // and "as ~ enters the battlefield, choose...", etc can be printed @@ -2285,18 +2305,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } } - // add As an additional cost to Permanent spells - if (state.getFirstAbility() != null && type.isPermanent()) { - SpellAbility first = state.getFirstAbility(); - if (first.isSpell()) { - Cost cost = first.getPayCosts(); - if (cost != null && !cost.isOnlyManaCost()) { - sb.append(cost.toString()); - sb.append(linebreak); - } - } - } - if (this.getRules() != null && state.getView().getState().equals(CardStateName.Original)) { // try to look which what card this card can be meld to // only show this info if this card does not has the meld Effect itself From 50a713365cdcbb45bbc87f44fb62a93b69757e8b Mon Sep 17 00:00:00 2001 From: Northmoc Date: Fri, 24 Sep 2021 17:57:27 -0400 Subject: [PATCH 2/3] CostExile support X as amount to exile --- forge-game/src/main/java/forge/game/cost/CostExile.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/forge-game/src/main/java/forge/game/cost/CostExile.java b/forge-game/src/main/java/forge/game/cost/CostExile.java index 68a0981fd40..5eadae5516f 100644 --- a/forge-game/src/main/java/forge/game/cost/CostExile.java +++ b/forge-game/src/main/java/forge/game/cost/CostExile.java @@ -112,6 +112,10 @@ public class CostExile extends CostPartWithList { return String.format("Exile %s from the same %s", Cost.convertAmountTypeToWords(i, this.getAmount(), desc), origin); } + if (this.getAmount().equals("X")) { + return String.format ("Exile any number of %s from your %s", desc, origin); + } + return String.format("Exile %s from your %s", Cost.convertAmountTypeToWords(i, this.getAmount(), desc), origin); } From d0ddbf07a0706073d26510efbd7a587b70d5f2ba Mon Sep 17 00:00:00 2001 From: Northmoc Date: Fri, 24 Sep 2021 18:34:51 -0400 Subject: [PATCH 3/3] gorex_the_tombshell.txt --- .../cardsfolder/upcoming/gorex_the_tombshell.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/gorex_the_tombshell.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gorex_the_tombshell.txt b/forge-gui/res/cardsfolder/upcoming/gorex_the_tombshell.txt new file mode 100644 index 00000000000..02b1e348f8b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/gorex_the_tombshell.txt @@ -0,0 +1,15 @@ +Name:Gorex, the Tombshell +ManaCost:6 B B +Types:Legendary Creature Zombie Turtle +PT:4/4 +A:SP$ PermanentCreature | Cost$ 6 B B ExileFromGrave | AdditionalDesc$ This spell costs {2} less to cast for each card exiled this way. +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way. +SVar:X:Count$xPaid +SVar:Y:SVar$X/Times.2 +K:Deathtouch +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ Whenever CARDNAME attacks or dies, choose a card at random exiled with NICKNAME and put that card into its owner's hand. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChoose | Secondary$ True | TriggerDescription$ Whenever CARDNAME attacks or dies, choose a card at random exiled with NICKNAME and put that card into its owner's hand. +SVar:TrigChoose:DB$ ChooseCard | Amount$ 1 | AtRandom$ True | Choices$ Card.ExiledWithSource | ChoiceZone$ Exile | SubAbility$ DBChangeZone +SVar:DBChangeZone:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Exile | Destination$ Hand | Hidden$ True +DeckHas:Ability$Graveyard +Oracle:As an additional cost to cast this spell, you may exile any number of creature cards from your graveyard. This spell costs {2} less to cast for each card exiled this way.\nDeathtouch\nWhenever Gorex, the Tombshell attacks or dies, choose a card at random exiled with Gorex and put that card into its owner's hand.