Wednesday, March 29, 2017

Modular Space Planes

So, in The Galactic Line, you build space ships out of modules. Therefore, I model and texture the modules, animate them as needed, and so on. It's reasonably decent.

It inevitably results in an "industrial" look. The modules get slapped together in whatever way seems best. Even though you're not locked to a grid like in many voxel space ship games, you're still working with parts that have a fixed size and shape, and their seams will always look heavy and industrial.

Moreover, repeated parts will always be the same size, so you tend to end up with straight lines and boxy profiles. This is especially noticeable with habitable areas, since you rely on door-to-door connections, and that typically means all your habitable areas have the same connection profile - leading to straight lines and flat profiles.

Most space ships that are properly designed have flowing lines, tapered elements. They feel almost organic.

That's a high bar for modular spacecraft. Flowing lines and tapers are tough to do in modules, because baking them into the modules means the modules can only be assembled in one order, and with no missing parts. No reason to make it modular, then!

I've been struggling with this as I try to make a spaceplane set, so let's talk about a few methods to make modular ships have flowing lines.

1) Algorithmic tapering

It is possible to adjust the meshes of the modules to taper according to some algorithm. You can easily make a fuselage of modules into an organic tapered shape. This has some problems, though.

First, it can't mask the seams of the modules. This means most of the modules have to have identical connectors, which radically limits the overall look. It's always going to be a tapered fuselage, just with different surface greebles representing the different parts. More complex seams are possible, but the tapering won't mask them, so you'll need to be aware of that.

Second, if the modules have interiors, it's going to screw up the tapering. A room that shrinks or grows might become inaccessible or out of proportion. If the rooms are size-locked, now you have a problem where the windows need to stay attached to the outer hull, so now there are specific sub-elements of the mesh that must be scaled at different rates to get the final taper. Interior halls twist and grow, room ceilings rise while the rest of the room remains the same size... it's a mess.

Without R&D, tapering could only be applied to non-habitable elements such as engines, tanks, machinery, etc. I don't know if that's worth the effort.

2) Masking elements

Slipping coats on the outside or shims on the inside is perfectly possible. For example, if you want your straight fuselage to take on a triangular shape, slip on a triangular bit of armor around it. Any shape can be mimicked like this, and the flow of the ship profile can be built primarily out of these masking elements instead of their contents.

One problem is precisely that: the flow of the ship is mostly determined by specific masking elements, and is therefore pretty restricted.

Another problem is that the masking elements inherently conflict with the surfaces they mask. If you're turning a straight fuselage into a triangle, then the windows on the fuselage are now, at best, recessed several meters into a concave pit. This is substantially worse if your fuselage modules have significant surface elements, such as bay windows, solar panels, machinery, or inflatable areas. Masking elements constrain what you can put on your core modules and where, meaning that they may look 'unfinished' when not masked.

It is possible to do the opposite. If you have a split body rather than a fuselage, you can slowly move the elements apart or together and fill in the interior gaps. This is a fairly robust approach, but it means you'll have twice as many parts, twice as many halls. From a simplicity standpoint, it makes the most sense to "shim" with a hallway rather than a hull part, making the core hallway widen or narrow or have gathering points to change the flow of the profile. This can work, but care needs to be taken on how the attached rooms actually attach. Otherwise it will still end up looking very linear and dull.

3) Adaptive sizing

It's possible to set up the individual elements with blend shapes or bone animations to slightly change their shape. This is fairly adaptable, since it is per-part, but it does require that the linking areas remain interconnectable. So you can't go too off-the-wall.

This can be used to taper elements, but they would all have to have the same basic taper characteristics in order to connect without big chunky seams. Perhaps more feasibly, it would allow you to raise or lower the exits, which would break up the linearity without feeling too forced and without any complex interconnectivity requirements.

Of course, you could also just make some parts have a rise or fall inherently, which would accomplish the same thing. This would force players to accept specific patterns of shapes, but it's much cheaper.

4) Painted hulls

Another option is to let the players place the rooms/modules, then adaptively generate the flowing hull. This wouldn't be too hard - a convex mesh calculation with some holes cut for the windows and panels you want to expose. However, since I haven't done it, I don't know how good the result would really be. "Shrink-wrapped space ship" seems like it might be a bad look, and you'd need a lot of smart texturing algorithms.

