From cb29ae319e8528d31f22b36db419a301d82b9a0b Mon Sep 17 00:00:00 2001 From: Agetian Date: Mon, 10 Dec 2018 19:37:26 +0300 Subject: [PATCH] - Added an experimental AI property controlling damage chaining. --- forge-ai/src/main/java/forge/ai/AiProps.java | 3 ++- forge-ai/src/main/java/forge/ai/ComputerUtilAbility.java | 6 ++++++ forge-gui/res/ai/Experimental.ai | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/AiProps.java b/forge-ai/src/main/java/forge/ai/AiProps.java index 1f8b56a9720..ae344feaf1c 100644 --- a/forge-ai/src/main/java/forge/ai/AiProps.java +++ b/forge-ai/src/main/java/forge/ai/AiProps.java @@ -126,9 +126,10 @@ public enum AiProps { /** */ FLASH_USE_BUFF_AURAS_AS_COMBAT_TRICKS("true"), FLASH_BUFF_AURA_CHANCE_TO_CAST_EARLY("1"), FLASH_BUFF_AURA_CHANCE_CAST_AT_EOT("5"), - FLASH_BUFF_AURA_CHANCE_TO_RESPOND_TO_STACK("100"); /** */ + FLASH_BUFF_AURA_CHANCE_TO_RESPOND_TO_STACK("100"), /** */ // Experimental features, must be promoted or removed after extensive testing and, ideally, defaulting // <-- There are no experimental options here --> + CHANCE_TO_CHAIN_TWO_DAMAGE_SPELLS("0"); /** */ private final String strDefaultVal; diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilAbility.java b/forge-ai/src/main/java/forge/ai/ComputerUtilAbility.java index aaf6bbae40c..a79418b623b 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilAbility.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilAbility.java @@ -23,6 +23,7 @@ import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetRestrictions; import forge.game.zone.ZoneType; +import forge.util.MyRandom; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; @@ -190,6 +191,11 @@ public class ComputerUtilAbility { } public static Pair getDamageAfterChainingSpells(Player ai, SpellAbility sa, String damage) { + int chance = ((PlayerControllerAi)ai.getController()).getAi().getIntProperty(AiProps.CHANCE_TO_CHAIN_TWO_DAMAGE_SPELLS); + if (!MyRandom.percentTrue(chance)) { + return null; + } + if (sa.getSubAbility() != null || sa.getParent() != null) { // Doesn't work yet for complex decisions where damage is only a part of the decision process return null; diff --git a/forge-gui/res/ai/Experimental.ai b/forge-gui/res/ai/Experimental.ai index 5b9048770f5..48b4e967fe9 100644 --- a/forge-gui/res/ai/Experimental.ai +++ b/forge-gui/res/ai/Experimental.ai @@ -277,3 +277,8 @@ MOJHOSTO_CHANCE_TO_USE_JHOIRA_COPY_INSTANT=20 # -- different name if necessary -- # <-- there are no experimental options here at the moment --> + +# The chance that the AI will try to chain two damage spells or a damage spell and a debuffing pump spell to try to +# kill a bigger creature or a planeswalker. +CHANCE_TO_CHAIN_TWO_DAMAGE_SPELLS=100 +