From e576dbcf93461ccde852ec2ccd5301d85c6cf5b4 Mon Sep 17 00:00:00 2001 From: Sol Date: Sun, 18 Jan 2015 17:00:03 +0000 Subject: [PATCH] - AI will no longer cast Bolster with no creatures on the BF - Manifest Ability can't be activated if the original card isn't a creature --- .../java/forge/ai/ability/CountersPutAi.java | 16 +++++++++++----- .../src/main/java/forge/game/card/Card.java | 4 +++- .../java/forge/game/card/CardFactoryUtil.java | 6 +++--- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java index 0fdd0de73c8..3d073ff6d8a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java @@ -6,10 +6,7 @@ import com.google.common.collect.Iterables; import forge.ai.*; import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityUtils; -import forge.game.card.Card; -import forge.game.card.CardCollection; -import forge.game.card.CardLists; -import forge.game.card.CounterType; +import forge.game.card.*; import forge.game.combat.CombatUtil; import forge.game.cost.Cost; import forge.game.cost.CostPart; @@ -88,7 +85,16 @@ public class CountersPutAi extends SpellAbilityAi { } } } - + + if (sa.hasParam("Bolster")) { + CardCollection creatsYouCtrl = CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); + CardCollection leastToughness = new CardCollection(Aggregates.listWithMin(creatsYouCtrl, CardPredicates.Accessors.fnGetDefense)); + if (leastToughness.isEmpty()) { + return false; + } + // TODO If Creature that would be Bolstered for some reason is useless, also return False + } + if (sa.hasParam("Monstrosity") && source.isMonstrous()) { return false; } 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 beda1d8d790..bbfdf3dd4c1 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -416,6 +416,8 @@ public class Card extends GameEntity implements Comparable { // Turn Face Down (even if it's DFC). ManaCost cost = this.getManaCost(); + boolean isCreature = this.isCreature(); + // Sometimes cards are manifested while already being face down if (!turnFaceDown(true) && currentStateName != CardStateName.FaceDown) { return null; @@ -430,7 +432,7 @@ public class Card extends GameEntity implements Comparable { c.setManifested(true); // Add manifest demorph static ability for creatures? - c.addSpellAbility(CardFactoryUtil.abilityManifestFaceUp(c, cost)); + c.addSpellAbility(CardFactoryUtil.abilityManifestFaceUp(c, cost, isCreature)); return c; } 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 551fc242af4..bd8826b816c 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -166,7 +166,7 @@ public class CardFactoryUtil { return morphUp; } - public static AbilityStatic abilityManifestFaceUp(final Card sourceCard, final ManaCost manaCost) { + public static AbilityStatic abilityManifestFaceUp(final Card sourceCard, final ManaCost manaCost, final boolean canFlip) { final Cost cost = new Cost(manaCost, false); final AbilityStatic manifestUp = new AbilityStatic(sourceCard, cost, null) { @@ -183,10 +183,10 @@ public class CardFactoryUtil { @Override public boolean canPlay() { return sourceCard.getController().equals(this.getActivatingPlayer()) && sourceCard.isFaceDown() - && sourceCard.isInPlay() && sourceCard.isManifested(); + && sourceCard.isInPlay() && sourceCard.isManifested() && canFlip; } - }; // morph_up + }; // manifest_up String costDesc = cost.toString(); // get rid of the ": " at the end