Summonable Tokens and AI

I have a cool addition to the game: Summonable Tokens. I made a Necromancer token and cards, one of which is Summon Skeleton, it creates a token at one of the grave mounds that are placed around the map. The summoned skeleton token is a “Lesser Token” which doesn’t work like a regular token on your team in that it can’t “play cards”. No no, a Lesser Token only acts at the end of your turn and does a specific action each time. In the skeleton’s case, it’s “Shamble” which is a short distance melee attack.

Summoning lesser tokens can work for the player too, so I’m thinking of making a Beast Master character who can summon different animals which will be Lesser Tokens and have different behaviors such as a Wolf that Lunges, a Hawk can like… dive I guess or a boar can Charge (move in a direction until it hits something.

This morning I got the card action “InvokeLesserToken” working. As in, being able to play a card that forces your Lesser token(s) to do something. For example, the card Hunger Of The Dead: It causes a Lesser Token to do 3 Melee moves. The player doesn’t choose the Lesser Token’s target or aim it’s shot, it simply forces the token to do it’s own thing.

AI Play Evaluation Helper

Over the last 2 days I also implemented a new method on CardActions called SpecialAiEvaluation() which returns a float that the AI uses to evaluate a play. It adds or subtracts from the play’s score, which it turn makes the card more/less likely to be played by the AI. This is useful because sometimes the AI needs help deciding when a card is worth playing. Sometimes the card is just very powerful but hard for the AI to systematically understand why. For example Summon Skeleton; it gets another token on the field but the AI currently doesn’t evaluate that. It only ever looks at paths and targets’ properties. So the Summon Skeleton action’s SpecialAiEvaluation() simply returns a large number, in this case 300, which is a higher score than any standard evaluation the AI does itself ensuring the card is selected to be played.

This SpecialAiEvaluation is in contrast to how the AI in Hearthstone does it’s evaluation. During a talk at GDC years ago the original AI guy on the Hearthstone team said that one goal of his AI was to not use any special, helper methods of evaluating plays. This is great as it means the AI is advanced enough to understand the value of a card’s effects without having to explicitly be told.

While it is possible that I devise such a robust system for my project, it is likely unnecessary with the time/effort required not being worth it, at least not now. In the current form I can be highly specific about how a particular CardAction is evaluated. Later, if a particular action (like summoning a token) proves to be something that happens often the action’s special evaluation can be converted into a standard evaluation step. It’s easy to imagine that the general scoring of adding a new token to your team is usually a good thing, but it’s just not better than performing a game winning attack, or saving a higher value token with a heal.