How hard can it be?

Writing has never been this hard. Of course this isn’t the sort of talk you’d like to hear. A creation should come into being with natural elegance, should it not? Strain means dull work and the smell of sweat, lack of ideas probably, etc.

Or not. Once I co-wrote a play with a friend (Jaak Tomberg Everything was nearly finished, but three scenes remained to be written. With a clause that it’s me that wants to write them (we generally took turns at writing and switched between techniques, at times either of us wrote every other sentence). My friend was becoming impatient. The deadline was approaching. The clock was ticking.

It wasn’t an old school inspiration thing, it was rather like a chess puzzle you construct in your head with no clear shape, inexpressable as a graphic presentation. The field of text is laid out in your head and lone sentences are situated on it as protruding points of tension. But these are not worded sentences and they don’t express any fully formed thoughts. Everything falls into place at the moment you are finally ready to lay it all out, get it out of your head.

In the end, the time was right. Rather a question of decisiveness than finding a way: „I’m going to do it now.“ Later, when it was ready, I sat on the ground with my back against the wall, as if I had just ran 10 kilometers at my top speed or wrestled for an hour against a strong opponent. The fatigue was aggressive, sudden and physical.

This sort of thing is almost completely absent in game writing. The concentration part is there. The graphical chess scheme of structure and developments is there. The sentences still appear from the darkness. But rest, there is none. Rest always comes when the thing is ready, or, when running, if you can stop. There’s no such moment in game writing. It isn’t ready for months. All relief is temporary. For a moment it feels like something fell into place, that the eternally branching end of the dialogue has somehow logically found its way back into the main hub. But then you realize that the ends of all the other branchings haven’t made it there yet. And they will not go willingly.

So you have to force them. Every moment, all the time, there’s forcing of a logical structure. Like some kind of damn landing of Normandy. Taking it with force.

The main difference from all other writing (and I’ve written much of whatever else, starting with D&D campaigns and ending with opera libretti and scientific articles) is that you have a thousand endings. It doesn’t surprise neither you nor Deleuze, but it takes you to a place our lead designer Robert Kurvitz has described frankly: „While writing a book you always have lots of good ideas which you won’t write because they won’t fit. When writing a game you’re suddenly in a situation where you’re obligated to write down all your good ideas, and you’ll learn with unpleasant clarity if they were good ideas to begin with.“

While engaged in just that, we’ve encountered a little problem with Articy: Final Draft, the program that usually helps us tackle those thousands of branching endings. Sometimes it doesn’t. It seems possible that the size and complexity of our dialogues has reached the limit of Articy’s traction. It’s developers probably didn’t expect interactive literature to sprawl explosively like a borderless field of text (as it exists in the writer’s mind in its proto-being). And now we’re in a situation where we sometimes have to wait for the letters to appear on the screen with excruciating slowness. Nvidia GeForce GTX 980 is almost capable of rendering reality in real time, but Articy has some disagreements with it. We generally hope for Articy’s very flexible team to offer us their helping hand at some moment (and we are well aware it won’t be easy).

Another option is to rework our plans and start working on a dialogue editor instead of the game. You the public wouldn’t like this and you have every right to presume that we will not. However, it certainly couldn’t happen before the thousand ends of No Truce With the Furies have converged into a single concrete mother-node and made accessible to you.

articy textfield
A field of text.


Village Concept Art

I always enjoy learning how other artists work and seeing how images come together. In that spirit I have taken to a habit of saving periodic work in progress shots of my own pieces as I spend time on them. Here’s a rundown on a piece of concept art relating to a more run down part of Martinaise.

(Absolutely masterful punwork there if I do say so myself.)


There’s a general back and forth over many quick and ugly thumbnails where we get a basic idea of what’s what with the writers. This is where most of the level design gets worked out. We talk through what the main plot points dictate for the area, we figure out pathways how the player should move through the location and make sure there’s elevation changes so the bare geometry of the area looks good and casts interesting shadows. The player is free to pan the camera around as they please but each location is designed with a certain composition in mind. There’s a an abstract shape to each area that subconsciously feeds into the atmosphere and how the player perceives a location. There’s an asymmetric balance to the region where the center of mass lies on the field amidst the huddle of houses with a protrusion leaping out. In artist-speak there’s “tension” in that.


I block the level with basic 3d shapes and we test it in engine to see how good the distances and sense of scale feel. From here it’s pretty useful to just screencap the block-in from the viewport, run a find edges filter on it in Photoshop and use that as the underlay on which to start drawing. The light grey lines up there are just that.


This is the “draw the rest of the fucking owl” step. Finishing up on the linework. When thinking about what exactly to draw and what reference material to gather I want to avoid generic finishing village photos lest it becomes another place you’ve already been. Instead I look for photos of old dachas. Point is that poor people live here, not ye old timey fisherman cosplayers.


Once the drawing is sufficiently far along I start blocking in the shapes with flat fill colors. As I go along I go back and draw some more bits and pieces here and there since I’m impatient like that. But the idea is to start getting some sense of what the scene might actually look like. For convenience I keep every shape on its own layer so I can search around for colours by just dragging the hue slider around on each individual shape and layer.


Another bonus to keeping stuff on seperate layers is I can lock the opacity for each of them which allows me to take a wild textured brush to the canvas without fear of ruining the edges. It’s a good technique in general for more illustrative pieces where the point is to convey practical information rather than to show off the brush stroke of a painting.


The shadows here come from the 3d block in I made earlier. I multiply it over the image and clean up where needed and add bits and pieces to the shadow layer where I’ve drawn new stuff not present in the block in. There’s a bit more to do but it’s mostly just detailwork and cleanup, it’s pretty much done by now.

And here’s the final piece:



New Tech Day: Occluding Clothes

Hi there! Here’s a quick writeup of how we occlude wearables, mainly for coming back to when future me is puzzled over his past decisions.

No Truce’s fantastical realism does not lend itself to clearly distinguishable character classes that look so much alike you could get away with just a texture swap. What we have is more or less everyday clothes on more or less (mostly less) everyday people. That calls for underwear, shirts, pants, boots, coats, hats, gloves, etc. In other words, a truckload of assets to be combined in a truckload of ways. That, in turn, means a lot of mesh clipping if you’re not careful. The problem with careful is that it’s time consuming and not fun at all.

Naive approach

The initial plan was chopping the character base mesh into pieces and hiding the meshes not visible under current apparel. That would include chopping up shirts which could be partly covered by a coat or a jacket. And trousers which could be partly covered by various lengths of boots. Or the other way around. Referential joke: Hey, that’s even more chopping than Hugh Jackman.

“Buttoned up, under cloak, sleeves rolled, high waist pants, disco pants. WHERE DO WE CHOP?”

This is apparently where most technical artists put their foot down and ask character artists to start standardizing their clothes. But I’m a people pleaser and wouldn’t dare tell kinnas how to art, so I prefer sorting things out before opting for the “technological limitations” excuse.

A less naive approach

(Did he just call industry’s standard methods naive? Read on to find out.)
Since we’re in the privileged position of not pushing many polygons, we don’t really need the polygon reduction from aforementioned method and could actually just get away by making the underlying geometry invisible.

And once we’re just setting transparencies, we don’t even need to do it by polygon. A low-resolution map will suffice.

However, we still have a few problems to solve:

  • each article of clothing does not know what it occludes or what occludes it.
  • each article of clothing is an arbitrary soup of polygons that does not know or care where on the body it sits.

For the time being the former will be handled by a simple script which places assets into an array (hat/coat/shoes/etc)and they will occlude each other in a static order.

The latter is a more interesting task however. To avoid any time-consuming proximity baking, we will need to describe the body mesh and the wearable assets in a single topological space.

We will define an additional UV map to each asset to describe just that.

Enter the Vitruvian Map

Da Vinci would be proud.

Instead of overwhelming our 3D modelling pipeline with tens of edge loops to consider, we simply add the task of mapping your object to the Vitruvian Man above…
Jacket mapped to the vitruvian man.

…and making a little b/w map to describe where the object occludes. (could be automated I guess)


Jacket’s occlusion map to be applied to underlying layers of clothing.

In engine, we loop over the array of clothes, grab the vitruvian map as we go from outer to inner layers, multiply it to the previous ones and apply it to each layer. So a shirt will receive the jacket’s vitruvian map and body will receive the shirt’s vitruvian map multiplied by the jacket’s vitruvian map and will thus be occluded by both. Use the multiplied maps to dictate alpha cutoff and you’re done.
The jacket’s vitruvian applied to body alpha. Cascading nature of this method not illustrated.

Completely unrelated

Sometimes we keep buggy code to use for a potential dream sequence.