Isomorphism & Asymmetry

Isomorphism is a concept in Graph Theory, where 2 graphs, if they have the same nodes, connected by the same edges, are the same graph, no matter how they’re shaped. Basically this means that if two seemingly different systems have the same shape, they’re actually the same system.

One of the most popular examples of this is the Rest system in World of Warcraft. MMOs are known for being addictive. You pay a subscription to them, so there’s only so much time before your subscription runs out, and you want to get the most out of it. To avoid encouraging players to play constantly, many MMOs implemented penalties for playing continuously, to incentivize players to log off. Naturally players didn’t like having their xp gains drop to 50% as they continued to play during the WoW beta, so the developers tweaked the interface so that the “unrested” penalty became a rested bonus, granting 200% xp gains. The actual numbers didn’t change at all, but player reception to them did.

Another example I’ve described on this blog is the Hollowing systems in Demon’s Souls, Dark Souls 2, and Dark Souls 3. In the Souls series, your character has 2 states, Human and Hollow (Body and Soul for Demon’s Souls). Human form lets you engage with online functions, and has access to your full health bar, hollow form locks off online functions and has a reduced health bar. You can spend uncommon, finite supply, consumable items (Stone of Ephemeral Eyes, Humanity, Human Effigy, Ember) to regain your Human form, and thus your full healthbar. Naturally, the Souls games are all tuned such that you still take 3-4 hits to die from common enemies even if your healthbar only has half its max value, but the idea of being punished doubly for dying is offensive to a lot of people.

Perhaps in response to this, Dark Souls 3 framed its hollowing system as a bonus rather than a penalty. Your max health in Dark Souls 3 is smaller proportionally to your min health than in the other games, but it’s not displayed as a chunk of your health bar that is missing all the time, and you’re not hideous looking without an ember active. The actual numbers aren’t any different, but people seem to like it better.

In Breath of the Wild, weapons have a low durability and cannot be repaired. Almost all weapons of a category (sword, spear, heavy blunt) have the same moveset with different attack values, durability, and properties, so any given weapon is nearly 100% interchangeable for any other weapon in a given category. This means that rather than having an inventory of weapons like most fantasy RPGs, you instead have more of a loadout of whatever you’ve picked up recently, making the inventory system more similar to a modern First Person Shooter, where weapons are disposable, interchangeable, and very few are really situational. So rather than thinking of your inventory of weapons as your babies that you love, it’s more practical to think of them as a pool of damage to be unloaded into enemies and refilled with whatever they drop. Your total pool of damage is a weapon’s attack power times the number of hits it can do, plus the next weapon down the list until you get to the end. Thus in a manner rather similar to a FPS, you might have a higher damage weapon that’s good for finishing off strong foes quickly, but once the ammo (durability) empties out, you’re gonna have to find another one. So you may want to conserve ammo with your strong weapons, instead of seeing your weapons as persistent upgrades to your character like they would be in another game.

BotW cleverly stacks the deck in your favor in a subtle way, by having a “leveling” system chugging along in the background as you kill enemies. Every enemy has an xp value for defeating them, proportional to their strength. As you gain more xp, the enemies across the world get scaled up to stronger versions of themselves, and their equipment gets scaled up too, and becomes more likely to have advanced bonuses. This means that the pool of weapons available in the world gets stronger at a faster rate than the enemies do, and of course many enemies, such as bosses, remain unscaled regardless of your level. Since weapons always knock enemies down when they break, forcing them to drop their weapon, you’re constantly getting fed a supply of weapons that progressively grow in strength, so you can’t be left behind on the power curve unless you deliberately throw your weapons away (and Eventide Isle is designed to show how Link can still succeed, even starting with an empty inventory).

