Monday, August 28, 2017


I picked up My Zero Zero based on a very brief recommendation in one of the Life Is Strange fan communities. I'm glad that I didn't know much about it going in to the book, and the few things I'd heard were sufficient to sell me: that it had some similarities to the game, in particular the core relationship between the two leads.


I can definitely see quite a few parallels. For starters, both the game and the book tackle mental illness. Different forms of it (depression in LiS, bipolar disorder in MYZ), and it affects the characters and stories in different ways, but both do a great job of treating it seriously and humanizing the people suffering from the illness.

Some of the characters line up pretty cleanly as well. I didn't get much of a Max/Chloe vibe from Lauren, but I thought that Blake's dad seemed a lot like William. And Cyd really reminded me of Dana. Even if the individual characters didn't have clear parallels, the overall ethos felt very familiar: creative, artsy high-school-age girls navigating stressful relationships and their own futures. No supernatural time-travel here, but they don't really need it.

I did find the game rekindling my own memories of school, even more so than LiS. A small part of this was due to the setting, growing up in Minnesota... there isn't a whole lot of direct regional stuff, but the way characters talked definitely felt like how real (non-stereotypical) Minnesotans talk, down to details like saying "pop" (much of the Midwest says "soda", but Minnesotans are solidly poppers). And the dynamic of school/religious/family life and the odd intersections of it, while not a major part of this book, felt very familiar.

The transition from the outlying areas to the cities felt familiar as well. Duluth isn't a suburb, but also isn't densely urban. My family left Minnesota before I was old enough to spend much solo time in the Twin Cities, but I had similar experiences of urbanization: the sensation of being overwhelmed but also exhilarated was formative to my evolution from a suburbanite into an enthusiastic city-dweller. You have a very vague sense of "The Cities" when growing up, but can't really understand how day-to-day life feels there until you're living in it. Lauren is in the early stages of that transition, but you can see that the spark has been struck, and she clearly wants to spend the rest of her life living in the city.

I didn't particularly identify with any one of the characters, but I was really struck by a couple of elements of Blake. I had a hard time understanding her at first, in particular her obsession with infinities, where I had a hard time tracking what she was saying and what she meant. Then, after some reflection, I realized that the sensations she was describing felt exactly like how I felt about eternity when I was a kid: the sensation of drowning, of fear, of desire and hopelessness bound together. That's something I never really resolved, just kind of got used to ignoring, but re-reading Blake and Laurens' thoughts brought it back again, which was really cool. It also made me think about infinity and eternity in general... I've never really compared them before, but they're kind of the same concept, perhaps with infinity existing in the third dimension and eternity in the fourth. The idea of "orders of infinity" is fascinating as well, makes intuitive sense to me, and caused me to think about applying that concept to eternity.

I'll try to wrap up this thread of "Things In This Book Reminded Me Of Myself" with one last element, the collaborative story. I'd completely forgotten about it, but a similar project formed a major part of my junior high school years: an ongoing serialized comic that a few friends and I passed around, gradually developing a sprawling plot with its own mythology. We had similar senses of ownership over the characters in it, although in our case we also directly appeared in it as well. Like the version in this book, ours was a "Multiverse", and we explicitly shifted between various dimensions and realities as the story demanded. Anyways, seeing that pop up in the book made me wonder, how common is that sort of collaborative experience in school? I don't think I've seen another portrayal of it in fiction before, and I'd always thought of it as something unique and special that we did; but I also haven't ever really talked about it before, so maybe it's fairly common and just something that people discard / forget as juvenilia?


Uh, I really liked it! The central characters are vivid and compelling, the ancillary characters believable and interesting, and I felt super-engaged by the storyline. The actual writing is terrific as well. There are some really funny bits in there, terrific little phrases and observations and analogies. The story gets more serious as it continues, and the writing gracefully follows that arc, showing a lot of thoughtfulness and compassion for what the characters are going through.

It was really interesting to see a romance - heck, multiple romances - play out largely through the medium of instant messaging. I suppose that must be the norm now, but I don't think I've really encountered it in fiction before: I'm used to characters almost entirely advancing their relationship via meeting up in person and talking face-to-face, with perhaps the occasional 19th-century epistle for dramatic emphasis. Electronic communication really is significantly different, and I thought the book did a great job at capturing its unique rhythms and concerns. Seeing that someone is typing, and your stress level rising as you anticipate their reply. Seeing their status shift from "Online" to "Idle" and wondering what they're up to, trying to divine their physical situation from the terse digital status: did something come up? Are they avoiding the conversation? Digital communication is a form of connection, something we can draw solace and comfort from; but it's also something that's new, that we as a society haven't fully adapted to yet, and there are many other layers of uncertainty that get added when you remove non-verbal communication, facial cues, and the other elements that we're evolutionarily conditioned to use in navigating relationships. Anyways, I thought that Lauren's internal thought processes were really great at portraying how this type of connection does and does not work.


This book is a romance, and also seems like a coming-of-age story, but with an interesting set of concerns. Coming-of-age books are often about the protagonist trying to determine their identity, what kind of person they want to be. In some ways, Lauren's identity is fixed before the book has even started: she realized years ago that she is a lesbian, and never wavers in her determination to get a girlfriend. Other aspects of her identity are immutable, like her Jewishness: she isn't especially enthusiastic about that, but it's an undeniable part of her. She can choose how she wants to interpret and respond to that part of her heritage, but she can't just decide to not be Jewish any more.

