Monday, June 30, 2014

XBlaze Etc

So, I decided to try a visual novel out for my morning commute game, and I picked the most recent one: XBlaze. Or XBLA*ZE, whatever. It's by the BlazBlue folks, so I knew that it'd be full of grim dark grimness with grim grim darkness and one joke character.

What I didn't expect is that it would be the most stereotypical thing possible. Literally, it is impossible to cram any more stereotypicality into this game, because every character, every set, every story beat, and every plot point is the most stereotypical rehash of a common trope they could find. Every single character is a fetish stamped on tissue paper, every plot event would have been considered old and tired in 1989.

The format is easy to consume while standing with one hand on a train rail, so I've played it through a fair amount. Nothing has been even vaguely new or interesting.

See, the basic problem with XBlaze is actually the basic strength in BlazBlue.

Arc (the devs) are pretty good at throwing tons of polished stereotypes into a game. In BlazBlue, every character is a stereotype, but that's actually good in a fighting game. You have to know who someone is within 1.5 seconds in a fighting game. So you walk a narrow line: stereotypical enough to identify, but interesting enough to look at that people will remember them later. It's actually advantageous to not have any character development - so all the character "development" is actually just revealing the past to the players. That way the characters don't change over time, and everyone who plays the game will always face the same version of the same characters.

Moreover, a wide variety of instantly recognizable characters means everyone will find someone they are interested in playing. It's the "shotgun" method of character design: put a ton of instantly-recognizable characters in your game and let the player sort out which ones they like. If they dislike 80% of the characters, that's fine: they don't have to play them.

While that's good in a fighting game, that's awful in a visual novel.

Visual novels work in exactly the opposite manner. It's less important that a character be immediately identifiable, and more important that they evolve over the course of the story. Hidden backstories being revealed are common, but it's a way to make the characters behave differently. Since no two players are competing, it's not important for characters to be the same between multiple players.

The selection of characters is also less important, because a player cannot really choose to spend time with one character and ignore another. All the characters are always interwoven. Maybe in a dating sim a player can choose a particular favorite and it will matter, but in a typical visual novel you are always stuck with all the characters. If you only like one of the ten characters that you're stuck with, that's considered 9 fails rather a success.

Fundamentally, Arc took the same approach in their visual novel as their fighting game. They filled their story with a huge variety of instantly-recognizable stereotypes.

Unfortunately, none of them are even slightly interesting.

They attempted to make the characters evolve by applying the standard story for each standard stereotype. For example, the cute robot girl slowly learns human emotions and, I presume, will die while betraying her creators in favor of her new friends in the third act. Doubt I'll play long enough to know for sure, because the robot learning emotions is so painfully standard that it predates robots, and there's no spice in this particular dish.

The hope with XBlaze is that you will find at least one of the story lines to your taste, at least one of the characters. Unfortunately, that's not how stories work. That's how fights work, sure, but this is a story.

A story is much more cohesive. While a reader can technically ignore large parts of the story, that's a sign that a story has failed. Instead, each of the pieces of the story - whether a character, place, or event - needs to contribute to the core of the story.

In a fighting game the core of the game is the fighting. The characters, settings, and events all contribute to the feel of the fighting, giving it a strong flavor and unique texture.

In a visual novel the core of the game is the heart of the story. The characters, settings, and events need to contribute to that.

In XBlaze, the story is theoretically about a pacifist having his worldview challenged by harsh realities.

Having three different kinds of magic does not help the story any - it just allows you to have three different kinds of stereotypical magicians. This is a sacrifice made to enable more characters at the expense of the story.

Having a robot learning emotions could actually be a powerful echo of the story. The robot could go from being a militaristic, violent, order-following machine to being a dedicated pacifist at the same time that the pacifist main character is pushed into fighting. But instead of serving that end, the robot is simply allowed to trundle along their trope's default plot line regardless of the fact that it doesn't have even the slightest bit to do with the core storyline.

You have to balance your characters and how they relate to the core story in the same way that you would balance the character's fighting styles in the fighting game.

What I'm saying is that Arc has misunderstood what a visual novel is.

Friday, June 27, 2014

Context-Driven NPCs

Most NPCs are scripted with a lot of personality. They have character arcs and opinions and a backstory and a romance arc and all sorts of stuff to try and make them interesting.

The problem with these NPCs is that they are pretty oblivious to when they should actively express themselves, and relative to which people and things. If they are active, they tend to run roughshod over other dialog, current missions, and the player's current intentions. Even if they are just commenting in a small way (such as '-5: Lilliana doesn't like you helping magicians') it distracts from the player's intention and simply makes things muddy and awkward.

So most of the time, the NPCs are put into extremely passive roles. They are only allowed to express themselves when the player returns to base and actively seeks them out. This gives them explicit permission to activate and express themselves.

Unfortunately, it also limits how they can interact. They can't interact much with other NPCs, the world at large, or the ongoing central quest. All they can do is sit in a safe little spot and wait for the player to strike up a conversation. This is very awkward and forced at the best of times.