And of course, while this system in BotW might be really fun for gameplay enthusiasts who grok how the system is supposed to work and how they’re supposed to interact with it, it outright contradicts the more common framing of weapons being tools instead of ammo. This means that many players who can’t dissociate the theme and function of the weapon system just see the whole thing as a frustrating mess. This is amplified by cases like the Lightscale Trident, which is thematically the most powerful Zora Spear ever forged, and a sacred heirloom of the Zora Royal Family, but it breaks about as easily as most other weapons. Most people expect weapons to be semi-permanent upgrades that can be selected from at any time, with a durability system as some mild flavor that adds a sense of realism. So when a game breaks that framing and treats durability as an ammo counter, it’s aggravating to a lot of people.

In the pursuit of depth, it’s important to avoid having isomorphism within the same game; meaning, there shouldn’t be systems whose relationships are identical to one another. This means avoiding things that are proportionally the same in scale, rotation, mirroring, etc. 10 hp with 1 damage is proportionally the same as 30hp with 3 damage, unless there’s a 3rd factor that doesn’t scale along with those. Most RPGs have self-similar proportionality between the characters’ health, damage output, and enemy health and damage output across a game, meaning that the experience at the beginning frequently feels the same as the experience at any other point in the game.

In a blank endless room, the absolute (relative to the world, not each other) rotation of 2 characters locked onto each other is self similar, regardless of how much to the right they move, the only thing that can vary in proportion is how far away they are. The same is true of their absolute world position. If the two of them are translated any number of units away from the world’s origin point, in a blank endless room, there’s no real difference between any possible positions, except as relative to each other. If the characters are locked onto each other perfectly, then they’re not allowed to have different rotations relative to each other, therefore removing 3, and even 2d, space entirely. Avoiding isomorphism means avoiding symmetry, perfect mirroring, perfect rotation, perfect scaling, where nothing really changes.

Tekken attempts to avoid this mirroring/rotation problem by having characters be more dominant on their left or right side, able to catch people who sidestep to one side or the other, so even though you might be playing on an endless stage, sidestepping around your opponent in either direction is still important and different per-matchup. Not to mention that they otherwise avoid the problem by introducing terrain, which characters can be closer to or further from, and the rotation of the characters can orient them against the wall, or into corners, which might be harder to escape from. This makes the absolute position/rotation of the characters important.

Games with movement that’s locked to 4 or 8 directions (2d Legend of Zelda, except Link Between Worlds; Princess Remedy) have a weak form of this baked into the movement system, where relative positions of each character become more important to line up attacks, since they can’t be aimed at an arbitrary angle. In these games it’s really important to approach your opponents from either the cardinal or diagonal lines of the movement axes, depending on where your attacks are oriented relative to your character, and where the enemy’s attacks are relative to them. A Link to the Past and the gameboy zelda games accentuate this more by having Link’s attack originate from his side, rather than appearing straight from his center, as in Zelda 1. This has a weak effect in most cases, but it’s there. Since sword wielding enemies frequently have their sword a little off to the side, moving carefully can sometimes allow you to poke around their sword, which is interesting.

Most fighting games have what’s called “Guts Scaling”, where characters take less damage as their health gets lower. Since this is applied uniformly to all attacks, the effect is that characters have a little more health concentrated at the bottom of their health bar than they appear to. This doesn’t make it easier to come back from behind, but it does mean that matches spend more time in the stage where players look like their health is low. In other words, this is isomorphic in most fighting games, it’s purely a psychological trick. In Guilty Gear, the guts scaling is more extreme than other games, but chip damage and throws are exempt from this scaling, dealing their full damage, meaning that as someone gets lower in health, chip damage and throws become proportionally stronger, which means blocking is proportionally stronger at the beginning of the match, and weaker at the end.

Symmetry can frequently be useful however, for guaranteeing consistency and fairness. Multiplayer games are frequently symmetric in order to maintain fairness between teams. Asymmetric multiplayer games (Counter Strike, Overwatch, TF2, who serves in Tennis) are frequently played with the sides reversed to create symmetry, to give each team a chance to play each side. Many hitboxes for competitive games are designed to standardize oddities to create consistent outcomes (such as projecting 3d hitboxes orthographically). In boxing, left handed boxers (called southpaw) are frequently said to have an advantage, because they fight with their strong hand on the same side as their opponent. This breaks the mirroring of strong right arm versus strong right arm, closed stance, or open stance. The general rule is that asymmetry creates interest and breaks up redundancy, but symmetry creates fairness and consistency.

