From 2956f0850304ca3868757ac8c9587307598a900e Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 31 Jan 2021 13:57:30 -0500 Subject: [PATCH 1/5] colossal_plow.txt --- forge-gui/res/cardsfolder/upcoming/colossal_plow.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/colossal_plow.txt diff --git a/forge-gui/res/cardsfolder/upcoming/colossal_plow.txt b/forge-gui/res/cardsfolder/upcoming/colossal_plow.txt new file mode 100644 index 00000000000..14ee55b8550 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/colossal_plow.txt @@ -0,0 +1,12 @@ +Name:Colossal Plow +ManaCost:2 +Types:Artifact Vehicle +PT:6/3 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigMana | TriggerDescription$ Whenever CARDNAME attacks, add {W}{W}{W} and you gain 3 life. Until end of turn, you don't lose this mana as steps and phases end. +SVar:TrigMana:DB$ Mana | Produced$ W W W | PersistentMana$ True | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 3 +K:Crew:6 +SVar:HasAttackEffect:TRUE +DeckHas:Ability$LifeGain +DeckHints:Color$White +Oracle:Whenever Colossal Plow attacks, add {W}{W}{W} and you gain 3 life. Until end of turn, you don’t lose this mana as steps and phases end.\nCrew 6 (Tap any number of creatures you control with total power 6 or more: This Vehicle becomes an artifact creature until end of turn.) From b905bb3b5ea480508bf6344592a3749787d9ed4a Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 31 Jan 2021 13:57:45 -0500 Subject: [PATCH 2/5] giant_ox.txt --- forge-gui/res/cardsfolder/upcoming/giant_ox.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/giant_ox.txt diff --git a/forge-gui/res/cardsfolder/upcoming/giant_ox.txt b/forge-gui/res/cardsfolder/upcoming/giant_ox.txt new file mode 100644 index 00000000000..d0a70efff0c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/giant_ox.txt @@ -0,0 +1,7 @@ +Name:Giant Ox +ManaCost:1 W +Types:Creature Ox +PT:0/6 +K:CARDNAME crews Vehicles using its toughness rather than its power. +DeckHints:Type$Vehicle +Oracle:Giant Ox crews Vehicles using its toughness rather than its power. From f876cb934aea6da87d261fb634413ef6a8736bc8 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 31 Jan 2021 13:58:42 -0500 Subject: [PATCH 3/5] adapt getTotalPower to allow for Giant Ox new keyword --- forge-game/src/main/java/forge/game/card/CardLists.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardLists.java b/forge-game/src/main/java/forge/game/card/CardLists.java index 5865184e728..84c89a2a8bd 100644 --- a/forge-game/src/main/java/forge/game/card/CardLists.java +++ b/forge-game/src/main/java/forge/game/card/CardLists.java @@ -401,11 +401,15 @@ public class CardLists { * * @param cardList the list of creature cards for which to sum the power * @param ignoreNegativePower if true, treats negative power as 0 + * @param crew for cards that crew with toughness rather than power */ - public static int getTotalPower(Iterable cardList, boolean ignoreNegativePower) { + public static int getTotalPower(Iterable cardList, boolean ignoreNegativePower, boolean crew) { int total = 0; for (final Card crd : cardList) { - total += ignoreNegativePower ? Math.max(0, crd.getNetPower()) : crd.getNetPower(); + if (crew && crd.hasKeyword("CARDNAME crews Vehicles using its toughness rather than its power.")) { + total += ignoreNegativePower ? Math.max(0, crd.getNetToughness()) : crd.getNetToughness(); + } + else total += ignoreNegativePower ? Math.max(0, crd.getNetPower()) : crd.getNetPower(); } return total; } From 0e9f24cafdc05e65433c566bafda740bc396c927 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 31 Jan 2021 14:00:37 -0500 Subject: [PATCH 4/5] tweaking usage of getTotalPower to include new Boolean --- forge-ai/src/main/java/forge/ai/AiAttackController.java | 2 +- forge-game/src/main/java/forge/game/cost/CostTapType.java | 4 +++- forge-gui/src/main/java/forge/player/HumanCostDecision.java | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiAttackController.java b/forge-ai/src/main/java/forge/ai/AiAttackController.java index 9785ddf0a8e..63b58c2ff25 100644 --- a/forge-ai/src/main/java/forge/ai/AiAttackController.java +++ b/forge-ai/src/main/java/forge/ai/AiAttackController.java @@ -1179,7 +1179,7 @@ public class AiAttackController { CardPredicates.hasKeyword(Keyword.LIFELINK))).isEmpty(); // total power of the defending creatures, used in predicting whether a gang block can kill the attacker - int defPower = CardLists.getTotalPower(validBlockers, true); + int defPower = CardLists.getTotalPower(validBlockers, true, false); if (!hasCombatEffect) { for (KeywordInterface inst : attacker.getKeywords()) { diff --git a/forge-game/src/main/java/forge/game/cost/CostTapType.java b/forge-game/src/main/java/forge/game/cost/CostTapType.java index fa62b2945a9..207cadc38b6 100644 --- a/forge-game/src/main/java/forge/game/cost/CostTapType.java +++ b/forge-game/src/main/java/forge/game/cost/CostTapType.java @@ -131,8 +131,10 @@ public class CostTapType extends CostPartWithList { } typeList = CardLists.filter(typeList, Presets.UNTAPPED); + boolean isCrew=false; if (ability.hasParam("Crew")) { typeList = CardLists.getNotKeyword(typeList, "CARDNAME can't crew Vehicles."); + isCrew=true; } if (sameType) { @@ -146,7 +148,7 @@ public class CostTapType extends CostPartWithList { if (totalPower) { final int i = Integer.parseInt(totalP); - return CardLists.getTotalPower(typeList, true) >= i; + return CardLists.getTotalPower(typeList, true, isCrew) >= i; } final Integer amount = this.convertAmount(); diff --git a/forge-gui/src/main/java/forge/player/HumanCostDecision.java b/forge-gui/src/main/java/forge/player/HumanCostDecision.java index 22d8f37323a..b5e4fb56a8c 100644 --- a/forge-gui/src/main/java/forge/player/HumanCostDecision.java +++ b/forge-gui/src/main/java/forge/player/HumanCostDecision.java @@ -1187,8 +1187,10 @@ public class HumanCostDecision extends CostDecisionMakerBase { source, ability); typeList = CardLists.filter(typeList, Presets.UNTAPPED); + boolean isCrew=false; if (ability.hasParam("Crew")) { typeList = CardLists.getNotKeyword(typeList, "CARDNAME can't crew Vehicles."); + isCrew=true; } if (c == null && !amount.equals("Any")) { @@ -1247,7 +1249,7 @@ public class HumanCostDecision extends CostDecisionMakerBase { inp.setCancelAllowed(true); inp.showAndWait(); - if (inp.hasCancelled() || CardLists.getTotalPower(inp.getSelected(), true) < i) { + if (inp.hasCancelled() || CardLists.getTotalPower(inp.getSelected(), true, isCrew) < i) { return null; } return PaymentDecision.card(inp.getSelected()); From f72f49def46167102d5919a543cec866755343ca Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 1 Feb 2021 08:11:20 -0500 Subject: [PATCH 5/5] clean up cost tweaks --- forge-game/src/main/java/forge/game/cost/CostTapType.java | 4 +--- forge-gui/src/main/java/forge/player/HumanCostDecision.java | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/cost/CostTapType.java b/forge-game/src/main/java/forge/game/cost/CostTapType.java index 207cadc38b6..f4f889f7c34 100644 --- a/forge-game/src/main/java/forge/game/cost/CostTapType.java +++ b/forge-game/src/main/java/forge/game/cost/CostTapType.java @@ -131,10 +131,8 @@ public class CostTapType extends CostPartWithList { } typeList = CardLists.filter(typeList, Presets.UNTAPPED); - boolean isCrew=false; if (ability.hasParam("Crew")) { typeList = CardLists.getNotKeyword(typeList, "CARDNAME can't crew Vehicles."); - isCrew=true; } if (sameType) { @@ -148,7 +146,7 @@ public class CostTapType extends CostPartWithList { if (totalPower) { final int i = Integer.parseInt(totalP); - return CardLists.getTotalPower(typeList, true, isCrew) >= i; + return CardLists.getTotalPower(typeList, true, ability.hasParam("Crew")) >= i; } final Integer amount = this.convertAmount(); diff --git a/forge-gui/src/main/java/forge/player/HumanCostDecision.java b/forge-gui/src/main/java/forge/player/HumanCostDecision.java index b5e4fb56a8c..1141e76244f 100644 --- a/forge-gui/src/main/java/forge/player/HumanCostDecision.java +++ b/forge-gui/src/main/java/forge/player/HumanCostDecision.java @@ -1187,10 +1187,8 @@ public class HumanCostDecision extends CostDecisionMakerBase { source, ability); typeList = CardLists.filter(typeList, Presets.UNTAPPED); - boolean isCrew=false; if (ability.hasParam("Crew")) { typeList = CardLists.getNotKeyword(typeList, "CARDNAME can't crew Vehicles."); - isCrew=true; } if (c == null && !amount.equals("Any")) { @@ -1249,7 +1247,7 @@ public class HumanCostDecision extends CostDecisionMakerBase { inp.setCancelAllowed(true); inp.showAndWait(); - if (inp.hasCancelled() || CardLists.getTotalPower(inp.getSelected(), true, isCrew) < i) { + if (inp.hasCancelled() || CardLists.getTotalPower(inp.getSelected(), true, ability.hasParam("Crew")) < i) { return null; } return PaymentDecision.card(inp.getSelected());