Even with that approach, you'd still need to use offsets to keep the habitable areas from going excessively flat.

A subset might be possible. "Adaptive surfaces" are less difficult that fully generated ones, and it might be possible to create masking elements that "melt" into the existing objects, including making way for elements that need exposing. This is a bit of a challenge, but not as excessive as generating the full hull. Also, it'd allow for a lot more control over what the ship ends up looking like

A super-easy subset would be adaptive surfaces that have shapekeys built in. The various shapekeys align with various shared shapes among the modules, allowing you to adjust the hull to fit properly. This is a big step up from simply allowing the meshes to overlap, but it does mean you'd need to have only a few, very common shared shapes.


Anyway, that was my very technical essay on a specific thing I'm doing.

Tuesday, March 28, 2017

What Plot Would You Write?

I'm playing Mass Effect: Andromeda, and I've been slightly disappointed by the writing. Putting aside the dialog, I'd like to talk about the wider elements.

Spoilers, but only vague ones.

The game is about a large group of colonists leaping from the Milky Way to Andromeda in vast arks, targeting a few specific worlds that seem inhabitable. They cryosleep for 600 years, and awake when they arrive.

There are some holes here that need some Unobtainium patching, but it's not a bad idea. It sets up a massive project, seals the path backwards, and isolates us from the extensive (and problematic) pre-existing lore.

However, that's not the full setup. There's a million things going on, and they all need to be explained before the story can even get started. That's not a great idea: any one of the setup elements could easily have supported the whole game without making it super-complex, and that would have made the writing easier.

Talking about how writing can be "made easier" might seem a little odd, but the simple truth is that if the scenario is set up well, writing flows well and needs less forcing. This is especially true of characters.

In a game where the player can do a huge number of different sub-plots in a variety of orders, it's critical that they feel some connection to the places and things going on. The easiest way to do this is to have the party members have some connection to nearly every subplot.

If they care, we'll care.

This is a pretty typical approach. In fact, it's the classic Mass Effect approach: in ME1 and ME2, that's how it was done. The characters resonated with nearly every scenario.

For example, Garrus was all about the nature of vigilantism. Well, so was the plot of Mass Effect! The subplots naturally had the concept come up all the time, and therefore Garrus always had something to do or say. Naturally this culminated in him trying to clean up that hellhole asteroid as Archangel, a microcosm of your whole adventure.

Wrex was the same, but about war instead of vigilantism. War was a core theme, and kept coming up. When was it good? Bad? Necessary? Out of control? Tired? Heroic? Desperate? What are we willing to fight for - no, not just fight, but go to war for? And when do we stop?

Both war and vigilantism were threaded into nearly every scenario in the game because the game was built on a single foundation, a simple setup that allowed the writers to easily explore those concepts in a lot of different ways. Although simpler, the setup for the earlier Mass Effect games was not smaller. It could support just as much play, story, and depth... just focused on deeply exploring a few themes instead of shallowly exploring a lot of them.

To put it another way: it's impossible to tell where Garrus ends and the story begins.

A good character flows everywhere they need to be, naturally, unforced.

A bad character stands to the side and watched the story go by. Even if they have good writing or voice acting or are compelling, if they just stand there, they're bad.

This is a big failure in Mass Effect: Andromeda's writing.

For example, Cora. She's a human psychic that worked as an Asari commando. This is a really interesting idea that has really powerful themes.

The actual in-game writing of Cora is clearly "Asari ark contact + conflicts with Peebee". She doesn't flow into the wider story - she's simply wedged into "her place" as a representative of a specific story element. This is probably because there's a lot of specific story elements and they don't have much thematic connection.

Cora's history working with a group of weird alien commandos and desperately trying to earn their trust? Well, that's literally what you do with the Angara. You literally work with Angaran commandos and try to earn their trust. But Cora has nothing to say about it. She's not involved.

The fact that Cora cannot live long enough to complete Asari commando training? That's fascinating, and could easily connect to things like our 600 year cryosleep, or to the Angaran elders that cannot seem to find any fresh new students. Again, Cora has no comment.

This is easily explained: the Angaran stuff is Jaal's place. Jaal does that stuff. Cora isn't involved, except for some minor flavor commentary.