Developers should recognize framing and be careful with whether they label something a bonus or a penalty. If it’s more common to be “penalized” than to not be, players would probably prefer if that lack of penalty were framed as a bonus instead. Skilled players should recognize isomorphic game systems and not assign meaning based on whether the developer calls something a bonus or penalty. Developers should attempt at every stage of development to try to have relationships between different elements change in proportion, rather than retain the same proportion at a different scale, rotation, or so on. This means introducing reasons why the characters might want to rotate or not, or move around relative to each other or not. It means making levels, attacks, scaling, asymmetric relative to rotation, position, distance, and time.

Designing AGAINST Speedrunners

Speedrunners are terrible. They ruin games for everyone, and love to talk about how your coders are buffoons when they perform intricate tricks with elaborate setup and tight inputs that no ordinary player would ever think of doing, let alone be able to perform. Here’s how to drive these pests away from your games.

First, make an inaccurate ingame timer. Include load times (multiplied by 2, so now everyone needs to buy an SSD), cutscenes, character creation, time since the game was started. Hide it until they beat the game so they can’t reliably check if it’s accurate without cross referencing another timer.

Next, make file management annoying, or impossible. Utilize cloud saves, have events in one save affect events in a new game. Store savedata in the game files, encrypted, so they’re difficult to access, and difficult to modify. This makes starting completely fresh annoying.

Include unskippable cutscenes or autoscrollers that are about a minute or more, and vary their length randomly. Unskippable cutscenes are intensely irritating to speedrunners who just want to play the game. If they’re too long, the runner can take a break, but if they’re only a minute or so, they can’t comfortably do anything but sit and wait. Prompt the player to continue with text to make them all the more annoying.

Add RNG to practically everything. Damage, speed, enemy behavior, drops, etc. Be sure to include a big time saver powerup or item as a random drop that can only be obtained about a third of the way through the game, so speedrunners are obliged to obtain it, and need to waste time playing the game to see if it’ll drop. If you can work multiple of these in, all the better.

Ruin the wrists of speedrunners by including actions that go faster or deal more damage per second when they mash harder. Make the speedup from mashing grow exponentially as they mash faster, so the fastest possible mash has a significantly bigger benefit.

Next, don’t implement deltatime correctly for framerate independence. Make it so the timescale is faster at lower FPS, so that in order to move fastest, you need to reduce the FPS to as low as possible. Additionally, don’t benchmark the game to any specific FPS, just let it do whatever it wants, so then speedrunners need to argue about where to set the framerate standard, and need to force it to behave with outside programs. Make the input delay vary randomly over time, and don’t have a buffer for actions. This makes any frame-perfect input more difficult, and in general makes the game more frustrating to play.

Vary the speed of things like elevators and doors based on the difficulty picked. Higher difficulties should have faster elevators and doors, but also higher self-damage where applicable, forcing runners to play on the highest difficulty in order to get the fastest times.

Include drop-in online elements like Dark Souls so runners need to intentionally disconnect the game from the internet. Combine this with Denuvo, or other always-online DRM, which should also be set up to avoid tampering with Cheat Engine, which speedrunners use to practice and occasionally mod out RNG. Between these, runners will either need to accept that runs include online elements, they’ll need to authenticate with denuvo and play offline until authentication expires, or crack the game outright to disable always-online.

Make the game fast, make it linear (or open world, but with a linear sequence of objectives), and make it so the player snaps onto a bunch of environmental features, but has random animations of random length for traversing them. This helps narrow the skill gap, and introduce more random variation in timing. Making it linear makes the routing less difficult, and making it fast is something that you’d think would appeal to speedrunners, but they’re actually indifferent about. Making it open world means everything takes longer than it needs to. When making it open world, be sure that every event flag checks for multiple prerequisite event flags, so nothing can be completed out of order.

