From 659f7903250d3696a4fc5b99333a84de916a775b Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Fri, 18 Feb 2011 23:22:31 -0500 Subject: [PATCH] AI fixes and deck construction --- .../java/mage/client/cards/CardsList.form | 16 +- .../java/mage/client/cards/CardsList.java | 12 +- Mage.Server.Plugins/Mage.Player.AI/pom.xml | 11 ++ .../java/mage/player/ai/ComputerPlayer.java | 160 +++++++++++++----- .../src/mage/player/ai/ComputerPlayer2.java | 37 +++- .../src/mage/player/ai/ComputerPlayer3.java | 24 ++- .../mage/player/ai/GameStateEvaluator.java | 13 +- .../src/mage/player/ai/SimulatedPlayer.java | 2 +- .../src/mage/player/ai/SimulationNode.java | 16 +- Mage.Server/plugins/mage-player-ai.jar | Bin 40130 -> 41978 bytes Mage.Server/plugins/mage-player-aiminimax.jar | Bin 36416 -> 36861 bytes .../plugins/mage-tournament-sealed.jar | Bin 0 -> 5049 bytes .../tournament/TournamentController.java | 2 +- Mage/src/mage/Mana.java | 20 +++ .../abilities/costs/mana/ColoredManaCost.java | 5 +- .../abilities/costs/mana/GenericManaCost.java | 5 +- .../abilities/costs/mana/HybridManaCost.java | 10 +- .../mage/abilities/costs/mana/ManaCost.java | 2 + .../abilities/costs/mana/ManaCostImpl.java | 7 +- .../mage/abilities/costs/mana/ManaCosts.java | 2 + .../abilities/costs/mana/ManaCostsImpl.java | 9 + .../costs/mana/MonoHybridManaCost.java | 6 +- .../costs/mana/VariableManaCost.java | 1 + Mage/src/mage/game/draft/DraftImpl.java | 2 +- Mage/src/mage/game/draft/DraftPlayer.java | 13 +- .../mage/game/permanent/PermanentImpl.java | 5 + .../mage/game/tournament/TournamentImpl.java | 10 +- 27 files changed, 271 insertions(+), 119 deletions(-) create mode 100644 Mage.Server/plugins/mage-tournament-sealed.jar diff --git a/Mage.Client/src/main/java/mage/client/cards/CardsList.form b/Mage.Client/src/main/java/mage/client/cards/CardsList.form index 38981bdff1..85696ffe74 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsList.form +++ b/Mage.Client/src/main/java/mage/client/cards/CardsList.form @@ -27,7 +27,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -57,13 +57,13 @@ - + - - - - - + + + + + diff --git a/Mage.Client/src/main/java/mage/client/cards/CardsList.java b/Mage.Client/src/main/java/mage/client/cards/CardsList.java index 60556eafef..413b1b5201 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsList.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardsList.java @@ -200,13 +200,13 @@ public class CardsList extends javax.swing.JPanel implements MouseListener { jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() - .addComponent(lblCount, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(lblCount, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(lblCreatureCount, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(lblCreatureCount, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(lblLandCount) + .addComponent(lblLandCount, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, 338, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(cbSortBy, 0, 353, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -222,14 +222,14 @@ public class CardsList extends javax.swing.JPanel implements MouseListener { layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 553, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 639, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 321, Short.MAX_VALUE)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 397, Short.MAX_VALUE)) ); }// //GEN-END:initComponents diff --git a/Mage.Server.Plugins/Mage.Player.AI/pom.xml b/Mage.Server.Plugins/Mage.Player.AI/pom.xml index c7b14f1288..e489b8ebb9 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AI/pom.xml @@ -15,11 +15,22 @@ Mage Player AI + + log4j + log4j + 1.2.14 + jar + ${project.groupId} Mage ${project.version} + + ${project.groupId} + Mage-Sets + ${project.version} + diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index 399f7348d5..f9237e902a 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -33,11 +33,10 @@ import java.io.IOException; import java.io.Serializable; import java.util.*; import java.util.Map.Entry; -import java.util.logging.Level; -import java.util.logging.Logger; import mage.Constants; import mage.Constants.CardType; +import mage.Constants.ColoredManaSymbol; import mage.Constants.Outcome; import mage.Constants.RangeOfInfluence; import mage.Constants.Zone; @@ -83,6 +82,7 @@ import mage.game.tournament.Tournament; import mage.player.ai.utils.RateCard; import mage.players.Player; import mage.players.PlayerImpl; +import mage.sets.Sets; import mage.target.Target; import mage.target.TargetAmount; import mage.target.TargetCard; @@ -93,8 +93,8 @@ import mage.target.common.TargetDiscard; import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreatureOrPlayerAmount; import mage.util.Copier; -import mage.util.Logging; import mage.util.TreeNode; +import org.apache.log4j.Logger; /** * @@ -104,7 +104,7 @@ import mage.util.TreeNode; */ public class ComputerPlayer> extends PlayerImpl implements Player { - private final static transient Logger logger = Logging.getLogger(ComputerPlayer.class.getName()); + private final static transient Logger logger = Logger.getLogger(ComputerPlayer.class); private transient Map unplayable = new TreeMap(); private transient List playableNonInstant = new ArrayList(); private transient List playableInstant = new ArrayList(); @@ -127,7 +127,7 @@ public class ComputerPlayer> extends PlayerImpl i @Override public boolean chooseMulligan(Game game) { - logger.fine("chooseMulligan"); + logger.debug("chooseMulligan"); if (hand.size() < 6) return false; Set lands = hand.getCards(new FilterLandCard(), game); @@ -143,8 +143,8 @@ public class ComputerPlayer> extends PlayerImpl i @Override public boolean choose(Outcome outcome, Target target, Game game, Map options) { - if (logger.isLoggable(Level.FINE)) - logger.fine("chooseTarget: " + outcome.toString() + ":" + target.toString()); + if (logger.isDebugEnabled()) + logger.debug("chooseTarget: " + outcome.toString() + ":" + target.toString()); UUID opponentId = game.getOpponents(playerId).iterator().next(); if (target instanceof TargetPlayer) { if (outcome.isGood()) { @@ -209,8 +209,8 @@ public class ComputerPlayer> extends PlayerImpl i @Override public boolean chooseTarget(Outcome outcome, Target target, Ability source, Game game) { - if (logger.isLoggable(Level.FINE)) - logger.fine("chooseTarget: " + outcome.toString() + ":" + target.toString()); + if (logger.isDebugEnabled()) + logger.debug("chooseTarget: " + outcome.toString() + ":" + target.toString()); UUID opponentId = game.getOpponents(playerId).iterator().next(); if (target instanceof TargetPlayer) { if (outcome.isGood()) { @@ -303,8 +303,8 @@ public class ComputerPlayer> extends PlayerImpl i @Override public boolean chooseTargetAmount(Outcome outcome, TargetAmount target, Ability source, Game game) { - if (logger.isLoggable(Level.FINE)) - logger.fine("chooseTarget: " + outcome.toString() + ":" + target.toString()); + if (logger.isDebugEnabled()) + logger.debug("chooseTarget: " + outcome.toString() + ":" + target.toString()); UUID opponentId = game.getOpponents(playerId).iterator().next(); if (target instanceof TargetCreatureOrPlayerAmount) { if (game.getPlayer(opponentId).getLife() <= target.getAmountRemaining()) { @@ -332,7 +332,7 @@ public class ComputerPlayer> extends PlayerImpl i @Override public void priority(Game game) { - logger.fine("priority"); + logger.debug("priority"); UUID opponentId = game.getOpponents(playerId).iterator().next(); if (game.getActivePlayerId().equals(playerId)) { if (game.isMainPhase() && game.getStack().isEmpty()) { @@ -418,7 +418,7 @@ public class ComputerPlayer> extends PlayerImpl i } protected void playLand(Game game) { - logger.fine("playLand"); + logger.debug("playLand"); Set lands = hand.getCards(new FilterLandCard(), game); while (lands.size() > 0 && this.landsPlayed < this.landsPerTurn) { if (lands.size() == 1) @@ -430,7 +430,7 @@ public class ComputerPlayer> extends PlayerImpl i } protected void playALand(Set lands, Game game) { - logger.fine("playALand"); + logger.debug("playALand"); //play a land that will allow us to play an unplayable for (Mana mana: unplayable.keySet()) { for (Card card: lands) { @@ -538,19 +538,19 @@ public class ComputerPlayer> extends PlayerImpl i } } } - if (logger.isLoggable(Level.FINE)) - logger.fine("findPlayables: " + playableInstant.toString() + "---" + playableNonInstant.toString() + "---" + playableAbilities.toString() ); + if (logger.isDebugEnabled()) + logger.debug("findPlayables: " + playableInstant.toString() + "---" + playableNonInstant.toString() + "---" + playableAbilities.toString() ); } @Override protected ManaOptions getManaAvailable(Game game) { -// logger.fine("getManaAvailable"); +// logger.debug("getManaAvailable"); return super.getManaAvailable(game); } @Override public boolean playMana(ManaCost unpaid, Game game) { -// logger.fine("playMana"); +// logger.debug("playMana"); ManaCost cost; List producers; if (unpaid instanceof ManaCosts) { @@ -627,8 +627,14 @@ public class ComputerPlayer> extends PlayerImpl i } } } - if (score > 0) // score mana producers that produce other types higher + if (score > 0) { // score mana producers that produce other mana types and have other uses higher score += permanent.getAbilities().getManaAbilities(Zone.BATTLEFIELD).size(); + score += permanent.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD).size(); + if (!permanent.getCardType().contains(CardType.LAND)) + score+=2; + else if(permanent.getCardType().contains(CardType.CREATURE)) + score+=2; + } scored.put(permanent, score); } return sortByValue(scored); @@ -652,7 +658,7 @@ public class ComputerPlayer> extends PlayerImpl i @Override public boolean playXMana(VariableManaCost cost, Game game) { - logger.fine("playXMana"); + logger.debug("playXMana"); //put everything into X for (Permanent perm: this.getAvailableManaProducers(game)) { for (ManaAbility ability: perm.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { @@ -671,14 +677,14 @@ public class ComputerPlayer> extends PlayerImpl i @Override public boolean chooseUse(Outcome outcome, String message, Game game) { - logger.fine("chooseUse"); + logger.debug("chooseUse"); //TODO: improve this return outcome.isGood(); } @Override public boolean choose(Outcome outcome, Choice choice, Game game) { - logger.fine("choose"); + logger.debug("choose"); //TODO: improve this choice.setChoice(choice.getChoices().iterator().next()); return true; @@ -686,7 +692,7 @@ public class ComputerPlayer> extends PlayerImpl i @Override public boolean chooseTarget(Cards cards, TargetCard target, Ability source, Game game) { - logger.fine("chooseTarget"); + logger.debug("chooseTarget"); //TODO: improve this //return first match if (!target.doneChosing()) { @@ -702,7 +708,7 @@ public class ComputerPlayer> extends PlayerImpl i @Override public boolean choose(Cards cards, TargetCard target, Game game) { - logger.fine("choose"); + logger.debug("choose"); //TODO: improve this //return first match if (!target.doneChosing()) { @@ -718,7 +724,7 @@ public class ComputerPlayer> extends PlayerImpl i @Override public void selectAttackers(Game game) { - logger.fine("selectAttackers"); + logger.debug("selectAttackers"); UUID opponentId = game.getCombat().getDefenders().iterator().next(); Attackers attackers = getPotentialAttackers(game); List blockers = getOpponentBlockers(opponentId, game); @@ -745,7 +751,7 @@ public class ComputerPlayer> extends PlayerImpl i @Override public void selectBlockers(Game game) { - logger.fine("selectBlockers"); + logger.debug("selectBlockers"); List blockers = getAvailableBlockers(game); @@ -761,14 +767,14 @@ public class ComputerPlayer> extends PlayerImpl i @Override public int chooseEffect(List rEffects, Game game) { - logger.fine("chooseEffect"); + logger.debug("chooseEffect"); //TODO: implement this return 0; } @Override public TriggeredAbility chooseTriggeredAbility(TriggeredAbilities abilities, Game game) { - logger.fine("chooseTriggeredAbility"); + logger.debug("chooseTriggeredAbility"); //TODO: improve this if (abilities.size() > 0) return abilities.get(0); @@ -777,21 +783,21 @@ public class ComputerPlayer> extends PlayerImpl i @Override public void assignDamage(int damage, List targets, UUID sourceId, Game game) { - logger.fine("assignDamage"); + logger.debug("assignDamage"); //TODO: improve this game.getPermanent(targets.get(0)).damage(damage, sourceId, game, true, false); } @Override public int getAmount(int min, int max, String message, Game game) { - logger.fine("getAmount"); + logger.debug("getAmount"); //TODO: improve this return min; } @Override protected List getAvailableManaProducers(Game game) { -// logger.fine("getAvailableManaProducers"); +// logger.debug("getAvailableManaProducers"); return super.getAvailableManaProducers(game); } @@ -803,12 +809,73 @@ public class ComputerPlayer> extends PlayerImpl i @Override public void construct(Tournament tournament, Deck deck) { - //TODO: improve this if (deck.getCards().size() < 40) { - while (deck.getCards().size() < 40) { - Card card = deck.getSideboard().iterator().next(); - deck.getCards().add(card); - deck.getSideboard().remove(card); + //pick the top 23 cards + if (chosenColors == null) { + for (Card card: deck.getSideboard()) { + rememberPick(card, RateCard.rateCard(card, null)); + } + chosenColors = chooseDeckColorsIfPossible(); + } + List sortedCards = new ArrayList(deck.getSideboard()); + Collections.sort(sortedCards, new Comparator() { + @Override + public int compare(Card o1, Card o2) { + Integer score1 = RateCard.rateCard(o1, chosenColors); + Integer score2 = RateCard.rateCard(o2, chosenColors); + return score2.compareTo(score1); + } + }); + int cardNum = 0; + while (deck.getCards().size() < 23 && sortedCards.size() > cardNum) { + Card card = sortedCards.get(cardNum); + if (!card.getSupertype().contains("Basic")) { + deck.getCards().add(card); + deck.getSideboard().remove(card); + } + cardNum++; + } + // add basic lands + // TODO: compensate for non basic lands + Mana mana = new Mana(); + for (Card card: deck.getCards()) { + mana.add(card.getManaCost().getMana()); + } + double total = mana.getBlack() + mana.getBlue() + mana.getGreen() + mana.getRed() + mana.getWhite(); + if (mana.getGreen() > 0) { + int numGreen = (int) Math.round(mana.getGreen() / total * 17); + for (int i = 0; i < numGreen; i++) { + Card land = Sets.findCard("Forest", true); + deck.getCards().add(land); + } + } + if (mana.getBlack() > 0) { + int numBlack = (int) Math.round(mana.getBlack() / total * 17); + for (int i = 0; i < numBlack; i++) { + Card land = Sets.findCard("Swamp", true); + deck.getCards().add(land); + } + } + if (mana.getBlue() > 0) { + int numBlue = (int) Math.round(mana.getBlue() / total * 17); + for (int i = 0; i < numBlue; i++) { + Card land = Sets.findCard("Island", true); + deck.getCards().add(land); + } + } + if (mana.getWhite() > 0) { + int numWhite = (int) Math.round(mana.getWhite() / total * 17); + for (int i = 0; i < numWhite; i++) { + Card land = Sets.findCard("Plains", true); + deck.getCards().add(land); + } + } + if (mana.getRed() > 0) { + int numRed = (int) Math.round(mana.getRed() / total * 17); + for (int i = 0; i < numRed; i++) { + Card land = Sets.findCard("Mountain", true); + deck.getCards().add(land); + } } } tournament.submitDeck(playerId, deck); @@ -926,7 +993,7 @@ public class ComputerPlayer> extends PlayerImpl i } protected Attackers getPotentialAttackers(Game game) { - logger.fine("getAvailableAttackers"); + logger.debug("getAvailableAttackers"); Attackers attackers = new Attackers(); List creatures = super.getAvailableAttackers(game); for (Permanent creature: creatures) { @@ -942,7 +1009,7 @@ public class ComputerPlayer> extends PlayerImpl i } protected int combatPotential(Permanent creature, Game game) { - logger.fine("combatPotential"); + logger.debug("combatPotential"); if (!creature.canAttack(game)) return 0; int potential = creature.getPower().getValue(); @@ -955,21 +1022,21 @@ public class ComputerPlayer> extends PlayerImpl i } // protected List getAvailableBlockers(Game game) { -// logger.fine("getAvailableBlockers"); +// logger.debug("getAvailableBlockers"); // FilterCreatureForCombat blockFilter = new FilterCreatureForCombat(); // List blockers = game.getBattlefield().getAllActivePermanents(blockFilter, playerId); // return blockers; // } protected List getOpponentBlockers(UUID opponentId, Game game) { - logger.fine("getOpponentBlockers"); + logger.debug("getOpponentBlockers"); FilterCreatureForCombat blockFilter = new FilterCreatureForCombat(); List blockers = game.getBattlefield().getAllActivePermanents(blockFilter, opponentId); return blockers; } protected CombatSimulator simulateAttack(Attackers attackers, List blockers, UUID opponentId, Game game) { - logger.fine("simulateAttack"); + logger.debug("simulateAttack"); List attackersList = attackers.getAttackers(); CombatSimulator best = new CombatSimulator(); int bestResult = 0; @@ -1000,7 +1067,7 @@ public class ComputerPlayer> extends PlayerImpl i } protected CombatSimulator simulateBlock(CombatSimulator combat, List blockers, Game game) { - logger.fine("simulateBlock"); + logger.debug("simulateBlock"); TreeNode simulations; @@ -1073,8 +1140,8 @@ public class ComputerPlayer> extends PlayerImpl i } protected void logState(Game game) { - if (logger.isLoggable(Level.FINE)) - logList("computer player hand: ", new ArrayList(hand.getCards(game))); + if (logger.isDebugEnabled()) + logList("computer player " + name + " hand: ", new ArrayList(hand.getCards(game))); } protected void logList(String message, List list) { @@ -1083,7 +1150,7 @@ public class ComputerPlayer> extends PlayerImpl i for (MageObject object: list) { sb.append(object.getName()).append(","); } - logger.fine(sb.toString()); + logger.debug(sb.toString()); } protected void logAbilityList(String message, List list) { @@ -1092,7 +1159,7 @@ public class ComputerPlayer> extends PlayerImpl i for (Ability ability: list) { sb.append(ability.getRule()).append(","); } - logger.fine(sb.toString()); + logger.debug(sb.toString()); } private void playRemoval(List creatures, Game game) { @@ -1146,4 +1213,3 @@ public class ComputerPlayer> extends PlayerImpl i } } - diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java index ab15d6f8da..7ced3b867f 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java @@ -44,6 +44,7 @@ import mage.Constants.PhaseStep; import mage.Constants.RangeOfInfluence; import mage.abilities.Ability; import mage.abilities.ActivatedAbility; +import mage.abilities.common.PassAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.SearchEffect; import mage.cards.Cards; @@ -161,6 +162,8 @@ public class ComputerPlayer2 extends ComputerPlayer implements while (actions.peek() != null) { Ability ability = actions.poll(); this.activateAbility((ActivatedAbility) ability, game); + if (logger.isDebugEnabled()) + logger.debug("activating: " + ability); if (ability.isUsesStack()) usedStack = true; } @@ -174,7 +177,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements if (!getNextAction(game)) { Game sim = createSimulation(game); SimulationNode.resetCount(); - root = new SimulationNode(sim, maxDepth, playerId); + root = new SimulationNode(null, sim, maxDepth, playerId); logger.debug("simulating actions"); addActionsTimed(new FilterAbility()); if (root.children.size() > 0) { @@ -224,7 +227,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements if (val < beta) { beta = val; bestChild = child; - if (node.getCombat() == null) +// if (node.getCombat() == null) node.setCombat(child.getCombat()); } } @@ -232,7 +235,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements if (val > alpha) { alpha = val; bestChild = child; - if (node.getCombat() == null) +// if (node.getCombat() == null) node.setCombat(child.getCombat()); } } @@ -272,7 +275,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements SearchEffect newEffect = getSearchEffect((StackAbility) newAbility); newEffect.getTarget().addTarget(targetId, newAbility, sim); sim.getStack().push(newAbility); - SimulationNode newNode = new SimulationNode(sim, depth, ability.getControllerId()); + SimulationNode newNode = new SimulationNode(node, sim, depth, ability.getControllerId()); node.children.add(newNode); newNode.getTargets().add(targetId); logger.debug("simulating search -- node#: " + SimulationNode.getCount() + "for player: " + sim.getPlayer(ability.getControllerId()).getName()); @@ -381,12 +384,14 @@ public class ComputerPlayer2 extends ComputerPlayer implements Game sim = game.copy(); if (sim.getPlayer(currentPlayer.getId()).activateAbility((ActivatedAbility) action.copy(), sim)) { sim.applyEffects(); + if (checkForRepeatedAction(sim, node, action, currentPlayer.getId())) + continue; if (!sim.isGameOver() && action.isUsesStack()) { // only pass if the last action uses the stack sim.getPlayer(currentPlayer.getId()).pass(); sim.getPlayerList().getNext(); } - SimulationNode newNode = new SimulationNode(sim, action, depth, currentPlayer.getId()); + SimulationNode newNode = new SimulationNode(node, sim, action, depth, currentPlayer.getId()); if (logger.isDebugEnabled()) logger.debug("simulating -- node #:" + SimulationNode.getCount() + " actions:" + action); sim.checkStateAndTriggered(); @@ -561,7 +566,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements } } sim.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARED_ATTACKERS, playerId, playerId)); - SimulationNode newNode = new SimulationNode(sim, node.getDepth()-1, activePlayerId); + SimulationNode newNode = new SimulationNode(node, sim, node.getDepth()-1, activePlayerId); logger.debug("simulating -- node #:" + SimulationNode.getCount() + " declare attakers"); newNode.setCombat(sim.getCombat()); node.children.add(newNode); @@ -582,7 +587,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements } } sim.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARED_BLOCKERS, playerId, playerId)); - SimulationNode newNode = new SimulationNode(sim, node.getDepth()-1, defenderId); + SimulationNode newNode = new SimulationNode(node, sim, node.getDepth()-1, defenderId); logger.debug("simulating -- node #:" + SimulationNode.getCount() + " declare blockers"); newNode.setCombat(sim.getCombat()); node.children.add(newNode); @@ -648,4 +653,22 @@ public class ComputerPlayer2 extends ComputerPlayer implements return sim; } + private boolean checkForRepeatedAction(Game sim, SimulationNode node, Ability action, UUID playerId) { + if (action instanceof PassAbility) + return false; + int val = GameStateEvaluator.evaluate(playerId, sim); + SimulationNode test = node.getParent(); + while (test != null && !test.getPlayerId().equals(playerId)) { + test = test.getParent(); + } + if (test != null && test.getAbilities() != null && test.getAbilities().size() == 1) { + if (action.toString().equals(test.getAbilities().get(0).toString()) && GameStateEvaluator.evaluate(playerId, sim) == val) { + if (logger.isDebugEnabled()) + logger.debug("found repeated action " + action); + return true; + } + } + return false; + } + } diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java index 2e8a2b2dad..5400751b70 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java @@ -98,6 +98,8 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { @Override public void priority(Game game) { logState(game); + if (logger.isDebugEnabled()) + logger.debug("Game State: Turn-" + game.getTurnNum() + " Step-" + game.getTurn().getStepType() + " ActivePlayer-" + game.getPlayer(game.getActivePlayerId()).getName() + " PriorityPlayer-" + name); game.firePriorityEvent(playerId); switch (game.getTurn().getStepType()) { case UPKEEP: @@ -154,7 +156,7 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { currentScore = GameStateEvaluator.evaluate(playerId, game); Game sim = createSimulation(game); SimulationNode.resetCount(); - root = new SimulationNode(sim, maxDepth, playerId); + root = new SimulationNode(null, sim, maxDepth, playerId); logger.debug("simulating pre combat actions -----------------------------------------------------------------------------------------"); addActionsTimed(new FilterAbility()); @@ -171,7 +173,7 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { currentScore = GameStateEvaluator.evaluate(playerId, game); Game sim = createSimulation(game); SimulationNode.resetCount(); - root = new SimulationNode(sim, maxDepth, playerId); + root = new SimulationNode(null, sim, maxDepth, playerId); logger.debug("simulating post combat actions ----------------------------------------------------------------------------------------"); addActionsTimed(new FilterAbility()); if (root.children.size() > 0) { @@ -227,13 +229,13 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { else { switch (game.getTurn().getStepType()) { case PRECOMBAT_MAIN: - val = -simulateCombat(game, node, depth-1, alpha, beta, false); + val = simulateCombat(game, node, depth-1, alpha, beta, false); break; case POSTCOMBAT_MAIN: - val = -simulateCounterAttack(game, node, depth-1, alpha, beta); + val = simulateCounterAttack(game, node, depth-1, alpha, beta); break; default: - val = -GameStateEvaluator.evaluate(playerId, game); + val = GameStateEvaluator.evaluate(playerId, game); break; } } @@ -316,6 +318,8 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { SimulationNode bestNode = null; SimulatedPlayer attacker = (SimulatedPlayer) game.getPlayer(attackerId); + if (logger.isDebugEnabled()) + logger.debug(attacker.getName() + "'s possible attackers: " + attacker.getAvailableAttackers(game)); for (Combat engagement: attacker.addAttackers(game)) { if (alpha >= beta) { logger.debug("simulating -- pruning attackers"); @@ -329,9 +333,9 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { } } sim.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARED_ATTACKERS, playerId, playerId)); - SimulationNode newNode = new SimulationNode(sim, depth, game.getActivePlayerId()); + SimulationNode newNode = new SimulationNode(node, sim, depth, attackerId); if (logger.isDebugEnabled()) - logger.debug("simulating attack -- node#: " + SimulationNode.getCount()); + logger.debug("simulating attack for player:" + game.getPlayer(newNode.getPlayerId()).getName()); sim.checkStateAndTriggered(); while (!sim.getStack().isEmpty()) { sim.getStack().resolve(sim); @@ -379,6 +383,8 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { //check if defender is being attacked if (game.getCombat().isAttacked(defenderId, game)) { SimulatedPlayer defender = (SimulatedPlayer) game.getPlayer(defenderId); + if (logger.isDebugEnabled()) + logger.debug(defender.getName() + "'s possible blockers: " + defender.getAvailableBlockers(game)); for (Combat engagement: defender.addBlockers(game)) { if (alpha >= beta) { logger.debug("simulating -- pruning blockers"); @@ -394,9 +400,9 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { } } sim.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARED_BLOCKERS, playerId, playerId)); - SimulationNode newNode = new SimulationNode(sim, depth, defenderId); + SimulationNode newNode = new SimulationNode(node, sim, depth, defenderId); if (logger.isDebugEnabled()) - logger.debug("simulating block -- node#: " + SimulationNode.getCount()); + logger.debug("simulating block for player:" + game.getPlayer(newNode.getPlayerId()).getName()); sim.checkStateAndTriggered(); while (!sim.getStack().isEmpty()) { sim.getStack().resolve(sim); diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/GameStateEvaluator.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/GameStateEvaluator.java index f4734f9bbc..90a8b0ec58 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/GameStateEvaluator.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/GameStateEvaluator.java @@ -6,8 +6,6 @@ package mage.player.ai; import java.util.UUID; -import java.util.logging.Level; -import java.util.logging.Logger; import mage.Constants.CardType; import mage.Constants.Zone; import mage.abilities.ActivatedAbility; @@ -18,7 +16,7 @@ import mage.abilities.mana.ManaAbility; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.util.Logging; +import org.apache.log4j.Logger; /** * @@ -29,7 +27,7 @@ import mage.util.Logging; */ public class GameStateEvaluator { - private final static transient Logger logger = Logging.getLogger(GameStateEvaluator.class.getName()); + private final static transient Logger logger = Logger.getLogger(GameStateEvaluator.class); private static final int LIFE_FACTOR = Config.evaluatorLifeFactor; private static final int PERMANENT_FACTOR = Config.evaluatorPermanentFactor; @@ -56,13 +54,12 @@ public class GameStateEvaluator { permanentScore *= PERMANENT_FACTOR; int handScore = 0; - handScore = 7 - opponent.getHand().size(); - handScore += Math.min(7, player.getHand().size()); + handScore = player.getHand().size() - opponent.getHand().size(); handScore *= HAND_FACTOR; int score = lifeScore + permanentScore + handScore; - if (logger.isLoggable(Level.FINE)) - logger.fine("game state evaluated to- lifeScore:" + lifeScore + " permanentScore:" + permanentScore + " handScore:" + handScore + " total:" + score); + if (logger.isDebugEnabled()) + logger.debug("game state evaluated to- lifeScore:" + lifeScore + " permanentScore:" + permanentScore + " handScore:" + handScore + " total:" + score); return score; } diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java index 48d4c97903..0bd6533cdf 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java @@ -221,7 +221,7 @@ public class SimulatedPlayer extends ComputerPlayer { sim.getStack().push(new StackAbility(ability, playerId)); ability.activate(sim, false); sim.applyEffects(); - SimulationNode newNode = new SimulationNode(sim, depth, playerId); + SimulationNode newNode = new SimulationNode(parent, sim, depth, playerId); logger.debug("simulating -- node #:" + SimulationNode.getCount() + " triggered ability option"); for (Target target: ability.getTargets()) { for (UUID targetId: target.getTargets()) { diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulationNode.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulationNode.java index 954e4c7097..002ce922ab 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulationNode.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulationNode.java @@ -49,12 +49,14 @@ public class SimulationNode implements Serializable { protected List abilities; protected int depth; protected List children = new ArrayList(); + protected SimulationNode parent; protected List targets = new ArrayList(); protected List choices = new ArrayList(); protected UUID playerId; protected Combat combat; - public SimulationNode(Game game, int depth, UUID playerId) { + public SimulationNode(SimulationNode parent, Game game, int depth, UUID playerId) { + this.parent = parent; this.game = game; this.depth = depth; this.playerId = playerId; @@ -62,13 +64,13 @@ public class SimulationNode implements Serializable { nodeCount++; } - public SimulationNode(Game game, List abilities, int depth, UUID playerId) { - this(game, depth, playerId); + public SimulationNode(SimulationNode parent, Game game, List abilities, int depth, UUID playerId) { + this(parent, game, depth, playerId); this.abilities = abilities; } - public SimulationNode(Game game, Ability ability, int depth, UUID playerId) { - this(game, depth, playerId); + public SimulationNode(SimulationNode parent, Game game, Ability ability, int depth, UUID playerId) { + this(parent, game, depth, playerId); this.abilities = new ArrayList(); abilities.add(ability); } @@ -97,6 +99,10 @@ public class SimulationNode implements Serializable { return this.abilities; } + public SimulationNode getParent() { + return this.parent; + } + public List getChildren() { return this.children; } diff --git a/Mage.Server/plugins/mage-player-ai.jar b/Mage.Server/plugins/mage-player-ai.jar index 4e151620eb5daaf05b1b66a760d9ddd97e9085e4..45016d50142a1ea95973ba00bed3f59f6e2a8ac7 100644 GIT binary patch delta 22206 zcmZ6xQ*b6+(={ASY}>YN+qUgYtZQQPN;0u++qP{d6WjRi=ionh|9!HmR#jIY^j_W7 zt9qav?0pmrURe(O7c9vC9&KzQJOu(xtg0Z@>N}Xle~fRUpf$N-Iu8$WKva#EEa#Xr zn?SG^nV2D?AtT8D2|OeLqm2bZf>Qqvm_h0O2L_;=|AQ1zmj9q}4D=A}e^~uX{TDRt ze@QaZ6kUKYFh<}~=R}QmFd<+F|6@VslYDl;KtN!Ch%gjD!@p2~P;~>PMP=-O4ulC? zC~$P~VNk?1s5usqK$0l%sU#RlXir1@jzek>1{*$7z~F9wY$WO3fY((#YfowBWY56D z z*O8x$M6;@nb#(@y;4w}Ri=(?!lcgna-Sxo16Xb}Sy6+&9CiB=w8BY;%?-417O^b`U zTdS$q_IpTCejx_kAv=9^ie(63fP-ox{pVM+vCh_b=9D{+O^K5y#;mHbS#`|c(;ppQ zdqdPri)^p9Ow6g#)t4Ic zm)6ikZ^RCO;eA=QHcWWs_)uXAhGhNd)1)ohB)|aU*?CN1a<9o)k?N>dbE*y@QL}T) zTIoDpxW#}GUu4S;8Qvr&1O_tV=mdhQ)EfYwomFPnwnpVsqTyy&61SVsYDT@2@nWXaI$N35V z|7i*OKM|@50#}=>Rlq?&JfT29D1b>w)GR6LdTNWp=-(|gLo4bN8h4PU^DX*8UQQ^( zw7Lvfq5bnXM5%Sj!qUt#1Yb1YP}z4tU3enEfeAbm3vPJW1Iv&zNnCUrdGVx+e!oWh z)Hq44DZS#H9qovQzLraH{<;xM_Y$<2l1=vC&>oY!zXQwd%u^)voxE` zZ*DQ84p7d((+C^iKV9h3neN1}5 zwRaGE=`&&quTrG@)#Iz{Vf-rO$l!uDhxDj{=%|%~nF2jVTj$ViSwD^%p#SZQj7=ge z!aFX%yJ;f#_x6E@4%0>tH59zmlnO5X#_aWOX%jJY#%8)32H`?{YYzDlpWj2}_{~CKC3-N4G1&sB@5^eemD@gso{fF)0CnDYoL} zzv%t4`UCEqHj0?$ATypCE&UvK{@JRYGdD}TU5Z5@S7DI_mi0Zn)QXy&Lc5v}$}H_x z0oRUBDKe{484Y&7ntiolroNYtc4y~9N}|9Q$&19(TT5yv5jpR$gP}8R3%^gtNFqJs z6HhCxsb%`RbVpkG2cwxue3~bKybO_CO`M5CGxl8zj6OY?OQ~8XpD9vvp(T+$68bC9 z%VQ5s`do0`Vbvf#wk+{lqz=NIJpSsZW$~syj;7AzwA*97)?)j9X0f zmlY7rt<7TJ}Hc)8u!Ut!-6(k}|=ipz`8>h!7S-)qmY(7qJYSlpCwB>+s z$Yg+cO=Hfeu5_N0aMHr|I3j1NTecL)mr#@lN-=9EAW4huMyeTv9sK@!J3&~)$qIy+ zQNOErxw{{67p_p9jYZyG#@5b$4#n4-skEOdHUs`0T26EO?=*&X$w_;A?SYz$oKqh< z_-@I*X{04NzHr3;1m>+&t0)Ay73`(0LrVZ1vf=PaZYUR1vI}-j){l_sy}UxnaVI~Dvo5$uF)_Y&a>(O9ZW4nm9+LS>0q0m;JT&nDSd0hU*B=% zU)W0uqbNC+zjv_&#VR@t-u9%^KnK@iEzrA6q+7*mvcx}w;&PljDLip9vp4DV|B3

~ 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

;Q`
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

diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar
index 6f0d28c6edcd6e3b15427358fda49a2b28a09e16..72624ad402916fa991961c0a67da6ce64f3235f6 100644
GIT binary patch
delta 32269
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

diff --git a/Mage.Server/plugins/mage-tournament-sealed.jar b/Mage.Server/plugins/mage-tournament-sealed.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e4a8584a986fa0ba2feb2686d16141e94d4c4764
GIT binary patch
literal 5049
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
L_$SKiuRZz?fQrUy

literal 0
HcmV?d00001

diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
index 9c18fefe56..b01511d9de 100644
--- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
+++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
@@ -191,7 +191,7 @@ public class TournamentController {
 		TableManager.getInstance().construct(tableId);
 	}
 
-	private synchronized void construct(UUID sessionId, Deck deck, int timeout) {
+	private void construct(UUID sessionId, Deck deck, int timeout) {
 		if (tournamentSessions.containsKey(sessionId))
 			tournamentSessions.get(sessionId).construct(deck, timeout);
 	}
diff --git a/Mage/src/mage/Mana.java b/Mage/src/mage/Mana.java
index 2ba46f9fa6..4b31e628dc 100644
--- a/Mage/src/mage/Mana.java
+++ b/Mage/src/mage/Mana.java
@@ -66,6 +66,26 @@ public class Mana implements Comparable, Serializable, Copyable {
 		any = mana.any;
 	}
 
+	public Mana(ColoredManaSymbol color) {
+		switch (color) {
+			case G:
+				green = 1;
+				break;
+			case R:
+				red = 1;
+				break;
+			case B:
+				black = 1;
+				break;
+			case U:
+				blue = 1;
+				break;
+			case W:
+				white = 1;
+				break;
+		}
+	}
+
 	public static Mana RedMana(int num) {
 		return new Mana(num, 0, 0, 0, 0, 0, 0);
 	}
diff --git a/Mage/src/mage/abilities/costs/mana/ColoredManaCost.java b/Mage/src/mage/abilities/costs/mana/ColoredManaCost.java
index ba9d31cc10..155ad4bb7b 100644
--- a/Mage/src/mage/abilities/costs/mana/ColoredManaCost.java
+++ b/Mage/src/mage/abilities/costs/mana/ColoredManaCost.java
@@ -38,6 +38,7 @@ public class ColoredManaCost extends ManaCostImpl {
 
 	public ColoredManaCost(ColoredManaSymbol mana) {
 		this.mana = mana;
+		this.cost = new Mana(mana);
 		addColoredOption(mana);
 	}
 
@@ -46,10 +47,6 @@ public class ColoredManaCost extends ManaCostImpl {
 		this.mana = cost.mana;
 	}
 
-	public ColoredManaSymbol getMana() {
-		return mana;
-	}
-
 	@Override
 	public int convertedManaCost() {
 		return 1;
diff --git a/Mage/src/mage/abilities/costs/mana/GenericManaCost.java b/Mage/src/mage/abilities/costs/mana/GenericManaCost.java
index f4f95d3976..0e1e7aae9b 100644
--- a/Mage/src/mage/abilities/costs/mana/GenericManaCost.java
+++ b/Mage/src/mage/abilities/costs/mana/GenericManaCost.java
@@ -37,6 +37,7 @@ public class GenericManaCost extends ManaCostImpl {
 
 	public GenericManaCost(int mana) {
 		this.mana = mana;
+		this.cost = Mana.ColorlessMana(mana);
 		this.options.addMana(Mana.ColorlessMana(mana));
 	}
 
@@ -45,10 +46,6 @@ public class GenericManaCost extends ManaCostImpl {
 		this.mana = cost.mana;
 	}
 
-	public int getMana() {
-		return mana;
-	}
-
 	public void setMana(int mana) {
 		this.mana = mana;
 	}
diff --git a/Mage/src/mage/abilities/costs/mana/HybridManaCost.java b/Mage/src/mage/abilities/costs/mana/HybridManaCost.java
index 3176a3515b..306466efdf 100644
--- a/Mage/src/mage/abilities/costs/mana/HybridManaCost.java
+++ b/Mage/src/mage/abilities/costs/mana/HybridManaCost.java
@@ -39,6 +39,8 @@ public class HybridManaCost extends ManaCostImpl {
 	public HybridManaCost(ColoredManaSymbol mana1, ColoredManaSymbol mana2) {
 		this.mana1 = mana1;
 		this.mana2 = mana2;
+		this.cost = new Mana(mana1);
+		this.cost.add(new Mana(mana2));
 		addColoredOption(mana1);
 		addColoredOption(mana2);
 	}
@@ -54,14 +56,6 @@ public class HybridManaCost extends ManaCostImpl {
 		return 1;
 	}
 
-	public ColoredManaSymbol getMana1() {
-		return mana1;
-	}
-
-	public ColoredManaSymbol getMana2() {
-		return mana2;
-	}
-
 	@Override
 	public boolean isPaid() {
 		if (paid || isColoredPaid(this.mana1) || isColoredPaid(this.mana2))
diff --git a/Mage/src/mage/abilities/costs/mana/ManaCost.java b/Mage/src/mage/abilities/costs/mana/ManaCost.java
index 8aa0ccc298..31291b1629 100644
--- a/Mage/src/mage/abilities/costs/mana/ManaCost.java
+++ b/Mage/src/mage/abilities/costs/mana/ManaCost.java
@@ -36,6 +36,7 @@ import mage.players.ManaPool;
 public interface ManaCost extends Cost {
 
 	public int convertedManaCost();
+	public Mana getMana();
 	public Mana getPayment();
 	public void assignPayment(ManaPool pool);
 	@Override
@@ -46,4 +47,5 @@ public interface ManaCost extends Cost {
 
 	@Override
 	public ManaCost copy();
+
 }
diff --git a/Mage/src/mage/abilities/costs/mana/ManaCostImpl.java b/Mage/src/mage/abilities/costs/mana/ManaCostImpl.java
index 671092ac60..3729aaeddf 100644
--- a/Mage/src/mage/abilities/costs/mana/ManaCostImpl.java
+++ b/Mage/src/mage/abilities/costs/mana/ManaCostImpl.java
@@ -31,7 +31,6 @@ package mage.abilities.costs.mana;
 import java.util.UUID;
 import mage.Constants.ColoredManaSymbol;
 import mage.Mana;
-import mage.abilities.Ability;
 import mage.abilities.costs.CostImpl;
 import mage.abilities.mana.ManaOptions;
 import mage.game.Game;
@@ -41,6 +40,7 @@ import mage.players.Player;
 public abstract class ManaCostImpl> extends CostImpl implements ManaCost {
 
 	protected Mana payment;
+	protected Mana cost;
 	protected ManaOptions options;
 
 	@Override
@@ -62,6 +62,11 @@ public abstract class ManaCostImpl> extends CostImpl extends List, ManaCost {
 	public List getVariableCosts();
 	public void load(String mana);
 	public List getSymbols();
+	public Mana getMana();
 
 	@Override
 	public ManaCosts copy();
diff --git a/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java b/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java
index eba66b665a..c396e45190 100644
--- a/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java
+++ b/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java
@@ -81,6 +81,15 @@ public class ManaCostsImpl extends ArrayList implements M
 		return total;
 	}
 
+	@Override
+	public Mana getMana() {
+		Mana mana = new Mana();
+		for (ManaCost cost: this) {
+			mana.add(cost.getMana());
+		}
+		return mana;
+	}
+
 	@Override
 	public Mana getPayment() {
 		Mana manaTotal = new Mana();
diff --git a/Mage/src/mage/abilities/costs/mana/MonoHybridManaCost.java b/Mage/src/mage/abilities/costs/mana/MonoHybridManaCost.java
index 732007a5cf..e6c1624c9c 100644
--- a/Mage/src/mage/abilities/costs/mana/MonoHybridManaCost.java
+++ b/Mage/src/mage/abilities/costs/mana/MonoHybridManaCost.java
@@ -39,6 +39,8 @@ public class MonoHybridManaCost extends ManaCostImpl {
 
 	public MonoHybridManaCost(ColoredManaSymbol mana) {
 		this.mana = mana;
+		this.cost = new Mana(mana);
+		this.cost.add(Mana.ColorlessMana(2));
 		addColoredOption(mana);
 		options.add(Mana.ColorlessMana(2));
 	}
@@ -54,10 +56,6 @@ public class MonoHybridManaCost extends ManaCostImpl {
 		return 2;
 	}
 
-	public ColoredManaSymbol getMana() {
-		return mana;
-	}
-
 	@Override
 	public boolean isPaid() {
 		if (paid || isColoredPaid(this.mana))
diff --git a/Mage/src/mage/abilities/costs/mana/VariableManaCost.java b/Mage/src/mage/abilities/costs/mana/VariableManaCost.java
index 80e9fb6438..94aece97b4 100644
--- a/Mage/src/mage/abilities/costs/mana/VariableManaCost.java
+++ b/Mage/src/mage/abilities/costs/mana/VariableManaCost.java
@@ -43,6 +43,7 @@ public class VariableManaCost extends ManaCostImpl implements
 
 	public VariableManaCost() {
 		this(1);
+		this.cost = new Mana();
 		options.add(new Mana());
 	}
 	
diff --git a/Mage/src/mage/game/draft/DraftImpl.java b/Mage/src/mage/game/draft/DraftImpl.java
index 64bcece061..a1804fddb6 100644
--- a/Mage/src/mage/game/draft/DraftImpl.java
+++ b/Mage/src/mage/game/draft/DraftImpl.java
@@ -58,7 +58,7 @@ public abstract class DraftImpl> implements Draft {
 	protected int boosterNum = 0;
 	protected int cardNum = 0;
 	protected TimingOption timing;
-	protected int[] times = {40, 40, 35, 30, 25, 25, 20, 20, 15, 10, 10, 5, 5, 5, 5};
+	protected int[] times = {75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5};
 
 	protected transient TableEventSource tableEventSource = new TableEventSource();
 	protected transient PlayerQueryEventSource playerQueryEventSource = new PlayerQueryEventSource();
diff --git a/Mage/src/mage/game/draft/DraftPlayer.java b/Mage/src/mage/game/draft/DraftPlayer.java
index 0e7bbbb9c2..671d262fa5 100644
--- a/Mage/src/mage/game/draft/DraftPlayer.java
+++ b/Mage/src/mage/game/draft/DraftPlayer.java
@@ -28,6 +28,7 @@
 
 package mage.game.draft;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 import mage.cards.Card;
@@ -68,12 +69,16 @@ public class DraftPlayer {
 
 	public void addPick(Card card) {
 		deck.getSideboard().add(card);
-		booster.remove(card);
+		synchronized(booster) {
+			booster.remove(card);
+		}
 		picking = false;
 	}
 
 	public void openBooster(ExpansionSet set) {
-		booster = set.createBooster();
+		synchronized(booster) {
+			booster = set.createBooster();
+		}
 	}
 
 	public void setBooster(List booster) {
@@ -81,7 +86,9 @@ public class DraftPlayer {
 	}
 
 	public List getBooster() {
-		return booster;
+		synchronized(booster) {
+			return new ArrayList(booster);
+		}
 	}
 
 	public void setPicking() {
diff --git a/Mage/src/mage/game/permanent/PermanentImpl.java b/Mage/src/mage/game/permanent/PermanentImpl.java
index ad7e09c8c7..44856bd24a 100644
--- a/Mage/src/mage/game/permanent/PermanentImpl.java
+++ b/Mage/src/mage/game/permanent/PermanentImpl.java
@@ -104,6 +104,11 @@ public abstract class PermanentImpl> extends CardImpl
 		this.attachedTo = permanent.attachedTo;
 	}
 
+	@Override
+	public String toString() {
+		return this.name + "-" + this.expansionSetCode;
+	}
+
 	@Override
 	public void reset(Game game) {
 //		this.controllerId = ownerId;
diff --git a/Mage/src/mage/game/tournament/TournamentImpl.java b/Mage/src/mage/game/tournament/TournamentImpl.java
index fd75633b11..6c48e4ebee 100644
--- a/Mage/src/mage/game/tournament/TournamentImpl.java
+++ b/Mage/src/mage/game/tournament/TournamentImpl.java
@@ -228,9 +228,15 @@ public abstract class TournamentImpl implements Tournament {
 
 	public void construct() {
 		tableEventSource.fireTableEvent(EventType.CONSTRUCT);
-		for (TournamentPlayer player: players.values()) {
+		for (final TournamentPlayer player: players.values()) {
 			player.setConstructing();
-			player.getPlayer().construct(this, player.getDeck());
+			new Thread(
+				new Runnable() {
+					public void run() {
+						player.getPlayer().construct(TournamentImpl.this, player.getDeck());
+					}
+				}
+			).start();
 		}
 		synchronized(this) {
 			while (!isDoneConstructing()) {