There have been a lot of NPCs I've wanted to spend time with, but these games don't allow you to do so. Sure, you can put them in your party, but they leave their personality back at base. Sometimes they will judge something you do, but rather than being interesting and fun, it blindsides you and leaves you feeling cheated or caged-in.

For example, almost all of the characters in all the Mass Effect games were interesting enough that I wanted to hang out with them. Mass Effect didn't let me. While I could go through their personal character arcs and learn their backstories, it was impossible to simply shoot the breeze. Mass Effect 3 was especially notable for this because many of the shipside conversations ended up being hanging out. You'd talk to Garrus and he'd take you on a drinking-and-skeet-shooting hangout. It was fun.

But it was only once.

I couldn't get Garrus to go drinking with me again. I couldn't get Solus to sing any more songs. I couldn't get Tali to geek out over random pieces of tech lying around in the various places I went. I couldn't get Liara to do psychic hang-outs. I couldn't go bar-fighting with Wrex. I could only march along the scripted course and reach the scripted destination. The only thing I had control over is which person I wanted to see half-naked for 3 seconds.

Even that was, of course, a one-off event.

...

The only times NPCs are active is when you are in one of their personal sidequests.

Sure, they are scripted to respond to events in their personal sidequest, but that's actually only a minor issue. It's easy to script general responses to general events in every kind of scenario. No, the reason they are active in their sidequests is because you have given them implicit permission to be active. By going on their personal mission, you have implicitly stated that you care about what they have to say, at least for the next hour or so.

There's nothing difficult about programming Tali to run up to every significant piece of tech randomly found in the game world, scan it, geek out over it, say random clips of dialog about it. That would have been very easy to program. But it also would have trampled my gameplay, and walking around would have become more like herding children than being on a mission.

The core issue is that Tali has no way to tell whether it is contextually appropriate for her to geek out over something. At any given moment, her running off to geek out could screw up my pre-combat arrangements, or talk over an important meeting, or just be incredibly socially inappropriate.

There are a lot of heuristics you could use to try and keep Tali's commentary reasonable, but the core problem isn't the exact timing or number of her outbursts. The problem is that the game devs can't read the player's mind. Even if you know exactly where all the enemies are and exactly where all the socially constrained areas are, you don't know what the player is thinking. If you were really there, you would: the player's body language and facial expression would give it away pretty quick. But you obviously can't read that through an XBox controller.

The solution is to create a way to give implicit consent.

Basically, you trigger the same kind of "consent to act" that is usually associated with loyalty sidequests.

You need to do this in a way that isn't annoying to the player, and the easiest way to do that is to use it to enhance immersion rather than detract from it. By spending time with Tali on your ship, a counter begins. For the next 30 minutes or so, Tali will be active, happily running around. Afterwards, the context fades and Tali reverts. You can prolong the context - or change it to an even more permissive context - by interacting with her out in the field. The interactions you have available to you depend on the context you've established.

If you've talked to Tali about her pilgrimage, most of your options will be related to that facet of her character - talking about whether something is suitable to send home, or can be learned from, or how it contrasts with home. If you've invited Tali out on a date, then most of your options will be related to that - and she'll spend less time geeking out over tech and more time considering whether you're having fun. And the context can be changed, if you can find the right opportunity.

You can revert faster by changing the context. You don't have to call an excitable Tali over and say "stop it! You're annoying!" Instead, you simply ask her whether she's ready for the mission. This painlessly changes the context from "Tali is important to me" to "Mission time!"

I propose we increase the number of times the player interacts with the NPC while decreasing the amount of time each interaction takes.

The intention is that the player will often "nudge" the NPC gently into a mode which suits the player's current mood and play intentions. As the situation changes, the nudges wear off or the player nudges in new ways. This constant low-level interaction allows the player to enjoy an NPC without getting sideswiped by annoyingly overactive NPCs.

A few things are required to make this work well, though.

One is that there needs to be a reward for active NPCs. For example, if Tali geeks out over a piece of tech, Tali should gain 5 XP or something. A small reward that makes you feel like they are either evolving or useful to you when let off their leash.

Another thing is that you still have tiered relationships.

When you first meet Tali or Garrus or Mordin, you can't simply go "OK let's date and get kissyface". I mean, it's a viable route, but you'll have to establish that kind of relationship by letting them be active while in less romantic contexts. But what kinds of relationships are viable with what ease will vary: Tali's romance route is tough because she will literally get sick if you even touch her. Liara, on the other hand, would probably be very easy to woo - not only does she start right off with a crush on you, but her species is not exactly puritanical.

Whatever relationship you aim for isn't a "final goal", and is instead a "fun place to be". Sometimes that's closer or further from where you start.

...

The last thing is "passive evolution" and "simple judging". Even when not active, the NPCs need to exist. The easiest way to do this is to have them gently react to the player's actions.

