Archive

Monthly Archives: September 2018

I’ve been playing a lot of XCOM 2 recently, and after a discussion on the differences between it and its precursor the other day I started thinking about the nature of decisions in games. In XCOM (the first one), you’re expected to make a few very clear-cut decisions in the strategy layer – what to research, what abilities to train, what missions to take, and so forth. Each of these has extremely clear trade-offs. The tactical layer, similarly, has fairly clear-cut decisions, though the effects of decisions can be a bit confusing – it’s not clear, for example, whether you’ll be able to see an enemy unit if you reposition, or see why your odds of hitting are particularly high or low. In XCOM 2, the strategy layer has more decisions with murkier effects: Rather than having a choice of three missions pop up periodically, events you can investigate are constantly popping up all over the map, and since it takes time to investigate these or to do anything else on the map you can realistically only get to so many of them. The tactical combat, however, is much more clear-cut: You can see everything that affects your shot percentages, and the UI will tell you whether you can see an enemy or not when you move, and helpful icons will show if you’re moving a soldier into harm’s way.

It’s interesting to me, given all this, that players generally seem to prefer XCOM to XCOM 2. I think there are a few reasons for this, but the confusing unquantifiability of XCOM 2’s event system is probably the main turn-off, especially nestled, as it is, within the highly regimented and quantifiable decision-making that defined XCOM and, to a lesser extent, its sequel.

It all just goes to make me think about the old Sid Meier quote (or misquote?) about a game being a series of interesting decisions. Though I love XCOM, a game with a relatively few important decisions, a lot of the games I like most have you making little decisions constantly, all of which add up to a big effect in aggregate. In a game like PlayerUnknown’s Battlegrounds, the decision to crouch or not to crouch, lean or not to lean, go full-auto or single-shot, equip an angled or a vertical foregrip, run into the circle at a 5 degree angle or a 6 degree angle, any one of these can be the difference between life or death – and that’s what makes it, despite its many flaws, still so fun to play for me.

In thinking about this, I started classifying the differences in decisions. In general, I think a decision in a game can be considered in two parts: One, how the decision is made (choice properties), and two, the effects of that decision (effect properties). Each of these have three parts – that I’ve thought of so far, anyway.

Choice properties:

  1. Frequency: How often decisions are made
  2. Quantity: The number of options available with each decision
  3. Temporality: How much time pressure there is to make the decision

Effect properties:

  1. Impact: How much they can change the game state
  2. Clarity: How evident these changes are beforehand
  3. Expression: How much the player can express themselves using the decisions

Different games prioritize aspects of decision-making differently. XCOM has medium-low frequency decisions with little temporal pressure and high impact and clarity, with little focus on player expression. The Street Fighter games have fairly high frequency of decisions, making choices at each moment of where to position yourself and which attack to use, with a fairly high quantity of different attack maneuvers, high temporal pressure and impact and moderate clarity (since move effects depend on what your opponent is doing) and a small-moderate amount of player expression… except, that is, in the menu where you select which character you want to use, which is a single (minimal frequency) choice with large quantity, no temporality, and huge impact, clarity, and expression. Super Hexagon is a game with extremely frequent decisions with almost no quantity (left, right, or neither), unbelievably high temporal pressure, high impact and clarity, no expression. The Walking Dead, Season 1 has low-frequency, low-quantity decisions, with some temporal pressure, moderate impact, relatively little clarity, but a huge amount of player expression.

Genres start mapping pretty closely to different decision models, when viewed in this respect. Strategy games prioritize low frequency and temporal pressure with high impact and clarity, tactical shooters like PUBG value high frequency, quantity, temporality, and impact with moderate clarity, RPGs like Fallout medium frequency, impact, and clarity, high quantity, low temporality, and extremely high expression.

From this viewpoint, it becomes clear why many of the decisions made in XCOM 2 rub people the wrong way. The decisions presented to the player in the strategic layer of the game don’t hew as closely to the ideal of what strategic gameplay decisions look like, and though they’re valid as a design in their own right, and I still find them enjoyable, and while they don’t necessarily make it a worse game, they may, in fact, make it a worse strategy game.

It’s important to know what sorts of decisions you want to present to the player, and what sorts of decisions they came to you to get. Trade-offs which may seem like good design when viewed through the lens of balance or of excitement may simply not fit the type of decision system the game is most suited to.

 

Advertisements

Today I was buying groceries along with my mom – she has a working car and I do not. After leaving her for a bit to find something I missed in the last aisle, I started heading back to where I last saw her when a woman of about the same height, build, and coloration wearing similar clothes turned the corner, and before noticing the difference (I am a bit nearsighted) I said “I found it!”

