Thematic Solitaires for the Spare Time Challenged

A blog about solitaire games and how to design them. I'm your host, Morten, co-designer of solo modes for games such as Scythe, Gaia Project and Viticulture.
 Thumb up

A return to the Village - Dice or cards for AI action selection

Morten Monrad Pedersen
flag msg tools
Microbadge: Fan of Stonemaier GamesMicrobadge: 1 Player Guild - Together We Game AloneMicrobadge: 'When playing a game, the goal is to win, but it is the goal that is important, not the winning' - Dr. Reiner KniziaMicrobadge: Level 17 BGG posterMicrobadge: Automa Factory fan
A while back I left you hanging after having provided half the answer to a question that Stephen Miller asked me in the comments of another post. Today I’ll remedy that.


Stephen’s question was a part of a discussion of two solo variants for the game Village and in my last post and came after I wrote that: “When I read the two solo variants I was also thinking about going away from the die rolls which can lead to some very swingy behavior, and I'd probably try to go the way I've done in Between Two Cities and Scythe, where there's a wee bit of intelligence in the actions of the opponent.”

I recanted on the second part of that statement when I answered Stephen about that so I won’t talk about that today, instead I’ll talk about the first part of that statement, the part about the swinginess of dice.

As those who tried my Automas (artificial opponents) will know, I prefer to use cards for action selection instead of dice and I’ll talk about that today.

Now, you might say that the differences between dice and cards have been covered multiple times before in other places, but I’ll cover it again in the hope that I can add something to it in relation to artificial opponents.

The trivial difference

Let’s start by covering the ground already trod many times: The trivial difference between dice and cards is that their distributions become different when doing multiple rolls/draws.

As an example lets say that an opponent must choose between 6 different actions. We could then represent that using dice or cards as follows:

Card draws: We make a deck of 24 cards. 4 cards have action 1 on them, 4 have action 2, etc. Each turn you draw a card to determine what action the Automa takes.

Die rolls: Each turn you roll a d6. If you roll 1 the Automa choose action 1, if you roll 2..., well you get the picture.

On the surface, these two approaches might seem equal, but that’s only the case if you reshuffle the deck after each draw. If you don’t do that, then the probabilities change after each card you draw and you can’t get behavior as swingy as that a die can produce. After 20 action selections, the die roll approach could easily have chosen the same action at least 6 times. The card draw approach, on the other hand, can’t choose the same action more than 4 times.

Cards have memory, dice don’t.

Which of these two approaches is better is depends on the game. Die rolls will provide higher variability in the Automa’s behavior making each session play out differently, but the downside is that it can be much harder to balance the difficulty level and game experience.

Let me take an example of a die roll based Automa, where the die rolls can produce swinginess: The Rogue Galaxies of Tiny Epic Galaxies (TEG). In this game, you take actions to launch space ships to new planets and then perform a colonization action repeatedly to colonize the planet. This plays out as a race against the artificial opponent to colonize the planets first.

Board Game: Tiny Epic Galaxies

Tiny Epic Galaxies solo. Image credit: Rachel M.

The artificial opponent in TEG picks actions by rolling a custom d6. This means that it can be prone to streaky behavior, and in one game it might repeatedly roll the actions it needs and zoom past the player to infinity and beyond, while in other games it’ll spend most of the game walking into the same wall over and over again.

If the opponent for example starts out by rolling launch spaceship actions and then rolls colonization actions repeatedly, then it’ll be highly efficient, much more so than a human player can be (because its colonization actions are better than the human player’s). If on the other hand it starts out by rolling many colonization actions before it launches its spaceships then it will do a whole lot of nothing. Similar things can happen to human players in the game, but they have ways of mitigating bad luck.

This means that the difficulty level is all over the place, which is one of my two points of criticism of what’s otherwise a nice game.

Combatting swinginess

A deck of cards would have meant that the opponent would be much more likely to have a balanced behavior and provide a more consistent challenge. It would also have meant an added cost and physical weight, which would likely have been a deal breaker for a mini-game like Tiny Epic Galaxies. Reusing the same dice as the player uses is also more elegant than adding a deck of cards and it would have been a pity if the player didn’t get a chance to roll those nice custom dice as much . So I’m not arguing here that TEG should have used a deck of cards for the opponent, I’m just illustrating the differences between the two approaches.

This post was actually triggered by a discussion of a solo variant for Village. The artificial opponent in that solo variant uses a die for action selection but manages to present another fix to the problem in TEG: If the opponent rolls an action that it can’t take it moves on to the next action until it finds one that it’s actually allowed to take. Doing the same thing in TEG would have added a little bit of complexity, but it could have decreased the highly volatile nature of the game’s difficulty level.

Board Game: Village

In village cubes are placed on action spaces. Each time you take an action you also take a cube from that space, and once there are no more cubes on a space that action can’t be used (the spaces are refilled with cubes once all space are empty). Image credit: Jo Leutton.

This approach could have been used in TEG by introducing a rule that turned colonization actions into launch spaceship actions if the colonization action could not be performed and vice versa.

In Village it does introduce another issue, though. Because you know what ordering the actions have you can start to partially predict and influence the action choices of the opponent. If, for example, there’s only one cube left on the Council action space, then I know that if I remove that cube the opponent will now be twice as likely to choose the family action because that’s the next action in the action order. That may or may not be what I want depending on the situation. To me doing this seems like a gamey exploitation of the opponent’s simplicity and is one thing I’d like to tweak.