However, this is a trap you need to be careful of. In most games "react to the player's actions" translates to "judge her dialog tree choices". This is an obnoxious thing to try to do, because you can't read the player's mind and have no way of knowing why she chose that option. It's also obnoxious because the player often doesn't know it's coming, can't predict it, and can't easily fix the damage it causes. It's just not a great approach.

"Simple judging" is probably a better answer. With this, the characters feel differently about the player inch by inch as the player performs various basic gameplay feats. Most of these should be positive, very few should be negative: hanging out for a long time should make you more friendly and accepting rather than less, even if that person is kind of annoying.

So Liara might respect you more each time you use a powerful psychic attack or kill a psychic in combat. Mordin would like you more each time you used a medpack. Garrus would like you more each time you sniped or used a grenade. Etc.

In a less restricted world, these could be applied to a wider variety of interactions, but I think that's enough talking about it.

That's my basic idea! Small, frequent context shifts under the player's control give the NPCs all the information they need to know about whether they can express themselves, and how.

To be honest, I have this whole big algorithm thing involving nodes and context pipes and crap, but I really don't think discussing a specific implementation will help this essay much.

So I'm done!

Monday, June 23, 2014

Animated Wrinkles in Affixed-Vert clothes

I've been thinking about wrinkles.

One of the problems I have with most clothes even in high-poly assets is that they don't wrinkle right. The wrinkles are typically painted on quite nicely, but if the character bends or moves they do not adapt. I don't know if this bothers anyone else, but it seriously bugs me, because that's a huge opportunity.

There are ways to make clothes have animated wrinkles. Let's cover some, remembering that we're talking about medium-poly game characters!

The first way is to have physics-enabled clothing. As the cloth moves, it is continually recalculated. This is quite expensive and is mostly useful for things like capes and hair rather than compression or twist wrinkles, because you would need a very high-density mesh and a lot of computations.

Another way I've used in the past is to "stutter-rig" the clothes. For example, your shirt might contain a lot of largely horizontal edge loops. Normally, you would smoothly weight them across the various spine bones. However, if you "stutter" them so each row is mapped slightly more or less to various bones, they don't move uniformly when you bend. The result is a cheap way to create compression or twist wrinkles, but the wrinkles are very low-density and have mediocre quality at best.

Another way I've used is to have a lot of skeletal bones specifically for clothing animations. For example, you might have a bone coming down off the front and the back of the knee. These bones would be animated in the standard walking animation to lag behind the lower leg in certain ways. Loose clothes could be partially bound to these bones, which would create a fairly realistic system of lagging behind as the leg moves, naturally creating flare. Unfortunately, these lags do not create wrinkles, and there is a lot of added work for animators and riggers.

Another way is to create shapekeys related to common wrinkle patterns, and drive them using driver bones. While the animations are still a bit annoying to create due to all the driver bones, the end result is deeper and more customizable than the skeletal animation system, because you can etch wrinkles into the cloth.

All of these approaches are mesh-centric. However, in medium-poly clothes, mesh wrinkles are not going to be very precise. This is why most artists paint them into the textures rather than onto the meshes. Or, perhaps, model them in a high-poly mesh, then bake it down to a medium-poly mesh. The end result is the same: the bumpmap or parallax map has wrinkle info.

The problem with this approach is that it isn't animated. If you bend forward, there are no compression wrinkles. If you twist, there are no twist wrinkles. Just whatever you etched into the base mesh.

One possible way to create animated wrinkles is to have four bumpmap textures for your mesh. One is the default, one contains compression wrinkles, one contains twist wrinkles clockwise, one counterclockwise. You can use the vert color channels to mix these in the shader, overlaying the type of wrinkle. Since the verts blend, your mesh will vary across its surface - certain parts compressed, certain parts twisted, and so on.

The hard part of this approach is how those colors get assigned. One method would be to use driving bones, but as with previous attempts, that would mean a lot of added bones and every animation would get more complex.

An easier way to do it would be to hijack the base bone animations. We can approximate when to use compression or twist by simply watching the bones. When the bones rotate on axis, that's a twist. When they rotate on joint, the surface in the path of their rotation gains compression wrinkles.

These can be calculated relatively easily and used to tint the verts. The computations may be fairly expensive, however, because every bone would need to be recalculated every frame, and in each frame we would have to write a new colors array to the mesh object, which is not exactly a fast process if my experiences mean much. Still, if we use distance from camera to disable that for anyone more than a few meters away, we could probably get away with it.

Now, that won't get you all forms of wrinkles. While it might end up looking pretty nice, it doesn't really embody loose clothing - just various kinds of tight clothing. No billows, basically.

Billows could be created in any of the mesh deforming methods explained above, but I'm not a fan of them because they require a lot of effort. There should be no effort involved: we know exactly what the clothing is shaped like and exactly what the body beneath is shaped like, so it should all be calculable.

Unlike most game engines, we do actually know those details - in a very precise way. The affixed-vert system adapts the clothes to fit on an ever-changing body. We know precisely how much space there is supposed to be, even if the underlying mesh has been deleted or changed to prevent pop-through. Moreover, we can also have a "looseness" setting in the prefab for the clothing.

