Hello, God talking. At least, within a certain small sphere. Like a few of Team RPS, I’ve been writing for games as well as writing about them recently, most prominently as the writer of Daedalic Studio West’s The Long Journey Home [official site] – a space exploration RPG with roguelike elements (but not the crap ones). You know. A SERPGWRENCO. We’re now at the stage where my job is basically done, the universe is designed, the dialogue is all written, and I’m asking tramps on the street if I can borrow their whisky just so I can breathe heavily into the bag. There’s not much more fun than working on a game inspired by some of your favourites, notably Star Control 2. At the same time, well… oh dear, here comes that pesky hyperventilation again…
But I’m not here to market, but to talk tools. I know I’m always interested in seeing behind the scenes, so this week, I thought I’d pull back the curtain a little to talk not so much about what I’ve been working on, but what I’ve been working in.
Just as a quick intro though. The Long Journey Home is the story of a ragtag crew (four out of ten characters – your choice) shot to the other side of the galaxy as part of humanity’s first jump drive test. Your job is to get them home, through a procedurally generated universe full of hostile worlds and amusing aliens. There are stories and mysteries to uncover, but mostly the focus is on freedom, and giving you the kind of power that you’d have if you were actually in that situation. For instance, if you take on a FedEx quest, there’s nothing stopping you opening the box and stealing what was in it. Or agreeing to escort someone home, only to turn around and sell them to slavers instead. Each time you play, we want you to find different things and learn more about the races and how the universe ticks. On the flip-side though, much of what works in other RPGs had to be rethought and reworked around our specific ‘get home’ goal. Interesting quests? Yes, but respecting that forward momentum has to be key.
This actually proved pretty challenging, as every quest had to feel like something that a) was worth the crew’s time, despite their desperation to get back to Earth above all else and so not necessarily giving a shit if some planet comes down with Shivering Rot or whatever, b) something that the aliens would actually entrust these random visitors with, and c) something that was worth the player’s time to do. And of course, d) something that fit one of our core goals of bringing a bit more personality to space than players are used to. We really wanted this to feel like a living universe where you were experiencing an at once terrible and breathtaking situation along with your crew, and one you can believe is ticking along around you. For example, most of the time when you finish or fail an important quest, the original quest-giver will show up again in person to handle everything, rather than using some kind of galaxy-wide internet or just flashing up a FISSION MAILED message and moving on.
Spoiler alert. This means a lot of writing.
As Alec covered last week in his Supporter post, games are basically spreadsheets with controller support. If you want to write games, you have to be prepared to Excel. If it’s not Excel or Google Docs, then you’re probably going to be working with some proprietary tool that… well, imagine a car, only without luxuries like doors, a roof or seats. Luckily, this isn’t quite a universal rule, but… yeah. There’s a reason why most teams don’t release their internal tools to the public, and those that do wrap them in more warnings than a thin cardboard box containing fresh plutonium rods.
While bits of The Long Journey Home have meant spending a lot of time with Unreal tables (the worst of all things) and Google Docs, most of the hardcore writing has been in a surprisingly good, though initially slightly difficult to parse proprietary tool called LINCOS – a dialogue editor that we also use for locations and and encounters. The core file is a CSV spreadsheet, but LINCOS parses it and puts that information into a much more readable, easy to edit style, complete with built in flag-testing and other niceties. The result is that conversations look a little something like this:
This is just a tiny snippet of one of our races – the ‘charming’ Ilitza. Our conversation system is built on a few different key interactions, with the main one being assembling questions in bits based on objects and information that you’ve found. In this case, you’ll fly up to an Ilitza ship, they’ll probably insult you for having a terrible ship, and then you take over the conversation. ASK GOSSIP. PRAISE ILITZA. SHOW VALCORGRUE. That kind of thing. LINCOS was built around these non-linear conversations. If you know your programming, think of it as a glorified ‘switch’ command. With every line and interaction, it begins at the top and keeps going until it reaches the first appropriate response. And here’s where things get cool. With pre and post-conditions, we have a lot of power over what it finds and produces and how aliens react to, say, being asked about something they’ve already told you not to.
Pre-conditions are the instructions above each block. To use the top one as an example, it means “If we haven’t encountered this Race, and this member isn’t Fighting or Fleeing and the player isn’t Hostile, give this Greeting.” This triggers the Ilitza ship to introduce itself by name, making sure the player knows it. Underneath is the shorter Greeting you get if you’ve met, and are neutral (Wary). Later, there are other versions for Friend and Enemy. Obviously, there can be more than one thing in each pre-condition block, effectively hijacking a conversation. The bottom one is an example of this. It says “If the player has never heard of Jassikan’s Teeth (an extremely easy to understand gambling game), then when they ask for GOSSIP, tell them about it, and add it to their knowledge.” Once you’ve done that, ASK GOSSIP will then fall through to the next possibility, which might be another opportunity, like suggesting getting into Bounty Hunting, some galactic information, or just another rude comment.
Each NPC you meet is built with several of these files, chained together – typically PERSONALITY > CLASS > ROLE > RACE. As awesome as it would be for everyone to respond differently to literally everything, that’s how you get murdered in your sleep by translators and accountants. The compromise is that most members of a Race share a basic dictionary that handles the standard questions, like what they think of, say, the Glukkt – our trader race. However, each distinct Personality and Class get their own set of basics, with hopefully enough bolted on that it doesn’t feel like the universe is just five guys without so much as an over-rated burger to call their own.
More importantly, LINCOS is where we script enemy AI as well as raw dialogue – what happens if, for instance, you raise weapons on a character. Most races therefore have their Civil and Military script, which handles the basics of how fights play out, but with scope to bolt extra stuff on. For example, if you’re losing a fight with an Ilitza Slaver, they’ll often call to say that they’ll let you go… in exchange for one of your crew.
The really cool part of having a proprietary tool though is how it can be upgraded, and how every upgrade opens up new possibilities. At the start of development for instance, there were only pre- and post- conditions for controlling dialogue. Aliens would have to give you a mission by asking, and then it would be added to your Mission Log without any real say. Since that didn’t work, we added basic transactions. Now the alien can say something and you can reply YES or NO. Cool. But… couldn’t we have a bit more fun? Yep. And so once again the system was updated with ‘Transaction Labels’, which effectively reskin those Yes and No options for specifics. A few of my favourites, for which I’m not going to give any context, include FLUSH KING?, REMOVE MY SKIN? and RIDE THE WORM? In general, ‘yes’ is a good idea. Promise.
Of course, the LINCOS side of things is only part of it – albeit the part that I know best. The quest implementers on the team spend as much time in the Unreal editor, working on ferociously complicated Blueprints that handle the game logic of things. Here’s a quick snapshot of just part of a relatively simple treasure hunting quest…
Now, of course on top of all this there are plenty of other tools. Crew dialogue for instance is all in a monster Google Docs spreadsheet, with Notifications and Mission Briefings, the Artifacts you can find and crew comments on them held somewhere else entirely, all in one great big swirling maelstrom of words and lore. Personality in particular requires not just a lot of words, but lots of vectors and care and consideration.
One of the small touches I doubt anyone will notice, but which I’m proud of at least, is that you will never get a mission briefing that tells you to do something. Instead, it’s always phrased in some form like “We’ve been asked to-” or “We’ve heard about-” to reinforce that you’re in command and not just following orders. You’re not failing anything by not doing something. You’re just choosing not to do it. Big difference, even if the alien you’ve promised to help to might not see it that way.
Of course, whether it all works, I guess we’ll see in a couple of months. Until then… pass the brown paper bag. Much hyperventilating left to do before release.