diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index 2646a5458ec..7530da2d070 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -3253,9 +3253,10 @@ public static boolean shouldSacrificeThreatenedCard(Player ai, Card c, SpellAbil return false; // no use in sacrificing a card in an attempt to regenerate it } Combat combat = ai.getGame().getCombat(); - boolean isThreatened = (c.isCreature() && ComputerUtil.predictCreatureWillDieThisTurn(ai, c, sa, false) + // The payoff does not save the sacrificed card, so assess the pending threat on its own. + boolean isThreatened = (c.isCreature() && ComputerUtil.predictCreatureWillDieThisTurn(ai, c, null, false) && !ComputerUtilCombat.willOpposingCreatureDieInCombat(ai, c, combat) && !ComputerUtilCombat.isDangerousToSacInCombat(ai, c, combat)) - || (!c.isCreature() && ComputerUtil.predictThreatenedObjects(ai, sa).contains(c)); + || (!c.isCreature() && ComputerUtil.predictThreatenedObjects(ai, null).contains(c)); return isThreatened; } 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 bb3aa9d7836..e257c59d323 100644 --- a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java @@ -44,6 +44,10 @@ public class TokenAi extends SpellAbilityAi { @Override protected boolean checkPhaseRestrictions(final Player ai, final SpellAbility sa, final PhaseHandler ph) { + if (ComputerUtil.activateForCost(sa, ai)) { + return true; + } + final Card source = sa.getHostCard(); // Planeswalker-related flags boolean pwMinus = false; @@ -133,6 +137,10 @@ protected boolean checkPhaseRestrictions(final Player ai, final SpellAbility sa, @Override protected AiAbilityDecision checkApiLogic(final Player ai, final SpellAbility sa) { + if (ComputerUtil.activateForCost(sa, ai)) { + return new AiAbilityDecision(100, AiPlayDecision.WillPlay); + } + final Game game = ai.getGame(); final Player opp = ai.getWeakestOpponent(); diff --git a/forge-gui/res/cardsfolder/h/homarid_spawning_bed.txt b/forge-gui/res/cardsfolder/h/homarid_spawning_bed.txt index 486aedc1797..e38973dd884 100644 --- a/forge-gui/res/cardsfolder/h/homarid_spawning_bed.txt +++ b/forge-gui/res/cardsfolder/h/homarid_spawning_bed.txt @@ -3,6 +3,5 @@ ManaCost:U U Types:Enchantment A:AB$ Token | Cost$ 1 U U Sac<1/Creature.Blue/blue creature> | TokenAmount$ X | TokenScript$ u_1_1_camarid | TokenOwner$ You | SpellDescription$ Create X 1/1 blue Camarid creature tokens, where X is the sacrificed creature's mana value. SVar:X:Sacrificed$CardManaCost -AI:RemoveDeck:All SVar:NonStackingEffect:True Oracle:{1}{U}{U}, Sacrifice a blue creature: Create X 1/1 blue Camarid creature tokens, where X is the sacrificed creature's mana value.