This means we can adjust the exact position of the clothings' verts as we please, limited only by computation restrictions. But - here's the cool part - we can do that in the shader. Much like we use the RGB color channels to overlay the wrinkle bumpmaps, we can use the alpha color channel to cause billowing. Simply put, the more opaque the color, the more the vert is expanded along its normal.

This is a lot faster and less destructive than actually changing the value of the verts in the mesh. It also is not much slower than the technique we used for the wrinkles, since setting the colors is the same price whether they have an alpha channel or not.

The question then becomes "how do we set the alpha channel?"

In order to calculate compression wrinkles, we have to compute whether a vert has been "pressed" in the direction of a bone's movement. This is absolute, not time-based: if the arm bone is levered upwards and then holds there, we get the same compression wrinkles no matter how much time passes. But we only want compression wrinkles on the top of the arm, not on the bottom.

On the bottom, we want billows. Well, as much as the cloth allows.

So when we calculate the bone's levering, we'll be using a simple system of normals. If the vert normals align with the bone motion, the vert is compressed. If the vert normals oppose, it gets billowed. And, of course, there's a weighted blend between the two for verts that aren't perfectly aligned.

We could calculate the distance between the surface and the underlying logical body mesh to determine how much billowing we should allow, but it's actually not a great way to do it, because the cloth mesh is not created as loose as possible: it's created to look decent in normal situations, so it's pressed against the skin. Instead, we would benefit from using a "looseness" rating, either a cloth-wide rating or inherited from the alpha channel of the default mesh as painted in Blender (or whatever). In that way, certain parts of the clothing could be made to billow more or less.

But there is a value in the relation of the surface cloth to the underlying logical body. This is a bit complex, so bear with me.

When we calculate how to morph the cloth, we find the face our cloth vert would fall onto, and we move our cloth vert as far as those points have moved in the base body. So a fat person's belly pushes out considerably from the default mesh, and in turn our cloth does as well.

But since we understand the nature of the changes in the body, we can also react to those changes intelligently if we want to spend some time creating an algorithm to do so. In specific, we could create a much more adaptive kind of cloth mesh.

One of the big things clothes have never been able to do in games is get pushed and pulled like in reality. You can't roll up your sleeves in a game, because there's no concept of it. You might be able to switch to a "rolled up" variant mesh, but you can just arbitrarily roll them up.

Well, you can if we use a smart autorig adjust.

Let's say you want to push your sleeves up. Well, we know what face of the base mesh each vert of the sleeve defaults to. When moving the sleeve verts, we don't move them arbitrarily in real space. Instead, we march them along the body's surface, sliding along the face and folding over to the next one. We can do this very easily by projecting the vector of intended movement along the surface of the face, and recalculating that whenever we move to the next face. If that proves too expensive, we can simply move along the length of the relevant bone.

As the sleeve moves up, it will need to do two things. The first is that it'll need to rig itself properly. It can do this by inheriting bone weights from the body mesh below, rather than using its default bone weights. In this way a long sleeve, pushed up, would become a proper short sleeve and not still be bound to the forearm and wrist.

The second thing it'll need to do - and the reason I'm mentioning this concept here - is that it'll have to wrinkle.

I haven't worked out the best algorithm for wrinkling yet, but it's going to involve simply moving the verts along the base body's normals.

Anyway, that stuff is theoretical, but I know that I CAN do the color channel stuff. So I'll start there.

Friday, June 20, 2014

Play Echoes

I wrote this essay a while back. The basic idea is that you can save chunks of worldstate, then use those chunks flexibly in context-sensitive applications rather than having to use some kind of natural-language system or whatever.

Then I read this long essay by Ian Bogost about Darmok, the episode about those Star Trek aliens that talked only in references to old stories. He came up with the idea that they are actually talking about process - context-heavy processes stored as references to situations where such things played out before.

Then I read these tweets by Zach Gage, and things started to slowly congeal, like ideas sometimes do.

So, let's start at the end, then I'll describe why it is the way it is.



This is an open-world sci-fi RPG. You can make friends with any NPC, and they can join your team. But the universal translator is only capable of so much, and communication is difficult.

So you create and share memes.

You and Hjilsb are together, fighting against an onslaught of voracious, hopping fungi. Together you best the fungi.

In another game, Hjilsb might gain a "friendship point". Maybe she gains one here, too. But more importantly, in the quiet time later, Hjilsb is talking to others - or perhaps to you - and she does a flumpy hopping fungi impression, then goes "BLEAAAHHH" and fake-dies.

This is a nascent meme. It is a tiny piece of your relationship, your past. It is the part of that sequence of events that Hjilsb remembers most - her personality was most drawn to that particular thing. If she had a different personality, she might have re-enacted the back-to-the-wall gunfire moment, or the fungus dropping from the ceiling in their initial surprise attack, or the flat "whut?" look you gave each other when you first saw them, or the "click-click-" moment she ran out of ammo and you saved her.

