- Random favorable trades on block: when evaluating face-down Morph of Manifested creature, evaluate it based on its original face, not the face down 2/2 one.

This commit is contained in:
Agetian
2017-09-13 14:12:32 +00:00
parent a0abaf62b4
commit 24df4e78c7

View File

@@ -19,6 +19,7 @@ package forge.ai;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import forge.card.CardStateName;
import forge.game.CardTraitBase; import forge.game.CardTraitBase;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.card.*; import forge.game.card.*;
@@ -622,6 +623,11 @@ public class AiBlockController {
int evalAtk = ComputerUtilCard.evaluateCreature(attacker, false, false); int evalAtk = ComputerUtilCard.evaluateCreature(attacker, false, false);
int evalBlk = ComputerUtilCard.evaluateCreature(blocker, false, false); int evalBlk = ComputerUtilCard.evaluateCreature(blocker, false, false);
if (blocker.isFaceDown() && blocker.getState(CardStateName.Original).getType().isCreature()) {
// if the blocker is a face-down creature (e.g. cast via Morph, Manifest), evaluate it
// in relation to the original state, not to the Morph state
evalBlk = ComputerUtilCard.evaluateCreature(Card.fromPaperCard(blocker.getPaperCard(), ai), true, false);
}
int chanceToSavePW = chanceToTradeDownToSaveWalker > 0 && evalAtk + 1 < evalBlk ? chanceToTradeDownToSaveWalker : chanceToTradeToSaveWalker; int chanceToSavePW = chanceToTradeDownToSaveWalker > 0 && evalAtk + 1 < evalBlk ? chanceToTradeDownToSaveWalker : chanceToTradeToSaveWalker;
boolean powerParityOrHigher = blocker.getNetPower() >= attacker.getNetPower(); boolean powerParityOrHigher = blocker.getNetPower() >= attacker.getNetPower();
boolean creatureParityOrAllowedDiff = aiCreatureCount boolean creatureParityOrAllowedDiff = aiCreatureCount