Don’t allow players to bind anything to scroll wheel, especially not jump or use. This has been used in countless games for various exploits.

Practice good coding conventions, don’t mutate state unnecessarily, use a strongly typed language with collections and avoid using pointers. Have each element interact with as few others as possible. Validate and sanitize your inputs. More safe coding practices means less glitches. Design mechanics to have a singular purpose that it accomplishes with no variation in output and no interaction with other elements. This reduces the chance of players finding unexpected uses of mechanics.

Thoroughly wall off areas that aren’t supposed to be accessed. Include kill planes in out of bounds areas. Don’t spawn loading zones before they’re supposed to be accessed. Lock players in rooms/arenas until they’re done with their current objective, or defeating all enemies. If players aren’t supposed to reach an area yet, make sure it’s unreachable, either with walls, or by making sure it doesn’t exist until it’s supposed to be reached. If possible, define levels in terms of areas the player is supposed to be, so they can’t exist outside of the places you want them to be.

Bundle bugfixes with new content patches, especially new bosses and new areas, because it forces all bosses and 100% runners to run on the patched version of the game in order to meet the category requirements.

Of course, a lot of these things make the game worse, even for casual players, but there’s no price too high to remove the speed demon menace!

Designing for Speedrunners

One of the most powerful tools speedrunners have to save time is Skips. Games are usually designed where goals are supposed to be completed in a certain order, a skip is where you complete later goals without completing the prerequisite ones. This can mean completing story flags out of order, or simply going to an area before it’s supposed to be accessible. The thing that makes such skips possible is usually level design in the shape of a horseshoe, where the start and the end are close to each other in physical space, but are separated by a wall inbetween. The Valve Developer Wiki helpfully has some examples of this, which they call Loops and Bounces. Hub areas that unlock into more areas also tend to facilitate skips, if you can find a way to get past the gates blocking you.

John Romero, one of the level designers of Doom, remarked on the Horseshoe level design in the Hangar map in this lets play, as well as some of the benefits of it. You get to see where you’re going, you’re not traveling in a literal straight line, even if you only have one way to go, and you can cut across the horseshoe to the end.

Getting Over It with Bennett Foddy is designed as a series of horseshoes laid over each other, which sometimes makes skips possible, but more frequently is used to dump the player back into earlier areas. The whole map looks like a serpentine pattern, crossing back and forth over itself. Many areas in Super Mario Odyssey are structured similarly, letting you get to later parts of the level if you can perform the advanced jumping tricks. Even ancient games like Castlevania have skips based on connecting the ends of a horseshoe, using the small boost they get from taking damage to climb up and over ledges they can’t quite reach otherwise.

The most practical form of designing for speedrunners that you can do as a developer is simply to make horseshoes in your level design all over the place, and leave it up to them to find a way to connect the ends. Incidentally, this happens to be good level design practice in general, as it gives players sight of the areas they’ll go to in the future (and thus clear eyes on their goal), and frequently gives them more routes through the level.

Speedrunning is fundamentally a big optimization puzzle, similar to the traveling salesman problem. Speedrunners tend to enjoy games that are difficult to route, where they have freedom to choose to pursue a lot of different goals, that each have an effect on completing their other goals. Metroidvanias are popular among speedrunners for this reason, because they typically afford a lot of freedom in which order bosses can be tackled, and powerups can be collected. Those powerups frequently open new routes around the map, or make traversal faster relative to certain geographic features present on some routes. These types of optimization problems can be quantified in how complex they are, through their complexity class, or Big O notation.

Making a game difficult to optimize is difficult in-of itself, but some easy steps are to have multiple active goals at once, to open and close routes relative to certain events, and to give the player multiple routes across the map at any given time, as well as limit teleporters to locations that are out of the way, and avoid central hub locations that are connected to all the other objectives.

