Mattis Engineering
How We Designed Mattis AI Difficulty Levels and a Hint Button That Plays Like a Human (Sometimes Better)
We explain how AI levels in Mattis differ in practice, why the hint button uses the same game logic, and how this creates fairer, more human-like play.
Some Mattis rounds are not lost because you lacked good cards, but because one early decision had consequences several moves later. That is exactly the feeling we wanted to take seriously when we built the AI and the hint button: the game should still feel like Mattis, but decisions should feel more human, more fair, and easier to learn from.
When we started this work, it was tempting to make easy mode more random and higher levels artificially stronger. We did not go that route. Instead, we wanted every level to follow the same rules as the player, while differing in how well each level evaluates situations during play.
The hint button became a natural part of the same approach. If hints are going to be useful, they need to come from the same game logic the AI actually uses. Otherwise, you get advice that can look right in isolation, but does not match the opponent you are playing against.
In this post, we explain how we solved this: how the levels are built, why the hint button is connected to the same logic, and how this together creates a more believable Mattis experience.
What we wanted to achieve
Our main goal was to separate the levels without changing the game rules. All difficulty levels therefore play the same game, but with different quality of decisions. That makes progression clearer for the player: easy mode gives more room to learn, while higher levels punish weak choices more and use strong opportunities better.
Another important part was stability over time. After many matches, the levels should still feel consistent. You should not experience an opponent that feels random in one game and unnaturally precise in the next. That balance matters for trust, and trust matters for whether a card game remains fun to come back to.
How we differentiate the levels
All levels are built on the same core logic. The difference is how well they evaluate the situation they are in, and how well they choose between legal moves. On lower levels, we more often see simple and safe choices. On higher levels, choices become more deliberate, especially in rounds where small decisions can have large consequences later in the game.
This means level differences are primarily about decision quality. We do not make hard AI by giving it hidden information or unfair advantages. Instead, we make it harder by making it better at playing Mattis the way a strong human player would.
Why the hint button is built on the same logic
The hint button is connected to the same game logic the AI uses. When you press hint, you get a suggested legal move for the exact position you are in. We chose this because it makes the experience more consistent: hints and AI “think” within the same frame.
This also makes hints more useful in practice. If you use hints to learn, the suggestion comes from the same evaluation used in matches against AI opponents. So you are not getting a random tip, but a recommendation that aligns with how the game is actually designed.
The hint button still does not play for you. It gives a recommendation, and you decide what to do.
Why this feels more human
When AI follows the same rules and the same information as the player, the experience feels more natural. It can still be strong, but it does not feel fake. You can see it making good decisions in situations where you also need to make difficult trade-offs, and that makes matches feel more real.
At the same time, this gives us a clear direction for future improvements: if we improve the game logic in one place, both the AI and the hint button improve together. That makes the solution easier to maintain and easier to understand.
In short, we chose a model where fairness, consistency, and learning value support each other. You should be able to learn from the game, feel real differences between levels, and trust that both AI and hints behave as expected from one match to the next.