Sunday, October 29, 2017

Side Quests

Part eighteen in a weekly(🚨) devlog.

Standard development disclaimers apply. This is pre-pre-Alpha content, everything is subject to change, features may not be present in the final version, there's a 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've plunged into hub development. This is a massive undertaking. The immediate goal is to transcribe about 150 pages of Google Docs into dozens of elaborate branching conversations. Just the copy-pasting alone is time-consuming, and on top of that I'm carefully setting up pre-requisites, actions, animations, and other stuff. And there are all the hub missions things as well, little mini-quests that you can advance within the hub. These are somewhat similar to the quests you accomplish on missions, but more complex, since the player will return to the hub over and over again throughout the game, and I need to maintain their current status for long-running goals.

This post will focus on these sorts of side-quests. This one will be more about the high-level design and philosophical goals; a later post may or may not get into the actual implementation.

What Is A Quest?

So, to start, let's define things. In my games, a side-quest is an optional mission that spans multiple scenes of the game. In the most common form, an ally in the hub will make a request of you; you will fulfill that request in the course of your required mission work; and you will later return to the ally for a reward.

I love sidequests. They are some of the "cheapest" content I can create, in terms of marginal development time. I don't need to create new maps for them, and can usually make use of existing NPCs as well. Also, since they're not required, I feel I have more latitude in how I design them. They may be unusual tonally - often they're more whimsical than the main plot. And I can make them unusually tricky or difficult, since players won't incur a penalty by failing to complete them.

I've been making these ever since Eclipse, when I had an ongoing quest line involving your player recording a music demo track for Kali. They have expanded over time, and players seem to enjoy them; one particular sidequest in Caldecott, which includes a scene where you need to recruit a QA tester for a video game you're creating, has been shared more than any other event in The Caldecott Caper.

That said, while players generally enjoy them, I have identified some issues with them that I wanted to fix in CFiC, as part of my "1/3 improved" initiative.


One recurring source of frustration has been the possibility of starting a quest that you do not finish. For example: in Corona, you could get a quest from The People's University that required taking a Sleaze program from the Native Californians (a human-supremacist organization). You could do this by taking a decker along during the Redding/Native Californian mission. However, a decker is not required on this mission. If you didn't bring one, then you'd have missed your one chance at acquiring the Sleaze, and could never finish the PU quest.

In the short term, I mitigated this by just hiding the quest if the player missed this step, so it wouldn't remain in their quest log forever. It's still annoying, though, and I'd get periodic questions from players wondering if the quest was broken.

In CFiC, I'm addressing this in a couple of ways. Some of the sidequests still can be fulfilled on-mission. However, these now have backups back at the hub. Details vary, but in general, if you fail to accomplish a goal while in a mission, you can still pay e.g. ¥500 back at the hub to advance the quest. (In Corona, this could have been explained as hiring another decker as a shadowrunner to finish the job for you.) This is still a choice for the player, and it's totally valid for them to save the nuyen and skip out on the quest; but, importantly, it's a choice for them, and not something they've just missed and failed.

In some other cases, I'm making quests more modular. Typically, a quest would require doing something like four separate tasks, and then getting a reward (karma and/or a large nuyen payout) once they are all complete. In CFiC, though, at least one quest will be an ongoing optional mission of yours with a modest reward for each milestone. You might miss one or more of the opportunities, but this won't end the entire quest, just a proportional fraction of the total reward.

Finally, at least one of the quests takes place entirely within the hub, which eliminates on-mission work altogether. Stages of the quest are gated by your progress through the game, so you can't finish everything at once; players will typically chip away at it a little every mission or two until it's complete.

Everything Is Connected

I've been taking a little more advantage of narrative cohesion in CFiC. That diminishes the whimsical dimension of the sidequests, which I do sort of miss, but I think it adds to the impact of the side-quests. The actions you take in the side-quests reinforce themes of the main story, and the themes of the main story lend additional weight and significance to your actions in the side-quests.

That was indirectly related to the brainstorm I mentioned in my post two weeks ago: I realized that some of the sidequests could be integrated into the climax of the game, which both elevated the climax (since it becomes an even-more-explicit culmination of your actions up to this point) and the sidequests (retroactively lending them more importance).

Interlocking systems: They're great!

Monday, October 23, 2017

Communal Life

I realized that I've mentioned in passing a couple of times about how much I appreciate the Life Is Strange community, but haven't gone into any particular detail on it. So, just a little post about the corners of the internet that are most meaningful to me.

My main hub is probably the /r/lifeisstrange subreddit. I haven't really talked much about Reddit on this blog... as a whole, it is a mass of swirling hate and villainy that has caused incalculable harm to many peoples' lives, and the internet would be a far better place tomorrow if it disappeared today. But, paradoxically, it's also home to some of the best game communities I've ever found, largely avoiding the toxicity that poisons lots of other forums. The Life Is Strange subreddit in particular is fantastically moderated, with wonderful spirit and discussion and support and fan creations. As a commentator recently observed, "When people finish Life Is Strange, they come here to say 'I need to talk about my feelings!', rather than every other game where people come to say 'I need to talk about my opinions!'". It's sort of a combination group therapy and geeky celebration of this thing we all love.

Shout-out as well to /r/Pricefield, which focuses more on fuzzy feelings.

I'm not on tumblr or instagram, but those are fantastic repositories of original content; I usually find my way to particular content there via Reddit or Twitter. Some of the best tumblr artists for the original LiS have moved on to other fandoms and aren't making new content for Before The Storm, but their original images are still there and wonderful. And I'm sure that, over time, fans fresh to BtS will come and produce as well. Instagram is a great venue for short content directly from the various creatives involved in the project, especially the voice actors.

I have a kind of haphazard twitter list. I generally prefer to follow people who don't tweet very often, so this is kind of a function of quality and reticence.
@LifeIsStrange: Official account, I believe it's run by Square Enix. Great for details about releases, but also periodically highlights fan content, as well as general good social-media stuff like occasional polls, discussion threads, etc. Mostly focused on BtS at the moment, but keeps the flame of LiS alive as well.
@HannahTelle: Max's voice actress from the original series, she's still very plugged into the LiS community and also involved in some great solo music projects.
@rdornotfloral: Rhianna DeVires, the voice actress of young Chloe in Before The Storm. She occasionally shares some fun behind-the-scenes looks at mocap, voice acting, and other production thingies.
@Kylie_Anne14: Kylie Brown, the voice actress for Rachel Amber. She's really into the fandom! Great engagement, I love how she proactively ships amberprice.
@DeckNine_Cara: Cara Bernard, an artist at Deck Nine Games. Really great art, both her own and highlighting good LiS fanart.
@DONTNOD_ENT:  The developers of the original LiS, who have been sweet and supportive of BtS. No real chatter from them yet on Season 2, but I'm sure it's coming! In the meantime, they continue to periodically highlight fan works related to the first season.

