diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index e14d4f03071..94ae941f7bd 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -685,11 +685,12 @@ public class AiController { // save cards with flash for surprise blocking if (card.hasKeyword("Flash") - && (player.isUnlimitedHandSize() || player.getCardsIn(ZoneType.Hand).size() <= player.getMaxHandSize()) + && (player.isUnlimitedHandSize() || player.getCardsIn(ZoneType.Hand).size() <= player.getMaxHandSize() + || game.getPhaseHandler().getPhase().isBefore(PhaseType.END_OF_TURN)) && player.getManaPool().totalMana() <= 0 && (game.getPhaseHandler().isPlayerTurn(player) || game.getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) - && (!card.hasETBTrigger() || card.hasSVar("AmbushAI")) + && (!card.hasETBTrigger(true) || card.hasSVar("AmbushAI")) && !ComputerUtil.castPermanentInMain1(player, sa)) { return AiPlayDecision.AnotherTime; } @@ -1070,8 +1071,8 @@ public class AiController { } } - if (card.isCreature() && (card.getNetToughness() <= 0) && !card.hasStartOfKeyword("etbCounter") - && mana.countX() == 0 && !card.hasETBTrigger() + if (card.isCreature() && card.getNetToughness() <= 0 && !card.hasStartOfKeyword("etbCounter") + && mana.countX() == 0 && !card.hasETBTrigger(false) && !card.hasETBReplacement() && !card.hasSVar("NoZeroToughnessAI")) { return AiPlayDecision.WouldBecomeZeroToughnessCreature; 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 ff02b590b96..9f395b3905a 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -6254,7 +6254,7 @@ public class Card extends GameEntity implements Comparable { clearBlockedThisTurn(); } - public boolean hasETBTrigger() { + public boolean hasETBTrigger(final boolean drawbackOnly) { for (final Trigger tr : getTriggers()) { final Map params = tr.getMapParams(); if (tr.getMode() != TriggerType.ChangesZone) { @@ -6268,6 +6268,12 @@ public class Card extends GameEntity implements Comparable { if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) { continue; } + if (drawbackOnly && params.containsKey("Execute")){ + String exec = this.getSVar(params.get("Execute")); + if (exec.contains("AB$")) { + continue; + } + } return true; } return false; diff --git a/forge-gui/res/cardsfolder/o/oppression.txt b/forge-gui/res/cardsfolder/o/oppression.txt index f8ba0ee2461..ea3fab41cac 100644 --- a/forge-gui/res/cardsfolder/o/oppression.txt +++ b/forge-gui/res/cardsfolder/o/oppression.txt @@ -3,6 +3,6 @@ ManaCost:1 B B Types:Enchantment T:Mode$ SpellCast | ValidCard$ Card | TriggerZones$ Battlefield | Execute$ TrigDiscard | TriggerDescription$ Whenever a player casts a spell, that player discards a card. SVar:TrigDiscard:AB$Discard | Cost$ 0 | Defined$ TriggeredActivator | NumCards$ 1 | Mode$ TgtChoose -SVar:RemAIDeck:True +SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/oppression.jpg Oracle:Whenever a player casts a spell, that player discards a card. diff --git a/forge-gui/res/quest/duels/Superman 3.dck b/forge-gui/res/quest/duels/Superman 3.dck index 6ccbd2156c9..36cfff87f36 100644 --- a/forge-gui/res/quest/duels/Superman 3.dck +++ b/forge-gui/res/quest/duels/Superman 3.dck @@ -11,7 +11,7 @@ Deck Type=constructed 1 Servant of the Scale 2 High Sentinels of Arashin 1 Anafenza, Kin-Tree Spirit -2 Avatar of the Resolute +1 Avatar of the Resolute 1 Elite Scaleguard 1 Tuskguard Captain 1 Longshot Squad @@ -28,6 +28,7 @@ Deck Type=constructed 1 Forgotten Ancient 2 Juniper Order Ranger 1 Daghatar the Adamant +1 Kalonian Hydra 1 Dromoka, the Eternal 1 Spike Hatcher 1 Borborygmos