diff --git a/forge-ai/src/main/java/forge/ai/AiProps.java b/forge-ai/src/main/java/forge/ai/AiProps.java index c4b171c7be3..daa3ba05051 100644 --- a/forge-ai/src/main/java/forge/ai/AiProps.java +++ b/forge-ai/src/main/java/forge/ai/AiProps.java @@ -31,6 +31,7 @@ public enum AiProps { /** */ PLANAR_DIE_ROLL_HESITATION_CHANCE ("10"), CHEAT_WITH_MANA_ON_SHUFFLE ("false"), MOVE_EQUIPMENT_TO_BETTER_CREATURES ("from_useless_only"), + PRIORITIZE_MOVE_EQUIPMENT_IF_USELESS ("false"), PREDICT_SPELLS_FOR_MAIN2 ("true"), /** */ RESERVE_MANA_FOR_MAIN2_CHANCE ("0"); /** */ diff --git a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java index 32a8d4c187b..1c5fa56ae96 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java @@ -1026,19 +1026,23 @@ public class AttachAi extends SpellAbilityAi { return null; } + boolean uselessCreature = isUselessCreature(aiPlayer, attachSource.getEquippingCard()); + if (aic.getProperty(AiProps.MOVE_EQUIPMENT_TO_BETTER_CREATURES).equals("never")) { // Do not equip other creatures if the AI profile does not allow moving equipment around return null; } else if (aic.getProperty(AiProps.MOVE_EQUIPMENT_TO_BETTER_CREATURES).equals("from_useless_only")) { // Do not equip other creatures if the AI profile only allows moving equipment from useless creatures // and the equipped creature is still useful (not non-untapping+tapped and not set to can't attack/block) - if (!isUselessCreature(aiPlayer, attachSource.getEquippingCard())) { + if (!uselessCreature) { return null; } } // make sure to prioritize casting spells in main 2 (creatures, other equipment, etc.) rather than moving equipment around - if (aic.getCardMemory().isMemorySetEmpty(AiCardMemory.MemorySet.HELD_MANA_SOURCES)) { + boolean decideMoveFromUseless = uselessCreature && aic.getBooleanProperty(AiProps.PRIORITIZE_MOVE_EQUIPMENT_IF_USELESS); + + if (!decideMoveFromUseless && aic.getCardMemory().isMemorySetEmpty(AiCardMemory.MemorySet.HELD_MANA_SOURCES)) { SpellAbility futureSpell = aic.predictSpellToCastInMain2(ApiType.Attach); if (futureSpell != null && futureSpell.getHostCard() != null) { aic.reserveManaSourcesForMain2(futureSpell); diff --git a/forge-gui/res/ai/Default.ai b/forge-gui/res/ai/Default.ai index a82dec263ae..b4dee9d77a9 100644 --- a/forge-gui/res/ai/Default.ai +++ b/forge-gui/res/ai/Default.ai @@ -5,6 +5,7 @@ DEFAULT_PLANAR_DIE_ROLL_CHANCE=50 MULLIGAN_THRESHOLD=5 PLANAR_DIE_ROLL_HESITATION_CHANCE=10 MOVE_EQUIPMENT_TO_BETTER_CREATURES=from_useless_only -PREDICT_SPELLS_FOR_MAIN2=false -RESERVE_MANA_FOR_MAIN2_CHANCE=0 +PRIORITIZE_MOVE_EQUIPMENT_IF_USELESS=true +PREDICT_SPELLS_FOR_MAIN2=true +RESERVE_MANA_FOR_MAIN2_CHANCE=100 diff --git a/forge-gui/res/ai/Reckless.ai b/forge-gui/res/ai/Reckless.ai index 119f11bba4c..3842b541b6a 100644 --- a/forge-gui/res/ai/Reckless.ai +++ b/forge-gui/res/ai/Reckless.ai @@ -5,5 +5,6 @@ DEFAULT_PLANAR_DIE_ROLL_CHANCE=100 MULLIGAN_THRESHOLD=3 PLANAR_DIE_ROLL_HESITATION_CHANCE=0 MOVE_EQUIPMENT_TO_BETTER_CREATURES=always -PREDICT_SPELLS_FOR_MAIN2=false -RESERVE_MANA_FOR_MAIN2_CHANCE=0 +PRIORITIZE_MOVE_EQUIPMENT_IF_USELESS=false +PREDICT_SPELLS_FOR_MAIN2=true +RESERVE_MANA_FOR_MAIN2_CHANCE=100