All of the above are good at avoiding spoilers, but keep in mind that Twitter will sometimes insert liked tweets into the feed (STOP DOING THAT TWITTER), so I unfollow and refollow around the time of each release until I have a chance to play.

A lot of the above have Facebook presences as well, but they seem to be a subset of the Twitter content so it doesn't make much sense to follow in both places. One exception is Priceless Cosplay, who are probably my favorite LiS cosplayers. Priceless just covers their specific LiS cosplays, although both are individually active in other projects as well; Facebook seems to get the most attention from them, with some content later appearing on YouTube as an afterthought.

I've never been a Let's Play person - my attitude has generally been, "Why would I want to watch someone play a game when I could just play it myself?" I saw the appeal for competitive multiplayer games, where you could maybe see talented players' techniques and strategies, but not so much single-player games. Well, Life Is Strange has semi-converted me. For this series in particular, it's so much fun to watch players' reactions to the major events in the game, so the player is at least at much a part of the show.

Furthermore, it's cool to see all the different ways the game can change when players make different choices from myself. I'm finding that to be even more true for Before The Storm - the game feels a lot more reactive, in a lot of small ways, and also more complex overall. The first season tended to have fairly straightforward "A causes B" interactions, which you couldn't really anticipate but are obvious in retrospect. BtS seems to be using something closer to a point system, where the cumulative actions you take can lead to a different outcome, with no one decision being necessary but each of them being important.

All that being said, here are the streams I've most enjoyed for Before The Storm, listed in the order in which I watched them.

Eurogamer: This is true of all of the following, but these people are fans of the franchise and very invested in these characters' lives and happiness. They're a bit quicker at playing than the others and don't stop to read all the journal entries or explore every nook and cranny, but it also isn't a speedrun, and they do poke around a bit. I really like their running commentary; they generally avoid talking over the game, their observations tend to be funny and/or poignant, and they have great responses to the big moments of the game.

Strange Rebel Gaming: She's probably the quietest player on this list, with the least commentary, but she's still super-invested in the game. Once she gets to a good point, she'll usually stop and share her thinking about what's going on and her reasoning behind the choices she's making, and she's very thoughtful about what she's doing. She was especially interested in Rachel's theater work in Episode 1, and related that to her own experiences as an actress (in high school and beyond), so I am really looking forward to her take on Episode 2!

Pandorya. This one is kind of unusual: she's a German-language commentator, and I don't speak German! But I love these videos, they're some of my favorites. The game audio is still in English (with German subtitles), and there are enough cognates and proper nouns that I can vaguely track her commentary. It's really cool to see how various things are translated; a lot of swears turn into Scheiße, but there are also some aspects that seem to be adapting American idioms into other forms. One of my favorite bits was seeing the translation of Chloe's sabotaging of Victoria's homework: the original joke doesn't work in German, and I don't completely follow the one that replaces it, but judging from her delighted laughter it really works. Pandorya is the most careful and methodical player I've seen yet. She gets how these games work, and diligently explores every square inch (or, in her case, centimeter) of the map before advancing to the next scene. And, again this is true of everyone, but she clearly loves these characters and has genuine reactions to what happens to them. When she says "Oh, Chloe!" she means it.

There are a few other Let's Plays that I've seen and enjoyed. Geek Remix has a ton of discussion and commentary, both in the main playthrough and supplemental theory videos; unfortunately, they had to cut out the music for those, which really diminishes the impact of some scenes like the junkyard.

I didn't watch many Let's Plays for the original series, but I absolutely loved BirdyBoots'.  She had a fantastic presence and was completely engrossed in the story. As a nice bonus, she ended up picking almost all the opposite decisions from me, and it was great to see what a tragic playthrough looks like without directly incurring the guilt myself.

A few relevant YouTube channels I subscribe to:
Hannah Telle. She rarely uploads, but the stuff she shares is wonderful, mainly solo musical performances.
HAWP. Not directly related to Life Is Strange, but features Ashly Burch, the original voice of Chloe Price, and are some of the funniest videos I've ever seen.
Katy Bentz. The voice actress for Steph Gingrich. Like Kylie Brown, she is also really plugged into the fan community and has some great short videos, both about LiS and her own experiences in LA.

I'm not on Twitch much, but I need to shout out dayebraham_lincoln for having the best channel name ever. This is Dayeanne Hutton, who voiced Kate Marsh in the original series. She streams a variety of games, and has also done great cosplays of her own.

Hm, I think those are the highlights! Lots of good people and lots of love in this community. I think a big part of that is a result of the game itself, which is so focused on empathy, so it tends to attract fans who think about who's on the other side of the keyboard and the impact (positive and negative) words can have. Things are especially busy right now while we're in the middle of BtS, but given what I've seen in the year leading up to it, good vibes will continue for quite a while.

Sunday, October 22, 2017

Arf! Arf!

Part seventeen in a weekly (💬) devlog.

Standard development disclaimers apply. This is 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.  

Milestone passed! I wrapped up work on the climax, hurrah, which means I've finished a rough first pass at all the scenes in the game, double-hurrah.

What that means and does not mean:
  • All planned combat encounters have been implemented. Tuning still remains.
  • All unique puzzles and dialogues within missions have been implemented.
  • The finale (post-climax wrap-up) still remains.
  • The hub (your home base) remains and will be huge.
  • Non-unique puzzles and dialogues still remain.
I'm now starting on that last bullet, the stuff that can occur across multiple maps. I've learned from prior experience that it's best to do all of these at once instead of doing it for each scene as I come to it: otherwise, I end up forgetting to do them for some scenes, losing track of which ones are done and which aren't, catching bugs late in development and then needing to update a bunch of other stuff, and other annoyances. Instead, it's best to do it once in a test scene, make sure it's working, and then set up for every scene in the game, specifically testing the integration.

The specific features that I'm working on now are barks and banters. Let's look at them in a bit more detail.

Bark Bark

A "bark is a short phrase that a character utters during the course of gameplay, usually in response to some action or event. Examples include "Nice hit!" and "Ouch!" They're a staple of party-based RPGs, and I've been doing them since the very first Antumbra episode.

