Dev Blog 7: Dialogue Engine and Combat Improvements

I didn't get around to writing a development blog post for June, but I did get lots done during that time, so this dev blog will have to get caught up on two months worth of work.  The main thing that I worked on in June was the dialogue system, while July saw a number of improvements to the combat engine.  I also made the decision a couple of weeks ago to change the perspective from a flat cartesian co-ordinate system to an isometric view.  So let's dive into what's been added to the game over the past couple of months.


I considered writing my own dialogue tool, but before I got around to it I discovered the excellent ink tool released by Inkle Studios, who are most well known for the excellent visual novel 80 Days.  ink is the framework that Inkle Studios uses in their own commercial games, and I found that it fit my needs perfectly.  The dialogue portions of The Last Virtue were always planned to be a bit visual novel-ish (if you've played The Banner Saga, the dialogue trees there are pretty close to what I'm aiming for stylistically), so it seemed like going with ink would work quite nicely and save me a lot of work as well.

ink is built with Unity integration in mind, and it really was quite easy to get integrated into The Last Virtue.  I really only needed about one weekend to learn how ink works and getting my dialogue trees up and running.

That said, while ink turned out to be a quick way to get dialogue trees into my game, and I really like its scripting format, what I'm going for isn't really like a visual novel, with its pre-authored, branching narrative.

The design on the dialogues in The Last Virtue isn't entirely finished, so this is all subject to change, but like the rest of the game, conversations are going to have a fairly significant procedural element to them.  Most conversations in the game are either going to be conversations with their bounty targets or they'll be conversations with someone the player hopes can help them track the bounty down.  Because of that, the conversations will always pull in elements from the player's current bounty, whether that's the current location, the type of crime that's alleged to have been committed, the motivation for committing the crime, and so forth.  Conversations won't be entirely procedural (I can't author infinite content), but they'll be a bit different every time, and they'll always be full of details that are drawn from the particulars of any given bounty.  So suffice to say, it's requiring a fair amount of work on my part to customise how the game interfaces with ink.  But I think it's going to be very cool once there's enough content there to start actually generating these unique stories.


There were some pretty major changes made to the combat engine in July.  One of the most important is that the game now has path-finding.  Characters know how to get from point A to point B and will animate along that path during movement.  Next month I'm planning to include some GIFs to show off how this and other things in the combat engine work.

I've also added a number of things that change how damage dealing works.  Originally all attacks just had a flat attack value that they did every time.  So if an attack did 3 damage, it always did three damage.

Now characters can have a damage reduction stat, although not all characters will have it.  Since damage reduction (DR) is a statistic, the player (and AI) need a way to manipulate it, which means building abilities and status effects that ignore DR or reduce it for future attacks.  Even with a very simple version of this in place, it's created a lot more variety in the combat in my own testing, which was exactly why I thought it would be a good mechanic.

The other big change to combat is that I've added a status called "Distracted" that will affect characters hit by melee attacks.  The idea is that the first opponent that attacks a character on a given turn takes that character's attention; the character will turn to face their opponent to indicate that.  Then, because the character is distracted fending off the original attack, each subsequent opponent who attacks that character will get a damage bonus.  The Distracted status also creates variety and increases the amount of strategy in combats, since players will want to find ways to surround enemies while avoiding leaving their own party open to those attacks.


I made the decision to change the view from straight-on to isometric.  It will result in a nicer look once there's non-programmer art in the game, and it also cuts down on the amount of animation required by about 1/3.  So I think it's going to make the game better, even though it did take away time from developing new features for a bit.  The switch to isometric is mostly complete in terms of code rewrites, although there are a few things here and there to clean up (pathing doesn't look very good at the moment, for example).

One reason I made the switch now is that I'm planning on completely re-doing the user interface during combat in order to make it look nicer and bring it a lot closer to what the final UI will look like.  Because the isometric view changes what portions of the screen are available, this seemed like a good time to make the change.

I don't have anything to show in terms of the new UI yet, but I hope to be able to finish it in August, so next month I'll have some GIFs of what the combat looks like in action with the new interface and isometric view.