This goes for every character. Jaal's thing is imposter syndrome, but he has no connection to Nexus and its leaders? Even though the thematic connection is clear? Jaal doesn't even have any connection to an Angaran port world conquered by pirates!

The lines drawn around what each character is involved in are sharp and clear.

Unfortunately, that means that for 99% of the story, Cora and Jaal just stand there. They aren't involved.

This is true of all the characters in ME:A, and I think it's why we just don't feel as much connection to them as we did to ME1 and ME2 characters. Those characters went through an adventure with us. These characters just stand nearby while we go through an adventure.

It also makes it difficult for us to care about our adventure!

In ME2, visiting the hellhole asteroid was interesting because two of our characters were deeply involved in trying to fix the place in their own way.

But in ME:A, visiting a similar hellhole is dull. There's no major characters with any significant ties to the world. They don't even get involved in local affairs - just some flavor text. Instead, your contact is some boring smuggler and a woman with a dirty face, neither of whom anyone cares about.

Even characters that should have a history with either the smuggler or the pirate queen... don't. Vetra apparently has no comment on this smuggler, despite using smugglers extensively. Peebee has no particular comment on the pirate queen, despite them both living through the same civil war on the same tiny space station!

This is because Vetra's story is Vetra's story and doesn't interact with the rest of the world. And so neither does Vetra. Peebee, too: lock her up in her own little room, no contact with the rest of the world.

Unfortunately, this means that I don't care about the pirate base. Moreover, the writers missed a chance to make me care more about the crewmembers. If Vetra was the smuggler trying to fix up the pirate world, Vetra would have a chance to impress me and spend meaningful time with me, as well as giving me a reason to care about the pirate world. But... nope. Some boring Han Solo wannabee that is also nicely cordoned off into his own little room.

Writing characters that thread through the game is not terribly hard. The fact that the ME:A characters don't even try makes me think that the writers came up with a plan to partition these elements specifically to reduce complexity - otherwise, they would have written some involvement on accident, I would think.

Whether on purpose or on accident, ME:A's partitioned storylines are a huge disservice to the world and the characters. It starves our critical crewmembers of screentime, and leaves each world feeling uninteresting and pointless.

On a writing level, there are some techniques you can use to make it easier to make the characters flow through your scenarios. A key factor is choosing a simple foundation so you have more repeating themes. IE, vigilantism explored in a hundred variations means a hundred chances for Garrus to have something to do/say.

If ME:A didn't have such a complex setup, a lot of these things would have flowed naturally as the writers searched for interesting ideas in the simpler story space.

But... the fact that they didn't do it at all, not even on accident, implies they wrote it like this on purpose. In which case simplifying the setup would not have helped.

At least, that's my theory. What's yours?

Wednesday, March 22, 2017

Character Checklist

I'd like to talk about how to write characters, especially for sci fi. There will be very mild spoilers for Mass Effect: Andromeda's first hours.

It's clear that the Mass Effect team wanted to up the representation in this game. The characters are more diverse, both major and minor. For starters, there are a number of alien lizard women that don't have breasts, pretty much a first in the genre.

Care was taken to try and slot people into "nonstereotypical" roles. For example, the religious zealot is your scientist. The butch lady is straight. It's clear they were really trying to make this feel inclusive while avoiding stereotypes.

Unnnnfortunately, they're not very good at it.

In science fiction, we're currently walking a new path. The concept of representation in sci fi is thorny, because sci fi was built around representing other cultures and ideals with aliens. When sci fi is aimed at a single group of people, that works well enough - your target demographic is the baseline, and everyone else is an alien.

This may sound reductive, but that's how it's generally been. This allows sci fi to take how the target audience treats those people, those ideas, those policies... and show it separate from the complex intertangling of the real world.

Even Star Trek, a sterling example of inclusion, did this. Although the crew had minority crewmembers, they did not represent the struggle of minorities: Star Trek was portrayed as being past that. They were representations without the real-world baggage.

Rather than include any racial tensions on the starship, the writers would put the racial tensions into a representative race. For example, making a species that is half white and half black get into racial wars over whether they where white on the left, black on the right... or visa-versa.