Having alternative or optional objectives is also helpful for speedrunners, because they frequently incorporate these into alternative categories (alternative speedrun rulesets whose runs are compared against each other, instead of the general crowd). The most common of these is 100% or all bosses. As skips are found for intended goals, speedrunners make categories for avoiding the use of major glitches, and completing some of the intended goals. More whimsical categories sometimes get introduced as well, such as collecting all the items, or playing with a restriction, such as no jumps, or the fewest powerups possible.

While it might be tempting to leave bugs in, in order to entice speedrunners, or to patch bugs out in the name of releasing a polished product, the real consideration should be: Will a casual player run into this bug by accident? And does this bug create new interesting choices with regards to saving time, or playing the game? For most bugs, the answer is no, but sometimes the answer is yes. A common policy is to leave in any bugs that affect the speedrun after the game is released, unless they’re easily triggered showstopper bugs, such as a crash, or softlock. If the QA team can’t catch it, most players probably won’t either. Rather than blindly sticking to the value that all bugs are bad bugs, it can be helpful to consider more abstractly what creates value for the customer.

In some ways, the way the game is coded or designed can influence what tricks are possible in a game. A lot of glitches in older games involved memory manipulation and corruption that isn’t really possible in modern games, largely because modern engines and modern languages have a level of type safety and memory safety that games from the 90s didn’t. Programmers working in assembly or C frequently made mistakes with pointers, arrays, or structs. They would transform data using a process meant for a different set of data, or jump to the wrong location in memory. This is what made so many glitches possible in pokemon, ocarina of time, and other games from that time period.

Beyond just coding conventions, glitches or exploits are made possible by simply making detailed unique mechanics that had interactions with a number of other elements, which is good game design. Good games tend to also be good speedgames, with the exception of autoscrollers, and beat em ups, because those tend not to allow for much routing freedom, and playing beat em ups for speed tends to deemphasize what makes the combat in beat em ups interesting. When a mechanic is designed to accomplish many different purposes, interact with many other elements, and modulate its output based on the input, it’s almost inevitable that some unintended outcomes will occur. The iceless skip in Megaman X isn’t some weird quirk of the code, it’s just the natural result of giving the player the freedom to jump off walls and near perfect air control.

A general quality of life feature for speedrunners in any game is having a good in-game timer. A good in-game timer will not count loading screens, and sometimes pause time or character creation, but will count every other part of gameplay. Good in-game timers avoid the need for speedrunners to manually remove load times in their video software, or with complicated timer splitting programs that need to be developed per-game. Another quality of life feature is a speedrunner mode where the RNG is deterministic, or where you can input an RNG seed to always get consistent results. Making sure that players can cleanly wipe their save and start from complete scratch is also important.

Building a game that accommodates or even encourages speedrunners is not usually a development goal for most games, but for the few projects that aim to entice speedrunners it can be helpful to know what actually makes a speedgame more interesting instead of assuming that speedrunners want something like a racing game with a single path forward, and you happen to move at a fast unbroken pace. Most games deliberately oriented around speedrunning, such as Speedrunners or SEUM: Speedrunners from Hell, tend not to actually be very popular speedgames, because they don’t really consider what speedrunners enjoy about speedrunning various games, instead building for an aesthetic of speed. It’s more important to build a good game than a good speedgame.

It’s also nice to do the bare minimum to accommodate anyone choosing to speedrun (timer without loads/character creation, good save file management, not actively patching out speed tech). For any game, it’s helpful to avoid actively burning your players. It’s up to the player to decide how they want to play your game, whether it be pacifist, speedrun, or modding. Intentionally snubbing players who play a certain way may not impact your overall sales numbers, but it’s kind of a dick move and many games get a second life from the speedrun community.

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).

Why the Hell Does Depth Matter?

Depth is my primary metric of quality for a game. I believe depth is a good metric because it is “simple” and “generic”. Unfortunately it’s not simple in the way of being simple and relatable to understand. It’s simple like GDP is simple. It’s one final number that represents a whole ton of things going on under the hood. Depth is the emergent result of a lot of different things coming together in a game. Depth, like GDP, is a generic metric in that it doesn’t care what’s being invested in, it could be medical, military, education; puzzle game, RTS, RPG, FPS, or fighting game, it only matters what the final outcome is. Depth doesn’t encompass everything about a game, the same way GDP doesn’t encompass everything about an economy, but both are fairly important metrics regardless. Unlike GDP, there are less ways to fake depth and end up with a cheap result.

