diff --git a/forge-ai/src/main/java/forge/ai/AiProps.java b/forge-ai/src/main/java/forge/ai/AiProps.java index 1cd25db3f3c..f4d63bf8108 100644 --- a/forge-ai/src/main/java/forge/ai/AiProps.java +++ b/forge-ai/src/main/java/forge/ai/AiProps.java @@ -50,7 +50,8 @@ public enum AiProps { /** */ STRIPMINE_MIN_LANDS_FOR_NO_TIMING_CHECK ("3"), /** */ STRIPMINE_MIN_LANDS_OTB_FOR_NO_TEMPO_CHECK ("6"), /** */ STRIPMINE_MAX_LANDS_TO_ATTEMPT_MANALOCKING ("3"), /** */ - STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP ("false"); /** */ + STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP ("false"), + TOKEN_GENERATION_ABILITY_CHANCE ("100"); /** */ private final String strDefaultVal; diff --git a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java index f0c11fd407c..ac7515020cf 100644 --- a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java @@ -7,11 +7,7 @@ import java.util.List; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; -import forge.ai.ComputerUtil; -import forge.ai.ComputerUtilCard; -import forge.ai.ComputerUtilMana; -import forge.ai.SpellAbilityAi; -import forge.ai.SpellApiToAi; +import forge.ai.*; import forge.game.Game; import forge.game.GameEntity; import forge.game.ability.AbilityFactory; @@ -234,8 +230,12 @@ public class TokenAi extends SpellAbilityAi { } } - return true; - //return MyRandom.getRandom().nextFloat() < .8; + double chance = 1.0F; // 100% + if (ai.getController().isAI()) { + chance = (double)((PlayerControllerAi) ai.getController()).getAi().getIntProperty(AiProps.TOKEN_GENERATION_ABILITY_CHANCE) / 100; + } + + return MyRandom.getRandom().nextFloat() <= chance; } /** diff --git a/forge-gui/res/ai/Cautious.ai b/forge-gui/res/ai/Cautious.ai index c3bcd956b82..f0186c2a705 100644 --- a/forge-gui/res/ai/Cautious.ai +++ b/forge-gui/res/ai/Cautious.ai @@ -44,4 +44,8 @@ STRIPMINE_MIN_LANDS_IN_HAND_TO_ACTIVATE=1 STRIPMINE_MIN_LANDS_FOR_NO_TIMING_CHECK=9999 STRIPMINE_MIN_LANDS_OTB_FOR_NO_TEMPO_CHECK=8 STRIPMINE_MAX_LANDS_TO_ATTEMPT_MANALOCKING=3 -STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP=true \ No newline at end of file +STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP=true + +# A chance to use the token-generation abilities (The Hive, etc.). If less than 100, the AI will sometimes +# feel "forgetful" (might miss activation of planeswalker token abilities, The Hive on defense, etc.) +TOKEN_GENERATION_ABILITY_CHANCE=100 \ No newline at end of file diff --git a/forge-gui/res/ai/Default.ai b/forge-gui/res/ai/Default.ai index 590aa264eef..6e1a9641cd4 100644 --- a/forge-gui/res/ai/Default.ai +++ b/forge-gui/res/ai/Default.ai @@ -45,3 +45,7 @@ STRIPMINE_MIN_LANDS_FOR_NO_TIMING_CHECK=9999 STRIPMINE_MIN_LANDS_OTB_FOR_NO_TEMPO_CHECK=6 STRIPMINE_MAX_LANDS_TO_ATTEMPT_MANALOCKING=3 STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP=true + +# A chance to use the token-generation abilities (The Hive, etc.). If less than 100, the AI will sometimes +# feel "forgetful" (might miss activation of planeswalker token abilities, The Hive on defense, etc.) +TOKEN_GENERATION_ABILITY_CHANCE=100 diff --git a/forge-gui/res/ai/Experimental.ai b/forge-gui/res/ai/Experimental.ai index 174d0d67d53..aca6757dafb 100644 --- a/forge-gui/res/ai/Experimental.ai +++ b/forge-gui/res/ai/Experimental.ai @@ -44,4 +44,8 @@ STRIPMINE_MIN_LANDS_IN_HAND_TO_ACTIVATE=1 STRIPMINE_MIN_LANDS_FOR_NO_TIMING_CHECK=9999 STRIPMINE_MIN_LANDS_OTB_FOR_NO_TEMPO_CHECK=6 STRIPMINE_MAX_LANDS_TO_ATTEMPT_MANALOCKING=3 -STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP=true \ No newline at end of file +STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP=true + +# A chance to use the token-generation abilities (The Hive, etc.). If less than 100, the AI will sometimes +# feel "forgetful" (might miss activation of planeswalker token abilities, The Hive on defense, etc.) +TOKEN_GENERATION_ABILITY_CHANCE=100 \ No newline at end of file diff --git a/forge-gui/res/ai/Reckless.ai b/forge-gui/res/ai/Reckless.ai index bafbadbbe1e..d4666a080bc 100644 --- a/forge-gui/res/ai/Reckless.ai +++ b/forge-gui/res/ai/Reckless.ai @@ -44,4 +44,8 @@ STRIPMINE_MIN_LANDS_IN_HAND_TO_ACTIVATE=1 STRIPMINE_MIN_LANDS_FOR_NO_TIMING_CHECK=3 STRIPMINE_MIN_LANDS_OTB_FOR_NO_TEMPO_CHECK=4 STRIPMINE_MAX_LANDS_TO_ATTEMPT_MANALOCKING=4 -STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP=true \ No newline at end of file +STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP=true + +# A chance to use the token-generation abilities (The Hive, etc.). If less than 100, the AI will sometimes +# feel "forgetful" (might miss activation of planeswalker token abilities, The Hive on defense, etc.) +TOKEN_GENERATION_ABILITY_CHANCE=100 \ No newline at end of file