From 3b19e3db35cfe1ff56c6bfb307fb42670b5b688d Mon Sep 17 00:00:00 2001
From: Oleg Agafonov <jaydi85@gmail.com>
Date: Wed, 1 Jul 2020 13:15:39 +0400
Subject: [PATCH] * AI: fixed that computer can't play some cards correctly (Ad
 Nauseam, Crazed Firecat, Fiery Gambit);

---
 Mage.Sets/src/mage/cards/a/AdNauseam.java     | 24 ++++++++++++-------
 Mage.Sets/src/mage/cards/c/CrazedFirecat.java |  6 ++++-
 Mage.Sets/src/mage/cards/f/FieryGambit.java   | 13 ++++++----
 3 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/Mage.Sets/src/mage/cards/a/AdNauseam.java b/Mage.Sets/src/mage/cards/a/AdNauseam.java
index 8242867b1d..743144cf13 100644
--- a/Mage.Sets/src/mage/cards/a/AdNauseam.java
+++ b/Mage.Sets/src/mage/cards/a/AdNauseam.java
@@ -1,7 +1,5 @@
-
 package mage.cards.a;
 
-import java.util.UUID;
 import mage.abilities.Ability;
 import mage.abilities.effects.OneShotEffect;
 import mage.cards.Card;
@@ -14,6 +12,8 @@ import mage.constants.Zone;
 import mage.game.Game;
 import mage.players.Player;
 
+import java.util.UUID;
+
 /**
  * @author North
  */
@@ -62,13 +62,19 @@ class AdNauseamEffect extends OneShotEffect {
         }
         while (controller.chooseUse(outcome, message, source, game) && controller.getLibrary().hasCards()) {
             Card card = controller.getLibrary().getFromTop(game);
-            if (card != null) {
-                controller.moveCards(card, Zone.HAND, source, game);
-                int cmc = card.getConvertedManaCost();
-                if (cmc > 0) {
-                    controller.loseLife(cmc, game, false);
-                }
-                controller.revealCards(sourceCard.getIdName() + " put into hand", new CardsImpl(card), game);
+            if (card == null) {
+                break;
+            }
+            controller.moveCards(card, Zone.HAND, source, game);
+            int cmc = card.getConvertedManaCost();
+            if (cmc > 0) {
+                controller.loseLife(cmc, game, false);
+            }
+            controller.revealCards(sourceCard.getIdName() + " put into hand", new CardsImpl(card), game);
+
+            // AI workaround to stop infinite choose (only one card allows)
+            if (!controller.isHuman() && !controller.isTestMode()) {
+                break;
             }
         }
         return true;
diff --git a/Mage.Sets/src/mage/cards/c/CrazedFirecat.java b/Mage.Sets/src/mage/cards/c/CrazedFirecat.java
index a19b1e8233..aacbd36d13 100644
--- a/Mage.Sets/src/mage/cards/c/CrazedFirecat.java
+++ b/Mage.Sets/src/mage/cards/c/CrazedFirecat.java
@@ -1,4 +1,3 @@
-
 package mage.cards.c;
 
 import mage.MageInt;
@@ -68,6 +67,11 @@ class CrazedFirecatEffect extends OneShotEffect {
             int flipsWon = 0;
             while (controller.flipCoin(source, game, true)) {
                 flipsWon++;
+
+                // AI workaround to stop on good condition
+                if (!controller.isHuman() && !controller.isTestMode() && flipsWon >= 2) {
+                    break;
+                }
             }
             sourceObject.addCounters(CounterType.P1P1.createInstance(flipsWon), source, game);
             return true;
diff --git a/Mage.Sets/src/mage/cards/f/FieryGambit.java b/Mage.Sets/src/mage/cards/f/FieryGambit.java
index e0e22ba8fe..748885ddad 100644
--- a/Mage.Sets/src/mage/cards/f/FieryGambit.java
+++ b/Mage.Sets/src/mage/cards/f/FieryGambit.java
@@ -1,7 +1,5 @@
-
 package mage.cards.f;
 
-import java.util.UUID;
 import mage.MageObject;
 import mage.abilities.Ability;
 import mage.abilities.effects.OneShotEffect;
@@ -17,14 +15,15 @@ import mage.game.permanent.Permanent;
 import mage.players.Player;
 import mage.target.common.TargetCreaturePermanent;
 
+import java.util.UUID;
+
 /**
- *
  * @author LevelX2
  */
 public final class FieryGambit extends CardImpl {
 
     public FieryGambit(UUID ownerId, CardSetInfo setInfo) {
-        super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{R}");
+        super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}");
 
         // Flip a coin until you lose a flip or choose to stop flipping. If you lose a flip, Fiery Gambit has no effect. If you win one or more flips, Fiery Gambit deals 3 damage to target creature. If you win two or more flips, Fiery Gambit deals 6 damage to each opponent. If you win three or more flips, draw nine cards and untap all lands you control.
         this.getSpellAbility().addEffect(new FieryGambitEffect());
@@ -71,6 +70,12 @@ class FieryGambitEffect extends OneShotEffect {
                     controllerStopped = true;
                     break;
                 }
+
+                // AI workaround to stop flips on good result
+                if (!controller.isHuman() && !controller.isTestMode() && flipsWon >= 3) {
+                    controllerStopped = true;
+                    break;
+                }
             }
             if (controllerStopped) {
                 Permanent creature = game.getPermanent(getTargetPointer().getFirst(game, source));