And then there are the parts of her identity where she knows what she wants (or doesn't want), but that are in tension. Most of this is driven by her father: will she be a dutiful daughter and wife like he wants, or a high-powered successful person like he is, or a creative person like she wants to be? She has a clear preference here, but it is a choice, and one that's very painful no matter what she chooses.

Part of becoming an adult is choosing, but another part is recognizing: discovering what kind of person you are. This is the plot element that probably comes up the latest, but it's very compelling, as Lauren reflects on her actions and her relations, trying to figure herself out. Is she cold? Is she a bad girlfriend? Is she trustworthy? These questions have a lot to do with interpretation, of self-reflection. You can sense Lauren growing much more mature as she wrestles with these aspects of her identity.

The major event that sets off this introspection is her breakup with Sierra. I was really impressed by how that plot evolved. On the one hand, the deterioration of her relationship with Sierra feels really abrupt and surprising: it seems like stuff is going so well, then Lauren gets together with Blake, and all of a sudden their love curdles. But, looking back over it, I think the author did a great job at setting this up: there are tons of little clues and signs all along that Sierra is bad news, Lauren is just too giddy and smitten to pick up on them. Stuff like how she's completely oblivious about and uncurious about Lauren't Jewish faith and her not-quite-kosher diet, for example: that doesn't make much of an impression at first, it's something you can just chalk up to Sierra being slightly spacey, but in eventually fits into a significant pattern of her narcissism.

Even though I, as a reader, was completely on Lauren's side throughout the tribulation, I thought her self-flagellation was very understandable... she didn't deserve any of her treatment, but of course someone in that situation would question herself and look to her own shortcomings in trying to make sense of everything that had happened.

I'm really glad that stuff worked out! It's interesting that the passionate connection came so early, and the book ends with a stronger focus on intimacy and commitment. I feel slightly concerned in the big picture for the two of them - while Lauren's dad is wrong about most stuff, he's right that it's difficult to make it in the world under those circumstances. But in the small picture, I'm so happy for the two of them, and I think these two not-quite-perfect people are perfect for each other.


Yeah... good book! While I hadn't intended it this way, it's also kind of whetting my appetite for the new Life Is Strange expansion that drops on Thursday. Much like LiS, I can see myself continuing to mull over this book and root for its characters long after finishing.

Sunday, August 27, 2017

Test My Patience

Part nine in a weekly(🔨) devlog.

Standard development disclaimers apply. This is pre-pre-pre-Alpha content, everything is subject to change, features may not be present in the final version, there's a very strong chance none of this will ever be released, etc. etc.

There shouldn't be any plot spoilers in these posts, but there will be occasional discussions related to characters, locations, mechanics, and other aspects of my potential upcoming Shadowrun campaign (tentatively titled "CalFree in Chains"). You may wish to skip them if you'd like to be completely surprised.

I forget where I first heard this analogy, but working on a big project (like a video game) can seem like building a house. In particular, the view from the outside. If you live in a neighborhood where a new house is under construction, it will look like nothing's happening for months; then, apparently overnight, there's a big house sitting there; and then it seems like nothing else happens for many more months until it's finally sold.

House of Pies

The reality is that a consistent amount of work is being done on the house throughout the whole time, but most of it isn't visible to outside observers. You don't see the foundation being set, you don't see the plumbing going in, you don't see all the fixtures being installed. The framing is the part that looks like the house, but it's really just a small fraction of all the effort that goes into building the house.

In this analogy, I'm now starting work on the framing of my game: the walls are going up, and you can finally see something. Two weeks ago, there was no "game". Now, there is a "game": you can walk around and talk to people and fight monsters and solve puzzles and pick up items and all the stuff that feels like gameplay. Over the coming months, every minute I spend in front of the keyboard will be directly adding gameplay, and the project will seem like it's advancing relatively rapidly.

This is the most exhilarating phase of development, but it's also deceiving. The months and months of preparation that came before now (creating the plot, developing the characters, designing the missions, building maps, writing dialogue, and so on) didn't directly add a single minute of gameplay, but they're absolutely necessary for the stuff I'm doing now. Without that phase, development would be exponentially slower, and more importantly, the result would be far worse. And, on the back-end, the game might seem "done" once I've added all the characters and triggers to all of my scenes; but the game won't be fun (and might not even be beatable!) until I've tested and balanced the final result.

Each of these phases prepares the way for what follows. Pre-production improves the development phase. And, just as importantly, development sets the stage for testing. If I'm quick and sloppy while building, testing will be a nightmare and the final result will be buggy. But if I'm careful and diligent, it will go much more smoothly.

Why Test Now?

The time it takes to fix a bug is directly proportional to the time since you wrote the bug. If I test a trigger than I wrote five minutes ago, I'll instantly remember what I was trying to do, how I was trying to do it, what context the scene is unfolding in, what other possible interactions could occur, etc. I'll immediately notice the problem and be able to patch it quickly (and test the patch, of course!).

If I'm testing more than a day later, the process is slower. I'll probably notice the bug, but will need some more time to find the relevant bits of logic to tweak. And, if I've written a lot more triggers since then, there might be a cascading effect: the fix I put in now might break stuff that had previously been working.

If months have passed since I wrote the bug, then it may be very painful to resolve. I'll wonder "What was Chris thinking?!", spend time re-orienting myself to all the elements of a scene, and trying to think of all the potential side-effects of my change.

Bottom line: if I fix a bug immediately after writing it, it might be a 15-second fix. If I fix it a few days later, it could take five minutes. If I fix it after months, it might take an hour.

So, in the big scheme of things, it's much more efficient for me to test as I go along. This doesn't replace the testing at the end, of course - lots of issues are only apparent when going through the entire contiguous campaign. But the total time spent testing will be much less if I focus on it now.

Ugh, Do I Hafta?

Testing is boring and tedious and frustrating. Especially when you've hit your groove and are dashing off big blocks of the game, it's really tempting to just keep rolling. Experience has taught me that I'll be making future-me happier by testing today, so I try to make that as easy and painless as possible.

The naive way to test is to run through the scene: start at the beginning and go through to the end. When you encounter a bug, fix it. Keep doing this until there are no more bugs.

There are a bunch of issues with this:
  • You end up testing the first part of a scene a lot, and the end very little. It's very tempting to stop after your first successful pass and say "Yep, it's working!", even though you've tested the early bits a hundred times and the final bits once or twice.
  • It's very slow. Even if you run through at super-speed, you're retreating the same ground.
  • It's hard to test alternate routes: different etiquettes, previous actions, etc.

A Journey to Better Tests

When I was making Antumbra Saga, I would get around these problems by adjusting my scene prior to testing. A really simple example: moving the player actor spawner from the start of the map to the end of the map. That way, I can test the bit at the end without running through everything before it. Likewise, if I don't need to re-test an "open the door" quest, I can temporarily move the door out of the way. Once I'm satisfied with how everything works, I move it back to where it was initially.

This did save a lot of time, but caused problems of its own.
  • About 20% of the time, I'd forget to move stuff back to its proper place once I was done. This was especially true if I needed to hop over to another scene mid-testing, or was interrupted in the middle of a testing session.
  • Sometimes I'd move things back, but not to the right places.
  • By skipping over things, I wouldn't notice when things within those sections broke, since I was only jumping ahead to the end.
Starting in Antumbra 3: Corona, and continuing with The Caldecott Caper, I started working with debug triggers instead. Instead of me manually adjusting stuff in a scene just for testing, instead I would write a trigger to do the testing. This would look something like:
  • When the map starts:
    • Move PC0 to (region near the end of the map)
    • Delete prop "Fallen Boulder".
    • Add the item "Skeleton Key" to PC0.
    • Set Etiquette: Security of PC0 to 1.
    • Set the story variable "Ate a big sandwich" to "true".
    • Kill all actors with tag "isRoamingPatrol".
    • Set goal "Escape the scary corn maze" to "Started".
Now, by enabling this debug trigger, I can set my initial state and test that one section of the scene as much as I needed to.  If I want to change stuff around (like checking what happens without the etiquette), I can just modify the trigger. Once everything is done, I just uncheck the trigger, and everything's back to normal.

This approach worked great during development. In the two years since releasing Caldecott, though, I've come to realize that it could be better. In particular, since I just have a single debug trigger that I'm modifying, I still have the problem of needing to re-orient myself when I'm revisiting a scene much later. I might have done a lot of work initially to configure a particular scenario, only to lose it all when switching to test a simpler one.

Many Triggers

The solution is obvious in retrospect. Don't make a single "Debug" trigger; instead, make a bunch of different triggers for each major area of a scene. These can continue to exist separately, so as I iterate on a scene or jump back in to fix bugs, the previously-written tests will still be available.

The one part where I did this for Caldecott was the heist, and holy cow am I glad that I did. This was such a complex, intricate scene that I needed to test a ton and took a long time to run through, so I had a suite of tests: "Debug_MidCar", "Debug_MatrixPhase1", "Debug_Monsters", "Debug_Decouple", etc. Each trigger would update all of the in-scene variables, automatically fire the triggers that would have previously executed, and otherwise jump me ahead to the part I needed to focus on. I've had ample opportunities to pat past-Chris on the back for his foresight in keeping those triggers around.

Now, in CalFree in Chains, I'm doing all of this from the start. Each time I work on a major new section of a scene (a combat encounter, or a puzzle, or whatever), I create a unique debug trigger for it. I iterate on that trigger while testing, and once I'm done, I leave it in place and move on to the next trigger.

This is especially important because my scenes in CFiC are so much bigger than in Caldecott. I mentioned this briefly before, but I'm trying to emulate the Hong Kong design of having big single-scene missions rather than a series of smaller scenes that link together. There are game design advantages to this, but it does mean a lot more gameplay on a single map, so having the ability to jump ahead to later parts is crucial.

Just Show Me The Code

Here's a screenshot of one of the debug triggers for the opening scene.

Basically, this trigger is rewalking the path a player would have taken to reach this part of the scene. That involves adding some people to the party, physically moving them, running some other triggers,  updating scene variables, opening a door, and acquiring an item. That's a lot of stuff to remember, and if I need to test this section of the scene in the future (spoiler: I almost certainly will), then I'll be glad to have this all set up.

Better Building

One interesting thing I've noticed is that, for CFiC, I generally build scenes backwards: starting from the climactic boss battle at the end, making sure it works right, then setting up the puzzle that leads to the boss, then setting up the fight before the puzzle, and so on.

I'm not sure if that's actually any better than my traditional approach of starting at the beginning and writing to the end, but I think it does have some advantages. I'm sort of forced to think in terms of state rather than in terms of actions: carefully consider the composition of the game's variables and actors and goals at a moment in time and write from that baseline, rather than examining what the variables look like after a sequence has completed. It isn't unlike the shift from imperative to reactive programming that I've been making in my day job.

In other words: in the past, I would write a scene, then run through it progressively, checking in at spots along the way to see what things looked like. Now, I decide what things should look like, then build the scene to achieve that state.

The overall effect is that, behind the curtain, I'm able to think of the scene as a few big, concrete chunks of story, rather than as dozens of miniscule actions. Time will tell if that's actually any better, but my early sense is that it's helping to organize my triggers and my thoughts more logically, and may lead to a result that's more stable and more testable.

Sunday, August 20, 2017

How to Win Friends and Influence Companions

Part eight in a weekly(🤝) devlog.

Standard development disclaimers apply. This is pre-pre-pre-Alpha content, everything is subject to change, features may not be present in the final version, there's a very strong chance none of this will ever be released, etc. etc.

There shouldn't be any plot spoilers in these posts, but there will be occasional discussions related to characters, locations, mechanics, and other aspects of my potential upcoming Shadowrun campaign (tentatively titled "CalFree in Chains"). You may wish to skip them if you'd like to be completely surprised.

It feels like my game design philosophy is entirely driven by quippy phrases attributed to Sid Meier. One of the many I like is his formula for crafting a successful sequel: "1/3 old, 1/3 new, 1/3 improved". Breaking that down a little:
  • There are parts of the first game that you and your players love. Don't feel compelled to mess with them just because you're making a new game. Carry them forward. This gives your fans something concrete to hold onto, and maintains the sense of continuity.
  • Because this is a new game, try to experiment with some new and exciting things. This gives existing players something new to look forward to, may entice new players to try your game, and allows you to stretch your creative muscles.
  • Are there parts of the first game that had promise but could have been better? This is your chance! Take what you've learned from the first game and make that experience better.
This post is about one of my "1/3 improved" items: companion interactions. One of the features I added in The Caldecott Caper was a companion favor system. This was directly ripped off from the Dragon Age series, and like in those games, companions will react favorably or unfavorably to the words you speak and the decisions you make.

The Favor Problem

I had two main motivations for this system. I wanted to gently encourage players to pay more attention to their companions: once you get to know their personalities, values and goals, you can accurately predict how they will react to your actions. I also wanted to provide another avenue for roleplaying. Different players will find themselves liking or clashing with different characters, providing more opportunities to differentiate their player character and evolve their personal story.

I think the first motivation largely succeeded. The favor system in particular got a good response, even more so than romance among the initial wave of players (although that has since inverted). And a majority of the comments on The Caldecott Caper have mentioned how much they like the characters; I don't think that's entirely due to the favor system, but it doesn't seem to have hurt.

The second motivation has gotten more mixed results. In particular, a sizeable minority of players have felt compelled to increase their favor with companions, even reloading if a conversation goes "poorly". That's the opposite of what I wanted, and I had even taken some steps to try and avoid it - for example, informing players in-game that there aren't any mechanical advantages or disadvantages based on companion favor.

Mulling it over post-release, I came to think that players are naturally conditioned to want to increase numbers: whether those numbers are for karma, or nuyen, or attributes, or favor, whatever: higher numbers are always better, lower numbers are always worse. And, in a moment of self-reflection, I realized that this exactly paralleled my own experience in my first play-through of Dragon Age 2: even though the game was specifically designed to reward rivalries with companions, my "make everyone like me!" instincts led me to a frustrating and unsuccessful attempt to rein in Fenris. I can hardly blame my players for having the same reaction to my game as I did to DA2!


I turned once again to Dragon Age for inspiration: in particular, I've always really liked the "Hardening" system in Dragon Age: Origins. Unlike Approval, which is always good, Hardening is more of a role-playing decision: should Alistair be more ruthless and results-oriented, or remain the goofy, responsibility-shirking pal? Should Leliana continue to embrace the peace and love of the Maker, or return to her strengths as an assassin?

CalFree in Chains will use a new "Influence" system that's a hybrid of "Approval" and "Hardening". Like Approval, it's mechanically-oriented, with multiple opportunities throughout the game to affect each companion, making individual decisions that lead to an aggregate outcome. But like Hardening, it's more focused on your companion's outlook rather than on their opinion of you. Also like Hardening, there isn't a straightforward right or wrong path, relying more on the player's philosophy and/or their roleplaying decisions.

Each of your companions will have their own dilemma that they're facing and will try to resolve over the course of the campaign. For example, Kora has risen into a higher position of authority within the People's University, and is torn between the responsibilities of her new leadership role and the comfort she feels with her previous support role as a decker. You and Kora will touch directly on this subject multiple times during your conversations at the hub. Furthermore, she will look to you for inspiration, and will occasionally be influenced when she witnesses you embracing leadership or deferring to others.

Kora's final fate will ultimately be determined by which of these paths you have encouraged her to go down. And, because neither is inherently any better or worse than the other, I'm finally comfortable with tying some gameplay effects to this. I'm still working out the details, but I'm thinking that each companion will get one of two unique upgrade abilities based on how you have influenced them, similar to the unique companion upgrades after loyalty quests in Shadowrun Dragonfall (and I think Hong Kong?).


Mechanically, this system is nearly as simple as the Favor system. The difference is that, instead of a single global variable to track each companion, there are now two, one for each type of influence.

In the case of Kora, that means defining two story variables: Influence-Kora_Leadership and Influence-Kora_Support.

When creating story variables, it can be useful to include a prefix with a dash. When later selecting variables from a drop-down, the editor will automatically break all dashed tokens into separate submenus. So, doing this will group together all Influence- variables into a single submenu.

Influence can be shifted at many points throughout the game, but the sequence will always be the same:
  1. Send out an event indicating what type of influence has increased.
  2. Show an appropriate message based on what has occurred.
  3. Increment the corresponding story variable.
Let's look at some triggers!

Here's a simple one. When we get a "Kora Leadership" event, we increment the associated variable.

Now that this is in place, we can trigger an influence change from anything: another trigger, or a conversation, whatever. This makes it a lot easier and less bug-prone to port the behavior to additional scenes: instead of needing to manually wire up variable changes to dozens of different parts of the game, we just need to remember to send the right event name.

The "if" condition is important here. If you do something that would influence Kora, but she isn't actually around to observe it, then your decision doesn't have an impact on her. That makes sense to me, but is definitely something that other designers might feel differently about: if you think that Kora is likely to learn about what you've done, and if it makes as big an impact in the hearing as in the seeing, then perhaps she should still be influenced regardless.

Let's look at a more complex trigger now, one that shows an appropriate message for the player.

The corresponding trigger in The Caldecott Caper was simpler: you would just see "Gained Favor" or "Lost Favor" in response to your actions. Here, I'm communicating a bit more information. First, it's good to know what type of influence you're having. I've decided to convey this based on the color of the message, whether blue or red. Secondly, I want to communicate the impact of your influence. Here, you'll either see "Influence Increased" if you've further influenced Kora along the path she's currently on, or "Influence Shifted" if you're moving Kora onto another path. So, for example, if at first you are pushing Kora to leadership, you will see "Influence Increased" messages; if you later start pushing her to support, then you'll see "Influence Shifted", until the point where she has caught up to the leadership influence, at which point you'll resume seeing "Influence Increased".

You'll note the use of several "Const-" variables. This is useful when I want to use the same message in many different places. So, if I later decide that, instead of "Influence Shifted" I want to instead show "Changing Influence", I only need to change the string value in one place and it will automatically update the message throughout the entire game.

Also, you'll see that I never actually check to see whether Kora is present before running this trigger. That may seem odd but is totally OK: the trigger will run, but since the game won't find an actor tagged "isKora", it will just skip showing the message.


Here's a screenshot of my test case. Like a lot of my prototyping work, I iterated on this in a standalone "test" scene. This particular one just had one actor spawner to load and a handful of interactable objects; when I click on one, it sends out the influence event. Tiny test scenes like this are super-fast to load, which is important when I need to run a bunch of tests.

I haven't wired up the rewards yet, but I'm currently planning on finalizing influence via companion conversations at the hub. Once an NPC reaches a target Influence level, you'll unlock a new dialogue branch with them. Selecting this will cause them to reflect on the things they've learned from you, how they plan to apply that direction to their lives, and providing an in-universe explanation of the new ability (or whatever) that they have acquired. (Again, I haven't designed this yet, but it's possible that Kora's support track might culminate in her acquiring a new Matrix ability that she coded herself in the spare time that she's saved from attending strategy meetings; conversely, her leadership track might result in an inspirational ability that buffs other companions into being more effective on the battlefield.)

You can only get one influence-unlocked ability per companion. I'm planning on this being a first-past-the-post system: so, for example, if a companion needs 5 points to complete their track, then you'll get an ability once Kora's leadership reaches 5 or her support reaches 5. I think that I might still continue tracking influence changes even past the ability bestowal, though; so, even if Kora reaches her Leadership unlock first, she still might end the story narratively going down the Support-oriented future. That's all subject to change, though!

There are a couple of implications of this. First, you'll probably unlock abilities more quickly on companions who you usually bring with you on missions. That makes a ton of sense to me, both narratively and in terms of gameplay: they have more opportunities to learn from your example, and you're probably more interested in using them anyways. It avoids any single decision from being too disruptive: even if you generally want Kora to be a leader, undercutting her one single time won't torpedo her chances.

We'll see how this all turns out. I'm pretty happy with how things are looking and working in my tests so far, but I am a little concerned that it might be overly complicated or confusing for players. As a designer, I really like the cumulative effects of many tiny choices over a period of time; but there's a strong chance that players are more motivated by a single big choice at a dramatic time (similar to the Dragon Age hardening or Dragonfall loyalty quests). I'm reminded once again of yet another beloved Sid Meier quote: "There are games where the player is having fun, games where the designer is having fun, and games where the system is having fun." Hopefully I'm not being too clever for my own good, and making something that really is fun for players to engage with.

Sunday, August 13, 2017


Part seven in a weekly(📖) devlog.

Standard development disclaimers apply. This is pre-pre-pre-Alpha content, everything is subject to change, features may not be present in the final version, there's a very strong chance none of this will ever be released, etc. etc.

There shouldn't be any plot spoilers in these posts, but there will be occasional discussions related to characters, locations, mechanics, and other aspects of my potential upcoming Shadowrun campaign (tentatively titled "CalFree in Chains"). You may wish to skip them if you'd like to be completely surprised.

I chuckled a couple of weeks ago when this screenshot popped up on my twitter feed:

I remember running into that dialogue during my original playthrough of Dead Man's Switch back in 2013 and doing a double-take, then a triple-take. I'd assumed that it would have been patched by now, but apparently it's still alive, well, and astounding new players four years later.

I've definitely written dialogue that's at least as bad, but I'm also pretty sure that there isn't currently anything like that in Antumbra Saga or The Caldecott Caper. The secret? Proofreading, editing, and revising!


After I've written all my dialogue in Google Docs, I sit down and read it all back. It would be much better if I had another person to proofread and edit for me. My favorite studios like BioWare and Failbetter Games have small armies of editors, which is a big part of why their writing is so good: a professional outside perspective will be much better at identifying weak points and pushing a writer to become better.

Still, I think I do a decent job at self-proofreading. It helps that, because the writing itself takes me so long, by the time I circle back around to re-read it several months have passed, so the words feel fairly fresh to me. If I re-read a sentence immediately after writing it, I'll probably glide over any rough spots, but if I've waited a while, I'll see the problems with it.

Typically, the corrections I make during this phase have to do with spelling, grammar, and punctuation, fairly simple mechanical stuff. There's built-in spellchecking in Google Docs and (now) in the Shadowrun conversation editor, but they won't catch problems like homophones or misspellings that are also words ("through" for "though" or "throw", for example).

I'll also do some general tightening up of the writing. Since about 95% of my text is dialogue, I don't have all that much passive voice to begin with, but if I run across any I'll see if I can fix it. In general, things get better when they get shorter, so I'll try and snip out unnecessary transitions, redundant information, or other space-filling words.

Finally, I look at formatting. My natural inclination is to write one paragraph for each character's line, but in practice it can "read" better if it's split into multiple paragraphs, adding more emphasis and a sense of the character's voice. For example:

The only problem is, a bunch of pacifist deckers aren’t particularly well-equipped to lead that fight. We’re retraining and getting better, but in the meantime, we rely on professionals. That means shadowrunners. That means you.

That can be restructured to:

The only problem is, a bunch of pacifist deckers aren’t particularly well-equipped to lead that fight. We’re retraining and getting better, but in the meantime, we rely on professionals.

That means shadowrunners.

That means you.

Same content, but I think the second version is a bit more dramatic when displayed in the dialogue window. (Even more dramatic if you use a separate node for each line, but I think that would be overkill here.)


I typically do this at the same time as proofreading, but it's really a distinct activity. Proofreading focuses on the narrow technical aspects of the writing. Editing is a higher-level activity, looking at the overall flow of a conversation and the information it imparts. Proofreading problems are easily spotted and have straightforward solutions. Editing issues are more subjective and harder to quantify. Some examples of editing issues I address are:

Character voice

When I first start work on a story, I'll have a general idea of who a person is and how they "speak". Even without voice acting, there are a lot of tools at my disposal to differentiate major characters: How much they swear, under what circumstances they swear, how big their vocabulary is, how likely they are to use contractions, unique verbal tics, and so on.

For example, in The Caldecott Caper, Sable is very excited! He speaks with many exclamation points! He has a splendid vocabulary, astounding the varied intrepid personages surrounding himself. Persi swears frequently and speaks in dialect.

As I write, I'll get to "know" each character's voice better; as a result, when I circle back around and re-read the early part of a story, I'll often come to find that the voice has "drifted", so I'll try and update it to be more consistent. The biggest example of this kind of editing was probably with Dorbi in Antumbra Saga: in my first version, she "sounded" too much like Hailey, so I pushed her further and further to her extremes (megalomania, cheerfully violent), and then needed to update her voice to match.


Does this conversation make sense in the context of what the player is doing? A long meditation on the philosophy behind an organization's cause may make sense if you're chilling in your base between runs, but not so much if you're currently under fire.

Is this conversation fun to read? I try to avoid "lore dumps" where you're just clicking through pages of exposition. If a conversation is veering too far in that direction, I might try to break it up into multiple dialogues separated over time, or just cut out stuff that isn't germane to the plot. I also try to make it somewhat interactive, allowing the player to react to and comment on the knowledge they're receiving.


Much like character voices, the plot can shift and drift as I write it. So I may discover that I was foreshadowing stuff that was later cut from the plot, or am referring to an event that no longer occurs; or conversely, that characters aren't acknowledging a major new development that was added later.

This all gets more complicated due to the non-linear nature of game design. Sometimes I'll need to make dialogue changes, but other times I might need to make sure I have appropriate state flags and checks set up so it makes sense for the player's current situation. That might mean having two different versions of a conversation depending on when it occurs and what previous decisions the player has made.

This is also a good time to double-check that I'm within bounds on the official lore. I'm not too obsessive about this, but I know that some players are taken out of the story if it seems like I'm contradicting Shadowrun canon, so I try and complete my due diligence to make sure that I'm conforming. If I'm not, there are several ways I can respond. I can just cut the dialogue, or update it to be correct, or even lampshade it to acknowledge the problem in-universe.


I tend to think of proofreading as operating at the level of letters and words, and editing as operating at the level of sentences and paragraphs. Revision is a level above that, of looking at entire chains of conversations and thematic aspects of the story. Revision can happen before, during, or after the editing process as I discover major issues and work to address them.

Sometimes this is due to a technical problem that needs to be solved, similar to what I described in Editing. If a character mentions an event that no longer occurs, it's a simple edit to remove that reference. But if there's an entire quest built around that event, all related conversations need to be changed.

Personally, my biggest revisions tend to be more about items that I'm aesthetically unhappy with, due to the tone or subject matter of something I've written. I mentioned before about the major revision I did to the submarine quest in The Caldecott Caper, where I completely threw out the initial squicky storyline and made a new one from scratch. The original version was technically correct, but not something I wanted in my game.

I've hit a couple of decent-sized revisions so far in CalFree in Chains. One had to do with the chronology of the game. I had initially planned to start the game several months after a major political event, and wrote the opening scenes with the assumption that the player character was already familiar with the event and the fallout from it. However, I felt like the opening was too slow and not very engaging, so I ended up deciding to move up the timeline so the major political event is happening simultaneously with that opening scene. This adds a much greater urgency to the scene, and stronger motivations for all the characters in it, but also required rewriting a lot of the early dialogue to reflect the updated setting.

I also had a semi-comical experience a few weeks ago. I was watching a totally unrelated movie, and thought, "Ugh, I hate it when [bad thing] happens to [type of character]. That happens in WAY too many movies, TV shows, and video games." Then, a few days later, it suddenly occurred to me: "Wait a minute! [Bad thing] can happen to up to FOUR [type of character]s in CalFree in Chains! Aaaaagh!" Now, some of those events are contingent on decisions the player can make, so I'm not as concerned about those, but one of them in particular struck me in hindsight as gratuitous. Worse, I realized, I was doing it to make the character "darker," which is exactly the kind of thing that I complain about all the time on this blog! It's kind of mind-blowing that I would just unthinkingly echo a trope like that.

The good news, though, is that I caught it well in advance of the game going out, which is plenty of time to address it. I'd initially thought that I would need to rewrite an entire arc, but now that I'm reading back through it, I think it should be fine so long as I change the end of that story to give a happier ending.

Soliciting Corrections

I don't mean to imply that my campaigns shipped with perfect dialogue. I'd guesstimate that, on each pass through a section of text, I fix about 70-80% of the problems with it. The remaining items are largely things that my eyes just glide right over. I'm pretty happy with how things are when I release it, but there are still improvements to make.

I've actively requested feedback from my engaged players, making it clear that I want to hear about typos and other problems. I get the bulk of corrections in the first couple of weeks after release; a few more might trickle in later, but it seems like I succeed in eliminating technical errors (typos and such) early on. It might be tempting to rely on those early players as quasi-proofreaders and cut out the proofreading process, but I think that would be counterproductive. When people read something that is mostly correct and engaging, they'll notice the imperfections and assume that I'll want to know about them. But if there are a lot of problems, then they're less likely to take the effort of documenting dozens of typos, and may be skeptical that I'd bother correcting them if they did.

Speaking personally, at least, that's been true of me as a player. On the (very rare!) occasions where I spot a typo in Fallen London, I always email the developers about it: I've read roughly one million perfect words in that game, and know that they care deeply about that stuff. But I never bothered to send typo reports for Dead Man's Switch or Dragonfall: there were enough that I couldn't easily keep them in my head while playing, and I didn't want to interrupt my gameplay to write a long missive. I think there's a critical mass of nitpicky errors beyond which people just throw up their hands and don't bother reporting them. Getting below that critical mass prior to release helps ensure I get much more helpful feedback afterwards.


So, yeah. That's what I'm working on now! (And writing all this up makes me feel a little self-conscious, since I never proofread or edit this blog. I probably should, but, meh.) I've finished my initial revisions of the "Main Dialogue" and "Banter" documents, and am close to done with the "Crew Dialogue" one. Still more to go, but it feels like I'm making progress.

Update: Oh, I should probably include an actual example. Here's the current version of the Sacramento dialogue I shared in a previous post.

Plumber: Mmmmf. Hey, can you pass the mustard?
> How’s the food here?
P: Not bad! Then again, everything tastes great when you haven’t eaten in twenty-four hours. It’s impossible to find decent hot sauce around here lately, though.
> Are you on break?
P: You know it! I’ve been running around Sactown nonstop ever since the Free State fell and the Protectorate rose. Infrastructure has been a MESS since the invasion. Bullets and bombs punch holes in things, pipes are things, and so a fuck-ton of water started spraying buildings throughout the city.
Kora: This area doesn’t look too bad.
P: Saito’s engineers have repaired the crucial infrastructure in the green zone, but they don’t give two shits about people living in the rest of the city.
Isas: That unfortunate is. A sovereign his citizens should care for.
P: It’s a shame. The old government in Sactown also neglected the poor, and a lot of folks hoped that Saito would transform this place from a stinking shithole into a place worth living.
Valiri: Yeah, good luck with that.
(Once you’ve asked about what she does:)
> What sort of work do you do?
P: Plumbing, mostly. I’m doing my best to help repair the damaged buildings, but honestly, so far I’ve been busy just fixing the wealthy mansions. I feel kind of bad, but they’re the only ones with the credits to pay.
Arelia: At least you’re helping, in whatever way.
P: Outside of the core and the wealthy enclaves, though, the sprawl is royally screwed. Who knows if and when Saito will actually repair the destruction he caused, and not just reward his megacorp backers in San Francisco.
(After flooding:)
> {{CC}}Quickness: $(story.Global-Skillcheck_Hard){{/CC}} {{GM}}Swipe her plumbing supplies.{{/GM}}
PC0: Hey, look over there!
P: Where?!
{{GM}}While her back is turned, you steal her kit and toss it to your waiting companions. With any luck, she won’t notice the theft until you’ve finished here.{{/GM}}
> Never mind. I thought I spotted Maria Mercurial, but it was just a mirage.
P: Pretty nice mirage.
> Don’t you think that cloud looks like Dunkelzahn?
P: Maaaaybe. No such luck, though. The Big D is long gone.
> I thought I spotted a sucker getting robbed.
P: There are are a lot of those in the world today. Maybe Saito will do something about them.
(All return to root)
(After flooding:)
> Can I borrow your plumbing supplies?
P: You can’t be serious. I need these to work, and I need to work to live!
> {{CC}}Etiquette: Gang{{/CC}} Between you and me, I’m going to stick one to the Man. Strike a blow for the little people.
P: Heh heh heh. Yeah. That sounds fun! Hopefully I’ll get to hear about your exploits later.
> {{CC}}¥30{{/CC}} I’ll make it worth your while.
P: Hm, I COULD buy a lot of soy dogs with that… All right, fine. Just return the tools here whenever you’ve finished whatever kinky activities you have planned.
> Goodbye.

It isn't great, but better than the rough draft! Some of the lines have been tightened up, I added a bit more content (allowing the PC multiple lies during the theft), filled out the details on skillchecks and bribes.

I'm coming closer to the time when I'll be migrating that 500-ish pages of Google Docs into tens of thousands of nodes in the Shadowrun Editor, and cursing my existence and questioning my life choices... but that'll be another day, and another blog post.

Finally, a couple of tangentially-related videos that I want to mention but that don't merit their own post:

The Shadowrun community has been mostly enthusiastic about the trailer for the upcoming Netflix movie "Bright", and I can see why. While it doesn't seem to have actual cyberpunk in it, it totally feels like a Shadowrun entity, nailing a lot of the atmosphere and dynamics of the setting.

I'm withholding judgment for now. The "fairy lives" joke at the start gets a big Thumbs Down from me, but the rest of the trailer looks awesome.

I doubt that CalFree in Chains will be done this year, but if it was, December 22nd would be a good deadline to try and hit. If the movie is a success, I imagine it will spark a lot of new interest in Shadowrun-esque properties, and I think The Caldecott Caper and CalFree in Chains might be particularly relevant to the thematic issues they seem to be exploring.

Speaking of thematic issues, one of my favorite bands, Garbage, recently released an awesome video for their new song "No Horses". I'm absolutely mesmerized by it. I've probably watched this a dozen times, and have come to believe that it's sort of a CliffsNotes version of CalFree in Chains.

Sunday, August 06, 2017


Part six in a weekly(🚀) devlog.

Standard development disclaimers apply. This is pre-pre-pre-Alpha content, everything is subject to change, features may not be present in the final version, there's a very strong chance none of this will ever be released, etc. etc.

There shouldn't be any plot spoilers in these posts, but there will be occasional discussions related to characters, locations, mechanics, and other aspects of my potential upcoming Shadowrun campaign (tentatively titled "CalFree in Chains"). You may wish to skip them if you'd like to be completely surprised.

After way too many weeks of text, it's finally time for a pretty picture!

That's snipped from a larger work; you can see the whole thing over at Isbjorg's DeviantArt page.

I love this so much! The colors are so cool, I really dig the luminescent quality of the ambient lighting. The characters look fantastic as well, true to their in-game representations while enhancing them, adding wonderful complementary details. Best of all, it just feels like them, which is pretty amazing since up until now the characters have only lived inside my own head. Desorn's serene calmness and Valiri's eager curiosity shine through in here, perfectly capturing and building upon my conception of these two.

I've admired Isbjorg's work for years, and have commissioned her a few times over the years to draw some of my original characters from video games, as well as a few personal game-related projects. I'm in awe of people who can draw, and she is particularly great: not just her style, but since she has a particular interest in video game RPGs, I think she's especially adept at thinking in terms of characters and scenarios.

I was highly motivated to commission her again for this campaign. Not just because I like her work so much, but since she drew the cover art for my first two mods, I feel like the visual style of my "series" is linked to her art. I wanted to maintain that continuity in this latest entry, both for my own aesthetic pleasure and also so players of my previous installments would be able to quickly identify that this entry comes from the same source.

When I started thinking that I might actually finish this campaign, I began paying closer attention than usual to Isbjorg's status on DeviantArt. She is (understandably!) in higher demand now than in years before. She can go for many months between availability for commissions, and when she does open them up, they tend to fill very quickly.

After a couple of months, I saw a journal update from her hinting that she might be available in the near future. By that point I'd developed a better understanding of these characters and had an idea about the scene to depict, so I did some legwork for the upcoming operation: drafting up the commission and collecting references so I could jump on the opportunity as soon as she lifted the gate.

Isbjorg has a standard format that she prefers using for drawing requests, which I think works really well: it collects a good amount of information without encouraging extraneous details ("My character is very sad that his father was slain by the Dark Lord when he was 17 years old!"), and also helps minimize any potential problems with a language barrier. Since I've commissioned her a few times before, I felt fairly confident in structuring the request.

Here is the note that I sent her:

Hi Isbjorg,

I would like to order another commission from you. I really enjoyed the two Shadowrun pictures you drew for me(… and…). The new one will be the last entry for a series of free games I’ve been making.

This will be a half-body picture with two characters and a background. These characters are both teammates of the main player character, and are not romantically involved with each other.

Character 1
Name: Valiri
Age: About 25
Race: Elf
Gender: Female
Alignment: Chaotic Good
Class: Shaman (Specializes in spirit magic)
Hair color: Black
Hairstyle: Cornrows or loose. (Reference shows her in-game portrait, feel free to modify.)
Eye color: Orange / Red
Skin color: Olive
Body type: Slender
Clothes: High-tech lightweight armor. (Several different references provided for inspiration, feel free to modify.)

Character 2
Name: Desorn
Age: About 30
Race: Elf
Gender: Male
Alignment: Lawful Neutral
Class: Monk (Fights with fists)
Hair color: Dark brown.
Hairstyle: Long, straight, and loose
Eye color: Violet
Skin color: Light-skinned
Body type: Slender
Clothes: Green duster coat over a white shirt.

[REDACTED]. (The story is that they’re [REDACTED].)

Here is a link to an imgur album with the characters’ in-game avatars and other references. This game has low-resolution character models that aren’t very detailed, and don’t exactly match their portraits, so you can make changes as you like.

Please let me know if you have any questions or would like any more information. Thank you in advance!

She hasn't personally played Shadowrun but is very knowledgeable about D&D, so I tend to map concepts into those terms. For example, Desorn is a physical adept archetype, which translates pretty well to a D&D monk.

You can click through the imgur link above to see the references I sent her. I've found that references are invaluable, in any kind of commission. I'm not particularly good at gathering them but I've gotten much better over the years. I've found that I get the best results when I'm specific about a few particular things, but not try to dictate the overall composition of the image. I'll provide a cluster of related images to try and convey the sort of thing I'm thinking about, giving the artist a lot of latitude in selecting among them or creating something new that fits within that conceptual space. Artists are much more creative than me, and have a much better overall aesthetic, so I like to find people I trust and then give them as much leeway as possible. I'm always pleased with the results!

Anyways: she replied with a clarifying question about the pose I had in mind; I identified several pictures in her gallery that showed poses which would work and sent them back to her. The fee for this drawing came to 78 euros, which was a bit under USD$90 with currency conversion. I paid via PayPal and she reserved my slot. Even though I had jumped on the commission very soon after it became available, several other people had already beaten me to it, and Isbjorg closed commissions shortly after accepting mine. So, I was really glad that I moved so quickly on it! They will probably open once more before I finish making this campaign, but maybe not more than once. As it was, there was a wait of almost exactly one month between putting in the order and receiving the finished work. The time can vary a lot, even with the same artist; I think I've gotten some in as little as one week, and others have taken multiple months. Again, good to get this done early.

It's nice to know that this part of the process is complete, and honestly it is also serving as really helpful inspiration: in mood and character, and also as a sort of sunk cost that's motivating me to bring along the rest of the work. It's increasingly likely that I'll finish the campaign in one form or another, and even if I don't, I'll have gotten this really beautiful picture out of it!