For the most part, making a campaign is very time-consuming, but not especially hard. I decide what thing to do, and then I carefully do the thing, then I test the thing, then I move on to the next thing, and repeat until the game is done. Barks are one of the only features of my campaign that actually involve some cleverness on my part.

The goal here is to randomly fire off a phrase, unique to the character, when they defeat an enemy NPC. I start by defining all of the available phrases. Shadowrun doesn't have support for arrays, but I'll accomplish something similar by appending integers to well-defined strings, forming a DIY lookup table.

Next, I set up the trigger.

Let's break this down, piece by piece.
  • This is set to "Retain", so the same character can bark multiple times on a map. If I wanted to limit to a maximum of one bark, I could un-check this. That's what I do for some other types of barks, like downed ones, because it's annoying to hear characters constantly complain.
  • Per the "When" clause, the "Triggering Actor" is the one doing the killing, and the "Triggering Target Actor" is the one being killed.
  • Check the tag for the killing actor. Tags are very common and important for a lot of my crew-related triggers like this one. Here, I'm checking to see if Valiri is the one doing the killing. Because I'm checking the tag, I'll find a match even if she's added through the hiring interface.
  • I don't want to bark every time, so I flip a virtual N-sided die, and only bark if it comes up with a 1.
  • Note that I'm using a "Const" variable here for the number of sides on the die. During testing, I can set this to 1 and it will fire every time Valiri kills someone. When the game is released, I'll change it to something like 4, so she'll bark 25% of the time. This is very important, since I can just update it in one place and not need to modify a ton of existing triggers.
  • Next, I roll another 10-sided die to pick the number of the bark. Note that this matches the number of barks I defined in global variables above.
  • I use text expansion to substitute the bark text. Note that I'm actually using a nested substitution here: if I roll a 3, then this will become $(story.Bark-LongText_Valiri_3), which in turn will become "You're no match for me!".
  • This shows in a speech bubble over the killer. While testing, I noticed that the text would sometimes overflow the speech bubble. My theory is that this is because the game assigns a width to the speech bubble based on the length of the un-expanded string defined in the trigger, and not the substituted string that is eventually inserted. I worked around this by changing the variable name from Bark-Valiri_N to Bark-LongText_Valiri_N, which makes it long enough to show.

I follow a similar process for other types of barks, such as crew reactions when they are downed and dying.

Once I got it working, I adapted it for the other crew members, tested them, and then copy-pasted them to all combat scenes in the game. There's no such thing as a "global trigger" in Shadowrun, but if you set up your triggers so they don't rely on scene-specific elements, then it's trivial to copy them throughout the game and be confident that they will work (though testing is still always a good idea).


Banters are in-scene conversations between crew members. These are also fairly common in party-based RPGs, particularly the BioWare ones that I love so much. I've been doing versions of these as well ever since the Antumbra days, although mine got more sophisticated in Caldecott.

First, create the dialogue.

This particular conversation exclusively occurs between two crewmates, without any intervention from you. Other banters might include dialogue responses from the player character, or a third crew member might jump in. They're designed to be fairly generic, so they make sense regardless of which particular scene it ends up firing on.

Note that each line is spoken by a TAG'd character, set to the crew member's tag. Again, this is important since crew members will usually (not always) be loaded by player spawners through the hiring interface, so we can't directly assign an actor to the line.

Unlike barks, which can repeat multiple times, a player should see each banter no more than once over the course of a game. To ensure this, we create global variables that will track which banters the player has previously seen.

These start as "false", we'll flip each to "true" once they've been seen.

Trigger time! I follow the "tripwire" design of banters, similar to what's used in Dragon Age: Origins. When your player crosses an invisible line in the map, we check for available banters and display one of them if available. That process starts like this:

  • Most banters would be inappropriate in the middle of a firefight, so I only trigger them if you're in peaceful freemove mode.
  • The player character needs to trigger it. Otherwise it might fire when an NPC (like a patrolling soldier or wandering civilian) crosses the threshold. Not necessarily a problem, but it's simpler to test and verify this way.
  • Depending on the map, I might wait until you have collected a certain item or started/finished a certain quest. That helps this feel more dynamic, and less like "Oh, I passed an invisible tripwire."
  • Similarly, for this specific banter, the "Wait until triggered again" means that this won't fire until the second time a player crosses this line - again, that helps it feel more natural/random/dynamic.
  • Finally, I run a banter trigger. This works somewhat similarly to the bark trigger above. Here, I'm dynamically building the name of the trigger to run, which will vary from BanterA1 to BanterA7.
Speaking of which, let's look at one of those triggers.

  • Note that there is no "When" clause. This will only be invoked from the tripwire banter trigger above.
  • Check to make sure I haven't already shown this banter during the game.
  • Check if both of the participants in this banter are present. In Caldecott, I did this by checking if the actor was in the region, but that was a bit tedious since I would need to update the region for every scene. Now, I just check to see whether the actor is alive, which lets me copy-paste this with no edits.
  • If this banter is valid to be shown, I flip the boolean so it isn't shown again, and then start the dialogue.
  • In this particular case, since there aren't any PC0 lines, I directly start the dialogue between the two crew members, which allows me to have them face each other. In other cases, I would instead start the dialogue with the first speaker in the banter.
  • If this banter is NOT valid, then we run the next banter trigger. This will repeat the same steps for the next banter, run the following trigger if it is not valid, and so on and so forth.
  • Eventually, either a valid banter is found (in which case the chain stops); or we exhaust all of the banter triggers. Because "Retain this Trigger after firing" is not checked, eventually we'll run Banter A7, which says "Run BanterA1"; but Banter A1 will be inactive and unretained, and so that will break the loop.
I've mentioned before that one of my design changes from Caldecott to CFiC has been to do most of my missions in single scenes. One side-effect of this is that I now want to be able to fire multiple banters (specifically two) in a single scene. The best way I've found to do that is to just create separate "A" and "B" lines of banters, each with their own separate tripwire. Both rely on the same dialogues and global variables, but use separate triggers, so they can fire independently without interfering with one another.

As with barks, I set this all up in a test map, ran a ton of tests (selectively loading other crew members and toggling the "Bantered" booleans on and off) until I was satisfied, then copied to all other scenes. There are a lot of triggers involved, but they're fairly simple, and I don't expect that I'll need to update them. (Though I will not in passing that, unlike in Caldecott, I do have separate "sets" of banters this time around separated by acts, which lets me write banters that assume certain events have or have not occurred. Which is to say, there are more than 7 possible banters, it's just that this particular scene only has 7 banters available.)