This works reasonably well when sci fi stories are aimed at a specific audience. But once the audience expands, it becomes clear that being represented in that way doesn't work so well. The tribulations of the Mass Effect devs have made it clear that people want to see themselves properly represented. Not as a weird alien or a paint job on a default character, but as someone with similar concerns and goals.

Basically, everyone wants a power fantasy about them.

Nobody is monolithic. Each person cares about a lot of things. This is why Mass Effect found itself with fans that weren't really represented. It has anemic racial commentary and somewhat regressive gender representation, but those people also found things they liked. Space ships, cool adventures, an epic battle, hot folks you could date...

Mass Effect clearly decided those people deserved better representation, and struggled to work in a more diverse cast. This seems to have backfired with Andromeda, whose representations are painful tokens that mostly highlight a clumsy writer rather than making people feel welcome.

To me, the problem is clear:

Representation is not one thing.

In sci fi, representation can mean "oh, we're past all the problems you're struggling with", or it can mean "oh, let's explore that concept, free from the complexities of the real world", or it can mean "oh, let's explore that with all the complexities of the real world in a new context".

Moreover, in a video game, does an NPC even count as representation? Can we say that we are represented if we are not allowed to control ourselves? Does a background character going through a personal crisis represent us if we also went through that personal crisis?

Or does it only count if we actually have control?

Whatever you think the answer is, I think it can be argued that we should try to "centralize" representation. It should be part of the player's experience, not just part of the background noise.

The obvious problem with this is that there are more experiences we want to represent than we can cram into one timeline, and many of them are contradictory. Our hero can't be everyone. They will always be an outsider to some group just by their inclusion in another group.

... none of this is new.

Sci fi has always been about including a lot of different experiences via abstraction. Normally, the experiences we want to include are coherent. They cohere around a core idea.

Our universe might revolve around the idea of right and wrong, like Star Wars. Experiences revolving around that concept naturally pop into the writer's heads and flow smoothly through the player's adventures.

For example, in the Knights of the Old Republic series, we can easily have an evil android, a 'gray' Jedi, adventures in balancing the needs of the many and the rights of the few, of balancing law and morality. These are issues which naturally arise from Star Wars' obsession with good and evil. They all integrate with the player's own story to some extent, usually through party members.

But it is more difficult to include things like race, religion, or gender. Since they are not hooked directly into good and evil, you have to force them to fit. Sure, it's evil to massacre people because of their race or religion, but there's not much to explore. It's just evil being evil because you need to send a message.

Thus the endless stream of bandits in so many games. Just evil for evil's sake. Can't think of any way to make them more interesting, because we didn't set up our universe right.

If we want to be more inclusive, we have to orient our universe around inclusive concepts. For example, the Federation is about all people coming together for a better future. Not just humans, but all sorts of aliens living their weird, extreme, exaggerated alien lifestyles.

That's not a very viable theme in this case, because there's not a lot of discussion. Race, religion, and gender in this kind of universe are just accepted. We're past the conflicts that arise from them: the answer is always "yeah, as you like, now let's go space exploring!" Or, alternately, "let's show the oppressor why he's wrong!"

This is not a situation I have answers for, but if I were writing a sci fi setting these days, I might base it around the idea of acceptance vs rebellion. Accepting people or things or situations - or fighting them. When do you side with who, and how much will you sacrifice to help people you'll never meet again and who aren't magical paragons?

When we want to add in representation here, it should flow relatively fluidly. There are endless nuances and complexities to explore - not just things like "evil people hate minorities", but things like systemic injustice, unstable societies, and the difference between accepting someone and fetishizing them.

We would be free to either lift situations wholly from our reality, or create abstracted situations that leave out the entanglements of the real world. Both would play well in this environment.

These situations would flow easily and naturally, and we would be able to write them without feeling forced or feeling like we have a checklist. I think you'd be surprised how often you would naturally write something that resonates with people Mass Effect has been struggling for years to even acknowledge.

Conversely, we would have a hard time talking about good vs evil. It'd feel very forced.

Even with this theoretical franchise, we are left with some complex questions. Can facets of humanity be represented by aliens? Do technological handwaves diminish the validity of real-world struggles? How much of our writing needs to be vetted and rearranged by people going through the real-world versions of our abstracted situations?