These are not simply "oh, we had an event together" markers. They represent a specific start state, progression, and end state that struck that character as personally and emotionally important.

Hjilsb remembers the start state of a goofy enemy, the progression of shooting it full of lead, and the end state of it goofily dying. If she had a different personality, she might remember a different tiny portion of the fight. As the events of the fight stream by, the personality filters for whichever events seem most interesting, and forgets the rest.

At time goes on, that goofy little "bleah!" might fade from use, only a momentary idiosyncrasy. But it could easily become useful.

Yeah, useful.

You can't talk to Hjilsb very well, and she can't talk to you very well. The mocking "bleah!" can potentially stand in for any situation where Hjilsb wants to say "let's kill these idiots". If she remembered the "click-click-" out of ammo thing, she might use that whenever she wants to tell you she's totally screwed. The back-to-the-wall blammies could be used to say "we can do this if we do it together".

Because the personality algorithm chose these events to remember, the personality algorithm knows what sort of situations echo it: the ones that have the same algorithmic response, or are predicted to.

You can use the memes yourself. Once you see the silly "bleah!" you can use it as an emote yourself. Hjilsb knows what the emote means to her, so she assumes you are talking about the same situation. You can use this not simply to establish camaraderie, but to actively change her thinking about a situation. After all, it's hard to be scared when your boss is making fun of the enemy.

There's no reason the "bleah!" emote can't be used to other NPCs as well, although it may not translate well into all personalities.

There's no reason the emotes can't be used on other PCs. There's no reason the emotes can't be used in constructed challenges or quest lines to specifically tint content so an NPC will judge it in a given way.

What's more, there's no reason that the "bleah!" emote has to continue to represent stupid jumping fungus.

Every time a similar situation comes up, Hjilsb won't create a similar emote. She already has a response to dumb-looking creatures getting shot, she doesn't need a new one. She just adds it to the mix, with a sly sideways glance at you and a "BLEAH!"

A new starting state, a new progression, and a new end state added in. Not just hopping fungus, but also purple wombats and big-eared mouse-mecha.

Why keep track? Why does it matter?

Because each progression adds more vibrancy and variation to the meme. If you decide to use the "bleah!" meme when constructing a quest line for your friends, the quest will vary from instance to instance, each time choosing a different flavor out of the giant roster of "bleah!" instances. Not necessarily different monsters or guns or whatever, but a different exact progression, or exact numerical value.

And if "bleah!" happens on a mission that another player is experiencing, his NPCs will use the "bleah!" emote, and it will spread to his game. Creating a shared reality, without any shared content. And when he goes to the forum, or records a YouTube video, "bleah!" will be there, too.

...

Now, what am I talking about?

Well, for starters, I'm not actually recommending that game design. It's a bit clunky. I just wanted to be clear what we're talking about.

The kind of... meme-like thing we're talking about is not exactly a process, nor is it solely a stored context, nor is it simply a feeling, nor is it a combination of all three. It's a bit complex.

We do this all the time. In GTA, you and a friend might be playing together. You leap a car off a riverbank and onto a boat. Your friend says "whoa!" and decides to one-up you. Soon you're trying to jump cars onto the wings of flying planes.

This is what gives an experience life. Not just that something happened, not just what you felt during a given moment, but how you refined that feeling and experience and time passes. Long after you've stopped playing GTA, you'll probably remember those epic jumps fondly. It's the same with scripted events: you play FFVI, you probably have strong memories of the opera. But these memories are not simply your memories. They have been tinted and reinterpreted many times, and the opera in FFVI has come to have a shared meaning among those that have played the game.

This sort of thing is becoming more and more common as YouTube and Let's Players grow in popularity. I have revisited games I disliked because I saw someone enjoying them, and since I was now "in on it", I was able to enjoy them the same way.

I don't have a good name for these bundles of shared, refined experiences. Something like "experiential clusters" would probably be accurate, but it's not very catchy. How about "play echoes"?

For now, I'll call them "play echoes". These are events that catch your eye, you have an emotional response to them, and in some manner merge this with other people's similar responses to similar events.

These vary wildly. For example, the strained puns of Dark Souls etchings are a kind of play echo. So is the deep hatred for Road To Hell. In Dark Souls, the etchings are shared in the game, through the game engine itself. But in Road To Hell, the derision is shared via the internet, with videos and posts laughing together, sharing the same judgments.

Play echoes can easily make or break a game. Sharing your game world with others can add a lot of depth as it attunes you to details you wouldn't have noticed, or would have judged in a less interesting way. But sharing can also pollute the experience, screwing up the sense of place, the level of loneliness, and the fundamental skill progression (you learn too much).

So, I have a few questions:

1) Can you create a game where players can create and share play echoes in a way which maximizes "making" the game and minimizes "breaking" the game?

2) If so, can you create a game where the game understands the concept of play echoes?

3) If so, can you create a game where the players can script new content, quests, and so on out of play echoes rather than painstakingly scripting and balancing everything?

