Afterthought system for dialogues

Since this devlog is all about skinning milk cartrage assets in SKUyA — I make this remark with deep apologies to our technical artists, SKUyA is not a real thing and no one “skins” anything — I thought I’d share a little “RPG stuff” with you. For good measure. It’s this little trick I might have implemented over the weekend. It’s called afterthoughts, because L’esprit d’Escalier was too fussy to copy-paste in this post.

For those unfamiliar, L’esprit d’Escalier or Spirit of the Staircase is a cute french expression for the predicament of coming up with a perfect reply too late. I.e. when the conversation is already over. When you’re walking down the staircase and suddenly the perfect witty reply or devastating argument pops into mind. Well — how would that work in an RPG?

I haven’t, technically speaking, seen it work in engine yet, but I think we have the answer.


In No Truce, you have conversations with a lot of people. But the person you’ll have most conversations with — is yourself. We use this literary device a lot. We’ve even built special systems to facilitate it. Systems like our sense orbit, that lets skills pop up outside dialogues. Basically, we designate areas and then — if you have a high enough skill — said Skill will pop up there. Click on the skill and you can have a conversation with it (a part of yourself), if you like.

For example: you step on a stage, Drama pops up and asks you if you feel at home. This grounds you in the world more. We can even give conditions to these pop-ups: click on a drainpipe, it says: “rainwater is gushing out.” Then go down the street, Visual Calculus pops up and tells you the street is tilted to east, because the water only streams there. (No click on drainpipe — no get this pop up. Conditions!).

So, using these building blocks, we can do afterthoughts too! Even exactly the same L’Esprit D’Escalier effect I described before. Say you’re in a conversation. With a colleague from the RCM, the Revachol Citizen’s Militia. You get into a little argument over an irrelevant detail, then go back to the main topic. You end the conversation and walk away. So far so usual. But the area around the colleague you just talked to is designated as the area where a medium difficulty Rhetoric pops up if you had the argument before (the condition is met), and you have enough points in the Rhetoric skill. You then click on the little Rhetoric orb on your head, this starts a dialogue. Your Rhetoric gives you the perfect thing to have said. If you’re nice to it. Some skills are touchy. (Yes, really).

Then turn back to that colleague of yours. The argument appears on his main conversation menu. You choose it. He replies with something like: “You literally just came up with that four meters away. I could see it on your face, you made this…” (Makes crooked face) “stupid face, like you were trying to come up with something.”


Postmodern tricks aside, afterthoughts let us make our dialogues shorter and leaner. No Truce is a talk-em-up, but conversations still need to have pacing. And under pacing I mean they need to be FAST. The quicker the better, so as not to become chores. On the other hand, we like to pack in as much content as we can for different character builds. The detective with perfect encyclopedic knowledge wants to pick up trivia and discuss that with his colleague. The physical character wants to get Half Light anger flashes (more on that another time) and hound the suspect on a stupid suspicion he has. Putting all these skills in the conversation, however, slows down the tempo and leads you into tangents. This draws attention from the main dynamic of the conversation.

We work on some dialogues for well over a month. In this time a writer-designer gets many weird, adventurous ideas for different skills to add. Afterthoughts could be a way for us to keep dialogues leaner while adding more content for different builds. A win-win.

In theory.

It may be annoying in practice, who knows. Right now I’m quite excited about them. I made a bunch of these micro-dialogues over the weekend. Who knows, maybe there’s even a gif added to the post, illustrating one pop up…



Audio & Action

Hi! I’m a programmer. I do this and that. I implement, integrate and innovate. Let me tell you some tidbits about sound and cutscenes.

It would be great if all audio related code and components could operate off of a single central sound manager. Then some customization could be possible in Unity so our sound pipeline wouldn’t be a convoluted mess full of tiny changes.

New conundrums arise while attaching sounds to stuff. For example a case where an action can be performed quickly in succession:

  • Do you just play the sound each time?
  • Do you just cancel the effect and play it again from the beginning?
  • Do you crossfade the second bleep-bloop into the first bleep-bloop effectively making a single bleep-bloop that still sounds nice but indicates a repeated action?
  • Do you do something completely different that really fits the visuals but is kind of tricky to construct?

All of these solutions have their uses in certain situations. First two can be implemented fairly quickly. The third one – which seems like a nice general solution – needs to keep tabs on all sounds that are currently playing and perform a crossfade of different sounds. The fourth approach can be a combination of anything and everything. That’s why we are using Master Audio for audio management. It already has these kinds of functions and it’s a component we would have had to craft ourselves if it hadn’t already existed.

So once we had our basic necessities covered we could focus more on our specific needs. The camera and character moving to certain spots should change the ambiance and music in a meaningful and mindful way. So we created something that could be called a sound map! A collection of triggers embedded into the earth which send directions to Master Audio through an interpreter which has information about the current soundscape and keeps the changes logical and deliberate. This sound map can hopefully solve increasingly complex audio situations with relative ease.

Actions that the characters do are more often than not intricately weaved into the dialogue. The dialogue system and articy have “stage directions” (third party support between assets and environments really makes me feel warm inside) which are tools to make sequencable commands. So with a little preparation it would be possible for any member of the team to use these high-level commands to program the cutscenes. This means it’s important that different animations and actions automagically fit together so the whole system is as dynamic and modular as possible. Otherwise our animators would have to redo every animation after each layer of polish.

That’s it for now. Until next time.


Using mocap

Hi! I am going to briefly talk about how we use motion capture in our development. Now our final playable game will not use motion capture data in-engine at all. Hurray! The reason for this is that it’s not fun to retime mocap and make it loopable if necessary. The animation curves on the mocap skeleton contain a keyframe on every single frame making it a lot less manageable. It is possible to optimize mocap data but the ending result is going to be unpredictable and jittery. So instead we use a custom rig to drive the skeleton, allowing the animator to put in keyposes, control the in-between frames by graph editing and achieve a completely predictable outcome. Also we can’t use mocap because at some point we could decide that we need motion that is really difficult for the mocap-actor to perfectly perform.

Like the title says we somehow actually still use it. Yes, but only as reference. It’s a lot better to see motion from every angle. We also use video as reference and sometimes it’s enough to just look at a coworker or some random people on the street acting stuff out.

When we started working on animation, we got an idea that maybe mocap could be a good way to really quickly get placeholder animations. Unfortunately it was too time consuming and we were not sure if we should invest in proper mocap equipment. The cheapest and fastest way for us was to use two kinects and they did a pretty good job as seen below. 😀