From c8b57e90ed21d1912eeb29976c6955f3624c0343 Mon Sep 17 00:00:00 2001 From: excessum Date: Sat, 20 Sep 2014 10:24:43 +0000 Subject: [PATCH] - Extended OblivionRing logic for Suspension Field - Implemented rudimentary logic for Outlast - Fixed mana cost for Dazzling Ramparts --- .../src/main/java/forge/ai/AiController.java | 13 ++++++++++++- .../java/forge/ai/ability/CountersPutAi.java | 14 ++++++++++++++ .../res/cardsfolder/d/dazzling_ramparts.txt | 16 ++++++++-------- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index c19d45b62c1..67b55824791 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -730,7 +730,18 @@ public class AiController { final ZoneType origin = ZoneType.listValueOf(effectExile.getParam("Origin")).get(0); final TargetRestrictions tgt = effectExile.getTargetRestrictions(); final List list = CardLists.getValidCards(game.getCardsIn(origin), tgt.getValidTgts(), player, card); - if (CardLists.getTargetableCards(list, sa).isEmpty()) { + List targets = CardLists.getTargetableCards(list, sa); + if (sa.getHostCard().getName().equals("Suspension Field")) { + //existing "exile until leaves" enchantments only target opponent's permanents + final Player ai = sa.getActivatingPlayer(); + targets = CardLists.filter(targets, new Predicate() { + @Override + public boolean apply(final Card c) { + return !c.getController().equals(ai); + } + }); + } + if (targets.isEmpty()) { return AiPlayDecision.AnotherTime; } } 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 3cabe08bcb2..93700188bdc 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java @@ -11,6 +11,7 @@ import forge.game.card.CardLists; import forge.game.card.CounterType; import forge.game.combat.CombatUtil; import forge.game.cost.Cost; +import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.player.PlayerActionConfirmMode; @@ -162,6 +163,19 @@ public class CountersPutAi extends SpellAbilityAi { } } } + + PhaseHandler ph = ai.getGame().getPhaseHandler(); + if (sa.isOutlast()) { + if (ph.is(PhaseType.MAIN2, ai)) { //applicable to non-attackers only + float chance = 0.8f; + if (!ai.getOpponent().getCreaturesInPlay().isEmpty()) { + chance /= 2; //needs a better way to check if target is required as a blocker + } + return chance > r.nextFloat(); + } else { + return false; + } + } // don't use it if no counters to add if (amount <= 0) { diff --git a/forge-gui/res/cardsfolder/d/dazzling_ramparts.txt b/forge-gui/res/cardsfolder/d/dazzling_ramparts.txt index aafcc1e45e1..9bb0a4068cf 100644 --- a/forge-gui/res/cardsfolder/d/dazzling_ramparts.txt +++ b/forge-gui/res/cardsfolder/d/dazzling_ramparts.txt @@ -1,8 +1,8 @@ -Name:Dazzling Ramparts -ManaCost:1 W -Types:Creature Wall -PT:0/7 -K:Defender -A:AB$ Tap | Cost$ 1 W T | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Tap target creature. -SVar:Picture:http://www.wizards.com/global/images/magic/general/dazzling_ramparts.jpg -Oracle:Defender\n{1}{W}, {T}: Tap target creature. +Name:Dazzling Ramparts +ManaCost:4 W +Types:Creature Wall +PT:0/7 +K:Defender +A:AB$ Tap | Cost$ 1 W T | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Tap target creature. +SVar:Picture:http://www.wizards.com/global/images/magic/general/dazzling_ramparts.jpg +Oracle:Defender\n{1}{W}, {T}: Tap target creature. \ No newline at end of file