Sunday, July 02, 2017

More Modding

Astute readers of the blog will probably have already deduced this by my decreased posting rate lately: I've started work on a new Shadowrun campaign. In the past I've waited until a project was done before announcing it. This time around, I thought it might be interesting to do a dev log, showing brief snapshots of my progress. My tentative plan is to do one post a week, with some info on what I did since the last post and occasionally giving a bit of insight into the process.

There's definitely risk around this. I'd estimate that there's about a 50% chance that I actually finish this thing, which is a big part of why I've been reluctant before to reveal that I was working on something. And I don't want to get peoples' hopes up too much... even if it does happen, it probably won't be finished for a very long time, possibly 2018. Still, I'm hoping that by doing this I'll be able to avoid some of the malaise that tends to afflict me in the final stages of wrapping up a mod, and focus more on the progress made so far.

I'll be careful to keep any plot-related info out of these posts, but folks who want to avoid all info about locations and characters might want to skip them.

First up: maps!

Maps are the hardest and most frustrating part of modding for me, so I like to get them out of the way early on. This lets me maintain momentum in the inevitably grinding home stretch.

For the rest of this post, I'll be focusing on the one particular map that I happen to be working on right now, Sutro Baths at Land's End. I've visited this location in San Francisco several times and it was an early entry in my list of planned locations for this game. A Google Image Search brought several references to my fingertips, and I had a couple up on my monitor while working on this map.

I make a simple sketch of the map with pen on paper. At this stage I'm starting to think about how the player will move through the map, where they might encounter combat, potential locations for puzzles, and interesting visual or mechanical possibilities.

Next, I block out the rough geometry of the map. At this point I'm just focusing on walls and floors, defining the shape and size of the area. I'm looking to the original references for inspiration, but not trying to realistically recreate it: this is a game, so I'm much more concerned about creating a fun space to move through than an accurate representation of this location. I'm trying to capture a few of the iconic aspects of this area (the coast, the inland pool, the ruins, the walkways, the tunnel). Ideally, if someone has seen this location before, they will feel a little frisson of recognition. But whenever there's a tension between realism or fun, I'll always err on the side of fun.

This particular map has two zones, outside by the coast and inside the tunnel. For maps with a particular marquee feature I'll spend a bit of time prototyping to ensure it displays correctly, but otherwise I'm keeping things simple at this stage.

You may notice some junk at the lower left of the screen. This is the "graveyard". While working on a map, I'll drag out a bunch of different tile pieces and props that I'm interested in and place them off the edge of the visible map. This makes it a lot quicker and easier for me to see the size and colors of different options. I'll keep the graveyard around throughout the time I'm building the map, and only delete the stuff there at the end.

Here's a zoomed-in view of the coast map. Pretty bare! Don't worry, it will look a lot better once we've filled it in.

This is a relatively unusual map in that there are no interior walls, leading to wide-open eyelines. Rifle users and mages will be especially powerful on a map like this, while melee fighters will suffer. At the same time, there are some areas with interesting strategic implications, like the walkway over the water. This is a key chokepoint that can limit movement through the map; a shaman who can lay down a barrier here could help control the flow of battle.

Next up is the phase I call "decorating". This is filling in the empty space on the map. The most important aspect of this is cover: adding items behind which combatants can crouch, making them harder to hit. But I'm also adding lots of items for visual interest and to break up the monotony of the terrain.

As noted above, I'm looking to the original location for inspiration, but my actual decisions are driven more by practical concerns. While the actual Land's End is pretty open and windswept, that would lead to dull (and dangerous!) gameplay, so I'm more generous with placing shrubs - they're evocative of the greenery here, if not completely accurate. (Whenever inaccuracies bum me out, I just remind myself that this is set 45 years in the future in an alternate timeline, plenty of opportunity for things to change.)

I have a lot of fun with the tunnels. I've always been oddly drawn to making creepy subterranean spaces in this engine, from the passageway underneath Club Antumbra to Mission Creek under the Armory to the Colma crypts. I take a different spin this time, using some of the Hell items from the Black Lodge in Glory's personal quest, together with classic Hive props from Dead Man's Switch and generic mystic supplies.

Okay, here is the map, all decorated. My final stage is what I refer to as "atmosphere": adding all the dynamic elements that help bring a map to life. This includes:

