Transitive (Efficiency Race) vs Non-Transitive (Rock Paper Scissors)

So I’ve said that there’s 2 types of multiplayer game fundamentally: Efficiency Race and Rock Paper Scissors. This video (re)introduced me to the mathematical concept of Transitive and Non-Transitive relations. This is an amazing lens for describing the difference between these two fundamental games.

In an Efficiency Race, there is always one option, or set of options that is always better than the others, per some metric of efficiency (time or victory points). This means that options (or combinations thereof) can be ranked against each other in a transitive fashion. If A > B > C, then A > C. Trackmania is the most pure example of this out there, since you cannot interact with the opponent in any way and a given route will always be faster or slower than another route (assuming you follow it exactly).

rockpaperscissorspayoff - Copy
This is the payoff matrix for an efficiency race version of rock paper scissors, notice that rock always wins, and scissors always loses, unless they tie

In Rock Paper Scissors (or the Shell Game), the correct option is different depending on your opponent’s option. A > B > C might be true, but C > A, making a loop. In a game like this, there isn’t a clear best answer, the best answer will always be a mix of your options rather than any clear course. In order to make a decision non-transitive, there must be hidden information about what the opponent’s option is (or which options they have available, or chose in the past), such as by going simultaneously, or having a hidden hand of cards, or an army hidden behind the fog of war.

rockpaperscissorspayoff
This is the payoff matrix for normal rock paper scissors, notice how each option wins against 1 option and loses against one option.

There’s another element at work here too, which is brought up in the video, luck or RNG. Luck can also have a transitive or non-transitive relationship with player choices. Luck can have a static effect on game state regardless of choice, thus being transitive (ie. you get the same lucky effect regardless of what your choices are). Or luck can have varying effects depending on your decision, making some decisions more powerful than others. On top of that, there’s input-randomness versus output-randomness, which can both be either transitive or non-transitive. Transitive input or output randomness isn’t very influential on a multiplayer game typically (everyone being uniformly closer/further from winning usually isn’t that big a deal unless someone was about to win/lose). Non-transitive input-randomness changes how much every option rewards the player, which jumbles around what the optimal solution is in an efficiency race game, and jumbles the payoff matrix of a rock paper scissors game. Non-transitive output-randomness is the worst kind of randomness because it essentially screws with your ability to make decisions.

This also makes a statement about single-player games. Ideally, single-player games are fair. Fairness includes a few things, like providing clear information about your choices, and clear feedback about the results of your choices, but it also means not randomly screwing you over. You should always have a choice that will lead to success (unless you checkmate yourself, which should also be clearly communicated). If there’s hidden information that causes you to fail, such as output-randomness, that’s not good.

For this reason, single player games CANNOT have truly non-transitive decisions. A single player game cannot be true rock-paper-scissors like a multiplayer game without becoming unfair. This means that every situation in a fair single-player game always has a knowable optimal solution (per whatever metric you choose). What a game can do however is non-transitive input-randomness, which jumbles what the optimal solution is. The most common form of this in action games is enemies using random attacks at random times and random positions, but the attacks are slow enough that you can react to them. Picking the best way to avoid an attack (and punish it) might be difficult and the random variation means you need to resolve over and over as a fight progresses. If the state space of a given fight is big enough, then hopefully you’ll never encounter the same exact situation twice, keeping you solving fresh problems the whole time (and this also shows that the issue with grinding or enemies with too much HP is that either you intentionally limit the state space to keep things quick, or you exhaust it through enough repetition, which is bad pacing).

waterfox_ePOFCyh2XH
Single player games always have this type of payoff matrix, but eliminating choices to get to the optimal payoff takes time, and if the choices get jumbled, it requires you to recalculate, meaning you’ll choose less optimally every time and need to rely on heuristics. Source

When I say that I want single player games with counters, I mean that I want them to have this type of non-transitive decision-making property that comes from non-transitive input randomness. In aggregate, all the choices you make throughout a single-player game might be perfectly transitive, but games can do a lot to make individual choices along that road more or less transitive, and can leverage input-randomness or deterministic chaos to affect the payoff matrix of those choices, which makes finding the aggregate optimal solution really hard! I usually sum this up as saying choices are situational or not, lead to interesting decisions or not. This is a shortcut to this more fundamental rule.

Fundamentally, fair single-player games are always going to have an optimal solution for every situation, but by varying the payoff of each option in each situation, single-player games can emulate the counters of multiplayer rock-paper-scissors games, without becoming unfair to the player by invoking output-randomness.

By making these counters “soft” instead of “hard” (making the payoff or success rate a continuous range of values that varies depending on the situation, instead of a binary that flips, in other words, avoiding the silver-bullet problem), single player games can have fair interesting choices. This is what brings a game closest to the type of interesting decision-making and strategy that I find in multiplayer games, like Fighting Games, RTS, or FPS. There are a few games that I think have really succeeded at this, the best of which I’d label as: Nioh, Dead Cells, God of War 2018, Doom Eternal, Metal Gear Solid 3 (and V), Thief 2, Cosmic Star Heroine, and Starcraft’s campaign (at least, SC2’s campaign on a difficult that’s right for you, maybe with some modifiers, like in coop).

This counter-based design isn’t specific to any genre, a platformer can achieve this, driving game, stealth game, FPS game, RTS, RPG.

Even without a counter based design, a game can still use this design pattern (non-transitive input-randomness affecting limited choices with a continuous range of payoff values/success rates) to create interesting decisions, such as in the best 2d zelda games and Ittle Dew 2, where hitting enemies knocks them into different positions, and their attacks moves them into varying positions, changing the angle and timing you need to approach for an attack. Getting Over It with Bennett Foddy offers a deterministic version of this, thanks to the high amount of chaos inherent in its physics engine and level design, mimicking the effect of input-randomness, but ultimately allowing players to master the system as they get more precise.

MV5BYzAzYTc4ZGMtMzc5ZC00ZmYzLWEzNjItOTFjMjA2MjdmZmI5XkEyXkFqcGdeQXVyNjcyNzkwMTc@._V1_
Golf games have really clear meters for the continuous ranges of values players select between, making them a clear example of the type of interaction going on across many games.

On the side of multiplayer games, I think Efficiency Races and Rock Paper Scissors should be mixed together in any good multiplayer game. Pure RPS makes the game inconsistent and flat. Pure efficiency race means the better player will usually win way too consistently and the game is less about actually interacting with your opponent than your single player skill, so playing a match isn’t much different than playing by yourself. By mixing the two, it allows different players to be good in different areas, which makes the individual player matchups different, because different players will have different payoff matrices versus you, which makes playing each new player an enjoyable experience, it allows different players to have a unique playstyle, both in which options they favor, how often they win with those options, and their payoff for winning with those options.

Having a low threshold for efficiency in an RPS game (every player can do the optimal combos/setups with ease) means every player gets the same payoff for a given option, so the game comes down more to which options players favor rather than the more intricate game of which options the players have mastered and to what degree. There might still be differences in each player’s knowledge of the state space (if the state space is large enough), but it can lead to the game feeling really samey once you hit the skill cap, and further skill improvements become more and more gradual and less rewarding.

I think with this framework, I’ve tapped into something more elementary about interesting decisions than I have in a long time, making what I previously called, “fuzzy evaluations” and “situationality” a lot more clear. Haven’t done this in a long time, I hope I haven’t alienated people too much with the technical jargon. In retrospect, I probably should have called, “efficiency races,” “optimization competitions”, but eh, hindsight’s 20:20 and both are pretty good for getting across the gist of what they mean and I think it would be too much work to go back and change it all now (vote in the comments for your favorite).

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s