And that's that! This is all coming together very nicely and smoothly, mostly because my process is very close to what I did on Caldecott and I've already invested the necessary time into conceptualizing and debugging this kind of design.

Prospective Tempest

I just finished the second episode of Life Is Strange: Before the Storm, "Brave New World".

It. Is. SO GOOD.

The series continues to focus on its emotional dimension, to its benefit. My heart grew so full during one particular scene. I'm so happy that we have this story and these characters.

I think my post on the first episode was probably overly focused on the technical aspects of the game. I'll give that a pass this time, except to note that, now that more music tracks have been added, I'm starting to see the point of the "Mixtape Mode" deluxe feature. I'd probably use it if I was playing on a console in my living room, I could see leaving it on while doing stuff. On my PC, it makes less sense, and will probably remain a novelty.

Now, let's get into some


It's been pretty disconcerting to see the ongoing wildfires on the West Coast since the first episode came out. I'm sure this game was in production for long before this fire season started, but, man, that has been some freaky marketing. As I blogged before, the Bay Area has been suffering from massive fires in the North Bay, and seeing the smoke rise from the in-game hills was absolutely chilling. I think my reaction to, say, the marshmallow conversation was quite a bit different than it would have been in another year when I hadn't been breathing smoke for a week or two.

I enjoy backtalk, but I think it's becoming increasingly clear that starting a backtalk is always the worst option in a situation, even if you win it. They're fun, though, so I almost always do them anyways. It might seem odd to have a challenging thing lead to a worse outcome, but I actually love that kind of game design - it reminds me of Failbetter Games. My streak here continued. I think I lost one point in a backtalk with Wells, and another with Frank, but still won the overall contests. The one with Skip was awesome. I passed on the last opportunity to backtalk in this episode, though I may try it if I replay.

Speaking of which: I did end up replaying the first episode before this one, but didn't make any major changes to the canon: I stole the money and gave it to Joyce, and was a bit nosier in poking around, but that's pretty much it. In the replay I wore the Illuminati shirt instead of my earlier Punk Doe; I'd been planning on going back to Punk Doe for this one, and was delighted to see that there are an entirely new set of non-Deluxe outfits available. I ended up rocking a jacket. It looks cool, but more importantly, it's Rachel's, and that's... just so awesome.

It's awesome to see Chloe sort of growing and changing in some ways as a result of her time with Rachel, but it's also great to see her still being very much herself. There were a whole bunch of literal laugh-out-loud moments throughout this episode, often a direct response to Chloe's words or actions. Her going ham on the bathroom was so great.


Pompidou is so cute!

So, one thing about BTS is that... I'm not really sure what the story is? Even though we're now 2/3 of the way through the game (sob), I don't know what the main plot or motivation is. Is it about how dangerous Damon is? It feels like they're setting stuff up, but Chloe seems to have only tenuous and vague connections to the various players, and doesn't have a strong personal interest in most of it. She's an observer and reactor, not an active agent in chasing down what's going on.

Which is weird, since it's the opposite of the first season. Character-wise, Max tends to be much more withdrawn and quiet and observant than Chloe; but game-wise, by the end of the first episode, Max had a clear set of goals: solve the mystery of Rachel Amber and prevent a tornado from destroying the town. Chloe's character is much more brash and direct and outspoken, but unlike Max, she's mostly wandering around, passively listening to the things people tell her.

That probably sounds like a complaint, but it's really an observation. The fact that this doesn't feel like a detective story or a thriller means that it ends up being mostly a love story, and I am 100% okay with that. Almost by default, the main story ends up being the budding relationship between Rachel and Chloe. And that's really what people loved about the first Life Is Strange: the plot and the rewind mechanic were cool, but we're so devoted to it because of the amazing characters and their relationships.

And, on a more practical note, they can't do anything too crazy here or it would seem weird that Chloe never brought it up in the main series. I mean, everything that's happened so far fits comfortably under the rubric of "Arcadia Bay sucks, Rachel and I wanted to run away." If they brought in, I dunno, space aliens or immortal Prescotts or a manifesting Topanga, then Chloe would have at least mentioned it in passing in the discussions about how boring her town is.

That actually relates to another thing I've been thinking about. As I mentioned way back in my initial post on Life Is Strange, I kind of suspected that Rachel Amber might have had rewind powers as well, as it would explain her preternatural ability to fit in with all the various cliques of Blackwell. The first episode of Beyond the Storm seems to subtly reinforce this theory, as in the "two truths and a lie" game on the train: even if you do something unusual like two lies and a truth, Rachel still figures it out. Now, granted, it's definitely possible that Rachel really is that good. BUT, we also know, within this game's universe, exactly how someone like Max would have "solved" that problem which Chloe presented.

This is all circumstantial, of course, and to a certain degree it doesn't matter. There is a 0% chance that we will learn in the next episode that Rachel has the rewind power because, again, Chloe is our only viewpoint character, and if she had learned that Rachel had the rewind, she definitely would have mentioned it when Max turned out to have it. It's possible that there will be some in-game indication to the players that this is the case, but I think it's much more likely to remain in the realm of "possible but unproven fan-theory".


I have absolutely no justification for this, but I recently developed a crazy prediction for the upcoming "Farewell" episode. It started with me speculating about the casting for it: hopefully, now that the strike is over, they can bring back Hannah Telle to voice young Max again. But will they bring back Ashly Burch for Chloe, or keep Rhianna?

My crazy theory is that they could develop a split timeline in this episode. Possibly as a side-effect of future-Max traveling back in time, perhaps for some other reason. Again, we have evidence within the game universe of how possible realities can split and coexist. We happen to be occupying a "prime" reality, but the other realities don't disappear, we just aren't in those right now.

All that being said: it might be really clever and not-too-cheating to have both Ashly and Rhianna present, and each voice Chloe in their own separate timelines. The Ashly one leads into the first-season-canon Life Is Strange, and all the heartache that entails. The Rhianna one leads into the Before The Storm timeline, and, thanks to the butterfly effect, does not necessarily have the same outcomes. Perhaps Jefferson never comes to Blackwell, perhaps Chloe and Rachel leave town. That would help with one major problem people have with Before The Storm, knowing what happens to these characters later, and, maybe, open up the possibility of even more adventures in the future.