Wednesday, June 18, 2014

Growing NPCs

I've been thinking about NPCs.

A while back I came up with a "chatter" system that allowed NPCs to remember chunky bits of worldstate, then allowed both them and the player to use those memories to talk about things.

The idea was simple: NPCs are normally scripted to do specific things to further the player's adventure. They have a specific role they are assigned. But that doesn't sit well with me. To me, the NPCs are the player's adventure.

The most powerful experiences I've had in open-world games were when someone was with me. Whether it was another player or a good NPC, it's a powerful experience. The important thing about an NPC, to me, is not the design or the personality. It's that the NPC feels like they are moving through the same space as me.

Chatting with an NPC at a home base is all well and good, but I don't need it. It's extraneous. The NPCs don't need to have a compelling backstory, or a secret they refuse to tell you. They don't need to have a loyalty mission. All they need to do is move with me.

Probably the most powerful NPCs in this regard are from Dragon Age, because they react to each other. Their reactions to me are pretty bad, but their reactions to each other are really good, creating a real personal dynamic to the party. It kept me playing even as the gameplay disintegrated and the story collapsed into mush.

When it comes to interacting with my specific movements through space, the characters fall flat. They do sometimes comment on the spaces we pass through, but always in a passive and passing way. They do occasionally act in response to my actions, but their responses tend to feel arbitrary and annoying because they tend to judge something without allowing any explanation.

For example, if I choose to help someone, my party members will judge that in a particular way no matter what I was thinking. This was a big issue in the Dragon Age games, because I would often find myself blindsided by a character's judgment. The reasons I decided to take a particular action were obviously not the reasons any of the devs thought anyone would, and it often took me quite a while to figure out why a character would be upset with that, or like it.

We can learn from smaller projects, though.

In the original Skyrim, the companions basically didn't exist as anything other that combat flunkies. They had almost no personality after being put into your team. But since then many companion mods have been added.

One of the most interesting to us today is the thief character, Arissa.

She follows many of the same patterns as a Dragon Age character, but she does those patterns much better. She has more active rather than passive location-triggered comments, and she can be released to explore a city on her own, which is very interesting. But those require a lot of custom content for relatively small payoff. Let's talk about her most effective advantage:

She will judge your actions similar to a Dragon Age character. But she does it in a way that doesn't have an opportunity for misunderstanding.

She doesn't judge you based on which quests you accept or that sort of thing. She judges you based on how awesome a thief you are. Sneak attacks, picking locks, and picking pockets will earn her friendship. Murdering friendlies will earn her distrust. This is really interesting, because it ends up painting a very powerful picture of her personality: she appreciates your ability to rob townsfolk blind while they sleep, but if you hurt them physically she'll get pretty upset.

Relatedly, she gives you a very clear progression. You are told when she appreciates or doesn't appreciate things, and once her opinion has changed enough it unlocks new features. A bit of appreciation and she'll carry things for you. More, and she'll let you equip her. More, and you can ask her for lockpicks. More, and you can ask her for poisons. And so on. While these seem minor, they are important rewards to guide players onto the path.

After about half an hour of Arissa as my (only) follower, I found something odd: I was changing my behavior for Arissa. I was pulling off unnecessary stealth kills and stealing things I didn't need specifically to impress her. I can't recall ever doing that for any other NPC - normally I would just choose the NPCs that get along with my play style.

When I was finally caught pickpocketing by a civilian, rather than kill the civilian to cancel the bounty like normal for a villain run, I actually paid my bounty (after giving all the illegal stuff to Arissa to carry).

This story of my adventures was very different from what it would have been with any other companion. An NPC had shaped my adventures in a very open, simple way. No quest lines. No ethical dropdown box. No trying to read my mind and getting it wrong. I had the adventure I was having, and an NPC was a big part of it.

Arissa was flexible enough to fit into my adventure. No matter where it took me, or what mods I had enabled, Arissa's simple preferences held up. She could participate in any setting, any scenario, any specific adventure.

This is the heart of what I'm trying to do with my new prototypes. Basically, I want the overarching megaplot to be a mod. I want people to be able to "mod in" any end-of-the-world storyline they want, and all the NPCs will function in that adventure without an issue.

I would like to expand the functionality of the NPCs. Although Arissa was good for the limits of the engine, she was basically stuck just judging things rather than participating in any kind of meaningful way. The line dividing her active systems (combat AI) and passive systems (judgments) was far too stark.

A more active character can be created, but you need to be careful to keep chaos under control. That means that the game's fundamental systems have to be built with this kind of active NPC in mind.

If Arissa (or Morrigan or whatever) takes loot that I was aiming for, or kills something I wanted to kill, or otherwise disrupts my immediate plans, they are suddenly annoying. The game needs to be built with their free action in mind.

Another problem is the number of NPCs. Arissa works well as the only NPC judging things, but if there were another three of her, each with their own values, it would become a mess. If you're going to have a lot of NPCs, you need a different approach.