Ambient and directional lighting. I will often look to the official HBS campaigns for inspiration here. In this case, I want one coastal location during a thunderstorm, and one cave interior.

Dragonlines (leylines). Because this is a high-magic area, there will be relatively more of these and more powerful ones. A lower-mana zone would just have a couple of light lines.

Effects. I love these! By now there's a huge roster available. There are a few go-tos I include in almost every map, including FX Steam and FX Falling Sparks. But I'll always review all of them to see what else I can use on a given map.

Ambient audio. If there's a good region-level ambience available, I'll add it, but for this particular map I'll be customizing ambience later. However, for the first time in any of my campaigns, I am making use of the Ambient Audio Node, a nifty new gizmo from Hong Kong that lets you place local looping audio effects, including options to automatically adjust the volume as you approach. I've built a master list of all the ambience nodes used in the SRHK and SoHK campaigns, and will review it for each map to see what I can use.

Point lights. Here, too, I'll generally look to the HBS maps for inspiration. I've come up with some of my own conventions, like using violet lights above ambient magic FX. I generally try to space lights so that they slightly overlap one another, but it's OK if there are some areas that are unlit or have more lights.

Here's the map after ambience is added. It looks similar to before, because most of the new stuff isn't directly visible in the editor, we'll need to test in the game for that.

Speaking of which: time to test!

No matter how often I do this, I'm still impressed when I actually fire up the client and see my stuff running in it. It looks sooooo much better than in the editor window.

That said, there are still problems to fix! I spend this time running my character around the map and looking for issues. The most common problems are:

Prop clipping. This most often happens when you place one object in front of a wall; sometimes, half of the object will get hidden behind it. Usually you can see this problem in the editor, but occasionally it only manifests in the game. When that's the case, I can generally nudge it .10 units in the other direction and it will appear correctly. In drastic situations, I might move it to another location or remove it entirely.

Ugly seams. I've gotten better at avoiding these, and the more recent props from HBS are better as well. Lighting will often fix this problem: things that look awful in the default 128/128/128 gray coloring will look fine in a more realistic dark-blue light. Conversely, if it's being brightly lit by a point light, I'll try and drag it further away to draw attention from it. Sometimes, it's simplest just to drag another item in front of the seam, papering over the problem. And in the worst case, I'll go back to the drawing board and get rid of the original items, replacing them with something new. This is particularly true of roofs - I've learned the hard way that some roofs just look awful, and have come up with a list of ones that actually tile nicely without huge ugly gaps.

Blocked passages. Sometimes a wall's declared geometry will stick out further than it visually seems like it should, preventing you from moving past it. This usually just requires shoving things 1 unit to the side, though sometimes I'll shuffle around other obstacles to clear up space from the middle.

FX placement. Unlike props, which are immediately visible in the editor window, I can't really see where visual effects will render until they're in the engine. So I'll spend some time nudging them around to make sure they appear correct.

This particular test run had a couple of additional problems. If you played the video above, you may have noticed severe stuttering. That wasn't an encoding problem: the actual game got really choppy at that point. From previous experience, I suspected that a faulty FX was at fault, and sure enough, after removing it everything sped back up nicely.

I continue to test the scene over and over, checking each of my fixes until I'm happy with it. Or I should say "happy enough". There's always going to be some ugly stuff, but I've come to realize that most players won't even notice the things that can drive me nuts. Even the official Harebrained Schemes maps have lots of little glitches, which modders will immediately focus on but the majority of players will happily ignore. So, once things are looking about 90-95% right I sign off on it... those last few things will be too big of a headache to fix or have problems inherent to the asset or engine itself.

Once that's all done, I pat myself on the back and commit the map to source control, delighted that I am one step closer to being done working on maps. I'll probably need to make more adjustments in the future once I add the actual gameplay elements (enemies, NPCs, puzzles, etc.), but the hard grinding work of map creation is mostly done.

Okay, that's it for this week! This post was a lot longer than I expected. I'll try to continue to share relevant screenshots and stuff, but probably won't write as much for future updates. Cheers!


  1. What do you use for screen capture video streaming?

  2. Excellent. Thanks. Reading through your dev blog for CFIC, hoping some of your insights and greatness rub off a bit. Kinda concidering a new project myself...