Each turn starts with a **fortune card** that changes the rules for that turn. A few examples:
* *Pirate*: final score is doubled
* *Skull x1 / x2*: you start with 1 or 2 pre-locked skulls, making a bust much more likely
* *Pirate Ship*: you must collect a sword quota or lose points from your total
* *Guardian*: you may reroll one skull once during your turn
* *Animals*: monkeys and parrots count as the same symbol for combinations
**How to read the chart**
Each row is one fortune card, sorted worst to best expected value (bottom = best). Each bubble is a 100-point score bin, with area proportional to the probability of landing there under optimal play. The triangle (▽) marks the **expected value:** the average score a perfect player would earn over many turns with that card. The big spike at 0 is the bust probability.
**What stands out**
Each card has a distinct shape that reflects how it actually plays:
* *Skull x2* (starts your turn with 2 locked skulls) is almost entirely a spike at zero with a tiny tail. You’re mostly just hoping to survive.
* *Pirate Ship* cards (collect a sword quota or lose points) look bimodal: you either fail or clear the quota and land in a specific bonus band. The whole turn comes down to one threshold.
* *Pirate* (score x2) has the same bust probability as the baseline, but the distribution is stretched far to the right because of the multiplier.
* *Treasure Island* (banked dice score even on a bust) has a visibly smaller zero spike: so your floor is higher even when things go wrong.
* *Guardian* (reroll one skull once per turn) was the most surprising result for me: it’s the second strongest card at 905 pts EV, just behind Pirate. It sounds like a minor perk, but skulls are binary: a third one ends your turn immediately. Being able to erase one skull at the right moment means you bust less often and more reliably land mid-range scores, and that consistency is what pushes the EV so high.
Most cards land between 400 and 800 expected points. Each fortune card has its own distinct feel and strategy, yet the EVs stay remarkably close. I think this is a mark of genuinely good game design.
The two outliers tell the story at the extremes. Pirate at 1158 pts is clearly the best card, and drawing it feels like it should. Pirate Ship (4 swords) is the only card with a **negative** expected value (-156 pts): even playing perfectly, you expect to lose points on average because the quota is so hard to reach. Brutal, but rare enough (only two such cards in the game) that it works.
**Data source:** 200k simulated turns per card, under the exact optimal strategy computed via dynamic programming (MDP + value iteration). [Source code on GitHub](https://github.com/supitalp/millesabords).
1 Comment
[**Interactive version**](https://supitalp.github.io/millesabords/score_distributions.html) (hover for exact probabilities, click bubbles for example dice combinations)
**The game**
[Piraten Kapern](https://boardgamegeek.com/boardgame/117663/piraten-kapern) (also sold as “Mille Sabords!”) is a push-your-luck dice game designed by [Haim Shafir](https://boardgamegeek.com/boardgamedesigner/1210/haim-shafir). You roll 8 dice trying to build combinations (3-of-a-kind = 100 pts, up to 8-of-a-kind = 4000 pts) while avoiding skulls. Three skulls and your turn immediately ends with zero points.
Each turn starts with a **fortune card** that changes the rules for that turn. A few examples:
* *Pirate*: final score is doubled
* *Skull x1 / x2*: you start with 1 or 2 pre-locked skulls, making a bust much more likely
* *Pirate Ship*: you must collect a sword quota or lose points from your total
* *Guardian*: you may reroll one skull once during your turn
* *Animals*: monkeys and parrots count as the same symbol for combinations
**How to read the chart**
Each row is one fortune card, sorted worst to best expected value (bottom = best). Each bubble is a 100-point score bin, with area proportional to the probability of landing there under optimal play. The triangle (▽) marks the **expected value:** the average score a perfect player would earn over many turns with that card. The big spike at 0 is the bust probability.
**What stands out**
Each card has a distinct shape that reflects how it actually plays:
* *Skull x2* (starts your turn with 2 locked skulls) is almost entirely a spike at zero with a tiny tail. You’re mostly just hoping to survive.
* *Pirate Ship* cards (collect a sword quota or lose points) look bimodal: you either fail or clear the quota and land in a specific bonus band. The whole turn comes down to one threshold.
* *Pirate* (score x2) has the same bust probability as the baseline, but the distribution is stretched far to the right because of the multiplier.
* *Treasure Island* (banked dice score even on a bust) has a visibly smaller zero spike: so your floor is higher even when things go wrong.
* *Guardian* (reroll one skull once per turn) was the most surprising result for me: it’s the second strongest card at 905 pts EV, just behind Pirate. It sounds like a minor perk, but skulls are binary: a third one ends your turn immediately. Being able to erase one skull at the right moment means you bust less often and more reliably land mid-range scores, and that consistency is what pushes the EV so high.
Most cards land between 400 and 800 expected points. Each fortune card has its own distinct feel and strategy, yet the EVs stay remarkably close. I think this is a mark of genuinely good game design.
The two outliers tell the story at the extremes. Pirate at 1158 pts is clearly the best card, and drawing it feels like it should. Pirate Ship (4 swords) is the only card with a **negative** expected value (-156 pts): even playing perfectly, you expect to lose points on average because the quota is so hard to reach. Brutal, but rare enough (only two such cards in the game) that it works.
[**Try the game**](https://supitalp.github.io/millesabords/) **with live optimal strategy hints**
**Tools:** Python, Plotly
**Data source:** 200k simulated turns per card, under the exact optimal strategy computed via dynamic programming (MDP + value iteration). [Source code on GitHub](https://github.com/supitalp/millesabords).