In my game engine, the tentative plan right now is to only allow for one or two active companions. You might have many people willing to go with you or be in a dance party together, but they exist as part of the world when they aren't in your party. There are rewards for letting them continue their daily life uninterrupted, at least for decent stretches of time.

The other part of my plan is to have "plan triggers".

In order to not disrupt your plan, all the NPCs really have to do is understand what your plan is. Also, if they understand what the plan is, they can be "moving through space with you" much more effectively, participating in your adventure much more clearly.

So, when you walk into town, click to tell your party to ask around for rumors but not get in trouble. Click a different button to tell them to stay close and on alert. Click a different button to tell them to go straight to the inn, or wander as they see fit, or stay hidden... all associated with you saying something, and them saying something back.

I'm thinking you can even expand this to targeted actions. Control-click to tell a party member to execute the plan there - whether it's talking to those people, stealing those things, blowing away those monsters... sort of like turn-based controls, but much vaguer and faster to trigger. More like saying "There!" rather than "attack goblin B with your fireball spell".

I've also been thinking about a lot of alternatives to the concept of "you". A big part of the problem with open-world games is that the player avatar is a specific person and therefore everything has to revolve around this one person. This one person has to be friends with everyone, know everything, act in a specific way...

To me, that only works for a small game. If an open-world game is going to be longer than a few hours, I think they would benefit from being able to switch avatars. To that end, I've been considering a variety of avatar-switching ideas.

Right now, my favorite is that you are some kind of ghost or godling. You have your own presence, but you can't really do anything without possessing a willing host. As time passes, hosts get steadily more burned out and you have to stop possessing them to allow them to recover. So you'd have a "primary" NPC that you are probably directly controlling most of the time, and one or two secondaries that act with you.

This would allow for a much wider variety of experiences without crowding in too many characters at once.

Well, nothing is set in stone. These are just my thoughts.

Tuesday, June 17, 2014

I Still Hate Bioshock: Infinite and Gamer Culture

Maybe it's because I had such a terrible commute this morning, but I can't get Bioshock: Infinite out of my head. More accurately, the response to it.

The end of last year was a rough time for gamers, because the inevitable "best of" lists came down the line like bullets from a gatling cannon. We discovered, to our horror, that the reviewers and critics we respected had listed some truly loathsome games as their favorites.

Bioshock: Infinite and Tomb Raider were the big ones for me. I hated both those games with a deep and abiding resentment that soured my opinion of anyone that liked them. Both were horrific.

Tomb Raider was openly horrific, like Hotline Miami. I could vaguely accept people liking those games, because ultraviolence, torture, and extremely boring depictions of human sadism are accepted parts of gamer culture. Getting upset with people liking Tomb Raider is like getting upset at people liking JRPGs or League of Legends. I can separate myself from that and say "well, it's just not a genre I like".

There are people who insist Tomb Raider is not an ultraviolent sadistic torturefest, but there are people who insist League of Legends is an inviting game and JRPGs are intense.

What I can't really get over, even now, is Bioshock: Infinite.

See, BI was created specifically to pander to straight white males ages 18-40, but it was created with a slightly new kind of pandering.

I grew up with games pandering to my demographic using violence and tits and manly-man growling. I was saturated in it, to the point where I didn't even really notice it any more.

BI tried to pander with obfuscated science-fiction storylines.

Sorry, Levine, I'm a connoisseur. I grew up on the very best science fiction. I remember my first viewings of Akira and Ghost in the Shell: both times I thought "oh, a good take on a standard story".

I was actively repulsed by the shallow plodding storyline in BI because it was so sub-par. When I read all the accolades about how amazing the story was, I was confused. The story was the weakest part of the game. Not just the big notes, but also the small ones. There were only a few story beats I liked, and even then they were usually screwed up in the last second by an overly heavy pandering hand.

Searching for other people who hated the story, I was struck that nearly all of them were not straight white males age 18-40.

They called out the story for a number of other problems. Racism, sexism, classism, and more. While the game attempted to make a racist, sexist, classist setting for the purpose of calling out those flaws, it ended up also BEING racist, sexist, and classist underneath that.

I thought this was all very interesting, and I learned a lot.

But that's because I had an "in". I already thought the game was crap, and I was hunting for people with the same opinion. When I found out that they had the same opinion for different reasons, I was able to sympathize and see their approach without feeling defensive, much like when you find someone likes the same band as you, but has a different favorite album.

Unfortunately, 99% of game reviewers and critics are straight while men age 18-40. And they were pandered to.

They loved this game because it touched them in all the spots they liked to be touched. It made them feel smart and mysterious and ruggedly awesome all at the same time. They loved it.

And when they heard these voices talking about how awful it was, they got defensive. They never actually listened to what the detractors were saying.

Many of them went into "full offensive defense" mode, like Jim Sterling. However, apparently Jim's first encounter with the detractors was with the people who hated the ultra-violent nature of the game, because he (and many others imitating him) defended themselves against that complaint with all the vigor they could muster. IE, they made fun of anyone who thought it was too violent.

