I played an interesting game the other day, and got me thinking, how much difference do the shelters really make? Well, with this combination of cards, it really isnt better than big money with a 53% win rate. With shelters, it has a 89% win rate. Quite the difference. Lets take a closer look what's going on:
The cards for the combo are Armory, Conspirator, Forager and Great hall.
The strategy is simple. Open Armory to gain cards, and forager to trash cards. Gain great halls and conspirators in a 1:1 ratio until you have enough money to buy provinces.
The interesting thing is how this strategy performs with shelters and without shelters:
89.1% win rate again Big money with shelters
53.9% win rate again Big money with estates
Lets take a closer look at each shelter and what effect is having.
HovelIf we pretend that the hovel card does not have a reaction - i.e. it can no longer trash itself on gaining a victory. That brings the win rate down to 74%. That's 15% win rate just for the reaction!
NecropolisThe default strategy actually attempts to keep the necroplis. The +2 actions are good for starting off the conspirator chain, which we like. It also allows us to play the armory for conspirator, top decking it, and then still have actiosn left to draw it for play this turn. If we trash the necropolis after the overgrown estate, then the win rate goes down to 83%.
Overgrown estateThe +1 card from trashing this card is very minimal. 1% difference in win rate.
Opportunity cost of points vs SheltersOne of the benefits of estates over shelters is they have victory points. If our combo is trashing the starting estates, that gives big money a 3 point lead that must be overcome. A shelter game typically favors the trashing engine. If we pretend the shelters each worth 1 point, the win rate for the combo is down to 83%.
In summary:
- 15% comes from hovel
- 1% comes from overgrown estate
- 5% comes from necropolis
- 5% comes from opportunity cost of victory points
So there you have it. The hovel reaction actually had the largest impact on win rate. They are not addiditive effects, in combination this produces 36% win rate difference for this strategy.
The above analysis is for only one strategy, your mileage will vary. This set of cards is particularly sensitive to the bonus trashing from hovel. Dont ignore the impact of shelters!
Here's the code for the strategy:
private static CardPickByPriority PurchaseOrder()
{
return new CardPickByPriority(
CardAcceptance.For<CardTypes.Armory>(gameState => CountAllOwned<CardTypes.Armory>(gameState) < 1),
CardAcceptance.For<CardTypes.Forager>(gameState => CountAllOwned<CardTypes.Forager>(gameState) < 1),
CardAcceptance.For<CardTypes.Province>(),
CardAcceptance.For<CardTypes.Duchy>(gameState => CountOfPile<CardTypes.Province>(gameState) <= 1),
CardAcceptance.For<CardTypes.Estate>(gameState => CountOfPile<CardTypes.Province>(gameState) == 0),
CardAcceptance.For<CardTypes.GreatHall>(gameState => gameState.players.CurrentPlayer.AvailableBuys > 1 && gameState.players.CurrentPlayer.AvailableCoins == 6),
CardAcceptance.For<CardTypes.GreatHall>(gameState => gameState.players.CurrentPlayer.Hand.HasCard<CardTypes.Hovel>()),
CardAcceptance.For<CardTypes.GreatHall>(gameState => CountAllOwned<CardTypes.GreatHall>(gameState) < CountAllOwned<CardTypes.Conspirator>(gameState)),
CardAcceptance.For<CardTypes.Conspirator>(),
CardAcceptance.For<CardTypes.GreatHall>());
}
private static CardPickByPriority ActionOrder()
{
return new CardPickByPriority(
CardAcceptance.For<CardTypes.Necropolis>(),
CardAcceptance.For<CardTypes.Armory>(gameState => gameState.players.CurrentPlayer.AvailableActions > 0),
CardAcceptance.For<CardTypes.GreatHall>(),
CardAcceptance.For<CardTypes.Conspirator>(gameState => gameState.players.CurrentPlayer.CountCardsPlayedThisTurn >= 2),
CardAcceptance.For<CardTypes.Forager>(gameState => HasCardFromInHand(TrashOrder(), gameState)),
CardAcceptance.For<CardTypes.Conspirator>(),
CardAcceptance.For<CardTypes.Armory>());
}
private static CardPickByPriority TrashOrder()
{
return new CardPickByPriority(
CardAcceptance.For<CardTypes.OvergrownEstate>(),
CardAcceptance.For<CardTypes.Estate>(),
CardAcceptance.For<CardTypes.Necropolis>(),
CardAcceptance.For<CardTypes.Copper>(),
CardAcceptance.For<CardTypes.Hovel>());
}