Another small issue with using a die for action selection in Village is that it makes choosing each of the eight actions equally likely, but the game is intentionally made, so that some actions are to be taken much more frequently than others.

The Market action space for example has 1 cube placed, meaning that it will only be taken once during a game round (that’s not quite true, but close enough for our purposes), while the craft action space has 6 cubes placed meaning that it’ll get taken 6 times in a round.

Given that the die is equally likely to roll each action it’s very likely that the market action will be unavailable to the human player more quickly than in a multiplayer game. It also leads to the next action, the travel action, to become twice as likely to be taken, and since that only has two cubes the opponent can often end up rushing the player to use that action. This annoyed somewhat after I got the Port expansion, which makes travelling much more interesting and I wanted to try that out, but the opponent kept taking the travel action cubes before I could get ready to use that action.

Had cards been used, then these issues could have been avoided by creating an action selection distribution more in line with the number of cubes at each action space.

There’s more space on a card than on a die

So how would I go about tweaking the Village solo variant to avoid this issue? I’d start by making the astounding observation that there’s more space on a card than on one face of a die. I know that kind of insight really blows your mind .

Why is this important? It’s important because a card has enough space to allow you to tell the player what secondary, tertiary, etc. action to take if the specified one is not allowed and you can present a different ordering on each card, so that the player can no longer manipulate the opponent.

One face of a die is not large enough to do something like that. You could have the player reroll, but that can become annoying, rolling multiple dice at once each with their own color and then checking for example the green first, then the red, then the blue, could work, but you’d still risk getting into situation where neither of the dice specified a valid action.

You could of course have some combination of dice and lookup tables, but personally, I find cards better for this, since all the information the player needs will be on the card that he’s already looking at, he won’t have to find the table and the correct entry in it.

That said if you’re working on an Automa for a dice game then it might feel more appropriate to the player to use dice and if you can reuse the player dice that are already there as in TEG, then even better.

Humans have memory, dice don’t

The more fixed distribution of actions selected via cards has another effect: The actions of the Automa becomes more predictable when using cards, since you for example know that the Automa has drawn 4 of the 5 attack cards early, then it’s likely to be less aggressive in the remainder of the game. This can both be a good thing and a bad thing.

It can be a bad thing if it leads to the player being able to “trick” the Automa into taking obviously catastrophic actions, because she knows which cards are left. This can become a big issue if you let Automa go through all the deck, because then a player counting cards will know what action will be taken, when the last card is drawn. Therefore I recommend adding a card to the deck that instructs the player to reshuffle the deck or have a mechanic that in another way forces a reshuffle. This is actually the one thing I regret not doing for the Automa in the Tuscany expansion pack, since that goes all the way through the deck.

On the other hand it can be a good thing, because having an inkling about what the Automa will do will make it feel more like a human, since you’ll likely often be able to predict which actions a human opponent is likely to make.

The second part of my answer

I’m now in a position to provide the second part of my answer to Stephen’s question and that is that if I were to make an Automa for Village, then I’d go with a deck of cards. I’d use those cards to make it unpredictable which action the Automa would try next if its first choice was unavailable and I’d make the frequency of selecting each action more in line with the distribution of the cubes on the action spaces.

Going with cards can also alleviate an issue with scoring in the solo variant: In Village the game takes places over four generations and members of your family dies off as the game progresses. Briefly put family members that die are placed in graves/the village chronicle and once all spaces graves are full the game ends. This provides a timer mechanism in the game that determines how many turns the game takes and the choices players make can impact the number of turns in the game.

In general, you accumulate more and more points over time, which means that if the game goes on for more turns, then you get to score more points. This isn’t a problem in the multiplayer game, since the lengthening or shortening of the game applies equally to all players. In a high score based solo mode it’s a different story, though, since here you’re playing against your past self who may not have gotten to take the same number of turns as current you do in your current game.

Basically, the score you’ll be getting in the high score solo mode, is to a large extent controlled by how quickly the artificial opponent kills off its family members. With a dice based action selection this is rather variable, because in some games the die might repeatedly roll the actions that don’t age the opponent’s family, while in another game it might rarely roll those actions. The variability in the pace of aging is exacerbated by another mechanic (the village chronicle), which I won’t get into here, but it can cause large differences in how many family members need to die before the game ends.

With a card draw based approach the designer would have had much better control of the length of the game, thus making score comparisons more meaningful between games, which is important in a high score mode.

While I think that a card draw based action selection system for the Village opponent would create a more balanced game, then a die roll based one has the distinct advantage in a fan made variant that you don’t have to PnP a deck of cards, but can start playing immediately if you have a d8, which is something I really appreciate.

Another advantage of a die for action selection in Village is that it’s very simple for the solo mode designer to make a die based system. A card based system would have required more work. In my own work on solo modes I usually start out using a dice based approach during the initial phase of rapid iteration, so that I can get started quickly and don’t have to print, cut, and sleeve a new deck each time I make a change. This approach has saved me countless hours.
Twitter Facebook
Subscribe sub options Wed Dec 16, 2015 10:31 am
Post Rolls
  • [+] Dice rolls
Loading... | Locked Hide Show Unlock Lock Comment     View Previous {{limitCount(numprevitems_calculated,commentParams.showcount)}} 1 « Pg. {{commentParams.pageid}} » {{data.config.endpage}}
    View More Comments {{limitCount(numnextitems_calculated,commentParams.showcount)}} / {{numnextitems_calculated}} 1 « Pg. {{commentParams.pageid}} » {{data.config.endpage}}