Maybe it's because people who thought it was too violent were safe targets, as compared to women, people of color, and people struggling to earn enough to eat. Whether consciously or subconsciously, those targets were ignored like they didn't exist and had never said anything. Instead, it was "make fun of the namby-pambies that don't like violence" mode.

Any time I saw someone do this - and I saw it a lot - it really broke my heart. It showed just how exclusionary the gaming community was. Jim Sterling was probably the center of this, which is why I keep bringing him up.

See, Jim used to be a real toxic guy. However, when I started watching him last year I found he had really turned it around. He wasn't perfect, but he was a much better person and much more aware of misogyny and racism than before. I was sort of holding him up as an example of how "bro gamers" could become more culturally aware. He was a crack in the armor of exclusionary gaming culture, a path forward.

And then he held aloft a pandering example of exclusion as his best game of 2013. The crack in the armor was patched.

To me, the message was clear: gamer culture doesn't need to be inclusive. It can just get older.



I'm writing this so late not to dig up old wounds, but because I wasn't sure until now that I was really affected as deeply as I thought. But six months have passed, and I'm still upset.

Once I started pulling at these threads, my investment in "gamer culture" unraveled. For six months I've been completely unable to enjoy any major game, because all I can see is exclusionary bullshit. Even indie games often feel exclusionary.

I didn't make any conscious decision to not enjoy 99% of games any more. I just found that I could suddenly smell bullshit, and everything stank.

Although I can't speak for them, I can't help but think that this must be how basically everyone who isn't a straight white male age 18-40 feels about games. And I have to say: it's pretty bad. That there are gamers from outside that demographic amazes me. They have a level of tolerance and endurance I cannot even imagine, to enjoy something that stinks this badly.

I can't do it.

Games stink too much.

Monday, June 16, 2014

People Organizing Themselves

This isn't a game design post.

There's been a growing stream of news about people organizing themselves. It's becoming more and more easy. Things like AirBnB and Uber are one example. People organizing to evade import taxes and tariffs are another example. The new tone of socially-aware political protests are a third example.

But even you, personally, have probably noticed how easy it is to organize people. When each side has a smartphone, messages and internet maps make it very easy for any two people to quickly negotiate a time and place to meet. Even if you don't want to meet up, talking via messages allows for easy, asynchronous, searchable communication. It's easier and easier to communicate.

Most of the organizations arising in this space are "trust brokers" - their job is to insure that the people communicating are both trustworthy. Like all middlemen, I expect these organizations to be replaced by something a lot flatter and more public, but it'll be a while before that happens.

Anyway, anyone with a smart phone is exercising powers that used to be held only by corporations, governments, and the extremely rich. Buying from abroad used to be limited to those categories - companies would buy or manufacture abroad, then ship it home. "Globalization", we called it. Governments stepped in to regulate it, some more than others. But individuals were not usually very carefully regulated.

If person A wanted to buy jeans from America, person A would have to fly to America, buy them, and fly home. Obviously a huge expense and waste of time. Instead, person A would buy jeans from a company that specialized in importing jeans. And they would pay the middlemen and the government to do so.

Now, however, person A can buy jeans via person B, who happens to already be in America and wouldn't mind doing your shopping for you. This is a literal middleman - not an organization, but a specific person. You don't even have to know them - they have a 5-star rating from everyone that's come before, so you can trust them to get the job done.



This may sound pretty familiar, because its not exactly a new idea. People have been noticing this kind of thing growing for quite a while. But I want to talk about the cultures surrounding it in a bit more depth, because I have Opinions.

Let's state the idea clearly:

Ad-hoc cooperation is the future.

It's a carefully chosen phrase, because there is a lot of political chaff floating around. If I say "individuals will create the new economy", it won't go across right. Even though it technically means what I'm trying to say, it is already associated with a particular political group - the Libertarians - and therefore people will naturally think of Libertarian philosophies.

So, let's be clear: this is not a Libertarian thing. This is not about independence, but interdependence. It is not about supply and demand, markets, or abusively externalizing your costs. In fact, it's basically the opposite of those things.

We're talking about arranging to cooperate in a limited fashion so fluidly that everyone stops thinking "I'm going to do this" and starts thinking "we're going to do this". It's not about an economy or brokering of trust, because that implies some kind of buying and selling of trust. It's about sharing resources and skills so fluidly it's almost unconscious.

If I were to create a science fiction setting around this idea, I'd have to be careful. It would be too easy to simply treat things as a hive mind.

But I'm actually talking about the reverse of a hive mind! I'm talking about a frothing mix of very diverse people naturally finding others that are complementary. Others that are interested in doing the same things, or whose activities perfectly line up with the activities you need. This is not a method to make people all the same: it is a method to leverage the fact that there are so many different people.

Because that's what's happening. Humanity is diverse, and growing more so.

Our ability to connect through the noise and chaos and distance is growing even faster.