From c20c214b9cb271137d31107843a1e5cf86bbd365 Mon Sep 17 00:00:00 2001 From: Agetian Date: Thu, 25 Apr 2024 10:19:07 +0300 Subject: [PATCH] UNF Embiggen - take four (#5156) * - UNF Embiggen by tehdiplomat * - Undo some obsolete changes. --------- Co-authored-by: Chris H --- .../java/forge/game/ability/AbilityUtils.java | 34 +++++++++++++++++-- forge-gui/res/cardsfolder/e/embiggen.txt | 6 ++++ 2 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 forge-gui/res/cardsfolder/e/embiggen.txt diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 15278e49798..b7a3a4892d3 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2634,6 +2634,16 @@ public class AbilityUtils { return game.getPhaseHandler().getPlanarDiceSpecialActionThisTurn(); } + if (sq[0].equals("AllTypes")) { + List cards = getDefinedCards(c, sq[1], ctb); + + int amount = countCardTypesFromList(cards, false) + + countSuperTypesFromList(cards) + + countSubTypesFromList(cards); + + return doXMath(amount, expr, c, ctb); + } + if (sq[0].equals("TotalTurns")) { return doXMath(game.getPhaseHandler().getTurn(), expr, c, ctb); } @@ -3364,7 +3374,7 @@ public class AbilityUtils { //SacrificedPermanentTypesThisTurn if (l[0].startsWith("SacrificedPermanentTypesThisTurn")) { - return doXMath(getCardTypesFromList(player.getSacrificedThisTurn(), true), m, source, ctb); + return doXMath(countCardTypesFromList(player.getSacrificedThisTurn(), true), m, source, ctb); } final String[] sq = l[0].split("\\."); @@ -3647,7 +3657,7 @@ public class AbilityUtils { } if (string.startsWith("CardTypes")) { - return doXMath(getCardTypesFromList(paidList, string.startsWith("CardTypesPermanent")), CardFactoryUtil.extractOperators(string), source, ctb); + return doXMath(countCardTypesFromList(paidList, string.startsWith("CardTypesPermanent")), CardFactoryUtil.extractOperators(string), source, ctb); } String filteredString = string; @@ -3865,7 +3875,7 @@ public class AbilityUtils { return list; } - public static int getCardTypesFromList(final Iterable list, boolean permanentTypes) { + public static int countCardTypesFromList(final Iterable list, boolean permanentTypes) { EnumSet types = EnumSet.noneOf(CardType.CoreType.class); for (Card c1 : list) { Iterables.addAll(types, c1.getType().getCoreTypes()); @@ -3875,6 +3885,24 @@ public class AbilityUtils { return types.size(); } + public static int countSuperTypesFromList(final Iterable list) { + EnumSet types = EnumSet.noneOf(CardType.Supertype.class); + for (Card c1 : list) { + Iterables.addAll(types, c1.getType().getSupertypes()); + } + + return types.size(); + } + + public static int countSubTypesFromList(final Iterable list) { + Set types = new HashSet<>(); + for (Card c1 : list) { + Iterables.addAll(types, c1.getType().getSubtypes()); + } + + return types.size(); + } + /** * Checks if an ability source can be considered a "broken link" on a specific host * (which usually means it won't have its normal effect). diff --git a/forge-gui/res/cardsfolder/e/embiggen.txt b/forge-gui/res/cardsfolder/e/embiggen.txt new file mode 100644 index 00000000000..7a996ef5a28 --- /dev/null +++ b/forge-gui/res/cardsfolder/e/embiggen.txt @@ -0,0 +1,6 @@ +Name:Embiggen +ManaCost:G +Types:Instant +A:SP$ Pump | Cost$ G | ValidTgts$ Creature.nonBrushwagg | TgtPrompt$ Select target non Brushwagg creature | NumAtt$ +X | NumDef$ +X | SpellDescription$ Until end of turn, target non-Brushwagg creature gets +1/+1 for each supertype, card type, and subtype it has. +SVar:X:Count$AllTypes.Targeted +Oracle:Until end of turn, target non-Brushwagg creature gets +1/+1 for each supertype, card type, and subtype it has.