So, yeah... obviously, I've been enjoying the series immensely, and have been feeling regretful that it's a truncated one. Particularly given what seems to be a (relatively) low-stakes plot, I've been curious if Deck Nine and/or Squenix are thinking about franchising Before The Storm, in addition to the core DONTNOD Life Is Strange. I can imagine a scenario where one team continues telling more realistic stories in Arcadia Bay while another team does more supernatural stories in new areas. After the first episode, my tentative thought had been that they might be setting up characters to do a spinoff series: Steph, Mikey and Drew are obvious candidates, as they don't appear in the main series and would be free to go off and have their own adventures. After the second episode, though, I'm increasingly wondering if we might get another prequel season of Chloe and Rachel. Even without my crazy alternate timeline, we still have two years before Max comes back, and there could be some more good stories in there.

(And, again, I'm curious how the business side would affect all that. Now that the SAG-AFTRA strike is over, will they be getting union actors? What does that mean for characters like Steph? I'm not familiar enough with the business to know if they can just join the union - I'd imagine that working a struck project would be frowned upon, but given that they already voiced those characters, it would be nice to have them again for this entirely-hypothetical continuation.)

But, yes. Fundamentally, I just really, really like seeing Rachel and Chloe together. They have amazing chemistry, and the arc of their romance is really sweet. They do a great job at showing this in all dimensions. My heart skipped happily when reading through the texts from the previous night - Chloe, who is usually so standoffish with others, and so needy and unfulfilled in her interactions with Max, finally has someone who freaking texts her back, and their contagious excitement as they blast messages back and forth at two in the morning is... ugh, it's so, so good. And the way Chloe opens the door to her truck for Rachel, her mixture of nervousness and pride, Rachel's subtle attitude of ownership ("You look damn good in my clothes!"), their sense of concern for each other as they navigate stressful days...

But most of all the Tempest itself and the walk home afterwards. Wow.

To start, Chloe's line-reading slays what might just be my favorite exchange in the entire game:
"What if I told you that the entire fate of the production rests upon your slender shoulders?"
"I'd say: 'You're super-f*cked!'"

Memorizing and delivering the lines was a lot of fun - it was pretty obvious how stuff was going to go down, so I went over the script a couple of times. (I have read The Tempest before and vaguely remember the plots/characters, but definitely don't have the lines down!) This reminded me a bit of the famous Opera House scene in Final Fantasy VI, which (SPOILER ALERT FOR CALFREE IN CHAINS) also inspires an optional sidequest in CalFree In Chains.

Anyways, the way it actually goes down is really cool - I was expecting to just need to give the first line of each response, so it was cool that they mixed it up a little, with you sometimes needing to deliver a later word ("troops") or hit a stage mark. And Rachel's on-the-fly script revision was incredible, giving me butterflies in my stomach. (Though, I have to say, editing the bard takes a lot of guts! Kudos to the writers for going there.)

And, the walk home... happy sigh...

Oh! I forgot to mention this above, but here's how devoted to the game I am: I actually bought a controller specifically for it. I've been a happy KBM user for my entire life, and have left controllers to the rare occasion that I use my Playstation. But I was reading a comment about episode one, where someone mentioned how devastating the junkyard scene was with the vibrations of the controller, and I thought "OH MAN I NEED TO EXPERIENCE THE GAME IN THAT DIMENSION TOO!" So I bought an xbox controller and... yeah. It seems like such a little, dumb thing, but I think the sensation of touch is REALLY important, and it's used so well in this game. Little nudges from Rachel, carrying through into your hands, forging yet another connection between her and Chloe. Happy sigh.

A few final (for now) random thoughts:

I'm curious about what Eliot's deal is. At first I thought he was just the "prequel Warren," but the game seems to be implying that there's something darker going on. In one of her early journal pages, Chloe mentions that she sometimes feels like he's studying her. Samuel has a fascinating series of comments about Eliot which make it seem like he's almost supernatural, or maybe metatextual. I've been consistently and politely turning him down at each opportunity, and initially skipped over his dorm room; after finishing the episode, I used Collection Mode to get the graffiti outside his room, and found the stuff inside. It's... maybe not exactly a smoking gun, but it's hella creepy.

All that being said, is it going anywhere? My current guess is that he's a red herring, similar to Sean Prescott in the first season of the game. He seems important, but I don't see how he would fit into any of the major plot lines for the final episode.

Oh, speaking of Sean Prescott: it was super-interesting to have him show up for this! I wasn't expecting that at all. Honestly, it almost seemed like a bit of a waste... he's been such a larger-than-life behind-the-scenes villain, and it was a bit anticlimactic to just use him to chew out Nathan. But, I dunno, maybe that is the point.

So: one thing that Life Is Strange is unusually good at is drawing a line between empathy and sympathy. There are quite a few characters who are awful, but the game (eventually) gives you an understanding of how and why they are this way. BUT, it's still up to you as a player to decide what to do with that information. After all, just because someone has a reason to be that way doesn't cure the harm they have caused.

I seem to be on the less-forgiving side of things. I'm a hardline anti-David-er; judging from the end-game choice breakdown, I'm in the minority of players who continue to resist David's intrusion into the Price family. I think that for a lot of players, after they've seen David's entire arc through Episode Five and understood that he really does care for Chloe and is ultimately motivated by good aims, see him in a much better light and want to side with him. For me, though, I still see the abusive stepfather who batters his stepdaughter and violates her privacy and drives a girl close to suicide. He might want to be good, but he does bad, and I don't think it's fair for Chloe and the other people in his life to put up with his bullshit and his shortcomings.

That same dynamic is at play with me and Nathan. I actually have more sympathy for Nathan than for David, probably because we can more easily see and name the cause of Nathan's issues. But Nathan has (by the time of LiS) done even worse things than David, and, while I feel really bad for the kid, I'm...

Well, let's talk about Samantha. Looking at the post-game stats, I was shocked to see that I was one of only 2% of players who had advised Samantha to stay away from Nathan. I had expected to be in the minority, but not that small of one! I mean, as players, what do we know about Nathan? He drugs and rapes young women, and has (accidentally) killed one. Granted, in-game Chloe doesn't know this; but we know from her journal that she senses how weird he is, and in all of our interactions with him, he's never said anything kind, and always lashes out in anger at anyone who tries to help or support him.

It isn't necessarily bad that Samantha feels sorry for him - she has a kind heart, and almost definitely a crush on him, and neither of those things is bad. But... argh. I think my main obstacle is this idea that women can or should fix broken men. Don't! If he's an asshole, don't try to change him! It's not his fault that he's an asshole, but it's not your job to fix him. But, somehow, 58% of players wanted to move these two closer together.

One of the final images in the episode, right before the closing credits, shows Samantha, standing alone in the dark, smiling at Nathan as he approaches her. I'm guessing that that 58% of players thought it was sweet. I shivered. I hope that it works out, but I really wish that she had taken my advice.

Last but not least, the big revelation at the end. I'm still mentally processing the idea that Sera is Rachel's birth mom. In some ways, it makes sense... I hadn't thought that they looked all that similar, but I guess they do have somewhat similar builds; more relevantly, Rachel doesn't look much at all like either of her parents. At first I thought she might have been adopted; but the kissing would imply that Sera was a former lover. (Probably not an ex-wife, but maybe so, who knows.)

From looking at the files in the Amber home, we also see that Sera is involved in Damon's criminal enterprise, so I'm sure that's somehow connected. When I first saw that, I thought "Oh, maybe she's a mole on the inside, and Mr. Amber is trying to bring them down". But that doesn't make sense: he's a district attorney, not a detective; he charges cases, he doesn't investigate them. So, is it the flip side? Is she blackmailing or manipulating him to get information on the government's case to protect the gang? Frank mentioned that she had shown up relatively recently, so it seems likely that she's connected one way or another.

And, y'know... who is she? She probably isn't just a junkie, given her position on the chart. Maybe a mid-level dealer or operative of some sort.  But there's that chilling image of her smiling and smoking as the fire burns at the end of Episode One. If - if! - Rachel does have some sort of supernatural powers, is it possible that they came from her?

In any case. She's almost certainly the final slot on the cast-of-characters sheet, and I imagine we'll learn a lot more about her in the next (final (sob) ) episode. And I'm sure it'll be a huge development for Rachel as well, though I'm not sure yet how she will react. Will this postpone the plans to exit Arcadia Bay, as she tries to connect with this previously-unknown element in her past? Or further drive her determination to escape and define her own destiny? I dunno. I want to find out!


Okay! That was fun! I've been on a mini-media-quarantine for a little while. Starting shortly before Episode 2 dropped, I unfollowed all of the Life Is Strange social media feeds and various individuals associated with the productions who I follow. Despite the episode leaking almost a week early on XBox, I managed to finish it with encountering zero spoilers, hurrah! I'm eagerly looking forward to diving back into the fandom to see the many, many things that I overlooked during this playthrough. I also predict that we will be seeing a lot more Shakespearean fan art in the coming weeks, and don't want to miss any of it.

Despite my earlier optimism, I never did get around to sorting and captioning my Episode 1 screenshots, sorry. I pulled out a couple of Episode 2 shots for this post, but the rest of them will probably be waiting for quite a while longer. At this point, I'll probably just wait until all three episodes are out and then come up with proper albums for them.

Sunday, October 15, 2017

Big Speech

Part sixteen in a weekly(⛰) devlog.

Standard development disclaimers apply. This is 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 started work on the climax. Yay! I also rewrote the climax. Yikes!

I’ve been looking forward to this - obviously the climax is a significant milestone in the dev phase. As I was ramping up to begin work, though, it gradually dawned on me that the boss fight felt, uh, anti-climactic. I’d come off of a couple of late-game missions with final confrontations that were pretty interesting: unique mechanics or victory conditions or environmental factors that put a challenging twist on the fight. By comparison, the final fight in the game was a very stock “shoot all the bad guys until they are all dead” affair. I think there’s some interesting narrative context to what’s going on, and also some potentially cool visual elements to the battlefield, but the actual mechanics of the battle just felt bleh.

I’m curious about how our brain works. The interval between me recognizing “Oh, there’s a problem here” to “Here’s the solution!” was surprisingly short. It makes me wonder if my subconscious had realized the issue before and had been chugging away in the background, proposing alternatives, causing one to pop out to me before too much longer.

Much as with the horror level I mentioned last week, the solution here partially involved reviving a previously-discarded idea from what I’ve come to think of as the “bad end” of the game. It doesn’t necessarily change the ending, but adds the threat of a worse ending, with tiered failure conditions that will carry over into the finale, which I think adds even more motivation and tension to the fight, on top of the purely story-based ones that already exist. Once I had that in mind, there were some obvious mechanics that I could build into the fight that present some interesting decisions for players to pursue, weighing pros and cons against the more straightforward task of killing bad guys.

I’m still in the process of building it out, but I’m decently happy with it. In all honesty, it’s probably a step down from the final fight in Caldecott - that had a really nice combination of tightness, reactivity, and branching that I don’t think I’ve replicated here - but it does add some unique new elements that I think help this stand on its own.

So: As with all of my scenes, one component of the climax is crew reactions. As you encounter obstacles and make decisions, your teammates will periodically sound off, commenting on your actions or offering advice. I do this a TON, there are probably literally hundreds of reactions throughout the game. Let’s take a look at how to do ‘em.

Let’s start with an anti-pattern. Here’s an example of how this used to work back in the Dragonfall era, using a convo from the official campaign as an example:

This comes from the start of the Aztechnology raid. The basic idea is simple: you have four potential crew members, the game checks to see which of them are present and then has them speak. It feels nice and natural in-game, but it’s kind of clunky from a development perspective.

  • There’s a lot of duplication. Eiger delivers the exact same line many times.
  • This makes revisions/edits more difficult. If you later spot a typo, you need to track down the four or so copies of the line and make sure you update each of them.
  • The amount of work increases exponentially with the number of characters. This is a “four pick three” combination; when I think of doing this with a “six pick three”, my nose starts bleeding.
  • It’s difficult to track what’s going on. It’s so long that you can’t see easily all the branches on screen at once, which can make it harder to see if a character is getting skipped or if you’re missing something in a particular branch (like the etiquette check here).

Back in the Dragonfall days, this was probably the best way to do it. I took a different approach in the Antumbra games, with looping dialogs that returned to a an empty root node after each interjection; unfortunately, with the way the conversation engine worked in this game, it would auto-skip past intermediate blue nodes, so the player would only actually see the final interjection, unless I manually inserted a red-text player response after each one. This is why there are a lot of “nothing” responses in Antumbra, like “I see.” and “Go on.”

Fortunately, Hong Kong made a subtle but enormously helpful change, eliminating the skip-through and allowing each blue node to be shown in sequence as intended. That’s made my life writing reactive dialogue FAR easier. In all honesty, if it wasn’t for this one update, there’s a very good chance that I’d be writing CFiC in Dragonfall instead of in Hong Kong: I love the music and other goodies that we lost from that game, but the improvements in dialogue handling are so important that they blow all other considerations out of the water.

Anyways, let’s look at one particular conversation. This is an excerpt from the Sacramento mission that we’ve previously looked at. When your character encounters a decision, all of your companions can chime in, offering their own perspective that expresses their values and desires.

So, the basic idea here is:
  1. Create a blank blue node. It functions a little like a traffic conductor, deciding who should speak when. Here I've added the comment "Reactive party check-in" so I can easily see where it's referenced.
  2. Create an empty red node. The conversation will automatically proceed into any blank red node, PROVIDED IT IS VALID.
  3. Check the “Available only once” tick (bottom oval). This ensures that we won’t endlessly loop into this interjection.
  4. Add a prerequisite (middle oval). Here, we’re checking to see if an actor with the correct tag is present. These tags are set on the crew members’ character sheets, so we can access them even if we spawned them through the hiring screen. By setting this prerequisite, we’ll only proceed into this branch if the speaker is present, and skip it otherwise.
  5. Finally, add the companion’s own dialogue. For the speaker, select the [tag] for this character. When the scene runs, the game will find an actor with that tag and show their portrait in the interface. (If you mess up and select the wrong person’s tag, their portrait will show instead. If there is nobody with that tag present, it will show the default speaker. Avoid these problems by always matching the tag in the pre-req with the tag for the speaker.).
  6. If desired, you can add more nodes in this branch from the same speaker, responses from the player character, or dialogue from other folks in the scene.
  7. Once this branch is finished, use “copy link” to send the dialogue back to the blank blue node we created in step 1.
  8. Repeat steps 2-7 for all the crew members / other people you want to optionally speak.
  9. At the bottom, include a blank red node with no pre-requisites. This is the final branch out of the optional interjections, and continues the main thread of the dialogue. (Alternately, you could omit this to just end the convo, or give the player dialogue choices - those will display once they have exhausted all blank responses.)

That probably sounds like a lot - in practice, once you get it down, it’s almost trivial to build. I generally lay out one blank interjection, copy-paste it however many times I need, and then fill in each individual’s tags at the same time I’m adding their lines.

Here are some brief videos showing how the same conversation might play out differently depending on who you have in your squad. Dialogue contains some minor plot spoilers.

And, that’s it! These have been real meat-and-potatoes in my scene work, and it’s just now occurring to me that I’m probably almost done with them. There’s still a ton of branching dialogue to do, but specific party-based reactivity like this will be finished after I wrap up the climax. Once again, that’s a very nice milestone to reach!

Friday, October 13, 2017

The Entire Northern Side Was Covered With Fire

Taking a break from creating the future apocalypse to comment on the present apocalypse:

The Bay Area has been surreal this week. I'm far south of the fires and not directly affected, but the entire region has filled up with smoke from the flames. Every time I step outside it smells like a campfire, and we've had surreal sunrises and sunsets that make me feel like I'm on an alien planet.

This region is usually very fortunate in that we're adjacent to the ocean and typical wind patterns help circulate in clear air, avoiding the bad pollution that plagues valleys in California. But the northern winds are a curse in this case, both for the spread of the fires and the subsequent spread of smoke. The air quality is as bad here now as it is on the worst days in Beijing.

For posterity, here are a few images of what things look like here and now. (None are my own photos, each links out to the source, but they line up with my own experiences over the past few days.)






Of course, we have it far better than our neighbors in the North Bay who have lost their homes, jobs, and loved ones. I'd appreciate it if you could keep them in your thoughts.

Sunday, October 08, 2017

Atmospheric Disturbances

Part fifteen in a weekly(👻) devlog.

Standard development disclaimers apply. This is 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'm not much of a horror person, but for some reason I really enjoy creating horror-tinged levels in my Shadowrun mods. This week I've been working on the last one that I'll ever make, and it's been a blast. After making several of these games, it becomes increasingly challenging to think of creative new puzzles to solve and creative new boss fight mechanics, but there's a well of inspiration for creepy scenes that has yet to run dry.

This particular scene was inspired by my original ending for this campaign. Not to say that the new ending is all sunshine and daffodils, but my original vision was much bleaker. I chickened out of that conclusion, but I loved it, so I recycled the shape of the arc and the interior beats and morphed them into this more-or-less stand-alone mission. At the risk of sounding arrogant, I think it's the best one I've created yet! I get a weird thrill from the subtle and gradual slide into dread, which I think comes across really well here.

The scene is taking notably longer to create than I had expected, but I have zero regrets, since every minute I spend in it is resulting in something that feels tighter and more effective. Atmosphere is important in any Shadowrun mission, but it's especially important for the creepier ones: you're trying to guide the player into a certain mental state, and you have a better shot at succeeding if you use all the tools at your disposal: dialogue and lighting and sound and graphics and everything. For it to work, it needs to be synchronized and logical, so I end up doing a lot of iterative testing, figuring out the appropriate gaps between events to make it work.

There are a few tools at my disposal when I want to create an effective atmosphere, whether for horror or something else. In no particular order, they include:

Sound Effects

These can be run by a simple trigger command, Gameplay -> Play Sound. It's easy to browse through the drop-down and look for a sound that will fit your scene.

A few notes:

  • Most (not all!) of the sounds in the "ambient" packages do not actually play. There are a few exceptions, like the Raven sound in ambient_graveyard. Be sure to test any sound you use. EDIT: Ah! I've discovered that the sounds can play, so long as you add that sound to an ambient audio node present on the map. I suspect that this means they'll also play if you add the containing sound set to the region's ambience, though I haven't tested that yet. (Note that, while all the default ambiences use a single sound set, you can add more to include additional sounds from other sets.)
  • Volumes are pretty well normalized, but you can drop the volume if you want something to sound subtle, distant, etc.
  • Avoid anything with "loop" in the title, as these will play forever. Unless that's what you want, but then be sure to use the Stop Sound trigger. But in that case, I would prefer to use an Ambient Audio gizmo, which you can move in or out of the scene as appropriate.
  • A few sounds are actually sound sets, and will rotate through a different sound each time it is invoked. For example, "Ghoul Chomp" will switch between two different sounds. Usually these are all similar enough that they will work in your trigger, but again, test it to verify.
One really nice utility for evaluating sounds, especially when you're getting familiar with the library, is the Aztechnology Aural Mindscape mod.  This is a standalone "campaign" that lets you easily play all of the sound effects and music in the Hong Kong campaign.


Great when you want an on-screen character to visually do something: act surprised or fall down or shrug or whatever. You can browse these through the Actor Play Animation from Manifest command. Almost everything is included under the Hong Kong General category. There are a lot! The ones with "idle" in the name are persistent, so the actor will continue to hold the pose until they do something different (either from a subsequent Play Animation command or the result of a standard walk, attack, etc.). The non-idle animations generally perform a single discrete action, like throwing something, and then reset to the idle standing state.

One important note: playing animations from a manifest will only move the actor's body, nothing else. For example, if you play a spellcasting animation, your character will move their hands and arms as expected, but you won't see any colorful sparkles. Sometimes that's what you want, sometimes it isn't.


If you've been making maps, you're probably already familiar with prop FX, which you can drag into your scene to add dynamic atmosphere: billowing green smoke or flashing sparks or glowing mana. I've been using those forever, but I've only recently started using scripted FX. These usually perform a single discrete effect in the environment: a fiery explosion or crows flying away or a burst of electricity. A few of them can be played directly on an actor. For example, playing the "Smoking" animation from the manifest will just simulate the arm motion of smoking; playing the "Berlin:LoopedSmokingIdle" FX on an actor will produce the same motion but also add the lit cigarette glow.

Unlike playing animations or sounds, you can't browse through FX, you need to know the name of the effect. If you know where it is used in one of the official campaigns, you can just open the scene in the editor and look it up from the trigger. I've found it most convenient to search the wiki page for something that looks promising.

And, uh, that's it! These are too spoilery to show off, but I've been really happy with how things are coming together. I'm using a few more animations and sounds than in Caldecott, and a lot more FX, and I think it's helping CalFree In Chains to be my most atmospheric campaign yet.

Sunday, October 01, 2017

Curiously recurring templates

Part fourteen in a weekly(🖼️) devlog.

Standard development disclaimers apply. This is 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. 

This was another weekend of cut-scene work. I think it’s the last significant one in the game… there are many more missions after this, but I think the major story beats from here on out are just done through dialogue or direct action. It was fairly time-consuming to get right, but not especially tricky. Unlike the first one, which had a lot of movement, the characters are mostly stationary for this one, but there’s a fair amount of synchronized action. But not TOO synchronized… it looks really fake if you have a whole bunch of characters performing an action in lockstep, so there are little micro-pauses scattered throughout to make it feel a little more realistic.

I’ve already talked about cut-scenes before, though, so this time around, let’s talk about image manipulation.

I am not an artist. At all. That’s a huge part of the reason why I shied away from game development after early youthful enthusiasm: I can’t draw, don’t have a very good artistic eye, and am generally helpless when it comes to visual things. Which, again, is a huge part of the reason why Shadowrun is such a tempting platform for me to create on, thanks to its amazing library of great-looking artwork.

There are still a handful of images that I need to work with, though. A big example of this is loading screens. By default, if you don’t set a loading screen, you’ll see something like this when a scene loads.

Pretty gnarly, right? The image itself isn’t bad - it’s a nicely generic dystopia-plus-magic tableau that says “Shadowrun” - but it’s not very readable. In particular, the white text blends into the white pixels of the background image. What gives?

Well, this is the same default image that’s been around since the very first Shadowrun Return game in 2013. Back in that prehistoric era, they used to draw a translucent overlay on top of the loading image to provide nice contrast between the image and the text. With the shift to Dragonfall, HBS removed that overlay. This was a fine change on its own - it gives more flexibility in how you compose the image, keeps it from appearing needlessly dark - but the default image was never updated, so it’s no longer an acceptable fallback.

So, we need to produce our own image. We can provide any 1024x1024 PNG, but adding a random image will look janky within the game, with an abrupt transition to the black border and potentially the same white-on-white contrast problem.

Fortunately, people with more talent than I have come up with good tools to produce your own loading screens that look good, match the general feel of the official campaigns, and solve the text problem. The one I’m currently using is an update of the CXZman template, a Photoshop layered PSD with smart objects that ingests an image and outputs a nicely framed version of that image.

As a sidebar, this is the only time I use Photoshop. I’m much more familiar and comfortable with GIMP, and tend to prefer that for any image-related floundering. But this particular template really does require proper Photoshop to work.

I’ve used versions of this template before for Antumbra Saga and The Caldecott Caper, so I’m already somewhat familiar with it. At the same time, I kind of wanted to mix things up a little. In particular, that teal-ish blue border feels really dated to me. The official Hong Kong campaign has a really nice gradient border. I can’t do that, but it’s pretty simply to just replace one color with another, so I arbitrarily decided that CFiC would use an orange border instead.

You can put any image that you want within this. I’ve been following the convention of the HBS campaigns and my own prior games to populate these with in-engine screenshots of the current scenes. I like this, since the in-game artwork looks really nice, and it’s fairly simple to capture (you can just use the Steam screenshot button or a similar utility). I’ll build and run the scene without any other characters in it, then just move my player around to various areas to life the fog-of-war and capture a screenshot. This time around, I captured these in 1920x1080 resolution, which gave a lot of buffer for the roughly 900x520 visible space within the frame.

The image actually needs to be placed twice. First, double-click the “Actual artwork” smart object. Hide any existing art by clicking the eyeball icon in the lower-right. Then drag the screenshot PNG in.

In my previous games, I always just accepted the centered version of the image. This time, I was a little more opinionated, and would pan the image to what I thought was the best-looking position. Brighter colors tend to look nicer; keep in mind that a translucent overlay will cover the left half of the image, so that area may look particularly dark anyways. I try to avoid including any UI elements, most notably the PDA/power button in the upper left.

Once I’m happy with how it looks, I save the smart object (“placing” the new image within it) and return to the template. Next, I need to repeat this process in the “Glow light filter” smart object. If you forget this step, it will light the new image with glow colors from the previous image, which isn’t too noticeable on some pictures but can be very jarring on others. This process was a bit more complicated this time around, since I would need to position the pasted image at the exact same offset as in the “Actual artwork”.

After that’s done, the image is ready! The template automatically handles cropping and overlays and the gradient and glow and everything. You can then export it as a 1024x1024 image. This goes into the art/loadingimages folder of your content pack, after which it will appear as an optional loading screen within the editor and, eventually, within the game.

Much nicer!

Custom loading screens definitely aren’t necessary, and don’t have any direct impact on the game’s functions, but I think they’re one of the critical factors in making a campaign feel polished. These are some of the first images a player will see when starting a campaign, and they may be looking at them for quite a long time thanks to the long load times! So taking a little extra time to make sure they look good is, in my opinion, time well spent.