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.)

Source

Source

Source

Source

https://imgur.com/xqCOimI

Source

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.

Animations


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.

FX


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.

Sunday, September 24, 2017

Crafty

Part thirteen 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 finally finished that monster 30-page mission, hurrah! Not only was this probably the longest mission of the campaign (in terms of text, and, depending on your playstyle, possibly clock time as well), but it also marked the half-way point of missions. That doesn't mean I'm halfway done with the game - I haven't even started scripting the hub yet, where about half of the dialogs take place - but it's still a really nice milestone to cross.

I'm currently working on the mission after that, the last one before the next critical-path story mission. This one is a bit more conventional, with a little dialogue, some puzzles, and a fair amount of mandatory combat. But I try to do something unique in every mission, so this one has a few wrinkles, especially in the combat. Another unique thing about this mission is it gives you the chance to craft a unique weapon of your choice. I'd like to chat a bit about the design and implementation of this feature.

My Words Are Poison


My favorite thing about RPGs is the intersection of choice, morality, and gameplay. I think a game is designed well if you choose a mechanically inferior outcome because it leads to a morally superior outcome. Shadowrun tends not to have clear-cut good and evil characters, but absolutely has a wide variety of factions and values to which a player may align themself. A simple example here is supporting Samuel's ork resource center in Dragonfall: there isn't a gameplay advantage to giving him nuyen, and you'd be better off hoarding the cash, but a lot of players gladly become benefactors.

In my current mission, you can come into the possession of a deadly venom. There's an immediate plot-required use of this venom to manufacture an antidote. But you can acquire more than is needed, and then can choose how to use the surplus. There are a variety of options for this. You can make even more of an antidote, which is a benign use and may support your team in the future. You can hoard it for a phat cash payout. Or, if you can locate the required schematics, you can craft one of several unique poison weapons.

This doesn't have huge repercussions, and I don't need to track much beyond the player's initial decision. But it may be a relatively significant decision for the player to make: how badly do I want this cool new toy? Am I willing to take risks to get it? What will my companions think of this decision, and do I care?

Arsenal


I mused over the weapon selection for a little while. I wanted some choice here, both to make things more interesting and to support different playstyles: if the only option was, say, a new throwing weapon, then it wouldn't be tempting for 90% of player builds. But I also didn't want to go overboard. It would be time-consuming to create 9 new unique weapons, and there's an ongoing cost to tune and support all of them.

I ended up with three main weapon selections: a bioweapon grenade launcher, a poisoned axe, and venomous hand razors (a cyberweapon). I'd initially considered doing poison rounds for firearms, but that would have required making different variation for each weapon type (pistol, rifle, etc.). I like the example of the grenade launcher: unlike most weapons, it only uses the Ranged Combat stat, and doesn't have a specialization like Rifle, so many more players can use it. The axe is useful for melee characters; I'd previously created a unique unarmed "weapon" in a previous mission so it felt like that slot was already filled. The hand razors fit into an existing gap between the entry-level and end-game cyberweapons, using poison damage instead of the customary bleeding type.

In terms of power level, these weapons are all "Tier 2", which is about the level that players will likely be using, so the weapons should be useful but won't be essential top-tier gear. They also have some unique mechanics, so even if a player already has Tier 2 gear they can be situationally useful. Heck, even after upgrading to Tier 3 they might keep them around if they have a spare slot. The axe and the launcher can be used by other crew members, so if you personally outgrow their usefulness, they could become hand-me-downs.

The hand razors can't be transferred and are only useful if your PC has the appropriate skill, so I gate its creation behind the Cyber Affinity skill. I also gave options to pick up Acid Bolt or Acid Stream, which are existing spells that can be useful to casters.

Copy That


So: You can absolutely make complete Shadowrun campaigns using only the official editor. However, as my campaigns have become more ambitious and polished, I've started dabbling in creating unique things that can't be directly made within the editor: new gear, weapons, spells, crew advancement, etc. This requires manually editing text files, so it's a different skill set than standard mission creation.

I always start off by finding an existing file to copy and modify. You can locate these in the official content pack. In my case, I'll use the existing Grenade Launcher as my template, which is located in data/items/ex 1\ m203.item.txt.  Here it is!


I rename this and place it into my own content pack, with the new name data/items/ex 1\ poison.item.txt. Here's the updated version:


The modified properties have been marked up with violet lines. Here's a quick run-down of what I changed and why:

  • ID: This must match the filename, minus the .txt extension, but the capitalization can vary. I try to follow their existing conventions for naming items. Here it's similar to the existing grenade launcher.
  • Icon: Just noting here that I did not modify the icon. Icons are baked into the game itself. You can switch to another icon, but can't create new icons. The existing launcher one is fine so I stuck with that.
  • Name: Obviously, giving this a new name. This is player-visible.
  • Description: More detailed flavor text about the item. Some weapons also include stats here, others don't. Note that there is limited space in the UI to show descriptions, so don't make this too long.
  • Base HP damage: To differentiate this from the existing grenade launcher, I lowered the initial damage but added a new damage-over-time effect. The total damage per shot can end up being greater, but takes longer to be fully applied. This has the nice side-effect of reducing the cyberarm auto-reloaded exploit: you can still fire off multiple rounds in one turn, but since the DOT effects don't stack, it isn't quite as overpowered as the vanilla launcher.
  • Modeless Ability: Not shown here, but I copied and modified the existing ability. The new one has updated text and will show poison FX on enemies instead of the default explosion one.
  • Effect Duration: I added a new DOT effect. I copy-pasted this and the following lines from another weapon with a similar effect (I think the incendiary grenade, though it doesn't really matter) and edited them to match this weapon's concept.
  • ActivationStatusEffects: I'll tune this based on my testing, but the idea here is applying 8 HP damage per round for 2 more rounds. This particular weapon does not bypass armor, but the axe and razors do.
  • Store cost: I artificially lowered the cost of this so it isn't too valuable for players to sell. If they want the cash, then they should choose one of the other outcomes for this mini-quest. As noted above, due to the unique mechanics of this weapon it could still be useful to your party in the end-game, since multiple crew members have a spare equipment slot and have the Ranged Combat skill required to wield it.
  • Sorting group: This defines where the weapon will appear within the Shadowrun editor. You can use anything you like here, but I generally cluster my items into categories like "Unique" or "crewWeapons" to make them easier to find later.

Inaction


After it's been added, I exit and restart the Shadowrun editor. The item will now show up, just like all the built-in items do.

 
I've done this enough now that I pretty much always get it right on the first try, but when I first started making items I'd often screw stuff up. This will generally cause problems with the editor: often you'll see errors while the content pack loads, or sometimes you'll get errors when launching a scene that references it. You can always back this out by deleting the newly added items, or just keep modifying until it's working.


I use my existing combat test scene to test and experiment with the item. This one worked off the bat, since it uses pretty common and simple mechanics. Crew weapons tend to be a bit more complicated and require more trial and error to work properly. Anyways, here's a screenshot of the successful test:


The correct item name and attack name show in the UI, an appropriate status message is shown on the enemy's hover window, and they're showing the green "poisoned" effect animation. Test passed!

Sunday, September 17, 2017

Cast of Characters

Part twelve 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've started chipping away at that massive 30-page scene that I was complaining about earlier. It's big, but I'm now feeling slightly reassured that it isn't too big... it would almost certainly be tedious if every mission in the game was this talky, but as a single semi-optional outing I think it works OK. It helps that it's divided across a bunch of different characters/terminals, so no single section is too long-winded, and each person has a pretty different tone/outlook, so hopefully it doesn't feel too repetitive.

Make It Special


This is also one of a couple of scenes where I'm re-using an existing map. Like in Caldecott, I'm taking some low-effort steps to help make it feel a little different: using new lighting and weather effects. After making Caldecott, though, I realized that I could view this as an opportunity for additional reactivity rather than as an obstacle to minimize. So, certain physical elements of the map can change based on the decisions you made during the previous mission in this location. And furthermore, you can re-encounter some of the same NPCs from your first visit. This gives yet another opportunity for reactivity, as they can comment on your prior actions, and may contribute to the sense that this is a persistent, coherent world. I hope that the end result of this is that players will go "Oh, cool, I'm back in Y, that means I can check in on X again and see how he/she is doing!" rather than "Ugh, nice map re-use lazy developer person."

Because players have flexibility in how they choose to run missions, between two and five scenes may have elapsed between their first and their second visit here. The longer it's been, the greater the risk that they will forget the characters from their first visit. I can help mitigate this through my writing, by giving them unique voices and roles. But I think it's even more helpful to give them unique appearances, striking portraits that players will recognize at a glance.

For the remainder of this post, I'd like to chat about NPC creation. This won't cover crew members, who are a lot more complex, but the majority of non-Shadowrunners who you will encounter over the game. I mentally classify these into two major groups, civilians and combatants. Civilians are quest-givers and other NPCs with whom you converse, combatants are dudes and dudettes whom you can shoot. Some characters will be both: it gives more weight to the combat if you've previously spoken with them and learned their objectives.

Civilians


I usually start by dragging out the Civilian spawner from the Asset Library, which sets some initial AI settings and stuff that are helpful. You can also use the standard Actor Spawner; especially on a non-combat map, there won't be much difference between the two.

A civilian NPC will need three things: a name, a face, and a body.

What's In A Name?


I try to come up with "real" names for characters when I can: "Bob", "Twiddlywinks the Fierce", "Rutherford Wilson Nantucket III", etc. If I want to signal that this character is unimportant or meant to be attacked, then I'll use a role as their name: "Security Guard" or "Wallet Inspector" or something.

In this particular scene, I am using civilian job names for characters: "Plumber" and "Exterminator" and the like. This is mostly because I think players are more likely to remember their jobs than their names: just reading the name gives them some immediate context for who this person is.

Game Face


Honestly, the character portraits are a huge part of why I'm writing another mod for Shadowrun instead of striking out on another platform. There are a huge amount of great-looking, diverse, interesting character portraits in there, free for the taking.

If I already know the sort of character I'm looking for, I'll typically browse through the portraits in the content pack on disk. You can also use the in-game portrait browser, but I personally prefer the external approach which makes it easier to resize and view multiple images. I also have a personal stash of portraits that I like, and will scan through those to see if one fits the role/personality I'm envisioning.


More talented developers are able to draw their own new character portraits, a skill I greatly envy. Using the built-in portraits does have the advantage of a unified and familiar art style, but comes with its own challenges: in particular, virtually every portrait has already been used in one or more of the official campaigns, and it can be jarring to see a doppelganger suddenly appear in my campaign. So I try to avoid reusing the portraits of major NPCs, like Monika or Sam Watts or Gobbet.

Minor NPCs is a little risky, but in my opinion acceptable. If a character showed up once in a particular scene in a previous game, then I don't feel too bad about grabbing that image for my own game: for example, the minor villain Wren in Dragonfall was reused as the ally Tabitha in Antumbra Saga. My personal rule of thumb is that if I don't have a vivid memory of the character, it probably won't be too jarring to re-use it.

Using PC portraits raises different issues. There are tons of them and they're a great resource, and the majority of players won't have ever seen any one particular portraits. But, someone has played with it before, leading to the doppelganger problem again. I mitigate this somewhat by blocking players from selecting those particular portraits within my campaign (a technical process I won't address in this post). They still might be familiar from a previous campaign, which is mildly unfortunate but (in my opinion) not a huge problem... I've used my own character portraits in previous campaigns as an NPC and it didn't really bother me.

One nice cache of new portraits for CFiC has been previous campaigns. You can copy over portraits from Seattle, Dead Man's Switch, Berlin and Dragonfall that didn't make it into the new Hong Kong art pack. My preferred source here are the hireable runners (like the Nephilim Network): they never had a speaking role, and most players won't have recruited them anyways, so my use of them won't clash with existing play experiences. But NPC portraits and other backer images are fair game, too.

Some Body


Much like portraits, there's a really nice variety of 3D character models available for NPCs. These take two major forms: prefabricated models, which are simple to select and use but can't be customized, and "core" models, which allow you to select from a range of skin tones, hair colors and styles, and a few other modifiers (beards for males, horns for trolls). If you go the "core" route, you will also need to add an outfit for the NPC to wear, unless you want them in their underwear.


You can't preview these within the editor, and it's tedious to re-launch the game each time you want to verify something. Fortunately, folks have taken the time to create a model browser that lets you quickly view all of the available options within your web browser. A version of it is currently hosted on Dave of Death's site, though I prefer downloading to use offline.

 

One challenge: many of the portraits don't line up nicely with any of the available models. I try to get close, but, honestly, even the official portraits and models don't perfectly match, and I don't think players get that worked up about it. They'll notice if you match a portrait of a huge bald troll with the model of a svelte elven businesswoman, but they won't care too much if, say, she's wearing a jacket on her model and a tank top in her portrait.

If you go the "core" route and are using a PC portrait, you can also choose to look up the portrait code directly from hongkong.pcode.txt file. You'll still need to pick out an outfit, though.


Sidebar: one of the more annoying aspects of working in the Hong Kong engine is that, while HBS redid the ork and troll body models for the new game (which is great, they look a ton better now), they did not update the legacy outfits to match. You can still use them, but the characters' skin will clip through the clothing or otherwise look ridiculous. Bottom line: Hong Kong outfits work for all characters. Outfits from DFDC and earlier will work on humans, elves, and dwarves, but not on orks or trolls.

Combatants


So, cool, that's how we create NPCs. What about people whom we want to shoot? We can skip the face portrait for most of these, since we'll never see them in the conversation interface. Most other elements of NPC creation still apply, and in addition we need to select the appropriate stats for them.

Statistics


I usually start off by searching the Asset Library for "errant", which produces some great pre-generated enemy characters. These come with appropriate stats, equipment, and AI settings. They also come with default names and models, which I'll almost always want to override.


One side note: there isn't a melee enemy type in the Errant group, so I search for "triad" to find the "melee" characters. (Unfortunately, Triads do not include some other types like Shaman and Grenadier, so you need to mix and match between the two groups). If you want enemies to use swords instead of baseball bats, one easy approach is to use the melee character but manually replace its Thug_Melee gear with Adept_Melee gear.


I always use the lv1 versions of these characters. They are already set up to scale their character sheets, so when the player actually encounters them they will be advanced to the appropriate power level. If you were creating a linear campaign, you could manually select the level you wanted to use; but personally I would still use lv1 for this and scale them. That way, even if you later change your mind about the order of missions or power curve, you just need to update the CharacterScaleAmount variable rather than update dozens of character instances.

What about tougher enemies? I'm not really talking about bosses here, but I will note in passing that the "redsamurai" enemies from Gaichu's loyalty mission are nice, beefy opponents that also support level scaling. (Though the curve is a bit rough - they're way too powerful at lv1, and are more appropriate for mid- and end-game). 

Naming


I tend to follow HBS's convention here: each enemy has a 2-part name, with the first indicating their faction and the second indicating their combat role. Examples include "Lonestar Sniper", "Fuchi Mage", "Humanis Thug", etc. Faction isn't strictly necessary, but it contributes to the player's understanding of the encounter. The second part of the name is important since it has a strong impact on the player's strategy and decisions: if there's a mage on the battlefield, they need to know so they can deal with it now and not get surprised by a fireball next turn. (You can and should reinforce their identity by picking a corresponding character model, but, again, the Shadowrun engine is not very detailed and you can't expect players to pick up on the fact that one character is wearing a hood and another has a long gun.)

Boss-type enemies will usually have a distinctive name, like "Thomas" or "The Spirit Of Despair", which reinforces their uniqueness.

Bodies


As with NPCs, we can browse for appropriate character models. I almost never bother with customized core models; there are great sets of existing enemy factions that you can draw from. What's really nice about this is that the opponents will be visually unified (similar color scheme and armor design) while individually distinct (varied skin tones, metatypes, genders, etc.). That helps make a fight feel coherent and also like you aren't fighting a bunch of clones.

When you're facing the same faction as in one of the existing games, that's great! You can make use of Aztechnology or Lonestar or Knight-Errant or whatever. When I need to use a faction that's unique to my games, I'll try and pick an existing faction that doesn't appear and co-opt it. For example, I used the Humanis faction to represent the Native Californians in Antumbra and Caldecott: they have a similar ideology and racial makeup. I initially used the Tsang Security to represent Shiawase, though I was able to update to proper Shiawase models after HBS added them to the expanded edition (thanks, HBS!).



So, yeah, that's about it! Compared to a lot of the other stuff I work on for the mod, personalizing NPCs is relatively quick and straightforward. I feel like you get a lot of bang for your buck: leveraging all the time and effort HBS has invested into making good-looking characters, who you can then recast into original roles in your own story.

Video games are a highly visual medium, and characters, along with maps, are the thing players will spend the most time looking at. Having them make sense and look good is a key element to engaging players. And, honestly, engaging myself as well: I love seeing those characters from my pages coming to life on my screen.

Sunday, September 10, 2017

Cut It Out!

Part eleven 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.


Last week I hit a bit of a wall. I'd been banging on that Sacramento scene for what felt like ages, trying to get all the pacifist routes implemented and working properly, on top of the combat stuff I mentioned in last week's post. I finally knocked it down, though, and got to move on to a crucial scene that I've been looking forward to for quite a while. This is the first of... probably three or four significant moments in the campaign, with potentially high emotional impacts, which have been my main driving force to keep me going on this dumb project.

Over the long Labor Day weekend I spent most of the time building out the cut-scenes that occur around the climax of this mission. I got scared off of writing cut scenes after my earlier experiences with the Antumbra games: almost every time that a new update of the Shadowrun Returns engine came out, it would break one or more of my cut-scenes. If I was lucky it would just turn ugly, but more often it would actually freeze the game, breaking progress for all of my subscribers until I could carve out time to reproduce, debug, patch and update the campaign. Stressful! As a result, I dialed back on cut-scenes for Caldecott. But one big bright spot of the lack of updates for Hong Kong is that I no longer need to worry about future updates breaking things, so I'm feeling more confident now about writing them again.

They do still take quite a while, though. It takes a lot of iteration to get them down right. Even something that might seem simple, like having one character attack another in a cut-scene, ends up being pretty complex. For it to feel right, you need to initiate the attack animation, then wait a fraction of a second, then start the attack sound, wait a slightly longer fraction of a second, then show the impact on the victim. You can't really know in advance how long each of those pauses need to be, so it takes a lot of tweaking and testing to make it seem realistic.

Backing up a bit: when I say "cut scene", I mean a scripted sequence that takes place within the game engine but is not under the control of the player character. They were a staple of JRPGs in the 1990s, and I think they work quite well in isometric RPGs like Shadowrun. They are a great alternate vector for storytelling, beyond just the conversation interface: you can show movements and actions and ambient (floating) dialogue. Because they take so long to make, I don't do all that many, but I think their rareness makes them seem all the more special when they do happen.

Because this sequence is so spoilery, I can't show the actual scene, but I did want to share a sample trigger for the first part of this cut-scene. Spoilery bits redacted.


Breaking this down:
  • Like a lot of my triggers, this is initially disabled, and will be enabled during the conversation that precedes it. This makes it a bit easier to track what's happening in the debug console, and also allows me to directly invoke the script during testing.
  • The "kill" command here is used to make a character disappear ("Death Method: Vanish"). I could also warp the actor if I preferred, but it's simpler to just make them vanish. By playing the animation on them at the same time, it looks like they're teleporting out.
  • I subtly adjust the lighting. The new value is actually really close to the current one, so it'll probably have an almost subconscious effect on the player. You could also, say, turn it bright red if an alarm is going off or from dark to light if someone turns on the light.
  • Make actors passive so multiple characters can move at the same time. Set their run speed to walk so they, uh, walk, which looks better in this scene.
  • Here I disable the Shadowrunner team. This is a trade-off. Players can feel frustrated when they can't move or interact, so when possible it's better to keep them enabled. But there's a lot more that can go wrong in that case: the player might wander off and miss the cut-scene, or stand in the way of other actors and block them from hitting their marks. In order to minimize bugs in this scene, I'm locking down the player's movement for the duration.
  • Displaying text over actors looks good during cut-scenes. But all these lines should be really short. If anything is longer, go ahead and use the standard dialogue interface.
  • Next is the really important part, the pair of "Send out game event after delay" and "Wait for game event". This just pauses execution of the script for the timed amount. Pauses can be very short, as for animations; this particular one is longer to give the player time to read the dialogue, and to capture the characters' confusion.
  • Characters turn to face the person who's talking. This looks more natural, otherwise they might be staring at a wall or something odd.
  • Order actors to move. Because they're in passive mode, multiple people can be moving simultaneously. They'll still route around furniture and other obstacles.
  • End current team round is still important to make sure people actually move; even if they're in passive mode, they still can't move until their team (in this case Civilians) comes around. I think you can also use "Isolated team move" for this.
  • Et cetera, et cetera. This continues with more dialogue and movement and animations, but you get the idea.
So, that's it! It feels really good to have this scene in the game. It's always a thrilling, almost euphoric feeling to get this thing that's just been an idea trapped in my brain for months, and to see it actually realized and out in the world, where I can see it outside of myself and treat it as its own thing.

Sunday, September 03, 2017

War! What Is It Good For? Several Hours Of Gameplay.

Part ten 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.

So, status update: I've "finished" my first scripting pass through the first three scenes of the game. This includes the introductory/tutorial-ish scene, which is the shortest in the game. It also includes one that's... I don't know if it's necessarily the longest or the biggest, but it's the most sprawling, with lots of different elements kind of mushed up together. I still have (cough, cough, mumble, mumble) scenes left to do, so I'm still a ways off.

What I'm Doing


"Finished" is a very relative term here. I'd estimate that I'm about 90% to "feature complete" on each of those three. I've identified a few things that I'll need to circle back to later: plugging in some side-quests, updating some general mechanics (stuff like banters and failure conditions) and making a few creative updates. In terms of total work, these scenes are... I dunno, maybe around 60% of the way to where they need to be for my initial beta testing. I've run through the scenes multiple times and confirmed that they are beat-able, but I have no doubt that more bugs will continue to pop up with each additional run-through, so more polish will be needed. That said, it does feel really good to be making steady progress on them, and having this sort of early/interim signoff process allows me to feel a bit of momentum, and get a sense for how these things will chain together.

The specific mission I'm working on now is the Sacramento one that I've mentioned in my earlier posts on dialogue. This is the first of a couple of scenes that have potential pacifist routes: you can complete the entire mission without firing a shot or killing anybody.

That said, even though there is a pacifist option, there still is optional combat as well. Most players should have a pacifist route available, but in some unusual situations (like, say, a player who dumps all of their Karma into Body and doesn't bring along any other teammates) might be forced to fight. Others may just grow impatient with the puzzles, or decide that it's more in character for them to go in hot and heavy.

So: optional combat in this one, and non-optional combat in most scenes. Fighting makes up a significant part - heck, I'll go ahead and say the primary part - of my Shadowrun campaigns' gameplay. This post will look at how fights work.

Old-School Fighting


In the prehistoric era of the 1.0.4 Shadowrun Returns engine, I absolutely loved fights because they were the one part of game-creation that took longer to play than they did to build. Making a map might take ten hours and result in sixty seconds of movement. A dialogue might take an hour to write and two minutes to read. A puzzle could take two hours to create and between thirty seconds and five minutes to solve. But a fight? Maybe just around two minutes to set up, and between two and five minutes of gameplay to beat.

Over the whole course of Shadowrun modding, though, combat has been hit harder than probably anything else. One of the early updates (probably around the time of the shift to the 1.1.x engine) revamped how turns were handled. The main side-effect was that enemies now always went first in combat. Suddenly, among the hundreds of mods published for Shadowrun Returns, fights that used to be easy became impossibly difficult, allowing foes to one-shot your primary character before they even had a chance to respond.

Solving this required reworking a lot of those fights, adding specialized triggers to manage hostility and positioning and stuff to keep that dreaded ganking from occurring. That worked for a while... but then came Gumbo AI, and everything changed again.

Fortunately, stuff has ended up in a good place: the end result of all these changes is that combat is a lot more challenging and fun than in the 1.0.4 days. Fights used to mostly revolve around buffing and overwatch. Now, fights feel much more fluid, transitioning between turn-based and freemove; they're more tactical, with positioning and cover being really important; and they're much more varied, with a wider variety of weapons and spells and tactics to use.

The flip side, though, is that fights are no longer quick and easy to set up. Making a fun fight requires a bit of planning and a fair amount of scripting. I'll be examining the most common types of fights in this post; boss fights are unique one-off affairs that aren't necessarily useful to consider, so I may or may not cover those in the future.

Rules of Engagement


In the Hong Kong engine, fights might initiate in a few different ways. (Note: I'll be using the term "Lonestar" to describe a generic hostile team, in keeping with the editor's default teams.)

From the Environment


The most common setup is that Shadowrunners and Lonestar are mutually hostile, and Lonestar's backs are turned to Shadowrunners. You will see the pistol icon light up once you spot them, but will remain in free-move mode until the enemy detects you or you manually enter turn-based mode by clicking on the pistol.

This is the most forgiving type of fight to start. Since you control your positioning AND can buff in advance AND all four of your people get to move before the enemy does anything, you can inflict significant damage from the start. You'll almost certainly take out at least one enemy before they can react. Players also really like being in control so they can set the stage as they want.

That does mean that these types of fights can be a bit too easy and boring, though. And, if you try to make it more challenging by bumping of the number of opponents, then it might be too difficult in the other direction if players wander into their sights prior to initiating combat.

There are also only minimal storytelling opportunities with this setup. You don't always need storytelling: maybe you're in a cave, and there are a whole bunch of hellhounds in there too, it isn't surprising that you would open fire. But players might feel uneasy about launching an ambush on a group of people if they don't know who they are, what they're doing, and why they might be considered enemies.

Talky Shooty


This might be the most common setup for a combat encounter in my campaigns. You chat with someone, and at the end of the conversation, a fight breaks out. This might be based on a decision your character makes, or might be a pre-ordained result

I've been following Harebrained Schemes' design for this sort of fight, which works well. The basic structure is:
  • Within the conversation, enable a trigger to mark that the fight will begin.
  • That trigger fires when the conversation ends.
  • Issue orders to all of the opponents, generally telling each one to move to a specific spot on the map (probably behind cover).
  • Isolate Lonestar as the only active team for 1 round.
What this means is that the enemy moves first, but they won't attack.  In practice, this tends to lead to a challenging but non-frustrating fight. You can still plan out your strategy, can protect your main character, and, because the enemy is in a defensive position, won't immediately wipe them out.

The one slightly annoying thing about this is that enemy mages, in particular, can move and attack on the same round. I haven't been able to figure out why or how to stop it; it's probably deep Gumbo voodoo.

In general, though, this is a really good overall design for most fights. It gives the player story and context for what's going on, sets clear motivation and objectives, and presents a challenge without seeming unfair. The flip side is that you do need to write a trigger and do some additional tuning to make sure that people are moving to good locations. So, the days of creating fights in two minutes are over, but we're getting better fights as a result.

Ambush!


This is sort of a combination of the first two encounter types. A fight starts from the environment, but the enemies make the first move instead of you. But, we still want to avoid the "ganking" problem, so we need to ensure that the enemies don't actually hit you before you get a chance to react.

The script for this type of fight looks almost identical to the Talky Shooty one. The difference is how it is triggered: generally it's the result of your player character entering a particular region, which I tend to refer to as a "tripwire". I also generally stop the Shadowrunner teams' movement at the start of the trigger; otherwise, characters might have expended some AP in finishing their moves from before the start of the fight, and as a result will start with just 1 AP in the first round of combat.

Complexity and Victory


Trash fights are pretty boring. They aren't necessarily bad. I have a few trash fights in my early scenes, when players are still evaluating their builds and combat strategies: it gives a chance to try things and make mistakes without getting punished too badly. And it can sometimes work well thematically or for gameplay reasons. If your character did something clever to set up an ambush, then it isn't unreasonable for them to have a very easy fight as a result.

In general, though, the game is more interesting if the fights are more challenging. One of my game design shifts in CalFree in Chains has been to have fewer fights but make each one bigger and harder. I think there are a few advantages to this. In Caldecott, for example, most missions had about six fights; if you kept getting dinged up for each of the first five, then you might be entering the final fight with no consumables and low health, which could make it very frustrating and require a lot of reloading and/or lucky rolls to beat. So I was weirdly incentivized to make early fights harder (while your party is at full strength) and later fights easier (so you could still complete them with a damaged team), which is the opposite of the sort of power progression you would like to see.

Do The Wave 


The most straightforward way to add complexity and difficulty to a fight is to use multiple waves of opponents. In one example, an enemy might start with five foes on the field. After you have downed three of them, then another four rush in to reinforce them, bringing their numbers back up to six. And once only three of those are remaining, two more join the fight. This has a bunch of implications:
  • It limits the "free heal" effect that is granted at the end of each fight. Instead of three free heals for three separate fights (against 5, 4, and 3 enemies), you just get one free heal (across a total of 12 enemies).
  • Buffing is more useful. If you are just facing 3 enemies, there isn't as much point in casting spells like Aim or Armor: you're better served by just cutting down the enemies ASAP. But if the fight lasts for longer, then you'll get the full use out of those abilities.
  • The fight becomes less predictable and more interesting. In particular, you might have established a line against your foe, only to have some strikers threaten your flank or rear, forcing you to reposition.
  • Along the same lines, having foreknowledge of the fight becomes more useful. If you do lose the fight because a second team hit you from behind, then when you reload, you might be able to set up a shaman's barrier or leave a character on Overwatch, which could turn the tide and lead to a resounding victory.
I used the wave approach in Caldecott, but usually only for major boss-level fights, since I had so many smaller combat encounters; for CFiC, I'm planning to use it much more often, especially in later scenes. I'm also taking what I think is a much better approach to actually introducing new waves. In Caldecott, I would just teleport the new set of enemies onto the map. This was easy to program, but would generally leave the new enemies as sitting ducks that the player could hit hard before they had a chance to move; conversely, if they spawned at the end of a player's turn, they could strike hard before you had any chance to respond.

In CFiC, I'm using waves more like HBS does. In general, the idea here is to teleport the enemy in behind a closed and locked door - so, they're in the scene, but not yet visible or active. I issue orders for them to move to a specific location, similar to the Talky Shooty / Ambush triggers. And, that's it. When Lonestar's turn comes around, they'll charge through the door, take position behind cover, and then it will be up to the player to decide how to react. Again, more work than before, but I think it leads to a better result.

All Skate


Fights can be a lot more fun and interesting with multiple teams on the field at a time. The stereotypical approach is a three-way firefight between cops, gangers, and Shadowrunners. You can dive into the middle of the conflict, or try to fall back and let the others whale on each other for a while to soften up. But alliances are cool too: if you're facing a powerful foe, it feels good to have some friends on your side who you don't directly control but who aid you against a common enemy.

For the most part, this "just works". The Gumbo AI is pretty smart about how allies operate; you'll occasionally get hit by friendly fire, but they'll also buff you when they can.

Measuring Progress


You don't necessarily need to do anything to mark the end of a fight. The engine will automatically transition back into freeemove mode once there are no more hostiles visible, and you can continue on your way. But sometimes you'll want to do something special: start a conversation or drop a key or update a goal or whatever.

The most useful element to track fight progress is the integer function "Get count of alive actors". I tend to assign tags to enemies to track them. For example, some enemies might get "isHumanis" and "isHumanisWave1", while others might get "isHumanis" and "isHumanisWave2". When an actor dies, I can count to see if it's time to bring in the second wave yet, or if the entire fight is over.

Adjusting fights is a bit more time-consuming now than before: I can't just drag in or delete an actor spawner, I need to also update the triggers and regions associated with their initial moves. BUT, by using these counting triggers, I can track the logic of the fight independently of the specific actors involved in it, so at least that part of the scene won't need to be updated when I later adjust the opposing forces.

A Sample Fight


Let's look at some stuff! It's been way too long since I showed any video, so for this section, let's look at a fight's triggers and the results.

Code It Up


This is one of the very first fights in the game. It actually combines the Environmental and the Talky Shooty approaches, with the player able to determine their approach. You'll encounter a group of people who are threatening someone and acting menacing. You can choose to ambush them for an advantage; or you can try to talk, which will still ultimately lead to combat but will give more information about what's going on. This is a mildly important roleplaying decision for the character: are they impulsive and violent, or cautious and diplomatic? Other party members will make note of your behavior and comment accordingly.

First, here's the trigger that fires if you hit your opponents first.


  • As we'll see later, this trigger will be disabled if your opponents spot you, so this only fires if you attack first.
  • We skip the opening conversation in this flow, but show a little big of ambient dialogue. This helps establish one character as a friendly, and makes it a bit more interesting and fun.
  • We disable the other talk-related trigger to make sure that one doesn't fire when your opponents detect you.
That's pretty much it. Gumbo AI will ensure that the enemies behave smartly once it's finally their turn to move.

The Talky/Shooty flow has two parts. First, when you approach the foes while they're in place, we disable the ambush, start the conversation, and enable the actual fight trigger.


The real fight-related stuff is in the "FightAfterTalk" trigger. Note that this one is not active by default, we only set it up when going through the conversation flow.


Nothing too complex in here. After the conversation is done, they all move to their locations before the player can do anything, then wait patiently for the next turn.

And, regardless of how we begin the fight, it will end with this trigger, which starts another conversation once this particular group of enemies has been defeated.


Finally, just for fun, here's what the map looks like in the editor. Note that the actual enemies aren't on screen yet: they get moved in in response to another action that the player takes earlier. You can see a bunch of little 1x1 pink regions in there. Half of them are "TeleportDest" regions where I will place the enemies; the other half are "MoveDest" regions that describe where they should go for the Talky Shooty flow.



In Action


As promised, here are some brief videos. As in most of my debugging, I'm running through this as a Level 6 Lucky Strike, who makes short work of the Level 1 enemies I'm facing. I'll worry about tuning the difficulty of the fight later, in this phase I'm just concerned about the logic of how the fight works.

Here's the impulsive approach, sneaking behind them and attacking.



And here's the cautious approach, where you exchange words prior to opening fire.



That's it for now! Lots more fights to write and fix and tune, but on the whole, at this early stage, I'm fairly pleased by how the combat feels so far.

Saturday, September 02, 2017

After the Quake

I pre-ordered Life Is Strange: Before the Storm approximately thirty seconds after it was announced. That isn’t normal for me - I think the only other games I’ve pre-ordered in the past decade, not counting Kickstarter pledges, are Dragon Age: Origins and Inquisition. But I’ve been really hungry for more LiS goodness since finishing it last year, and I was eager to show my support for this type of game.

I had only fleeting second thoughts afterwards. Before the Storm has a different developer (Deck Nine replacing DONTNOD), and due to the ongoing voice actors’ strike, all of the voice actors have been recast. That second aspect made me briefly consider canceling my pre-order, more out of solidarity with the strikers than any concern with the new actors’ talents. That said, as far as I can tell there hasn’t been a general call to boycott struck games, and I still really wanted to play this one, so I decided to go ahead with it. It definitely helps that the new developers brought on Ashly Burch to help write… it’s good to see at least some form of continuity with the earlier entry.

The first episode just came out. I’ve been looking forward to playing it, and also looking forward to playing it now. One of my few regrets about LiS is only playing it after the whole game was released, so I missed out on a lot of the community development and involvement as the story was evolving. I’m now somewhat plugged into those communities and looking forward to shared reminiscing and speculation.


There can be a temptation when you buy a game at launch to try and rush through it, so you can finish it before any elements are spoiled. But one of the many things I love about Life Is Strange is its deliberate sense of calmness, of slowness: despite its reputation as an emotional game, the majority of it urges you to take it easy, to enjoy your surroundings, to dawdle. So I’ve been savoring every moment with this game: carefully reading through Chloe’s journal, catching up on text messages, exploring every nook and cranny of the environment.



My overall impression of BTS so far is “Same, but different,” which is exactly what I want. Those elements that I loved in the original are here: the stillness, the empathy, the beauty. At the same time, this is emphatically Chloe’s game and not Max’s. Her voice is different, her actions are different, her approach to the world is different. It’s been a perfect mix of “more of what I wanted” and “new delights”.

Before dipping into mini spoilers, a few random notes, mostly as points of comparison:

The game looks GORGEOUS. In particular, the character animations are a lot better and more detailed. Not that the ones in the original were bad, but they seem much more expressive this time. That’s true in the big moments, when tempers are running high, but also striking in the quiet moments, like when you’re pausing on a dialogue response and Chloe is just looking at the other person. This is another area that illuminates the difference between Max and Chloe: Chloe has much more attitude in everything she does, getting into peoples’ faces and being noticed, where Max was more of a wallflower.


Colors and lights look amazing too, very vibrant and pretty. The opening couple of scenes have some great interplay between darkness and light which produce some really striking results.


As a side note, the overall art direction maintains the painterly aesthetic of the original game. This is especially pronounced for printed materials (photographs, magazines, posters), which are very impressionistic. There are a few specific areas, though, where objects look much more realistic and detailed. It isn’t bad, and isn’t especially noticeable, but did seem slightly jarring. And... it's been a while since I played the original, do the mirrors in there work? Because the mirrors in this game look awesome, and I feel like that's a new thing.


They’ve done a phenomenal job at recreating the locations of the original game. I’m actually really curious about the technology behind this: from what I understand, the original was build in Unreal, while the new one is in Unity. I’m not familiar enough with the modeling systems in them to know whether they could just pull the original assets over and modify them, or if they needed to rebuild them from scratch. If the latter, I am very impressed by the result!


Along the same lines, the change in voice actors is somewhat noticeable, but doesn’t really take me out of it. The new actors do a good job at capturing the overall tone and rhythms, and are pretty easy to buy as being the same characters. Some, like Joyce in particular, are dead-on replications. Only a few, like Dana, feel a bit off. Most are in the Chloe range, where you can sort of tell that it’s different, but it’s so close that it doesn’t really matter.

MINI SPOILERS

I do like all the subtle ways that they’ve updated the game mechanics and systems to match the new protagonist. The collection system is a great example. In OG LiS, Max took photographs at certain interesting sites. The overall idea in BtT is the same, but since Chloe is a juvenile delinquent instead of a budding photographer, she tags spots instead of capturing them. One thing that I really like about this is that there’s a choice involved, where you get to decide WHICH of two potential pieces of graffiti to write. I really dig how this can be an opportunity for expression.


Speaking of expression, I like that you can change your outfit. I’ve mentioned this before, but I am WAY more invested in my characters’ appearance in video games than I am in my own appearance in real life, and I spent a lot of time trying on different shirts and mulling various looks. It might seem like a little thing, but I like it a lot: another chance for you as a player to impact the game, and in subtle ways it can change the overall feel of the story. (I thought that I read somewhere that other characters would react to your sartorial choices. If that’s the case, I haven’t noticed it yet. I hope that that isn’t something which is only available for the default outfits - it would be a bummer if everything BUT the deluxe threads had something special associated with them.)


The journal has changed a bit too. The overall idea is the same: when you complete a major area, another page or two are added that describe your actions and your thoughts about them. But in this game, they are letters that Chloe is writing to Max. She never plans to send them, but they’re the things she would want to tell her if they were still speaking. These are great, especially Chloe’s voice in them, but they’re also wonderfully heartbreaking, since each time you are reminded of the multiple gaping holes in Chloe’s life.


One change that I was initially a bit apprehensive about was the addition of “backtalk”. This is sort of a conversation mini-game where you try to persuade someone by arguing with and/or insulting them. It’s totally in character for Chloe, and has a lot of great lines associated with it. I was a bit bummed by the addition of a timer, which feels a bit Telltale Games-y and contradicts the overall mellow play-at-your-own-pace vibe of the rest of the series. That said, in practice I’ve been enjoying it a ton. It’s always very clear when you’re entering Backtalk, so you can mentally prepare yourself for that, as opposed to the QTE-style surprises that bug me in other games. It probably helps that I’ve been doing pretty well at them; I’ve beaten every one in the first episode, and in fact, only had one point of one node where my opponent managed to “land” a single argument.

MEGA SPOILERS

One point of minor controversy in the community leading up to the release of BtS was concern that the new developers were un-gay-ing Chloe. I avoided all pre-release gameplay footage and stuff to avoid spoilers, but apparently there were some comments along the lines of “Oh, you can decide whether Chloe likes Rachel or not” that rubbed people the wrong way. I am please to report that Chloe is, canonically, hella gay: even outside the choices your character makes, you can infer her preferences from her words in the journal, the art on her wall, etc. (One wrinkle is her relationship with Eliot - she makes it clear that she hooked up with him, but equally clear that she doesn’t have any emotional feelings for him. The only people she sounds interested in are women. I think that’s very much in keeping with her portrayal in the original game, where she had condoms in her jacket but 100% of her focus is on other ladies.) Especially considering how low-key the first couple of episodes in LiS were, with lots of subtext and the big movements only happening starting in Episode 3, I feel like they’re running ahead of the curve on this iteration.


To expand on that a bit more... yes, it's true that you can help guide how Chloe responds to Rachel, and can make a big choice near the end where you can confess romantic feelings or simple friendship. But it seems to me like this has more to do with this specific relationship than with Chloe's identity. Deciding that she wants to be friends with Rachel doesn't suddenly turn her het. It might be that her feelings for Max are too strong (and, wow, that journal is intense - "Put your thoughts in me"), or her grief is raw, or you just don't think they're clicking. Anyways! This probably isn't a big deal to most people, but I'm happy with how they seem to be handling and portraying her identity.


The episode feels decently long and covers a lot of ground. It felt a little like going through a compressed version of the entire five-episode arc of the first season. We have the sense of peace and calm that permeated episodes one through three; the intense emotional outburst in the junkyard here rivals the similar scene in episode four, and may even exceed it (I think enlisting the player in this sequence as an actor and not a spectator is brilliant game design and really effective); and the dream in the car is a lot like a short version of the episode five nightmare, especially in the journal and cell phone. So, that was all good on its own - it feels like we got a lot of meaty stuff right off the bat - and also is super-encouraging since it's a good demonstration of their ability to hit all the right notes.

END SPOILERS

So, yeah! It feels like things are off to a really solid start so far. Especially considering my uncertainty around the change in developers and actors, it’s been a pleasure and a relief to have such a satisfying outing. I’m already feeling regretful that we’ll only get three episodes of this story and not the five of the original. But, that’s what all great art does: leave you wanting more. For the most part I'm content to wait and see what they have in store for us next; my one specific hope is that they can bring back Ash and Hannah for the bonus "Farewell" episode. Fingers crossed that the strike is resolved by then; if not, I really hope that they can find a way to involve Hannah similar to how they've enlisted Ashly. Maybe she can perform a song or something?


I took an insane number of screenshots while playing this. Like, seriously, an average of five per minute over the 4+ hours I played, it's probably the most photo-dense game I've played. I'm too wrapped up in my Shadowrun stuff to properly annotate them at the moment, so I'll either edit this post in the future or maybe make a small one-off post with them once they're finally sorted and ready.