The woman was confused. I was mildly embarrassed, but just kept on walking like I hadn’t done anything unusual. Maybe she eventually convinced herself I was talking into a bluetooth headset or something. That part’s not important. I started thinking, though, about how our narrative of a situation shapes our perceptions. This woman would ordinarily not have been noteworthy to me, and I don’t think I would usually make the mistake I did – the resemblance was really not that strong – except for it would have made all the sense in the world for it to have been my mom turning that corner. I had no reason to question it. It’s such an echo of childhood, of getting lost in a store and finding the Wrong Mom just because a woman nearby happened to be approximately the correct shape and color.

Preconceptions shape everything we see before we ever see it – not only how we interpret the things we see, but whether we actually notice certain things at all. Those things which fit our expectations we never question until the point where they no longer line up – that is, either our understanding changes or they change to no longer fit our expectations. The mystery woman is deputized mom until further notice, usually approximately the time she turns around to notice a strange child clinging to her.

This whole thing reminded me, as really far too many things do, of the experience of playing Spy in Team Fortress 2. As the spy, if the enemy team ever suspects what you are they can usually kill you quite easily. Much of success as the spy, then, is in never being suspected. It requires knowing what people expect to see at any given moment, and being that for just long enough to achieve whatever mischief you can. I like to say that if they even have the chance to wonder if you might be a spy, you’ve already failed. It’s not a matter of blending in to your surroundings, it’s a matter of blending into your opponent’s ongoing narrative about their surroundings. Or, anyway, that’s what it is ideally, under optimal circumstances. Pragmatically it’s just as often about waltzing in when there’s too much bullshit going on for anyone to pay attention.

We have two blind spots. One, we cannot see anything that fails to fit into our world-view. Two, we can never question anything that fits too perfectly into our world-view. Both of these are indescribable anomalies to us until we make adjustments in our understanding to accommodate them. There are things we don’t see because they’re not what we expect: There are things we never question because they’re exactly what we expect.

So you have to wonder: How much of the big picture am I not seeing? How much of the world around me is invisible because it exceeds my expectation, cannot be heard because it’s outside of the audible spectrum? How much of it is unquestioned just because we’re used to it, sunk into our lungs like oxygen? This question seems more and more relevant, as the injustices that founded our history accrue interest.

To us artists, it presents a conundrum. All of our art, to the audience, is seen in the context of all the art they’ve seen before. If we depart too much from the vocabulary of that art, our creation starts to seem like gibberish: No matter what clarity of thought we put into it, they simply do not have the tools to interpret it – no, not even the tools necessary to want to interpret it. At the same time, if we hew too closely to that vocabulary, we lose the words to say anything for ourselves, anything different than what has already been said. We doom ourselves to become propagandists.

It’s a tricky needle to thread. The better part of art is learning how to be seen – and, as someone so habitually drawn to invisibility, someone who always preferred to play Spy in Team Fortress 2, that doesn’t necessarily come easily to me.

I always hate doing these updates where there’s not a lot of progress to report. The last couple of weeks in particular have been devoid of any progress on the project, or even any work on it – at first because of a shoulder injury, which was making it particularly difficult to focus on any of the complex problems I needed to solve to work on the code part of the project, and then on a short family vacation. Before that, I was working regularly on the project – well, except for the week or so where the new meds I was trying out were making me too groggy to think straight – but, still, not making a lot of progress.

Part of the problem with working on a project the size of a game is that sometimes even the components of the project, the discrete chunks you’ve written down as tasks on a task list, come to substantial undertakings in their own right. Especially when one’s focus is split between several of these, it can be entirely possible to spend a lot of time working on them, not running into any particular roadblocks and making what feels like good progress in the moment, and look back and not see anything new actually finished. This is basically how things have been for the last month – In particular, the storytelling system has taken much much longer than I’d expected it to, leading me to do a bunch of rewriting of the music system. The reason why the music system had to be rewritten was so that I could readily sync the storytelling lines with the music when I wanted to, in a way which I didn’t have to custom code for every story and every music track. I now have a system where any music track playback can intelligently jump around – that is, once I put in a number of valid points it can jump to in a track, say if a certain section can end in three different ways, I can give it a destination range in the music and it will find the shortest path to get there. I didn’t expect to have to read up on pathfinding algorithms for my music code, but here we are.