I define Depth as the number of states that are differentiated from one another, balanced against each other, and currently known about/preferred by the playerbase. State is the current condition something is in at a specific time. A state with regards to games is the current condition of everything present in a game at a moment in time. Depth is the sum of these states after passing through 2 filters: redundancy, and relevancy.

We start with Possibility Space, which is every single state possible. We filter those into Absolute Depth first by removing all states that are redundant, that are just copies of one another, such as rotations or mirror images of the game board in Tic Tac Toe or Go, or more powerful but functionally identical weapons in RPGs. Then we filter Absolute Depth into Relevant Depth by removing all states that are underpowered and therefore not commonly used in play, or the ones that are unknown to the player community at a given time, such as those that use undeveloped techniques or unknown mechanics. The final result is a measure of the effective complexity of the game.

depth venn

Okay, so, why the hell would the effective complexity of a game matter? What does it matter if a game is more complicated? For this, lets go back to Raph Koster’s Theory of Fun. The gist of his theory of fun is that fun is derived from winning at something inconsistently, like a coin flip. Fun is also derived from improving your consistency over time. Something you can win at effortlessly is boring, and something you never win at is frustrating (this is backed up by Flow theory too). Random things can trick the brain, which is why gambling can be fun, but most people eventually catch on and stop playing, unless they delve into superstitions about luck.

However there’s also a bit of a contradiction there, if you improve your consistency over time, then won’t something that’s fun now eventually become boring when you’re 100% consistent? That’s true. Depth gives players many different measures of consistency, so while you may be consistent at one thing, now you have something else to get consistent at.

Raph Koster’s Theory of Fun posits that fun is the joy of learning (probably because learning things makes us better at surviving, so we adapted to reward learning neurologically). A deep game has a lot to learn about. Therefore a deep game is a fun game.

On top of that, the experience of playing a deep game is different from playing a shallower one. Deep games typically have more choices, and more possible consequences for those choices, requiring more complex thought about each choice. Many board games with less board states are easily solved (connect 4, checkers), where more complex ones require more arcane heuristics in order to perform well at (Go). Simpler games are more about doing 1 thing right, where deeper games are about thinking about future consequences more. Deeper games involve more interesting decisions, as per the Sid Meier definition.

Smash Bros Melee might have less buttons and less attacks than a traditional fighting game, but you can get more results from each move than you can in a fighting game, because Smash Bros is highly responsive to the relative positions of each character, and the timing with which attacks are hit. This isn’t to say that Smash Bros is necessarily better than a Fighting Game though, because both a few nuanced moves, and many differentiated moves are equally prioritized under depth theory, as long as they shake out to the same number of relevant states.

Later Smash Bros games did a lot of work to remove a lot of the nuance in Smash Bros Melee moves, by making them less responsive to differences in timing and spacing (less sweet/sour spots, reverse hits no longer work), by reducing the effect of defensive mechanics during combos, and removing options outright. These games are comparable in their options, but have less depth. This makes progress less clear, since there are no longer an array of clear techniques and strategies to master, and requires players to work harder to get smaller rewards for their effort.

Gamedevs Should Not (Exactly) Copy My Criteria to Make a Successful Game

I don’t expect anyone to make a game that perfectly fits my model of what a good game should be and ignores everything else typically involved in making a commercial game, including me.
The reality is, my idea of what a good game is impractical and conflicting with making a popular or best selling game. I judge games and enjoy games for aspects that I would not prioritize during development, and a lot of aspects of making a successful game fall outside the scope of my work. I try to write articles incorporating this broader perspective too, because I’m interested in it, but the core of my philosophy is about making what I would consider a good game, rather than a successful one.
Of course, I still think that someone interested in designing a game should listen to me to some extent (why else would I write?). I still think that I am providing a unique and helpful perspective, but success will always be a medium between my perspective and what’s actually effective to reach and appeal to a wider audience than just me. There are certainly aspects of my writing and philosophy which overlap with general success, but the line is always going to be up to the developer, and it’s never going to be completely clear.