But I think it'd be a pretty good approach. Just need to figure out a reason why acceptance vs rebellion would be the founding principle of the universe: Star Wars has the Force, Star Trek has the Federation, dunno what I'd use.

Anyway, let me know what you think.

Wednesday, March 15, 2017

Inside-Up: Space Ship Floorplans

The Galactic Line is a game about crews aboard space ships. It has one particularly glaring challenge: the camera.

Looking at the crew of a space ship is typically done via a birds-eye view with the roof stripped away, just like how you see people in The Sims, or FTL. This approach is particularly useful in games where you also build things or manage complex facilities, because this kind of "map" view is a natural fit with arranging pieces and laying floorplans.

Originally, I had planned to have The Galactic Line feature several different cameras, including a first-person or close-third-person for realtime events. However, I think I've changed my mind. Let's talk about the drawbacks of the birds-eye view, my workarounds, and why I'm leaning in that direction again.

One of the biggest limitations of the birds-eye camera is when things are stacked. You can see this even in The Sims: when you're looking at the ground floor, you can't see people in the basement or upstairs. This keeps you from having a good overview, despite having a literal over view.

The Galactic Line uses modular construction, rather than tiled construction. You click prefab rooms and sections together. This means we can arrange our modules so that they naturally click together in a manner that doesn't have overlapping rooms.

1) Multi-layer modules (stairs, atriums, etc) give us a good control point for how ships can be arranged vertically. If these modules have doors on each floor offset from the floor beneath, then the attached modules will also be offset, allowing us to naturally stagger our layouts.

2) Use of "gray" space such as storage and life support means that a habitation module can have lots of areas we can simply leave unrendered, allowing for rooms above or below to naturally fill that space. Moreover, hallways themselves are low-priority and could be rendered softly, if at all, allowing us to stack halls over rooms without blocking the rooms.

3) Larger modules for larger ships may have a dozen rooms in one package. If we make each of those modules largely vertical, we can arrange the rooms so they don't block each other vertically. Additional ship modules will generally snap on horizontally, meaning our large modules rarely vertically overlap with other large modules.

4) Sparse modules. Using a variety of layout tricks such as arbitrary angles, slopes, and gentle curves, we can make it difficult to tightly pack our modules. These work well if the modules have a number of windows or other external-facing elements to give an excuse as to why you don't want to pack them tightly. This would be, visually, fairly unique: most settings have tightly-packed hab areas.

5) Subsystem filters rather than floor filters. Instead of looking at "deck 6", we can look at "off-duty rooms" or "engineering rooms" or "command rooms". By arranging these rooms using the aforementioned techniques, we can show a spiderweb of rooms on several floors, none overlapping. The focus on functionality means we can also see the operations of the sort we care about, rather than the arbitrary "nth floor" filter.

In The Sims, you can't see everyone all the time - they might be on a different floor, or just far enough to the side that they're not on screen. So there's a bunch of portraits on the screen which show their faces and needs, letting you keep track of them no matter what you're looking at.

Our situation is a bit more complex. The Sims is about a few people, and the focus is on tending moods. In The Galactic Line, you could theoretically have a crew of thousands, and the focus is on the specific event that's unfolding rather than on moment-to-moment moods.

The good news is that the event focus means we are also able to focus on only a few of our potentially thousands of crew members: the ones involved in the event.

This means we can have a manageable number of portraits, but it also means we can have a manageable map presence. We can arrange our highlighted crewmembers to be in rooms with no overlap, so we'll always have a clear view of them. We can even build an adaptive interior view which highlights only the rooms they're in, making any potentially overlapping rooms invisible unless you manually walk into them for some reason.

Functionally, this means we don't need portraits. We can use portraits for a variety of things, especially when arranging or building the crew, but for the event scenes we don't need them. You can see everyone involved. You can see what they're involved with because they're standing at a specific place in a specific room. There's no need for floating heads to pump numbers into your eyes.

The reason I wanted to go with a more personal camera is easy: this is a game about people, so I wanted closeups of people. I planned to do some camera manipulation when you get near/start talking. Get a reasonable closeup of the face.

I need this because A) faces are distinct, and it's one of the important ways crew members are unique. B) The expressions they make are a critical part of empathizing with them and their situation.