Now that I’ve got that component of the storytelling system figured out, there’s still one major roadblock to finishing it: Text rendering. This is something that should be easy in Flash/AIR, but just due to how I have entity rendering set up is a bit tricky. At this point, I have two options: Either I modify the entity rendering system, which would be a nuisance but not too difficult, or I find a way to convert the text into graphics rendering commands that I can send to the entity draw command queue. I’ve found a library that does this, but it hasn’t been updated for 8 years, so it might not be an ideal choice. If it doesn’t work out and I don’t find an alternative, though, then I’ll just have to rewrite the entity draw command system, because writing a whole text renderer to handle this problem would be an obscene waste of time, albeit presumably an educational one. At some point, as well, I’ll have to create a typeface for the game to use, possibly several. I think that will be fun.

The other two major things I was working on last time were the health bar and the awakening animation. The awakening animation has turned out to be a bit of a quagmire as well – I had the motion of standing and grabbing the weapon looking pretty good when I realized that I hadn’t really planned out how it was actually going to fit into the level where it was supposed to happen. This was something I can only describe as an extremely foolish oversight on my part. I’ve begun reworking the animation and I think I figured out a way to do so without completely starting over (again), but it required me to redraw the tree which was the main prop in that area. Honestly, I’m glad I was forced to do so, because the previous tree looked pixelated in a way which I had thought looked okay – but, I can see now, really did not. It looks much better now.

Of course, now I have to be concerned that making this tree look better will make the rest of the game look worse in comparison, and lead to an endless cycle of revisions. For now I’ll just have to enjoy the journey I guess, because I can’t say when things will start looking ‘good enough’ to me.

As for the health bar, progress is being made on it, but the storytelling code took priority and I didn’t want to split my attention between two programming tasks. I’ve also been working here and there on music for the next area, but though I have a number of promising ideas down, most of which will probably find their way into the finished version somewhere, none of them really feel like the right place for the song to start. For now, there, too, I keep experimenting, waiting to be visited by the spirit of satisfaction.

So, for this next month, I intend to finish the storytelling system, finish the awakening animation, finish the health bar. From there I’ll probably start in on other necessary animations – though I also think it quite likely that I’ll look at the tilesets I have to bring their level of quality up to this tree asset. It’s gotta be about the pleasure of the journey, because at this point I have frankly no idea when this project is going to go anywhere. I wish I knew how to work on it faster, but at this point it seems like it’s work slowly or not at all, and hope one day to accidentally, habitually, fall into a more rapid pace.

Context-sensitive controls have been around a lot longer than we tend to think. The phrase became commonplace when used to describe third-person action games around the early 2000’s that used cover systems and the like, implementing one button press for a wide array of mutually exclusive maneuvers based on the player’s position relative to environmental objects. However, the idea existed long before that, with many games using a generic ‘action’ button to talk to NPCs, search bookshelves, flip switches, and so forth.

It’s a common experience, playing a game like this, to have the character you’re nominally controlling do something you didn’t want or expect them to do. Occasionally this is entirely your fault, if you just panic and clumsily mash the wrong button or forget what does what, but just as often it’s because, when the game’s controls are context-sensitive, that context is liable to change or to be misread – say, when two objects with different interactions are right next to each other, or even when one moves to intercept your interaction with the other.

Because of this, these control systems can lead to frustration. There is an alienation between the player and the character they’re controlling when they aren’t sure quite what that character will choose to do when they press a button. Sometimes, this can be interesting! If a character interacts with an object in a way we don’t expect – by stealing it, by commenting on it, by breaking it – this can help to separate the character from the player in a way that communicates story and personality. More often, though, an unexpected action just makes the player feel lost, unable to understand the relationship between the character and the world they occupy.

So where is the division between when these schemes work and when they don’t work? They can be said to completely work when the outcome of a button press is clear beforehand, and to completely fail when the outcome is completely unpredictable, but seldom are either of these true. Many developers try to add on-screen prompts telling the player what action the button press will take but, at the speed of gameplay, when the context starts shifting quickly, these stop being very useful. An approach to ameliorating this is to have the contextual action be intentionally obscured, but to fall within a fairly narrow set of expectations – for instance, an ‘up’ button that climbs onto small walls, jumps over railings, and climbs up ladders, or a ‘down’ button that crouches, climbs down ledges, and hides under tables.

The outcome of a button press is not necessarily directly derived from the action the character takes – that is, though the player may know that when next to a window the ‘dodge’ button is supposed to dive through it, they may have not noticed that the window has bars on it and give their character a concussion. Perhaps this is a silly example, but the important point is that the player’s decisions are respected, even if they’re bad decisions.

Poorly implemented, these systems can cause frustration. Well-implemented, they can boil a control-scheme down to its essential elements and preserve a sense of intuitive flow. Creatively implemented, they can determine the emotional distance between the player and the character they’re controlling, and give them a new insight into that character’s internal world.

Context is a powerful thing.