Continue reading

Nuzzles: Not a Puzzle

CODE FOR DOOR C489 Kia or Welcon 58880

The Legend of Zelda and its imitators, Okami, Darksiders, God of War 2018, Beyond Good and Evil, Legacy of Kain: Soul Reaver, have a particular style of “puzzle”, where you need to notice a switch somewhere and activate it. The developers of Darksiders coined a term for this, “Nuzzle”, short for “Not a Puzzle”. Nuzzles can be useful for teaching a player how to use a puzzle mechanic for the first time. Zelda style games tend to have items or abilities that you unlock which can be used to flip switches that cannot be flipped by any other means. When you get a new ability, it helps to have a simple example of what it can interact with and how it works. The Witness does this in each area that introduces a new puzzle symbol, by having a sequence of 5-10 nuzzles that demonstrate how it works in the simplest way possible, expecting you to learn how the puzzle symbol works via induction so that you can reason out puzzle solutions with deduction.

A nuzzle can be broadly identified as a 1-step puzzle, or a riddle. Nuzzles don’t test critical thinking skills, they simply test if the player is paying attention, or remembers what the switch operating mechanic is at all. Of course this is critical for tutorial purposes, new or inexperienced players need guidance to know how to solve puzzles, but the trouble comes in when Nuzzles are deployed broadly long after the basic puzzle mechanics are understood, as a replacement or filler for puzzles, which is what Zelda-like games tend to do long after puzzle mechanics have already been introduced (such as when you’re asked to light 2 torches in the final dungeon of the game, or hit a sequence of switches in the order they tell you when there are no enemies in the room, and no other confounding factors, such as time limits, or additional puzzle mechanics). Continue reading

What makes good combat?

Combat in a video game is good when you have a variety of options (discrete verbs that have unique animations, state, or use of unique entities) or sub-options (things like position, timing, rotation etc that modify the function of a verb) which have varied outcomes, and determining which option/suboption to use for a more/less optimal outcome in a given situation is unclear, but can be logically deduced.

If elements of your combat system are random (have output randomness, as opposed to input randomness), such as randomizing which attack you’ll perform when you press a button, then the best option for a scenario cannot be logically deduced. The same is true if the way that attacks function is unclear or inconsistent (like funky hitboxes producing drastically different outcomes with similar inputs, or the visuals not clearly communicating how the move works). Ideally the player should be able to visualize in their mind the outcome of different inputs, working it out like a math problem (“oh, I could have done that instead”). This makes a game fair and understandable.
Continue reading

The “Silver Bullet” Game Design Problem

A long time ago, I read an article titled, “Silver Bullet Combat”┬áthat was rather coherent about describing a common problem in game design. The article is now only available as a PDF and might eventually disappear, so I’m going to reiterate it in my terms.

So the gist of silver bullet style design is that Werewolves can only be harmed by silver, but once you shoot them with something silver they die instantly. A silver bullet is an option that can simply and clearly solve a problem that has no other (viable) solution. Part of game design is trying to differentiate the player’s options from one another, by making them good at different things. The easy way to do this to give enemies special resistances that can only be penetrated if you use a specific option. The trouble is that if a problem has a specific solution, then it’s not an interesting choice to solve it. There’s no tradeoffs, and no depth. Continue reading

Running Away is Deep!

Can having the option of fighting an enemy or running away be a form of depth?

Yes! Absolutely!

But more appropriately, the question generally tends to be, is having the option of fighting an enemy or running past them a form of depth?

NES games are the masters of this. Especially Castlevania 3 and Contra. Enemies in old games tend to have contact damage, they hurt you if you touch them. Then they’re set up in places where they block your way. This means that to get past them, you need to brush up against them, potentially hurting yourself. Continue reading