Interactive Semi-Zero-Sum Game Design
I recently watched an excellent GDC talk by Ken Levine, creative director at Irrational Games (the studio famous for the Bioshock series). It talked about a growing trend in game narrative design: moving away from linear systems and more toward player-driven ones. Linear systems generally have two main drawbacks:
- Less resonance with the player during and after the game. This is particularly true of games that have cutscenes, since some amount of immersion is suddenly broken when they trigger, even if the cutscene is heavily story-relevant and features the player character. In effective game design, the character is the player’s, not someone the player happens to control every now and then. Compare this to player-driven games, often ones without stories such as board games and card games – the legacy of the game is much more personal since the experience is unique to the people experiencing it. Players are also more likely to share their unique experience versus sharing a moment that Commander Shepherd had that thousands of other players also felt.
- Doesn’t take advantage of gaming as a medium. Movies are told in a set structure from beginning to end because there is no interactivity. Most books are read from beginning to end, with the author dictating which scenes happen in which order. Gaming is an interactive medium that, if taken advantage of, can create unique experiences that vary from player to player. One of the games that really impacted me recently from a design standpoint is Divinity: Original Sin, a game cleverly designed around loot as the common denominator. This means if there is a quest to obtain something from someone, you could perform tasks for said person, kill said person, or pickpocket said person. You can even kill important story NPCs and still finish the game (as long as you take their loot; loot doesn’t disappear when you change areas so you can always come back and get it). The only downside of the last approach is you miss out on dialogue and narrative, but the game is otherwise still completable. Designing games around common denominators that allow a variety of ways to complete a game increases the uniqueness of the player experience because it allows a high degree of freedom.
Before I go on, I highly recommend watching Ken Levine’s talk on this subject as the rest of this post will reference some of the things he discussed: http://www.gdcvault.com/play/1020434/
The system Levine refers to is not true zero sum, but it is very close. True zero sum suggests that every good outcome has a bad outcome, but one of the questions raised in the Q&A portion of the talk that makes true zero sum design difficult and unrealistic is the “please everyone a little bit so they’re all neutral to you” problem. For a game to be interesting, it should be impossible for the player to finish while pleasing or angering everyone just small amounts – people need to take sides and friendships need to be broken so the player is forced to make choices. In the rest of this post, I will be sharing my thoughts on how to design a semi-zero-sum system, using some of the terminology from Levine’s talk along with ideas of my own. Keep in mind that these are my thoughts on game design as an extension of what Levine has said and not a reflection of what Levine has actually said.
Levine mentions ‘locks’ in his talk, but my extension of it is better termed ‘threshold’. The addition of thresholds is why this setup is not true zero sum, but instead semi-zero-sum. Below, I will provide an example, mathematical construction, and arguments as to why this is much better for the player experience than a true zero sum system (again, Levine does not propose a true zero sum system either).
Example: If I help a female elf who is a possible love interest in the game enough times, I will cross a threshold where I need to do something very impactful to lose her favor. Thresholds combat the issue of, for example, having 60 favor points means you get a big bonus of some kind, then you make a small negative impact and fall to 59 (losing the bonus), then you make a small positive impact and go to 61 (gaining the bonus again), and so forth. Real life relationships rarely work this way.
Mathematically, a threshold is a ‘bonus favor pool’. Once I reach 60 favor points and get the big bonus, a bonus pool of 6 might be acquired, where negative impacts detract from this bonus pool before impacting the actual favor pool. Small negative impacts are likely to only subtract 1 or 2 from the bonus pool and keep me in the 60+ actual range, whereas performing a major negative action might detract the entire bonus pool plus some. The reason why the bonus pool is kept separate instead of just netting +6 bonus favor once you reach 60 is because there may be events that ignore the bonus pool. For example, if a character likes dogs and you kill a random dog, that might reduce the bonus pool by 2. But suppose the character likes the neighbor’s dog specifically, and you kill it. This specific action could, by design, ignore the bonus pool because there is a personal relationship between the character and this specific dog. But say that you’ve done a lot of favors for the character after reaching the 60 favor threshold, so your actual favor is 65. If killing the neighbor’s dog drops you by 2 points and ignores the bonus pool, then you still have a bonus pool of 6 and your new actual favor is 63. This would allow you to kill a few more dogs the character doesn’t care about, without affecting the actual pool.
There are several complications with this. Firstly, dog-killing should be a scaling effect. Killing the first dog may subtract 2 points, while killing the second dog subtracts 5 additional. Scaling is good design here, since the character may not feel too bad about one dog murder, but may have a very negative outlook on a serial dog-killer. Scaling itself isn’t complicated, but how does the neighbor’s dog (whom the character likes) factor into this? One solution is to have the neighbor’s dog also scale while keeping the ‘ignore bonus pool’ section – if the neighbor’s dog is the second dog the player has killed, this could cost 10 favor points and would ignore the bonus pool. But then what happens if the player kills another dog that the character doesn’t care about? Suddenly, going back to the bonus pool for ‘other dogs’ doesn’t seem realistic if the character has lost a personal dog and dislikes serial dog-killers. One solution is to modify the neighbor’s dog to make further dog murders not use the bonus pool. Now it looks like this:
- Murders random dog, -2 pet fondness level; further dogs killed have -5 additional.
- Murders neighbor’s dog, initial:-10 pet fondness level, ignores bonus pool. Actual due to prior event: -15 pet fondness level, ignores bonus pool. Further dog killings now ignore bonus pool; further dog killings have -20 additional.
- Murders random dog, initial: -2 pet fondness level. Actual: (-2) + (-5) + (-20) = -27 pet fondness, ignores bonus pool due to event #2.
- Saves the character’s (not the neighbor’s) dog from orcs, initial: +20 pet fondness level. Actual: +20 pet fondness level. Bonus pool of 5 granted (this bonus pool is insignificant at this stage because dog-killing now ignores the bonus pool, but it becomes relevant if the player saves the character’s dog before going on a dog-killing spree, i.e. if this event happened as step 1 and the other events were pushed down).
This is just one possible way to handle a character’s reaction to a player. It gets even more complicated when script writers need to write custom dialogue for dog killings. Suppose you kill three random dogs and then save the character’s personal dog. The dialogue could pan out like this:
- If pet fondness is between 0 and -10 due to killing one or two random dogs: “I like dogs. Please don’t kill them.”
- If pet fondness level is now -20 from initial due to killing 3 random dogs (note that this would be a stat hidden from the player): “Why did you kill another dog? What’s wrong with you?!”
- If pet fondness is now 0 (neutral) due to saving the character’s dog: “I like dogs better than cats.” (basically going back to some original, generic phrase)
However, the neighbor’s dog is important to the character, so let’s consider an event chain panning out like this:
- If pet fondness is between 0 and -10 due to killing one or two random dogs: “I like dogs. Please don’t kill them.”
- If pet fondness is now -30 due to killing a random dog and the neighbor’s dog: “Get away from me! Guards! Arrest this man!”
- If pet fondness is between 0 and -10 due to saving the character’s dog: “I like dogs. Please don’t kill them.”
The idea is the character would have a temporary line in which it says “Thanks for saving my dog” immediately after you save the personal dog, before defaulting to line 3. In some ways line 3 still feels unnatural because you just went out of your way to save the character’s dog, but keep in mind that in real life if I murder 2 dogs then save 1, people aren’t going to suddenly think I’m a dog lover now – that’s why I believe this setup acceptably works.
The question of how to prevent the “they’re all neutral to you” problem still remains. As Levine touched on in his talk, it’s important to force the player to make decisions in order to create a meaningful experience. This can be a northern kingdom the player never interacts with starting a war with the kingdom the player is in and forcing factions to take up sides. It could be a catastrophic natural calamity splitting a kingdom or several kingdoms in an alliance apart. They do not necessarily need to be tied to character relationships with the player, but they can be. For example, an Orc leader waging war against the elves once the player reaches enough favor with the Orcs and completes certain quests like gathering war supplies. Regardless of what world events are used and when they happen (whether in the beginning or middle), it is important that they do occur. Thankfully, this is a non-issue as most games with even a semblance of a story take place in a setting where a major world event is or has happened.
It is important, however, to keep in mind that these experiences feel more immersive if they are related to the player’s relationship with certain characters. The player then feels like he or she had an impact in starting and participating in the event, as opposed to being thrown into it.
For the threshold system to work in the first place, each important character in the game needs to be properly set up. I won’t go into too much detail here (this post is as much a personal reference as it is a presentation of how semi-zero-sum design might work), but instead talk about how I would implement it.
Hidden stats: These are stats hidden from the player but definitely exist as part of the character’s attributes:
- If love interest, romance could be a hidden stat.
- If ‘likes pets’ is deemed important to the character by the designers, then ‘pet fondness’ could be a hidden stat.
- If a person values friendship with a specific character, then ‘player friendship with character X’ could be a hidden stat.
I won’t go over revealed stats. Some important characters may be party members or able to join the player in combat. Such stats could include ‘loyalty’ (willingness to follow the player’s orders) as well as the basic combat stats such as ‘attack damage’ and ‘magic resistance’. However, what I want to point out here is each hidden stat’s relationship to the overall (macro) favor towards the player.
- Each hidden stat has a weight. For example, if pets are incredibly important to a character, pet fondness could have a weight of 0.6
- The overall favor towards the player is based on a combination of these weights.
For the purposes of making game development more streamlined, the following rules are advised:
- Every important character in the game has every single hidden stat in the game.
- Hidden stats that are insignificant to a character have a weight of 0.
- The result of every action in the game modifies some kind of hidden stat, or possibly multiple hidden stats.
With this setup, every action is now meaningful, although the level at which it is meaningful varies from character to character. We can now design actions with set stat modifiers but different impacts since different characters have different weights for each hidden stat. Of course, this is tricky due to the nature game engines work. What determines if a player killed a dog? Suppose the player hit the dog accidentally during a battle and the dog ends up dying but the the player didn’t deal the finishing blow. Tracking whether the player killed the dog or not would then need to be a mathematical factor, such as the player doing 10% or more damage to the dog’s health before it died (perhaps there would be a time restriction on this as well). But what if the dog took area of effect damage that wasn’t intended? If I fire a catapult at an enemy orc and damage happens to be dealt to the dog, am I to blame if the dog later dies? Coming up with a solution to this problem is tricky and will vary across entities and games.
Macro Relationships Between Characters
In short, this means characters have macro favor states for each other. Levine mentions this isn’t as necessary, and I agree with him for the most part. Several arguments why:
- This system becomes even more complex and it’s already very complex.
- Macro relationships between characters is less important if the player is not involved in the conversation. For example, if an orc and elf hate each other but neither acknowledge how they feel about the player, then this is not very impactful. I’m sure we’ve all played games featuring faction conflicts we didn’t care much about. However, if the orc hates the player and the elf likes the player (let’s assume the player helped the elves in the past), then this feels much more meaningful.
In short: macro relationships between characters increases complexity of design without dramatically impacting the player experience. In most cases, designers can and should focus on the relationship with the player instead of relationships between characters.
Designing Around a Common Denominator That Promotes Freedom Of Choice
Despite all of the above, a game can still feel very limiting if common denominators are not considered – such games would likely feel like they have realistic character relationships but unrealistic player freedom within the world. The idea of a common denominator is surprisingly not touched upon much in many game design books and articles I have read, but I believe it is central to giving the player a unique experience. Freedom of choice and personal player experience certainly have some correlation, although further studies would need to be done to determine just how close they really are.
I will use my own in-development project (at this time of writing), Zems Online Card Game, as an example of a common denominator promoting freedom of choice. In Zems, the common denominator is silver, an in-game currency (we use gold to denote currency purchased using real money). Everything the player does in the game revolves around the acquisition of silver, which gives the player a great deal of freedom. When a player plays a game against the AI, the player earns silver. If a player wins a game, whether against the AI or a real-life opponent, bonus silver is acquired. When a player completes a quest, silver is acquired. This seems intuitive and ‘obvious’, because it is. Let’s compare it to what it could have been.
Hearthstone is an example of where gold is the common denominator but not everything revolves around gold. If a player loses a game, he or she will not receive any gold. A player must win against another real-life player in order to acquire gold. However, if a player defeats a friend in the ‘challenge a friend’ mode, he or she does not receive any gold, a decision likely made to prevent players from cheating gold (exceptions are fine when designing common denominators, especially where cheating is concerned). When a player wins against the AI, the player does not receive gold (this may change in a later patch). Thus, while the common denominator in Hearthstone is gold, the high number of exceptions limits the player’s freedom in the game. This is easily reflected in social media, where viral Hearthstone moments are almost exclusively in player-versus-player settings. I would like to point out here that this sort of design may be intended as the developers may want players to focus on player-versus-player instead of the other game modes. However, it still creates a feeling of limitation in the game as players ask, “Why would I play single player if I’ve already unlocked the content?”
There are many other examples in recent gaming history, such as Guild Wars 2 where everything players do in the game grants player exp (players can reach max level however they want) and Divinity: Original Sin (touched on above; promotes a ‘play your own way’ style). However, common denominator is a separate topic within game design and I’m going to cut the discussion short here since its relationship to semi-zero-sum game design is only important if we are trying to create a player experience promoting freedom. Not every game needs to offer such freedom to players and it’s possible to create realistic character interactions without letting the player ‘break the rules’. It’s also possible that ‘common denominator’ is a bad term for what I am describing and perhaps there is a better, more official terminology.
An Argument Against Procedural Generation
In many ways, procedural generation is an underdeveloped method, especially in indie games. Until procedural algorithms make greater strides to produce more natural and ‘fitting’ environments, I believe they should be avoided. As of the time of writing, many procedural games specify “procedurally generated levels” as a key game feature, when in reality it feels like a cop-out for “we aren’t good level designers.”
This isn’t true in all cases, of course. Diablo 3 is a great example of structured procedural design that creates relatively unique experiences for each player that still feel like they fit into the overall world.
The Conflict Between Direction and Freedom
I’m going to close this long post by touching on a classic design conflict. Games are a new medium and our historical references have been mediums that do not promote interaction. Books and movies generally flow from a set beginning, middle, and end. Games are the first medium to break that interactivity where the beginning may be set, but the middle and end can highly vary. Designers are pressed on where to draw the line between directing the flow of a game so that an intended result is achieved versus offering the player the freedom to experience his or her own unique story. My intention in this post was to touch on ways in which we can design and the latter type. I did not, in any way, want to discredit games that promote the first type, as many of them (such as the Mass Effect series) have done an absolutely fantastic job in delivering a (mostly) linear story-driven experience, and there are many games currently under production (such as The Witcher 3) that I am eagerly awaiting to play and experience.