An Indie Oldschool Role-Playing Game

Developer Update #6

Developer Update #6

on Jul 8, 2014 | 4 comments

Hello dear followers of the DarkDale project… It’s been two months since the last post, but don’t worry, these two months have been really productive! If I didn’t post earlier, it is because I wanted to get a fun gameplay video to show the progress made. So, check out the video… and read the news!


Let’s save the day!

First thing’s first, I’ve finished refactoring the component system to make it more modular. As per the roadmap, this allowed me in turn to implement serialization, or, in more common terms, save and load functions. So yes, you can now save and reload! But more interesting is that the actual saved game is not a simple dump of all the component data, but a Lua script that reconstructs the game state based on the game object definition files and the player’s progress.

What’s the difference? Well, this system means that you can update definition files and reload, and the game world will include the update. This will prove invaluable for:

  • Speeding up development where item or monster statistics can be adjusted on the fly for balancing purposes, dialogue typos corrected and visual glitches adjusted with models/textures.
  • Making issuing patches to the game once released compatible with games players already started.
  • Allow for mods to also issue patches/updates without compromising savegames.

Of course, not everything in the game will support this hot-reloading, but enough to make it worthwhile and fun to work with.

Is that a main menu?

Yes! With the rewritten code, the actual “game” and the editor are now separate structures (before, the development build was always running as the “editor”, and playing was made through the editor’s preview function). This was more complex than it sounds to make sure memory was properly cleaned between game sessions. So you can now switch between modes, enter/exit gameplay, save/load, with progress bars… just like a real game!

A staircase!

Another big development push was getting multi-level environments working. The city was already built in multiple levels, or horizontal slices; however, the party could not travel up or down. This is now fixed by the addition of stairs, as well as all the code to manage them. How does it work? Every level has a levelGroup property, and consecutive levels which are part of the same group are rendered and updated together. A lot of work was put into getting the party camera motion to have the right “feel” for the stairs, which also led to include subtle up/down head movements when walking around on flat terrain. If you can’t notice it much, all the better, that’s what “natural” stands for. All this will make for interesting environments where dungeon crawling will also happen upwards and downwards, not only in a flat 2D space.

Play us a tune!

I’ve also started composing the soundtrack for DarkDale. I will eventually do a more in-depth post about the musical vision, but for now let’s just say that I am going towards a more “old-school” classic aesthetic with memorable melodies, rather than the atmospheric soundscapes which seem to be in favor in big role-playing titles. Sound changes everything, so with the music and a medieval city sound environment, the scene really does come to life as you can see in the video.

We are not alone.

Yep, there are NPCs walking around in the city. Before you ask, a quick disclaimer: the two city dwellers you see in the video were not modeled by me – they are purchased assets which I retextured. Same goes for a few assets which you see in the city, such as the market stalls or trees: Unity’s asset store is a wonderful asset (ha ha) for indie developers, helping us get the development going. Some of these may or may not end up in the final version of the game, and if they do, they will probably be modified. The trick I think is to hit a right balance between some common assets you might have seen in a different game (especially real-world objects: a barrel is a barrel, a horse is a horse…), and enough original material to make the game feel unique (weapons, monsters, key plot characters).

But anyway, the world starts to be populated, characters can walk around and you can discuss with them. The AI and dialog systems were also greatly improved, which I will cover more in detail in subsequent posts. For now, as an example you can see in the video, the NPCs are conscious of the party and other creatures’ movements around them and can turn their head around to follow. This alone makes night & day difference in making characters more natural and less robotic.

Mountain Shadow's central market square at sunset.

Mountain Shadow’s central market square at sunset.

What time is it?

I’ve also started incorporating a night/day cycle and a weather system, taking an existing solution for Unity as a starting point, and working on recoding and adapting it to the game’s needs. In any case, time now passes, the sun moves around and the lighting changes color with dawn/sunset, as you can see in the sunset screenshot above. Rain kind-of works, snow not yet, and night-time is not ready to show either; I need first to code a scriptable time component which you will for example be able to add to lanterns in the city to make them light-up only at night.


 

Phew. Enough for today, off to watch the FIFA World Cup. Comments, questions? Don’t hesitate, and if you’re not yet following DarkDale on facebook, please do so: https://www.facebook.com/darkdalerpg.

    4 Comments

  1. Wow, so glad to hear about Darkdale. It seems you are making amazing progress. Keep up the good work, Georges 🙂

    cromcrom

    July 8, 2014

  2. Looking great! May I put in an early request for an invert Y axis option for the mouselook? MMX Legacy was missing this option much to my annoyance!

    Keep up the good work. 🙂

    Daniel King

    July 8, 2014

    • Of course, I’ll add it in, thanks for the suggestion!

      Georges Dimitrov

      July 8, 2014

  3. Cheers! 😀

    Daniel King

    July 8, 2014

Post a Reply

Your email address will not be published. Required fields are marked *