However, we don't need to rely on the player camera. There's no reason we can't have a separate dialog system, like thousands of games of all sorts. A popup of some kind that shows their face up close.

There's loads of different approaches. For example, the full-screen dialog tree vs the chatroom-style messages with faces alongside. There are a fair number of distinct options - perhaps a sidebar element that folds out to show the ship's chat room would feel right... although the faces might be too small.

Any way I slice it, there's no big problem with having a separate dialog engine. It's common.

Advantages to the Bird
Birds-eye camera has a few distinct advantages. I've already mentioned that it fits well with the construction engine. It also shows a fair number of people and the state of the ship all at a glance, which is nice.

Another advantage is the low resolution required. Because the camera never gets too close, I can use relatively low-res assets for furniture, for bodies and rooms. I don't need to have high-res assets for books and posters.

The main problem I have with the camera angle is simply that it's not very personal. Moving a pawn around on a giant board game is not very immersive. Walking around inside the ship is a hugely immersive experience that I would love to focus on, especially because the experience of being stuck aboard the ship is the focus of the game.

Well, let me know what you think.

Monday, March 06, 2017

Glowing Open Worlds

I was following some Twitter thoughts by Jake Monahan, and it got me thinking. He was talking about how open world games are inherently built to be strip-mined, discarded once you've finished pillaging them. He points out that most of the things you do that change the world (such as resolving a gang war) actually make the world less fun to play in.

This is very interesting to me, so I thought I'd analyze it in way too much detail!

First, the constraint: we're specifically talking about designed open worlds, not randomized ones. Fallout and GTA, not Minecraft.

The most obvious reason why open world games are built like this is because that's the play we have gotten used to. Killing and collecting are our focus, and both of those remove your targets from the game.

A less obvious reason is that most games are about progressing through the game. If the world is steady-state and nothing you do changes anything, there's no reason to move to the next zone. And if you do decide to move on, there's no reason to actually grapple with the next zone, you might as well just skate through as fast as possible.

So the "strip mining" is not simply a side effect of the preferred play. It's a tactic that pushes the player to move through the game at a steady pace. Different players will engage at different depths - some might spend a lot of time hunting for every scrap in a given area, others might just hit the high notes. Either way, they are steadily lured into finishing this zone and moving into the next one.

It's possible to design a constructive open world, where your gameplay makes more gameplay. However, you would need a different mechanic to lure the player forwards, or they'll never get very far into your world. They'll just mine out all the play options in the first few areas and then get bored of your mechanics.

In short, if the player isn't lured into moving through your open world, it's not an open world.

Whether it's a linear game or an open world game, as we move through the game we discard levels behind us. In a linear game, those levels are simply gone. In an open world game we can physically return to those places, shrines dedicated to our past adventures, but they are no longer part of our path forward.


It's worth considering replay value. In the first play-through, players usually behave fairly predictably. This is definitely worthy of its own conversation, because 'predictably' doesn't mean 'exactly the same path through the game', but it does mean that you can typically use standard tricks and layouts to pull them into a few paths you consider to be ideal for new players.

For example, in Fallout 4 you aren't physically forced to get Preston and Sanctuary, but nearly all first-time players will. After that it appears to open up and tell you to go do anything you want, but the way the map and sidequests are laid out pushes you to find a few small farms to recruit and a few bandit hives to clear. In theory you can spend a lot of time farting around this open world, but in practice they limit your available play options so that you'll get a little bored of doing that and decide to start for the city. They city features a combination of physical funnels, golden paths, and meat walls to pressure you into finding Diamond City.

The design of this is "first run" open world design, and it's not too different from a linear game. But when we replay the game, we are more familiar with the world and take more advantage of the variations.

This isn't a proper "new game+" situation, because many people restart the game long before they've beaten it. For example, I've played the first five hours of Skyrim approximately 300 times, and I still haven't actually beaten the game. Trying new paths, or perfecting your abuse of paths your familiar with, or challenging yourself with a new constraint... these are powerful play elements!

What I'm leading up to is this:

The open world we strip mined? It doesn't stay stripped.

We return to the fresh, untrammeled world again and again, whenever we want.

To me, that is the truest power of an open world, and that is what I would like to focus on when building open world maps.

... maybe I'll talk about that for fifty hours some day soon.