Megafuzz Dev Blog

Nerdy rants on programming and game design

The Dialogue System

Talking About Talking

If you've read the first blogpost, you will know the game I'm currently working on is an RPG with heavy emphasis on dialogue and moral choices. To this end, one vital part of developing the featureset for the game is making a robust dialogue system. I had a good idea of what I wanted it to be able to do before I set out to make it, and one of my main goals was to make a very automated system that, when properly set up, would be able to handle just about every situation I could throw at it and automatically handle everything for me after being fed a single file for each encounter - one single file containing all relevant data - beyond just dialogue.

Here are the bullet points:

  • Based on external files to accommodate for localization, easy fixes, updates and possibly modding
  • Needs to work in seamless conjunction with the internal quest handling module
  • One file for each conversation should provide everything - not just dialogue, but automated handling of quest data, scripted events etc.
  • Wildcard attributes in a file can do stuff like changing in-game values (money, health, good/evil points etc.) at specific points in a conversation
  • Should also be able to change facial expressions at certain points, determine who's talking to who - maybe a second NPC suddenly gets involved
  • Handle dynamically created, context based dialogue option; based on certain criteria like quests, weather conditions or other factors
  • Needs to be able to show customized control keys (images and/or text) - with localization taken into consideration
  • Anyone, regardless of programming skills, should be able to create content for the dialogue system with very little to no need to read documentation

So let's look at them one by one in a bit more depth.


Moving Around

Reworking A 5 Year Old Mess

As mentioned in the first blogpostRonn For Your Life is a project I started back in 2011, worked on it for a few months, and then put it on hold for personal reasons. So when I picked it back up a few months ago, the codebase was more than 5 years old. I've developed a lot as a coder and a game designer since then; things I didn't even think about back then are now glaringly obvious to me, and needed a complete rework. Back then I just coded away until stuff worked, then proceeded to the next task.
Today I do things different; make the simplest things you will be doing 90% of the time feel good on their own before doing anything else. Just moving around should feel good even with nothing else in the game; if such a fundamental part of it doesn't feel good, the very foundation is built to fail.

Just moving around did not feel good. In fact it felt horrible. I had slapped together some very basic movement and collision that was sketchy at best, and buggy at worst. Basic platforming was too hard and frustrating, because the collision system required jumps to be pixel perfect to register; and bumping the game up from 30 FPS (my standard back then) to 60 FPS just made the collisions run twice as fast, demanding even more machine-like precision from the player.
You might be one or two pixels from the ground (thereby technically not allowed to jump), but at 60 FPS you won't register the difference, making it look and feel like the game's fault. I analysed the problem and concluded that I needed to introduce 3 steps, which I will discuss below.


Mundanity of Death

Almost all games has some sort of task that happens several types throughout the game, which, if used too much or not designed carefully, can end up feeling repetitive or mundane. This can be just about anything that is iterated again and again throughout a game; but one common culprit of this is combat. So today, we'll talk about how we can try to remove mundanity... of death. But bear in mind, this can be applied to just about everything.

So, throughout most games with combat, including Ronn For Your Life, the player will encounter numerous enemies every now and then. These can be anything from small annoying mob-types to big bosses. Obviously, in most cases, the majority of space is taken up by a small army of the lesser enemies - in some ways to make the contrast of the big bad boss even more impactful. This isn't necessarily a bad thing, because it gives the player something to do, and if done right, it's fun and doesn't end up feeling grindy.

However, a common pitfall with fighting these small enemies is that it can very quickly end up feeling pointless, grindy, even mundane. Death should never be mundane. Combat should be exciting. Some games introduces loot as a reward for fighting off otherwise mundane enemies, which can make the grind feel more tolerable when you finally find that awesome Long Sword of Bloody Ogre Decapitation +3. However, at least so far, I have no plans to introduce loot (at least of that kind) into Ronn For Your Life.

So what do I do?


Ronn For Your Life

No, It's Not A Typo, It's A Game

Ronn For Your Life is the title for an upcoming game I'm currently working on. It started out as a very personal side project, but lately it's been getting clear to me that this will become something more, and I have been spending more and more time on it. Even the times I should be allocating to some of the many other projects I'm currently joggling seems to be naturally gravitating towards this project. There are several reasons for this, but first and foremost is - like I mentioned - this is a very personal project. It's quite literally my story. Or at least one of them.

Like the project itself, this blog post will be very personal. This won't exactly be a typical devblog type of post. Although it will touch on concrete game-related discussions, it will be more personal than any other devblog related stuff I've ever done anywhere else.

So, let's dig in.